Aller au contenu

[RÉSOLU] comment utiliser la fonction getkword


Messages recommandés

Posté(e)

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?

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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!

Posté(e)

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

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é