Automatiser le renommage de blocs avec préfixe/suffixe dans AutoCAD Map 3D

Comment automatiser le renommage d’un ensemble de blocs dans AutoCAD Map 3D 2018, en ajoutant un préfixe ou un suffixe pour identifier le service créateur, tout en évitant de le faire bloc par bloc ?

L’automatisation du renommage de blocs avec ajout de préfixe ou suffixe dans AutoCAD Map 3D est une tâche courante pour organiser et identifier les éléments graphiques. Bien que les commandes LISP comme RB (Rename Block) et RENB existent, leur utilisation unitaire est fastidieuse pour un grand nombre de blocs. Voici une approche structurée pour y parvenir, en tenant compte de votre début en VBA et de la nécessité d’une solution plus globale.

1. Comprendre le besoin et les limitations actuelles :

  • Objectif : Ajouter un identifiant (préfixe/suffixe) à de nombreux blocs pour les regrouper visuellement par service.
  • Problème actuel : Les outils natifs (RB, RENB) sont manuels et chronophages.
  • Contraintes : Vous commencez en VBA, mais recherchez une solution plus automatisée.

2. Solution intermédiaire : Utilisation de LISP pour le renommage en masse (si possible) :

Bien que vous mentionniez RB et RENB un par un, il est possible de les appeler via un script LISP pour traiter plusieurs blocs. Cependant, cela nécessite de connaître précisément le nom actuel de chaque bloc et le nouveau nom souhaité. Une approche plus flexible serait de créer un LISP qui parcourt les blocs d’un dessin et applique une règle de renommage.

  • Principe : Un script LISP peut lire la liste des blocs dans le dessin (BLOBKLIST), itérer sur chaque nom de bloc, et utiliser la commande RENAME pour appliquer le préfixe ou le suffixe.
  • Exemple de logique LISP (conceptuel) :
    (defun c:RENOMMERBLOCS ( / ss nom_bloc nouveau_nom prefixe suffixe)
      (setq ss (ssget "X" '((0 . "INSERT")))) ; Sélectionne tous les blocs
      (if ss
        (
          (lambda (i / ent nom_bloc_original nom_bloc_modifie)
            (while (setq ent (ssname ss i))
              (setq nom_bloc_original (cdr (assoc 2 (entget ent)))) ; Récupère le nom du bloc
              ; --- Logique pour définir le préfixe/suffixe --- 
              ; (Exemple : si le nom contient 'serviceA', ajouter '_A' en suffixe)
              (setq nom_bloc_modifie (strcat nom_bloc_original "_SERVICEA")) ; Exemple de modification
              
              (command "_RENAME" "B" nom_bloc_original nom_bloc_modifie) ; Renomme le bloc
              (setq i (1+ i))
            )
          )
          0 ; Index de départ
        )
        (princ "Aucun bloc trouvé.")
      )
      (princ)
    )
    
    Note : Ce code est un exemple conceptuel. Il faudrait le développer pour gérer les cas spécifiques (préfixe/suffixe, conditions de renommage, gestion des erreurs, etc.).

3. Solution avancée : Développement d’un Gestionnaire de Blocs (VBA/AutoLISP) :

Votre idée de développer un gestionnaire de blocs est la voie la plus robuste pour une gestion à long terme. Cela permettrait de centraliser la création, la modification et le renommage des blocs selon des règles prédéfinies.

  • Fonctionnalités potentielles :

    • Interface utilisateur : Un dialogue pour sélectionner les blocs à modifier, définir le préfixe/suffixe, et choisir les critères de renommage.
    • Gestion des attributs : Si vous décidez d’utiliser des attributs pour stocker des informations (comme le service), le gestionnaire pourrait les lire et les utiliser pour le renommage.
    • Base de données de blocs : Pour des projets plus complexes, une base de données externe pourrait gérer les définitions de blocs et leurs propriétés.
    • Intégration avec les services : Possibilité de lier les blocs à des listes de services pré-définies.
  • Pistes de développement :

    • AutoLISP : Idéal pour des scripts rapides et l’automatisation des commandes AutoCAD. Il peut interagir avec les objets du dessin et les propriétés des blocs.
    • VBA (Visual Basic for Applications) : Plus puissant pour créer des interfaces utilisateur complexes et gérer des logiques de programmation plus élaborées. Il peut accéder à l’API d’AutoCAD pour manipuler les objets.
    • C# avec .NET API : Pour une solution encore plus moderne et performante, surtout si vous envisagez une application autonome ou une intégration poussée.

4. Sites et ressources pour approfondir :

  • CadXP (le forum d’origine) : Continuez à explorer ce forum. Il est probable que d’autres utilisateurs aient rencontré des problèmes similaires et partagé des solutions ou des scripts.
  • The Swamp (autodesk.com) : La communauté officielle d’Autodesk est une mine d’informations, avec des forums dédiés à LISP, VBA et .NET, ainsi que des bibliothèques de code.
  • Autodesk Developer Network (ADN) : Offre des ressources, des SDK et des forums pour les développeurs travaillant avec les produits Autodesk.
  • Sites spécialisés en LISP et VBA pour AutoCAD : Une recherche rapide sur le web avec des termes comme « AutoCAD LISP rename block batch » ou « AutoCAD VBA block manager » vous donnera de nombreux exemples et tutoriels.

Recommandation :

Commencez par explorer des scripts LISP existants qui traitent du renommage de blocs en masse. Si vous trouvez une base qui s’approche de votre besoin, vous pourrez l’adapter. Parallèlement, continuez à apprendre le VBA, car il vous offrira la flexibilité nécessaire pour créer un gestionnaire de blocs plus personnalisé à l’avenir. La clé est de décomposer le problème en étapes gérables et de chercher des solutions adaptées à votre niveau de compétence actuel et à vos objectifs à long terme.