Communauté
AutoCAD – tous produits - Français
Bienvenue sur les forums AutoCAD d’Autodesk. Partagez vos connaissances, posez des questions, et explorez les sujets AutoCAD populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

[LISP AutoCAD LT 2024]Lire info XREF en LISP

15 RÉPONSES 15
RÉSOLU
Répondre
Message 1 sur 16
reb_c2
571 Visites, 15 Réponses

[LISP AutoCAD LT 2024]Lire info XREF en LISP

Bonjour à Toutes et à Tous,

 

Je suis en train de tester le LISP de la LT 2024 et j'essaye de trouver comment accéder aux infos d'un fichier inséré en  XREF, comme la date, sa taille, son chemin, etc.

 

Si je fais un ENTGET, je constate des entités imbriquées !

 

((-1 . <Nom d'entité: 23b2f2482f0>) (0 . "INSERT") (330 . <Nom d'entité: 23b0dd2e280>) (5 . "A0E7") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (2 . "TEST LDATA - XDATA") (10 0.0 0.0 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))

 

Dans un DXF je trouve bien le chemin de la XREF,  derrière un code :     100 et AcDbBlockBegin

 

Mais comment on y arrive via le LISP ?


Je vous remercie.
Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

15 RÉPONSES 15
Message 2 sur 16
DOMICREA
en réponse à: reb_c2

Je suis en train de tester le LISP de la LT 2024 et j'essaye de trouver comment accéder aux infos d'un fichier inséré en  XREF, comme la date, sa taille, son chemin, etc.

 

Bonjour @reb_c2 

