Remplir automatiquement un cartouche AutoCAD avec des données du nom de fichier

Comment extraire des segments spécifiques d’un nom de fichier AutoCAD (DWG) pour remplir automatiquement des champs ou attributs dans un cartouche, en utilisant un format de nom de fichier structuré (par exemple : toto_titi_tutu_tata_tet_fifi_fofo_123456_A1 - 01.dwg) ?

L’automatisation du remplissage des cartouches à partir du nom de fichier est une pratique courante pour optimiser le temps de travail et garantir la cohérence des informations. Pour extraire des parties spécifiques d’un nom de fichier DWG et les insérer dans un cartouche AutoCAD, deux méthodes principales peuvent être utilisées : l’expression Diesel via les champs, ou un script LISP pour une flexibilité accrue.


Méthode 1 : Utilisation des Champs avec Expression Diesel (Recommandée pour les structures fixes)

Cette méthode est la plus directe et a été confirmée comme fonctionnelle par l’utilisateur. Elle est idéale lorsque la position et la longueur des informations à extraire dans le nom de fichier sont fixes ou prévisibles.

Principe : Utiliser la fonction $(substr) de l’expression Diesel pour extraire une sous-chaîne du nom de fichier complet ($(getvar,dwgname)).

Procédure Étape par Étape :

  1. Accéder à l’éditeur de champ :
    • Dans votre bloc de cartouche (idéalement avec des attributs), double-cliquez sur la zone de texte ou l’attribut que vous souhaitez remplir.
    • Si c’est un texte simple, utilisez la commande CHAMP (ou FIELD).
  2. Choisir le type de champ :
    • Dans la boîte de dialogue ‹ Champ ›, sélectionnez ‹ Expression Diesel › dans la catégorie ‹ Autres ›.
  3. Construire l’expression Diesel :
    • La syntaxe générale est : $(substr,chaîne_source,position_début,nombre_caractères)
    • chaîne_source : Utilisez $(getvar,dwgname) pour obtenir le nom du fichier DWG actuel (sans le chemin ni l’extension).
    • position_début : Le numéro du caractère de départ (le premier caractère est 1).
    • nombre_caractères : Le nombre de caractères à extraire à partir de la position de début.
  4. Exemple Concret :
    • Pour un nom de fichier toto_titi_tutu_tata_tet_fifi_fofo_123456_A1 - 01.dwg et si vous voulez extraire titi (qui commence au 6ème caractère et fait 4 caractères de long), l’expression sera :
      $(substr,$(getvar,dwgname),6,4)
    • Adaptez position_début et nombre_caractères pour chaque segment de votre nom de fichier que vous souhaitez extraire (ex: tutu, tata, etc.).
  5. Valider et Mettre à Jour :
    • Cliquez sur ‹ OK ›. Le champ affichera la valeur extraite. Si le fichier est renommé, le champ se mettra à jour lors de la prochaine régénération du dessin (REGEN) ou en utilisant la commande MAJCHAMP (UPDATEFIELD).

Avantages : Simple à mettre en œuvre, ne nécessite pas de programmation externe.
Limites : Moins flexible si la longueur des segments varie considérablement ou si la structure du nom de fichier n’est pas strictement fixe.


Méthode 2 : Script LISP pour une Extraction par Délimiteur (Plus flexible)

Cette méthode est plus robuste pour les noms de fichiers dont les segments ont des longueurs variables, mais sont séparés par un délimiteur (comme _). Elle nécessite l’utilisation d’un script AutoLISP.

Principe : Le script découpe le nom du fichier en une liste de chaînes en utilisant un délimiteur (ici _), puis assigne chaque segment à une variable LISP distincte. Ces variables peuvent ensuite être insérées comme champs dans le cartouche.

Procédure :

  1. Créer le fichier LISP :
    • Ouvrez un éditeur de texte (comme le Bloc-notes) et copiez le code LISP suivant conçu par Denis Hennuyer :
    (defun c:DenisH (/)
     (setq NomFichier (str2lst (getvar "dwgname") "_"))
     (setq Phase (nth 0 NomFichier))
     (setq Zone (nth 1 NomFichier))
     (setq PK (nth 2 NomFichier))
     (setq Discipline (nth 3 NomFichier))
     (setq TypeOuvrage (nth 4 NomFichier))
     (setq Emetteur (nth 5 NomFichier))
     (setq TypeDoc (nth 6 NomFichier))
     (setq Numero (nth 7 NomFichier))
     (setq Indice (substr (nth 8 NomFichier) 1 (vl-string-search " " (nth 8 NomFichier))))
     (princ)
    )
    (defun str2lst (str sep / pos)
     (if (setq pos (vl-string-search sep str))
     (cons (substr str 1 pos)
     (str2lst (substr str (+ (strlen sep) pos 1)) sep)
     )
     (list str)
     )
    )
*   Enregistrez le fichier avec une extension `.lsp` (ex: `DenisH.lsp`).
  1. Charger le LISP dans AutoCAD :
    • Utilisez la commande APPLOAD (Charger application).
    • Naviguez jusqu’à votre fichier .lsp et chargez-le. Vous pouvez l’ajouter au ‹ Contenu du démarrage › pour qu’il se charge automatiquement à l’ouverture d’AutoCAD.
  2. Exécuter la commande LISP :
    • Dans la ligne de commande d’AutoCAD, tapez LaLozere et appuyez sur Entrée.
    • Cette commande va analyser le nom du fichier courant et créer des variables LISP (ex: Phase, Zone, PK, etc.) avec les segments correspondants.
  3. Insérer les variables LISP comme champs :
    • Dans votre cartouche, utilisez la commande CHAMP (FIELD).
    • Dans la boîte de dialogue ‹ Champ ›, choisissez ‹ Variable Lisp › dans la catégorie ‹ Autres ›.
    • Sélectionnez la variable LISP souhaitée (ex: Phase, Zone, etc.) dans la liste déroulante.
    • Cliquez sur ‹ OK ›. Le champ affichera la valeur de la variable LISP.

Avantages : Permet une extraction plus sophistiquée et tolérante aux variations de longueur entre les segments, tant que l’ordre des segments et le délimiteur sont constants.
Limites : Nécessite une connaissance de base de LISP et une exécution manuelle (ou automatisée via un réacteur) de la commande LISP.


Bonnes Pratiques

  • Standardisation des Noms de Fichiers : Quelle que soit la méthode choisie, une convention de nommage de fichiers stricte et cohérente est essentielle pour le succès de l’automatisation.
  • Utilisation d’Attributs de Bloc : Pour les cartouches, il est fortement recommandé d’utiliser des attributs de bloc plutôt que du texte simple. Vous pouvez insérer les champs (Diesel ou LISP) directement dans les valeurs par défaut des attributs ou les modifier après l’insertion du bloc.
  • Mise à Jour des Champs : N’oubliez pas que les champs ne se mettent pas toujours à jour en temps réel. Utilisez REGEN ou MAJCHAMP (UPDATEFIELD) pour forcer leur rafraîchissement après un renommage de fichier ou l’exécution du LISP.