-Olivier- Posté(e) le 21 avril 2012 Posté(e) le 21 avril 2012 Bonjour à toutes et à tous, Je remercie tout d'abord tous ceux qui annime cette rubrique qui m'a permet de découvrir les bases du lisp, notamment (gile), Patrick_35, Tramber et VDH-Bruno (j'en oublie désolé). J'ai fait il y a quelques temps ce petit lisp basic. ;;;COPIE LES OBJETS AVEC UNE DISTANCE PAR RAPPORT AU DERNIER POINT DE REFERENCE(defun c:cdernier (/ ss1 ang dist0 dist1 pt1 pt2 echo accro) (princ "\Copie depuis dernier point :\n") (princ) (setq echo (getvar 'cmdecho) accro (getvar 'osmode)) (setq ss1 (ssget)) (setq ang (getangle "\n Entrez l'angle: ")) (while (setq dist1 (getdist "\n Entrez la distance: ")) (if (= dist0 nil) (setq dist0 '0)) (setq dist1 (+ dist1 dist0) pt1 '(0 0 0) pt2 (polar pt1 ang dist1)) (command "._copy" ss1 "" pt1 pt2) (setq dist0 (+ dist1 '0)) ) (setvar "osmode" accro) (setvar "cmdecho" echo) (princ)) Il fonctionne parfaitemenent mais il me manque la mise en place d'une gestion des erreurs en cas d'utilisation de la touche échap ou de platage. J'ai réussi jusque là à me débrouiller avec l'aide et internet mais cette fois je ne comprend pas le fonctionnement de cette fonction. Si quelqu'un pouvais réexpliquer à la tête de bois que je suis. :unsure:.. En vous remerciant d'avance.
bryce Posté(e) le 21 avril 2012 Posté(e) le 21 avril 2012 Bonjour, En cas d'erreur ou d'interruption lors de l'exécution, l'interpréteur LISP appelle automatiquement la fonction *error*, en lui passant comme argument un message d'erreur.La fonction *error* par défaut ne fait a priori pas grand chose, à part afficher dans la ligne de commande le message d'erreur reçu en argument. Pour mettre en place ta propre gestion d'erreurs, il te suffit donc de redéfinir la fonction *error*.Voici un exemple basique: (defun *error* (errmsg) (setvar "osmode" accro) (setvar "cmdecho" echo) (if errmsg (print errmsg) ) (princ) ) Mais il faut aussi penser à restaurer la fonction *error* par défaut une fois l'exécution de ton programme terminée, tout comme tu restaures les variables OSMODE et CMDECHO.Pour cela, le plus simple est de déclarer dans ton programme une variable locale *error*, et de redéfinir la fonction *error* localement (à l'intérieur même de ton programme).Ainsi elle remplacera la fonction *error* par défaut durant l'exécution de ton programme, puis sera automatiquement détruite.Par exemple: (defun c:cdernier (/ *error* ss1 ang dist0 dist1 pt1 pt2 echo accro) (defun *error* (errmsg) (setvar "osmode" accro) (setvar "cmdecho" echo) (princ errmsg) ) (princ "\Copie depuis dernier point :\n") (princ) (setq echo (getvar 'cmdecho) accro (getvar 'osmode)) ... ) 1 Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
-Olivier- Posté(e) le 21 avril 2012 Auteur Posté(e) le 21 avril 2012 Merci Bryce d'avoir éclaircie le problème B) Au cas ou cette petite commande basique intéresserait quelqu'un je la remet au complet. ;;;COPIE LES OBJETS AVEC UNE DISTANCE PAR RAPPORT AU DERNIER POINT DE REFERENCE(defun c:cdernier (/ *error* ss1 ang dist0 dist1 pt1 pt2 accro echo) (defun *error* (errmsg) (setvar "osmode" accro) (setvar "cmdecho" echo) (princ errmsg) ) (princ "\ Copie depuis dernier point :\n") (princ) (setq echo (getvar 'cmdecho) accro (getvar 'osmode)) (setq ss1 (ssget)) (setq ang (getangle "\n Entrez l'angle: ")) (setvar "cmdecho" 0) (setvar "osmode" 0) (while (setq dist1 (getdist "\n Entrez la distance: ")) (if (= dist0 nil) (setq dist0 '0)) (setq dist1 (+ dist1 dist0) pt1 '(0 0 0) pt2 (polar pt1 ang dist1)) (command "._copy" ss1 "" pt1 pt2) (setq dist0 (+ dist1 '0)) ) (setvar "osmode" accro) (setvar "cmdecho" echo) (princ)) Cette commande permet de faire une copie d'objets en entrant une direction (par 2 points ou un angle) puis en entrant les distances entre les copies (le cumul des distances par rapports aux objets originaux ce fait automatiquement. A+
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