gi² Posté(e) le 2 février 2009 Posté(e) le 2 février 2009 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.
bonuscad Posté(e) le 3 février 2009 Posté(e) le 3 février 2009 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
gi² Posté(e) le 3 février 2009 Auteur Posté(e) le 3 février 2009 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.
lecrabe Posté(e) le 3 février 2009 Posté(e) le 3 février 2009 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
bonuscad Posté(e) le 3 février 2009 Posté(e) le 3 février 2009 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
lecrabe Posté(e) le 4 février 2009 Posté(e) le 4 février 2009 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
bonuscad Posté(e) le 4 février 2009 Posté(e) le 4 février 2009 - 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
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