LElemurien Posté(e) le 28 avril 2020 Posté(e) le 28 avril 2020 Bonjour, J'essaie d'apprendre la programmation et j'aimerai avoir si possible votre aide sur un certain point. Je voudrais utiliser la fonction getkword et je pensais que si on faisait entrer dans la ligne de commande cela validait la réponse par défaut mais je dois mal l'utiliser car cela ne marche pas dans mon cas Se sera plus explicite avec un bout de code : (defun c:test001 (/ rep1 lg ac1 ac2) (initget "Avec Sans") (setq rep1 (getkword "\nLigne avec ou sans cercle ? [Avec/Sans] <Avec>: " ) ;_ Fin de getkword ) ;_ Fin de setq (setq lg (getdist "\nEntrez la longueur de la ligne (ou distance à l'écran) : " ) ;_ Fin de getdist ac1 (getvar "osmode") ac2 (getvar "3dosmode") ) ;_ Fin de setq (setvar "osmode" 0) (setvar "3dosmode" 0) (command "_ucs" "gé" "") (command "_line" '(0 0) (list lg 0) "" ) ;_ Fin de command (if (= rep1 "Avec") (progn (command "_circle" '(0 0 0) "5" "") ) ;_ Fin de progn ) ;_ Fin de if (command "_ucs" "gé" "") (setvar "osmode" ac1) (setvar "3dosmode" ac2) (princ) ) ;_ Fin de defun Dans ce bout de code si je clic sur "Avec" dans la ligne de commande j'obtiens bien mon cercle comme demandé. Par contre si je fais entrée dans la ligne de commande cela ne prend pas en compte "Avec " par défaut et ne dessine pas mon cercle. Ma question ou plutôt ce que je pensais c'était que si je validais je devais avoir "Avec" par défaut mais apparemment ce n'est pas le cas. Si quelqu'un peut me donner une piste sur mon erreur cela m'aiderai. Je ne sais pas si ma question est très clair et si j'emploie bien les bons mots mais faîtes le moi savoir si ce n'est pas le cas. Merci d'avance Bonne soirée PS : comment fait on pour insérer le code dans le message avec une fenêtre?
Luna Posté(e) le 28 avril 2020 Posté(e) le 28 avril 2020 Hey, le getkword n'est pas capable de détecter une valeur par défaut dans la chaîne de caractères servant de message. Même si du point de vue d'AutoCAD la manière de l'afficher est la même cela ne fonctionne pas. Il est cependant capable de détecter les mots clés au sein de la chaîne de caractères pour la surbrillance. Donc pour pouvoir définir une valeur par défaut il faut dans un premier temps (comme tu l'as déjà fait) ne pas empêcher l'utilisateur d'appuyer sur ENTER (correspondant au bit 0, de valeur 1). Lorsque l'utilisateur fait une validation à vide, la fonction (getkword) renvoie nil. Donc une méthode simple pour définir une réponse par défaut serait celle-ci : (initget "Avec Sans") (if (null (setq rep1 (getkword "\nLigne avec ou sans cercle ? [Avec/Sans] <Avec>: "))) (setq rep1 "Avec") ) ;;il est possible également de passer par la fonction (cond) (setq rep1 (cond ((getkword "\nLigne avec ou sans cercle ? [Avec/Sans] <Avec>: ")) ("Avec"))) Si besoin tu peux voir le site de LeeMac, qui en parle justement (c'est en anglais mais pour la programmation on n'a pas vraiment le choix). PS : dans l'éditeur de texte, tu as un petit symbole comme celui-ci <> sur la seconde ligne à gauche (après les smiley&Co !) :3 Bisous,Luna
Luna Posté(e) le 28 avril 2020 Posté(e) le 28 avril 2020 Ah et petite précision, je vois que sur la ligne (if (= rep1 "Avec") (progn (command "_circle" '(0 0 0) "5" "") ) ;_ Fin de progn ) ;_ Fin de if tu n'as pas besoin d'utiliser la fonction (progn) ici... En effet la fonction (if) possède 3 arguments (if testexpr thenexpr [elseexpr]) auquel cas, chaque expression doit être bien distincte l'une de l'autre.Par exemple (if (= rep1 "Avec") ;; Correspond à la condition [= testexpr] (command "_circle" '(0 0 0) "5" "") ;; Correspond à l'expression si VRAI [= thenexpr] (princ "\nLigne sans cercle choisie") ;; Correspond à l'expression si FAUX [= elseexpr] ) ; Donc ici pas besoin de la fonction (progn) permettant de grouper un ensemble de fonctions en une seule expression (if (= rep1 "Avec") ;; Correspond à la condition [= testexpr] (progn (command "_circle" '(0 0 0) "5" "") ;; Correspond à l'expression si VRAI [= thenexpr] (princ "\nLigne sans cercle choisie") ;; Correspond à l'expression si VRAI [= thenexpr] ) ) ; Ici, la fonction (progn) permet de grouper les fonctions (command) et (princ) en une seule expression pour quelles soient toutes deux évaluées par la fonction (if) lorsque la condition est VRAI. Si la condition est FAUSSE, il ne se passe rien. Donc pour faire clair, ici, étant donné que tu n'as qu'une seule expression à faire rentrer dans l'argument thenexpr de la fonction (if), l'utilisation de la fonction (progn) n'est pas obligatoire. Cela n'impacte en rien ton programme mais autant faire au plus simple lorsqu'on en a l'occasion :3 Bisous,Luna
LElemurien Posté(e) le 28 avril 2020 Auteur Posté(e) le 28 avril 2020 Ok parfait! Merci Luna pour toutes ces infos! Bonne soirée
(gile) Posté(e) le 28 avril 2020 Posté(e) le 28 avril 2020 Je n'ai rien contre Lee Mac (on a souvent joué ensemble lors de Challenges sur TheSwamp), mais il existe aussi des choses en français dont Introduction à AutoLISP et da-code le site de didier qui expliquent le fonctionnement de getkword et leurs auteurs sont (pour l'instant) toujours actifs ici pour un complément d'information. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
LElemurien Posté(e) le 29 avril 2020 Auteur Posté(e) le 29 avril 2020 Bonjour, et je tiens à vous dire merci à toi et Didier pour vos sites que je consulte et qui c'est vrai à l'avantage d'être en Français ce qui pour moi est d'une grande aide. Bonne journée à tous!
Luna Posté(e) le 29 avril 2020 Posté(e) le 29 avril 2020 Bonjour, Vouih en effet, j'ai souvent tendance à faire mes recherches en anglais donc le site de LeeMac ressort plus souvent. Pardon pour cet écart.. Bisous,Luna
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