Salut,
Tu peux voir ici
Ou mieux, cette version (fonctionne que le dessin source soit ouvert ou non)
Code:
;; IMPORTUCS (gile)
;; Importe tous les SCUs nommés du DWG sélectionné
(defun c:importUCS (/ UCSs filename doc odbx docUCSs name ucslst)
(vl-load-com)
(setq UCSs
(vla-get-UserCoordinateSystems
(vla-get-activedocument (vlax-get-acad-object))
)
)
(if (setq filename
(getfiled "Fichier Source" (getvar "dwgprefix") "dwg" 0)
)
(progn
(vlax-for d (vla-get-Documents (vlax-get-acad-object))
(if (= (strcase (vla-get-Fullname d)) (strcase filename))
(setq doc d)
)
)
(or doc
(setq doc (OpenDrawingDBX filename)
odbx T
)
)
(setq docUCSs (vla-get-UserCoordinateSystems doc))
(if (< 0 (vla-get-Count docUCSs))
(progn
(vlax-for x docUCSs
(setq name (vla-get-Name x))
(or
(getitem UCSs name)
(wcmatch name "_Active*")
(setq ucslst (cons x ucslst))
)
)
(if ucslst
(progn
(vlax-invoke doc 'CopyObjects ucslst UCSs)
(princ
(strcat "\n" (itoa (length ucslst)) " SCU(s) importé(s).")
)
)
(princ "\nAucun SCU différent dans le dessin source.")
)
(and odbx (vlax-release-object doc))
)
(princ "\nAucun SCU enregistré dans le dessin source.")
)
)
)
(princ)
)
;;; Accéder à un dessin fermé
(defun OpenDrawingDBX (filename / objdbx release)
(setq objdbx
(vlax-create-object
(if (< (setq release (atoi (getvar "ACADVER"))) 16)
"ObjectDBX.AxDbDocument"
(strcat "ObjectDBX.AxDbDocument." (itoa release))
)
)
)
(vla-open objdbx filename)
objdbx
)
;;; GetItem (gile)
;;; Retourne le vla-object de l'item s'il est présent dans la collection
;;;
;;; Arguments
;;; col : la collection (vla-object)
;;; name : le nom de l'objet (string) ou son indice (entier)
;;;
;;; Retour : le vla-object ou nil
(defun GetItem (col name / obj)
(vl-catch-all-apply
'(lambda () (setq obj (vla-item col name)))
)
obj
)