Au cas ou ...il y a ce Lisp (je ne l'ai pas testé sur LT 2024) :

Xref Stamp - créez une liste dynamique de Xréfs dans votre dessin DWG .

Avec l' utilitaire gratuit LISP ( reactor ) Xref Stamp, vous pouvez créer une liste dynamique et configurable de toutes les xréfs référencées à partir de votre dessin principal. Cette liste peut être affichée dans les Commentaires et dans un bloc d'étiquette. La liste peut inclure les chemins complets, les tailles et les dates des différents dessins externes.

Téléchargez le fichier Xref Stamp VLX à partir de Download , chargez-le dans votre AutoCAD avec APPLOAD (vous souhaiterez peut-être le charger automatiquement, alors faites-le glisser vers l'icône du bloc-notes) et tapez la commande XREF STAMP pour le lancer.

Spécifiez les options : la liste Format, le nom du bloc d'étiquette (le cas échéant) avec un attribut multiligne, s'il faut mettre à jour les commentaires dans les propriétés DWG et s'il faut démarrer un réacteur pour les mises à jour futures. Ou utilisez simplement [apply] pour créer la liste. Il sera affiché dans la ligne de commande, éventuellement mis à jour dans les commentaires de votre dessin et étiqueté dans votre(vos) bloc(s) d'étiquette. Si le réacteur est activé, toute mise à jour future des xréfs sera reflétée dans votre bloc d'étiquette et/ou dans les commentaires DWG .

Le format d'affichage des lignes de xréf individuelles peut être spécifié par une chaîne de format dans laquelle les propriétés de xréf individuelles sont codées sous la forme $X ( nom de la xréf ), $N (nom de fichier), $P (chemin), $S (taille en octets ou $KS taille en kilo-octets), $T (horodatage) ou composants individuels de la date et de l'heure. La chaîne de format par défaut est :

"\r\n[$X] = $P | $KSkB @ $D.$M.$Y $H:$M"

Le nom du bloc d'étiquette par défaut est " XREF STAMPBLOCK" (créez n'importe quel bloc avec un attribut multiligne). Les valeurs par défaut sont Commentaires activés et Réacteur activé. Les Xréfs déchargées ne sont pas répertoriées.

Tous les paramètres sont stockés dans le registre afin qu'ils soient enregistrés entre les sessions. Vous pouvez également les modifier dans le Registre (voir HKCU\SOFTWARE\Arkance Systems\ Xref Stamp ).

Pour une simple liste de xréfs , utilisez RText - voir Astuce 2513 .

(Traduit par Google)

Source : https://www.cadforum.cz/

 





Dominique Michy (EI) - Formateur AutoCAD, Revit Architecture, SketchUp, V-Ray - https://www.domicrea.fr/
Message 3 sur 16
reb_c2
en réponse à: DOMICREA

Salut Dominique,

Je te remercie, pour le lien, par contre, lorsque je teste le .VLX, il affiche une erreur !   ; erreur: type d'argument incorrect: numberp: nil

 

Peut-être parce que c'est un version LT ?

 

Mais comme c'est un .VLX, je n'ai pas accès au source pour comprendre la fonction qui permet d'accéder au chemin d'une XREF ?


Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

Message 4 sur 16
reb_c2
en réponse à: DOMICREA

 

J'ai retrouvé ce sujet... comme d'hab ! Il y a du Gilles la dessous...  😊

 

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

Message 5 sur 16
_gile
en réponse à: reb_c2

Salut,

 

Une xref est une référence de bloc (INSERT en DXF),

Il faut donc aller inspecter la définition du bloc qui se trouve dans la table des blocs.

;; Nom de la référence de bloc de la référence externe
(setq nomXref (cdr (assoc 2 (entget xref))))

;; Données DXF de la définition de bloc de la référence externe
(entget (tblobjname "block" nomXref))

 

Ne pas oublier les fonctions getpropertyvalue / setpropertyvalue et dumpallproperties qui permettent d'accéder aux propriétés des entités et objets AutoCAD.

(dumpallproperties xref) renvoie toutes les propriétés dans la fenêtre de texte.

(getpropertyvalue xref "BlockTablerecord") renvoie le nom d'entité (ENAME) de la définiton du bloc.

(getpropertyvalue (getpropertyvalue xref "BlockTablerecord") "PathName") renvoie le chemin du fichier.



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Message 6 sur 16
reb_c2
en réponse à: DOMICREA

 

J'ai trouvé, ma réponse dans le sujet avec le CODE à Gilles...

 

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

Message 7 sur 16
reb_c2
en réponse à: _gile

Merci Gilles, nos messages se sont croisés...

 

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

Message 8 sur 16
reb_c2
en réponse à: _gile

Hello, Gilles @_gile 

 

Crois-tu qu'un jour la commande APPLOAD sera modernisée ????????

Elle est toujours aussi laborieuse à utiliser !!!

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

Message 9 sur 16
-didier-
en réponse à: reb_c2

Bonjour Christian @reb_c2 

Edit : Oops ! pendant que je préparais ma réponse, tu es intervenu à nouveau et Gilles aussi, pardon...

Je travaille un peu sur le lisp pour LT et du coup, je viens te répondre, car j'ai écrit ça pour tester.

J'ai choisi de sélectionner une entité à l'écran, mais c'est une hypothèse, pas une obligation.

Voici ce que je te propose :

 

;sélection de l'entité
(setq xref (car (entsel "\cliquez une entité de l'xref ...")))
;test si c'est une xref
(if (= (getpropertyvalue xref "LocalizedName") "Référence externe")
       (progn
           (setq cheminxref (getpropertyvalue xref "ExternalPath")
                 datexref (vl-file-systime cheminxref)
                 taillexref (vl-file-size cheminxref)
                 )
           )         
    (alert "l'entité sélectionnée n'est pas une xref")
    )
;affichage du résultat
(alert (strcat "le fichier en xref est : " cheminxref
               "\nIl fait " (itoa taillexref) " octets"
               "\n il date du : "
               (strcat 
(itoa (nth 4 datexref))"-"(itoa (nth 1 datexref))"-"(itoa (nth 0 datexref))
               )
       )
)

 

En souhaitant que ça fonctionne aussi chez toi.

 

Amicalement

Éternel débutant.. my site for learning : Programmer dans AutoCAD

DA

EESignature

Message 10 sur 16
reb_c2
en réponse à: -didier-

Je te remercie Didier.

 

Oui pour l'instant je suis agréablement surpris,   😊   pas mal de LISPs fonctionnent avec LT 2024... On va bien tomber sur un os un jour... 😅

 

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

Message 11 sur 16
-didier-
en réponse à: reb_c2

@reb_c2 

 

Ne regarde pas ce qui ne fonctionne pas, c'est trop négatif comme approche.

Utilise ce qui fonctionne, il faut bien qu'il reste des différences Full/Lite.

Amicalement

Éternel débutant.. my site for learning : Programmer dans AutoCAD

DA

EESignature

Message 12 sur 16
reb_c2
en réponse à: -didier-

Mouais, le LISP est un plus pour les versions LT, mais avant de l'utiliser réellement, comme j'ai de nombreux clients qui ne souhaitent pas pour l'instant passer à la LT 2024... ce n'est pas essentiel pour moi !

 

J'aurais préféré quelques réponses à mes 112 QuestionsSujet que tu avais d'ailleurs commenté de manière constructif et je te remercie... 

 

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

Message 13 sur 16
reb_c2
en réponse à: -didier-

Merci Didier @-didier- 

 

Marche très bien ton CODE avec LT 2024  😍

 

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

Message 14 sur 16
reb_c2
en réponse à: reb_c2

En faisant quelques TESTS, il n'aime pas si la XREF est en CHEMIN RELATIF !

 

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

Message 15 sur 16
reb_c2
en réponse à: reb_c2

J'ai ajouté une fonction FINDFILE qui règle le problème du CHEMIN RELATIF !

 


;;; -------------------------
;;; NEW informations XREF
;;; -------------------------
(defun	C:XREFinfoNEW()

	(setq	SELXREF	( car (entsel "\nSélectionner une XREF...") ) )

	;test si c'est une xref
	(if (= ( getpropertyvalue SELXREF "LocalizedName") "Référence externe")

       		(progn
			(setq	XREF_DIR	( getpropertyvalue	SELXREF	 "ExternalPath" 	)
				XREF_DATE	( vl-file-systime	( findfile	XREF_DIR )	)
				XREF_NAME	( getpropertyvalue	SELXREF	 "BlockTableRecord/Name")
				XREF_DIMFILE	(/ ( vl-file-size 	( findfile	XREF_DIR )	)	1000000.0 )
				DATEXREF	( strcat	( itoa (nth 4 XREF_DATE ) )	"/"
								( itoa (nth 1 XREF_DATE ) )	"/"
								( itoa (nth 0 XREF_DATE ) )
               					);strcat
			);setq

			( prompt	"\nXREF Name     : ")	( princ	XREF_NAME    		)
			( prompt	"\nXREF Path     : ")	( princ	XREF_DIR     		)
			( prompt	"\nXREF Path Abs : ")	( princ	( findfile XREF_DIR )   )
			( prompt	"\nXREF Date     : ")	( princ	DATEXREF     		)
			( prompt	"\nXREF Taille   : ")	( princ	( rtos XREF_DIMFILE 2 2 ) ) (prompt " Mo")

			;;; ------------------------------------
			;;; Affiche TOUTES les propriétés XREF
			;;; ------------------------------------
			(defun	C:XREFHELP()
				(dumpallproperties SELXREF )
			(princ)
			);defun
		);progn

		(alert "Didier a dit ☺ ☺ ☺ : \nl'entité sélectionnée n'est pas une xref")
	);if
(princ)
);defun

 

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

Message 16 sur 16
_gile
en réponse à: reb_c2

Petite remarque :

(= ( getpropertyvalue SELXREF "LocalizedName") "Référence externe")

ne fonctionnera que sur une version française ("LocalizedName").

Pour un fonctionnement quelle que soit la version (toujours préférable), il vaut mieux faire :

(= (getpropertyvalue (getpropertyvalue SELXREF "BlockTableRecord") "IsFromExternalReference") 1)


Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report