didier Posté(e) le 13 septembre 2011 Posté(e) le 13 septembre 2011 Bonjour à Toutes et à Tous je suis en train d'améliorer mes anciens fichiers Lisp en leur adjoignant des cases en DCL le lisp fabrique une liste avec certains calques qui ont certaines caractéristiques précises. je souhaite, faire une DCL avec autant de boutons radio qu'il y a de calques dans la listeet dont, le label du bouton sera le nom du calque c'est assez aisé avec des ":list_box" et (start_list)mais je n'ai pas trouvé comment agir sur le label d'un bouton depuis le lisp. merci à toutes celles et à tous ceux qui viendront à ma rescousse. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Patrick_35 Posté(e) le 14 septembre 2011 Posté(e) le 14 septembre 2011 Salut Didier Je n'ai pas totocad sous la main, mais tu peux avoir un lisp qui écrit la boite de dialogue, et donc ainsi créer les boutons souhaités ainsi que leurs clés en fonction de tes calques.Le premier bouton pourrai de nommer calque1 avec son label, le second calque2, etc..Une simple boucle en fonction du nombre de calque.Le seul danger dans ce type de lisp est la taille de l'écran qui risque d'être vite très petit. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 15 septembre 2011 Auteur Posté(e) le 15 septembre 2011 Coucou oui, je suis d'accord que c'est bien comme ça qu'il faut faire,le nombre de bouton est limité, toutefois sans être connu à l'avance. donc je pensais faire par exemple six boutonssi j'en ai besoin de trois, j'injecte les noms des calques en labels des boutonset les inutilisés se verront inactivés. je réitère donc ma questioncomment injecter, depuis le lisp,l'intitulé du label du bouton ?(ce qui sera visible sur la case de dialogue) amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Patrick_35 Posté(e) le 15 septembre 2011 Posté(e) le 15 septembre 2011 je réitère donc ma questioncomment injecter, depuis le lisp,l'intitulé du label du bouton ?Ben, comme tu es d'accord que c'est le lisp qui écrit le DCL, tu as la réponse :huh: Je doit rater quelque chose. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 15 septembre 2011 Auteur Posté(e) le 15 septembre 2011 coucou merci de tes réponses, c'est gentil de prendre du temps,oui, tu rates quelque chose, et c'est sans doute dans mon explication comment, autrement dit quelle syntaxe dois-je utiliserpour que, depuis le lisp je change la valeur LABEL d'un bouton ? par exemple je mets par défaut bouton1,et qu'à l'affichage de la DCL je vois le nom du calque en face du boutonque j'ai nommé bouton1 dans mon DCL, la "key" est bouton1. j'ai essayé avec set_tile "bouton1" ""nomcalque"et rien ne se passe dans la DCL, je vois toujours écrit "bouton1" pour injecter une liste, depuis le lisp on utilise start_list blabla..comment faire pour un bouton ? amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
VDH-Bruno Posté(e) le 15 septembre 2011 Posté(e) le 15 septembre 2011 Bonjour Didier Ce que Patrick_35 suggère c’est de t’inspirer des Lisp de (gile) dans la rubrique routines lisp: Le coin des lispeurs Il ne s'agit plus ici de commandes définies en LISP mais de routines LISP utilisables dans divers programmes. Dialog : Des petites boites de dialogue (sans fichier DCL séparé) pour récupérer des données de la part de l'utilisateur . A+(Désolé j'ai pas fait de lien..) Apprendre => Prendre => Rendre
didier Posté(e) le 15 septembre 2011 Auteur Posté(e) le 15 septembre 2011 coucou merci je vais regarder de ce côtéil est vrai que (gile)est devenu LA référence. moi c'est plutôt, l'art effet rance amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 15 septembre 2011 Posté(e) le 15 septembre 2011 Salut Didier, Dans le fichier Dialog.lsp (lien donné par Bruno), tu trouveras une routine appelée OptionBox qui fait ce que tu demandes. Par exemple, l'expression :(OptionBox "Calques" "Choisissez un calque: " '( "0" . "0") ("1" . "Calque1") ("2" . "Calque2")) nil) Affiche une boite de dialogue dont le titre est : "Calques", le message : "Choisissez un calque :" (aucun message si cet argument est "" ou nil) avec 3 boutons radios dont les labels sont : "0", "Calque1" et "Calque2". La valeur retournée sera, respectivement "0", "1" ou "2" (ou nil si l'utilisateur fait "Annuler"). Cette même routine affichera des cases à cocher si le dernier argument n'est pas nil (T) et autorisera donc des choix multiples. Cette méthode consistant à écrire un fichier DCL temporaire depuis le LISP permet de créer des boites de dialogue en fonction de paramètres récupérés par le LISP comme dans la routine SSD (dans Special_Selections.lsp sur la même page) où la boite de dialogue est crée en fonction des propriétés dynamiques du bloc sélectionné. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 19 septembre 2011 Posté(e) le 19 septembre 2011 Salut didier J'ai enfin pris le temps pour te donner un exemple;========================================================================= ; Boite de dialogue ;========================================================================= (defun bd(titre bts / bou bouton btn dcl fil res tmp txt val) (defun bouton (label cle) (if label (write-line (strcat " :button {label = \"" label "\"; key = \"bt" cle "\"; width = 30;}") fil) (write-line (strcat " :button {label = \"\"; key = \"bt" cle "\"; width = 30;}") fil) ) ) (setq tmp (vl-filename-mktemp "rap" nil ".dcl") fil (open tmp "w") ) (foreach txt '( "tst : dialog {" " key = titre;" " is_cancel = true;" " fixed_width = true;" " alignment = centered;" " spacer;" ) (write-line txt fil) ) (setq bou 0) (while (nth bou bts) (write-line " :row {" fil) (bouton (nth bou bts) (itoa bou)) (bouton (nth (1+ bou) bts) (itoa (1+ bou))) (bouton (nth (+ 2 bou) bts) (itoa (+ 2 bou))) (write-line " }" fil) (setq bou (+ bou 3)) ) (foreach txt '( " spacer;" " cancel_button;" "}" ) (write-line txt fil) ) (close fil) (setq dcl (load_dialog tmp)) (new_dialog "tst" dcl "") (set_tile "titre" titre) (mode_tile "accept" 1) (setq bou 0) (repeat (length bts) (action_tile (strcat "bt" (itoa bou)) (strcat "(setq val " (itoa bou) ")(done_dialog 1)")) (setq bou (1+ bou)) ) (action_tile "cancel" "(done_dialog 0)") (setq res (start_dialog)) (if (eq res 1) (alert (strcat "Le calque choisis est " (nth val bts))) ) (unload_dialog dcl) (vl-file-delete tmp) (princ) ) Pour tester (bd "Un Titre" '("Calque1" "Calque2" "Calque3" "Calque4" "Calque5" "Calque6" "Calque7")) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 19 septembre 2011 Auteur Posté(e) le 19 septembre 2011 coucou je te remercie grandementje manque de temps pour décortiquer tout çamais je vous tiens au courant j'ai travaillé dessus ce week-end, et je suis sur le point de réussirtoutefois je me content du maximum, alors !! amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 19 septembre 2011 Auteur Posté(e) le 19 septembre 2011 Coucou je ne suis pas allé manger, il aimer le lisp n'est-ce pas ? cette façon de faire des DCL dans des fichiers temporaires est vraiment puissanteje vous remercie tous grandement de m'avoir orienté vers cette solution. initiée par Marseille (gile) formalisée par la Bretagne (Patrick_35)elle est pas belle la vie ? encore merci Éternel débutant... Mon site perso : Programmer dans AutoCAD
Patrick_35 Posté(e) le 19 septembre 2011 Posté(e) le 19 septembre 2011 cette façon de faire des DCL dans des fichiers temporaires est vraiment puissanteOui, et c'est aussi une façon de de faire qui permet de ne plus joindre de dcl avec un lisp. B) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 19 septembre 2011 Auteur Posté(e) le 19 septembre 2011 coucou et ce n'est pas un mince* avantage !plus d'erreurs de chemin et autres joyeusetés. encore merci Amicalement * j'ai trouvé rigolo d'écrire "mince" en Gras (hihihi) Éternel débutant... Mon site perso : Programmer dans 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