Aller au contenu

Selection et couleur bloc


Topheur

Messages recommandés

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 )

Lien vers le commentaire
Partager sur d’autres sites

  • 3 ans après...

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

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité