| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| CIDEON Whitepaper: Elektronik und Mechanik redundanzfrei vereinen: Der Weg zur mechatronischen Stückliste, ein Whitepaper
|
Autor
|
Thema: drehen und kopieren (2978 mal gelesen)
|
BBecker Mitglied
Beiträge: 133 Registriert: 05.06.2002 Windows 7, Acad 2012 MEP
|
erstellt am: 03. Feb. 2005 17:09 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe Lispler, ein Mitglied „manndaten“ aus dem Forum hat in 2001 u.g. Lisp geschrieben. Könnt Ihr diese vielleicht noch vervollständigen? Ich möchte mehrfach kopieren, d.h. solange drehen und kopieren bis ich fertig bin. Ausserdem möchte ich die Routine mehrfach hintereinander aufrufen können. Jetzt ist es so, dass sie nach dem appload sofort startet und nach einmal drehen und kopieren war es das. Wäre super, wenn es jemand hinkriegen würde. Danke Beate (setvar"cmdecho" 0) (princ"\nObjekte zum Kopieren+Drehen wählen:") (setq auswahl(ssget)) (if auswahl (progn (setq p(getpoint"\nDrehpunkt wählen:")) (if p (progn (command"._copy" auswahl "" "_non" p "_non" p) (command"._rotate" auswahl "" "_non" p) );Ende progn );Ende if );Ende progn );Ende if (princ)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 03. Feb. 2005 19:27 <-- editieren / zitieren --> Unities abgeben: Nur für BBecker
Hi, Dein Wunsch kann erfüllt werden, auch wenn das Lisp strenggenommen Schrott ist, denn es werden nicht die kopierten Objekte gedreht sondern die Originale... Einfach-Aufruf: CR Endlos-Aufruf: MCR Außerdem wird Dir jetzt nicht mehr dauerhaft die Sysvar cmdecho verstellt. IMHO eine weitverbreitete Unart. Code:
(VL-LOAD-COM)(defun C:CR (/ ALT-CMDECHO ALT-OSMODE AUSWAHL P) (setq ALT-CMDECHO (getvar "CMDECHO") ALT-OSMODE (getvar "osmode") ) (setvar "cmdecho" 0) (setvar "osmode" 0) (princ "\nObjekte zum Kopieren+Drehen wählen: ") (if (setq AUSWAHL (ssget)) (if (setq P (getpoint "\nDrehpunkt wählen:")) (progn (VL-CMDF "_.copy" AUSWAHL "" P P) (VL-CMDF "_.rotate" AUSWAHL "" P pause) ) ) ) (setvar "cmdecho" ALT-CMDECHO) (setvar "osmode" ALT-OSMODE) (princ) ) (defun C:MCR (/ ALT-CMDECHO ALT-OSMODE) (setq ALT-CMDECHO (getvar "CMDECHO") ALT-OSMODE (getvar "osmode") ) (setvar "cmdecho" 0) (setvar "osmode" 0) (while (not (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (C:CR))) ) ) (princ "\n... und nächster...(Ausstieg mit ESCAPE)") ) (setvar "cmdecho" ALT-CMDECHO) (setvar "osmode" ALT-OSMODE) (princ) )
(princ "\nKopieren und Drehen geladen. Aufruf mit \"CR\" oder \"MCR\".") (princ)
... ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 03. Feb. 2005 19:35 <-- editieren / zitieren --> Unities abgeben: Nur für BBecker
War da nicht auch was aus den Express-Tools? Befehl : mocoro ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 03. Feb. 2005 19:40 <-- editieren / zitieren --> Unities abgeben: Nur für BBecker
|
BBecker Mitglied
Beiträge: 133 Registriert: 05.06.2002 Windows 7, Acad 2012 MEP
|
erstellt am: 04. Feb. 2005 09:07 <-- editieren / zitieren --> Unities abgeben:
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 04. Feb. 2005 10:33 <-- editieren / zitieren --> Unities abgeben: Nur für BBecker
Hi BBecker, Wg: "Kann die Routine so geändert werden, dass das Objekt welches ausgewählt wurde mehrfach kopiert und gedreht wird? " Tja, das hatte ich mir gleich gedacht, das Du DAS mit der Befehlswiederholung meinst, aber ich habe halt Deine erste Aussage exakt umgesetzt: "Ich möchte mehrfach kopieren, d.h. solange drehen und kopieren bis ich fertig bin." Daraus lernst DU zukünftig Deine Anforderungen nicht nur exakt zu denken, sondern auch exakt zu formulieren. ICH lerne daraus: Zukünftig nichts mehr wörtlich nehmen, sondern erstmal nachfragen wie's denn nun wirklich gemeint ist... (Sollte mir vielleicht mal CADmiums Glaskugel leihen!) Wg: "Kann die Routine so geändert werden, dass das Objekt welches ausgewählt wurde mehrfach kopiert und gedreht wird?"
Ja, kann. Würde aber IMHO einen etwas anderen Ansatz erfordern. Vielleicht hat ja einer der anderen Lisp'ler Lust dazu? ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 04. Feb. 2005 11:00 <-- editieren / zitieren --> Unities abgeben: Nur für BBecker
<dream> Ich kann es einfach nicht lassen... Ist da was bei, was so funzt wie Du willst? Code:
(VL-LOAD-COM) (defun C:CR (/ ALT-CMDECHO ALT-OSMODE AUSWAHL P) (setq ALT-CMDECHO (getvar "CMDECHO") ALT-OSMODE (getvar "osmode") ) (setvar "cmdecho" 0) (setvar "osmode" 0) (princ "\nObjekte zum Kopieren+Drehen wählen: ") (if (setq AUSWAHL (ssget)) (if (setq P (getpoint "\nDrehpunkt wählen:")) (progn (vl-catch-all-apply '(lambda () (command "_.copy" AUSWAHL "" P P) (command "_.rotate" AUSWAHL "" P PAUSE) ) ) ) ) ) (setvar "cmdecho" ALT-CMDECHO) (setvar "osmode" ALT-OSMODE) (princ) ) (defun C:MCR2 (/ ALT-CMDECHO ALT-OSMODE AUSWAHL P) (setq ALT-CMDECHO (getvar "CMDECHO") ALT-OSMODE (getvar "osmode") ) (setvar "cmdecho" 0) (setvar "osmode" 0) (princ "\nObjekte zum Kopieren+Drehen wählen: ") (if (setq AUSWAHL (ssget)) (if (setq P (getpoint "\nDrehpunkt wählen:")) (MCR2 AUSWAHL P) ) ) (setvar "cmdecho" ALT-CMDECHO) (setvar "osmode" ALT-OSMODE) (princ) ) (defun C:MCR3 (/ ALT-CMDECHO ALT-OSMODE AUSWAHL P) (setq ALT-CMDECHO (getvar "CMDECHO") ALT-OSMODE (getvar "osmode") ) (setvar "cmdecho" 0) (setvar "osmode" 0) (princ "\nObjekte zum Kopieren+Drehen wählen: ") (if (setq AUSWAHL (ssget)) (MCR3 AUSWAHL) ) (setvar "cmdecho" ALT-CMDECHO) (setvar "osmode" ALT-OSMODE) (princ) )
(defun MCR2 (AUSWAHL P /) (while (not (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (command "_.copy" AUSWAHL "" P P) (command "_.rotate" AUSWAHL "" P PAUSE) ) ) ) ) (princ "\n... und nächster...(Ausstieg mit ESCAPE)") ) ) (defun MCR3 (AUSWAHL /) (while (not (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (if (setq P (getpoint "\nDrehpunkt wählen:")) (progn (command "_.copy" AUSWAHL "" P P) (command "_.rotate" AUSWAHL "" P PAUSE) ) ) ) ) ) ) (princ "\n... und nächster...(Ausstieg mit ESCAPE)") ) ) (defun C:MCR (/ ALT-CMDECHO ALT-OSMODE) (setq ALT-CMDECHO (getvar "CMDECHO") ALT-OSMODE (getvar "osmode") ) (setvar "cmdecho" 0) (setvar "osmode" 0) (while (not (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (C:CR))) ) ) (princ "\n... und nächster...(Ausstieg mit ESCAPE)") ) (setvar "cmdecho" ALT-CMDECHO) (setvar "osmode" ALT-OSMODE) (princ) )
(princ "\nKopieren und Drehen geladen. Aufruf mit \"CR\", \"MCR\", \"MCR2\" oder \"MCR3\".") (princ)
... ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cad4fun Ehrenmitglied
Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 und 2017 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM ATI FirePro V (FireGL V) Graphics Adapter Treiberversion: 15.201.1151.1008
|
erstellt am: 04. Feb. 2005 13:05 <-- editieren / zitieren --> Unities abgeben: Nur für BBecker
ist natürlich viel hübscher und brauchbarer, weil bedienungsfreundlicher als MOCORO, ABER: wie gebe ich einen exakten drehpunkt an bei OSMODE=0! ist das überhaupt notwendig,osmode auf 0 zu setzen? und wofür steht MCR2 und MCR3? und wäre es nicht sinnvoll, folgende ergänzung einzufügen: Drehpunkt wählen| und anschliessend Drehwinkel(cursor oder numerisch) eingeben Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BBecker Mitglied
Beiträge: 133 Registriert: 05.06.2002 Windows 7, Acad 2012 MEP
|
erstellt am: 04. Feb. 2005 15:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Marc, schön, das es Dich in den Fingern kribbelte und Du mich nicht hast hängen lassen. Und ob ist da was dabei: die MCR2 ist das was ich brauche. Vielen Dank. Gibt trotzdem die volle Punktzahl. Werde mir in Zukunft Mühe geben. Gruß Beate Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 04. Feb. 2005 15:53 <-- editieren / zitieren --> Unities abgeben: Nur für BBecker
... und weil ich mich gerade sowieso mit der CopyObjects Method beschäftigen mußte, reiche ich noch mal 'ne IMHO saubere Lösung nach. Bei dieser Lösung werden immer die zuerst gewählten Objekte kopiert und dann die KOPIEN gedreht. Die Funktion wiederholt sich solange, bis der User keinen Drehpunkt mehr eingibt. Aufruf mit "CR". Code:
(VL-LOAD-COM)(defun C:CR (/ SGET) (princ "\nObjekte zum Kopieren und Rotieren wählen: ") (if (setq SGET (ssget)) (CR SGET) ) (princ) ) (defun CR (AUSWAHL / LST-ORGOBJECTS P SSET-COPIED) (if (setq LST-ORGOBJECTS (DT:SELSET->VLA-OBJECTLIST AUSWAHL)) (while (setq P (DT:SAFE-EVAL (list 'getpoint "\nDrehpunkt wählen (R.klick/Space=Ende): " ) ) ) (if (setq SSET-COPIED (DT:COPY-OBJECTS LST-ORGOBJECTS)) (if (setq SSET-COPIED (DT:OBJECTLIST->SELSET SSET-COPIED)) (progn (DT:SAFE-EVAL (list 'vl-cmdf "_.rotate" SSET-COPIED "" "_non" P PAUSE) ) (princ "\n... und nächster...") ) ) ) ) ) ) (defun DT:COPY-OBJECTS (LST-OBJECTS / ARRAY-OF-OBJECTS) (if (setq LST-OBJECTS (mapcar '->VLA-OBJECT LST-OBJECTS)) (if (setq ARRAY-OF-OBJECTS (vla-copyobjects (vla-get-activedocument (vlax-get-acad-object) ) (DT:OBJLIST->ARRAY LST-OBJECTS) ) ) (DT:ARRAY->LST ARRAY-OF-OBJECTS) ) ) )
(defun DT:ARRAY->LST (ARRAY /) (DT:SAFE-EVAL (list 'vlax-safearray->list (DT:SAFE-EVAL (list 'vlax-variant-value ARRAY)) ) ) )
(defun DT:OBJLIST->ARRAY (LST-OBJECTS) (if (setq LST-OBJECTS (mapcar '->VLA-OBJECT LST-OBJECTS)) (vlax-safearray-fill (vlax-make-safearray vlax-vbobject (cons 0 (1- (length LST-OBJECTS))) ) LST-OBJECTS ) ) )
;; Funktion zum sicheren Ausführen von Code ;; Beispiel: ;; Normaler Aufruf: ;; (setq value (MS_multiList "Titel" "Aufforderung" '("C" "F") '("A" "B" "C" "D" "E" "F" "G"))) ;; Safe Aufruf: ;; (setq retval (MS:SAFE-EVAL '(MS_multiList "Titel" "Aufforderung" ("C" "F") ("A" "B" "C" "D" "E" "F" "G")))) ;; oder ;; (setq retval (MS:SAFE-EVAL (list 'MS_multiList "Titel" "Aufforderung" '("C" "F") '("A" "B" "C" "D" "E" "F" "G")))) (defun DT:SAFE-EVAL (EVALFUNCTION / ARGLST FUNCNAME RETVAL) (if EVALFUNCTION (if (setq FUNCNAME (car EVALFUNCTION)) (progn (setq ARGLST (cdr EVALFUNCTION)) (if (vl-catch-all-error-p (setq RETVAL (vl-catch-all-apply FUNCNAME ARGLST)) ) ;_ end of vl-catch-all-error-p (setq RETVAL NIL) ) ;_ end of if ) ;_ end of progn ) ;_ end of if ) ;_ end of if RETVAL ) ;_ end of defun ;;; z.B. (DT:SELSET-LIKE-DEFINITION (list (cons 0 "IMAGE")(cons 8 "*$BILD$@*"))) (defun DT:SELSET->ENAMELIST (SELSET / INDEX RETVAL) (if (eq (type SELSET) 'PICKSET) (progn (setq INDEX 0) (repeat (sslength SELSET) (setq RETVAL (cons (ssname SELSET INDEX) RETVAL) INDEX (1+ INDEX) ) ;_ end of setq ) ;_ end of repeat ) ;_ end of progn ) ;_ end of if retval ) ;_ end of defun (defun DT:SELSET->VLA-OBJECTLIST (SELSET / RETVAL) (if (eq (type SELSET) 'PICKSET) (if (setq RETVAL (DT:SELSET->ENAMELIST SELSET)) (setq RETVAL (mapcar (function (lambda (X) (->VLA-OBJECT X))) RETVAL) ) ;_ end of setq ) ;_ end of if ) ;_ end of if RETVAL ) ;_ end of defun (defun DT:OBJECTLIST->SELSET (OBJECTLIST / SGET) (gc) (if (setq OBJECTLIST (vl-remove-if 'null (mapcar (function (lambda (X) (->ENAME X))) OBJECTLIST ) ) ) (progn (setq SGET (ssadd)) (foreach ELEM OBJECTLIST (setq SGET (ssadd ELEM SGET)) ) ) ) (if SGET (if (> (sslength SGET) 0) SGET ) ) ) ;;; Funktion gibt Ename zurück, wenn Lisp-Objekt oder vla-Objekt ;;; übergeben worden sind. Ansonsten nil (defun ->ENAME (ENAME /) (cond ((= (type ENAME) 'VLA-OBJECT) (vlax-vla-object->ename ENAME)) ((= (type ENAME) 'ENAME) ENAME) (t NIL) ) ;_ end of cond ) ;_ end of defun ;;; Funktion gibt vla-Objekt zurück, wenn Lisp-Objekt oder vla-Objekt ;;; übergeben worden sind. Ansonsten nil (defun ->VLA-OBJECT (ENAME /) (cond ((= (type ENAME) 'ENAME) (vlax-ename->vla-object ENAME)) ((= (type ENAME) 'VLA-OBJECT) ENAME) (t NIL) ) ;_ end of cond ) ;_ end of defun (princ "\nKopieren und Drehen geladen. Aufruf mit \"CR\".") (princ)
... ------------------ Ciao, Marc
[Diese Nachricht wurde von marc.scherer am 07. Feb. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 04. Feb. 2005 15:59 <-- editieren / zitieren --> Unities abgeben: Nur für BBecker
Zitat: Original erstellt von BBecker: Hallo Marc, schön, das es Dich in den Fingern kribbelte und Du mich nicht hast hängen lassen. Und ob ist da was dabei: die MCR2 ist das was ich brauche. Vielen Dank. Gibt trotzdem die volle Punktzahl. Werde mir in Zukunft Mühe geben. Gruß Beate
*staun* MCR2 ist das was Du willst? Warum benutzt Du nicht Reihe -> Polar??? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 04. Feb. 2005 16:05 <-- editieren / zitieren --> Unities abgeben: Nur für BBecker
Zitat: Original erstellt von cad4fun:
a) > ABER: wie gebe ich einen exakten drehpunkt an bei OSMODE=0!b) > ist das überhaupt notwendig,osmode auf 0 zu setzen? c) > und wofür steht MCR2 und MCR3? d) > und wäre es nicht sinnvoll, folgende ergänzung einzufügen: Drehpunkt wählen| und anschliessend Drehwinkel(cursor oder numerisch) eingeben
Zu a) Mit 'nem Einmal-Fangbefehl! Zu b) Wenn man im command wieder das "_non" verwendet nicht. Zu c) Für Funktionen, teste es einfach aus <dream> Zu d) Klar, es gäbe viele sinnvollere Sachen als das was BBecker haben will... Aber ICH arbeite damit ja auch nicht. Hier ging es um BBeckers Wunsch, nicht um Deinen :-) Ciao, Marc [Diese Nachricht wurde von marc.scherer am 07. Feb. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cad4fun Ehrenmitglied
Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 und 2017 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM ATI FirePro V (FireGL V) Graphics Adapter Treiberversion: 15.201.1151.1008
|
erstellt am: 07. Feb. 2005 08:09 <-- editieren / zitieren --> Unities abgeben: Nur für BBecker
Zitat: Original erstellt von marc.scherer: ... und weil ich mich gerade sowieso mit der CopyObjects Method beschäftigen mußte, reiche ich noch mal 'ne IMHO saubere Lösung nach.
hallo marc, bei mir läuft's leider nicht sauber. Fehlermeldung nach Objektsselektion: "; error: no function definition: ->VLA-OBJECT" ciao Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 07. Feb. 2005 08:15 <-- editieren / zitieren --> Unities abgeben: Nur für BBecker
|