Mizcat Posté(e) le 9 mai 2012 Posté(e) le 9 mai 2012 Bonjour à tous, Cela fait pas très longtemps que je me suis mise au Lisp alors je suis désolée si j'utilise pas les bons mots pour dire les choses.Je voudrais créer une boite de dialogue qui me permette d’insérer des blocs en fonction des éléments que l'on a remplis au préalable. J'ai donc écrit un premier DCL qui me permet de choisir le type d'objet à insérer, et un deuxième DCL lié au premier, dans lequel on va rentrer toutes les caractéristiques nécessaire à l'insertion du bloc (Cette deuxième boite est nécessaire car les caractéristiques à rentrer vont être différentes selon le type d'élément). Voilà mon problème: je voudrais que dans ma deuxième boite de dialogue, s'affiche une image de l'objet à insérer, pour montrer à quoi correspondent les différentes dimensions à entrer. Cette image doit s'actualiser en fonction de la vue que l'on souhaite obtenir. Je m'explique, dans cette deuxième boite de dialogue, il y a un pop_list qui me permet de choisir vue de "dessus, face, gauche, droite" et j'aimerais que quand on choisis la vue, l'image s'actualise. Actuellement, je dois retourner à la boite de dialogue précédente et revenir pour que l'image s'actualise...Ce qui est assez embêtant... J'espère que je suis claire, Voilà mon premier DCL:ielement:dialog {label="Insérer un élément"; :radio_column { :radio_button {label="Té";key=te;} :radio_button {label="Coude";key=coude;} :radio_button {label="Véhicule";key=veh;} :radio_button {label="Vanne";key=vanne;} :radio_button {label="Poteau Incendie";key=PI;} :radio_button {label="Manchette";key=manch;} :radio_button {label="Join de démontage";key=jd;} } spacer_1; spacer_1; :row { :button { label = "Suivant > "; key = suiv; } spacer_1; :button { label = "Annuler"; is_cancel = true; key = annul; } }} Mon deuxième:tedcl:dialog {label="Insertion d'un té"; :image {width=40;aspect_ratio=1;color=0;fixed_height=true;key=img;} spacer_1; spacer_1; :row { :popup_list { label = "Type de Vue:"; key = vue1; list = "\n \nDessus\nFace\nDroite\nGauche"; edit_width = 15; } spacer_1; spacer_1; spacer_1; } :edit_box { label = "Diamètre Principal (mm):"; key = diam1; edit_width = 10; } :edit_box { label = "Diamètre secondaire (mm):"; key = diam2; edit_width = 10; } spacer_1; :edit_box { label = "Rotation (°):"; key = rot; edit_width = 10; } spacer_1; :row { :button { label = "< Précédent"; key = prec; } :row {ok_cancel;} } } Et voici le Lisp ( Juste le bout qui nous intéresse.. déjà que ce post est long...):(defun c:afficher() (setq rep 1) (setq rep1 0) (while (/= rep 0) (setq dcl_id (load_dialog "ielement.DCL")) (new_dialog "ielement" dcl_id) (action_tile "te" "(setq choice \"te\")") (action_tile "coude" "(setq choice \"coude\")") (action_tile "veh" "(setq choice \"vehicule\")") (action_tile "vanne" "(setq choice \"vanne\")") (action_tile "pi" "(setq choice \"pi\")") (action_tile "manch" "(setq choice \"manchette\")") (action_tile "jd" "(setq choice \"jd\")") (action_tile "suiv" "(done_dialog 1)") (action_tile "annul" "(done_dialog 0)") (setq rep (start_dialog)) (unload_dialog dcl_id) (if (= rep 0) (exit)) ;**************************************************CONDITION CHOIX TE************************************************************************************************************************ (if (= choice "te") (progn (setq dcl_id (load_dialog "te.DCL")) (new_dialog "tedcl" dcl_id) (action_tile "vue1" "(setq vue $value)") (action_tile "diam1" "(setq diam1 $value)") (action_tile "diam2" "(setq diam2 $value)") (action_tile "rot" "(setq rotation $value)") (action_tile "prec" "(done_dialog 1)") (action_tile "cancel" "(exit)") (action_tile "accept" "(and (setq rep1 1)(done_dialog 1))") (setq larg (dimx_tile "img")) (setq long (dimy_tile "img")) (cond ((= vue "0") (setq img "tenil")) ((= vue "1") (setq img "tedessus")) ((= vue "2") (setq img "teface")) ((= vue "3") (setq img "tedroite")) ((= vue "4") (setq img "tegauche")) ) (start_image "img") (slide_image -100 -170 (+ 140 larg) (+ 140 long) img) (end_image) (setq rep (start_dialog)) (unload_dialog dcl_id) (if (= rep 0) (exit) )) (if (= rep1 1) (progn (insere) (exit)) ) ) Merci !
Patrick_35 Posté(e) le 9 mai 2012 Posté(e) le 9 mai 2012 Salut Je suppose qu'une fois tous les paramètres choisis, cela correspond à un bloc.Ben dans ce cas, tu fais une image de ton bloc (avec la commande _mcliche) que tu affiches en fonction de tes paramètres (avec slide_image) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Mizcat Posté(e) le 9 mai 2012 Auteur Posté(e) le 9 mai 2012 Salut Je suppose qu'une fois tous les paramètres choisis, cela correspond à un bloc.Ben dans ce cas, tu fais une image de ton bloc (avec la commande _mcliche) que tu affiches en fonction de tes paramètres (avec slide_image) @+ J'ai déjà fais toutes mes images en sld. Le problème est que je voudrais que cette image change en fonction de la valeur de mon pop_list.Merci :)
Patrick_35 Posté(e) le 10 mai 2012 Posté(e) le 10 mai 2012 Mieux qu'un long discours. (defun c:afficher() (defun affiche() (cond ((= vue "0") (setq img nil)) ((= vue "1") (setq img "tedessus")) ((= vue "2") (setq img "teface")) ((= vue "3") (setq img "tedroite")) ((= vue "4") (setq img "tegauche")) ) (setq larg (dimx_tile "img")) (setq long (dimy_tile "img")) (start_image "img") (fill_image 0 0 long larg 0) (and img (slide_image -100 -170 (+ 140 larg) (+ 140 long) img)) (end_image) ) (setq rep 1) (setq rep1 0) (while (/= rep 0) (setq dcl_id (load_dialog "ielement.DCL")) (new_dialog "ielement" dcl_id) (action_tile "te" "(setq choice \"te\")") (action_tile "coude" "(setq choice \"coude\")") (action_tile "veh" "(setq choice \"vehicule\")") (action_tile "vanne" "(setq choice \"vanne\")") (action_tile "pi" "(setq choice \"pi\")") (action_tile "manch" "(setq choice \"manchette\")") (action_tile "jd" "(setq choice \"jd\")") (action_tile "suiv" "(done_dialog 1)") (action_tile "annul" "(done_dialog 0)") (setq rep (start_dialog)) (unload_dialog dcl_id) (if (= rep 0) (exit)) ;**************************************************CONDITION CHOIX TE************************************************************************************************************************ (if (= choice "te") (progn (setq dcl_id (load_dialog "te.DCL")) (new_dialog "tedcl" dcl_id) (setq vue "0") (affiche) (action_tile "vue1" "(setq vue $value)(affiche)") (action_tile "diam1" "(setq diam1 $value)") (action_tile "diam2" "(setq diam2 $value)") (action_tile "rot" "(setq rotation $value)") (action_tile "prec" "(done_dialog 1)") (action_tile "cancel" "(exit)") (action_tile "accept" "(and (setq rep1 1)(done_dialog 1))") (setq rep (start_dialog)) (unload_dialog dcl_id) (if (= rep 0) (exit) )) (if (= rep1 1) (progn (insere) (exit)) ) ) )) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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