Aller au contenu

Suppression de toutes les occurences d'un bloc utilisé


Messages recommandés

Posté(e)

Bonjour,

 

J'ai recherché sans succès une solution à mon problème que voici :

J'aimerais pouvoir supprimer d'un coup toutes les occurrences d'un bloc d'un dessin.

Dans mon cas, j'ai un bloc flèche nord qui est inséré dans mon espace objet ainsi que dans de multiple présentations, et j'aimerais tous les supprimer pour pouvoir purger ce bloc afin d’insérer une nouvelle version de ce bloc (qui porte exactement le même nom bien sûr)

Je pourrais contourner le problème en renommant ma définition de bloc actuelle par une bidon, puis d'inserer le nouveau, et ensuite remplacer les anciens par les nouveaux mais j'aimerais trouver un moyen plus simple. Avez-vous connaissance d'un Lisp qui pourrait faire l'affaire ?

 

Merci d'avance 🙂

Posté(e)
il y a 21 minutes, Kilian336 a dit :

insérer une nouvelle version de ce bloc (qui porte exactement le même nom bien sûr)

Avec la commande INSERER tout simplement.

Dans la boite de dialogue, tu clique sur "Parcourir" et tu vas chercher ton bloc (dwg) dans un dossier.

S'il a exactement le même nom, AutoCAD va te proposer de le redéfinir dans ton dessin pour toutes les instances qui existent.

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

Posté(e)

Hello

Si tu desires supprimer TOUTES les occurences d UN Bloc dans ton DWG, le Lisp ci-apres devrait faire le boulot !?

La Sante, Bye, lecrabe

 

;; 
;; http://forums.augi.com/showthread.php?36146-Remove-Delete-Block-from-multiple-Layouts-at-the-same-time
;; Erase A Block from the drawing : Erase into Model Space and into ALL Layouts and then PURGE the drawing 
;;

