Aller au contenu

SVP Routine pour 3DFace


lecrabe

Messages recommandés

Hello

 

Je cherche (et je ne trouve pas) une routine qui a partir d'une classique AutoCAD selection de 3DFACE

permette la simplification de 3DFace a 4 sommets/vertex dont les points 3 et 4 sont "proches"

 

1) Poser une question FACTEUR de tolerance/difference acceptable

En fait distance maximum acceptable en 3D

 

- ne touche pas aux 3DFaces ayant 3 sommets/vertex

- ne touche pas aux 3DFaces dont les sommets/vertex 3 et 4 sont "assez" differents

cad distance en 3D entre les points 3 et 4 SUPERIEURE a FACTEUR

- touche aux 4DFaces (en les simplifiant par reduction aux 3 premiers sommets/vertex)

lorsque distance en 3D entre les points 3 et 4

 

Voyez vous ce que je veux dire ?

 

Merci d'avance, lecrabe

" decapodesquement embete par des 3DFaces a 4 sommets dont le 4eme ne m'interesse pas (en general) "

 

PS: Bien entendu je sais que avec ce 4eme point certaines 3DFaces ne sont pas coplanaires ...

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

En voici une :

 

(defun c:SIMPLF ( / acdoc filter ss tol mod tot i f dist pt3 )
 (vl-load-com)
 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
       filter '( (0 . "3DFACE") ))
 (if (cadr (ssgetfirst))
   (setq ss (ssget "_I" filter))
   (progn
     (prompt "\nSélectionnez les faces 3D à simplifier ou <entrée pour toutes> : ")
     (or
       (setq ss (ssget filter))
       (setq ss (ssget "_X" filter))
     )
   )
 )
 (if ss
   (progn
     (vla-startundomark acdoc)
     (setq tol (getreal "\nTolérance (distance mini entre sommets 3 et 4) : ")
           mod 0
           i 0)
     (repeat (setq tot (sslength ss))
       (setq f (entget (ssname ss i))
             dist (distance (setq pt3 (cdr (assoc 12 f))) (cdr (assoc 13 f)) ) )
       (if (and (<= dist tol) (> dist 0))
         (progn
           (entmod (subst (cons 13 pt3) (assoc 13 f) f))
           (setq mod (1+ mod))
         )
       )
       (setq i (1+ i))
     )
     (prompt (strcat "\n" (itoa tot) " faces 3D sélectionnées, " (itoa mod) " simplifiées."))
     (setq ss nil)
     (vla-endundomark acdoc)
   );progn
   (prompt "\nAucune face 3d sélectionnée.")
 )
 (princ)
)

 

As-tu un exemple de dessin dans lequel cette routine serait utile ? :unsure:

Lien vers le commentaire
Partager sur d’autres sites

  • 5 semaines après...

Hello Bryce

 

Sorry pour mon retour TARDIF sur cette routine mais cela ne marche pas (a mon avis)

 

Par exemple tu dessines une simple 3D Face a 4 points au sol (donc tous les Z = 0)

 

Tu testes par la commande DI (distance) la longueur du 4eme cote

et tu essayes avec ta routine d'eliminer ce 4eme cote

et obtenir une 3DFace "triangulaire" ...

 

Merci d'avance pour ton retour ...

 

lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

" decapodesquement embete par des 3DFaces a 4 sommets dont le 4eme ne m'interesse pas (en general) "

 

Est-ce qu'on peut connaitre la raison STP ? C'est à dire, qu'est ce qui te gène dans cette construction de 3DFaces ?

 

J'ai également remarqué ces 4 sommets mais cela ne m'a jamais gêné pour utiliser les modules VRD de covadis par exemple,...

 

D’où mon interrogation !:blink:

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

A cause de DWGs dans lesquels le 4eme point de la 3DFACE existe

et est TRES proche du 3eme point DONC inutile (a mon sens) !

je pense que c un probleme de precision en 3D du logiciel qui a genere les 3DFaces !?

 

A cause de DWGs dans lesquels les 3D Faces ont 4 sommets avec le 3eme = 4eme

donc en fait c des 3DFaces triangulaires mais avec un 4eme sommet debile et inutile ...

 

lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello Bryce

 

Merci pour la correction sur la routine de calcul des surfaces des 3DFaces !

 

Sinon tu as raison pour les 3DFaces a 3 sommets : le 3eme = le 4eme

 

Neanmoins j'aimerais bien svp avoir la routine qui "elimine" le 4eme sommet

(en fait dans ce cas le 3eme = le 4eme si on est "en dessous" de la distance minimum)

 

Merci d'avance, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

C'est exactement ce que fait le Lisp posté plus haut: si la distance entre les points 3 et 4 est supérieure à la tolérance, les coordonnées du point 4 sont remplacées par celles du point 3 -> le point 4 est éliminé. :unsure:

Lien vers le commentaire
Partager sur d’autres sites

Hello Bryce

 

SORRY, SORRY, je suis une grosse truffe : je me suis plante GRAVE sur le CDC/CCTP !

J'ai enfin compris vos interrogations !?

 

Mon probleme, c quand le 4eme vertex est "trop proche" du 1er vertex

et non pas le 4eme vertex "trop proche" du 3eme vertex !!

 

Dans ce cas, on elimine le 4eme vertex ...

 

SVP peux tu me donner la nouvelle version ?

 

Merci d'avance, lecrabe "crapotant un max"

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

(defun c:SIMPLF ( / acdoc filter ss tol mod tot i f dist )
 (vl-load-com)
 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
       filter '( (0 . "3DFACE") ))
 (if (cadr (ssgetfirst))
   (setq ss (ssget "_I" filter))
   (progn
     (prompt "\nSélectionnez les faces 3D à simplifier ou <entrée pour toutes> : ")
     (or
       (setq ss (ssget filter))
       (setq ss (ssget "_X" filter))
     )
   )
 )
 (if ss
   (progn
     (vla-startundomark acdoc)
     (setq tol (getreal "\nTolérance (distance mini entre sommets 1 et 4) : ")
           mod 0
           i 0)
     (repeat (setq tot (sslength ss))
       (setq f (entget (ssname ss i))
             dist (distance (cdr (assoc 10 f)) (cdr (assoc 13 f)) ) )
       (if (and (<= dist tol) (> dist 0))
         (progn
           (entmod (subst (cons 13 (cdr (assoc 12 f))) (assoc 13 f) f))
           (setq mod (1+ mod))
         )
       )
       (setq i (1+ i))
     )
     (prompt (strcat "\n" (itoa tot) " faces 3D sélectionnées, " (itoa mod) " simplifiées."))
     (setq ss nil)
     (vla-endundomark acdoc)
   );progn
   (prompt "\nAucune face 3d sélectionnée.")
 )
 (princ)
)

;)

Lien vers le commentaire
Partager sur d’autres sites

Hello Beautiful EastMan

 

Merci, cette version semble correspondre parfaitement au bon CDC/CCTP ...

 

D'habitude, j'ecris des CDC/CCTP "clairs et nets" mais alors la, j'ai fais tres fort !

En ecrivant entre vertex 3 et 4, alors que je testais (et pensais) sans arret entre vertex 1 et 4 !!

 

Thank you very much, lecrabe "decapodesquement confus"

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

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é