Přístup k vlastnostem objektů pomocí VisualLISPu

Kategorie » téma: LISP

23.08.2010 09.21 | Jan Panoch | Komentáře: 2 komentářů | Přečteno: 6924x

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)

Komentáře:

#1 | Miroslav Holý » --

06.09.2010 09.01

Hodilo by se sem dát odkazy na podobné temata a na pokračování..

#2 | Jan Tošovský » Odkazy na články na pokračování

06.09.2010 09.21

Pro články týkající se podobných témat byly vytvořeny kategorie... LISP apod. Též můžete filtrovat např. podle autora. V některých novějších článcích jsou již odkazy na předchozí příspěvky obsaženy.

Přidat komentář

 *
 *
 
 *
 * Opište text z obrázku. Není potřeba rozlišovat velká a malá písmena.

*) Povinné položky jsou označeny hvězdičkou.