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.