thierry.garré Posté(e) le 14 septembre 2007 Posté(e) le 14 septembre 2007 Bonjour, c'est encore moi. je cherche un moyen pour supprimer les sommets alignés sur des polylignes 3D, en tenant compte de l'alignement des vecteurs en 3D. le top serai de pouvoir donner une tolérance sur l'alignement des vecteurs... j'ai cherché dans les outils de nettoyage de dessin de Map , (généraliser les polylignes) mais le résultat est un peu trops aléatoire.... merci de vos lumières Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
Tramber Posté(e) le 14 septembre 2007 Posté(e) le 14 septembre 2007 As-tu testé OVERKILL des Express, il fait ce boulot sur les polys2D alors peut-être sur les 3D ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
thierry.garré Posté(e) le 14 septembre 2007 Auteur Posté(e) le 14 septembre 2007 Merci Tramber. je n'ai pas encore teté OVERKILL (je v'ai tout de même tester) mais j'ai trouvé une solution entre temps avec Covadis... Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
_christian_ Posté(e) le 14 septembre 2007 Posté(e) le 14 septembre 2007 Salut Thierryje suis intéréssé de connaitre ta méthode avec covadisMerci d'avance Autocad Map 3D 2018Covadis Autopiste version 17.0eMensura Génius V8
thierry.garré Posté(e) le 14 septembre 2007 Auteur Posté(e) le 14 septembre 2007 au clavier: cnivsimplification3d on indique le rayon "d'un tube" tout les sommets intermédaires contenu dans le tube seront supprimés. actuellement la selection se fait polyligne par polyligne. je crois savoir qu'en V10 la selection devrai pouvoir se faire par calque Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
richard-c Posté(e) le 14 septembre 2007 Posté(e) le 14 septembre 2007 Bonjour, est ce que ta fenetre n'est pas sur un calque isolé ou gelé ? A+
richard-c Posté(e) le 14 septembre 2007 Posté(e) le 14 septembre 2007 je me suis trompé de sujet, Excuse A+ quand même
(gile) Posté(e) le 14 septembre 2007 Posté(e) le 14 septembre 2007 Salut, J'avais fait un LISP pour une demande semblable, je l'ai un peu remanié, si ça peut être utile. ;;; 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)) ) ) ) ;;; ACOS Retourne l'arc cosinus du nombre, en radians (defun acos (num) (cond ((equal num 1 1e-9) 0.0) ((equal num -1 1e-9) pi) (( (atan (sqrt (- 1 (expt num 2))) num) ) ) ) ;;; ANGLE_3PTS Retourne l'angle (radians) défini par son sommet et deux points ;;; L'angle retourné est toujours positif et inférieur à pi radians. (defun angle_3pts (som p1 p2) ((lambda (d1 d2 d3) (if (and ( (ACOS (/ (+ (* d1 d1) (* d2 d2) (- (* d3 d3))) (* 2 d1 d2) ) ) ) ) (distance som p1) (distance som p2) (distance p1 p2) ) ) (defun c:clean_3dpoly (/ acdoc pl tol old new v1 v2) (vl-load-com) (if (and (setq pl (car (entsel "\nSélectionnez une polyligne 3d: "))) (setq pl (vlax-ename->vla-object pl)) (= (vla-get-ObjectName pl) "AcDb3dPolyline") (or (setq tol (getangle "\nSpécifiez l'angle de tolérance : " ) ) (setq tol 0.0) ) ) (progn (vla-StartUndomark (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq old (3d-coord->pt-lst (vlax-get pl 'Coordinates))) (and (= (vla-get-Closed pl) :vlax-true) (setq old (append old (list (car old)))) ) (setq new (list (car old)) old (cdr old) ) (while (cadr old) (setq v1 (mapcar '- (car old) (car new)) v2 (mapcar '- (cadr old) (car old)) ) (if (or (equal '(0 0 0) v1 1e-9) (equal '(0 0 0) v2 1e-9) ( ) (setq old (cdr old)) (setq new (cons (car old) new) old (cdr old) ) ) ) (and (= (vla-get-Closed pl) :vlax-true) (setq old (list (car old))) ) (vlax-put pl 'Coordinates (apply 'append (append (reverse new) old)) ) (vla-EndUndomark (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ) (princ) ) [Edité le 14/9/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 14 septembre 2007 Posté(e) le 14 septembre 2007 Hello Gilles C quoi l'angle que tu demandes en tolérance !? Il décrit (A mon sens) un cone en 3D dans lequel les sommets 3D intermédiaires sont éliminés ? Merci d'avance de tes précisions ... Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 14 septembre 2007 Posté(e) le 14 septembre 2007 Salut lecrabe, On peut effectivement voir ça comme ça. L'axe du cone serait la droite du sommet n au sommet n+2, si le sommet n+1 est dans le cone, il est supprimé. Mais après avoir lu que Covadis fonctionne avec un "cylindre" je vais voir si je peux faire quelque chose dans ce sens. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 14 septembre 2007 Posté(e) le 14 septembre 2007 La version "cylindre". La tolérance est la distance entre la droite de "sommet n" à "sommet n+2" et "sommet n+1" en deçà de laquelle "sommet n+1" sera supprimé. ;;; 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)) ) ) ) ;;; ACOS Retourne l'arc cosinus du nombre, en radians (defun acos (num) (cond ((equal num 1 1e-9) 0.0) ((equal num -1 1e-9) pi) (( (atan (sqrt (- 1 (expt num 2))) num) ) ) ) (defun c:clean_3dpoly (/ acdoc pl tol old new d1 d2 d3) (vl-load-com) (if (and (setq pl (car (entsel "\nSélectionnez une polyligne 3d: "))) (setq pl (vlax-ename->vla-object pl)) (= (vla-get-ObjectName pl) "AcDb3dPolyline") (or (setq tol (getdist "\nSpécifiez la tolérance : " ) ) (setq tol 1e-9) ) ) (progn (vla-StartUndomark (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq old (3d-coord->pt-lst (vlax-get pl 'Coordinates))) (and (= (vla-get-Closed pl) :vlax-true) (setq old (append old (list (car old)))) ) (setq new (list (car old)) old (cdr old) ) (while (cadr old) (setq d1 (distance (car new) (car old)) d2 (distance (car new) (cadr old)) d3 (distance (car old) (cadr old)) ) (if (or ( ( ( (sin (acos (/ (+ (* d1 d1) (* d2 d2) (- (* d3 d3))) (* 2 d1 d2) ) ) ) ) tol ) ) (setq new (cons (car old) new) old (cdr old) ) (setq old (cdr old)) ) ) (and (= (vla-get-Closed pl) :vlax-true) (setq old (list (car old))) ) (vlax-put pl 'Coordinates (apply 'append (append (reverse new) old)) ) (vla-EndUndomark (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ) (princ) ) PS : j'avais oublié de joindre la routine ACOS au LISP précédent, c'est réparé. 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