Vytisknout stránku | Zavřít okno

pořadí příkazů v makrech

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: AutoCAD
Popis fóra: Otázky kolem aplikací AutoCAD a AutoCAD LT, AutoCAD web, prohlížečů, DWG a DXF, Design Review, Navisworks, nadstavby, Drive a cloud Autodesk
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=15958
Datum vytištění: 06.zář.2026 v 08:48


Téma: pořadí příkazů v makrech
Odeslal: Petr75
Předmět: pořadí příkazů v makrech
Datum odeslání: 29.říj.2012 v 11:04
Mám makro:
^C^C_setvar;USERI2;$M=$(+,1,$(getvar,USERI1))^M_setvar;USERI3;$M=$(+,2,$(getvar,USERI1))^M_-insert blok1.dwg \1 1 0 $M=$(getvar,USERI1)^M$M=$(getvar,USERI2)^M$M=$(getvar,USERI3)^M_-insert blok2.dwg @0,-2000 1 1 0 $M=$(getvar,USERI1)^M$M=$(getvar,USERI2)^M$M=$(getvar,USERI3)^M_setvar;USERI1;$M=$(+,3,$(getvar,USERI1))

Podle mně by se měla nastavit proměnná
USERI2 na USERI1+1 a USERI3 na USERI1+2,
vložit blok1 na souřadnice zadané při vstupu, s měřítkem 1 a natočením 0.
blok má 3 atributy a chci mu postupně předat čísla z USERI1, USERI2 a USERI3
Toto se opakuje pro další bloky (zde uvádím jen 2, ale budu jich vkládat více).
Na konec se zvýší proměnná USERI1 o 3.

Z nějakého mně neznámého důvodu se změna proměnných USERI2 a USERI3 projeví až po skončení makra. Takže 2. a 3. atribut se nastaví s číslem o 3 menší. Při prvním použití makra, nejsou USERI2 a USERI3 definovaná, takže se použije 0.
V čem je chyba?

Sice můžu napsat makro takhle:
^C^C_-insert blok1.dwg \1 1 0 $M=$(getvar,USERI1)^M$M=$(+,1,$(getvar,USERI1))^M$M=$(+,2,$(getvar,USERI1))^M_-insert blok2.dwg @0,-2000 1 1 0 $M=$(getvar,USERI1)^M$M=$(+,1,$(getvar,USERI1))^M$M=$(+,2,$(getvar,USERI1))^M_setvar;USERI1;$M=$(+,3,$(getvar,USERI1))

Ale to budu muset stejnou hodnotu víckrát počítat.




Odpovědi:
Odeslal: Sedláček
Datum odeslání: 29.říj.2012 v 14:09
Zde by měly pomoci "uvozovky". Nejsem tak zběhlý, abych je bez ladění doplnil přesně, ale zkuste je doplnit viz citace. 
 
 
Původně odeslal(a) Petr75 Petr75 napsal(a):

Mám makro:
^C^C_setvar;USERI2;$M=$(+,1,$(getvar,USERI1))^M_setvar;USERI3;$M=$(+,2,$(getvar,USERI1))^M_-insert blok1.dwg \1 1 0 "$M=$(getvar,USERI1)"^M"$M=$(getvar,USERI2)"^M"$M=$(getvar,USERI3)"^M_-insert blok2.dwg @0,-2000 1 1 0 "$M=$(getvar,USERI1)"^M"$M=$(getvar,USERI2)"^M"$M=$(getvar,USERI3)"^M_setvar;USERI1;$M=$(+,3,$(getvar,USERI1))



Odeslal: Sedláček
Datum odeslání: 29.říj.2012 v 14:11
Ještě pro doplnění - pro ladění DIESELu nastavte proměnné:
menuecho 8
macrotrace 1


Odeslal: Petr75
Datum odeslání: 29.říj.2012 v 15:39
S přidanými uvozovkami to nefunguje vůbec.


