Aller au contenu

Nom de l'xref pointé par une ligne de repère


Messages recommandés

Posté(e)

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

Posté(e)

Hello

 

--- Pour lister les XREFs et creer un RTEXT AutoCAD ---

 

Taper au clavier la commande : RTEXT

A 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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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?

Posté(e)

tien... j'ai refait un bloc et voila un bout de code qui marche chez moi, mais c'est un peu brut de décoffrage

on 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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité