VDH-Bruno Posté(e) le 16 juin 2015 Posté(e) le 16 juin 2015 Bonjour DenisH, Je me tiens un peu en retrait de la discussion car en lisp j'ai une approche très différente, qui ne ferais que ajouter de la confusion à la discussion. Néanmoins, si tu as un peu de curiosité dans ta fonction de "Configuration" je t'inviterai à jeter un œil sur cette discussion,ou nous avions à titre d'exemple définie une fonction pour la saisie de mot clé avec une valeur par défaut:(defun question (msg rep) (initget "Oui Non") (cond ((getkword (strcat msg " [Oui/Non] <" rep ">: "))) (rep) ) ) Avec l'expression suivante: (vlax-ldata-get "DenisH" "EtiqPTRL_XY" "Oui") rappelé hier, on peut aisément créer/modifier la clé dans une même ligne de code:(vlax-ldata-put "DenisH" "EtiqPTRL_XY" (question "\nÉcrire l'X et l'Y " (vlax-ldata-get "DenisH" "EtiqPTRL_XY" "Oui")) ) A+ Edit: Je viens de voir la réponse de _Zebulon, le même raisonnement peut être transposé pour EtiqCalq à toi de voir ce qui te va le mieux. Apprendre => Prendre => Rendre
DenisHen Posté(e) le 16 juin 2015 Auteur Posté(e) le 16 juin 2015 Bonjour VDH-Bruno, Et merci de me répondre... J'ai bien suivi ton raccourci vers la discution, mais j'avoue ne pas trop comprendre le "(defun question" à l'intérieur de "(defun c:cscc". J'ai créé un LiSP avec les prog trouvés sur cette page... Je "m'amuse" à faire des tests...(defun c:cscc (/ question) (defun question (msg rep) (initget "Oui Non") (getkword (strcat msg " [Oui/Non] <" rep ">: "))) (alert (strcat "Configuration modifiée: " (if (= "Oui" (question "Voulez-vous rapprocher les calques ?" "Oui")) (progn (command "_-LAYER" "_RECONCILE" "*" "") "\n -> Calques rapprochés") "\n -> Calques non rapprochés" ) ;_ Fin de if (if (= "Oui" (question "Voulez-vous purger votre dessin ?" "Oui")) (progn (command "_-PURGE" "_A" "*" "_N") "\n -> Dessin purgé") "\n -> Dessin non purgé" ) ;_ Fin de if (if (= "Oui" (question "Voulez-vous sauvegarder votre dessin ?" "Oui")) (progn (command "_QSAVE") "\n -> Dessin sauvegardé") "\n -> Dessin non sauvegardé" ) ;_ Fin de if ) ;_ Fin de strcat ) ;_ Fin de alert ) ;_ Fin de defun Intéressant, c'est hyper condensé et pas facile à lire à mon niveau... Mais j'ai inclu un "(getstring" dans mon LiSP, je ne sais pas me dépatouiller pour l'intégrer dans le "(defun question"... Je pense que ce n'est pas possible. En tous cas à mon niveau... A moins de faire un "(defun questionON" pour l'"(initget "Oui" "Non" et un "(defun questionStr" sans "(initget" pour le "(getstring". Et merci encore, Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 16 juin 2015 Auteur Posté(e) le 16 juin 2015 Je viens de faire ça :(defun c:TestEtiq (/ question) (defun questionON (msg rep) (initget "Oui Non") (getkword (strcat msg " [Oui/Non] <" rep ">: "))) (defun questionStr (msg rep) (getstring T (strcat msg "<" rep ">: "))) (alert (strcat "Configuration modifiée : " (if (= "Oui" (questionON "Voulez-vous indiquer l'X et l'Y dans l'étiquette ? " (vlax-ldata-get "DenisH" "EtiqPTRL_XY" "Oui") ) ;_ Fin de questionON ) ;_ Fin de = "\n -> Écrire les X et Y" "\n -> Ne pas écrire les X et Y," ) ;_ Fin de if (if (= "Oui" (questionON "Voulez-vous indiquer le Z dans l'étiquette ? " (vlax-ldata-get "DenisH" "EtiqPTRL_Z" "Oui") ) ;_ Fin de questionON ) ;_ Fin de = "\n -> Écrire le Z," "\n -> Ne pas écrire le Z," ) ;_ Fin de if (if (= "Oui" (questionStr "Dans quel calque voulez-vous placer l'étiquette ? " (vlax-ldata-get "DenisH" "EtiqPTRL_Calq" "_ETIQ") ) ;_ Fin de questionStr ) ;_ Fin de = (progn "\n -> Écrire l'étiquette dans le calque " (vlax-ldata-get "DenisH" "EtiqPTRL_Calq" "_ETIQ") ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de strcat ) ;_ Fin de alert ) ;_ Fin de defun Mais forcément, le "(defun questionStr" ne fonctionne pas. Normal, "Oui" n'a rien a voir dans l'histoire... Je pense y mettre plustôt un "(cond". Ou alors jongler avec (setq Temp (getstring (strcat "Quelle 'extention' du calque utiliser <" EtiqCalq "> ? ") ) ;_ Fin de getstring ) ;_ Fin de setq (if (/= Temp "") (setq EtiqCalq Temp) ) ;_ Fin de ifJe ne sais pas encore quelle solution choisir... Pour l'instant, j'ai décidé de me noyer dans un verre d'eau... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
VDH-Bruno Posté(e) le 16 juin 2015 Posté(e) le 16 juin 2015 Re, Pour EtiqCalq peux-tu décrire exactement les saisies attendu/possible, je ne suis pas sur de tout comprendre, merci A+ Apprendre => Prendre => Rendre
DenisHen Posté(e) le 16 juin 2015 Auteur Posté(e) le 16 juin 2015 Merci VDH-Bruno de m'aider. Voilà, pour un certain client, je lance la commande comme ça :^C^C(c:Rens_PTRL "") et pour les autres :^C^C(c:Rens_PTRL "DET_RES_CHA") Car mon "(defun" est :(defun c:Rens_PTRL (Calq / Txt_Alti.......) En fait, dans le premier cas, j'aurais le nom du calque "" + EtiqCalq ("R-AS-coord") qui donne le calque "R-AS-coord". Dans les autres cas, j'aurais le nom du calque "DET_RES_CHA" + EtiqCalq ("_ETIQ") qui donne "DET_RES_CHA_ETIQ" J'ai fais une palette de commande avec :Etiq.Réseaux => ^C^C(c:Rens_PTRL "")Etiq.Chaleur => ^C^C(c:Rens_PTRL "DET_RES_CHA")Etiq.ErDF => ^C^C(c:Rens_PTRL "DET_RES_ELEC")Etiq.Gaz => ^C^C(c:Rens_PTRL "DET_RES_GAZ").... De cette façon, j'enregistre la Config dans le dessin et je n'ai plus à y retoucher... Voilà pourquoi j'ai un :(setq CalqCourant (strcat Calq (vlax-ldata-get "DenisH" "EtiqPTRL_Calq"))) J'espère être clair. J'ai déjà commencé à changer mon LiSP mais je n'ose pas le poster, de crainte que nos posts se croisent et que l'on n'y comprenne plus rien... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
VDH-Bruno Posté(e) le 17 juin 2015 Posté(e) le 17 juin 2015 Bonjour Denis, Mais forcément, le "(defun questionStr" ne fonctionne pas. Normal, "Oui" n'a rien a voir dans l'histoire... Je pense y mettre plustôt un "(cond". Ou alors jongler avec (setq Temp (getstring (strcat "Quelle 'extention' du calque utiliser <" EtiqCalq "> ? ") ) ;_ Fin de getstring ) ;_ Fin de setq (if (/= Temp "") (setq EtiqCalq Temp) ) ;_ Fin de if Je ne sais pas encore quelle solution choisir... Pour l'instant, j'ai décidé de me noyer dans un verre d'eau... Denis... Dans le cas du getstring et la clé "EtiqPTRL_Calq", à la réflexion le mieux est d'utiliser une variable provisoire comme suggéré par _zebulon, Une proposition de code à décortiquer et tester: (defun c:DHConfEtiqPTRL (/ question tmp) ;; Fonction auxiliaire (defun question (msg rep) (initget "Oui Non") (cond ((getkword (strcat msg " [Oui/Non] <" rep ">: "))) (rep) ) ) ;; Initialisation/modification des datas (vlax-ldata-put "DenisH" "EtiqPTRL_XY" (question "\nVoulez-vous indiquer l'X et l'Y dans l'étiquette" (vlax-ldata-get "DenisH" "EtiqPTRL_XY" "Oui") ) ) (vlax-ldata-put "DenisH" "EtiqPTRL_Z" (question "\nVoulez-vous indiquer le Z dans l'étiquette" (vlax-ldata-get "DenisH" "EtiqPTRL_Z" "Oui") ) ) (setq tmp (getstring (strcat "\nDans quel calque voulez-vous placer l'étiquette <" (vlax-ldata-get "DenisH" "EtiqPTRL_Calq" (vlax-ldata-put "DenisH" "EtiqPTRL_Calq" "_ETIQ")) ">: " ) ) ) (if (/= "" tmp) (vlax-ldata-put "DenisH" "EtiqPTRL_Calq" tmp) ) ;; Affichage (alert (strcat "Configuration actuelle : \n\tÉtiquette XY \t= " (vlax-ldata-get "DenisH" "EtiqPTRL_XY") "\n\tÉtiquette Z \t= " (vlax-ldata-get "DenisH" "EtiqPTRL_Z") "\n\tEtiqPTRL_Calq \t= " (vlax-ldata-get "DenisH" "EtiqPTRL_Calq") ) ) ;; Quitte tranquillement (princ) ) A+ Apprendre => Prendre => Rendre
zebulon_ Posté(e) le 17 juin 2015 Posté(e) le 17 juin 2015 Bonjour, Dans le cas du getstring et la clé "EtiqPTRL_Calq", à la réflexion le mieux est d'utiliser une variable provisoire comme suggéré par _zebulonparce que getstring ne renvoie pas nil mais "" après un <┘, donc on a du mal à utiliser directement des fonctions booléennes comme ici : (cond ((getkword (strcat msg " [Oui/Non] <" rep ">: "))) (rep) ) AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
VDH-Bruno Posté(e) le 17 juin 2015 Posté(e) le 17 juin 2015 Bonjour, parce que getstring ne renvoie pas nil mais "" après un <┘, donc on a du mal à utiliser directement des fonctions booléennes comme ici : (cond ((getkword (strcat msg " [Oui/Non] <" rep ">: "))) (rep) ) AmicalementVincentC'est tout à fait ça, je n'aurais pas mieux dit.A+ Apprendre => Prendre => Rendre
DenisHen Posté(e) le 17 juin 2015 Auteur Posté(e) le 17 juin 2015 Bonjour à tous, et merci, VDH-Bruno, ça fonctionne nikel, j'ai juste rajouté un T après le "(getstring" pour autoriser les espaces dans la réponse (astuce que je connais depuis deux jours grâce à ce forum), merci, Vincent, c'était bien là mon problème, je ne l'avais pas vu comme ça, merci... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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