gile Posté(e) le 22 avril 2005 Posté(e) le 22 avril 2005 Existe-t-il des alternatives à ai_setCmdEcho (trouvé dans ai_utils.lsp de AutoCAD) et qui semble ne fonctionner que dans AutoCAD et seulement depuis la version 2004. Mon problème est de ne pas perdre la restauration à sa valeur initiale de la variable cmdecho aprés avoir annuler une routine LISP. Peut-on constituer un groupe undo sans passer par command et changer cmdecho ensuite ? Autres questions, ai_setCmdEcho utilise la variable environnement "acedChangeCmdEchoWithoutUndo".Où peut-on trouver la liste de ces variables ? Peut-on les utiliser comme des variables système, ou est-ce imprudent ?
Tramber Posté(e) le 22 avril 2005 Posté(e) le 22 avril 2005 Ragarde le cadeau Bonus de ce message. Y a pas mieux CMDECHO est une variable et UNDO une commande, on les traite bien à part. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
gile Posté(e) le 22 avril 2005 Auteur Posté(e) le 22 avril 2005 Merci encore, Tramber. Je procède en général à peu près comme dans l'exemple, ouverture du groupe undo, puis changement de la valeur des variables système (CF routine envoyée hier), mais de cette manière un echo est renvoyé pour le premier appel de la fonction command, à savoir (command "_undo" "__begin") ou autre ... ... et çà fait pas propre !
Patrick_35 Posté(e) le 22 avril 2005 Posté(e) le 22 avril 2005 Peut-on constituer un groupe undo sans passer par command et changer cmdecho ensuite ?Oui avec les fonctions vlisp(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))et(vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
gile Posté(e) le 22 avril 2005 Auteur Posté(e) le 22 avril 2005 Merci Patrick_35, Jusque là j'avais fait l'impasse sur les fonctions vlisp, donc je ne sais pas m'en servir ! J'ai testé, et j'ai eu le message d'erreur sivant :; erreur: no function definition: VLAX-GET-ACAD-OBJECT Pour être sûr de se comprendre voilà la copie du test : (defun c:test (/ old_echo pt1 ray) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)) ) (setq old_echo (getvar cmdecho) pt1 (getpoint "\nSpécifiez le premier centre: ") ray (getpoint pt1 "\nSpécifiez le rayon: ") ) (setvar "cmdecho" 0) (command "_circle" pt1 ray) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)) ) (setvar "cmdecho" old_echo) (princ))
Tramber Posté(e) le 22 avril 2005 Posté(e) le 22 avril 2005 :casstet: Tu m'intéresses Patrick. Ces 2 fonctions gèrent les groupes d'annulation et toutes les variables à la fois au début et à la fin d'un programme ou j'ai rien compris ? Mais pourquoi ca serait si simple ? :cool: [Edité le 22/4/2005 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 22 avril 2005 Posté(e) le 22 avril 2005 Gile, Si t'es sous 2000 ou 2002, t'as fait ton (vl-load-com) avant toutes choses ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
gile Posté(e) le 22 avril 2005 Auteur Posté(e) le 22 avril 2005 C'est çà, maintenant çà marche, j'avais oublié (vl-load-com), et des guillemets aussi ! Ces deux fonctions gèrent le groupe undo de manière "silencieuse". Mais la méthode semble partager le même défaut (à mon avis) que la fonction ai_setCmdEcho qui est d'être incompatible avec d'autre logiciel qu'AutoCAD.
gile Posté(e) le 22 avril 2005 Auteur Posté(e) le 22 avril 2005 Pour synthétiser tout çà, on doit pouvoir faire 3 sous-fonctions qui serviraient pour toutes les routines qui utilisent un groupe undo et/ou modifient la valeurs de variables système. Elles pourraient être de genre : (defun MON_ERREUR (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon") ) (princ) (princ (strcat "\nErreur: " msg)) ) (command) (REST_ENV) (princ)) (defun SAVE_ENV (lst) (vl-load-com) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)) ) (setq m:err *error* *error* MON_ERREUR varlist (mapcar '(lambda (x) (cons x (getvar x))) lst) )) (defun REST_ENV () (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)) ) (foreach pair varlist (if (/= (getvar (car pair)) (eval (cdr pair))) (setvar (car pair) (eval (cdr pair))) ) ) (setq *error* m:err m:err nil varlist nil )) Si elles sont accessible pour AutoCAD (dans un fichier *.mns par exemple) elle peuvent être appelées dans toute autre routine en allégeant notablement son code, par exemple : (defun C:MA_FONCTION (...) (SAVE_ENV '("cmdecho" "osmode")) ... La routine avec des appels de la fonction command et les changements de valeur de cmdecho et osmode ... (REST_ENV) (princ) ) Merci à Patrick_35 et Tramber, à plus...
Patrick_35 Posté(e) le 22 avril 2005 Posté(e) le 22 avril 2005 Ces 2 fonctions gèrent les groupes d'annulation et toutes les variables à la fois au début et à la fin d'un programmeOui, les variables d'autocad aussi qui sont redéfini entre le start et le end @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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