PiBey Posté(e) le 23 juillet 2015 Posté(e) le 23 juillet 2015 Bonjour, J'ai un fichier avec environ 200 Xrefs, J'utilise Autocad 2014. Je voudrais sur une présentation faire des lignes de repères qui indique le nom du fichier pointé. Je l'ai déjà fais mais je ne sais plus quel expression diesel ou autre il faut utiliser. Merci de votre aide Pierre
lecrabe Posté(e) le 23 juillet 2015 Posté(e) le 23 juillet 2015 Hello --- Pour lister les XREFs et creer un RTEXT AutoCAD --- Taper au clavier la commande : RTEXTA la question qui suit, vous choisissez : D (comme DIESEL) Et dans la case de dialogue, vous tapez une expression comme suit ...$(xrefs,1) --> Chemin de la XREF $(xrefs,2) --> Nom du DWG $(xrefs,3) --> Chemin de la XREF + Nom du DWG Bye, lecrabe Autodesk Expert Elite Team
PiBey Posté(e) le 23 juillet 2015 Auteur Posté(e) le 23 juillet 2015 Merci Lecrabe, je connais et ce n'est pas ce que je cherche à faire. Je vous joins un exemple de présentation. Pierre
lecrabe Posté(e) le 23 juillet 2015 Posté(e) le 23 juillet 2015 Hello J'ai un truc un peu different de ce que tu demandes ...Une routine XRLIST de notre indispensable Gilles qui liste toutes les XREFs d'un DWG NON-Ouvert ! Bye, lecrabe ;; Lister les XREFs d un dessin qui est FERME ;; Par GC le 02/12/2010 version 1.00 ;; http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=30658#pid132415 (defun c:xrlist (/ filename odbx lst) (vl-load-com) (if (setq filename (getfiled "Choisir le fichier DWG " "" "dwg" 0)) (if (setq odbx (gc:GetAxDbDoc filename)) (progn (vlax-for b (vla-get-Blocks odbx) (if (= :vlax-true (vla-get-IsXref B)) (setq lst (cons (vla-get-Path B) lst)) ) ) (vlax-release-object odbx) (if lst (progn (princ (strcat "\nReferences externes dans :\n" filename)) (foreach x (reverse lst) (princ (strcat "\n\t" x)) ) (textscr) ) (princ (strcat "\nAucune Reference externe dans :\n" filename)) ) ) (princ "\nLe fichier n est pas accessible ") ) ) (princ) ) ;;; gc:GetAxDbDoc ;;; Accéder à un dessin fermé ;;; ;;; Retourne : ;;; un objet IAxDbDocument si le document est trouve ;;; nil si le document n'a pu être trouvé ou s'il est ouvert ;;; ;;; Argument : ;;; Le chemin complet du fichier (defun gc:GetAxDbDoc (filename / axdbdoc release) (setq axdbdoc (vlax-create-object (if (< (setq release (atoi (getvar "ACADVER"))) 16) "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa release)) ) ) ) (if (vl-catch-all-apply 'vla-open (list axdbdoc filename) ) (not (vlax-release-object axdbdoc)) axdbdoc ) ) Resultat sur un DWG avec 4 XREFs DWG : Commande: XRLIST References externes dans :C:\Documents and Settings\user\Mes documents\Test_XREF.dwg C:\TEST\BELFORT\AK.DWG C:\TEST\BELFORT\AH.DWG C:\TEST\BELFORT\AI.DWG C:\TEST\FRANCE_IDF_CARTO\FRANCE_DEPART_L2C.DWG Apres je fais un copier/coller des lignes ci-dessus dans un futur MTEXT du DWG principal ... que j'ouvre dans les instants qui suivent ... Autodesk Expert Elite Team
lecrabe Posté(e) le 23 juillet 2015 Posté(e) le 23 juillet 2015 Hello Et dans le meme genre mais dans le DWG courant, cela genere un fichier TXT tres proche de la routine XRLIST de Gilles ... Bye, lecrabe ;;; xreftree.lsp prints xref treeview to file ;;; http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/list-xref-tree/td-p/2794652 (princ"\nLoading Command Line XrefTree...") (vl-load-com) (defun c:XrefTree ( / GetXrefNesting PrintNestedList outputfile fopen) (defun *error*(msg)(if fopen (close fopen))) (defun GetXrefNesting (/ GetXrefInfo tempData tempEnt XrefList NonNestedXrefList NestedXrefList ) (defun GetXrefInfo ( ent / NestList ) (foreach i (member '(102 . "{BLKREFS") (entget ent)) (if (equal (car i) 332) (progn (setq NestedList (cons (cdr i) NestedList)) (setq NestList (cons (cons (cdr i) (GetXrefInfo (cdr i)) ) NestList ) ) ) ) ) NestList ) ;------------------------------------- (while (setq tempData (tblnext "block" (not tempData))) (if (equal (logand (cdr (assoc 70 tempData)) 4) 4) (progn (setq tempEnt (tblobjname "block" (cdr (assoc 2 tempData)))) (setq tempEnt (cdr (assoc 330 (entget tempEnt)))) (setq XrefList (cons (cons tempEnt (GetXrefInfo tempEnt) ) XrefList ) ) ) ) ) (foreach i XrefList (if (not (member (car i) NestedList)) (setq NonNestedXrefList (cons i NonNestedXrefList)) ) ) NonNestedXrefList ) ;------------------------------------------------ (defun PrintNestedList ( lst spc ) (foreach i (vl-sort lst (function (lambda ( a b ) (< (strcase (cdr (assoc 2 (entget (car a))))) (strcase (cdr (assoc 2 (entget (car B))))))))) (write-line (strcat spc " Nested xref: " (cdr (assoc 2 (entget (car i)))) " --> " (cdr(assoc 1 (tblsearch"BLOCK"(cdr (assoc 2 (entget (car i)))))))) fopen) ; (prompt (strcat "\n" spc " Nested xref: " (cdr (assoc 2 (entget (car i)))))) (PrintNestedList (cdr i) (strcat " |" spc)) ) ) ;----------------------------------------------------- (setq outputfile (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) ".txt" ) ) (setq fopen (open outputfile "w")) (write-line (strcat "Drawing Name --> " (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) ".dwg") fopen) (write-line " |" fopen) (foreach i (vl-sort (GetXrefNesting) (function (lambda ( a b ) (< (strcase (cdr (assoc 2 (entget (car a))))) (strcase (cdr (assoc 2 (entget (car B))))))))) (write-line (strcat " Main xref: " (cdr(assoc 2 (entget (car i)))) " --> " (cdr(assoc 1 (tblsearch"BLOCK"(cdr(assoc 2 (entget (car i)))))))) fopen) ; (prompt (strcat "\n Main xref: " (cdr (assoc 2 (entget (car i)))))) (PrintNestedList (cdr i) " | |-") ) (close fopen) (startapp "notepad.exe" outputfile) (princ) ) ; defun (princ"\n...Loaded. To Start Command type: XrefTree.") (princ) Autodesk Expert Elite Team
PiBey Posté(e) le 24 juillet 2015 Auteur Posté(e) le 24 juillet 2015 Je sais pour l'avoir utilisé qu'il existe une solution beaucoup plus simple. Any Body there ? Help ! Il me reste une semaine et ça me ferait gagner un temps fou. Merci encore lecrab si je ne trouve pas, ta solution m'aidera déjà bien. Pierre
PiBey Posté(e) le 24 juillet 2015 Auteur Posté(e) le 24 juillet 2015 La solution se trouvait dans les champs des lignes de repère multiple.
lecrabe Posté(e) le 24 juillet 2015 Posté(e) le 24 juillet 2015 Hello OUI Bien Sur ! En fait je n'avais vraiment compris ce que tu desirais !? J'avais imagine que tu voulais une liste des XREFs sous une forme ou une autre ... Bye, lecrabe Autodesk Expert Elite Team
PiBey Posté(e) le 27 juillet 2015 Auteur Posté(e) le 27 juillet 2015 En fait je n'ai toujours pas trouvé !
didier Posté(e) le 27 juillet 2015 Posté(e) le 27 juillet 2015 coucou En fait je n'ai toujours pas trouvé ! pourtant ton message (le numéro 7) fait croire le contraireje viens de tester l'utilisation des lignes de repère et des champs et tout fonctionne correctement. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
PiBey Posté(e) le 27 juillet 2015 Auteur Posté(e) le 27 juillet 2015 Bonjour Didier, Je me suis effectivement mal exprimé. Je ne sais plus comment faire pour qu'automatiquement le nom de l'xref s'affiche dans le chant. Comme sur Inventor. Je ne veux pas passer par le choix dans une liste. Quelle option choisir ? Faut-il passer par le langage diesel ? Amicalement Pierre
x_all Posté(e) le 27 juillet 2015 Posté(e) le 27 juillet 2015 je crois qu'on s'éloigne un peu de mon champ de compétence, mais il doit y avoir moyen de faire un blocs dynamique à partir d'un repère et d'un attribut. un peu comme ça.Puis avec un lisp tu peu soit cliquer une Xref et appeler son nom. Soit "immatriculer" toute les Xref à toi après de déplacer les blocs pour que ce soit lisible.Quoi que ça va poser des pb pour le choix du pts d'insertion si elle ont toutes le même.Dans les ref DXF il semblerait que le code 100 corresponde à une Xref ( 100 Subclass marker (AcDbXrecord) )mais je ne trouve pas comment sortir le mon... peut être en VLisp? quelques trucs sur autocad
x_all Posté(e) le 27 juillet 2015 Posté(e) le 27 juillet 2015 tien... j'ai refait un bloc et voila un bout de code qui marche chez moi, mais c'est un peu brut de décoffrageon doit pouvoir faire plus pratique, mieux codé et avec une gestion d'erreur et je ne sais pas récupérer le chemin de l'xref ni les Xref imbriquées l'adresse du bloc est dans les commentaires mais je met le lien ;| xrep insère le nom d'une Xref sur un bloc le bloc Xref doit etre présent ) charger ici : joch04.free.fr/images/lisp-ini/xrep.dwg |; (defun c:Xrep (/ ech xref les-xref lsr_100 x val) (setq ech 3) ; c'est léchelle qui me va mais à changer suivant les unités (princ "\nseléctionner une Xref ") (Setq xref (ssname (ssget) 0) lst-xref (entget xref) ) ;; adapté de cadxp.com/topic/4132_sommets_dune_lwpolyligne/page__view__findpost__p__18891 ;; car j'ai pas trouver mieux pour chopper le 2eme code 100 ou est stocker AcDbBlockReference (setq lst_100 (cadr (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 100)) (entget xref) ) ) ) ) (if (= "AcDbBlockReference" lst_100) (progn (setq val (cdr (assoc 2 lst-xref))) (command "_.-insert" "Xrep" "_non" pause ech ech 0 val) ) (princ "\n ce n'est pas une Xref") ) ;;(c:xrep) ; enlever les 2 ;; si tu veux que ça boucle (princ) ) ;fin defun quelques trucs sur autocad
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