x_all Posté(e) le 22 août 2013 Posté(e) le 22 août 2013 bonjour je suis en train de faire un code pour calculer des fils d'eau sur une polyligne suivant une pente. au lancement de la fonction j'initialise l'altimétrie de départ à 0 ou une valeur saisie au clavierjusque là, ça va...mais régulièrement, je teste plusieurs trajet avec la même alti de départ, et c'est un peu pénible de devoir à chaque fois la retaper. Les variables globale devrai pouvoir me sortir de cet embarras. Mais comment tester si c'est la 1ere fois que je lance le programme et que la variable n'existe pas et que je dois donc l'initialiser ou bien que cette variable est présente dans le dessin et donc pouvoir la réutiliser ? merci quelques trucs sur autocad
VDH-Bruno Posté(e) le 23 août 2013 Posté(e) le 23 août 2013 Bonsoir, Mais comment tester si c'est la 1ere fois que je lance le programme et que la variable n'existe pas et que je dois donc l'initialiser ou bien que cette variable est présente dans le dessin et donc pouvoir la réutiliser ? Pour le principe, (à placer au début de ton programme) (or *MaVariableGlobal* (setq *MaVariableGlobal* (getreal "\nMa valeur à saisir: "))) A+ Apprendre => Prendre => Rendre
x_all Posté(e) le 23 août 2013 Auteur Posté(e) le 23 août 2013 cool :) j'étais en train de regarder du coté de la gestion d'erreur, mais je me doutais qu'il devait y avoir plus simple.. merci quelques trucs sur autocad
(gile) Posté(e) le 23 août 2013 Posté(e) le 23 août 2013 Salut, Certains trouvent, peut-être à juste raison, la syntaxe avec (or ...) peu explicite.Tu peux préférer l'utilisation de (if (not ...)) : si la variable n'est pas assignée (elle est nil), alors on invite l'utilisateur à entrer une valeur :(if (not *MaVariableGlobal*) (setq *MaVariableGlobal* (getreal "\nMa valeur à saisir: ")) )ou, encore plus explicite :(if (not (boundp *MaVariableGlobal*)) (setq *MaVariableGlobal* (getreal "\nMa valeur à saisir: ")) ) Dans tous les cas précédents, si l'utilisateur n'entre pas de valeur (en faisant enter par exemple) la routine va continuer avec *MaVariableGlobal* à nil et génèrera une erreur quand le code essayera d'utiliser cette valeur.Une méthode plus sure est donc de forcer l'utilisateur à entrer une valeur avec while par exemple (seul un Echap permet de sortir du while sans entrer de valeur et interrompt l'exécution de la routine). Ceci permet aussi de tester le type de valeur de *MaVariableGlobal* si elle est déjà assignée.(while (not (numberp *MaVariableGlobal*)) (setq *MaVariableGlobal* (getreal "\nMa valeur à saisir: ")) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 23 août 2013 Posté(e) le 23 août 2013 Bonjour, Certains trouvent, peut-être à juste raison, la syntaxe avec (or ...) peu explicite.C’est vrai , la ligne de code aurait mérité une ou deux petites lignes d’explications, il était tôt/tard et j’étais pressé de finir cette journée. Sinon en variante possible au while un appel à initget et le code de bit qui va bien (réglé sur 1 pour éviter les saisie null)(cond ((numberp *MaVariableGlobal*)) (T (initget 1) (setq *MaVariableGlobal* (getreal "\nMa valeur à saisir: "))) ) A+ Apprendre => Prendre => Rendre
x_all Posté(e) le 23 août 2013 Auteur Posté(e) le 23 août 2013 ^^c'est pas du luxe d'être super explicite... je met pour le 1er fois un pied dans le monde merveilleux de la programmation, grace à la lecture attentive de ton introduction à Autolispje tien à te féliciter pour la rédaction de ce manuel d'initiation qui reste simple sans être simpliste et néanmoins suffisamment complet et détaillé pour m'apporter enfin de vrai bases. Pour m'être essayer parfois à cet exercice, je sais que c'est pas facile d'expliquer aussi bien des concepts qui nous paraissent évidents. quelques trucs sur 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