| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Diesel User-Variablen mit Anomalie bei Wertzuweisung (2055 / mal gelesen)
|
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 28. Dez. 2017 09:39 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, vielleicht habe ich über's Fest zuviel gegessen!? Hier noch ein kleines Problem für dieses Jahr. Bei Diesel-Ausdrücke mit User-Variablen gibt es ein seltsames Verhalten. ^C^Cusers1;$M=$(getvar,ctab);users2;$M=$(getvar,users1); ctab (aktuelles Layout) wird in users1 gespeichert, aber users2 wird auf den Wert von users1 gesetzt, den users1 vor Ausführen des Macros hatte! Ist das normal? Ist die Reihenfolge der Abarbeitung in Diesel nicht von links nach rechts? Nachweihnachtliche Grüße Archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 28. Dez. 2017 11:39 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
OK, es ist zwar kein Lisp, aber warum nicht Der Umfang der Nahrungsaufnahme trägt nichts zu deinem Problem bei, da bin ich mir recht sicher. Einen Workaround kann ich dir ggf aufzeigen, bei der Erklärung des Ganzen fällt es mir jedoch schwer. 1. Ja, das ist normal. 2. Doch, es wird von links nach rechts und von innen nach aussen abgearbeitet. 3. Die erste Variable is bereits auf den richtigen Wert gesetzt wenn du USERS2 angehst, dies ist leicht nachweisbar. 4. <eine ordentliche Erklärung habe ich nicht, daher verzichte ich auf peinliche Versuche> Nur eine hilflose Aussage möchte ich noch vor Punkt.5 machen: Dies betrifft ausschließlich den Fall wenn der Variablenwert durch einen DIESEL-Ausdruck übergeben wurde, Stelle dir ein Screenshot der Variablen bei Makrostart vor, dieser wird bei Änderungen im Verlauf des Makros synchronisiert es sei denn der Variablenwert wurde via DIESEL übermittelt {macht in der mir bekannten namespace Welt keinen Sinn, denn das setzen der Variable erfolgt ja nicht mit DIESEL sondern via Befehl - nur der (akzeptierte) neue Wert wird durch DIESEL übergeben.} 5. Workarounds AutoCAD: Setze den Wert mit Lisp (setvar "USERS1" (getvar "CTAB")) Da du userS nutzt hast du ja AutoLisp zur Verfügung.. (wobei dein Beispiel wohl nur als einfaches Beispiel für die Problematik dienen soll?, denn ansonsten hätte man ja beide Variablen mit (getvar,ctab) füttern können)
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 28. Dez. 2017 12:22 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, auf dich ist immer Verlass! Also bringt das hier auch nichts: ^C^Csetvar;users1;$M=$(getvar,ctab);setvar;users2;$M=$(getvar,users1); "Da du userS nutzt hast du ja AutoLisp zur Verfügung.."; AutoLisp bei mir, aber LT-Stationen haben also kein userS. Das ist dann das Ende meiner Idee. Mein Ziel war immer noch, auf LT-Systemen pdf-Dateien durch -plot mit layoutname.pdf und nicht dwgname-layoutname.pdf zu erzeugen. Wird wohl nichts, da die LT-System (wie ich gerade herausbekommen habe) nicht einmal "ctab" unterstützten. Vielen Dank und einen guten Rutsch ins neue Jahr Archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 28. Dez. 2017 16:05 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
1.) Richtig, das Makro wird auch nicht funktionieren da der Wert für Users1 durch DIESEL übergeben wird (warum die Problematik besteht ist mir unbekannt, die Tatsache jedoch schon)2.) Dann bin ich ja froh meinen kleinen Hinweis geschrieben zu haben, auch wenn dieser womöglich falsch interpretiert wurde - im Ergebnis liegst du richtig: LT hat keine USERS1-5 Variable. 3.) Natürlich gibt es in LT die Variable CTAB / kein Unterschied zu AutoCAD. 4.) Du hast vorher auch auch in der letzten Antwort nur Teilstücke deiner Aufgabe gezeigt/genannt daher fällt die Info ebenso bruchstückhaft aus: a) Das fehlen von USERS1-5 ist eigentlich nicht schlimm in LT, je nach Aufgabe kann man eigene Umgebungsvariablen nutzen was in AutoCAD nicht geht ohne Lisp (siehe vorherige Antwort setenv/getenv). b) Wenn die Aufgabe einfach die Automatisierung von -PLOT ist und die Dateinamen-Übergabe als "<Layoutname>", Wozu benötigt man dann eine Variabel in der man man den Layoutnamen speichert, das steht ja bereits in CTAB drin!? {vermutlich fehlt hier ein Bruchstück zu deiner Aufgabe in der Beschreibung} Frage: In welches Verzeichnis soll die PDF gespeichert werden und falls es nicht immer das gleiche fixe Verzeichnis sein soll: Wie willst du dies im Makro umsetzen? ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Grebe Mitglied
Beiträge: 536 Registriert: 16.12.2002
|
erstellt am: 29. Dez. 2017 10:53 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Mann kann aber die Ausführung eines Teilausrucks verzögern (so in etwa nennt sich das glaube ich...) Bei Deinem ersten Kontrukt würde reichen: ^C^Cusers1;$M=$(getvar,ctab);users2;$(getvar,users1); Dann werden beide getvars durch das $M= gleichzeitig abgearbeitet und erst danach die Ergebnisse an die Variablen weiter gereicht. Nimmt man ^C^Cusers1;$M=$(getvar,ctab);users2;"$M=$(getvar,users1);" wird zuerst nur das erste $M=(getva.. abgearbeitet. Durch die "" wird das zweite erst dann aufglöst, wenn das Gesamtkontrukt von links nach rechts bis zu dieser Stelle abgearbeitet wurde und nimmt dann schon den neuen Wert von users1. Mathias [Diese Nachricht wurde von Grebe am 29. Dez. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 29. Dez. 2017 11:28 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Bis auf einen kleinen Haken in der Erklärung: DANKE!Gleich zwei Dinge gelernt die mir so nicht bewußt waren, so macht der CAD.de-Jahresabschluss Spaß und mein U-Konto sinkt um 19Punkte Der kleine Haken in der Erklärung: Die Systemvariable wird sehr wohl bereits direkt nach dem ersten Ausdruck gesetzt, also direkt nach dem setzen von User1 auf den aktuellen ctab-Wert ist der Wert der Variable auch wirklich schon geändert - leicht nachweisbar. Daher freue ich mich zwar über neue Erkenntnisse zur Lösung, aber das Verständnis für das Problem fehlt mit leider weiterhin völlig. Jetzt frage ich mich: Soll ich dies weiter hier diskutieren oder machen wir per PM weiter?
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 29. Dez. 2017 11:32 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, USERx1-5 war der Versuch, den Wert von Systemvariablen (z.B. ucsfollow) vor der Ausführung eines Befehls-Macros zu speichern. Danke Mathias für die "geht so doch"-Lösung! Die "billigen" Stationen nutzen nicht LT sondern liNear CADinside. Das ist leider wirklich ohne CTAB (habe ich gestern beim Testen entdeckt). CTAB war in früheren Versionen enthalten - keine Ahnung, warum es eleminiert wurde. Deshalb geht das hier aktuell nur noch unter AutoCAD: ^C^C-plot;;;PDF;;L:/PDF/$M=$(getvar,ctab);;_Y; Der pdf-Plot soll also immer in L:\PDF gespeichert werden. Alternativ wäre auch das Verzeichnis der dwg-Datei möglich, aber nur mit <Layoutname>.pdf. Das fehlende Unterstützung von CTAB ist wirklich sehr ärgerlich. Oder kann man CTAB aktivieren? Gruß Archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Grebe Mitglied
Beiträge: 536 Registriert: 16.12.2002
|
erstellt am: 29. Dez. 2017 11:44 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Wenn, dann richtig - also hier weiter: Das $M= leitet die Evaluierung aller $-Ausdrücke ein. Im ersten Fall wird also quasi in einem Schritt der Wert von ctab und von user1 ermittelt. Dann werden diese Werte von links nach rechts den Variablen zugewiesen. Deshalb wird hier der "vorherige" Wert von user1 verwendet. Im zweiten Fall werden mit dem ersten $M= nur die außerhalb der "" liegenden $-Ausdrücke evaluiert (verzögerte Auswertung) und dann der aktuelle Wert von ctab an user1 übergeben. Danach kommt dann die Abarbeitung des ""-Ausdrucks, was aber eine erneute Evaluierungsaufforderung $M= für die $-Ausdrücke innerhalb der "" erfordert. Ich hatte lange Zeit nur LT zur Verfügung - deshalb bin ich früher recht tief in die "DIESEL-Programmierung" eingestiegen. Nachdem dann alles Wichtige umgesetzt war, habe ich das nicht mehr gebraucht und jetzt ploppen nur noch vereinzelte Erinnerungsstücke hoch... Mathias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 29. Dez. 2017 11:58 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Ich kenne mich mit OEM nicht aus, aber eine Option zum aktivieren/deaktivieren scheint mir unwahrscheinlich, logischer wäre es da schon wenn man verschiedene Versionen hat und je nach dem was für ein Paket(OEM) man für sein Produkt(linear) einkauft ist es dann im Umfang enthalten oder nicht. Aber wie gesagt: Davon habe ich keinen Schimmer ob/welche OEM-Pakete es da gibt, bisher denke ich es gibt nur ein Paket. http://usa.autodesk.com/adsk/servlet/index?id=790640&siteID=123112 Dann kommt es drauf an was der Hersteller von den Funktionen frei gibt (wieviel einfluß er dabei auf systemvariablen hat ist mir unbekannt) Einzig was man schnell recherchieren kann: Gibt es OEM-basierte Produkte in der die Variable vorhanden ist? Laut Doku JA! Google: Cadgen FireCAD 2018 Command Reference.pdf ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |