barbichette Posté(e) le 7 mars 2007 Posté(e) le 7 mars 2007 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.
Bred Posté(e) le 7 mars 2007 Posté(e) le 7 mars 2007 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...
barbichette Posté(e) le 7 mars 2007 Auteur Posté(e) le 7 mars 2007 ca marche, mais il me demande de sélectionner un objet pour l'exploser. Moi, je voudrais que cela explose TOUTES les références de bloc. c'est possible ? ***********************Rien ne sert de courrir, il faut partir à point.
Bred Posté(e) le 7 mars 2007 Posté(e) le 7 mars 2007 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...
barbichette Posté(e) le 7 mars 2007 Auteur Posté(e) le 7 mars 2007 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.
Bred Posté(e) le 7 mars 2007 Posté(e) le 7 mars 2007 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...
LUDWIG Posté(e) le 7 mars 2007 Posté(e) le 7 mars 2007 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
barbichette Posté(e) le 7 mars 2007 Auteur Posté(e) le 7 mars 2007 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.
Patrick_35 Posté(e) le 7 mars 2007 Posté(e) le 7 mars 2007 SalutEn 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 7 mars 2007 Posté(e) le 7 mars 2007 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...
barbichette Posté(e) le 8 mars 2007 Auteur Posté(e) le 8 mars 2007 Merci à vous tous. Cela fait très plaisir d'avoir des réponses aussi rapides.... ***********************Rien ne sert de courrir, il faut partir à point.
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant