Coordonnées Entités
X, Y et Z...
Les coordonnées des objets (des entités) sont les données de base qui permettent de "travailler" ces objets, devoir les extraire est une des bases de la programmation sur des objets dessinés.
Les coordonnées de ces différents types d'objets : (ordre alphabétique, n'y voyez pas de préférences) sont obtenues par l'interrogation de la propriété coordinates sur un objet VLA.
les valeurs renvoyées sont de type Variant (tableau de réels)
Ligne | ||
3DFace | Face3D | un variant de 3 ou 4 points 3D |
3DPolyline | Polyligne3D | un variant de points 3D |
Leader | Ligne de repère | un variant de points 3D |
LWPolyline | Polyligne allégée | un variant de points 2D |
Mline | Multi Ligne | un variant de points 3D |
Point | Point | un variant 3D |
PolyFaceMesh | un variant de points 3D | |
PolygonMesh | un variant de points 3D | |
Polyligne | polyligne (version 14) |
un variant de points 3D (Z ignoré) |
Solid | Solide, pas une entité en 3D 3DSOLID | un variant de points 3D |
SubDMesh | un variant de points 3D | |
SubDMeshVertex | un variant de points 3D | |
Trace | un variant de points 3D |
Pour modifier les coordonnées de l'objet spécifié, il va falloir utiliser les techniques de gestion des tableaux pour traiter les coordonnées contenues dans cette propriété.
PolyfaceMesh, PolygonMesh, Trace
Vous ne pouvez pas modifier le nombre de coordonnées obtenues pas cette propriété, vous ne pouvez modifier que les valeurs des coordonnées existantes.
3DPolyline, Polyline, PolygonMesh :
Pour les polylignes simples (sans courbe ou lissage), cette propriété spécifie des sommets simples.
Pour les polylignes avec courbe ou lissage, cette propriété spécifie les sommets des points de contrôle.
Lorsque vous extrayez les coordonnées d'une polyligne pour la modifier,et qu'à la transformation vous fournissez moins de coordonnées que l'objet possède actuellement, la polyligne sera tronquée.
Si vous fournissez plus de coordonnées que l'objet possède actuellement, les sommets supplémentaires seront ajoutés à la polyligne.
Le système de coordonnées de l'objet pour les polylignes "simple" et "allégée" peut être transformé par la méthode : TranslateCoordinatesmethod.
Polyligne3D
1 2 3 4 5 6 7 8 9 | (setq entvla (vlax-ename->vla-object (car (entsel "\nChoix de l'entité\n")) ) ) (setq coords-vla (vlax-get-property entvla 'coordinates)) (setq coords-liste (vlax-safearray->list (vlax-variant-value coords-vla) ) ) |
La valeur stockée dans la variable "coords-vla" est un tableau (array) : #<variant 8197 ...>
La valeur stockée dans la variable "coords-liste" est une liste de réels :
(4.34604 6.11751 0.0 3.66915 11.9517 0.0 14.6263 12.5013 0.0 16.3608 4.76465 0.0 9.59193 4.34189 0.0 11.0726 7.80857 0.0)
Ce qui est renvoyé est donc une liste (list) de réels, les points des sommets ne sont pas regroupés dans des sous-listes, je dirais que c'est une liste "plate" c'est à dire que toutes les données sont l"une derrière l'autre, en quelque sorte : "en vrac".
Il va être utile voire nécessaire de créer une fonction qui va transformer cette liste "plate" en liste de listes dont chaque "sous-liste" sera le triplet de données habituel soit la valeur X puis le Y et enfin le Z, cette fonction sera bientôt disponible dans les exemples.
Polyligne 2D
(LWpolyligne)
On va utiliser exactement la même syntaxe que pour la polyligne 3D mais ce qui va être renvoyé diffère quelque peu de la polyligne 2D.
1 2 3 4 5 6 7 8 9 10 11 | (setq entvla (vlax-ename->vla-object (car (entsel "\nChoix de l'entité\n") ) ) ) (setq coords-vla (vlax-get-property entvla 'coordinates)) (setq coords-liste (vlax-safearray->list (vlax-variant-value coords-vla) ) ) |
La valeur stockée dans la variable "coords-vla" est un tableau (array) : #<variant 8197 ...>
La valeur stockée dans la variable "coords-liste" est une liste de réels :
(18.6545 21.4363 20.307 28.3116 31.4462 29.2704)
Il n'y a aucun renseignement altimétrique, même pas une notion d'élévation, pour avoir ce renseignement il faudra utiliser une autre propriété :
(setq elev (vlax-get-property entvla 'elevation)) |
Si la polyligne contient des segments courbes (bulge) ces courbures ne sont pas renseignées dans la liste des coordonnées, en cas de segment courbe une coordonnée est donnée au début de l'arc et une autre à la fin :
Ligne
Dans le cas de l'entité "ligne" il ne va pas être possible de faire appel à la propriété "coordinates", toutefois rien n'est perdu !
Pour avoir accès aux points de début et de fin il faudra interroger les propriétés StartPoint et EndPoint, pas besoin d'être un anglophone averti pour comprendre :
(setq entvla (vlax-ename->vla-object (car (entsel "\nChoix de l'entité\n")) ) ) (setq pt-debut (vlax-safearray->list (vlax-variant-value (vla-get-StartPoint entvla) ) ) ) (setq pt-fin (vlax-safearray->list (vlax-variant-value (vla-get-EndPoint entvla) ) ) ) |
Les variables "pt-debut" et "pt-fin" contiennent des listes de trois valeurs :
pt-debut : (15.2718 3.28642 0.0)
pt-fin : (21.2426 3.28642 0.0)
Au fur et à mesure du temps qui passe*** je viendrai compléter ces exemples
*** il n'a que ça à faire le temps ... passer
11 mai 2018
20 mai 2018