Užitečné systémové proměnné a nástroje na změnu jejich hodnot

Kategorie » téma: AutoCAD Architecture

26.05.2009 21.26 | Jan Panoch | Komentáře: 4 komentářů | Přečteno: 15438x

U objektů AutoCADu, které mají vlastnost Annotative může někdy obtěžovat zobrazení všech velikostí pro zadaná měřítka daného objektu po jeho výběru. Obzvláště jedná-li se například o kótu či text, který vykrývá pozadí za objektem. Zobrazení všech velikostí pro k objetu náležející měřítka řídí systémová proměnná SELECTIONANNODISPLAY, která nabývá hodnot 0/1. Po nastavení této proměnná na hodnotu 0 se bude i po výběru objektu zobrazovat pouze velikost pro aktuální měřítko.

 
Abychom, až budeme chtít nastavit zobrazování zpět, nemuseli znovu vypisovat dlouhé jméno systémové proměnné do příkazového řádky, můžeme si na přepínání proměnné vytvořit zvláštní nástroj v Tool Paletě. Pomocí Ctrl+4 nebo z nabídky Start spustíme Content Browser, kleneme na Stock Tool Catalog a dále vybereme Helper Tools. Do kapátka nabereme Command Tool a přetáhneme ho na Tool Paletu.
 
 

 

Na Command Tool v Tool Paletě klepneme pravým tlačítkem a zvolíme poslední položku Properties. Příkaz si přejmenujeme smazáním Command Tool. V tomto případě jsem příkaz přejmenoval na jméno proměnné. Dále klepneme na ikonu v pravém sloupci u řádku Command. Sem vepíšeme krátkou lispovskou funkci, která nejprve zjistí aktuální nastavení této systémové proměnné a změní ji na opačnou hodnotu.

Ke zjištění hodnoty proměnné použijeme příkaz "getvar" (get variable). Obdobně příkaz na nastavení hodnoty proměnné je "setvar" (set variable). Protože potřebujeme zjistit zda proměnná má či nemá nastavenu jednu z hodnot použijeme příkaz If. Jeho syntaxe je následující:
(If (podmínka) (výraz1, který se provede, jestliže je podmínce vyhověno) (výraz2, který se provede, jestliže podmínce vyhověno není))
Pro úplnost dodejme, že výraz2 je nepovinný. My ho ale potřebovat budeme.
Poslední věc, kterou potřebujeme znát je, že AutoLISP používá převrácenou neboli polskou logiku. Ta spočívá v tom, že při (nejen) matematických operacích se nejprve píše jméno funkce (operátor) a pak její argumenty (operandy). Chceme-li  tedy sečíst například čísla 5 a 10 musíme napsat (+ 5 10). V našem příkazu sice nic sčítat nebudeme, ale budeme používat operátor =.

Do pole command tedy napíšeme následující syntaxi

(if (= (getvar "selectionannodisplay") 1) (setvar "selectionannodisplay" 0) (setvar "selectionannodisplay" 1))

Její význam je : jestliže je selectionannodisplay = 1 pak nastav selectionannodisplay na 0, v opačném případě (jestliže je selectionannodisplay = 0) nastav selectionannodisplay na 1. Důležité je nezapomenout dát název systémové proměnné do uvozovek.

 

 

 

 

Klepnutím na tento jediný nástroj tedy budeme moci měnit nastavení systémové proměnné z nuly na jedničku a obráceně. Není nutné si vyrábět nástroje dva.
Klepnutím na OK zavřeme pole pro vkládání příkazu. Příkazu je ještě možné nastavit ikonu klepnutím pravým tlačítkem na Image v levém horním rohu dialogu Tool Properties.

Stejným způsobem si můžeme vytvořit nástroje na ostatní systémové proměnné, které ovšem nabývají pouze dvou hodnot, a které často přehazujeme. Například takto by vypadal příkaz, který bude zapínat a vypínat zobrazování šedivého pozadí za texty, do kterých jsou vložena automatická pole (Fields)
(if (= (getvar "fielddisplay") 1) (setvar "fielddisplay" 0) (setvar "fielddisplay" 1))

Příkaz na přepínání viditelnosti kamer:
(if (= (getvar "cameradisplay") 1) (setvar "cameradisplay" 0) (setvar "cameradisplay" 1))

Příkaz na přepínání viditelnosti světel:
(if (= (getvar "lightglyphdisplay") 1) (setvar "lightglyphdisplay" 0) (setvar "lightglyphdisplay" 1))

atd.

 

 

Jan Panoch

Komentáře:

#1 | Miroslav Holý » --

12.08.2010 13.23

Zajmalo by mě jak bych to mohl aplikovat na příkaz imageframe.

předem děkuji

#2 | Jan Tošovský » Nástroj pro "cyklování" hodnot systémové proměnné "imageframe" 0,1,2

20.12.2010 10.45

Jednou z možností, jak měnit nastavení např. proměnné "imageframe" je použití incrementu (1+ ..). Příkaz do výše uvedeného nástroje v článku pana Panocha by mohl vypadat takto: (if (= (getvar "imageframe") 2) (setvar "imageframe" 0) (setvar "imageframe" (1+ (getvar "imageframe")))). Další možností je v command line: uvedení daného příkazu, např. tedy "imageframe".

#3 | Miroslav Holý » Nástroj pro "cyklování" hodnot systémové proměnné "imageframe" 0,1,2

20.12.2010 12.10

Dobrý den, zkoušel jste to?

pořád mi to nefunguje..

(s hodnotou 2 jsem nepočítal, nepoužívám ji i když je možné přijít k výkresu kde bude 2 nastavena,ale i v takovém případě by se měla nastavi 0)

Dal jesm dohromady toto:

(if (= (getvar "imageframe") 0) (setvar "imageframe" 1) (setvar "imageframe" 0))

Kámen úrazu bude nejspíše v tom že se domnívám že imageframe nejspíš není proměná, ale funkce, nebo nevím? Nenachází totiž v SYSVDLG.

Jelikož se o takové vychytávky zajmám jen okrajově tak jsem to vzdal..

#4 | Jan Tošovský » Nástroj pro "cyklování" hodnot systémové proměnné "imageframe" 0,1,2

20.12.2010 15.34

Jakou máte verzi produktu AutoCAD Architecture? Imageframe se tuším vyskytuje od verze 2010. Funguje mi i Vaše varianta. Příapdně se ozvěte přímo mailem či telefonicky - pracoviště Praha.

Přidat komentář

 *
 *
 
 *

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