Použití objektů ActiveX v programu AutoLISPu

Přehled informací

Výhody používání objektů ActiveX v AutoLISPu

Jistě si kladete otázku: "Má vůbec smysl používat objekty ActiveX v AutoLISPu, není to zbytečné?". Na tuto otázku je jednoduchá odpověď: "Ano, smysl to má". Tyto tvrzení doložíme následujícím příkladem:

Příklad zjištění poloměru kružnice z výkresové databáze

Z příkladu je patrné jak jednoduché je použití objektů ActiveX s AutoLISPem. Připočteme-li k jednoduchosti použití ještě podstatné zrychlení chodu programů a zpřehlednění kódu samotného, myslíme že použití ActiveX stojí za úvahu.

Ale to ještě není všechno. Objekty ActiveX umožní AutoLISPu přístup k jiným aplikacím. Tím pádem se AutoLISP vyrovnává programovacím jazykům jako je Visual Basic pro Aplikace.

Doufáme, že výše uvedenými argumenty jsme přesvědčili všechny zastánce klasického AutoLISPu.

Práce s objekty ActiveX v AutoLISPu

Následujících pár odstavců Vás naučí jak pracovat s objekty ActiveX v AutoLISPu. Než je začnete procházet doporučujeme Vám seznámit se s objektovým modelem AutoCADu a způsobem práce s rozhraním ActiveX - část ActiveX automatizace.

Spuštění podpory objektů ActiveX v AutoLISP

Standardní AutoLISP nemá podporu funkcí ActiveX. Abychom mohli používat podporu objektů ActiveX musíme nejprve aktivovat funkce Visual LISPu. Aktivace funkci Visual LISPu se uskuteční napsáním příkazu

              (vl-load-com)

Z příkazu je patrné, že nahrává podporu com objektů.

Nyní již můžeme používat funkce ActiveX v AutoLISPu

Zpřístupnění objektů AutoCADu

Abychom si zajistili přístup k objektům AutoCADu musíme nejprve navázat spojení s objektem AutoCAD application. Spojení navážeme pomocí funkce vlax-get-acad-object.

Příklad navázání objektu application:

              (setq acadObjekt (vlax-get-acad-object))

Funkce vlax-get-acad-object vrací pointer na objekt aplikace AutoCADu. Hodnota pointru je ve tvaru VLA-object (VLisp ActiveX object).

Poznámka k objektu VLA-object

Pokud se odkazujeme pomocí ActiveX funkcí, musíme specifikovat VLA-object typ. To je důvod proč nemůžeme použít funkci entget pro přístup k objektu a poté se na tento objekt odkazovat pomocí objektů ActiveX. entget totiž vrací datový typ ename.

Získání objektu Document

Abychom mohli přistupovat na objekty uložené ve výkresu AutoCADu musíme si zpřístupnit objekt Document (reprezentuje výkres v AutoCADu). Objekt Document zpřístupňuje většinu negrafických informací obsažených ve výkresu jako například:

Přístup na negrafické vlastnosti se uskuteční pomocí objektů vlastností, které mají podobná jména jako vlastnosti (př. layers).

Pointer na objekt document získáme pomocí vlastnosti objektu application - ActiveDocument. V našem příkladu jsme si pointer na objekt application uložily do proměnné acadObjekt. Zpřístupnění (získání) aktivního dokumentu uskutečníme pomocí příkazu vla-get-ActiveDocument jm_objektu_application.

Příklad získání pointru na aktivní dokument

              (setq acadDokument (vla-get-ActiveDocument acadObject))

Přístup ke grafickým objektům

Abychom mohli přistupovat ke grafickým objektům uloženým ve výkresu musíme si zpřístupnit ještě modelový nebo výkresový prostor výkresu. Výkresový prostor si můžeme zpřístupnit pomocí vlastnosti objektu Document - PaperSpace. Zpřístupnění modelového prostoru je možné pomocí vlastnosti objektu Document - ModelSpace.

Příklad získání pointru na modelový prostor dokumentu:

V našem příkladu požadujeme kreslit objekty do modelového prostoru výkresu - použijeme tedy funkci vla-get-ModelSpace:

              (setq modelProstor (vla-get-ModelSpace acadDokument))

Způsob získání jména funkce ActiveX pro použití v AutoLISPu

Pokud nevíte jaká funkce přidává například objekt do výkresu, podívejte se do referenční příručky Visual Basicu pro Aplikace. Jakmile zjistíte název metody ve VBA přidejte před ní prefix vla-. Tím jste získali jméno funkce použitelné v AutoLISPu.

Příklad nalezení jména funkce pro přidání kružnice do výkresu:

V referenční příručce Visual Basicu pro Aplikace nalezneme funkci pro přidání kružnice: addCircle. K této funkci přidáme prefix používaný v AutoLISPu - prefix vla-. Dostanete jméno funkce vla-addCircle.

Poznámka: V AutoLISPu je jedno jestli jméno funkce napíšete jako vla-AddCircle nebo vla-addcircle. Programovací jazyk AutoLISP není "case-sensitive".

V tuto chvíli máme již všechny potřebné objekty přístupné a můžeme pracovat s objekty ve výkresu.

Kompletní příklad funkce vykreslující kružnici v aktuálním výkrese pomocí ActiveX objektů z AutoLISPu

Sloučíme-li všechny úseky kódu uvedené v předchozích odstavcích a přidáme-li funkci pro vykreslení kružnice dostaneme následující kód funkce:

    (vl-load-com)           ; aktivování rozhraní ActiveX
    (defun vykresliKruznici()
      (setq acadObjekt (vlax-get-acad-object)) 
              ; získání ukazatele na objekt aplikace AutoCAD
      (setq acadDokument (vla-get-ActiveDocument acadObjekt))
              ; získání ukazatele na objekt Document (aktuální výkres)
      (setq modelProstor (vla-get-ModelSpace acadDokument)) 
              ; získání ukazatele na modelový prostor výkresu
      (setq kruznice 
        (vla-addCircle modelProstor
          (vlax-3d-point '(50.0 50.0 0.0))
                    10.0
          )
        )            ; přidání kružnice do modelového prostoru
      )              ; všimněte si vytvoření 3D bodu - střed kružnice
    )