DenisHen Posté(e) le 26 mai 2006 Posté(e) le 26 mai 2006 Bonsoir à tous, Voilà, je commence à faire des petites routines un peu partout, et par soucis de bonne conduite, je souhaiterais modifier pleins de variables, exécuter me routine, puis, restaurer les variables telles qu'elles étaient avant... Histoire de ne pas faire comme TopoList... Qui supprime l'accroche objet ou autre puis qui laisse le système comme-çà...Après moi, le déluge... Ca dervrait tenir en deux routines, une qui sauve, l'autre qui restaure... Merci... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 27 mai 2006 Posté(e) le 27 mai 2006 La méthode traditionnelle consiste à, tout simplement récupéprer la valeur initiale de la variable système, l'affecter à une variable locale, et la restaurer en fin de routine. (defun c:ma_routine (/ v1 v2) (setq v1 (getvar "CMDECHO") v2 (getvar "OSMODE") (setvar "CMDECHO" 0) (setvar "OSMODE" 0) ... ... ... (setvar "CMDECHO" v1) (setvar "OSMODE" v2) (princ) ) Il est aussi possible de faire deux routines, une qui enregistre et change la valeur de la variable et une autre qui restaure leurs valeurs initiales à toutes les variables traitées par la première, les routines devront être chargées à chaque LISP qui les utitlise ou en permanence. ;;; SAVE&SET_VAR ;;; Enregistre la valeur initiale de la variable système dans une liste ;;; et lui attribue sa nouvelle valeur (si val est non nil) ;;; ;;; ex: (SAVE&SET_VAR "autosnap" nil) (SAVE&SET_VAR "orthomode" 1) ;;; -> SavedSysVarLst : ((setvar "orthomode" 0) (setvar "autosnap" 63)) ;;; -> (getvar "orthomode") : 1 ;;; -> (getvar "autosnap") : 55 (63 - 8 : le repérage polaire est désactivé) (defun SAVE&SET_VAR (var val) (cond ((getvar var) (setq SavedSysVarLst (cons (list 'setvar var (getvar var)) SavedSysVarLst) ) (if val (setvar var val) ) ) ) ) ;;; RESTORE_VAR ;;; Restaure leurs valeurs initiales aux variables système de "SavedSysVarLst" ;;; ;;; ex: (RESTORE_VAR) ;;; -> (getvar "orthomode") : 0 ;;; -> (getvar "autosnap") : 63 ;;; -> SavedSysVarLst : nil (defun restore_var () (mapcar 'eval SavedSysVarLst) (setq SavedSysVarLst nil) ) RESTORE_VAR est donnée ici à titre d'exemple, on peut aussi ne charger que SAVE&SET_VAR, déclarer SavedSysVarLst comme variable locale et faire simplement : (mapcar 'eval SavedSysVarLst) en fin de routine Attention toutefois, en cas d'erreur ou d'annulation en cours d'exécution les variables systèmes ne seraient pas restaurées.Il faut pour celà redéfinir la fonction *error* le temps de l'exécution du LISP. Ce sujet a été maintes fois traité (par exemple ici) tu peux faire une recherche dans les forums avec *error* ainsi que dans l'aide d'AutoCAD. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant