Aller au contenu

Handle=clé mais comment ça marche ?


winfield

Messages recommandés

Je pars sur le principe d'un base de données (entre autre acces, c'est le seul que je sais utiliser).

Une clé est unique, s'il y a une nouvelle entré, la nouvelle clé prends la valeur de : valeur dernière clé +1. Bon, pas la peine de sortir de St-Cyr pour comprendre ça.

tracez 2 ligne, une cote alignée et enfin une poly de 3 sommets dans un nouveau fichier.

Il y a de forte probabilité (?) que le handle (clé) de la 1ère ligne soit 8E, la seconde 8F,le handle de la cote soit 90. et la clé de la poly soit A9.

On sait que les handles sont des nombres héxadécimaux, donc :

8E=142

8F=143

90=144

A9=169

Que se passe-t-il vraiment entre 90 et A9 ?

 

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Patrick,

Merci de ta réponse, mais malheureusement, elle ne me satisfait pas.

Pour moi, toutes choses a une logique, bonne ou mauvaise par rapport au goûts de chacun.

Il se passe des choses entre 90 et A9.

Je pense pouvoir en dire une partie seulement, bien sûr, je peux me tromper.

Entre 90 et A9 (dans le désordre) :

Rappel : entre 90 et A9, il y a une différence de 25

Création des 3 lignes (3)

Création des flèches (ou autres à la place)(2)

Créatiions des points (2)

Créations du Mtexte (1)

Enregistrement dans la base de tous ces objects

Création réelle de l'object cote (1)

Admettant : Un object =1 clé

3 lignes = 3 clés

2 flèches =2 clés

2 points= 2 clés

1 Mtexte=1 clé

Le tout = 1 cote = 1 clé

Même (en étant généreux, on compte le double pour chaque) :

3x3+2x2+2x2+1x1+1x1=15

25-15=10...............ils passent où ceux-là ?

 

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Lien vers le commentaire
Partager sur d’autres sites

Je me suis essayé avec les maintiens (handles).

Je peux dire que la logique y est, c'est une incrémentation toute bête.

 

MAIS, car il y a un mais, c'est vrai que dans un dessin pas mal travaillé (dans le temps), tu ne trouveras plus la logique.

Déjà il faut savoir qu'il est affecté d'une façon UNIQUE. Cela veut dire que si une entité est supprimée de la base de donnée, son handle sera définitivement perdu et ne sera jamais réaffecté. Donc même en faisant une duplication d'entités identiques, elles auront toute un handle différent.

 

Bien sur pour un bloc, ou entité complexe, le handle de l'entité d'entête risque d'être fort éloigné du dernier handle utilisé. Ce qui peut expliquer des sauts dans l'affectation du handle suivant.

 

Voici un lisp (bien qu'on soit dans le VBA) purement dictatique et certainement imparfait que j'avais essayé de faire pour parcourir les entités d'un dessin dans leur ordre de création en utilisant leur handle.

Il n'a aucun interêt a part d'utiliser les maintiens (mais la même chose aurait put être faites avec entnext) sauf qu'ici je peux parcourir la base dans les 2 sens (avec entnext cela n'est pas possible sauf à utiliser une variable pour mémoriser les entités parcourues, mais bonjour la liste dans un dessin énorme)

 

Voilà si j'ai pu éclairer un peu ta lanterne :P

