![]()
Současná implementace AutoLISPu nepodporuje práci v MDI prostředí - to znamená že současně může AutoLISP pracovat s jedním výkresem. Přesto AutoLISP umožňuje omezené použití reaktorů i pro dokumenty, které nejsou právě aktivní pomocí funkce vlr-set-notification.
Standardní nastavení obslužné funkce reaktoru je takové, že se spustí pouze tehdy je-li vygenerována událost ve chvíli kdy je aktivní dokument, který obslužnou funkci obsahuje. Abychom mohli zavolat obslužnou funkci uloženou v prostoru jmen neaktivního dokumentu použijte volání funkce vlr-set-notification následujícího tvaru:
(vlr-set-notification objekt_reaktoru 'all-documents)
Nastavení na původní hodnotu se uskuteční:
(vlr-set-notification objekt_reaktoru 'active-document-only)
POZOR: pří práci s obslužnými funkcemi můžete pouze nastavovat a získávat hodnoty z proměnných AutoLISPu, každá jiná akce vygeneruje chybu!
Vytvoření objektu reaktoru
  _$ (setq lineReaktor (vlr-object-reactor (list mojeCara) 
         "Line Reactor" '((:vlr-modified . vypisInformaci))))
  #<vlr-object-reactor>
  
  _$ (vlr-set-notification lineReaktor 'all-documents)
  #<vlr-object-reactor>
Jak je reaktor nastaven zjistíme zavoláním funkce vlr-notification:
_$ (vlr-notification lineReaktor) all-documents
![]()
Visual LISP nabízí tři funkce, které dokáží modifikovat objekt reaktoru:
(vlr-reaction-set objekt_reaktoru událost 'nová_obslužná_funkce)
Příklad použití pro náš reaktor lineReaktor:
(vlr-reaction-set lineReaktor :vlr:modified 'zkontrolujDelku)
Předchozí řádek kódu změnil obslužnou funkci reaktoru lineReaktor na funkci zkontrolujDelku.
![]()
(vlr-data-set objekt_reaktoru "nová aplikačně závislá data")
Příklad použití pro náš reaktor lineReaktor:
(vlr-data-set lineReaktor "Nový reaktor line")
Předchozí řádek kódu změnil aplikačně závislá data s reaktorem lineReaktor na hodnotu "Nový reaktor line".
![]()
(vlr-owner-add objekt_reaktoru nový_objekt)
Příklad použití pro náš reaktor lineReaktor:
(vlr-owner-add lineReaktor cara2)
Předchozí řádek kódu přidal do databáze další čáru. Při změně čáry bude vyvolána obslužná funkce vypisInformaci().
![]()
(vlr-owner-remove objekt_reaktoru starý_objekt)
Příklad použití pro náš reaktor lineReaktor:
(vlr-owner-remove lineReaktor cara2)
Předchozí řádek kódu vyjme z databáze objekt cara2.
![]()
Pokud potřebujeme ve výkresu zakázat použití některého reaktoru, můžeme tento reaktor vyjmout. Vyjmutí reaktoru, reaktor neodstraní, pouze ho zneviditelní (reaktor nebude reagovat na události). Vyjmutí reaktoru umožňuje funkce vlr-remove. Opětovná aktivace reaktoru je možná pomocí funkce vlr-add. Aby bylo možné zjistit jestli je reaktor právě aktivní (není vyjmut) je možné použít funkci vlr-added-p.
Použití reaktorů ukážeme na našem reaktoru lineReaktor. Nejprve zjistíme zda je reaktor lineReaktor aktivní:
  _$ (vlr-added-p circleReactor) 
  T  - hodnota true signalizuje, 
       že reaktor lineReaktor je aktivní
Dále reaktor vyjmeme (zneaktivníme ho):
_$ (vlr-remove circleReactor)
Provedeme opětovnou kontrolu jestli je reaktor lineReaktor aktivní:
  _$ (vlr-added-p circleReactor) 
  nil            - hodnota nil signalizuje, že reaktor
       není aktivní lineReaktor
Dále znovu aktivujeme reaktor lineReaktor:
_$ (vlr-add circleReactor)
Nakonec vyjmeme všechny reaktory z výkresu:
_$ (vlr-remove-all :vlr-object-reactor)
![]()
Hlavní rozdíl mezi trvalými a přechodnými reaktory vyplývá již z jejich názvu. Přechodné reaktory jsou po zavření výkresu ztraceny. Při dalším nahrání výkresu již nejsou znovu nahrány. Naproti tomu trvalé reaktory jsou uloženy s výkresem a při jeho dalším otevření jsou znovu nahrány a aktivovány.
AutoLISP používá standardně všechny reaktory jako přechodné. Pokud potřebujete vytvořit (převést) reaktor trvalý, musíte použít funkci vlr-pers.
Pokud používáte reaktory a nejste si jisti jakého jsou typu, můžete použít funkci vlr-pers-p, která určí typ reaktoru.
Převedení reaktoru na trvalý je velice jednoduché:
_$ (vlr-pers lineReaktor) #<vlr-object-reactor>
Pokud převedení proběhne v pořádku, je vrácen objekt reaktoru. Zjištění typu lineReaktor reaktoru:
_$ (vlr-pers-p lineReaktor) #<vlr-object-reactor>
Je-li testovaný reaktor trvalý funkce vrátí objekt reaktoru, v opačném případu vrátí nil.
![]()
Reaktor je pouze vazba mezi událostí a obslužnou funkcí, to znamená pokud nahrajete výkres s trvalým reaktorem a nenahráli byste obslužnou funkci (která není normálně součástí výkresu) zobrazí AutoCAD chybovou zprávu.
![]()