Přístup k objektům pomocí VisualLISPu
Kategorie » téma: LISP
02.08.2010 11.01 | | Komentáře: 0 komentářů | Přečteno: 10310x
V předchozím příspěvku “Nástroj pro rychlé zjištění informací o entitě” jsme si vytvořily nástroj, který do příkazové řádky vypíše vlastnosti vybraného objektu. Protože jsme v tomto příspěvku již mírně zasáhli do oblasti VisualLISPu ukážeme si v dalším volném pokračování princip práce s vlastnostmi objektu právě pomocí tohoto programovacího jazyka.
VisualLISP nahrazuje a rozšiřuje původní AutoLISP, přitom ale umí pracovat se staršími programy napsanými v AutoLISPu a i s jeho funkcemi. Hlavní přínos VisualLISPu je umožnění přístupu k objektům AutoCADu a ostatních aplikací na AutoCADu založených pomocí rozhraní ActiveX (což tedy z pohledu roku 2010 není zas taková bomba). Pro uživatele to prakticky přináší mimo jiné daleko pohodlnější přístup k objektům a jejich vlastnostem.
Na začátek vytvoříme ve VisualLispu jednoduchou funkci, která bude podobná nástroji z předchozího příspěvku. Příkazem VLIDE nebo VLISP zobrazíme editor kódu VisualLISPu. Pomocí ikony, přes File / New File nebo pomocí Ctrl+N založíme a uložíme nový soubor, který pojmenujeme třeba VlastnostiEntiy.lsp
Kód prvního programu bude vypadat následovně:
(defun c:info ()
(vl-load-com)
(setq entity1 (entsel "\nVyberte objekt: ")
entity2 (car entity1)
vla-entity (vlax-ename->vla-object entity2)
)
)
K tomu uveďme pár základních informací.
LIST je specifický tip proměnné charakteristický právě pro Visual nebo AutoLISP. Vždyť LISP pochází s LISt Processing. Jednoduše řečeno je LIST skupina dat, různého typu seskupená pod jednou proměnnou. Proměnná typu LIST může obsahovat celá čísla, reálná čísla, textové řetězce… nebo další LIST. V našem případě, obsahuje LIST dva elementy. Na prvním místě [0] je to jméno entity a na druhém místě [1] souřadnice výběrového bodu – tedy kam jsme klepli při výběru entity. Tento bod nemusí nutně ležet na vybrané entitě. Mimochodem právě tento element je další list. Poklepeme-li si na něj zobrazí se nám v celé své kráse.
Protože nás více zajímá samotná vybraná entita než výběrový bod, soustředíme se na první element listu. Zavedeme novou proměnnou entity2, do níž pomocí funkce car vložíme první element LISTu z proměnné entity1. Funkce car obecně slouží k odfiltrování prvního elementu listu.
Doposud jsme s vybranou entitou pracovali jen pomocí funkcí AutoLISPu. Funkcí vlax-ename->vla-object převedeme vybranou entitu na VLA objekt a můžeme na něj tak aplikovat funkce VisualLISPu.
Protože každá funkce musí být ve VisualLISPu uzavřena v závorkách, je závorkou na předposlední řádce ukončena funkce setq a na poslední řádce pak funkce defun
Jak je tedy vidět pomocí funkce setq lze definovat více proměnných najednou. Stejný význam by měl i následující zápis.
(defun c:info ()
(vl-load-com)
(setq entity1 (entsel "\nVyberte objekt: "))
(setq entity2 (car entity1))
(setq vla-entity (vlax-ename->vla-object entity2))
)
Nyní můžeme poklepat na proměnnou vla-entity tak, aby se vybrala do bloku (zamodřila) a klepneme na ikonu Inspect. Objeví se dialogové okno s vlastnostmi entity, které odpovídá výpisu do příkazové řádky nástroje na zjištění vlastností entity z předchozího příspěvku. Vypsané vlastnosti se samozřejmě liší podle toho, jaký objekt vybereme. V případě na obrázku vpravo byla vybrána kružnice. |
|
Jak jsme uvedli, každá funkce ve VisualLISPu musí být v závorkách. Za otevírací závorkou je uvedeno jméno funkce (modře) a dále následují její parametry. Parametrem může ovšem být i další funkce. Tímto způsobem lze do sebe jednotlivé funkce vnořovat. Použitím tohoto pravidla můžeme celý program zjednodušit tak, že bude podobný nástroji z předchozího příspěvku.
(defun c:info ()
(vl-load-com)
(setq vla-entity (vlax-ename->vla-object(car (entsel "\nVyberte objekt: "))))
)
Pokud provedeme jakékoliv změny v kódu funkce, musíme ji před odzkoušením znovu načíst do aktuálního výkresu pomocí ikony Load Active Edit Window
Poklepeme-li na jakoukoliv vlastnost, která se zobrazuje v dialogovém okně Inspect: VLA-OBJECT objeví se další okno s podrobnějšími informacemi.
Asi Vás již napadlo, že jakmile se dostaneme k takto naservírovaným vlastnostem objektů, je již velice snadné je pomocí VisualLISPu načítat a měnit. To bude obsahem příštího příspěvku.
Jan Panoch
Související články:
1) "Nástroj pro rychlé zjištění informací o entitě", Jan Panoch, 26.7.2010
2) "Přístup k objektům pomocí VisualLISPu", Jan Panoch, 2.8.2010
3) "Přístup k vlastnostem objektům pomocí VisualLISPu", Jan Panoch, 23.8.2010
4) "Zapsání textu pod kótovací čáru pomocí VisualLISPu", Jan Panoch, 23.8.2010
5) "Opakované zapsání textu pod kótovací čáru pomocí VisualLISPu", Jan Panoch, 23.8.2010
6) "OpenDCL", Jan Panoch, 3.9.2010
7) "Příklad vytvoření dialogu v OpenDCL Studiu", Jan Panoch, 6.9.2010
8) "Obslužný kód pro ovládací prvky OpenDCL", Jan Panoch, 13.9.2010
9) "Spojení lsp funkce a odcl dialogu v jeden soubor", Jan Panoch, 13.9.2010
10) "Co je třeba k běhu funkcí s ODCL dialogy", Jan Panoch, 13.9.2010
11) "Funkce na výpočet průřezových charakteristik s ODCL paletou", Jan Panoch, 13.9.2010
(odkazy se svolením autora článků doplnil JT)
Komentáře:
Tento článek zatím neobsahuje žádné komentáře.