Quentin6713 Posté(e) mardi à 11:33 Posté(e) mardi à 11:33 Bonjour, Je me permets de venir vers vous car je rencontre un soucis... Je me suis lancé dans la création d'un lisp pour automatiser une étape dans la création d'un dessin mais j'avoue ne pas avoir de grande connaissance en ce domaine et je bute sur une erreur de syntaxe que je n'arrive pas à corriger. L'objectif de ce premier LISP est de conserver une référence de point commune entre un bloc inséré "BESI-" et une polyligne qui y est déjà dessiné (chaque bloc "BESI-" n'a pas forcément de polyligne qui y est lié). Référence de point commun que je souhaite utilisé dans un autre LISP (je créerai un autre sujet pour celui là) Voici les grandes lignes du LISP : - Créer des points au sommet des polylignes souhaitées - rechercher dans le dessin les réf de bloc "BESI-" - Si la distance d'un des points créés est inférieur ou égal à 0 avec un des blocs, changer le point en question de calque pour le réutiliser plus tard En pièce jointe le lisp et le fichier dwg sur lequel je travaille. Merci d'avance pour vos retours ! (Si jamais, je travaille sur Autocad Map 3D 2020) Test_pt_commun.dwg Test_pt_commun.lsp Citer
Quentin6713 Posté(e) jeudi à 06:46 Auteur Posté(e) jeudi à 06:46 J'ai pas pensé à indiquer le lisp en question directement ici, pour ceux qui veulent jeter un coup d'œil rapide, le voici : (defun c:RecupSommetsPolylignes (/ ss ent i n pt ss-points pt-coord ss-besi besi besi-pt found tol i-besi mat alt last-obj total count distance-recherche min-x min-y max-x max-y point-insertion dist) (setq distance-recherche 2.0) ; distance de recherche (en mètres) (princ "\n--- Début de la récupération des sommets des polylignes ---") ;; **Ajout de l'immatriculation des lignes décomposées** (princ "\nImmatriculation des entités via _CovaImmatric...") (command-s "_CovaImmatric") ;; Sélection des points générés par l'immatriculation (setq ss-points (ssget "X" '((0 . "INSERT") (2 . "TCPOINT-SRS") (8 . "POINTS-TOPOGRAPHIQUES")))) (if ss-points (progn (setq n 0 count (sslength ss-points)) ;; Sélection des blocs BESI-* à proximité des points (setq ss-besi (ssget "X" '((0 . "INSERT") (2 . "BESI-*")))) ;; Recherche de tous les blocs BESI- présents dans le dessin ;; Pour chaque point immatriculé, on cherche les blocs BESI-* à proximité (while (< n count) (setq pt (ssname ss-points n)) (setq pt-coord (cdr (assoc 10 (entget pt)))) ;; Récupération de la position du point ;; Vérification si le point est valide (if (listp pt-coord) (progn ;; Création de la boîte de sélection (zone de recherche autour du point) (setq min-x (- (car pt-coord) distance-recherche)) (setq min-y (- (cadr pt-coord) distance-recherche)) (setq max-x (+ (car pt-coord) distance-recherche)) (setq max-y (+ (cadr pt-coord) distance-recherche)) ;; Sélection des blocs BESI-* à proximité du point (setq ss-besi (ssget "_WP" (list (list min-x min-y) (list min-x max-y) (list max-x max-y) (list max-x min-y)) '((0 . "INSERT") (2 . "BESI-*")))) ;; Si des blocs BESI-* sont trouvés à proximité (if ss-besi (progn (setq i-besi 0) (while (< i-besi (sslength ss-besi)) (setq besi (ssname ss-besi i-besi)) (setq besi-pt (cdr (assoc 10 (entget besi)))) ;; Récupération du point d'insertion du bloc BESI- ;; Vérification que le bloc BESI-* a une coordonnée valide (if (and (listp besi-pt) (= (length besi-pt) 3)) (progn ;; Affichage des points pour débogage (princ (strcat "\nBloc BESI- à " (itoa i-besi) " trouvé à : " (rtos (car besi-pt) 2 4) ", " (rtos (cadr besi-pt) 2 4))) ;; Calcul de la distance entre le point immatriculé et le point d'insertion de BESI- (setq dist (distance pt-coord besi-pt)) ;; Affichage de la distance pour débogage (princ (strcat "\nDistance entre les points : " (rtos dist 2 4))) ;; Si la distance entre le point TCPOINT et le bloc BESI- est inférieure ou égale à 0, déplacer dans le calque "$TEST" (if (<= dist 0) (progn ;; Déplacement du point dans le calque "$TEST" (princ "\nDistance <= 0, changement de calque du point dans '$TEST'") ;; Vérification du calque "$TEST" dans le dessin (if (not (tblsearch "LAYER" "$TEST")) (princ "\nLe calque '$TEST' n'existe pas. Veuillez créer ce calque.") ;; Changer le calque (command "._CHPROP" last-obj "" "CA" "$TEST" "") (princ "\nChangement de calque effectué avec succès.") ) ) ) ) ) ) (setq i-besi (1+ i-besi)) ) ) ) ) (setq n (1+ n)) ) (princ "\nExtraction terminée.") ) (princ "\nAucun point immatriculé trouvé.") ) (princ "\n--- Fin du programme ---") (princ) ) (princ "\nEntrez la commande 'RecupSommetsPolylignes' pour exécuter le script.") (princ) Encore une fois, un grand merci d'avance pour vos éventuels retours 🙂 Citer
Messages recommandés