[LISP AutoCAD LT 2024]Lire info XREF en LISP

reb_c2
Advisor
Advisor

[LISP AutoCAD LT 2024]Lire info XREF en LISP

reb_c2
Advisor
Advisor

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

0 J'aime
Répondre
Solutions acceptées (3)
570 Visites
15 Réponses
Replies (15)

DOMICREA
Collaborator
Collaborator

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/

reb_c2
Advisor
Advisor

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

0 J'aime

reb_c2
Advisor
Advisor

 

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

0 J'aime

_gile
Mentor
Mentor
Solution acceptée

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

0 J'aime

reb_c2
Advisor
Advisor
Solution acceptée

 

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

0 J'aime

reb_c2
Advisor
Advisor

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

 

Christian


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

Christian REB

0 J'aime

reb_c2
Advisor
Advisor

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

0 J'aime

-didier-
Advisor
Advisor
Solution acceptée

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

reb_c2
Advisor
Advisor

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

0 J'aime

-didier-
Advisor
Advisor

@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

reb_c2
Advisor
Advisor

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

0 J'aime

reb_c2
Advisor
Advisor

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

0 J'aime

reb_c2
Advisor
Advisor

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

0 J'aime

reb_c2
Advisor
Advisor

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

0 J'aime

_gile
Mentor
Mentor

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

0 J'aime