| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: 2x getvar,distance im Menü funktioniert nicht (1511 mal gelesen)
|
Andreas_Felix Mitglied
Beiträge: 18 Registriert: 19.05.2003
|
erstellt am: 19. Mai. 2003 21:10 <-- editieren / zitieren --> Unities abgeben:
Ich möchte bei A-Cad 2000LT mit einer Schaltfläche zwei Maße abnehmen und diese in zwei Umgebungsvariablen speichern? ^C^C_ucs;_o;\_dist;0,0;\_setenv;Breite;$M=$(getvar,Distance);_dist;0,0;\_setenv;Höhe;$M=$(getvar, Distance); Bei der ersten Variable (setenv;Breite) funktioniert es noch einwandfrei!! In den Wert der zweiten Variable (setenv;Höhe) wird jedoch wieder der Wert der ersten Variable angelegt!! Wieso wird nach dem zweiten mal "_dist" nicht sofort der richtige Wert in der Systemvariable "Distance" abgelegt?? Wer sich jetzt noch fragt wieso ich mit "_ucs" (neuer Nullpunkt) beginne: vereinfacht den weiteren Ablauf... Weiter's bin ich um bessere Vorschläge sehr dankbar!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian Marx Mitglied
Beiträge: 218 Registriert: 11.12.2002 AutoCad LT 200x Athon 1600XP GeForce II MX400 256 DDR RAM 60GB Drive 16xDVD Aopen 24/10/40 Brenner TV-Karte WinTV PVR 250
|
erstellt am: 19. Mai. 2003 21:34 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas_Felix
du erhälst 2x den selben wert, weil innerhalb eins macros keine daten mehr abgefragt werden. ein macro ist ein programm, das werte vom user bekommt und damit arbeitet. diesel kann werte selbst errechnen. aber reagiert nicht auf änderungen von systemvarablen oder eingaben zur laufzeit. deine 2. eingabe wird ignoriert weil sie innerhalb des makro liegt. du mußt also schon vorher, bevor $M= losgeht alles benutzeringaben abgeschlossen haben. dir wird wohl nichts anderes übrig bleiben, als die koordinaten zu extrahieren und nach vektor algebra daraus die längen zu berechnen. zumindest für den 2. punkt. etwa so: ^C^C_ucs;_o;\_dist;0,0;\_line;0,0;\;_base;@;_ucs;_e;_L;_erase;_L;;setenv;Breite;$M=$(getvar, Distance);setenv;Höhe;$(eval,$(index,0,$(getvar,insbase)));_ucs;; gruß chris
------------------ www.marx-softwaredevelop.de/ MarxCiCAD Schalungmodul für AutoCad 2000 - 2002
[Diese Nachricht wurde von Christian Marx am 19. Mai 2003 editiert.] [Diese Nachricht wurde von Christian Marx am 19. Mai 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Zeli Mitglied
Beiträge: 129 Registriert: 04.04.2003
|
erstellt am: 19. Mai. 2003 23:08 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas_Felix
Hallo Christian Ich hab da ein ganz ähnliches Problem: ^C^Csetenv;"LayerAktuell";$M=$(getvar,CLAYER);ai_molc;\setenv;"LayerAnsichtsfensterFrieren";$M=$(getvar,CLAYER);aflayer;F;$M=$(getenv,LayerAnsichtsfensterFrieren);AK;;setvar;"CLAYE R";$M=$(getenv,LayerAktuell);^Z Ich möchte im aktiven Ansichtsfenster einen Layer frieren, indem ich einen Objektlayer wähle. Da sich CLAYER während des Makros ändert geht das irgendwie nicht. Gibts dafür auch eine Lösung?? Gruss Zeli ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Grebe Mitglied
Beiträge: 536 Registriert: 16.12.2002 LT-2021, Civil3D-2021, BricsCAD V18 HP-DesignJet T1200
|
erstellt am: 20. Mai. 2003 09:04 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas_Felix
Das Ganze geht schon ... man muss halt nur eine bisschen Trixen. Das Problem ist, dass ein Makro, wenn es das erstemal auf den Befehl $M= triftt, das ganze Makro bis zu Ende auswertet. Beim Auslesen der Breite wird somit auch gleich das (getvar,distance) für die Höhe ausgewertet (mit dem gleichen Wert). Man kann diese verfrühte Auswertung allerdings durch das Setzen von Quotes unterbinden: ^C^C_ucs;_o;\_dist;0,0;\_setenv;Breite;$M=$(getvar,Distance);_dist;0,0;\_setenv;Höhe;"$M=$(getvar, Distance)"; Der Ausdruck in den Quotes wird dann erst beim nächsten $M= Befehl ausgewertet (und so weiter). Und schon klappt's (selber probiert). Wenn noch eine Verschachtelungsebene dazu soll, sind dann drei Quotes zu setzen: xxx$M=xxxx"xxxx"xxxxx"""xxx""" Näheres dazu hier http://www.idir.net/~lacy/begin.htm#formatting und hier http://www.flatmtn.com/cad/diesel-examples.html Mathias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian Marx Mitglied
Beiträge: 218 Registriert: 11.12.2002 AutoCad LT 200x Athon 1600XP GeForce II MX400 256 DDR RAM 60GB Drive 16xDVD Aopen 24/10/40 Brenner TV-Karte WinTV PVR 250
|
erstellt am: 20. Mai. 2003 10:08 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas_Felix
|
Andreas_Felix Mitglied
Beiträge: 18 Registriert: 19.05.2003
|
erstellt am: 20. Mai. 2003 21:03 <-- editieren / zitieren --> Unities abgeben:
Wahnsinn!! Nicht einmal 24 Stunden und ich bin um einiges an Basiswissen reicher!! Und dass es doch geht ist sowieso genial Also danke chris & mathias So und wenn's dann noch jemanden interessiert hätte ich hier schon das nächste Problem ^C^Csetenv;Luft_links;\setenv;Luft_rechts;\setenv;Luft_oben;\setenv;Luft_unten;\^C^C-einfüge;$M=$(getenv,Pfad_1)/front.dwg;$M=$(getenv,Luft_links),-$M=$(getenv,Luft_oben); .................. dieser Satz sollte eigentlich nur ein Rechteck (Block) mit den richtigen "Luftabzügen" ausgehend vom Nullpunkt einfügen. Manchmal geht's, genauso oft gehts nicht!?! Naja wirkt jetzt schon, als ob ich meine Macro's von Euch schreiben lassen würde. Aber irgendwie ist dieses Thema im Handbuch nicht wirklich gut beschrieben!!! Also danke im Voraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian Marx Mitglied
Beiträge: 218 Registriert: 11.12.2002 AutoCad LT 200x Athon 1600XP GeForce II MX400 256 DDR RAM 60GB Drive 16xDVD Aopen 24/10/40 Brenner TV-Karte WinTV PVR 250
|
erstellt am: 20. Mai. 2003 23:15 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas_Felix
|
Zeli Mitglied
Beiträge: 129 Registriert: 04.04.2003
|
erstellt am: 20. Mai. 2003 23:44 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas_Felix
Das müsste irgendwie so funzen ^C^Csetenv;Luft_links;\$M=setenv;Luft_rechts;\$M=setenv;Luft_oben;\$M=setenv;Luft_unten;\^C^C-einfüge;$M=$(getenv,Pfad_1)/front.dwg;$M=$(getenv,Luft_links),-"$M=$(getenv,Luft_oben) "";$M=$(getenv,Luft_oben)""""; habs aber nicht ausprobiert Gruss Zeli ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas_Felix Mitglied
Beiträge: 18 Registriert: 19.05.2003
|
erstellt am: 21. Mai. 2003 19:59 <-- editieren / zitieren --> Unities abgeben:
Hallo Chris! Hallo Zeili! Danke für die schnellen Antworen, habe beide Macro's sofort getesten - das mit dem "," funktionient leider genausogut oder schlechte wie ohne Anführungszeichen - $M= vor setenv bricht bei $M ab! Setenv braucht doch kein Diesel $M= ODER? Na vieleicht habt Ihr ja noch andere Lösungen auf Lager!!! Grüße Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Grebe Mitglied
Beiträge: 536 Registriert: 16.12.2002 LT-2021, Civil3D-2021, BricsCAD V18 HP-DesignJet T1200
|
erstellt am: 22. Mai. 2003 09:26 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas_Felix
Hallo Andreas, habe Christians Makro-Entwurf getestet - bei mir klappts (abgesehen von den fehlenden Skalierungsfaktoren). Vermutlich liegt der Fehler dann im Bereich der ..... wo das wohl aisgerechnet werden soll - denn sonst macht e s ja keinen Sinn, 4 Variablen abzufragen und nur 2 zu benutzen. Vielleicht solltest du mal alles posten. Zum Thema $M=: Wie schon weiter oben gesagt, werden beim ersten Treffen auf $M= alle Makroausdrücke $(...) bis zum Ende des Makros ausgewertet. Du kannst es also schon mal wie folgt verschlanken: ^C^Csetenv;Luft_links;\setenv;Luft_rechts;\setenv;Luft_oben;\setenv;Luft_unten;\^C^C-einfüge;$M=$(getenv,Pfad_1)/xxx.dwg;$(getenv,Luft_links)","-$(getenv,Luft_oben);..... Mathias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian Marx Mitglied
Beiträge: 218 Registriert: 11.12.2002 AutoCad LT 200x Athon 1600XP GeForce II MX400 256 DDR RAM 60GB Drive 16xDVD Aopen 24/10/40 Brenner TV-Karte WinTV PVR 250
|
erstellt am: 22. Mai. 2003 11:09 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas_Felix
|
Andreas_Felix Mitglied
Beiträge: 18 Registriert: 19.05.2003
|
erstellt am: 22. Mai. 2003 21:07 <-- editieren / zitieren --> Unities abgeben:
Hallo! ich bin ziehmlich ratlos. müsste gehen, geht aber nicht!!! fehler im nachfolgenden abschnitt sind nicht möglich, den dieses macro endet vorläufig bei ....... (zeitmangel,.... schande!!) mein ziel ist in ein rechteck (z.B. 1000 x 2000 mm) einen block (wieder ein rechteck + ein paar linien)um die luft versetzt einzufügen. diese luft beträgt nur 1.5 - 5mm anscheinend liegt hier das problem, denn je größer das "luftmaß" wird (20mm und so) umso größer wird auch die chance das es funktioniert. bei mir ist's auf jedenfall so grüße Andreas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Grebe Mitglied
Beiträge: 536 Registriert: 16.12.2002 LT-2021, Civil3D-2021, BricsCAD V18 HP-DesignJet T1200
|
erstellt am: 23. Mai. 2003 11:24 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas_Felix
Na wenn das so ist, tippe ich mal auf folgendes Problem: Unter "Extras->Optionen->Benutzereinstellungen->Priorität für Dateneingabe von Koordianten" ist NICHT Tastatureingabe angewählt. Wenn etwas anderes gewählt ist, wird u.U. (abhängig vom aktuellen Zoom) ein Objektfang verwendet. Durch Anwahl dieser Option werden dann ausschließlich die "errechneten" Kooridnaten verwendet. Deine vorherigen Fehlerbeschreibungen waren dann aber relativ dürftig !! Mathias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas_Felix Mitglied
Beiträge: 18 Registriert: 19.05.2003
|
erstellt am: 23. Mai. 2003 13:01 <-- editieren / zitieren --> Unities abgeben:
habe gestern, nach unzähligen versuchen, auch festgestellt das es mit dem objektfang zusammenhängt!! habe schon gebastelt, wie man im macro den ofang ausschaltet danke für den tip mit den optionen!!!! also bis zum nächsten problem grüße andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |