Automatiser le calcul d'attributs AutoCAD avec Champs et DIESEL

Comment configurer un attribut de bloc dynamique AutoCAD (par exemple, ‹ PM-RA ›) pour qu’il affiche le résultat d’une formule basée sur la valeur d’un autre attribut (‹ PM-FZ ›) ou sur des paramètres d’étirement (‹ PM-PFS Cote1 ›, ‹ PM-PFS Cote2 ›) ?

Pour automatiser le calcul et l’affichage de la valeur d’un attribut de bloc en fonction d’autres attributs ou de paramètres dynamiques, les méthodes les plus efficaces dans AutoCAD sont l’utilisation des Champs (Fields) et, pour des logiques plus complexes ou des personnalisations avancées, les expressions DIESEL ou la programmation (LISP/VBA/C#).

1. Utilisation des Champs (Fields) - Méthode Recommandée

Les Champs sont la méthode la plus moderne et la plus robuste pour lier dynamiquement des données dans AutoCAD. Ils permettent de créer des liens directs vers des propriétés d’objets, des attributs ou des paramètres de blocs dynamiques, et peuvent inclure des formules.

Procédure pour lier un attribut à un autre ou à un paramètre de bloc dynamique :

  1. Ouvrir l’Éditeur de blocs : Sélectionnez le bloc concerné et utilisez la commande BEDIT (ou double-cliquez sur le bloc) pour l’ouvrir dans l’Éditeur de blocs.
  2. Modifier l’attribut cible : Double-cliquez sur l’attribut PM-RA pour ouvrir la boîte de dialogue « Modifier la définition d’attribut ».
  3. Insérer un Champ dans la valeur par défaut :
    • Dans le champ « Valeur par défaut », faites un clic droit et sélectionnez « Insérer un champ… ».
    • Dans la boîte de dialogue « Champ », choisissez la catégorie « Objet ».
    • Sous « Type de champ », sélectionnez « Objet ».
    • Cliquez sur le bouton « Sélectionner un objet » (le petit carré avec un curseur) et sélectionnez le bloc lui-même dans la zone de dessin de l’éditeur de blocs.
    • Dans la liste des propriétés, vous verrez les attributs du bloc (ex: PM-FZ) et les paramètres de bloc dynamique (ex: PM-PFS Cote1, PM-PFS Cote2).
    • Pour PM-RA = PM-FZ : Sélectionnez PM-FZ dans la liste des propriétés et choisissez « Valeur » comme propriété à afficher. Validez.
    • Pour une formule avec des paramètres dynamiques : Si vous souhaitez une formule comme PM-RA = PM-FZ + PM-PFS Cote1, vous pouvez insérer le premier champ (PM-FZ), puis taper + et insérer un second champ (PM-PFS Cote1). AutoCAD évaluera cette expression. Pour des formules plus complexes, il est parfois nécessaire d’utiliser la fonction FORMULA dans les champs ou de passer par LISP.
  4. Fermer l’Éditeur de blocs : Enregistrez les modifications du bloc.
  5. Mettre à jour les blocs existants : Utilisez la commande ATTSYNC pour synchroniser les définitions d’attributs des blocs existants avec la nouvelle définition.

Les champs se mettront à jour automatiquement lors de l’ouverture du dessin, de la régénération (REGEN) ou de la modification des valeurs liées.

2. Expressions DIESEL - Pour la Personnalisation et les Macros

Le langage DIESEL (Direct Interpretively Evaluated String Expression Language) est puissant pour la personnalisation des interfaces, des menus et des macros. Bien qu’il ne soit pas idéal pour des calculs dynamiques complexes entre attributs sans assistance, il peut être utilisé pour des valeurs par défaut d’attributs ou intégré dans des champs pour des logiques spécifiques.

  • Dans la valeur par défaut d’un attribut : DIESEL peut être utilisé pour définir une valeur initiale ou un formatage conditionnel simple basé sur des variables système ou des entrées utilisateur. Cependant, il ne peut pas directement lire la valeur d’un autre attribut de bloc dynamique pour un calcul post-insertion sans l’aide d’un script.
  • Intégré dans un Champ : Les expressions DIESEL peuvent être utilisées au sein d’un champ pour manipuler la chaîne de caractères résultante ou appliquer des conditions. Par exemple, un champ pourrait afficher $(upper, %<[Champ vers PM-FZ]>) pour afficher la valeur de PM-FZ en majuscules.
  • Dans les Macros LISP/C# : C’est là que DIESEL révèle sa pleine puissance pour les attributs. Une macro LISP ou un programme C# peut lire les valeurs des attributs et paramètres, effectuer des calculs complexes, puis utiliser DIESEL pour formater la chaîne de résultat avant de l’écrire dans l’attribut cible. Par exemple, une routine LISP pourrait lire PM-FZ et PM-PFS Cote1, calculer PM-RA, puis mettre à jour PM-RA avec la valeur formatée via DIESEL.

3. Programmation LISP / VBA / C# - Pour les Cas Avancés

Pour des logiques de calcul très complexes, des interactions avec des bases de données externes, ou des mises à jour automatiques déclenchées par des événements spécifiques (par exemple, après chaque modification d’un paramètre de bloc dynamique), la programmation est la solution la plus robuste.

  • LISP : Un script LISP peut être écrit pour parcourir les entités de bloc, lire les valeurs d’attributs et de paramètres (via VLAX ou ENTGET/ENTMOD), effectuer les calculs, puis mettre à jour l’attribut PM-RA. Ce script peut être déclenché manuellement ou via un événement.
  • VBA / C# (.NET) : Ces langages offrent un contrôle plus granulaire et des performances accrues. Un plugin .NET peut s’abonner aux événements de modification de bloc (BlockReference.Modified) pour recalculer et mettre à jour PM-RA en temps réel, offrant une expérience utilisateur fluide et entièrement automatisée.

Bonnes Pratiques :

  • Toujours modifier les définitions d’attributs dans l’Éditeur de blocs (BEDIT).
  • Utiliser ATTSYNC après toute modification de la définition d’un attribut pour mettre à jour les blocs existants.
  • Tester minutieusement les formules et les scripts pour s’assurer de leur exactitude et de leur réactivité.