Odeslal: Sedláček
Datum odeslání: 29.říj.2012 v 16:34
Minule jsem se s tšmí uvozovkami nějak moc rozjel. Asi by měly stačit:
 
 
[QUOTE=Petr75]Mám makro:
^C^C_setvar;USERI2;"$M=$(+,1,$(getvar,USERI1))^M_setvar;USERI3;$M=$(+,2,$(getvar,USERI1))"^M_-insert blok1.dwg \1 1 0 $M=$(getvar,USERI1)^M$M=$(getvar,USERI2)^M$M=$(getvar,USERI3)^M_-insert blok2.dwg @0,-2000 1 1 0 $M=$(getvar,USERI1)^M$M=$(getvar,USERI2)^M$M=$(getvar,USERI3)^M_setvar;USERI1;$M=$(+,3,$(getvar,USERI1))



Odeslal: Petr75
Datum odeslání: 30.říj.2012 v 07:36
Děkuji za snahu, ale takhle to také nefunguje.


Odeslal: Sedláček
Datum odeslání: 30.říj.2012 v 09:12
Tak ještě jednou, tentokrát jsem to i vyzkoušel a mělo by to fungovat. Pokud ne, tak si zapněte ty výše zmiňované proměnné (menuecho=8, macrotrace=1) a případně vystavte co vám bude Autocad hlásit.
 
 
Původně odeslal(a) Petr75 Petr75 napsal(a):

Mám makro:
^C^C_setvar;USERI2;$M=$(+,1,$(getvar,USERI1))^M_setvar;USERI3;$M=$(+,2,$(getvar,USERI1))^M_-insert blok1.dwg \1 1 0 """$M=$(getvar,USERI1)^M$M=$(getvar,USERI2)^M$M=$(getvar,USERI3)"""^M_-insert blok2.dwg @0,-200 1 1 0 """$M=$(getvar,USERI1)^M$M=$(getvar,USERI2)^M$M=$(getvar,USERI3)"""^M_setvar;USERI1;$M=$(+,3,$(getvar,USERI1))
 
 


Odeslal: Petr75
Datum odeslání: 30.říj.2012 v 13:18
Tentokrát to již funguje. Přidal jsem ještě další 2 bloky, ale asi mám makro již moc dlouhé.
Udělal jsem ještě zkrácení:
- _setvar;USERIx jsem zkrátil na USERx
- ^M jsem nahradil znakem ;
Ale pořád to je dlouhé. Dočetl jsem se, že makro má omezení na 256 znaků, ale délka výrazu $M=... se počítá až vyhodnoceného výraz.
Škoda, že v nápovědě AutoCADu jsou minimální informace u makrech a výrazech DIESEL a na internetu něco najít, je docela obtížné.



Odeslal: Sedláček
Datum odeslání: 30.říj.2012 v 16:53
Jako ukázka využití uvozovek v DIESELu se mi líbí následující makro. Po zadání 4 bodů se mezi mimi vykreslí čtyřúhelník. Před spuštěním makra je třeba zapnout _SNAP (KROK). Před použitím výraz v nějakém textovém editoru (NOTEPADu) převeďte do jednoho řádku. 
 
