Aller au contenu

Z maxi d\'une poly 3D


gi²

Messages recommandés

Bonjour,

 

je cherche un lisp (ou une fonction ?) qui me permetrait de lister ou d'afficher rapidos le Z maxi des sommets d'une poly 3D.

 

Quelq'un a-t-il la solution siouplait ?

C'est parce que la vitesse de la lumière est supérieure à celle du son que certains ont l'air brillants ...

avant d'avoir l'air idiots.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Je te laisse compléter suivant ton besoin.

La fonction retourne le point 3D ayant le Z le plus élevé.

 

(vl-load-com)
(defun c:max_z ( / js obj ename pr pt lst_pt lst_z id_seg)
(princ "\nSelectionner une polyligne3D: ")
(while (null (setq js (ssget "_+.:E:S" '((0 . "POLYLINE") (-4 . "&") (70 . 8)))))
	(princ "\nObjet non valable!")
)
 (setq
   obj (ssname js 0)
   ename (vlax-ename->vla-object obj)
   pr -1
 )
 (repeat (if (zerop (vlax-get ename 'Closed)) (1+ (fix (vlax-curve-getEndParam ename))) (fix (vlax-curve-getEndParam ename)))
   (setq
     pt (vlax-curve-GetPointAtParam ename (setq pr (1+ pr)))
     lst_pt (cons pt lst_pt)
   )
 )
 (setq
   lst_z (mapcar 'caddr lst_pt)
   id_seg (- (length lst_z) (length (member (apply 'max lst_z) lst_z)))
 )
 (nth id_seg lst_pt)
)

 

[Edité le 3/2/2009 par bonuscad]

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

merci beaucoup Môssieur Bonuscad !

Je met çà sur ma babasse tout de suite.

 

A+

C'est parce que la vitesse de la lumière est supérieure à celle du son que certains ont l'air brillants ...

avant d'avoir l'air idiots.

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

SVP je me permet de demander une fonction un peu plus poussée :

la Bounding Box 3D d'une polyligne 3D

(On suppose que les Z varient sinon on obtiendra un simple rectangle 2D)

 

C'est à dire dessiner la Boîte 3D (en 3D Face svp) dans laquelle

est contenu l'ensemble d'une polyligne 3D

 

Merci d'avance, Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Au Décapode Bounding Boxant

 

(vl-load-com)
(defun c:bbox3d ( / js n obj ename AcDoc Space pr pt lst_pt lst_x lst_y lst_z pt_min pt_max p2 p3 p4 p5 p6 p8)
 (princ "\nSelectionner des polyligne3D: ")
 (setq js (ssget '((0 . "POLYLINE") (-4 . "&") (70 . 8))))
 (cond
   (js
     (setq n -1)
     (repeat (sslength js)
 (setq
   obj (ssname js (setq n (1+ n)))
   ename (vlax-ename->vla-object obj)
   AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
   Space
   (if (= 1 (getvar "CVPORT"))
     (vla-get-PaperSpace AcDoc)
     (vla-get-ModelSpace AcDoc)
   )
   pr -1
 )
 (repeat (if (zerop (vlax-get ename 'Closed)) (1+ (fix (vlax-curve-getEndParam ename))) (fix (vlax-curve-getEndParam ename)))
   (setq
     pt (vlax-curve-GetPointAtParam ename (setq pr (1+ pr)))
     lst_pt (cons pt lst_pt)
   )
 )
 (setq
   lst_x (mapcar 'car lst_pt)
   lst_y (mapcar 'cadr lst_pt)
   lst_z (mapcar 'caddr lst_pt)
   pt_min (list (apply 'min lst_x) (apply 'min lst_y) (apply 'min lst_z))
   pt_max (list (apply 'max lst_x) (apply 'max lst_y) (apply 'max lst_z))
   lst_pt nil
 )
 (setq 
   p2 (list (car pt_max) (cadr pt_min) (caddr pt_min))
   p3 (list (car pt_max) (cadr pt_max) (caddr pt_min))
   p4 (list (car pt_min) (cadr pt_max) (caddr pt_min))
   p5 (list (car pt_min) (cadr pt_min) (caddr pt_max))
   p6 (list (car pt_max) (cadr pt_min) (caddr pt_max))
   p8 (list (car pt_min) (cadr pt_max) (caddr pt_max))
 )
 (vla-Add3DFace Space (vlax-3d-point pt_min) (vlax-3d-point p2) (vlax-3d-point p3) (vlax-3d-point p4))
 (vla-Add3DFace Space (vlax-3d-point p5) (vlax-3d-point p6) (vlax-3d-point pt_max) (vlax-3d-point p8))
 (vla-Add3DFace Space (vlax-3d-point pt_min) (vlax-3d-point p2) (vlax-3d-point p6) (vlax-3d-point p5))
 (vla-Add3DFace Space (vlax-3d-point p4) (vlax-3d-point p3) (vlax-3d-point pt_max) (vlax-3d-point p8))
 (vla-Add3DFace Space (vlax-3d-point pt_min) (vlax-3d-point p4) (vlax-3d-point p8) (vlax-3d-point p5))
 (vla-Add3DFace Space (vlax-3d-point p2) (vlax-3d-point p3) (vlax-3d-point pt_max) (vlax-3d-point p6))
     )
   )
   (T (princ "\nAucune sélection valide"))
 )
 (prin1)
)

 

[Edité le 4/2/2009 par bonuscad]

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

 

Hello (merci pour la réactivité)

 

SUPER, j'ai testé sur un MAP 2004 et sur un MAP 2009 ...

Cela semble fonctionner parfaitement ! :)

 

Cependant je me permet de faire "encore" une petite demande :

- Pouvoir sélectionner N 3DPOLY svp !? :P

 

Merci d'avance, Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

- Pouvoir sélectionner N 3DPOLY svp !?

 

Ce n'est pas compliqué, le code a été modifié en conséquence.

 

NB: Je tiens à préciser que la boite se fera toujours par rapport au SCG quelque que soit le SCU actif.

Le code est bati dans ce sens, se comporte comme la fonction boudingbox en lisp.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é