steelbe Posté(e) le 17 janvier 2011 Posté(e) le 17 janvier 2011 Bonjour à tous J'ai crée une boite de dialogue avec un boxed_ration_column qui comporte deux ration_buttonset six edit_box. Je souhaite choisir entre dessiner un élément sur mon coté droit ou cote gauche. Les six edit_box sont utilisés dans les deux cas.La seul différence est que si je selectionne le ration_button: (droit) Pi sera utilisé dans le code sens de depart de la pline(gauche) 0 sera utilisé dans le code sens de départ de la pline. Mon probleme est de définir le code qui déterminera le ration_button choisi puis exécutera le code approprié. Merci d'avance
(gile) Posté(e) le 17 janvier 2011 Posté(e) le 17 janvier 2011 Salut, Le plus simple est de définir une clé pour le contrôle boxed_radio_button et, dans le action_tile de "accept" récupérer le get_tile de cette clé qui sera la clé du radio_button sélectionné. Un petit exemple tout simple Le DCLToto:dialog{ label = "Toto"; :boxed_radio_column{ label = "Oui ou Non ?"; key = "rep"; :radio_button{ label = "Oui"; key = "yes"; } :radio_button{ label = "Non"; key = "no"; } } ok_cancel; } Le LISP(defun c:test (/ dcl_id status result) (setq dcl_id (load_dialog tmp)) (if (new_dialog "Toto" dcl_id) (progn (set_tile "brc" "yes") (action_tile "accept" "(setq result (get_tile \"brc\")) (done_dialog 1)") (setq status (start_dialog)) (unload_dialog dcl_id) ) ) (if (= status 1) (alert result) (alert " Annulé") ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
steelbe Posté(e) le 17 janvier 2011 Auteur Posté(e) le 17 janvier 2011 Salut, Suite à la réponse il y a un peux de confusion, entre temps,j'ai essayé la fonction iniget qui fonctionne puis je suis revenu au radio_buttonet j'ai essayé de le faire fonctionner en ajoutant;la sub-fun :(chxradio)ainsi que :(action_tile "accept" "(setq ddiag1 T) (chxradio $value) (done_dialog 1)")mais le fichier ne fonctionne toujours pas. DCL est: GOUSSETform: dialog { label = "GOUSSET SHAPE"; spacer; spacer; :column{ :row{ :boxed_radio_column {fixed_width = true; label = " CHOIX DU GOUSSET "; key = "CHOIXDUGOUSSET"; spacer; :row { :radio_button { label = " Gousset Droit "; key = "GD"; value = "1"; } :radio_button { label = " Gousset Gauche "; key = "GG"; }} :edit_box { label = "Largeur :"; key = "L"; edit_width = 10; value = " "; } :edit_box { label = "Hauteur :"; key = "H"; edit_width = 10; value = " "; } :edit_box { label = "Chanfrein X :"; key = "EL"; edit_width = 10; value = " "; } :edit_box { label = "Chanfrein Y :"; key = "EH"; edit_width = 10; value = " "; } :edit_box { label = "Chanfrein X1 :"; key = "X1"; edit_width = 10; value = " "; } :edit_box { label = "Epaisseur mm :"; key = "EP"; edit_width = 10; value = " "; } spacer_1; } :row { :image { key = "cliche"; height = 10; width = 30; alignment = right; color = -2; aspect_ratio = 0; is_enabled = false; } } } } spacer; :row { spacer; spacer; spacer; ok_cancel; } } LSP : (defun C:GOUSSET_connect (/ foo chxradio id GD GG L H XL YH X1 EP) (defun foo (key val /) (if (distof val) (set (read key) (distof val)) (progn (alert "Nécessite un nombre valide") (mode_tile key 2) ) ) ) ;///////////////////////////////////////////// ;/////////////////////////////////////////////////////////////////////////////////////////////// (setq id (load_dialog "GOUSSETform.dcl")) (if (not (new_dialog "GOUSSETform" id)) (exit) ) ;//////////// (setq L 140) (setq H 150) (setq EL 30) (setq EH 40) (setq X1 100) (setq EP 12) ;//////////////////////// (set_tile "L" (rtos L)) (set_tile "H" (rtos H)) (set_tile "EL" (rtos EL)) (set_tile "EH" (rtos EH)) (set_tile "X1" (rtos X1)) (set_tile "EP" (rtos EP)) ;///////////////////////////// (action_tile "L" "(foo \"L\" $value)") (action_tile "H" "(foo \"H\" $value)") (action_tile "EL" "(foo \"EL\" $value)") (action_tile "EH" "(foo \"EH\" $value)") (action_tile "X1" "(foo \"X1\" $value)") (action_tile "EP" "(foo \"EP\" $value)") (action_tile "accept" "(setq ddiag1 T) (chxradio $value) (done_dialog 1)") (action_tile "annuler" "(done_dialog 0)") ;//////////////////////////////////////////////////////////// (start_dialog) (unload_dialog id) ;//////////////////////////////// (defun chxradio (chx) (cond ((= chx "GD") (Setq bp (getpoint "\nBase point of Gousset :")) ;;Retrieve gousset dimensions (Setq RCH1 (polar bp Pi L)) (Setq RCH2 (polar RCH1 (/ Pi 2) H)) ; Draw gousset shape right ;;----------------------------------------------------- ;; Shape coordonnate according to the following points. ;;----------------------------------------------------- (Setq G1 (polar bp Pi (- L EL))) (Setq G2 (polar RCH1 (/ Pi 2) EH)) (Setq G3 (polar RCH2 0 X1)) (Setq G4 (polar G3 0 (- L X1))) (Command "_pline" bp G1 G2 G3 G4 bp "") (command "_extrude" "D" "" EP "") ) ((= chx "GG") (Setq bp (getpoint "\nBase point of Gousset :")) ;;Retrieve gousset dimensions (Setq RCH1 (polar bp 0 L)) (Setq RCH2 (polar RCH1 (/ Pi 2) H)) ; Draw gousset shape left ;;----------------------------------------------------- ;; Shape coordonnate according to the following points. ;;----------------------------------------------------- (Setq G1 (polar bp 0 (- L EL))) (Setq G2 (polar RCH1 (/ Pi 2) EH)) (Setq G3 (polar RCH2 Pi X1)) (Setq G4 (polar G3 Pi (- L X1))) (Command "_pline" bp G1 G2 G3 G4 bp "") (command "_extrude" "D" "" EP "") ) ) ) ) Je pense qu'il manque un bout de code pour le faire fonctionneret je n'ai pas encore compris comment m'y prendre.L'exemple me parle mais n'arrive pas à l'insérer dans mon code.
(gile) Posté(e) le 18 janvier 2011 Posté(e) le 18 janvier 2011 Salut, Le problème vient de là :(action_tile "accept" "(setq ddiag1 T) (chxradio $value) (done_dialog 1)") Dans une expression (action_tile ...) $value fait référence à la valeur du contrôle (tile) dont la clé (key) est le premier argument : ici "accept" (le bouton OK).Or c'est la valeur du contrôle dont la clé est "CHOIXDUGOUSSET" que tu veux passer à chxradio. 2 solutions : - remplacer $value par (get_tile "CHOIXDUGOUSSET") dans le (action_tile "accept" ...) : (get_tile key) récupère la valeur du contrôle dont key est la clé. - attribuer la valeur de "CHOIXDUGOUSSET" à une variable dans un action_tile pour ce contrôle. Dans ce cas la variable devra être initialisée au cas où l'utilisateur ne modifie pas les radio_button. Dans tous les cas, (action_tile "annuler" ...) est :- inopérant : il n'y a aucun contrôle qui ait "annuler" comme clé (la clé du bouton "Annuler" est : "cancel")- inutile : le bouton "cancel" provoque (done_dialog 0) par défaut. À partir du moment où tu spécifie la valeur que retournera (start_dialog) suivant le bouton cliqué avec :(action_tile "accept" "(done_dialog 1)")tu n'as pas besoin d'utiliser (setq ddiag1 T), il suffit d'attribuer à ddiag1 la valeur retournée par (start_dialog) qui sera 1 si la boite a été fermée avec OK ou 0 si elle a été fermée avec "Annuler". Donc, solution 1 : ... (action_tile "accept" "(chxradio (get_tile \"CHOIXDUGOUSSET\")) (done_dialog)") ;//////////////////////////////////////////////////////////// (start_dialog) (unload_dialog id) ;//////////////////////////////// ... Solution 2 : ... (setq gousset "GD") ; valeur initiale correspondant au radio_button coché par défaut ... (action_tile "CHOIXDUGOUSSET" "(setq gousset $value)") (action_tile "accept" "(done_dialog 1)") ;//////////////////////////////////////////////////////////// (setq ddiag1 (start_dialog)) (unload_dialog id) (if (= ddiag1 1) (chxradio gousset) ) ;/////////////////////////////// .../ Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
steelbe Posté(e) le 31 janvier 2011 Auteur Posté(e) le 31 janvier 2011 Salut gile, J'ai résolu le problème en passant par deux boite de dialogue.Une pour choisir le typeUne autre pour définir les dimensions. Concernant les deux solutions que tu m'as proposé, il y a des messages d'erreurs. 1er solution: (lambda ($KEY $VALUE $DATA $REASON $X $Y) (chxradio (get_tile "CHOIXDUGOUSSET")) (done_dialog) ) 2eme solution: (chxradio gousset) Cependant, je continue à travailler sur le problème car cela serait mieux si une seul boite de dialogue pouvait être utilisé.
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