MamyTina Posté(e) le 13 juillet 2022 Posté(e) le 13 juillet 2022 Bonjour à toutes et à tous, En premier lieu, je suis novice en programmation ; J’ai besoin de votre aide SVP. En fait souhaite un programme qui, à la fois, détecte et rajoute un cercle (erreur) sur les Z=0 des polylignes 3D, un peu comme celui de Covadis quand on crée un MNT. Le but est d’avoir un visuel rapide sur ces Z=0. Amicalement. AutoCad MAP 2023 - Covadis + Autopiste 18.3b www.colas-mayotte.fr
Curlygoth Posté(e) le 13 juillet 2022 Posté(e) le 13 juillet 2022 Hello, Une polyligne 3d n'est rien de plus qu'une liste de nombre réprensetant un point de la polyligne : liste_pointe_Poly = (0,1,2,3,4,5,6) 'polyligne3D de 2 points par exemple, ici le 0,1,2 sont les "index" des coordonnées (XYZ) du point 1 de ta polyligne et 4,5,6 les "index" des coordonnées (XYZ) du point 2 ! il suffit de vérifier les index 2,5,8,... et regarder leurs valeurs ! en lisp je ne sais pas faire mais en VBA oui mais au moins tu auras la base. Mon site Web (en cours de construction) : Site DA-CODE de @didier
Luna Posté(e) le 13 juillet 2022 Posté(e) le 13 juillet 2022 (modifié) Coucou, Rapidement, sur la base de la proposition de Curlygoth on peut essayer ceci : (defun c:CheckZ (/ get-pt-list jsel ray i name pts csel n) (defun get-pt-list (lst) (if (and lst (zerop (rem (length lst) 3))) (cons (list (car lst) (cadr lst) (caddr lst)) (get-pt-list (cdddr lst))) ) ) (and (or (setq jsel (ssget '((0 . "POLYLINE")))) (setq jsel (ssget "_X" (list '(0 . "POLYLINE") (cons 410 (getvar "CTAB")))))) (null (initget 6)) (or (setq ray (getdist "\nRayon des cercles <1.0> : ")) (setq ray 1.0)) (repeat (setq csel (ssadd) n 0 i (sslength jsel)) (setq name (ssname jsel (setq i (1- i)))) (setq pts (get-pt-list (vlax-get (vlax-ename->vla-object name) 'Coordinates))) (setq pts (vl-remove-if-not '(lambda (p) (equal (last p) 0 1E-6)) pts)) (foreach pt pts (setq ent (entmakex (list '(0 . "CIRCLE") '(100 . "AcDbEntity") '(100 . "AcDbCircle") '(62 . 1) ; (cons 8 "...") ;; Remplacer "..." par le nom du calque désiré si besoin et supprimer le ; devant (cons 10 pt) (cons 40 ray) ) ) ) (ssadd ent csel) ) (if pts (setq n (+ n (length pts))) T) ) (null (sssetfirst)) (sssetfirst nil csel) ) ) Les cercles nouvellement créés sont conservés comme sélection active (pour les supprimer plus facilement). Il serait également judicieux de leur affecter un calque spécifique si besoin. Pour cela j'ai laissé la ligne ; (cons 8 "...") ;; Remplacer "..." par le nom du calque désiré si besoin et supprimer le ; devant mais elle est actuellement en commentaire (car il y a un point-virgule devant) donc tu fais comme tu veux. Si tu veux changer la couleur, il suffit de modifier la valeur du code DXF 62 (actuellement à 1 = rouge). Les valeurs autorisées sont comprises entre 0 et 256 (0 = DuBloc et 256 = DuCalque) Une autre méthode consisterait à laisser la vérification directement dans le programme, afin de supprimer les cercles une fois le programme terminé. Bisous, Luna Modifié le 13 juillet 2022 par Luna Modification du code pour sélectionner manuellement les polylignes 3D ou bien toutes les polylignes 3D 2
MamyTina Posté(e) le 13 juillet 2022 Auteur Posté(e) le 13 juillet 2022 Cool merci, ça fonctionne! Mais un petite amélioration / remarque si possible: Je souhaite que le programme traite d'un seule coup tous les polylignes 3D dans le fichiers sans avoir à les cliquer/sélectionner un par un. Est-ce possible? Amicalement AutoCad MAP 2023 - Covadis + Autopiste 18.3b www.colas-mayotte.fr
Luna Posté(e) le 13 juillet 2022 Posté(e) le 13 juillet 2022 Coucou, J'ai modifié le code ci-dessus pour intégrer ta demande. J'ai remplacé (setq jsel (ssget '((0 . "POLYLINE")))) par (or (setq jsel (ssget '((0 . "POLYLINE")))) (setq jsel (ssget "_X" (list '(0 . "POLYLINE") (cons 410 (getvar "CTAB")))))) Donc si tu as une pré-sélection d'objet, le programme utilisera la pré-sélection, sinon tu devras sélectionner manuellement les objets. Et si tu skip la sélection (pas de pré-sélection et pas de sélection manuelle), le programme sélectionnera toutes les polylignes 3D de l'espace courant (pour se limiter à l'espace Objet si tu es dans l'espace objet, etc...). Bisous, Luna 1
MamyTina Posté(e) le 13 juillet 2022 Auteur Posté(e) le 13 juillet 2022 Nickel! Ça marche, merci bcp! Amicalement AutoCad MAP 2023 - Covadis + Autopiste 18.3b www.colas-mayotte.fr
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