pierrevig Posté(e) le 18 mars 2007 Posté(e) le 18 mars 2007 Bonjour,je suis un gros débutant en lisp et en regardant un peu partout sur le web, j'ai fait un petit prog qui me dessine des portes simple (un trait et un arc).Le principe est de définir la largeur de la porte en cliquant 2 pts et de montrer le sens d'ouverture par un point.çà fonctionne nickel, (content), mais vu que je suis un gros débutant, je souhaiterai savoir si, il n'y a pas de grosses boulettes ou un moyen de faire plus simple (surement)...Merci à vous tous, Pierre (defun cporte () ; RELEVE DES PTS ET TRANSFORMATION 2D (setq som (getpoint "\n1ere angle de la porte: ")) (setq pt1 (getpoint som "\n2eme angle de la porte: ")) (setq oldosmode (getvar "osmode")) (setvar "osmode" 0) (setq pt2 (getpoint som "\ncoté d'ouverture de la porte: ")) (setq som1 (car som) som2 (cadr som)) (setq som (list som1 som2 0)) (setq pt11 (car pt1) pt12 (cadr pt1)) (setq pt1 (list pt11 pt12 0)) ; calcul de l'angle entre pt1 et pt2 (if (not (member "geomcal.arx" (arx))) (arxload "geomcal") ) (setq langle (cal "ang(som,pt1,pt2)")) ; si la position de pt2 donne un angle > à 180 etc... (if (< langle 180) (setq anglA 0.877) (setq anglB -0.435) ) (if (> langle 180) (setq anglA -0.877) (setq anglB 0.435) ) ; (setq angl1 (angle som pt1)) (setq l (distance som pt1)) (setq ptf (polar som (angle pt1 pt2)l)) (setq angle50 (polar som (+ angl1 anglA)l)) (setq angle20 (polar som (+ angl1 anglB)l)) ; dessine le trait et l'arc (command "_line" som angle50"") (command "_arc" pt1 angle20 angle50) (setvar "osmode" oldosmode) (princ))[Edité le 18/3/2007 par pierrevig] [Edité le 18/3/2007 par pierrevig]
stephan35 Posté(e) le 19 mars 2007 Posté(e) le 19 mars 2007 On est tous passé par là ! Faire bien ? plaire à qui ? Le principale, comme me l'avait écrit un membre de ce site, c'est d'y arriver, la façon et les moyens importe peu ! Lisp Vlisp ? Idem ! Il faut pouvoir se relire ! Ton programme est simple ! mais fonctionnel ! Rajoute les noms de variable interne dans la définition de fontion (place mémoire) (defun cporte ( / som pt1 pt2 pt11 pt12 langle anglA anglB angl1 l ptf angle20 angle 50 som1) ; RELEVE DES PTS ET TRANSFORMATION 2D (setq som (getpoint "\n1ere angle de la porte: ")) (setq pt1 (getpoint som "\n2eme angle de la porte: ")) (setq oldosmode (getvar "osmode")) (setvar "osmode" 0) (setq pt2 (getpoint som "\ncoté d'ouverture de la porte: ")) (setq som1 (car som) som2 (cadr som)) (setq som (list som1 som2 0)) (setq pt11 (car pt1) pt12 (cadr pt1)) (setq pt1 (list pt11 pt12 0)) ; calcul de l'angle entre pt1 et pt2 (if (not (member "geomcal.arx" (arx))) (arxload "geomcal") ) (setq langle (cal "ang(som,pt1,pt2)")) ; si la position de pt2 donne un angle > à 180 etc... (if (< langle 180) (setq anglA 0.877) (setq anglB -0.435) ) (if (> langle 180) (setq anglA -0.877) (setq anglB 0.435) ) ; (setq angl1 (angle som pt1)) (setq l (distance som pt1)) (setq ptf (polar som (angle pt1 pt2)l)) (setq angle50 (polar som (+ angl1 anglA)l)) (setq angle20 (polar som (+ angl1 anglB)l)) ; dessine le trait et l'arc (command "_line" som angle50"") (command "_arc" pt1 angle20 angle50) (setvar "osmode" oldosmode) (princ) ) Rajout peu-être un ou deux commentaires si tu ressens le besoin (pour plus tard !) rien à redire ! A+
pierrevig Posté(e) le 22 mars 2007 Auteur Posté(e) le 22 mars 2007 merci, pour ton commentaire stephan35. et merci aussi pour l'info (place memoire des variables) que je ne connaissais pas l'utilité. @+
bonuscad Posté(e) le 22 mars 2007 Posté(e) le 22 mars 2007 Il est très bien ce petit prog pour un débutant ;) Cependant il serait bien aussi de tenir compte des erreurs de saisies de l'utilisateur. Pour ceci tu as la fonction (initget) qui répond très bien à ce besoin. (voir l'aide pour le bit de controle) Donc ceci par exemple serait mieux(initget 1)(setq som (getpoint "\n1ere angle de la porte: "))(initget 1)(setq pt1 (getpoint som "\n2eme angle de la porte: "));(setq oldosmode (getvar "osmode"));(setvar "osmode" 0)(initget 33)(setq pt2 (getpoint som "\ncoté d'ouverture de la porte: ")) J'ai mis aussi (setvar) en remarque, car tu n'as pas fait de gestion d'erreur et comme tu ne modifie qu'OSMODE, tu peux à la limite te passer de la gestion d'erreur (ESC en cours d'utilisation) en faisant tes commande comme ceci:; dessine le trait et l'arc(command "_.line" "_none" som "_none" angle50 "")(command "_.arc" "_none" pt1 "_none" angle20 "_none" angle50);(setvar "osmode" oldosmode) Dans ce cas la variable ne sera pas changé même en cas d'abandon de la routine.Mais tu peux opter aussi pour la gestion d'erreur, c'est une bonne habitude. PS: note aussi l'usage du "." devant la commande, cela t'assure que tu utilise bien la commande native est non une commande redéfinie (au cas où) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pierrevig Posté(e) le 24 mars 2007 Auteur Posté(e) le 24 mars 2007 Merci Bonuscad,je modifie tous çà. @+
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