fradiqueluis Posté(e) le 10 décembre 2013 Posté(e) le 10 décembre 2013 Bonjour à tous, je voulais avant tout remercier la contribution de chaque personne. Car je sais que beaucoup d'entre vous apportent leurs aides sur leurs temps libre. Donc un Grand Merci. Alors je m'explique, je suis à la recherche d'un lisp qui pourrait me permettre de permuter des face 3d d'un MNT.C'est une fonction existante dans covadis, pour ceux qui connaissent le produit. J'espère que quelqu'un à une solution pour moi. Merci
lecrabe Posté(e) le 10 décembre 2013 Posté(e) le 10 décembre 2013 Hello Donc si j'ai bien compris tu as un MNT 3D dans AutoCAD constitue de N 3DFaces SVP cela signifie quoi exactement : permuter les Faces 3D ?? Bye, lecrabe Autodesk Expert Elite Team
fradiqueluis Posté(e) le 10 décembre 2013 Auteur Posté(e) le 10 décembre 2013 Hello, oui j'ai un mnt 3d avec des faces 3d. Je vais essayer d’expliquer mon problème. J'ai deux faces 3d. A-B-C et B-C-D avec un clique sur la droite B-C il permute les faces comme sur mon image. Bonne journée
ElpanovEvgeniy Posté(e) le 10 décembre 2013 Posté(e) le 10 décembre 2013 Vous posez des questions sur Civil 3D ou AutoCAD?Je voulais savoir, vous spécifiez deux objet 3dfase ou est un objet ayant 4 sommets? en: You ask about Civil 3d or Autocad?I wanted to know, you specify two 3dfase object or one object having 4 different points? ps. this google translate :( Evgeniy
fradiqueluis Posté(e) le 10 décembre 2013 Auteur Posté(e) le 10 décembre 2013 Ma question est sur autocad. Dans autocad les propriétés de l'objet c'est des face 3D avec 4 sommet. Dans les 4 sommet, 2 sommet ont les mêmes coordonnées. J'espère que vous avez une solution à mon problème. Un lisp serrait génial.
ElpanovEvgeniy Posté(e) le 10 décembre 2013 Posté(e) le 10 décembre 2013 placer ici:(princ (entget(car(entsel"\n sélectionner 3d Face: ")))) Evgeniy
(gile) Posté(e) le 10 décembre 2013 Posté(e) le 10 décembre 2013 Salut, Tu peux essayer ça (bien que, normalement, la méthode Delaunay optimise la triangulation).L'utilisateur sélectionne l'arrête commune aux deux faces à permuter.La sélection (un seul clic) doit contenir deux et seulement deux faces. ces faces doivent être triangulaires et avoir une arrête commune (deux sommets communs confondus) sinon le programme affiche un message d'erreur. ;; SWAP3DFACES ;; Permute les deux faces 3d dont l'arrête commune est sélectionnée (defun c:swap3dfaces (/ getVertices getVertices getTriangle entmodFace ss elst1 elst2 pts1 pts2 inter p1 p2) (vl-load-com) (defun isVertex (x) (member (car x) '(10 11 12 13))) (defun getVertices (elst) (mapcar 'cdr (vl-remove-if-not 'isVertex elst)) ) (defun getTriangle (pts) (if (= 3 (length (setq pts (gc:distinct pts)))) (if (gc:clockwise (car pts) (cadr pts) (caddr pts)) (reverse pts) pts ) ) ) (defun entmodFace (elst pts) (entmod (append (vl-remove-if 'isVertex elst) (list (cons 10 (car pts)) (cons 11 (cadr pts)) (cons 12 (caddr pts)) (cons 13 (caddr pts)) ) ) ) ) (if ; <- remplacer par while pour une commande répétitive (and (setq ss (ssget "_:E:S" '((0 . "3DFACE")))) (= 2 (sslength ss)) ) (if (and (setq pts1 (getTriangle (getVertices (setq elst1 (entget (ssname ss 0)))) ) ) (setq pts2 (getTriangle (getVertices (setq elst2 (entget (ssname ss 1)))) ) ) ) (if (= 2 (length (setq inter (gc:intersect pts1 pts2)))) (progn (vla-StartUndoMark (vla-get-Activedocument (vlax-get-acad-object)) ) (setq p1 (car (gc:substract pts1 inter)) p2 (car (gc:substract pts2 inter)) ) (if (gc:clockwise p1 p2 (car inter)) (setq pts1 (list (car inter) p2 p1) pts2 (list p1 p2 (cadr inter)) ) (setq pts1 (list p1 p2 (car inter)) pts2 (list (cadr inter) p2 p1) ) ) (entmodFace elst1 pts1) (entmodFace elst2 pts2) (vla-EndUndoMark (vla-get-Activedocument (vlax-get-acad-object)) ) ) (princ "\nL'arrête sélectionnée n'est pas commune aux deux faces" ) ) (princ "\nFace(s) non tiangulaire(s)") ) (princ "\nSéléction non valide") ) (princ) ) ;; gc:Clockwise ;; Evalue si les points p1 p2 et p3 tournent dans le sens horaire ;; ;; Arguments ;; p1, p2, p3 trois points 2d figurant un triangle dans le plan XY (defun gc:Clockwise (p1 p2 p3) (< (- (* (- (car p2) (car p1)) (- (cadr p3) (cadr p2))) (* (- (cadr p2) (cadr p1)) (- (car p3) (car p2))) ) 1e12 ) ) ;; gc:distinct ;; Suprime tous les doublons d'une liste ;; ;; Argument ;; l : une liste (defun gc:distinct (l) (if l (cons (car l) (gc:distinct (vl-remove (car l) l))) ) ) ;; gc:intersect ;; Retourne la liste des éléments communs à l1 et l2 ;; ;; Arguments ;; l1 : une liste ;; l2 : une liste (defun gc:intersect (l1 l2) (if l1 (if (member (car l1) l2) (cons (car l1) (gc:intersect (cdr l1) l2)) (gc:intersect (cdr l1) l2) ) ) ) ;; gc:substract ;; Retourne une liste contenant les éléments appartenant exclusivement à l1 ;; ;; Arguments ;; l1 : une liste ;; l2 : une liste (defun gc:substract (l1 l2) (if l1 (if (member (car l1) l2) (gc:substract (cdr l1) l2) (cons (car l1) (gc:substract (cdr l1) l2)) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fradiqueluis Posté(e) le 10 décembre 2013 Auteur Posté(e) le 10 décembre 2013 Salut Gile, c'est exactement ça que je voulais. Un grand merci à toi et a ceux qui on prit le temps de me répondre... Merci
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