Je cherche une méthode en LISP pour sauvegarder toutes les variables système de mon dessin, les restaurer après exécution, ou les remettre à leurs valeurs par défaut. Existe-t-il une fonction ou une commande pour cela ?
La gestion exhaustive de toutes les variables système d’AutoCAD est complexe et risquée. La meilleure pratique consiste à ne gérer que les variables spécifiques modifiées par votre routine LISP, en assurant leur restauration systématique, même en cas d’interruption.
-
Identifier et sauvegarder les variables modifiées :
- Avant de modifier une variable, stockez sa valeur actuelle.
- Méthode classique : Utilisez
(setq old_var (getvar "NOM_VARIABLE")). - Avec
ai_sysvar(Gilles Chanteau) : Cette fonction, présente dansacad20XXdoc.lsp, gère la sauvegarde interne. Utilisez(ai_sysvar "NOM_VARIABLE" nouvelle_valeur)pour modifier et(ai_sysvar "NOM_VARIABLE" nil)pour restaurer. - Attention : Évitez de mélanger les méthodes
setq/getvar/setvaretai_sysvarpour une même variable afin d’éviter toute confusion.
-
Garantir la restauration avec gestion d’erreurs :
- Pour assurer que les variables sont restaurées même si le LISP est interrompu (ex: par la touche Échap) ou qu’une erreur survient, intégrez un mécanisme de gestion d’erreurs.
- Redéfinition locale de
*error*: Déclarez une fonction*error*locale au début de votre routine. Cette fonction sera appelée en cas d’erreur et contiendra le code de restauration des variables. (Exemple fourni par Gilles Chanteau)(defun C:MA_ROUTINE (/ old_error old_var1 old_var2) (setq old_error *error*) ; Sauvegarde l'ancienne fonction d'erreur (defun *error* (msg) (if old_var1 (setvar "VAR1" old_var1)) ; Restaure VAR1 (if old_var2 (setvar "VAR2" old_var2)) ; Restaure VAR2 (setq *error* old_error) ; Restaure l'ancienne fonction d'erreur (princ (strcat "\nErreur: " msg)) (princ) ) ; ... Votre code LISP ici ... (setq old_var1 (getvar "VAR1")) (setvar "VAR1" nouvelle_valeur) ; ... (setvar "VAR1" old_var1) ; Restauration normale (setq *error* old_error) ; Restaure l'ancienne fonction d'erreur (princ) ) - Utilisation de
vl-catch-all-apply: Cette fonction permet de capturer les erreurs sans interrompre l’exécution du code, offrant une alternative pour gérer les exceptions et exécuter des actions de nettoyage.
-
Surveillance des variables système :
- La commande MONITEURVARSYS (
_SYSVARMONITOR) permet de suivre les modifications des variables système et de les réinitialiser manuellement, mais ne fournit pas de solution programmatique globale pour toutes les variables.
- La commande MONITEURVARSYS (