Aller au contenu

Dessiner des points sur les vertex


lecrabe

Messages recommandés

 

Hello

 

Ah exact Fab, j'aimerais bien aussi une routine qui dessine un point graphique

sur non seulement TOUS les sommets des polylignes (2D ou 3D) mais AUSSI

 

sur TOUS les Vertex des MPOLYGONs (Contours intérieurs et extérieurs) de MAP ou CIVIL !

 

Il faut avoir un MAP ou un CIVIL (me semble t-il) pour faire cette routine !?

 

Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Voilà une routine qui devrait répondre à ton souhait.

Pour les MPOLYGONs, n'ayant pas MAP, j'ai fait avec les exemples que tu m'avais envoyé, je ne peux donc assurer que ça fonctionne dans tous les cas.

 

;;; PT-VTX
;;; Crée un objet point sur tous les sommets des polylignes ou mpolygones sélectionnés.

(defun c:pt-vtx	(/ *error* ss lst)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )

 (defun *error* (msg)
   (princ (strcat "\nErreur: " msg))
   (vla-EndUndoMark *acdoc*)
   (princ)
   )
 
 (setq	space (if (= (getvar "CVPORT") 1)
	(vla-get-PaperSpace *acdoc*)
	(vla-get-ModelSpace *acdoc*)
      )
 )
 (if (ssget '((0 . "*POLYLINE,MPOLYGON")))
   (progn
     (vla-StartUndoMark *acdoc*)
     (vlax-for	obj (setq ss (vla-get-activeselectionSet *acdoc*))
(cond
  ((= (vla-get-objectName obj) "AcDbPolyline")
   (setq lst (PlinePoints obj))
  )
  ((= (vla-get-objectName obj) "AcDbMPolygon")
   (setq lst (mpoly-pts obj))
  )
  ((= (vla-get-objectName obj) "AcDb2dPolyline")
   (setq lst (mapcar
	       (function
		 (lambda (p)
		   (trans p (vlax-get obj 'Normal) 0)
		 )
	       )
	       (3d-coord->pt-lst (vlax-get obj 'Coordinates))
	     )
   )
  )
  ((= (vla-get-objectName obj) "AcDb3dPolyline")
   (setq lst (3d-coord->pt-lst (vlax-get obj 'Coordinates)))
  )
  (T nil)
)
(and lst
     (mapcar
       (function
	 (lambda (p)
	   (vla-addPoint space (vlax-3d-point p))
	 )
       )
       lst
     )
)
     )
     (vla-EndUndoMark *acdoc*)
   )
 )
 (princ)
)

;;; MPoly-pts
;;; retourne la liste des sommets (coordonnées SCG) d'un mpolygon 

(defun mpoly-pts (ent / elst norm base elv)
 (and (= (type ent) 'VLA-OBJECT)
      (setq ent (vlax-vla-object->ename ent))
 )
 (setq	elst (entget ent)
norm (cdr (assoc 210 elst))
base (cdr (assoc 11 elst))
elv  (cdr (assoc 10 elst))
 )
 (mapcar
   (function
     (lambda (p) (trans (mapcar '+ (cdr p) base elv) norm 0))
   )
   (cdr (vl-remove-if-not
   (function (lambda (p) (= (car p) 10)))
   elst
 )
   )
 )
)

;;; 3d-coord->pt-lst
;;; Convertit une liste de coordonnées 3D en liste de points
;;; (3d-coord->pt-lst '(1.0 2.0 3.0 4.0 5.0 6.0)) -> ((1.0 2.0 3.0) (4.0 5.0 6.0))

(defun 3d-coord->pt-lst	(lst)
 (if lst
   (cons (list (car lst) (cadr lst) (caddr lst))
  (3d-coord->pt-lst (cdddr lst))
   )
 )
)

;;; PlinePoints
;;; Retourne la liste des sommets (coordonnées SCG) de la polyligne (ename ou vla-object)

(defun PlinePoints (pl / sub)
 (vl-load-com)
 (or (= (type pl) 'VLA-OBJECT)
     (setq pl (vlax-ename->vla-object pl))
 )

 (defun sub (l e n)
   (if	l
     (cons (trans (list (car l) (cadr l) e) n 0)
    (sub (cddr l) e n)
     )
   )
 )

 (sub (vlax-get pl 'Coordinates)
      (vla-get-Elevation pl)
      (vlax-get pl 'Normal)
 )
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Merci Gile,

 

Encore une routine qui va me permettre de gagner du temps pour la création de mes filaires de voies, car avec ces points, j'utilise l'accroche objet Milieu entre deux points avec seulement ces sommets.

 

Bonne journée,

 

Fabcad

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Sur AutoCAD, "nod-pl" de Bred fonctionne très bien aussi sur les polygones,...

pour la simple raison que les polygones sur AutoCAD sont des "LWPOLYLIGNE".

 

sur Map, je ne connais pas, mais il y a l'air d'y avoir une autre entitée nommé "MPOLYGON".

En imaginant la différence, j'imagine que cet entité doit garder sa forme si on l'étire avec une poignée (à la différence des polygones d'autocad)

 

Mais je ne serais pas étonné que l'entité existe sur autocad normal...

(gile), n'aurais tu pas récupérer un "MPOLYGON" pour voir si on peux l'avoir sur Autocad ?

 

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

De ce que j'en connais, les MPOLYGONs sont des entités complexes : genre polyligne(s) + hachure (avec possibilités d'ilots) + données attachées.

On peut les "lire" avec AutoCAD simple (sauf les données attachées) et récupérer les données DXF qui sont semblables à celles des hachures.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Les Mpolygones sont propres à AutoCAD MAP 3D car ils constituent le moyen correct de créer par exemple un bâtiment et sa cour intérieure en un seul et unique objet. De plus ce sont des surfaciques, cela veut dire qu'ils ont la propriété d'^être remplis ou non. Ce Mpolygone a été créé pour une compatibilité lors de l'import d'autres formats de système d'informations Géographiques (SHP pour Arcview d'ESRI).

 

Pour comparer "un petit peu" ce sont les régions 2D.

 

A+

Lien vers le commentaire
Partager sur d’autres sites

 

Hello Gilles & Fab

 

La nouvelle routine PT-VTX.lsp de Gilles est super ! :)

 

Je l'ai testé avec MAP 2008 sur de multiples MPolygons sans aucun souci particulier ! :D

 

Si un MPolygon contient un cercle alors 2 points graphiques sont dessinés :

un à l'Ouest et l'autre à l'Est

C amusant & cela ne me gène pas du tout car on voit bien que c'est un Cercle

 

Encore un très grand MERCI à Gilles, Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...

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é