Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

je cherhce à récupérer la liste des points x et y sur un calque

pour une entité sélectionné (polyligne, polygone)

 

Comment faire ?

 

Merci pour votre aide ....

Je regardeen attendant un lumière

Posté(e)

Salut,

il y a beaucoup d'exemple dans ce forum, mais je ne comprends pas ta demande :

je cherhce à récupérer la liste des points x et y sur un calque

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

Posté(e)

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Posté(e)

Si c'est juste récupérer les points, j'ai fait dernièrement ceci pour les polylignes dites "3D", transposable facilement pour les lwpolylignes, cela te retourne un fichier .csv récupérable en .xls.

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

Posté(e)

Salut,

 

Une autre routine qui retourne la liste des coordonnées de tout type de polyligne (lw, 2d 3d, maillage), et aussi des faces 3d, repères, multilignes, points, polyfaces, solides 2d et traces.

 

L'argument peut être soit un "ename" soit un "vla-object".

 

Retourne la liste des coordonnées des sommets.

 

Exemple d'utilisation : (getcoord (car (entsel)))

 

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

(defun 2d-coord->pt-lst	(lst)
 (if lst
   (cons (list (car lst) (cadr lst) 0.0)
  (2d-coord->pt-lst (cddr lst))
   )
 )
)

;;; 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))
   )
 )
)

;;; Récupérer la liste des coordonnées de tout type de polyligne

(defun getCoord	(ent)
 (if (= (type ent) 'ENAME)
   (setq ent (vlax-ename->vla-object ent))
 )
 (if (vlax-property-available-p ent 'Coordinates)
   (if	(= (vla-get-ObjectName ent) "AcDbPolyline")
     (2d-coord->pt-lst (vlax-get ent 'Coordinates))
     (3d-coord->pt-lst (vlax-get ent 'Coordinates))
   )
 )
) 

 

[Edité le 9/5/2007 par (gile)]

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

  • 1 an après...
Posté(e)

Salut (gile)

 

J'interviens sur ce post, mais cela aurait pu en être un autre, (comme tu utilise souvent ces fonctions) ;)

 

En fait je m'en suis servi dans cette discussion

 

Et au lieu d'avoir 2 fonctions en utiliser qu'une seule mais avec un argument supplémentaire comme flag

Je l'ai fait comme ceci:

 

(defun l-coor2l-pt (lst flag / )
 (if lst
   (cons (list (car lst) (cadr lst) (if flag (caddr lst) 0.0))
     (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag)
   )
 )
)

et tu pourrais alors faire ceci:

(if (= (vla-get-ObjectName ent) "AcDbPolyline")

(l-coor2l-pt (vlax-get ent 'Coordinates) nil)

(l-coor2l-pt (vlax-get ent 'Coordinates) T)

)

 

Voilà simplement, c'est pas une amélioration majeure :P

 

PS pour ceux qui nous lise: flag=drapeau en language info.

Rien à voir avec pris en "flag" :P

 

[Edité le 5/7/2008 par bonuscad]

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

Posté(e)

Salut Bonuscad,

 

Ta solution est intéressante, le code est concis et élégant.

 

De mon côté j'avais essayé des routines polyvalentes pour retourner la liste des coordonnées d'objet (ename ou vla-object) dans le SCG. Parce que outre les différences de forme des listes retournées par (vlax-get obj 'coordinates) suivant le type d'entité, ces coordonnées sont définies dans le SCG ou dans le SCO de l'objet.

 

Une première qui fonctionne avec tous les types de polyligne (lw, 2d 3d, maillage), et aussi des faces 3d, repères, multilignes, points, polyfaces, solides 2d, traces et splines (points de lissage).

J'ai préféré faire 3 sous routines : l'utilisation d'un flag entrainant des évaluations supplémentaires à chaque appel récursif risque de ralentir la routine sur des listes longues.

 

;;; Coord->Pts (gile)
;;; Retourne la liste des coordonnées SCG des sommets d'un objet
;;; (polyligne, 3dFace, repère, mline, solide 2d, trace, spline)
;;;
;;; Argument
;;; obj : l'objet (ename ou vla-object)

(defun Coord->Pts (obj / lw 2d 3d)
 (vl-load-com)

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

 (defun 2d (l e n)
   (if	l	
     (cons (trans (list (car l) (cadr l) e) n 0)
    (2d (cdddr l) e n)
     )
   )
 )

 (defun 3d (l)
   (if	l
     (cons (list (car l) (cadr l) (caddr l))
    (3d (cdddr l))
     )
   )
 )

 (or (= (type obj) 'VLA-OBJECT)
     (setq obj (vlax-ename->vla-object obj))
 )
 (cond
   ((= (vla-get-ObjectName obj) "AcDbPolyline")
    (lw (vlax-get obj 'Coordinates)
   (vla-get-Elevation obj)
   (vlax-get obj 'Normal)
    )
   )
   ((= (vla-get-ObjectName obj) "AcDb2dPolyline")
     (2d (vlax-get obj 'Coordinates)
    (vla-get-Elevation obj)
    (vlax-get obj 'Normal)
     )
   )
   ((= (vla-get-ObjectName obj) "AcDbSpline")
    (3d (vlax-get obj 'FitPoints))
    )
   ((member (vla-get-ObjectName obj)
     '("AcDb3dPolyline"	   "AcDbFace"
       "AcDbLeader"	   "AcDbMline"
       "AcDbPoint"	   "AcDbPolyFaceMesh"
       "AcDbPolygonMesh"   "AcDbSolid"
       "AcDbTrace"
      )
    )
    (3d (vlax-get obj 'Coordinates))
   )
 )
) 

 

Une autre qui ne fonctionne qu'avec les polylignes (tous types)

 

;;; Poly-Pts (gile)
;;; Retourne la liste des coordonnées SCG des sommets d'une polyligne (tous types)
;;;
;;; Argument
;;; pl : la polyligne (ename ou vla-object)

(defun Poly-Pts	(pl / pa pt lst)
 (vl-load-com)
 (setq	pa (if (vlax-curve-IsClosed pl)
     (vlax-curve-getEndParam pl)
     (+ (vlax-curve-getEndParam pl) 1)
   )
 )
 (while (setq pt (vlax-curve-getPointAtParam pl (setq pa (- pa 1))))
   (setq lst (cons pt lst))
 )
) 

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

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é