Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Diesel User-Variablen mit Anomalie bei Wertzuweisung

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Diesel User-Variablen mit Anomalie bei Wertzuweisung (1961 mal gelesen)
archi.archi
Mitglied



Sehen Sie sich das Profil von archi.archi an!   Senden Sie eine Private Message an archi.archi  Schreiben Sie einen Gästebucheintrag für archi.archi

Beiträge: 77
Registriert: 08.10.2010

Windows 10
AutoCAD 2023
Revit 2023

erstellt am: 28. Dez. 2017 09:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 28. Dez. 2017 11:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archi.archi 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von archi.archi an!   Senden Sie eine Private Message an archi.archi  Schreiben Sie einen Gästebucheintrag für archi.archi

Beiträge: 77
Registriert: 08.10.2010

Windows 10
AutoCAD 2023
Revit 2023

erstellt am: 28. Dez. 2017 12:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 28. Dez. 2017 16:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archi.archi 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Grebe an!   Senden Sie eine Private Message an Grebe  Schreiben Sie einen Gästebucheintrag für Grebe

Beiträge: 536
Registriert: 16.12.2002

erstellt am: 29. Dez. 2017 10:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archi.archi 10 Unities + Antwort hilfreich

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 29. Dez. 2017 11:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archi.archi 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von archi.archi an!   Senden Sie eine Private Message an archi.archi  Schreiben Sie einen Gästebucheintrag für archi.archi

Beiträge: 77
Registriert: 08.10.2010

Windows 10
AutoCAD 2023
Revit 2023

erstellt am: 29. Dez. 2017 11:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Grebe an!   Senden Sie eine Private Message an Grebe  Schreiben Sie einen Gästebucheintrag für Grebe

Beiträge: 536
Registriert: 16.12.2002

erstellt am: 29. Dez. 2017 11:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archi.archi 10 Unities + Antwort hilfreich

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 29. Dez. 2017 11:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archi.archi 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz