Aller au contenu

Exploser tous les blocs de chaque présentations


Messages recommandés

Posté(e)

J'avais créer un code pour exploser tous les blocs d'un espace.

Je l'ai modifié pour qu'il explose tous les blocs de tous les espaces. Mais cela ne marche pas.

 

Quelqu'un pourrait-il m'ouvrir les yeux sur mon erreur ?

 

 ;****************************************
; ------ Exploser tous les blocs  --------- NE MARCHE PAS ENCORE CORRECTEMENT (présentations)
;****************************************
; By Ludwig DESMIER
; Permet d'exploser tous les blocs d'un dessin (même imbriqués) dans toutes les présentations

(defun c:XB (/ layouts LAYOUT cmd expl Esp NB JEU C)

 (graphscr)
 (setq cmd (getvar "CMDECHO"))
 (setvar "CMDECHO" 0)
 (setq expl (getvar "explmode"))
 (setvar "explmode" 1)
 (setq Esp (getvar "CTAB"))


 (setq C 0)

 (setq layouts (cons "Model" (layoutlist))); A RECTIFIER : ne marche pas dans toutes les présentations
 (Foreach n layouts
   (setvar "CTAB" n)
   (setq LAYOUT (getvar "CTAB"))

   (setq JEU (ssget "x" '((0 . "INSERT")(410.LAYOUT))))
   (If	(= JEU Nil)
     (setq NB 0)
     (setq NB (sslength JEU))
   )

   (while (> NB 0)
     (progn
(setq JEU (ssget "x" '((0 . "INSERT"))))
(If (= JEU Nil)
  (setq NB 0)
  (progn
    (setq NB (sslength JEU))
    (sssetfirst nil JEU)
    (c:burst)
    (setq C (+ C NB))
  )
)				;fin du if
     )					;fin du progn
   )					;fin du while
 )					;fin du Foreach

 (setvar "CMDECHO" cmd)
 (setvar "explmode" expl)
 (setvar "CTAB" Esp)

 (prompt "\n ")
 (print C)
 (if (<= C 1)
   (prompt " bloc explosé")
   (prompt " blocs explosés")
 )
 (prin1)

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

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

J'ai un peu modifié ton programme tout en essayant de garder ton principe de fonctionnement

 

(defun c:de(/ layouts jeu n j cmd)
 (setq cmd (getvar "cmdecho"))
 (setvar "cmdecho" 0)
 (command "_.undo" "_group")
 (setq layouts (layoutlist))
 (if (vl-position "Model" layouts)
   (setq layouts (vl-remove "Model" layouts))
 )
 (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)
       (command "_explode" (ssname jeu j))
       (setq j (1+ j))
     )
   )
 )
 (command "_.undo" "_end")
 (setvar "cmdecho" cmd)
 (princ)
)

 

@+

 

[Edité le 19/1/2005 par Patrick_35]

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

Posté(e)

Si tu veux absolument utilisé (burst) qui est interressant pour les attribut en texte., mais délicat a appelé d'une autre fonction, car les appels interdépendant des express sont de véritable casse-tête.

 

toujours est-il que tu peux remplacer:

(setq JEU (ssget "x" '((0 . "INSERT")(410.LAYOUT)))) ->FAUX

par

(setq JEU (ssget "x" (cons '(0 . "INSERT") (list (cons 410 LAYOUT)))))

 

et supprimer ta boucle (while .....) en ne conservant que les lignes:

(sssetfirst nil JEU)

(c:burst)

(setq C (+ C NB))

 

De cette manière la routine à l'air de fonctionner, mais j'ai l'impression que plusieurs passes seront necessaires.

NB: Il Semble avoir des problème si les blocs font parti de groupe.

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)
c'est quoi ces 2 lignes :casstet: :

 

(sssetfirst nil JEU)

(c:burst)

 

Christian

 

 

 

SSSETFIRST : je ne me rappelle plus, je l'ai récupéré d'un autre programme...

BURST : c'est la commande d'express équivalente à édécomposer" mais qui transforme les attributs des blocs en textes.

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

J'ai mixé le tout et maintenant ça marche : burst des blocs (même imbriqués) dans toutes les présentations, retour à la présentation courante et comptage.

 

 

 ;****************************************
; ------ Exploser tous les blocs  -------
;****************************************
; By Ludwig DESMIER corrigé par Patrick_35
; Permet d'exploser tous les blocs d'un dessin (même imbriqués) dans toutes les présentations

(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)))
   )
 (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))
 )
      (setq i (+ i j))

      )

   )
 (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")
   )
 (prin1)

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

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

Pour Rebcao

 

(sssetfirst sel1 sel2)

 

sssetfirst est une fonction qui permet d'afficher les grips d'une sélection (sel1) et aussi de les mettrent en surbrillance (sel2)

 

@+

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

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é