lenoil Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 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
Bred Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 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...
lenoil Posté(e) le 9 mai 2007 Auteur Posté(e) le 9 mai 2007 je voudrais récupérer les liste des coordonnées x et y d'une entité polyligne cad tous les points composant cette polyligne
jalna Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 Regarde icihttp://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=14863#pid58797 Lisp de Bonuscad "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 DammeMon forum : http://plexus.forumactif.org/
Patrick_35 Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 SalutOu encore cette astuce @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 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...
lenoil Posté(e) le 9 mai 2007 Auteur Posté(e) le 9 mai 2007 merci à tous j'ai donc plusieurs solutions sous la main
(gile) Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 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
bonuscad Posté(e) le 5 juillet 2008 Posté(e) le 5 juillet 2008 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 flagJe 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
(gile) Posté(e) le 6 juillet 2008 Posté(e) le 6 juillet 2008 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
Messages recommandé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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant