Přístup k vlastnostem objektů pomocí VisualLISPu
Kategorie » téma: LISP
23.08.2010 09.21 | | Komentáře: 2 komentářů | Přečteno: 17401x
AutoLISP a VisualLISP obsahuje nyní přes 3700 funkcí. Přesto si díky oknu Inspect nemusíme velkou část z nich pamatovat. V mnoha případech vystačíme s funkcemi vla-get-vlastnost pro přečtení a vla-put-vlastnost pro změnu vlastností objektu. Namísto vlastnost dopíšeme jméno vlastnosti z okna Inspect. Jestliže tedy například naši první funkci z předešlého příspěvku upravíme tak, že po vybrání kružnice se do proměnné polomer uloží poloměr kružnice, doplníme následující řádek:
(setq polomer (vla-get-radius vla-entity))
Když naopak budeme chtít poloměr změnit na 1000 jednotek dopíšeme:
(vla-put-radius vla-entity 1000)
Celá funkce pak bude vypadat následovně:
(defun c:info ()
(vl-load-com)
(setq vla-entity (vlax-ename->vla-object(car (entsel "\nVyberte objekt:")))
polomer (vla-get-radius vla-entity)
)
(vla-put-radius vla-entity 1000)
)
Po načtení upravené funkce do aktuálního okna výkresu ji můžeme odzkoušet. Po zavolání funkce příkazem info jsem vyzváni k výběru objektu, vybereme tedy kružnici jejíž poloměr se po vybrání změní na 1000 jednotek. Vrátíme-li se zpět do editoru VisualLISPu a nakoukneme pomocí okna Inspect do hodnoty proměnné polomer, najdeme v ní původní velikost poloměru kružnice před jeho změnou.
To, že se jedná o funkci VisualLISPu zjistíme při psaní vla-get-vlastnost a vla-put-vlastnost z toho, že dopsáním posledního písmene funkce změní barvu – implicitně na modrou. I když se takto dá přistoupit k většině vlastností objektů u některých se můžeme setkat s tím, že pro ně předpokládaná funkce neexistuje – funkce nezmodrá. V takovém případě použijeme další dvě odlišné funkce, které lze ovšem užít naprosto obecně i třeba pro výše uvedený případ. Jedná se o funkce vlax-get-property objekt ‘vlastnost a vlax-put-property objekt ‘vlastnost. Důležité je nezapomenout na apostrof před jménem vlastnosti. Takže naše funkce se dá stejně tak napsat následovně:
(defun c:info ()
(vl-load-com)
(setq vla-entity (vlax-ename->vla-object(car (entsel "\nVyberte objekt:")))
polomer (vlax-get-property vla-entity 'radius)
)
(vlax-put-property vla-entity 'radius 1500)
)
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)