Topheur Posté(e) le 27 avril 2019 Posté(e) le 27 avril 2019 Bonjour tous le monde, Je cherche un lisp pour sélectionner des blocs ayant le même nom ex. 00_MON_BLOC (bloc avec attributs) et mettre en vert ces blocs. J'ai écrit le code suivant: (defun c:sb (/ ss) (setq ss (ssget "_X" (list '(0 . "INSERT") '(2 . "00_NUM_TUBE")))) (command "_.change" ss "" "p" "CO" "4" "") (princ) ) Mais ça ne sélectionne pas mes blocs :( et la commande changer, bloque à 0,255,0 Bref rien ne marche :( (sauf la couleur :P ) Citer
Erased Posté(e) le 30 mai 2022 Posté(e) le 30 mai 2022 Salut, avec la commande native "Filtre", mais je ne sais pas si elle est compatible avec le langage Lisp. Citer Erased "Le risque de prendre une mauvaise décision n'est rien comparé à la terreur de l'indécision"Maimonide.
lecrabe Posté(e) le 30 mai 2022 Posté(e) le 30 mai 2022 Hello -- Pour selectionner UN Bloc classique particulier dans TOUT le DWG (ssget "_X" '((0 . "INSERT") (2 . "Mon_Joli_Bloc"))) La Sante, Bye, lecrabe Citer Autodesk Expert Elite Team
Luna Posté(e) le 3 juin 2022 Posté(e) le 3 juin 2022 Coucou, A savoir que cela ne fonctionne pas si le bloc est dynamique 😉 Autrement il faudrait plutôt quelque chose comme ceci : (defun c:sb (/ str2lst bn co fl ss i nm en ce) (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;; DEFINITION OF THE COMMAND PARAMETERS (setq bn "00_NUM_TUBE" ;; EQUALS TO THE EFFECTIVENAME OF THE BLOCK (YOU CAN USE THE WILDCARD CHARACTERS FOR MORE USABILITY) co 4 ;; EQUALS TO THE NEW COLOR TO BE SET. USE AN INTEGER BETWEEN 0 TO 256 FOR ACI COLORS, A LIST OF 3 INTEGERS BETWEEN 0 AND 255 EACH FOR TRUE COLORS, A STRING WITH THE NAME OF COLOR BOOK fl nil ;; DETERMINES IF THE SEARCH FOR EFFECTIVENAME IS CASE SENSITIVE OR NOT (nil = CASE SENSITIVE, T = NOT CASE SENSITIVE) ) ;; END OF PARAMETERS'S DEFINITION (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 (strcat "`*U*," bn))))) (repeat (setq i (sslength ss)) (setq nm (vlax-ename->vla-object (ssname ss (setq i (1- i))))) (if (not (and (vlax-property-available-p nm 'EffectiveName) (setq en (vlax-get nm 'EffectiveName)) (if fl (mapcar '(lambda (x) (set (read (vl-princ-to-string x)) (strcase (vl-symbol-value x)))) '(bn en)) '(bn en) ) (wcmatch en bn) ) ) (ssdel (vlax-vla-object->ename nm) ss) ) ) (if (not (zerop (sslength ss))) (progn (setq ce (getvar "CMDECHO")) (setvar "CMDECHO" 0) (cond ( (listp co) (command "_.CHANGE" ss "" "_Properties" "_Color" "_TrueColor" (setq co (str2lst co ",")) "")) ( (= 'STR (type co)) (command "_.CHANGE" ss "" "_Properties" "_Color" "_ColorBook" co "")) ( (= 'INT (type co)) (command "_.CHANGE" ss "" "_Properties" "_Color" (setq co (itoa co)) "")) ) (setvar "CMDECHO" ce) (princ (strcat "\n" (itoa (sslength ss)) " blocks has been changed with the name \"" bn "\" to the color " co "..." ) ) ) (princ "\n0 blocks has been changed...") ) (princ) ) On peut modifier les paramètres de la commande si jamais le(s) nom(s) des blocs à rechercher ne correspond(ent) pas à "00_NUM_TUBE", si la couleur ne correspond pas à 4 et si l'on désire que le nom du bloc soit sensible à la casse ou pas Bisous, Luna Citer
Messages recommandés