Aller au contenu

selection bloc par nom de bloc


Messages recommandés

Posté(e)

hello

 

j'ai écrit ca

 

mais la liste "selinsertname" ne reste pas sélectionné a la sortie du lisp comme un SSget

 

le rajout a le fin de :

 

(command "SELECT" selinsertname)
 (command "SELECT" "p")

 

ne change rien

 

vous avez une idée svp?

 

Phil

 

 

;;;
;;;--------------------------------------------------
;;;selectionner bloc par nom effectivenanme
;;;--------------------------------------------------



(defun c:selectionner_bloc_meme_nom (/)
 (setvar "cmdecho" 0)
 (setvar "CURSORSIZE" 10)
 (setq osm (getvar "osmode"))
 (if (and (setq source (car (entsel "\nCLIQUER SUR LE BLOC DE REFERENCE : ")))
          (setq source (vlax-ename->vla-object source))
          (= (vla-get-objectname source) "AcDbBlockReference")
     )
   (progn (setq namebloc (vla-get-effectivename source)))
 )
 (setq compt 0
       selinsertname (ssadd)
 )
 (prompt "\nSELECTIONNER LES BLOCS :")
 (setq selinsert (ssget (list (cons 0 "INSERT"))))
 (setq com (sslength selinsert))
 (while (< compt com)
   (if (= (vla-get-effectivename (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert compt))))))
          namebloc
       )
     (progn (ssadd (cdr (assoc -1 (entget (ssname selinsert compt)))) selinsertname))
   )
   (setq compt (1+ compt))
 )
 (command "SELECT" selinsertname)
 (command "SELECT" "p")
 (setvar "CURSORSIZE" 100)
 (setvar "osmode" osm)
 (princ)
)

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)

Salut,

 

Je te propose d'extraire une fonction de ta commande, fonction qui renvoie un jeu de sélection (ou nil).

Tu peux utiliser cette fonction directement en ligne commande en réponse à une invite ou dans d'autres fonctions LISP comme dans la commande que tu essayes de faire.

 

;;;
;;;--------------------------------------------------
;;;selectionner bloc par nom effectivenanme
;;;--------------------------------------------------


;; renvoie un jeu de sélection filtré par le nom effectif du bloc source
(defun ssbname (/ source namebloc selinsert i ent)
   (if (and (setq source (car (entsel "\nCLIQUER SUR LE BLOC DE REFERENCE : ")))
            (setq source (vlax-ename->vla-object source))
            (= (vla-get-objectname source) "AcDbBlockReference")
       )
       (progn
           (setq namebloc (vla-get-effectivename source))
           (prompt "\nSELECTIONNER LES BLOCS :")
           (if (setq selinsert (ssget (list (cons 0 "INSERT") (cons 2 (strcat "`*U*," namebloc)))))
               (repeat (setq i (sslength selinsert))
                   (setq ent (ssname selinsert (setq i (1- i))))
                   (if (/= (vla-get-EffectiveName (vlax-ename->vla-object ent))
                           namebloc
                       )
                       (ssdel ent selinsert)
                   )
               )
           )
       )
   )
   selinsert
)

;; sélectionne/grippe les blocs sélectionné dont le nom effectif correspond au bloc source
(defun c:selectionner_bloc_meme_nom ()
   (sssetfirst nil (ssbname))
   (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é