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.
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.
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
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.
|
|