(defun c:back_trace ( / e_first dxf_ent name_ent hd_ent lst_hd lght_lst n ent dxf_67 dxf_0 dxf_8 dxf_410 key)
(if (setq e_first (entnext))
	(setq
		dxf_ent (entget e_first)
		name_ent (cdar dxf_ent)
		hd_ent (cdr (assoc 5 dxf_ent))
		lst_hd (list hd_ent)
	)
)
(while name_ent
	(if (setq e_next (entnext name_ent))
		(setq
			dxf_ent (entget e_next)
			name_ent (cdar dxf_ent)
			hd_ent (cdr (assoc 5 dxf_ent))
			lst_hd (cons hd_ent lst_hd)
		)
		(setq name_ent nil)
	)
)
(cond
	(lst_hd
		(setvar "cmdecho" 0)
		(if (eq (getvar "ctab") "Model")
			(command "_.shademode" "_2d")
		)
		(foreach n lst_hd (redraw (handent n) 2))
		(setq lght_lst (length lst_hd) n 0)
		(princ "\n<+/-> pour remonter ou redescendre la base du dessin; /[Espace] pour finir!.")
		(while (and (>= n 0) (< n lght_lst))
			(setq
				ent (handent (nth n lst_hd))
				dxf_ent (entget ent)
				dxf_67 (assoc 67 dxf_ent)
				dxf_0 (cdr (assoc 0 dxf_ent))
				dxf_8 (cdr (assoc 8 dxf_ent))
				dxf_410 (cdr (assoc 410 dxf_ent))
			)
			(if (/= (getvar "ctab") dxf_410)
				(progn
					(setvar "ctab" dxf_410)
					(if (eq (getvar "ctab") "Model")
						(command "_.shademode" "_2d")
					)
					(foreach n lst_hd (redraw (handent n) 2))
				)
			)
			(cond
				((and
					(= (getvar "ctab") dxf_410)
					(member dxf_0
						(list
							"3DFACE" "3DSOLID" "ACAD_PROXY_ENTITY" "ARC" "ARCALIGNEDTEX" "ATTDEF"
							"BODY" "CIRCLE" "DIMENSION" "ELLIPSE" "HATCH" "IMAGE" "INSERT"
							"LEADER" "LINE" "LWPOLYLINE" "MLINE" "MTEXT" "OLEFRAME" "OLE2FRAME"
							"POINT" "POLYLINE" "RAY" "REGION" "RTEXT" "SHAPE" "SOLID" "SPLINE"
							"TEXT" "TOLERANCE" "TRACE" "VIEWPORT" "WIPEOUT" "XLINE"
						)
					)
				 )
					(setq key (grread nil 2 1))
					(cond
						((member key '((2 13) (2 32)))
							(setq n -1)
						)
						((eq (cadr key) 43)
							(setq n (1- n))
							(redraw ent 2)
							(if (< n 0)
								(progn
									(setq n 0)
									(alert "Dernière entité du dessin atteinte!")
								)
							)
						)
						((eq (cadr key) 45)
							(setq n (1+ n))
							(redraw ent 1)
							(if (= n lght_lst)
								(progn
									(setq n (1- n))
									(alert "Première entité du dessin atteinte!")
								)
							)
						)
					)
					(grtext -1 (strcat "Entité: " dxf_0 " - Calque: " dxf_8))
				)
				(T
					(cond
						((eq (cadr key) 43)
							(setq n (1- n))
							(if (< n 0)
								(setq n 0)
							)
						)
						((eq (cadr key) 45)
							(setq n (1+ n))
							(if (= n lght_lst)
								(setq n (1- n))
							)
						)
						(T
							(setq n (1+ n))
						)
					)
				)
			)
		)
		(grtext)
		(command "_.regenall")
		(setvar "cmdecho" 1)
	)
	(T (alert "Le dessin est vide!"))
)
(prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

Attention il faut etre tres prudent avec les handles car ils peuvent bouger ...

 

Dans le passé certaines applications utilisaient le code de handle en tant que identifiant unique pour se connecter (Relation 1 - 1) avec une base de données, il y a eu des surprises !!!

 

Par exemple lors de l'insertion de ton DWG dans un autre DWG ...

 

A vérifier aussi si tu fais un WBLOC (total ou partiel) de ton DWG, je ne suis pas sur que les handles restent identiques ...

 

Le Decapode "prudent"

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

les handles sont aussi utilisé par certaines applications pour sauvegarder, par exemple, une relation entre un objet et un repère via les xdata.

Les logiciels de ferraillage par exemple. L'objet acier (une polyligne) contient le handle du repère (un bloc avec attributs) et inversement. La finalité est d'obtenir une génération automatique de nomenclature.

La mésaventure qui est arrivée à un copain utilisant un tel logiciel ( Armacad ), c'est qu'il a copié tous ses objets et a effacé les originaux. Tous les objets ont donc changé de handle et les relations entre objet et repère se sont volatilisés.

Depuis, il ne fait plus que des "déplacer", qui ont l'avantage de maintenir les handle.

 

Je ne lui ai pas demandé, mais quand il fait des copier/coller entre fichiers, je pense (je suis même sûr) que les liens entre objet repéré et repère se perdent dans la nature également.

 

Handles in Extended Data

 

Extended data can contain handles (group 1005) to save relational structures within a drawing. One entity can reference another by saving the other's handle in its xdata. The handle can be retrieved later from xdata and then passed to handent to obtain the other entity. Because more than one entity can reference another, xdata handles are not necessarily unique. The AUDIT command does require that handles in extended data either be NULL or valid entity handles (within the current drawing). The best way to ensure that xdata entity handles are valid is to obtain a referenced entity's handle directly from its definition data by means of entget. The handle value is in group 5.

 

When you reference entities in other drawings (for example, entities that are attached with XREF), you can avoid protests from AUDIT by using extended entity strings (group 1000) rather than handles (group 1005). The handles of cross-referenced entities are either not valid in the current drawing, or they conflict with valid handles. However, if an XREF Attach changes to an XREF Bind or is combined with the current drawing in some other way, it is up to the application to revise the entity references accordingly.

 

When drawings are combined by means of INSERT, INSERT*, XREF Bind (XBIND), or partial DXFIN, handles are translated so they become valid in the current drawing. (If the incoming drawing did not employ handles, new ones are assigned.) Extended entity handles that refer to incoming entities are also translated when these commands are invoked.

 

When an entity is placed in a block definition (with the BLOCK command), the entity within the block is assigned new handles. (If the original entity is restored by means of OOPS, it retains its original handles.) The value of any xdata handles remains unchanged. When a block is exploded (with the EXPLODE command), xdata handles are translated in a manner similar to the way they are translated when drawings are combined. If the xdata handle refers to an entity that is not within the block, it is unchanged. However, if the xdata handle refers to an entity that is within the block, the data handle is assigned the value of the new (exploded) entity's handle.

 

 

Les handle, ça n'a pas l'air simple. Je ne préfère pas les utiliser.

 

Amicalement

 

Zebulon_

Prudent comme un crabe

 

[Edité le 8/2/2007 par zebulon_]

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Attention il faut etre tres prudent avec les handles car ils peuvent bouger ...

 

???

 

Le principe des handles est justement qu'il soit fixes, si le nom des entités changent d'une session à l'autre, le handles, lui, reste identique . C'est ce qui permet de retrouver une entité d'une session à l'autre.

 

Mai c'est vrai qu'il faut être prudent, car ils sont vite perdus. Par exemple une coupure d'une entité va faire perdre son handle et 2 nouveaux seront affectés pour les segments obtenus. La commande Wbloc vas recréer entièrement les handles, un copier-coller aussi.

 

Je pense qu'il vaut mieux s'orienter vers les Xdatas qui seront plus souples.

 

Personnellement si je devais utiliser le maintien pour une raison bien précise, je pense que je l'utiliserais avec le code 60 (mise en invisibilté de l'entité) pour conserver toutes les chances de retrouver mes petits...

Mais vu l'usage courant de la commande Wbloc ou le copier-coller, je pense que cette technologie de maintien est à oublier.... du moins pour un usage entre différentes sessions.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

salut

 

le sujet est vieux mais bon

 

Si ça peut aider :

 

j'ai refait l'exemple de départ, c'est à dire 1 ligne + 1 ligne + une cote + une poly

---------------------------

Ligne1 = EF

Ligne2 = EF

 

Cote

LayerTableRecord= F2

line = F4

line = F5

line = F6

Solid = F7

Solid = F8

MText = F9

Point = FA

Point = FB

Point = FC

BlockBegin = FD

BlockEnd = FE

BlockTableRecord = F3

RotateDimension = F1

Dictionnary = FF

line = 100

line = 101

line = 102

Solid = 103

Solid = 104

MText = 105

Point = 106

Point = 107

Point = 108

DimAssoc = 109

/Cote

 

Poly = 10A

---------------------------

on rajoute une seconde cote :

layerTablrRecord est zappé, normal, ça existe déjà. Par contre, il y a ViewportTableRecord en plus.

on rajoute une troisième cote, rien de nouveau.

Dans l'exemple; il n'y a que les hic (qui peuvent se comprendre et qui sont logique), ce sont les saut de F0 à F2 ; de 254 à 243 et 241 à 255

 

Comme l'a dit Bonuscad, il y a bien une logique

 

 

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Lien vers le commentaire
Partager sur d’autres sites

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é