voyageur65 Posté(e) le 20 septembre 2010 Posté(e) le 20 septembre 2010 Bonjour, Désolé si ce sujet a déjà été traité mais j’ai fais des recherches sans trouver et je ne sais pas si il est possible de faire une recherche par sujet. J’ai dessiné un plan d’une maison et je voudrai le partager en plusieurs parties : mur, cloisons, ouvertures…Donc le but est de créer des références externes pour que dans un nouveau fichier dessin chaque éléments se retrouve à la bonne place en insérant les xref. J’espère que je suis assez clair. Quelle est la démarche à suivre en sachant que je ne sais pas comment créer les xref et donc je ne sais pas non plus les insérer… Merci d’avance pour vos réponses.
Calecx Posté(e) le 20 septembre 2010 Posté(e) le 20 septembre 2010 Si j'ai bien compris ta question voici comment chez moi je procède: Une xref c'est simplement un autre dessin que tu insères dans ton dessin courant, en passant par Insertion/ref. externes (je suis sous 2006). Donc si tu veux que tes différents éléments constituent chacun une xref individuellement dans un nouveau dessin, il faut créer un dessin par élément (en positionnant les objets aux coordonnées voulues), puis les insérer comme dis précédemment. Mais par contre j'aimerais savoir l'utilité de procéder comme ça, souvent avec les calques il existe déjà pas mal de possibilités. Pour ma part je me sert beaucoup des xref pour des fonds de plan (topo, cadastre, orthophoto...), des éléments de base sur lesquelles aucunes modifications n'est requise, mais c'est peut-être le but recherché pour tes projets? [Edité le 20/9/2010 par Calecx]
lili2006 Posté(e) le 20 septembre 2010 Posté(e) le 20 septembre 2010 Bonjour à toutes et tous, Si c'est un dessin par calque, il y a "LayerToDwg" de (gile) => ;; LAYERTODWG (gile) ;; Crée un fichier DWG pour chaque calque sélectionné (defun c:LayerToDwg (/ acdoc layers prefix name llst ss) (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) layers (vla-get-Layers acdoc) prefix (getvar 'dwgprefix) ) (vlax-for l layers (setq name (vla-get-Name l)) (if (not (wcmatch name "*|*")) (setq llst (cons name llst)) ) ) (setq llst (vl-sort llst ' llst (ListBox "LayerToDwg" "Sélectionnez les calques à traiter" (mapcar 'cons llst llst) 2 ) ) (foreach name llst (if (ssget "_X" (list '(410 . "Model") (cons 8 name))) (progn (setq ss (vla-get-ActiveSelectionSet acdoc)) (vla-Wblock acdoc (strcat prefix name ".dwg") ss) (vla-delete ss) ) ) ) (princ) ) ;; ListBox (gile) ;; Boite de dialogue permettant un ou plusieurs choix dans une liste ;; ;; Arguments ;; title : le titre de la boite de dialogue (chaîne) ;; msg ; message (chaîne), "" ou nil pour aucun ;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...) ;; flag : 0 = liste déroulante ;; 1 = liste choix unique ;; 2 = liste choix multipes ;; ;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2) ;; ;; Exemple d'utilisation ;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoulist) (layoutlist)) 1) (defun ListBox (title msg keylab flag / tmp file dcl_id choice) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line (strcat "ListBox:dialog{label=\"" title "\";") file ) (if (and msg (/= msg "")) (write-line (strcat ":text{label=\"" msg "\";}") file) ) (write-line (cond ((= 0 flag) "spacer;:popup_list{key=\"lst\";") ((= 1 flag) "spacer;:list_box{key=\"lst\";") (T "spacer;:list_box{key=\"lst\";multiple_select=true;") ) file ) (write-line "}spacer;ok_cancel;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "ListBox" dcl_id)) (exit) ) (start_list "lst") (mapcar 'add_list (mapcar 'cdr keylab)) (end_list) (action_tile "accept" "(or (= (get_tile \"lst\") \"\") (if (= 2 flag) (progn (foreach n (str2lst (get_tile \"lst\") \" \") (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice))) (setq choice (reverse choice))) (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab))))) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) choice ) ;; str2lst ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur ;; ;; Exemples ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") ;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3) (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) Sinon, en sélectionnant des entités, il y a "WXREF" du toujours non moins fameux (gile) => ;; WXREF (gile) ;; Crée un nouveau fichier DWG avec les objets sélectionnés. ;; Supprime ces objets du dessin courant. ;; Insère le nouveau fichier comme référence externe. (defun c:wxref (/ dcl_id loop prefix insBase ss basePt insPt insTyp filename unit lst opt xref) (vl-load-com) (defun *error* (msg) (or (= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (and ss (vla-delete ss)) (foreach l lst (vla-put-Lock l :vlax-true)) (vla-EndUndoMark *acdoc*) (princ) ) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (setq dcl_id (load_dialog "Wxref.dcl") loop 2 prefix (getvar 'dwgprefix) insBase T basePt '(0. 0. 0.) unit (getvar 'insunits) filename (UnicFilename "XREF" prefix ".dwg") ) (while ( (if (not (new_dialog "wxref" dcl_id)) (exit) ) (start_list "unit") (mapcar 'add_list '("Sans unités" "Pouces" "Pieds" "Miles" "Millimètres" "Centimètres" "Mètres" "Kilomètres" "Micropouces" "Milles" "Yards" "Angströms" "Nanomètres" "Microns" "Décimètres" "Décamètres" "Hectomètres" "Gigamètres" "Unités astronomiques" "Parsecs" ) ) (end_list) (set_tile "unit" (itoa unit)) (set_tile "filename" filename) (if ss (mode_tile "accept" 0) (mode_tile "accept" 1) ) (if insBase (progn (set_tile "insBase" "1") (mode_tile "insPt" 1) ) (progn (set_tile "insBase" "0") (mode_tile "insPt" 0) ) ) (set_tile "baseX" (rtos (car basePt))) (set_tile "baseY" (rtos (cadr basePt))) (set_tile "baseZ" (rtos (caddr basePt))) (if insBase (progn (set_tile "insX" (strcat "X : " (rtos (car basePt)))) (set_tile "insY" (strcat "Y : " (rtos (cadr basePt)))) (set_tile "insZ" (strcat "Z : " (rtos (caddr basePt)))) ) ) (if (and insPt (not insBase)) (progn (set_tile "insX" (strcat "X : " (rtos (car insPt)))) (set_tile "insY" (strcat "Y : " (rtos (cadr insPt)))) (set_tile "insZ" (strcat "Z : " (rtos (caddr insPt)))) ) ) (action_tile "objSel" "(done_dialog 3)") (action_tile "basePt" "(done_dialog 4)") (action_tile "baseX" "(if (setq coord (distof $value)) (progn (if basePt (setq basePt (list coord (cadr basePt) (caddr basePt))) (setq basePt (list coord (get_tile \"baseY\") (get_tile \"baseZ\")) ) ) (if insBase (set_tile \"insX\" (strcat \"X : \" $value)) ) ) (progn (alert \"Nécéssite un nombre valide\") (mode_tile \"baseX\" 2) ) )" ) (action_tile "baseY" "(if (setq coord (distof $value)) (progn (if basePt (setq basePt (list (car basePt) coord (caddr basePt))) (setq basePt (list (get_tile \"baseX\") coord (get_tile \"baseZ\")) ) ) (if insBase (set_tile \"insY\" (strcat \"Y : \" $value)) ) ) (progn (alert \"Nécéssite un nombre valide\") (mode_tile \"baseY\" 2) ) )" ) (action_tile "baseZ" "(if (setq coord (distof $value)) (progn (if basePt (setq basePt (list (car basePt) (cadr basePt) coord)) (setq basePt (list (get_tile \"baseX\") (get_tile \"baseY\") coord) ) ) (if insBase (set_tile \"insZ\" (strcat \"Z : \" $value)) ) ) (progn (alert \"Nécéssite un nombre valide\") (mode_tile \"baseZ\" 2) ) )" ) (action_tile "insBase" "(if (= $value \"1\") (progn (mode_tile \"insPt\" 1) (setq insBase T) (set_tile \"insX\" (strcat \"X : \" (rtos (car basePt)))) (set_tile \"insY\" (strcat \"Y : \" (rtos (cadr basePt)))) (set_tile \"insZ\" (strcat \"Z : \" (rtos (caddr basePt)))) ) (progn (mode_tile \"insPt\" 0) (setq insBase nil) ) )" ) (action_tile "insPt" "(done_dialog 5)") (action_tile "filename" "(if (and (findfile $value) (not (overwrite))) (mode_tile \"filename\" 2) (setq filename $value) )" ) (action_tile "getfile" "(done_dialog 6)") (action_tile "unit" "(setq unit (atoi $value))") (action_tile "accept" "(if insBase (setq insPt basePt) (if (not insPt) (setq insPt (list (atof (substr (get_tile \"insX\") 5)) (atof (substr (get_tile \"insY\") 5)) (atof (substr (get_tile \"insZ\") 5)) ) ) ) ) (if (= (get_tile \"attach\") \"1\") (setq opt :vlax-false) (setq opt :vlax-true) ) (done_dialog 1)" ) (action_tile "cancel" "(setq ss nil) (done_dialog 0)") (setq loop (start_dialog)) (cond ((= loop 3) (setq ss (ssget ":L")) ) ((= loop 4) (if (setq basePt (getpoint "\nSpécifiez le point de base: ")) (setq basePt (trans basePt 1 0)) ) ) ((= loop 5) (if (setq insPt (getpoint "\nSpécifiez le point d'insertion: ")) (setq insPt (trans insPt 1 0)) ) ) ((= loop 6) (setq filename (getfiled "Créer un fichier DWG" prefix "dwg" 1)) ) ) ) (unload_dialog dcl_id) (if ss (progn (vla-StartUndoMark *acdoc*) (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (vlax-for o ss (vla-Move o (vlax-3d-point basePt) (vlax-3d-point '(0. 0. 0.))) ) (setq iunt (getvar 'insunits)) (setvar 'insunits unit) (vla-Wblock *acdoc* filename ss) (setvar 'insunits iunt) (vlax-for o ss (vla-delete o)) (vla-delete ss) (setq ss nil) (setq xref (vla-AttachExternalReference (vla-get-ModelSpace *acdoc*) filename (vl-filename-base filename) (vlax-3d-point insPt) 1. 1. 1. 0. opt ) ) (vla-EndUndoMark *acdoc*) ) ) (princ) ) ;;; UnicFileneme (gile) ;;; Retourne un chemin complet de fichier unique (incrémenté) ;;; ;;; arguments ;;; pat : modèle du nom de fichier (STR) ;;; dir : chemin du répertoire (STR) ;;; ext : extension (STR) (defun UnicFilename (pat dir ext / ind res) (setq ind 0) (while (findfile (setq res (strcat dir pat (cond (( (( (T "_") ) (itoa (setq ind (1+ ind))) ext ) ) ) ) res ) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
rebcao Posté(e) le 20 septembre 2010 Posté(e) le 20 septembre 2010 Bonsoir, Très utile le LISP pour ce que veut faire Voyageur65. Une fois que tu as saucissonné tous les dessins, il ne te reste plus qu'à les insérer TOUS au même point 0,0 (Menu Insertion : Référence DWG) En principe on peut sélectionner plusieurs références externes à insérer en une fois (si elles sont dans le même dossier). Par contre avec une 2010, il faut avoir installé le SERVICE PACK 1 (AutoCAD 2010 Update 1) car la nouvelle commande d'insertion des XREFS est buggée !!! Sinon, en dépannage on peut utiliser l'ancienne commande _CLASSICXREF Et surtout, utilise plutôt l'option SUPERPOSITION=maillon alors que Association=chaine. Christian Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
voyageur65 Posté(e) le 21 septembre 2010 Auteur Posté(e) le 21 septembre 2010 Bonjour, Je me suis mal exprimé, pardonnez moi. En effet il n’y a pas trop d’intérêt à utiliser les xrefs dans ce cas là. Mais je ne maitrise pas du tout les références externes. Et si je me retrouve en BE pour faire des schémas électriques par exemple, j’imagine qu’il est très probable que je doive ouvrir un plan en xref, que je complète ce plan avec le réseau élec (et donc rajouter une xref), donc je ne saurai pas faire. Je me suis donné en fait cette manip comme exercice. Pour savoir comment éditer des xref et comment ouvrir un plan avec xref. Donc l’idée était de partager ce plan en plusieurs parties avec xref pour chacune et de pouvoir intégrer chaque chose a sa place grâce aux xrefs dans un autre fichier. Je pensais peut être faire un bloc pour chaque partie et ajouter une xref à chacun. Je ne sais pas la procédure à suivre…. Merci de votre contribution
Calecx Posté(e) le 21 septembre 2010 Posté(e) le 21 septembre 2010 faire des schémas électriques par exemple, j’imagine qu’il est très probable que je doive ouvrir un plan en xref, que je complète ce plan avec le réseau élec (et donc rajouter une xref) Sur le principe tes xref permettent d'organiser ton travail: tu ouvre un dessin vierge, sur ce dessin tu souhaite dessiner le réseau électrique, donc dans un 1er temps, tu insère en xref (menu Insertion/Réfernece externes ---> sous 2006 en tout cas) le dwg qui va te servir de base à ton dessin, par exemple le plan du bâtiment.Pour mes projets routiers, j'insere le dwg du cadastre pour donner un exemple, ensuite je passe dans le gestionnaire de calques et tous les calques de ma xref je les passe en couleur 250 pour avoir un fond de plan uni. Cela me permet de mieux distinguer mon projet du fond de plan (plan topo ou cadastre).Ensuite à partir de là tu peu dessiner tes réseaux. Une fois terminer, tu peux aller dans Insertion/Gestionnaire des réf. externes pour détacher ton fond de plan, après une petit purge, tu auras un dessin contenant uniquement ton réseau électrique. Ce dwg pourra à son tour être inséré en xref dans n'importe quel autre dwg (si tu fais la ventilation sur un autre dwg par exemple). [Edité le 21/9/2010 par Calecx]
philsogood Posté(e) le 21 septembre 2010 Posté(e) le 21 septembre 2010 puissant les LISP de (gile) une fois encore!! pfiouuumerci à (gile) et à lili2006phil Projeteur Revit Indépendant - traitement des eaux/CVC
voyageur65 Posté(e) le 23 septembre 2010 Auteur Posté(e) le 23 septembre 2010 Merci à tous, je suis débutant et je ne maitrise pas les lips...Je n'ai qu'une idée de ce à quoi ca peut servire. je vais suivre les cheminements que vous m'avez indiqué, ca devrait pouvoir me débloquer déjà. Merci encore.
lili2006 Posté(e) le 23 septembre 2010 Posté(e) le 23 septembre 2010 Bonjour à toutes et tous, Pour en savoir plus sur l'utilisation des lisps, un sujet de (gile) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
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