Comment assembler des variables (nombres et chaînes de caractères) avec du texte fixe en AutoLISP pour créer une chaîne de caractères formatée (ex: ‹ T2.A01 ›) destinée à un attribut de bloc dans AutoCAD ?
Le problème consiste à combiner différentes données (entiers, chaînes de caractères) avec du texte statique pour former une chaîne unique et formatée, qui sera ensuite assignée à un attribut de bloc AutoCAD. La fonction AutoLISP strcat est l’outil principal pour cette tâche, mais elle nécessite que tous ses arguments soient des chaînes de caractères.
Voici la procédure détaillée pour y parvenir, en intégrant les bonnes pratiques :
-
Collecte des données utilisateur :
Pour garantir la flexibilité des entrées (par exemple, accepter « 4D » ou « 01 »), il est préférable d’utilisergetstringpour toutes les saisies utilisateur, même si elles semblent numériques. Cela évite les erreurs si l’utilisateur entre des caractères non numériques ou des zéros initiaux.;; Demande le type d'appartement (ex: "1", "2", "3D", "4D") ;; L'argument T permet d'accepter des espaces, bien que non nécessaire ici. (setq type_APP (getstring T "\nEntrer le type appartement (1/2/3/4D...) : ")) ;; Demande la lettre de l'appartement (ex: "A") (setq lettre_APP (getstring T "\nEntrer la lettre de l'appartement : ")) ;; Demande le numéro d'appartement (ex: "01", "12"). ;; getstring est crucial pour conserver les zéros initiaux comme dans "01". (setq numero_APP (getstring T "\nEntrer le n° d'appartement (ex: 01) : "))- Bonne pratique : Si une entrée doit être strictement numérique pour des calculs ultérieurs, utilisez
getintougetrealet gérez les erreurs de saisie. Cependant, pour la concaténation de chaînes,getstringest souvent plus robuste pour les entrées utilisateur variées.
- Bonne pratique : Si une entrée doit être strictement numérique pour des calculs ultérieurs, utilisez
-
Conversion des types de données (si nécessaire) :
La fonctionstrcatne peut concaténer que des chaînes de caractères. Si, par exemple,type_APPavait été collecté avecgetint(retournant un entier), il aurait fallu le convertir en chaîne avant la concaténation. Les fonctions de conversion sont :itoa(Integer To Ascii) : Convertit un entier en chaîne.rtos(Real To String) : Convertit un nombre réel en chaîne.atoi(Ascii To Integer) : Convertit une chaîne en entier.atof(Ascii To Float) : Convertit une chaîne en nombre réel.
Dans notre cas, puisque
getstringest utilisé pour toutes les variables,type_APP,lettre_APP, etnumero_APPsont déjà des chaînes, rendant cette étape de conversion explicite inutile pour la concaténation. -
Concaténation des chaînes avec
strcat:
La fonction(strcat string1 string2 ...)prend un nombre variable d’arguments (qui doivent tous être des chaînes) et les assemble dans l’ordre pour former une nouvelle chaîne.
Pour obtenir le format désiré « T2.A01 » (ou « T4D.A01 ») :(setq nom_APP_COMPLET (strcat "T" type_APP "." lettre_APP numero_APP))- Exemple avec des valeurs :
- Si
type_APP= « 2 » - Si
lettre_APP= « A » - Si
numero_APP= « 01 » - Alors
nom_APP_COMPLETcontiendra la chaîne « T2.A01 ».
- Si
- Exemple avec des valeurs :
-
Application à un attribut de bloc :
Une fois la chaînenom_APP_COMPLETcorrectement formée, vous pouvez l’assigner à l’attribut d’un bloc AutoCAD. Assurez-vous que le bloc et l’attribut existent et sont accessibles.;; Supposons que 'mon_bloc' est une entité de bloc valide ;; et "TAG_ATTRIBUT_COMPLET" est le tag (nom) de l'attribut cible. (setpropertyvalue mon_bloc "TAG_ATTRIBUT_COMPLET" nom_APP_COMPLET)- Note : La fonction
setpropertyvalueest une méthode plus moderne et robuste pour manipuler les propriétés d’entités, y compris les valeurs d’attributs de blocs, par rapport à des méthodes plus anciennes commevla-set-attribute-valueou la modification directe viaentmod.
- Note : La fonction
En suivant ces étapes, vous pouvez construire des chaînes de caractères complexes et dynamiques à partir d’entrées utilisateur et de texte fixe, puis les utiliser efficacement dans vos routines AutoLISP pour AutoCAD.