Při psaní aplikace využívající reaktorů, musíme nejprve nahrát podporu reaktorů a objektů ActiveX. Nahrání podpory zajistí příkaz (vl-load-com). Příkaz můžete napsat na začátek souboru (před definice funkcí) - tím zajistíte, že bude podpora nahrána jako první.
V naší aplikaci budeme využívat dva typy reaktorů:
Obslužná funkce pro reaktor objekt bude v našem příkladu reagovat na událost modifikace objektu. Obslužná funkce musí zajistit, aby při zavolání byly vymazány staré výplně hranice. Změní hranici a vygeneruje novou výplň oblasti.
V těle funkce je nejprve zkontrolováno jestli objekt, který poslal AutoCAD je skutečně kružnice (obsahuje vlastnost poloměr). Pokud je podmínka splněna, jsou získány data asociované s reaktorem - kružnice výplně. Objekty (pointry na objekty) jsou postupně vybírány a vymazány z modelového prostoru. Dále jsou určeny nové parametry pro vykreslení výplně. Při kreslení nové výplně jsou opět objekty výplně ukládány do pomocné proměnné objVyplne a poté přiřazeny do dat reaktoru.
(defun zmenKruh(volajObj reactorObj paramList
/ objVyplne pomocna polomer stred_kr pocet vzdalenost pol_kresl)
(if (vlax-property-available-p volajObj "Radius")
;;; test jestli objekt má vlastnost poloměr
(progn
(setq objVyplne (vlr-data reactorObj))
;;; získání objektů výplně
(while (> (length objVyplne) 0)
;;; vymazání všech objektů výplně z modelového prostoru
(setq pomocna (cdr objVyplne))
(vla-delete (car objVyplne))
(setq objVyplne pomocna)
)
;;; získání hodnot proměnných pro vykreslení nové výplně
(setq polomer (vla-get-radius volajObj))
(setq stred_kr (vla-get-center volajObj))
(setq pocet 1)
(setq vzdalenost (atof (cdr (assoc "vzdalenostke" gl_pam_hodnoty))))
(while (> polomer (* vzdalenost pocet))
;;; vykresli nové objekty výplně
(setq pol_kresl (* vzdalenost pocet))
;;; nastav aktuální poloměr
;;; každý nový objekt (nově vytvořený) je přidán do seznamu
(setq objVyplne
(cons
(vla-addCircle modelProstor stred_kr pol_kresl)
objVyplne
)
)
(setq pocet (+ pocet 1)) ;;; zmenši počet kružnic o 1
)
(vlr-data-set reactorObj objVyplne)
;;; sluč vytvořené objekty s daty reaktoru
)
)
)
![]()
Obslužná funkce pro reaktor editor DWG bude v našem příkladu reagovat na událost uložení výkresu. Obslužná funkce zajistí zobrazení dialogového boxu s informací.
Obslužná funkce vypisInformací() je vyvolána na událost uložení výkresu. V těle funkce jsou nejprve získány informace o souboru. K zobrazení informací je použit dialogové okno Alert.
(defun vypisInformaci (volajiciReaktor informace
/ jmenoSouboru velikost)
(setq jmenoSouboru (cadr informace))
;;; získání jména reaktoru z dat reaktoru
(setq velikost (vl-file-size jmenoSouboru))
;;; získání velikosti souboru
(alert
(strcat "Velikost uloženého souboru " jmenoSouboru " je "
(itoa velikost) " byt;."
)
) ;;; zobrazení informace
(princ)
)
![]()