Supprimer les blocs AutoCAD superposés : OVERKILL et LISP DBL

Comment identifier et supprimer les blocs AutoCAD identiques superposés, notamment pour optimiser la génération de nomenclatures ?

La gestion des blocs superposés dans AutoCAD est cruciale pour la précision des nomenclatures et la propreté des dessins. Bien que la commande OVERKILL soit l’outil standard, elle présente des limitations, notamment avec les blocs dynamiques. Voici les méthodes et solutions pour y parvenir :

  1. Utilisation de la commande OVERKILL (Express Tools)

    • Principe : Cette commande, issue des Express Tools d’AutoCAD, est conçue pour supprimer les objets dupliqués ou superposés. Elle est efficace pour les objets géométriques et les blocs strictement identiques en termes de définition, de position, d’échelle et de rotation.
    • Procédure :
      1. Tapez OVERKILL dans la ligne de commande et appuyez sur Entrée.
      2. Sélectionnez les objets à analyser. Pour une recherche exhaustive, il est recommandé de taper TOUT et d’appuyer sur Entrée pour inclure tous les objets du dessin.
      3. Dans la boîte de dialogue Supprimer les objets en double, vous pouvez affiner les critères de comparaison (par exemple, ignorer la propriété de calque, la couleur, le type de ligne, etc.). Pour les blocs, assurez-vous que les options pertinentes sont décochées si vous souhaitez une comparaison stricte.
      4. Cliquez sur OK.
    • Limitations : OVERKILL peut échouer si les blocs, bien que visuellement similaires, ne sont pas considérés comme identiques par AutoCAD. Cela se produit souvent avec :
      • Blocs dynamiques : Si les blocs dynamiques superposés ont des états de visibilité, des valeurs de paramètres ou des noms anonymes (*U...) différents (souvent après des manipulations ou décompositions), OVERKILL ne les traitera pas comme des doublons.
      • Définitions internes différentes : Même si le nom du bloc est le même, des différences subtiles dans leur définition interne peuvent empêcher OVERKILL de les supprimer.
  2. Utilisation d’une routine LISP spécifique : DBL
    Lorsque OVERKILL ne suffit pas, une routine LISP personnalisée peut offrir une solution plus robuste pour les blocs superposés, en se basant sur leur nom et leur point d’insertion.

    • Procédure :
      1. Copiez le code LISP ci-dessous dans un éditeur de texte (ex: Bloc-notes) et enregistrez-le avec l’extension .LSP (ex: dbl.lsp).
      2. Dans AutoCAD, chargez la routine LISP via la commande APPLOAD (ou CHARGAPP).
      3. Tapez DBL dans la ligne de commande et appuyez sur Entrée pour exécuter la routine.
    • Code LISP (DBL) :

;------------------------------------------------------
(defun xmember (elt lst fuzz / kt lo res)
;------------------------------------------------------
(setq kt 0 lo (length lst))
(while (< kt lo)
(if (equal elt (nth kt lst) fuzz)
(setq kt lo res T)
)
(setq kt (1+ kt))
);fin while
res

);fin defun
;------------------------------------------------------
(defun c:dbl(/ slc ct ll ent ntt pti ls lsp lst)
;------------------------------------------------------
(setq slc (ssget « x » (list (cons 0 « insert »)))
ct 0
ll (sslength slc)
sll (ssadd)
)
(while (< ct ll)
(setq ent (ssname slc ct)
ntt (entget ent)
pti (cdr (assoc 10 ntt))
nom (cdr (assoc 2 ntt))
ct (1+ ct)
)
(if (setq ls (assoc nom lst))
(progn
(setq lsp (cdr ls))
(if (xmember pti lsp 0.01)
(setq sll (ssadd ent sll))
(setq lst (subst (cons nom (append lsp (list pti))) ls lst))
)

);fin progn
(progn
(setq lst (append lst (list (list nom pti ))))
);fin progn
);fin if
)
(if (and sll (/= 0 (sslength sll))) (command « _erase » sll «  »))
(princ)
);fin defun
```
* Note sur DBL : Cette routine parcourt tous les blocs du dessin et identifie ceux qui ont le même nom et le même point d’insertion, puis les supprime. Elle est plus « radicale » et ne tient pas compte des calques, ce qui peut nécessiter une adaptation si vous avez des blocs identiques sur des calques différents que vous souhaitez conserver.

  1. Localisation des blocs superposés (Outils complémentaires)
    Pour identifier visuellement les blocs superposés avant de les supprimer, des routines LISP de localisation peuvent être utiles :
    • OU (de Patrick-35) : Permet de localiser des blocs spécifiques dans un dessin.
    • OUA (de Patrick-35) : Permet de localiser des blocs avec attributs dans un dessin.
      Ces outils ne suppriment pas, mais aident à la détection manuelle ou à la vérification.

Bonnes pratiques :

  • Vérification des définitions : Avant de supprimer, utilisez la commande BEDIT (Éditeur de blocs) pour inspecter les définitions de vos blocs, surtout s’ils sont dynamiques. Des différences subtiles peuvent expliquer pourquoi OVERKILL ne les détecte pas.
  • Sauvegarde : Toujours sauvegarder votre dessin avant d’exécuter des commandes de suppression massives ou des routines LISP inconnues.
  • Test : Testez les solutions sur une copie du dessin ou sur une sélection limitée d’objets pour comprendre leur comportement.

En combinant OVERKILL pour les cas simples et la routine DBL pour les situations plus complexes (notamment avec les blocs dynamiques), vous pourrez efficacement nettoyer vos dessins et garantir la précision de vos nomenclatures.