^Cid;\$m=id;\$m=id;\$m=id;\$m=_line;$(getvar,lastpoint);"$(getvar,lastpoint);;
_line;$(getvar,lastpoint);""$(getvar,lastpoint);;_line;$(getvar,lastpoint);""""$(getvar,lastpoint);;
_line;"""""""$(getvar,lastpoint);"""""""$(getvar,lastpoint);;"""""""^C


Odeslal: Petr75
Datum odeslání: 30.říj.2012 v 22:50
Zajímavé. Ke konci jsem se v těch uvozovkách začal ztrácet.


Odeslal: Sedláček
Datum odeslání: 01.lis.2012 v 15:52
Původně odeslal(a) Petr75 Petr75 napsal(a):

Tentokrát to již funguje. Přidal jsem ještě další 2 bloky, ale asi mám makro již moc dlouhé.
Udělal jsem ještě zkrácení:
- _setvar;USERIx jsem zkrátil na USERx
- ^M jsem nahradil znakem ;
Ale pořád to je dlouhé. Dočetl jsem se, že makro má omezení na 256 znaků, ale délka výrazu $M=... se počítá až vyhodnoceného výraz.
Škoda, že v nápovědě AutoCADu jsou minimální informace u makrech a výrazech DIESEL a na internetu něco najít, je docela obtížné.

 
Když jsem před lety experimentoval s DIESELem tak jsem omezení na délku znaků řešil tak, že jsem část kódu uložil pomocí _SETENV (ukládá se do REGISTRY Windows) při tvorbě makra  a pak jej v  makru načetl pomocí _GETENV. Fungovalo to ale pouze v Autocadu LT - plná verze neznala příkazy _SETENV a _GETENV (bylo to v A2002LT - jak to je v nových verzích nevím). Opět bylo nutno experimentovat s uvozovkama, aby načítání proběhlo až v době, kdy už bude část makra zpracována (po několika průchodech interpretem DIESELu).
 


Odeslal: Vladimír Michl
Datum odeslání: 01.lis.2012 v 16:14

Příkazy [CMD]SETENV[/CMD] a [CMD]GETENV[/CMD] jsou stále jen LT-příkazy. Plná verze má k tomuto účelu funkce (setenv) a (getenv). Navíc tam podobná DIESELová supermakra nejsou potřebná, protože se podstatně jednodušeji vytvoří v LISPu nebo VBA nebo v makrorekorderu.



-------------
Vladimír Michl (moderátor)
https://www.linkedin.com/in/vmichl/ - LinkedIn , Autodesk Expert Elite


Odeslal: Sedláček
Datum odeslání: 02.lis.2012 v 13:35
Pokud máte po přidání dalších dvou bloků makro již moc dlouhé, je možné váš algoritmus jinak.
Např. vložit nejprve bloky s nadefinovanými (jedinečnými) texty atributů (aaa bbb ccc) a ty pak zaměnit za požadovanou hodnotu pomocí příkazu _-ATTEDIT:
 
^C^C_-insert blok1.dwg \1 1 0 aaa;bbb;ccc;_-insert blok2.dwg @0,-200 1 1 0 aaa;bbb;ccc;_setvar;USERI2;$M=$(+,1,$(getvar,USERI1))^M_setvar;USERI3;$M=$(+,2,$(getvar,USERI1)) _-attedit n n;;;aaa;aaa;"""$M=$(getvar,USERI1)""";_-attedit n n;;;bbb;bbb;"""$M=$(getvar,USERI2)""";_-attedit n n;;;ccc;ccc;"""$M=$(getvar,USERI3)""";_setvar;USERI1;$M=$(+,3,$(getvar,USERI1)) (graphscr)
 
Po odladění makra ještě doporučuji doplnit na začátek "hvězdičku" * pro opakování makra:
*^C^C_-insert ....


Odeslal: Petr75
Datum odeslání: 05.lis.2012 v 10:13
Nejdelší makro mám zatím se 4 bloky a 3x4 atribut. Hodnoty jsem počítal u každého atributu. Makro je sice delší, ale pro vyhodnocení je "kratší" a funguje. Vkládám to sem na více řádcích kvůli lepšímu přehledu, ale jinak to je jeden řádek.

^C^C
_-insert Sch_4K.dwg \1 1 0 $M=$(getvar,USERI1);$M=$(+,1,$(getvar,USERI1));$M=$(+,2,$(getvar,USERI1));$M=$(+,3,$(getvar,USERI1));
_-insert Nar_4K.dwg @0,-2500 1 1 0 $M=$(getvar,USERI1);$M=$(+,1,$(getvar,USERI1));$M=$(+,2,$(getvar,USERI1));$M=$(+,3,$(getvar,USERI1));
_-insert Pud_4K.dwg @0,-1900 1 1 0 $M=$(getvar,USERI1);$M=$(+,1,$(getvar,USERI1));$M=$(+,2,$(getvar,USERI1));$M=$(+,3,$(getvar,USERI1));
_-insert Ram_4K.dwg @0,-1900 1 1 0 _setvar;USERI1;$M=$(+,4,$(getvar,USERI1))



Ještě bych se chtěl zeptat, jak to funguje s vícenásobnými uvozovkami.



Vytisknout stránku | Zavřít okno