philous2 Posté(e) le 23 juin 2008 Partager Posté(e) le 23 juin 2008 Quelqu'un aurait-il une idée sur le moyen de transfomer des polylignes 3D en 2d ( fichier venant de MXROAD sur AUTOCAD).Merci d'avance de vos lumièresPhil Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bred Posté(e) le 23 juin 2008 Partager Posté(e) le 23 juin 2008 Salut,un lisp vite fait qui projètes les points 3D au niveau 0 sur Z :Utilisation de la routine LST2MAT et SUBLST de (gile) - merci - Commande : p2d3d ;;; transforme poly3D en poly2D (defun c:p2d3d (/ ACDOC COORD COORDF PLINE SEL I P) (vl-load-com) (or (setq sel (ssget '((0 . "POLYLINE")))) (setq sel (ssget "_X" '((0 . "POLYLINE"))))) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (repeat (setq i (sslength sel)) (setq p (vlax-ename->vla-object (ssname sel (setq i (1- i)))) coordF nil coord (lst2mat (vlax-safearray->list (vlax-variant-value (vla-get-coordinates p))) 3)) (foreach n coord (setq coordF (append coordF (list (car n) (cadr n) 0.0)))) (setq pline (vla-addPolyline (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) (vlax-make-variant (vlax-SafeArray-fill (vlax-make-SafeArray vlax-vbDouble (cons 0 (1- (length coordF))))coordF)))) (vla-delete p)) ) ;;; LST2MAT Retourne un liste de listes du nombre ; ;;; d'éléments spécifié (matrice) ; ;;; (lst2mat '(1 2 3 4 5 6) 2) -> ((1 2) (3 4) (5 6)) ; ;;; (lst2mat '(1 2 3 4 5 6) 3) -> ((1 2 3) (4 5 6)) ; (defun lst2mat (lst n) (if (and lst (zerop (rem (length lst) n))) (cons (sublst lst 1 n) (lst2mat (sublst lst (1+ n) (- (length lst) n)) n) ) ) ) ;;; SUBLST Retourne une sous-liste ; ;;; Premier élément : 1 ; ;;; (sublst '(1 2 3 4 5 6) 3 2) -> (3 4) ; ;;; (sublst '(1 2 3 4 5 6) 3 -1) -> (3 4 5 6) ; ;;; (sublst '(1 2 3 4 5 6) 3 12) -> (3 4 5 6) ; ;;; (sublst '(1 2 3 4 5 6) 3 nil) -> (3 4 5 6) ; (defun sublst (lst start leng / rslt) (if (not (<= 1 leng (- (length lst) start))) (setq leng (- (length lst) (1- start))) ) (repeat leng (setq rslt (cons (nth (1- start) lst) rslt) start (1+ start)) ) (reverse rslt) ) Edit : Ajout du (vl-load-com) [Edité le 28/8/2009 par Bred] 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 More sharing options...
usegomme Posté(e) le 23 juin 2008 Partager Posté(e) le 23 juin 2008 et merci, Bred . le vlisp est vraiment "puissant" , dommage que je ne m'y sois pas mis car je n'y comprend plus rien et j'ai pris un sacré coup de vieux. Lien vers le commentaire Partager sur d’autres sites More sharing options...
philous2 Posté(e) le 27 août 2009 Auteur Partager Posté(e) le 27 août 2009 Bjr, Pour résoudre mon problème d etransformation de polylignes 3d en 2d venant d eMXROAD je viens d'utilise rla macro de Bred ;;; transforme poly3D en poly2D(defun c:p2d3d (/ ACDOC COORD COORDF PLINE SEL I P) (or (setq sel (ssget '((0 . "POLYLINE")))) (setq sel (ssget "_X" '((0 . "POLYLINE"))))) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (repeat (setq i (sslength sel)) (setq p (vlax-ename->vla-object (ssname sel (setq i (1- i)))) coordF nil coord (lst2mat (vlax-safearray->list (vlax-variant-value (vla-get-coordinates p))) 3)) (foreach n coord (setq coordF (append coordF (list (car n) (cadr n) 0.0)))) (setq pline (vla-addPolyline (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) (vlax-make-variant (vlax-SafeArray-fill (vlax-make-SafeArray vlax-vbDouble (cons 0 (1- (length coordF))))coordF)))) (vla-delete p)) ) ;;; LST2MAT Retourne un liste de listes du nombre ;;;; d'éléments spécifié (matrice) ;;;; (lst2mat '(1 2 3 4 5 6) 2) -> ((1 2) (3 4) (5 6)) ;;;; (lst2mat '(1 2 3 4 5 6) 3) -> ((1 2 3) (4 5 6)) ;(defun lst2mat (lst n) (if (and lst (zerop (rem (length lst) n))) (cons (sublst lst 1 n) (lst2mat (sublst lst (1+ n) (- (length lst) n)) n) ) )) ;;; SUBLST Retourne une sous-liste ;;;; Premier élément : 1 ;;;; (sublst '(1 2 3 4 5 6) 3 2) -> (3 4) ;;;; (sublst '(1 2 3 4 5 6) 3 -1) -> (3 4 5 6) ;;;; (sublst '(1 2 3 4 5 6) 3 12) -> (3 4 5 6) ;;;; (sublst '(1 2 3 4 5 6) 3 nil) -> (3 4 5 6) ;(defun sublst (lst start leng / rslt) (if (not (<= 1 leng (- (length lst) start))) (setq leng (- (length lst) (1- start))) ) (repeat leng (setq rslt (cons (nth (1- start) lst) rslt) start (1+ start)) ) (reverse rslt)) Et ca ne marche pas j'ai ce message d'erreur [surligneur] commande: p2d3dChoix des objets: 1 trouvé(s)Choix des objets:; erreur: no function definition: VLAX-GET-ACAD-OBJECT[/surligneur] Lien vers le commentaire Partager sur d’autres sites More sharing options...
lecrabe Posté(e) le 27 août 2009 Partager Posté(e) le 27 août 2009 Hello et si tu ajoutais un (VL-LOAD-COM) au debut de la routine ! Le Decapode Autodesk Expert Elite Team Lien vers le commentaire Partager sur d’autres sites More sharing options...
philous2 Posté(e) le 27 août 2009 Auteur Partager Posté(e) le 27 août 2009 et si tu ajoutais un (VL-LOAD-COM) au debut de la routine ! OK mais à quel endroit au début ! Autrement merci Le Decapode Phil Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 27 août 2009 Partager Posté(e) le 27 août 2009 Salut, Tu peux l'ajouter avant la routine : entre la ligne de commentaire et (defun ...)ou au début de la routine : entre la ligne (defun ...) et la ligne (or ...) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
philous2 Posté(e) le 27 août 2009 Auteur Partager Posté(e) le 27 août 2009 Merci gile tjrs aussi doué en programmation si si Phil Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bred Posté(e) le 28 août 2009 Partager Posté(e) le 28 août 2009 Salut,j'ai édité le code en rajoutant le (vl-load-com). 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 More sharing options...
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