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) )