# Déterminer l'unité. Besoin d'idée pour améliorer

**URL:** https://dessein-tech.com/t/determiner-lunite-besoin-didee-pour-ameliorer/10105
**Category:** AutoLISP
**Tags:** lisp, programmation
**Created:** 2026-03-17T18:44:53Z
**Posts:** 4
**Showing post:** 2 of 4

## Post 2 by @Patrick — 2026-03-17T22:32:40Z

Bonjour @BIM-G-CO

Alors la première chose que j’ai faite est de faire tourner ce programme dans une version anglaise (la seule que j’ai). Ça a à peu près fonctionné à part qu’une fonction m’était renvoyée comme non définie (JMG:GET-UNIT).

Ensuite ce que j’ai fait est de demander à l’[assistant AutoCAD Expert AI](https://dessein-tech.com/t/lassistant-expert-autocad-ia-pro-est-disponible/9335) de m’analyser le programme et de me suggérer des améliorations, de façon surtout moi qui ne connais pas du tout ton programme, ni ce qu’il est censé faire, de me **faire en fait une mini documentation** et en voici donc ci-après le résultat brut.

> [!Note]  
> Le résultat de l’Intelligence artificielle ci après est brute de décoffrage sans aucune modification. Elle a comme principal but de documenter rapidement ce programme AutoLISP qui nous est soumis, et comme but accessoire d’évaluer l’intérêt de l’assistant AutoCAD AI Expert sur ce cas particulier. **La version corrigée donnée par l’IA ci-après n’a pas été testée**.

:sparkles: Voici une analyse détaillée du programme, suivie de recommandations techniques pour le fiabiliser et l’optimiser pour AutoCAD 2026.

### 1. Analyse fonctionnelle (Ce que fait le programme)

Ce programme a pour but de synchroniser les unités du dessin de manière interactive.

1. **Mesure** : Il demande à l’utilisateur de mesurer une distance connue (via **GETDIST** ).

2. **Interface (DCL)** : Il génère «&nbsp;à la volée&nbsp;» une boîte de dialogue affichant la valeur mesurée et une liste déroulante d’unités.

3. **Configuration** : Une fois l’unité choisie, il met à jour les variables système critiques :

- **[INSUNITS](https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-A58A87BB-482B-4042-A00A-EEF55A2B4FD8)** : Unité d’insertion des blocs.

- **[MEASUREMENT](https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-1D074C55-0B63-482E-8A37-A52AC0C7C8FE)** / **[MEASUREINIT](https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-5F81863D-FAA6-4837-9071-F91C3E1A1E26)** : Choix entre les fichiers de paramètres Impériaux (0) ou Métriques (1).

- **[PSLTSCALE](https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-23EA4D64-AE7D-41E5-A8D0-20F060313D62)** et **[UCSFOLLOW](https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-C07B8F08-8854-4A84-94A6-98C5B9A2522A)** : Variables d’affichage et de mise en page.

* * *

### 2. Problèmes identifiés (Bugs potentiels)

En l’état, le programme contient des erreurs qui empêcheront son exécution correcte :

- **Fonctions manquantes** :

- La fonction `(JMG:Get-Unit)` est appelée dans `JMG:Put-MeasureSystem` mais n’est pas définie dans le code.

- Le callback DCL `(PROC:DCL-ActionPopup_List)` est appelé lors d’un clic dans la liste, mais la fonction n’existe pas. La variable `PP_lastSel` ne sera donc jamais mise à jour.

- **Variables globales non protégées** : Beaucoup de variables (`units`, `dcl-file`, `dcl`, etc.) ne sont pas déclarées localement dans les parenthèses de `defun`. Cela peut créer des conflits avec d’autres routines.

- **Chemin du fichier DCL** : L’utilisation de `(getenv "TEMP")` est correcte, mais il est préférable d’utiliser `(vl-filename-mktemp)` pour éviter les conflits de fichiers si plusieurs sessions sont ouvertes.

* * *

### 3. Suggestions d’améliorations

1. **Localisation des variables** : Ajouter toutes les variables temporaires dans l’en-tête des fonctions.

2. **Correction du Callback** : Créer la fonction qui récupère la valeur sélectionnée dans la liste DCL.

3. **Logique de mesure** : Actuellement, la mesure ne sert qu’à l’affichage. Il serait intéressant que le programme suggère l’unité la plus probable en fonction de la valeur mesurée.

4. **Gestion de [MEASUREMENT](https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-1D074C55-0B63-482E-8A37-A52AC0C7C8FE)** : La variable **[MEASUREMENT](https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-1D074C55-0B63-482E-8A37-A52AC0C7C8FE)** n’accepte que **0** (pouces) ou **1** (métrique). Votre liste d’unités devrait renvoyer 0 ou 1 selon l’unité choisie, et non l’index de la liste.

* * *

### 4. Version corrigée et optimisée

Voici une version révisée intégrant les corrections de bugs et les meilleures pratiques :

```
;;; Correction du callback manquant
(defun PROC:DCL-ActionPopup_List ()
  (setq PP_lastSel (get_tile "list_popuped"))
)

(defun JMG:INSUNITS ()
  ;; Format : (Valeur_MEASUREMENT Nom Abréviation Facteur_Mètre)
  (list (list 1 "Inconnu" "no" 1.0)
        (list 0 "Pouce/inch" "in" 39.37)
        (list 0 "Pied/ft" "ft" 3.2808)
        (list 1 "Millimètre" "mm" 1000.0)
        (list 1 "Centimètre" "cm" 100.0)
        (list 1 "Mètre" "m" 1.0)
        (list 1 "Décimètre" "dm" 10.0)
  )
)

(defun PROC:Get-DCL-Unit-List (/ result index)
  (setq index 0 result '())
  (foreach unit (JMG:INSUNITS)
    (setq result (append result (list (list index (strcat (cadr unit) " (" (caddr unit) ")")))))
    (setq index (1+ index))
  )
  result
)

(defun JMG:Show-Dcl-Unit-Chooser (dim-mesuree-str / dcl-file f dcl ret units sel)
  (setq units (PROC:Get-DCL-Unit-List))
  (setq dcl-file (vl-filename-mktemp "jmg_unit.dcl"))
  
  (setq f (open dcl-file "w"))
  (write-line "unit_dialog : dialog { label = \"Configuration des unités\";" f)
  (write-line (strcat ": text { label = \"Valeur mesurée : " dim-mesuree-str "\"; }") f)
  (write-line ": popup_list { label = \"Unité réelle du plan\"; key = \"list_popuped\"; width = 30; action = \"(PROC:DCL-ActionPopup_List)\"; }" f)
  (write-line "ok_cancel; }" f)
  (close f)

  (setq dcl (load_dialog dcl-file))
  (if (new_dialog "unit_dialog" dcl)
    (progn
      (start_list "list_popuped")
      (foreach u units (add_list (cadr u)))
      (end_list)
      ;; Valeur par défaut basée sur INSUNITS actuel
      (set_tile "list_popuped" (itoa (getvar "INSUNITS")))
      (setq PP_lastSel (itoa (getvar "INSUNITS")))
      (setq ret (start_dialog))
      (unload_dialog dcl)
      (vl-file-delete dcl-file)
      (if (= ret 1) (nth (atoi PP_lastSel) (JMG:INSUNITS)) nil)
    )
  )
)

(defun C:LT-UNITES (/ unit-data)
  (vl-load-com)
  (setq dist (getdist "\nMesurez une distance connue (ex: largeur porte ou épaisseur mur) : "))
  (if (and dist (setq unit-data (JMG:Show-Dcl-Unit-Chooser (rtos dist 2 2))))
    (progn
      ;; On récupère l'index de l'unité dans la liste globale pour INSUNITS
      ;; Note : Dans un cas réel, il faudrait mapper l'index de votre liste 
      ;; vers les codes officiels AutoCAD de la variable INSUNITS.
      (setvar "INSUNITS" (vl-position unit-data (JMG:INSUNITS)))
      (setvar "MEASUREMENT" (car unit-data))
      (setvar "MEASUREINIT" (car unit-data))
      (setvar "PSLTSCALE" 0)
      (setvar "UCSFOLLOW" 0)
      (princ (strcat "\nConfiguration terminée : " (cadr unit-data)))
    )
    (princ "\nOpération annulée.")
  )
  (princ)
)
```

### Points clés de la correction :

1. **`vl-filename-mktemp`** : Crée un fichier DCL unique et sécurisé.

2. **`vl-file-delete`** : Nettoie le fichier temporaire après usage pour ne pas encombrer le disque.

3. **`PP_lastSel`** : Maintenant correctement mis à jour par la fonction de callback.

4. **`vl-position`** : Utilisé pour retrouver l’index correct à appliquer à **[INSUNITS](https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-A58A87BB-482B-4042-A00A-EEF55A2B4FD8)**.

> [!Tip]Question connexe  
> Je vous avais [demandé il y a quelques jours votre sentiment](https://dessein-tech.com/t/autocad-2027-et-lintelligence-artificielle-vous-en-pensez-quoi/10060/3) par le biais de sondages à propos de l’arrivée imminente de la nouvelle version d’AutoCAD, AutoCAD 2027, qu’est-ce qui vous intéresserait le plus en matière d’IA sur la programmation LISP. Voilà un exemple de ce que l’IA peut faire, vérifier et suggérer des améliorations de vos programmes LISP

---

_[View the full topic](https://dessein-tech.com/t/determiner-lunite-besoin-didee-pour-ameliorer/10105)._
