#1 Thu 10 August 2006 16:05
VBA - Objets "entity" et identifiant unique persistant
Bonjour,
Sous AutoCAD 2006, je fais tourner un prog (vba) qui me retourne pour un layer précis des informations sur les objets. Plus clairement je récupère des propriétés de la classe Entity.
Mon souci, je dois comparer ces propriétés dans le temps et par conséquent, je dois disposer d'un identifiant unique par objets !
J'ai bien essayé avec entity.objectID mais en fait cette valeur unique pendant la session est recalculée par AutoCAD à chaque fermeture du dwg.
Bref, y a t'il une propriété qui me permettrait d'accéder à un identifiant unique quelconque au sein des objets d'un DWG ?
Si non, avez-vous une autre piste, du type création d'un id que je stockerais dans une propriété d'un objet ? (désolé je résonne en sigiste...)
Merci d'avance
Florent
Hors ligne
#2 Sun 27 August 2006 21:57
- Patrice
- JeSuisCharlie
- Date d'inscription: 16 Sep 2005
- Messages: 4794
Re: VBA - Objets "entity" et identifiant unique persistant
Bonsoir Florent
Désolé mais je suis pas programmeur en Lisp, V-Lisp, VBA ou ARX C++ sous AutoCAD
donc ma réponse ne sera pas complète ...
Il faut savoir que Autodesk a introduit avec AutoCAD R11 la notion de Handle (Identifiant unique d'un objet graphique) dans un fichier DWG, cependant ce Handle peut changer au chargement du DWG ou lorsque qu'un DWG est inséré dans un autre DWG puis décomposer ... etc ...
Ce Handle (qui ne bougeait pas trop dans le passé) est devenu "très mouvant" depuis de nombreuses années dans les versions successives d'AutoCAD. C'est pouquoi il ne faut surtout pas se baser dessus pour développer ! Ou alors seulement dans la session en cours !
Par exemple, prenez un dessin réellement vierge, dessiner une ligne (ou quoique ce soit), sélectionner l'objet et faites la bonne vieille commande LISTE et vous obtiendrez le Handle (Maintien en Français) qui est une valeur entre environ 10-20-30 en Hexa et FFFFFFFF.
En fait pour disposer d'un identifiant FIABLE, il faut utiliser les bons vieux XDATA (apparus eux aussi avec la version R11).
ATTENTION: J'espère que les routines Bonus/Express ont été installées avec ton AutoCAD ou MAP ou CIVIL 2004 / 2005 / 2006 / 2007.
Taper au clavier XDATA
Puis choisissez l'objet graphique voulu ...
Enter Application Name: FLORENT (par exemple)
Enter an option
[3Real/DIR/DISP/DIST/Hand/Int/LAyer/LOng/Pos/Real/SCale/STr/eXit] <eXit>:
ST (par exemple pour saisir ensuite une chaîne de caractères ...)
Enter ASCII string: TEST
Puis ENTREE pour sortir ou X comme eXit
Ainsi on peut stocker jusqu'à 16 Ko d'information sur chaque objet graphique.
C'est par la commande XDLIST que tu pourras visualiser les XDATAs (Si ils existent) de chaque objet graphique ...
C'est très FRUSTE car en fait ceci est réservé (depuis toujours) aux Développeurs pour qu'ils stockent ce dont ils ont besoin pour chacune de leur application !
Si par exemple tu insères un DWG dans un autre DWG (en tant que BLOC) et que tu le décomposes ("_EXPLODE"), tu vas RECUPERER tes XDATAs sans problème !
Idem si tu décomposes une polyligne, les XDATAs sont conservés !
Tu trouveras le source en AutoLisp de ces 2 fonctions XDATA & XDLIST dans le fichier "XDATA.LSP" du sous-catalogue "EXPRESS" du catalogue d'installation de ton AutoCAD ou MAP ou CIVIL.
Je ne sais pas du tout comment refaire en VBA ces fonctions XDATA / XDLIST !?
Tu peux peut être les appeler depuis ton programme VBA ... I don't konw !
J'espère t'avoir aidé quelque peu ... GeoBye, Pat
(Autodesk Expert Elite Team)
Hors ligne