Bred Posté(e) le 4 juillet 2006 Auteur Posté(e) le 4 juillet 2006 Merci à vous deux ... mais quelque chose m'échappe ...Je comprends tout à fait que l'on puisse utiliser les _undo pour revenir à l'état initial en cas d'erreur ... mais si le lisp fonctionne, et que je veux automatiser aussi la remise en état général de l'environnement, je ne peux pas passer par _undo... non ??? (ou je ne suis pas au courant de toutes les options de _undo... il y aurait un "filtre" ???) ... ... quoi qu'il en soit, comme la remise en état initial de mon SCU me posait problème, j'ai fait un petit retour en arrière pour le gérer comme je le faisais precedement, en tenant compte des remarques que vous m'avez faits : ; Enregistrement du environnement Actif (SCU / Calque) (setq list_env_actif (list (getvar "ucsorg") (getvar "ucsxdir") (getvar "ucsydir") (getvar "ucsicon") (getvar "clayer"))) (command "_ucs" "_w" "_ucs" "_3" "_non" '(0 0 0) "_non" (nth 1 list_env_actif) "_non" (nth 2 list_env_actif) "_ucs" "_o" (trans (nth 0 list_env_actif) 0 1)) (setvar "ucsicon" (nth 3 list_env_actif)) (setvar "clayer" (nth 4 list_env_actif))) ... ça à l'air de fonctionner ...j'étais parti au début sur un test pour savoir si le SCU était parralèle au SCG et si l'origine coincidait, mais la manip écrit ci-dessus répond à tous les cas ... (je crois ... jusqu'à maintenant en tout cas...) ... bon, ben il faut que je me replonge dans les _undo, et ai_setCmdEcho ... ... si vous avez une autre manière de gérér la remise initial du SCU, je suis preneur... (la manip de l'enregistrement du SCU actif à déjà été proposé par (gile) ... y'aurait bien un truc en vl- ... non ???... Patrick ???.... bon...) ...merci en tout cas de passer autant de temps sur mes problèmes !!! Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Bred Posté(e) le 4 juillet 2006 Auteur Posté(e) le 4 juillet 2006 Allez... je continu ...Je suis allez regarder les posts que vous me conseillez.Je ne comprends pas pourquoi l'utilisation de _undo avec une "marque" et un "retour" à la marque est moins bien que "Début" ou "fin" ... de plus le fait d'utiliser les marques évite le problème de la variable undoctl... non ???... Ce qui m'a amener à réfléchir sur l'affichage du "undo", vu que l'on change "cmdecho" après... donc ce que je fait c'est que dans la routine de gestion d'erreur, je remet (mapcar 'eval SavedSysVarLst) qui remettra toutes les valeurs des variables à l'état initial... (je sais, le fait de faire _undo le fait aussi... je double... c'est grave ???) ... donc voilà ce que ça donne : ;;; INTRODUCTION du PROGRAMME - Redéfinition de *error* (defun INTRO_PRG_ERR () (SAVE&SET_VAR "cmdecho" 0) (command "_.undo" "m") ;;;début "undo" (setq Sauv_EXerror *error*) ; enregistrement *error* autocad ; Traitements des variables habituels (à voir/à compléter/modifier) ; (SAVE&SET_VAR "orthomode" 0) ; Enregistrement du environnement Actif (SCU / Calque) (setq list_env_actif (list (getvar "ucsorg") (getvar "ucsxdir") (getvar "ucsydir") (getvar "ucsicon") (getvar "clayer"))) ; Gestion des Erreur remplaçant celle d'Autocad (setq *error* REDEF_ERROR) ) ;;; ROUTINE de GESTION des ERREURS remplaçant celle d'Autocad (defun REDEF_ERROR (msg) (if (or (= msg "Fonction annulée") (= msg "Function cancelled") (= msg "quitter / sortir abandon") (= msg "quit / exit abort")) (princ) (princ (strcat "\nErreur: " msg)) ) (mapcar 'eval SavedSysVarLst) (command "_.undo" "r") ) ;;; ROUTINE ENREGISTREMENT VARIABLE+MODIF VARIABLE ((gile) cadXP) (defun SAVE&SET_VAR (var val) (cond ((getvar var) (setq SavedSysVarLst (cons (list 'setvar var (getvar var)) SavedSysVarLst)) (if val (setvar var val))) ) ) ;;; FIN de PROGRAMME - ; retour *error* initial (defun END_PRG_ERR () ; Restauration des Variables modifiables enregistrer avec SAVE&SET_VAR (mapcar 'eval SavedSysVarLst) ; Restauration de l'environnement Actif enregistré (command "_ucs" "_w" "_ucs" "_3" "_non" '(0 0 0) "_non" (nth 1 list_env_actif) "_non" (nth 2 list_env_actif) "_ucs" "_o" "_non" (trans (nth 0 list_env_actif) 0 1)) (setvar "ucsicon" (nth 3 list_env_actif)) (setvar "clayer" (nth 4 list_env_actif)) (setq *error* Sauv_EXerror list_env_actif nil SavedSysVarLst nil Sauv_EXerror nil) (command "_.undo" "m") ; fin undo ) ... n'ayez pas peur de me réprimender si je fait n'importe quoi... je suis un "bidouilleur", et j'apprend beaucoup comme ça !!!... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Patrick_35 Posté(e) le 4 juillet 2006 Posté(e) le 4 juillet 2006 ... si vous avez une autre manière de gérér la remise initial du SCU, je suis preneur... (la manip de l'enregistrement du SCU actif à déjà été proposé par (gile) ... y'aurait bien un truc en vl- ... non ???... Patrick ???.... bon...) (setq Scu_Original (vla-get-activeucs (vla-get-activedocument (vlax-get-acad-object)))) ; Sauvegarde scu (vla-put-activeucs (vla-get-activedocument (vlax-get-acad-object)) Scu_Original) ; Restauration scu (command "_.undo" "r") --> (command "_.undo" "_b")(command "_.undo" "m") --> (command "_.undo" "_m") ... n'ayez pas peur de me réprimender si je fait n'importe quoi... je suis un "bidouilleur", et j'apprend beaucoup comme ça !!!... C'est en essayant que l'on apprend ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 4 juillet 2006 Auteur Posté(e) le 4 juillet 2006 Heu...merci Patrick... mais tes commandes vl ne fonctionne pas... j'ai fait une recherche sur internet, et je crois avoir compris (in english) que pour que ça fonctionne il faut avoir un SCU nommé... non ??? ... j'édite :Je confirme, après avoir tester, il faut que le SCU soit nommé... [Edité le 4/7/2006 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Patrick_35 Posté(e) le 4 juillet 2006 Posté(e) le 4 juillet 2006 Je confirme, après avoir tester, il faut que le SCU soit nommé... Je suis surpris, ça fonctionne très bien sur ma A2000 sans scu de nommé ! @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 4 juillet 2006 Auteur Posté(e) le 4 juillet 2006 J'ai ça comme erreur : (sur la console) erreur: Erreur Automation Identificateur d’objet nul ... et je ne suis plus sur le même ordinateur, sauf qu'ils ont tous les 2 2006 ... Sur le Web : http:// http://groups.google.fr/group/autodesk.autocad.customization/browse_thread/thread/d8a42ff194b663c6/3b90a8df3c9b4a2b?lnk=st&q=vla-get-activeucs&rnum=2&hl=fr#3b90a8df3c9b4a2b ... je suis nul en englais... certainement que je n'ai pas compris mais j'ai l'impression qu'ils parle du nom du SCU ... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 4 juillet 2006 Posté(e) le 4 juillet 2006 Peut-être est-ce encore une différence en Vlisp entre les versions 2000 et les suivantes, mais je confirme ce que dit Bred, il faut que le SCU courant soit nommé pour que (vla-get-activeucs (vla-get-activedocument (vlax-get-acad-object))) ne retourne pas le message d'erreur indiqué Extrait de l'aide (2007) pour ActiveUCSProperty If you try to get the active UCS value when the current UCS is unsaved, an error will occur. It is recommended that you confirm that the value of the UCSNAME system variable is not empty before you get the active UCS value. Alternatively, you can add a new UCS object and set it to active before getting the active UCS value. Quant au lien que tu donnes, il me semble avoir compris qu'il s'agit de l'utilisation de matrices pour faire quelque chose d'équivalent à la fonction TRANS (mais mon anglais est à peine moins mauvais que mes connaissances en calcul matriciel). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 4 juillet 2006 Posté(e) le 4 juillet 2006 Oui, peut-être encore une différence :( D'après ce que je peux lire, il ne faut pas que la variable UCSNAME soit vide. Donc, il ne reste plus qu'à la changer @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 4 juillet 2006 Auteur Posté(e) le 4 juillet 2006 ... bon ... ben je vais rester à mon traitement du SCU avec des (command) pour l'instant ... Par contre je chercher, je cherche, et je ne trouve ni dans l'aide, ni sur internet une manière de répondre à l'un de mes (ultra-nombreuse) question : - Est-il possible de faire une gestion d'erreur incluant un "malfonctionnement" du lisp... c'est à dire: en prenant l'exemple precedement cité, lorsque j'ai une action hors-affichage et qu'il me la refuse (quelquefois), j'ai le lisp qui continue quand même à défiler j'usqu'à la fin, en écrivant des " "comande" commande inconnu - appuyer sur F1..." ... j'aurais aimé qu'il revienne à mon "_undo", au lieu de faire n'importe quoi et de le laisser !!!... ... (gile) : concernant le lien internet que je donne, le sujet est en haut de page en fait ... [Edité le 4/7/2006 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 4 juillet 2006 Posté(e) le 4 juillet 2006 D'après ce que je peux lire, il ne faut pas que la variable UCSNAME soit vide. Donc, il ne reste plus qu'à la changer Ce qui équivaut à nommer le SCU courant, en vlisp : (if (= "" (getvar "UCSNAME")) (setq scu_init (vla-add (vla-get-UserCoordinateSystems (vla-get-ActiveDocument (vlax-get-acad-object)) ) (vlax-3d-point (trans '(0 0 0) 1 0)) (vlax-3d-point (trans '(1 0 0) 1 0)) (vlax-3d-point (trans '(0 1 0) 1 0)) "SCU_init" ) ) (setq scu_init (vla-get-ActiveUCS (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 4 juillet 2006 Auteur Posté(e) le 4 juillet 2006 ... "dacodac" (gile) .... et pour suprimer le "SCU_init" en vl- ??? Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 4 juillet 2006 Posté(e) le 4 juillet 2006 Tout simplement : (vla-delete scu_init) Attention - scu_init = le nom de la variable, pas : "scu_init" le nom du SCU - le SCU ne pas être actif sinon, impossible de le supprimer. [Edité le 4/7/2006 par (gile)] 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