Vytvoření obslužných funkcí reaktorů

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í.

Vytvoření obslužných funkcí reaktoru

V naší aplikaci budeme využívat dva typy reaktorů:

Obslužná funkce pro reaktor objektů

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.

Hlavní části funkce:

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.

Vlastní kód funkce:

  (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

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í.

Hlavní části funkce:

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.

Vlastní kód funkce:

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