ARKANCE - globální Platinum partner Autodesk ARKANCE | KONTAKT - CZ | SK | EN | DE
Registrujte se na 22. ročník konference CADfórum 2025 - 30.9. Zámek Valeč.
Přes 119.000 registrovaných u nás, celkem 1.098.000 registrovaných (CZ+EN), přes 53.000 CAD/BIM bloků. Vyzkoušejte nový přesný Inženýrský kalkulátor a aktualizovaný Generátor čarových kódů.
RSS kanál - CAD tipy RSS tipy
RSS diskuze

Diskuze Diskuzní fórum, poradna

?
CAD diskuze, rady, výměna zkušeností

CAD Fórum - Homepage Veřejné diskuzní fórum k CAD aplikacím - ptejte se na libovolné otázky týkající se oboru CAx, podělte se o vaše znalosti a zkušenosti s programy AutoCAD, Inventor, Revit, Fusion, 3ds Max, Vault a s dalšími CAD/BIM/PDM aplikacemi. Zaregistrujte se nebo se přihlašte a zašlete váš příspěvek do odpovídajícího fóra. Viz další informace o CAD Fóru. Nechcete se registrovat? Zeptejte se v naší Facebook poradně.
Fórum nenahrazuje technický support firmy ARKANCE (CAD Studio) - přímá podpora pro zákazníky funguje na helpdesk.arkance-systems.cz
  FAQ FAQ  Prohledat fórum   Události   Registrovat Registrovat  Přihlásit Přihlásit

Téma uzavřenopořadí příkazů v makrech

 Odpovědět Odpovědět archiv
Autor
Petr75 Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 16.úno.2007
Lokalita: ČR (JM)
Používám:
AutoCAD LT 2025
Stav: Offline
Bodů: 438
Přímý odkaz na tuto zprávu Téma: pořadí příkazů v makrech
    Zasláno: 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.

Zpět nahoru
Sedláček Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 15.dub.2005
Lokalita: Czech Republic
Používám:
AutoCad 2024 LT
Stav: Offline
Bodů: 384
Přímý odkaz na tuto zprávu Zasláno: 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))

Zpět nahoru
Sedláček Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 15.dub.2005
Lokalita: Czech Republic
Používám:
AutoCad 2024 LT
Stav: Offline
Bodů: 384
Přímý odkaz na tuto zprávu Zasláno: 29.říj.2012 v 14:11
Ještě pro doplnění - pro ladění DIESELu nastavte proměnné:
menuecho 8
macrotrace 1
Zpět nahoru
Petr75 Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 16.úno.2007
Lokalita: ČR (JM)
Používám:
AutoCAD LT 2025
Stav: Offline
Bodů: 438
Přímý odkaz na tuto zprávu Zasláno: 29.říj.2012 v 15:39
S přidanými uvozovkami to nefunguje vůbec.
Zpět nahoru
Sedláček Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 15.dub.2005
Lokalita: Czech Republic
Používám:
AutoCad 2024 LT
Stav: Offline
Bodů: 384
Přímý odkaz na tuto zprávu Zasláno: 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))

Zpět nahoru
Petr75 Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 16.úno.2007
Lokalita: ČR (JM)
Používám:
AutoCAD LT 2025
Stav: Offline
Bodů: 438
Přímý odkaz na tuto zprávu Zasláno: 30.říj.2012 v 07:36
Děkuji za snahu, ale takhle to také nefunguje.
Zpět nahoru
Sedláček Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 15.dub.2005
Lokalita: Czech Republic
Používám:
AutoCad 2024 LT
Stav: Offline
Bodů: 384
Přímý odkaz na tuto zprávu Zasláno: 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))
 
 
Zpět nahoru
Petr75 Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 16.úno.2007
Lokalita: ČR (JM)
Používám:
AutoCAD LT 2025
Stav: Offline
Bodů: 438
Přímý odkaz na tuto zprávu Zasláno: 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é.

Zpět nahoru
Sedláček Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 15.dub.2005
Lokalita: Czech Republic
Používám:
AutoCad 2024 LT
Stav: Offline
Bodů: 384
Přímý odkaz na tuto zprávu Zasláno: 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


Upravil Sedláček - 30.říj.2012 v 17:06
Zpět nahoru
Petr75 Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 16.úno.2007
Lokalita: ČR (JM)
Používám:
AutoCAD LT 2025
Stav: Offline
Bodů: 438
Přímý odkaz na tuto zprávu Zasláno: 30.říj.2012 v 22:50
Zajímavé. Ke konci jsem se v těch uvozovkách začal ztrácet.
Zpět nahoru
Sedláček Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 15.dub.2005
Lokalita: Czech Republic
Používám:
AutoCad 2024 LT
Stav: Offline
Bodů: 384
Přímý odkaz na tuto zprávu Zasláno: 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).
 
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
Avatar
ARKANCE

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám:
Implementujeme řešení Autodesk
Stav: Offline
Bodů: 21967
Přímý odkaz na tuto zprávu Zasláno: 01.lis.2012 v 16:14

Příkazy SETENV a GETENV 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)
ARKANCE CZ - arkance.world
(podpora viz helpdesk.arkance-systems.cz)
Zpět nahoru
Sedláček Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 15.dub.2005
Lokalita: Czech Republic
Používám:
AutoCad 2024 LT
Stav: Offline
Bodů: 384
Přímý odkaz na tuto zprávu Zasláno: 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 ....
Zpět nahoru
Petr75 Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 16.úno.2007
Lokalita: ČR (JM)
Používám:
AutoCAD LT 2025
Stav: Offline
Bodů: 438
Přímý odkaz na tuto zprávu Zasláno: 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.
Zpět nahoru

Pro technickou podporu CAD
kontaktujte Helpdesk

Příbuzné CAD tipy:
Tip 9349:Jak přesunout všechny obrázky nebo šrafy dospod, pod kresbu?
Tip 6747:Systém nebude přihlížet k pořadí vykreslování.
Tip 5832:Jak změnit pořadí kreslení objektů podle barev?
Tip 1549:Nefunguje příkaz Pořadí uvnitř jednoho výkresu.
Tip 6333:Jak kreslit šrafy automaticky vždy dospod (pod ostatní entity)?
Tip 6326:VIPPořadí načítání souborů ACAD.LSP, ACADDOC.LSP, ACAD20xxDOC.LSP, MENU.MNL a dalších


 Odpovědět Odpovědět

Přejít na fórum Oprávnění fóra Zobrazit panel



Stránka byla vygenerována za 0,375 sekund.