YUHTINA44 Posté(e) le 23 septembre 2021 Posté(e) le 23 septembre 2021 Bonjour à toutes et à tous, Dans un Dessin Courant AutoCAD, j'ai un calque nommé RESEAU et différents fichiers .dwg ont été attachés en XREF, sur un calque nommé REFERENCES. Les fichiers .dwg attachés en XREF ont la même structure. En particulier, dans chacun d'entre eux, des objets graphiques sont placées sur un calque nommé FILAIRE. Dans le Dessin Courant AutoCAD, j'aimerais dupliquer sur le calque RESEAU - via un code AutoLISP - les objets contenus sur le calque FILAIRE de chacune des XREF. Merci pour votre aide. YUHTINA44
lili2006 Posté(e) le 23 septembre 2021 Posté(e) le 23 septembre 2021 Bonjour à toutes et tous, Si tu as les express tools d'installés sur ton poste, alors u peux utiliser la commande "ncopy" (marche aussi pour les blocs,..). Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
YUHTINA44 Posté(e) le 23 septembre 2021 Auteur Posté(e) le 23 septembre 2021 Merci lili2006 pour ta réponse. J'ai bien sûr commencé par regarder cette commande _NCOPY. Il est même possible de l'utiliser au sein d'une fonction AutoLISP. Mon problème est de constituer le jeu de sélection attendu dans les paramètres de la commande. Constituer un jeu de sélection à partir d'objets contenus dans le Dessin Courant AutoCAD, ce n'est pas un problème - d'une manière ou d'une autre. En revanche, quid d'un jeu de sélection contenant des objets présents sur un calque dans une XREF. Je recherche une solution analogue à : (setq ensW (ssget "X" (list (cons 8 "FILAIRE")))) - mais dans une XREF Merci encore.
lecrabe Posté(e) le 23 septembre 2021 Posté(e) le 23 septembre 2021 Hello Tu devrais regarder cette routine Lisp "NN" qui extrait UN objet depuis une XREF puis cree un Bloc puis l'explose / decompose ... Tu y trouveras peut etre de l'inspiration pour boucler sur N objets !? Tiree de mon stock de 3001 routines ! La Sante, Bye, lecrabe ;; ;; https://www.theswamp.org/index.php?topic=27786.0 ;; ;; ;; XShrimp 2009.3.13 -Commande: NN ;; (defun c:NN ( / acaddocument acadobject blockobj blockrefobj i mspace n nent obj objent) (VL-LOAD-COM) (defun make*ublock(obj / blockobj) (setq blockObj (vla-add (vla-get-Blocks AcadDocument) (vlax-3d-point (list 0 0 0)) "*U" ) ) (vla-CopyObjects AcadDocument (vlax-safearray-fill (vlax-make-safearray vlax-vbObject (cons 0 0) ) (list obj) ) blockObj ) (vla-delete obj) (vla-get-name blockObj) ) (setq AcadObject (vlax-get-acad-object) AcadDocument (vla-get-ActiveDocument Acadobject) mSpace (vla-get-ModelSpace Acaddocument) ) (if (= (length (setq nent (nentsel))) 4) (progn (entmake (entget (car nent))) (setq objent (vlax-ename->vla-object (entlast))i 0) (foreach n (last nent) (setq obj (vlax-ename->vla-object n)) (setq blockRefObj ( vla-InsertBlock mSpace (vla-get-InsertionPoint obj) (make*ublock objent ) (vla-get-xScaleFactor obj) (vla-get-yScaleFactor obj) (vla-get-zScaleFactor obj) (vla-get-Rotation obj) ) ) (setq i (1+ i)) (if(> i 1) (command "_.explode" (entlast)) ) (setq objent(vlax-ename->vla-object (entlast))) );end foreach (command "_.explode" (entlast)) ;; Explode the created entity (sssetfirst nil (ssget "p")) ) ) (prin1) ) Autodesk Expert Elite Team
YUHTINA44 Posté(e) le 23 septembre 2021 Auteur Posté(e) le 23 septembre 2021 Merci beaucoup lecrabe. Sympa comme speudo ! Ce qui me pose problème, c'est que je ne peux pas - ou ne veux pas - avoir d'interaction avec l'utilisateur. Tout doit se dérouler de manière "silencieuse". D'où l'analogie que j'évoquais : (setq ensW (ssget "X" (list (cons 8 "FILAIRE")))) Je pense que la fonction ssget n'est pas applicable avec les objets contenus dans une XREF. Je suis donc en recherche d'une solution alternative. Merci beaucoup.
JPhil Posté(e) le 23 septembre 2021 Posté(e) le 23 septembre 2021 J'avais créé un lisp pour une création de calque "valeur ajoutée" du style CFO/AME .... par rapport à plusieurs calques de référence contenus dans un ou plusieurs Xref. J'avais tenté de refaire mon lisp afin de l'optimiser un peu (et accessoirement de rajouter quelques remarques), donc voici le début : Pour infos, structure du calque de référence : Mini : TOP-?-?-? Maxi : TOP??-?????-????????-? Exemple 1 : TOP1M-CR204-EF-E Exemple 2 : TOP-_-_-W ***************** ;;; Nom du corps d'état de référence ;;; Variable vcalquerefbase : Nom du corps d'état de référence (defun pcalquerefbase() (setq vcalquerefbase "TOP") ) ;;; Récupération nom XREF avec Début du nom du calque de référence ;;; Variable vcalquerefbase : voir Programme pcalquerefbase ;;; Variable vxnc : Début du nom du calque de référence (defun pxrefname() (defun biton ( v vbit / ) (cond ((/= (logand v vbit) 0) T) (T nil) ) ) ;entree (setq res nil) (setq tbl (tblnext "BLOCK" t)) (while tbl (setq ass70 (cdr (assoc 70 tbl))) (if (biton ass70 4) ; traitement d'un xref (progn (setq ass2 (cdr (assoc 2 tbl))) ; Récupération du nom public (setq vxnc (strcat ass2 "|" vcalquerefbase)) (ppcc) ; lancement du programme pour la création des calques (setq res (append res (list ass2))) ; ajout à la liste res ) ) (setq tbl (tblnext "BLOCK")) ) (setq vxnc vcalquerefbase) (ppcc) ; lancement du programme pour la création des calques ) ;;; ;;; ;;; Lancement du programme ;;; (defun c:creacalque() (pcalquerefbase) (pxrefname) ) ;;; Fin du nom du calque de référence ;;; Variable vxncf : Fin du nom du calque de référence ;;; Variable wvxncf : Compteur / Boucle pour la variable vxncf (defun pcalquereffin() (if (= wvxncf 0) (setq vcrf "-_-W")) (if (= wvxncf 1) (setq vcrf "-PD-E")) (if (= wvxncf 2) (setq vcrf "-EF-E")) (if (= wvxncf 3) (setq vcrf "-CL-E")) ) ;;; Programme pour la création des calques (defun ppcc() (princ vxnc) ) Si ça peut aider 😉
Olivier Eckmann Posté(e) le 23 septembre 2021 Posté(e) le 23 septembre 2021 Bonjour, Il y a cette solution mais avec intervention de l'utilisateur (peut-être scriptable) : https://www.youtube.com/watch?v=6b3XPcWB7nw Sinon, si tu parles couramment le C# il y a le blog de Norman Yuan qui explique comment faire ça : https://drive-cad-with-code.blogspot.com/2019/08/selecting-multiple-nested-entities-2-of.html Olivier
Olivier Eckmann Posté(e) le 23 septembre 2021 Posté(e) le 23 septembre 2021 Tu peux regarder aussi de ce côté : https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/ncopy-with-window-selection/td-p/9091896 Olivier
YUHTINA44 Posté(e) le 23 septembre 2021 Auteur Posté(e) le 23 septembre 2021 Vraiment merci à tous pour la célérité de vos réponses. Impressionnant ! Je vais maintenant travailler à partir de ces réponses. Très bonne journée. YUHTINA44
lecrabe Posté(e) le 23 septembre 2021 Posté(e) le 23 septembre 2021 Hello SVP tu nous raconteras ... La Sante, Bye, lecrabe Autodesk Expert Elite Team
PHILPHIL Posté(e) le 24 septembre 2021 Posté(e) le 24 septembre 2021 hello quelques routines, pour extraire sans ou avec destruction des entites dans l'XREF ou bloc, pour incorporer avec ou sans destruction d'entité dans l'Xref ou bloc les Xref ne doivent pas etre ouvert dans autocad pour extraire d'un Xref, le plus simple et de ne faire apparaitre que la couche a extraire. et pour la routine "c:extraire_entite_xref_bloc_copie_CALQUE" il suffit d'etre déja dans le calque ou l'on veut que la copie soit faite SANS DESTRUCTION DES ENTITES c:extraire_entite_xref_bloc_copie c:extraire_entite_xref_bloc_copie_CALQUE c:INCORPORER_entite_xref_bloc_copie AVEC DESTRUCTION DES ENTITES c:extraire_entite_xref_bloc_efface c:INCORPORER_entite_xref_bloc_efface a+ Phil ;;;------------------------------------------ ;;;EXTRAIRE DES ENTITEES D'UN BLOC OU XREF ;;;------------------------------------------ (defun c:extraire_entite_xref_bloc_copie () (setq osm (getvar "osmode")) (prompt "\nVEUILLEZ SELECTIONNER UN XREF OU BLOC POUR L'EXTRACTION D'ENTITES ") (command-s "-editref" pause "" "OK" "T" "N") (prompt "\nCLIQUER SUR LES OBJETS A EXTRAIRE :") (setq obj nil) (while (null obj) (setq obj (ssget))) (setvar "osmode" 0) (command-s "ALIGNER3D" obj "" "c" "0,0,0" "100000,0,0" "" "0,0,0" "100000,0,0" "q") (command-s "_refset" "S" obj "") (command-s "_refclose" "e" "d" "0,0,0" "0,0,0" ) (setvar "osmode" osm) ) (defun c:extraire_entite_xref_bloc_copie_CALQUE () (setq osm (getvar "osmode")) (setq cav (getvar "clayer")) (prompt "\nVEUILLEZ SELECTIONNER UN XREF OU BLOC POUR L'EXTRACTION D'ENTITES ") (command-s "-editref" pause "" "OK" "T" "N") (prompt "\nCLIQUER SUR LES OBJETS A EXTRAIRE :") (setq obj nil) (while (null obj) (setq obj (ssget))) (setvar "osmode" 0) (command-s "ALIGNER3D" obj "" "c" "0,0,0" "100000,0,0" "" "0,0,0" "100000,0,0" "q") (command "_laymch" obj "" "N" cav) (command-s "_refset" "S" obj "") (command-s "_refclose" "e" "d" "0,0,0" "0,0,0" ) (setvar "osmode" osm) ) (defun c:INCORPORER_entite_xref_bloc_copie () (setq osm (getvar "osmode")) (prompt "\nCLIQUER SUR LES OBJETS A INCORPORER :") (setq obj nil) (while (null obj) (setq obj (ssget))) (setvar "osmode" 0) (command-s "ALIGNER3D" obj "" "c" "0,0,0" "100000,0,0" "" "0,0,0" "100000,0,0" "q") (prompt "\nVEUILLEZ SELECTIONNER UN XREF OU BLOC POUR L'INCORPORATION D'ENTITES ") (command-s "-editref" pause "" "OK" "T" "N") (command-s "_refset" "A" obj "") (command-s "_refclose" "e" "d" "0,0,0" "0,0,0" ) (setvar "osmode" osm) ) (defun c:extraire_entite_xref_bloc_efface () (setq osm (getvar "osmode")) (prompt "\nVEUILLEZ SELECTIONNER UN XREF OU BLOC POUR L'EXTRACTION D'ENTITES ") (command-s "-editref" pause "" "OK" "T" "N") (prompt "\nCLIQUER SUR LES OBJETS A EXTRAIRE :") (setq obj nil) (while (null obj) (setq obj (ssget))) (setvar "osmode" 0) (command-s "_refset" "S" obj "") (command-s "_refclose" "e" "d" "0,0,0" "0,0,0" ) (setvar "osmode" osm) ) (defun c:INCORPORER_entite_xref_bloc_efface () (setq osm (getvar "osmode")) (prompt "\nCLIQUER SUR LES OBJETS A INCORPORER :") (setq obj nil) (while (null obj) (setq obj (ssget))) (setvar "osmode" 0) (prompt "\nVEUILLEZ SELECTIONNER UN XREF OU BLOC POUR L'INCORPORATION D'ENTITES ") (command-s "-editref" pause "" "OK" "T" "N") (command-s "_refset" "A" obj "") (command-s "_refclose" "e" "d" "0,0,0" "0,0,0" ) (setvar "osmode" osm) ) FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant