Aller au contenu

MA gestion d\'erreur... pour avis


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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

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

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

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é