;; (defun C:DELETEBLOCK (/ SS BNAME FILTER SSLEN ENT) 
(defun C:DEL_BLOCK (/ SS BNAME FILTER SSLEN ENT)

  (while (/= (type BNAME) 'STR)
    (cond ((= BNAME NIL)
	   (setq BNAME (entsel "\nSelect block to remove from the drawing: "))
	  )
	  ((= (length BNAME) 2)
	   (setq BNAME (entget (car BNAME)))
	  )
	  ((= (cdr (assoc 0 BNAME)) "INSERT")
	   (setq BNAME (cdr (assoc 2 BNAME)))
	  )
	  ((/= (cdr (assoc 0 BNAME)) "INSERT")
	   (prompt "\nEntity selected is not a block.")
	   (setq BNAME (entsel "\nSelect block to remove from the drawing: "))
	  )
    )
  )

  (setq	FILTER (list (cons 0 "INSERT")
		     (cons 2 BNAME)
	       )
	SS     (ssget "_X" FILTER)
  )
  (if SS
    (progn
      (vl-load-com)
      (repeat (setq SSLEN (sslength SS))
	(vlax-invoke-method (vlax-ename->vla-object (ssname ss (setq SSLEN (1- SSLEN)))) 'Delete)
      )
    )
  )
  (command "_purge" "_b" bname "_N")
)

 

Autodesk Expert Elite Team

Posté(e)
Le 24/06/2022 à 10:23, Ra_Mamt a dit :

Bonjour,

Tu trouveras ton bonheur dans le menu express tools.

Express->Blocks->Remplace block with another block

Amicalement

Je suis sur AutoCAD 14 sans Express Tools, mais merci quand même 🙂

 

Le 24/06/2022 à 10:29, bonuscad a dit :

Avec la commande INSERER tout simplement.

Dans la boite de dialogue, tu clique sur "Parcourir" et tu vas chercher ton bloc (dwg) dans un dossier.

S'il a exactement le même nom, AutoCAD va te proposer de le redéfinir dans ton dessin pour toutes les instances qui existent.

Eh oui je suis bête moi ! Ça me parait évident maintenant 🙂

 

Le 24/06/2022 à 10:33, lecrabe a dit :

Hello

Si tu desires supprimer TOUTES les occurences d UN Bloc dans ton DWG, le Lisp ci-apres devrait faire le boulot !?

La Sante, Bye, lecrabe

 

;; 
;; http://forums.augi.com/showthread.php?36146-Remove-Delete-Block-from-multiple-Layouts-at-the-same-time
;; Erase A Block from the drawing : Erase into Model Space and into ALL Layouts and then PURGE the drawing 
;;

;; (defun C:DELETEBLOCK (/ SS BNAME FILTER SSLEN ENT) 
(defun C:DEL_BLOCK (/ SS BNAME FILTER SSLEN ENT)

  (while (/= (type BNAME) 'STR)
    (cond ((= BNAME NIL)
	   (setq BNAME (entsel "\nSelect block to remove from the drawing: "))
	  )
	  ((= (length BNAME) 2)
	   (setq BNAME (entget (car BNAME)))
	  )
	  ((= (cdr (assoc 0 BNAME)) "INSERT")
	   (setq BNAME (cdr (assoc 2 BNAME)))
	  )
	  ((/= (cdr (assoc 0 BNAME)) "INSERT")
	   (prompt "\nEntity selected is not a block.")
	   (setq BNAME (entsel "\nSelect block to remove from the drawing: "))
	  )
    )
  )

  (setq	FILTER (list (cons 0 "INSERT")
		     (cons 2 BNAME)
	       )
	SS     (ssget "_X" FILTER)
  )
  (if SS
    (progn
      (vl-load-com)
      (repeat (setq SSLEN (sslength SS))
	(vlax-invoke-method (vlax-ename->vla-object (ssname ss (setq SSLEN (1- SSLEN)))) 'Delete)
      )
    )
  )
  (command "_purge" "_b" bname "_N")
)

 

Cool le lisp, ca me resservira pour plus autre chose ! Il faut que je le test, merci !

 

Le 24/06/2022 à 11:42, didier a dit :

Bonjour @Kilian336

C'est le principe même du BLOC...

Pouvoir l'insérer à de multiples endroits et le redéfinir ensuite.

Attention toutefois au point d'insertion, et dans le cas d'une flèche nord à la rotation, c'est tellement automatique que des erreurs d'orientation peuvent subvenir.

Amicalement

Oui effectivement, c'est vrai que j'oublie complétement la fonction de redéfinition d'un bloc. Pourquoi faire simple quand on peut faire compliqué 😁

 

 

Merci à tous pour vos réponses !

Posté(e)
il y a 54 minutes, Kilian336 a dit :

Je suis sur AutoCAD 14 sans Express Tools, mais merci quand même 🙂

 

AutoCAD R14 ou AutoCAD 2014 ? 

Posté(e)

Salut,

pour supprimer toutes les occurrences d'un bloc, la commande "Filtre" permet de lister "Bloc" et son" Nom", l'appliquer à l'ensemble du dessin pour supprimer ce bloc et purger le dessin.

Erased

 

"Le risque de prendre une mauvaise décision n'est rien comparé à la terreur de l'indécision"

Maimonide.

  • 1 mois après...
Posté(e)
Le 24/06/2022 à 10:33, lecrabe a dit :

Hello

Si tu desires supprimer TOUTES les occurences d UN Bloc dans ton DWG, le Lisp ci-apres devrait faire le boulot !?

La Sante, Bye, lecrabe

 

;; 
;; http://forums.augi.com/showthread.php?36146-Remove-Delete-Block-from-multiple-Layouts-at-the-same-time
;; Erase A Block from the drawing : Erase into Model Space and into ALL Layouts and then PURGE the drawing 
;;

;; (defun C:DELETEBLOCK (/ SS BNAME FILTER SSLEN ENT) 
(defun C:DEL_BLOCK (/ SS BNAME FILTER SSLEN ENT)

  (while (/= (type BNAME) 'STR)
    (cond ((= BNAME NIL)
	   (setq BNAME (entsel "\nSelect block to remove from the drawing: "))
	  )
	  ((= (length BNAME) 2)
	   (setq BNAME (entget (car BNAME)))
	  )
	  ((= (cdr (assoc 0 BNAME)) "INSERT")
	   (setq BNAME (cdr (assoc 2 BNAME)))
	  )
	  ((/= (cdr (assoc 0 BNAME)) "INSERT")
	   (prompt "\nEntity selected is not a block.")
	   (setq BNAME (entsel "\nSelect block to remove from the drawing: "))
	  )
    )
  )

  (setq	FILTER (list (cons 0 "INSERT")
		     (cons 2 BNAME)
	       )
	SS     (ssget "_X" FILTER)
  )
  (if SS
    (progn
      (vl-load-com)
      (repeat (setq SSLEN (sslength SS))
	(vlax-invoke-method (vlax-ename->vla-object (ssname ss (setq SSLEN (1- SSLEN)))) 'Delete)
      )
    )
  )
  (command "_purge" "_b" bname "_N")
)

 

Salut lecrabe,

Je n'arrive pas à charger ton lisp (AutoCAD 2020), impossible de le charger. Tu saurais pourquoi ? 

Merci de ton aide si tu peux,

sylarr

Posté(e)

Bonjour @sylarr

Avant de répondre, j'ai vérifié ce que je voulais répondre et mon propos prévu s'est avéré.
Le fichier proposé par notre très cher @lecrabe, actuellement en vacances sans AutoCAD sous la main, fonctionne parfaitement.

Donc, comment faire ?

  1. Copier-coller le texte du premier point-virgule à la dernière parenthèse fermante
  2. Ouvrir Notepad et coller le presse-papier
  3. Enregistrer sous n'importe quel nom qui va bien, mais surtout avec l'extension .LSP
  4. Ouvrir l'Explorer sur le dossier qui contient ce fichier
  5. Glisser-déposer ce fichier depuis l'Explorer dans l'interface graphique AutoCAD
    Une case de dialogue devrait s'ouvrir en proposant de charger, répondre "toujours charger".
  6. Depuis la ligne de commande AutoCAD taper DEL_BLOCK
  7. Choisir le bloc qui doit être supprimé à l'écran et appuyer sur Enter.
  8. C'est fini

Attention c'est du violent, que le bloc soit inséré sur un calque gelé ou qu'il soit dans l'espace papier, il va disparaître !

En souhaitant avoir été utile

Amicalement


 

 

 

Posté(e) (modifié)

  

J'ai du oublier un point virgule du début la dernière fois je ne sais pas. Ca fonctionne en tout cas, merci beaucoup @didier 😄  Si tu fais "Charger une fois", cela marche quand même ? 

J'en profite pour demander si tu aurais une solution pour le GEF de Patrick_35 :

J'ai bien vérifié ta solution, j'ai un message d'erreur qui me dit "Don't find GEF_EN.DCL".

sylarr

Modifié par sylarr
Formulation
Posté(e)
il y a 39 minutes, sylarr a dit :

j'ai un message d'erreur qui me dit "Don't find GEF_EN.DCL".

Les fichiers .dcl doivent être enregistrés dans un dossier des chemins de support.

  • Upvote 1

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

Posté(e)
Il y a 2 heures, (gile) a dit :

Les fichiers .dcl doivent être enregistrés dans un dossier des chemins de support.

J'ai ajouté le dossier du lisp dans les chemins de recherche en cours d'utilisation (vu sur un autre topic similaire répondu par tes soins : 

).

A+

sylarr 

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é