| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: undo Funktion lisp (1428 mal gelesen)
|
Siegfried Rief Mitglied Lehrer, Architekt
Beiträge: 249 Registriert: 16.11.2011 ACAD 2023, imos iX2017 im Novellnetz Fachschule für Holztechnik Stuttgart
|
erstellt am: 09. Sep. 2014 14:28 <-- editieren / zitieren --> Unities abgeben:
Hallo, folgendes lisp "3D-Strecken" ist mit Hilfe des Forumms entstanden, ich habe allerdings noch ein Problem mit dem undo: die Sysvar osmode wird nicht mit zurückgestellt. Ein weiteres undo geht auf den vorherigen Befehl und ignoriert die SysVar. Wenn ich den Befehl abbreche klappt die Rücksetzung der SysVars(errorhandling)! (defun c:str3 (/ *error* OM) ;******** Errorhandler (defun *error* ( msg ) (if om (setvar 'osmode om)) (if (not (member msg '("Function cancelled" "quit / exit abort"))) (princ (strcat "\nError: " msg)) ) (princ) ) ;******** Hauptprogramm (setq OM (getvar "OSMODE")) (setvar "OSMODE" 0) (command "schieben" "f" (setq p1 (getpoint "\nErster Eckpunkt")) (setq p2 (getcorner p1 "\nZweiter Eckpunkt")) "h" (setvar "subobjselectionmode" 0) "u" "f" p1 p2) (setvar "OSMODE" OM) (setvar "subobjselectionmode" 0) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 09. Sep. 2014 14:41 <-- editieren / zitieren --> Unities abgeben: Nur für Siegfried Rief
Gehe einfach noch mal Stepbystep die Command-Befehlsfolge durch, ich denke ab spätestens dem "u" meckert Autocad (command weglassen und einfach eintippen: schieben<enter> f<enter> {Klick1} {Klick2} h<enter> usw.. (command "schieben" "f" (setq p1 (getpoint "\nErster Eckpunkt")) (setq p2 (getcorner p1 "\nZweiter Eckpunkt")) "h" (setvar "subobjselectionmode" 0) "u" "f" p1 p2 ) ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Siegfried Rief Mitglied Lehrer, Architekt
Beiträge: 249 Registriert: 16.11.2011 ACAD 2023, imos iX2017 im Novellnetz Fachschule für Holztechnik Stuttgart
|
erstellt am: 09. Sep. 2014 14:55 <-- editieren / zitieren --> Unities abgeben:
Danke für die schnelle Antwort, kann ich mit dieser Methode das undo-Verhalten testen? Die Funktion ansich tut ja, auch die Option u für Unterobjekte. Beim undo macht er auch alles rückgängig - beide Objektwahlen: normale und untergeordnete Volumenkörperobjekte, aber osmode stellt er nicht zurück ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Siegfried Rief Mitglied Lehrer, Architekt
Beiträge: 249 Registriert: 16.11.2011 ACAD 2023, imos iX2017 im Novellnetz Fachschule für Holztechnik Stuttgart
|
erstellt am: 10. Sep. 2014 12:59 <-- editieren / zitieren --> Unities abgeben:
Hallo, das Problem ließ sich folgendemaßen lösen: >> undo-Aufrufe zu Beginn und am Ende >> die 2. Objektwahl brauchte ein enter "" >> die eigentliche Verschiebeaktion braucht jetzt getpoint, damit der undo-Aufruf am Ende abgearbeitet wird. >> (setvar "OSMODE" OM) musste nach oben gesetzt werden, sonst wurde es ignoriert ... >> zufrieden bis auf: durch die getpoint-Verschiebung sieht man die Streckung nicht "in Echtzeit" sondern nur als Ergebnis. (defun c:str3test (/ *error* OM p1 p2) ;******** Errorhandler (defun *error* ( msg ) (if om (setvar 'osmode om)) (if (not (member msg '("Function cancelled" "quit / exit abort"))) (princ (strcat "\nError: " msg)) ) (princ) ) ;******** Hauptprogramm (command "_undo" "_begin") (setq OM (getvar "OSMODE")) (setvar "OSMODE" 0) (command "schieben" "f" (setq p1 (getpoint "\nErster Eckpunkt")) (setq p2 (getcorner p1 "\nZweiter Eckpunkt")) (setvar "OSMODE" OM) "h" (setvar "subobjselectionmode" 0) "u" "f" p1 p2 "" (setq p1(getpoint "\nvon: ")) (getpoint p1 "\nnach: ") ) (setvar "subobjselectionmode" 0) (command"_undo""_end") ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |