Aller au contenu

Sélection et exploser toutes les références de bloc


barbichette

Messages recommandés

Bonjour,

je voudrais connaitre la commande à affeter à un bouton pour qu'une pression sur le bouton fasse :

 

Sélection rapide / type d'objet référence de bloc / Opérateur tout sélectionner + Eplode

 

Merci

***********************

Rien ne sert de courrir, il faut partir à point.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

je ne sais pas si tu peux utiliser "selection rapide" dans un script bouton : cela ouvre forcément une fenêtre.

Cela est réalisble en lisp par contre (si ça t'interresse)

(defun c:expb ( / b x n)
(while (not b)
(setq b (ssget "_:S:E" '((0 . "INSERT"))))
 )
(setq x 0)
(repeat (sslength (setq n (ssget "_X" (list (assoc 2 (entget (ssname b 0)))))))
 (command "_explode" (ssname n x))
 (setq x (+ x 1))
 )
(princ)
)

 

[Edité le 7/3/2007 par Bred]

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Le code ci-dessus explosais TOUS les blocs identique au premier sélectionné.

 

pour exploser tous les blocs :

(defun c:expTb ( / x n)
 (setq x 0)
 (repeat (sslength (setq n (ssget "_X" '((0 . "INSERT")))))
   (command "_explode" (ssname n x))
   (setq x (+ x 1))
   )
 (princ)
)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Super !!

 

Dernière petite demande :

Sachant qu'il y a parfoit des référence s imbriquées,

il faut que j'applique la macro plusieures fois.

 

1°) Serait il possible d'ajouter une boucle, pour qu'il sélectionne et explose les références de bloc tant qu'il en trouve.

 

2°) Serait il possible de faire afficher un ch'tit message quand il ne trouve pas de référene de bloc du style

"il n'y a pas de bloc dans ce dessin"

 

Si l'option (1) n'est pas réalisable, l'option (2) pourrait me suffire

 

MErci

***********************

Rien ne sert de courrir, il faut partir à point.

Lien vers le commentaire
Partager sur d’autres sites

Test si bloc (et en vl) :

(defun c:expb ( / x n)
 (if (setq n (ssget "_X" '((0 . "INSERT"))))
   (progn
     (setq x 0)
     (repeat (sslength n)
(vla-explode (vlax-ename->vla-object (ssname n x)))
(vla-delete (vlax-ename->vla-object (ssname n x)))
(setq x (+ x 1)))
     )
   (princ "\n Pas de bloc dans le dessin.")
   )
 (princ)
)

 

pour le 1, c'est faisable, je te le fait dès que j'ai le temps.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Moi j'avais ce lisp (très certainement optimisable) qui décompose les blocs tant qu'il en trouve. Il utilise burst des express plutôt que _explode afin de convertir les éventuels attributs en texte et donc garder l'intégrité des infos (mais du coup le traitement est plutôt long).

 

 
;**********************************************************************************************************************************************************
;Décomposer tous les blocs
;**********************************************************************************************************************************************************
;Décompose tous les blocs dans toutes les présentations (il n'en reste plus aucun après !)

(defun c:XB (/ layouts jeu n j i cmd)


 (setq cmd (getvar "cmdecho"))
 (setvar "cmdecho" 0)

 (command "_.undo" "_group")
 (setq expl (getvar "explmode"))
 (setvar "explmode" 1)
 (setq ESP (getvar "CTAB"))


 (if (vl-position "Model" layouts)
   ()
   (setq layouts (cons "Model" (layoutlist)))
   ) ;_ Fin de if
 (setq i 0)
 (foreach n layouts
   (while
     (setq jeu (ssget "x" (list (cons 0 "INSERT") (cons 410 n))))
      (setq j 0)
      (command "_.layout" "_set" n)
      (while (ssname jeu j)
 (setq NB (sslength JEU))
 (sssetfirst nil JEU)
 (c:burst)
 (setq j (+ NB j))
 ) ;_ Fin de while
      (setq i (+ i j))

      ) ;_ Fin de while

   ) ;_ Fin de foreach
 (setvar "CTAB" ESP)
 (setvar "explmode" expl)

 (command "_.undo" "_end")
 (setvar "cmdecho" cmd)
 (prompt "\n ")
 (print i)
 (if (<= i 1)
   (prompt " bloc décomposé")
   (prompt " blocs décomposés")
   ) ;_ Fin de if
 (prin1)

 ) ;fin du defun
(prompt "\nXB : Exploser tous les blocs (mêmes imbriqués)") 

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Salut Ludwig,

 

C'est vrai que c'est un tout petit peu plus long, mais on voit qu'il travaille, et l'on voit ce qu'il a fait. (petite barre qui tourne + nombre de bloc traités)

De plus le fait qu'il convertisse les attribut est tout à fait judicieux.

 

Merci à vous deux.

***********************

Rien ne sert de courrir, il faut partir à point.

Lien vers le commentaire
Partager sur d’autres sites

Salut

En reprenant ce qu'a fait Bred (et il n'y avait pas grand chose à ajouter ;) )

 

(defun c:expb ( / x n)
 (while (setq n (ssget "_X" '((0 . "INSERT"))))
   (setq x 0)
   (repeat (sslength n)
   (vla-explode (vlax-ename->vla-object (ssname n x)))
   (vla-delete (vlax-ename->vla-object (ssname n x)))
   (setq x (+ x 1)))
 )
 (princ)
)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

en rajoutant les messages de nombre de bloc traités (si il y en a)

Mais je ne traite pas les attributs, comme Ludwig.

 

(defun c:expbs (/ N NB X)  
 (while (setq n (ssget "_X" '((0 . "INSERT"))))    
     (setq x 0
    nb 0)
     (repeat (sslength n)
(vla-explode (vlax-ename->vla-object (ssname n x)))
(vla-delete (vlax-ename->vla-object (ssname n x)))
(setq nb (+ (sslength n) nb))
(setq x (+ x 1)))
     )
 (if nb
   (princ (strcat "\n" (rtos nb) "bloc(s) explosé(s) dans le plan"))
   (princ "\n pas de blocs dans le plan"))
 (princ)
)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

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é