Demixav Posté(e) le 12 janvier 2016 Posté(e) le 12 janvier 2016 Bonjour, J'ai un LISP qui me serait bien utile mais avec une modification à faire, si c'est possible et si ce n'est pas trop demandé bien sûr... Je n'y connais rien en LISP, j'ai bien tenté deux ou trois trucs sans succès (et sans surprise non plus!) Ce LISP (dont je connais pas l'auteur... désolé si il me lit!), min_Z (max_Z existe aussi) qui sert à identifier par un point le sommet le plus bas en altitude sur une poly 3D.Ce LISP demande de choisir une ou des poly3D, et repère donc le point le plus entre toutes les poly3D sélectionnées. La modif que je souhaiterai, c'est qu'il répertorie le point le plus bas SUR CHAQUE poly3D sélectionnées, ce qui m'éviterait de les sélectionner une par une... Le code ci dessous! Merci de votre aide!Xav (vl-load-com)(defun c:min_z ( / js obj ename pr pt lst_pt lst_z id_seg nw_pt) (princ "\nSelectionner les polyligne3D: ") (while (null (setq js (ssget '((0 . "POLYLINE") (-4 . "&") (70 . 8))))) (princ "\nObjets non valable!") ) (repeat (setq n (sslength js)) (setq obj (ssname js (setq n (1- n))) 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 'min lst_z) lst_z))) ) (setq nw_pt (vlax-invoke (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) ) 'AddPoint (nth id_seg lst_pt) ) ) (vla-put-Normal nw_pt (vlax-3d-point '(0 0 1))) ) (prin1)) AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
didier Posté(e) le 12 janvier 2016 Posté(e) le 12 janvier 2016 Coucou Je ne comprends pas ta demande car c'est d'ores et déjà le cas,Dans le code fourni il y a un jeu de sélection et donc une boucle qui traite chaque poly3D de ce jeu de sélection.Tu les sélectionnes comment tes poly à traiter ? Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
bonuscad Posté(e) le 12 janvier 2016 Posté(e) le 12 janvier 2016 je souhaiterai, c'est qu'il répertorie le point le plus bas SUR CHAQUE poly3D sélectionnées Ben en réalité, c'est ce qu'il était censé de faire.J'ai juste oublié de réinitialiser la variable "lst_pt" dans la boucle! La correction: (vl-load-com) (defun c:min_z ( / js obj ename pr pt lst_pt lst_z id_seg nw_pt) (princ "\nSelectionner les polyligne3D: ") (while (null (setq js (ssget '((0 . "POLYLINE") (-4 . "&") (70 . 8))))) (princ "\nObjets non valable!") ) (repeat (setq n (sslength js)) (setq obj (ssname js (setq n (1- n))) ename (vlax-ename->vla-object obj) pr -1 lst_pt nil ) (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 'min lst_z) lst_z))) ) (setq nw_pt (vlax-invoke (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) ) 'AddPoint (nth id_seg lst_pt) ) ) (vla-put-Normal nw_pt (vlax-3d-point '(0 0 1))) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lili2006 Posté(e) le 12 janvier 2016 Posté(e) le 12 janvier 2016 Bonne Année à toutes et tous, Je viens de tester, le prog. reconnait bien les polys 3D mais je n'ai aucun affichage !! Est chez vous ? Merci d'avance, Civil 3D 2025 - COVADIS_18.3c https://www.linkedin...3%ABt-95313341/
didier Posté(e) le 12 janvier 2016 Posté(e) le 12 janvier 2016 Coucou Ce code insère un point comme entité pour représenter le point basNe serait-tu pas en PDMODE=0(ou 1) ? ce qui expliquerait ta question sur "aucun d'affichage" Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
Demixav Posté(e) le 12 janvier 2016 Auteur Posté(e) le 12 janvier 2016 Merci à tous pour vos réponses, et en particulier à BonusCad pour ton LISP (tu t'es reconnu apparemment!) et ta correction! ca fonctionne nickel!Je garde les deux versions... ca peut servir! :) Encore merci!Xav AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
lili2006 Posté(e) le 12 janvier 2016 Posté(e) le 12 janvier 2016 Re,qui sert à identifier par un point J’avais mal lu l’énoncé,..:o Bien vu Didier,.. Civil 3D 2025 - COVADIS_18.3c https://www.linkedin...3%ABt-95313341/
Demixav Posté(e) le 13 janvier 2016 Auteur Posté(e) le 13 janvier 2016 Re, J'ai parlé un peu vite... j'ai fait un test hier pour voir si ca fonctionnait et c'etait bien le cas!Aujourd'hui, je souhaite me servir du LISP et au lieu de me trouver le sommet le plus bas de chaque poly3D, il insère des points autant que de poly sélectionnées et insère tous ces points sur le sommet le plus bas d'entre toutes les poly... Je sais pas si c'est bien clair...Exemple : Je sélectionne 4 poly, je valide, il insère 4 points confondus sur le sommet le plus bas de toutes ces poly, et aucun sur les 3 autres poly. J'ai sorti les rames là... :(Merci de votre aide!Xav AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
bonuscad Posté(e) le 13 janvier 2016 Posté(e) le 13 janvier 2016 Je garde les deux versions... ca peut servir! Tu ne devrais pas, l'ancienne comporte un bug sur la variable lst_pt qui est cumulée à chaque boucle. Donc vérifie bien que tu utilise la bonne routine, car le comportement que tu décrit je l'ai observé avec l'ancienne. Si tu es vraiment sûr, fait moi passer ton fichier d'exemple que je regarde à : ubuesque(at)mailoo.org Là dans l'immédiat je vois pas de causes... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lili2006 Posté(e) le 13 janvier 2016 Posté(e) le 13 janvier 2016 Re, Aucun pb chez moi avec la seconde version,... => Merci Bruno, rudement efficace cette routine également,...:) Civil 3D 2025 - COVADIS_18.3c https://www.linkedin...3%ABt-95313341/
didier Posté(e) le 13 janvier 2016 Posté(e) le 13 janvier 2016 Coucou Je sais pas si c'est bien clair...Exemple : Je sélectionne 4 poly, je valide, il insère 4 points confondus sur le sommet le plus bas de toutes ces poly, et aucun sur les 3 autres poly. Du moins à mes yeux : il est clair que ce n'est pas clair !4 points confondus ? que veux dire confondu ? Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
Demixav Posté(e) le 14 janvier 2016 Auteur Posté(e) le 14 janvier 2016 Re, @ didier : confondus veut dire que ces points sont tous aux mêmes coordonnées XYZ... @Lilan et Bruno : je refais des tests plus tard et vous dirai ce qu'il en est! :) merci !!! AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
didier Posté(e) le 14 janvier 2016 Posté(e) le 14 janvier 2016 Coucou donc quatre points superposés ????dans quel but faire quatre points ? Éternel débutant… Mon site perso : Programmer dans AutoCAD
Demixav Posté(e) le 14 janvier 2016 Auteur Posté(e) le 14 janvier 2016 c'est pas moi qui ait dessiné ces 4 points... c'est le lisp qui les génèrent ainsi! d'où ma question... AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
didier Posté(e) le 14 janvier 2016 Posté(e) le 14 janvier 2016 Coucou Incompréhensible car je viens de relancer le lisp et tout est parfait du moins dans ce que j'ai compris :un point se dessine sur chaque sommet le plus bas de chaque polyligne à la nuance près que si deux sommets sont égaux en Z un seul point est pris en compte. Amicalement Éternel débutant… Mon site perso : Programmer dans 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