Aller au contenu

Cmdecho et undo


gile

Messages recommandés

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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 !

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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)

)

Lien vers le commentaire
Partager sur d’autres sites

: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

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

Ces 2 fonctions gèrent les groupes d'annulation et toutes les variables à la fois au début et à la fin d'un programme

Oui, les variables d'autocad aussi qui sont redéfini entre le start et le end

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité