Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Thu 10 August 2006 16:05

Florent
Participant actif
Lieu: Nantes
Date d'inscription: 5 Sep 2005
Messages: 86
Site web

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: 4741

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

 

Pied de page des forums

Powered by FluxBB