Reaktory v prostředí MDI

Přehled informací


Práce s reaktory v prostředí MDI

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!

Příklad definice objektu reaktor a jeho nastavení na odchycení událostí ze všech dokumentů

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

Modifikování objektu reaktoru

Visual LISP nabízí tři funkce, které dokáží modifikovat objekt reaktoru:

Volání funkce vlr-reaction-set

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

Volání funkce vlr-data-set

  (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".

Volání funkce vlr-owner-add

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

Volání funkce vlr-owner-remove

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

Vyjmutí reaktoru

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.

Příklad použití funkcí vlr-remove, vlr-add a 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)

Rozdíl a použití přechodných a trvalých reaktorů

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říklad převedení reaktoru lineReaktor z přechodného na trvalý

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.

Důležité upozornění - co jsou reaktory

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.