Danke für die superschnelle Antwort!!!
Also, mein Versuch eine Vorhandene Kopieren & Drehen LISP-Datei umzuschreiben sieht nun so aus:
_________________________________________________________________________
(VL-LOAD-COM)
(defun C XF-EX (/ SGET)
(princ "\nObjekte zum Exportieren wählen: ")
(if (setq SGET (ssget))
(DXF-EX SGET)
)
(princ)
)
(defun DXF-EX (AUSWAHL / LST-ORGOBJECTS P SSET-COPIED)
(if (setq LST-ORGOBJECTS (DT:SELSET->VLA-OBJECTLIST AUSWAHL))
(while (setq P (DT:SAFE-EVAL
(list 'getpoint
"\nNullpunkt wählen: "
)
)
)
(if (setq SSET-COPIED (DT:COPY-OBJECTS LST-ORGOBJECTS))
(if (setq SSET-COPIED (DT:OBJECTLIST->SELSET SSET-COPIED))
(progn
(DT:SAFE-EVAL
(setq
Name (getfiled "DXF speichern unter" "C:\\Dokumente und Einstellungen\\ukr\\Favoriten\\" "dxf" 1)
)
(VL-CMDF "_.move" SSET-COPIED "" P "0,0,0" "_.dxfout" Name "V" "R12" "O" SSET-COPIED "" "" "_.erase" SSET-COPIED "")
)
(princ "\n...DXF-Exportiert ")
)
)
)
)
)
)
(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 "\nDXF-Export von U.K. geladen. Aufruf mit \"DXF-EX\".")
(princ)
_______________________________________________________________________
Wie schon gesagt, es läuft, gibt aber am Ende eine Fehlermeldun über zuviele Argumente raus - liegt vermutlich an der ursprünglichen Wiederholfunktion aus der Ur-Datei - Aber wie schon geschrieben - Ich bin mit LISP nicht so super vertraut.
Bei dem Weg über den Block, hab ich dann im Original ja nachher ganz viele neue Blöcke - Eigendlich wollte ich die Originalzeichnung nicht verändern.
MFG
Udouk
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP