charlie69 Posté(e) le 6 juin 2007 Posté(e) le 6 juin 2007 je recherche quelqu'un qui pourrai m'aider en programmation autoLISP et plus particulièrement pour les popup_list. J'ai commencer par créer une liste: (setq diametre '("6" "8" "10" "12" "14" "16" "18" "20")) Ensuite je l'ai insérer dans dans la liste déroulant: (start_list "dia_ax_semelle") (mapcar 'add_list diametre) (end_list) Et enfin, j'ai voulu faire reconnaitre par le programme LISP les infermations qui sont dans la liste déroulante: (action_tile "dia_ax_semelle" "(setq diametre_ax_semelle $value)") Mais cela ne marche pas contrairement au list_box. Pour un diametre égale à "6" le programme me met "0"Pour un diametre égale à "8" le programme me met "1"Pour un diametre égale à "10" le programme me met "2"Pour un diametre égale à "12" le programme me met "3"Pour un diametre égale à "14" le programme me met "4"Pour un diametre égale à "16" le programme me met "5"Pour un diametre égale à "18" le programme me met "6"Pour un diametre égale à "18" le programme me met "7"Pour un diametre égale à "20" le programme me met "8" Si vous pouviez m'aider se serai bien car je ne sais plus où chercher et je n'arrive pas à avancer mon programme. merci d'avance Nicolas
Patrick_35 Posté(e) le 6 juin 2007 Posté(e) le 6 juin 2007 SalutC'est normal car la valeur retouné pas $value est la position dans ta listeDonc un (nth 0 diametre) = 6, un (nth 4 diametre) = 14 @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
zebulon_ Posté(e) le 6 juin 2007 Posté(e) le 6 juin 2007 Bonjour, Mais cela ne marche pas contrairement au list_box.ça m'étonnerait... Sinon, pour le reste, Patrick_35 a donné la réponse et un truc du style(nth (atoi diametre_ax_semelle) diametre)devrait faire l'affaire. AmicalementZebulon_ 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)
charlie69 Posté(e) le 6 juin 2007 Auteur Posté(e) le 6 juin 2007 salut, merci du coup de main. je vais pouvoir avancer mon projet. y a t il des sites autres que aidacad et afralisp pour m'aider dans mes recherches? merci @+
Patrick_35 Posté(e) le 6 juin 2007 Posté(e) le 6 juin 2007 y a t il des sites autres que aidacad et afralisp pour m'aider dans mes recherches? Ben Cadxp il me semble :exclam: ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
charlie69 Posté(e) le 7 juin 2007 Auteur Posté(e) le 7 juin 2007 Encore un petit souci avec la popup_list.Voici la partie de programme LISP qui traite des popup_list: (setq diametre '("6" "8" "10" "12" "14" "16" "20")) (start_list "dia_ax_semelle") (mapcar 'add_list diametre) (end_list) (setq diametre_ax_semelle (nth (atoi "dia_ax_semelle") diametre)) (start_list "dia_ay_semelle") (mapcar 'add_list diametre) (end_list) (setq diametre_ay_semelle (nth (atoi "dia_ay_semelle") diametre)) (start_list "dia_armature_peau") (mapcar 'add_list diametre) (end_list) (setq diametre_armature_peau1 (nth (atoi "dia_armature_peau") diametre)) (start_list "dia_ax_fût") (mapcar 'add_list diametre) (end_list) (setq diametre_ax_fût (nth (atoi "dia_ax_fût") diametre)) (start_list "dia_ay_fût") (mapcar 'add_list diametre) (end_list) (setq diametre_ay_fût (nth (atoi "dia_ay_fût") diametre)) (start_list "dia_cadre") (mapcar 'add_list diametre) (end_list) (setq diametre_cadre (nth (atoi "dia_cadre") diametre)) Le probleme est que chacune des variables ci-après est égale à 6 alors qu'elle aurai du etre égale à la valeur que l'on a sélectionnée.diametre_ax_semellediametre_ay_semellediametre_armature_peau1diametre_ax_fûtdiametre_ay_fûtdiametre_cadre Que me manque t il? car j'ai du mal à comprendre certaines étapes malgrés ce que vous m'avez expliqué. merci @+
Patrick_35 Posté(e) le 7 juin 2007 Posté(e) le 7 juin 2007 Ne voyant qu'une partie du code, difficile de direIl manque quelque chose du style ?(action_tile "une_clé" "(setq une_variable $value)") @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
charlie69 Posté(e) le 7 juin 2007 Auteur Posté(e) le 7 juin 2007 Je pense que ca doit etre un truc dans ce style mais je suis pas sur du tout. dit quel partie du code il te manque et je vous l'enverrai. @+
zebulon_ Posté(e) le 7 juin 2007 Posté(e) le 7 juin 2007 (setq diametre_ax_semelle (nth (atoi "dia_ax_semelle") diametre)) et puis il y a le paramètre de la fonction atoi tu fais (atoi "dia_ax_semelle") qui te renvoie toujours 0 puisque "dia_ax_semelle" est une chaîne de caractère constante.Ne voulais-tu pas écrire (atoi dia_ax_semelle) et traiter le contenu de la variable dia_ax_semelle ? Même remarque pour les atoi qui suivent AmicalementZebulon_ 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)
charlie69 Posté(e) le 8 juin 2007 Auteur Posté(e) le 8 juin 2007 Si je veux bien traiter la variable dia_ax_semelle. Le programme s'exécute en entier mais le programme c'est que diametre_ax_semelle est toujours égale à la valeur première valeur de la liste c'est à dire 6 alors que j'ai séléctionné par exemple pour cette variable la valeur 14. (setq diametre '("6" "8" "10" "12" "14" "16" "20")) Je voudrai que chaque fois que je sélectionne 6 dans la liste déroulante la variable diametre_ax_semelle soit égale à 6,chaque fois que je sélectionne 8 dans la liste déroulante la variable diametre_ax_semelle soit égale à 8,chaque fois que je sélectionne 10 dans la liste déroulante la variable diametre_ax_semelle soit égale à 10 et ainsi de suite. Merci @+ charlie69
zebulon_ Posté(e) le 8 juin 2007 Posté(e) le 8 juin 2007 Bonjour, (action_tile "une_clé" "(setq une_variable $value)") te mets dans la variable une_variable, la valeur en cours, sous forme de chaîne, d'un élément, telle une chaine contenue dans une boite d'édition, ou bien "1" ou "0" pour une case à cocher...Dans ton cas, c'est une liste, et $value te renvoie, toujours sous forme de chaine, la position dans la liste. Tu auras comme résultat "0", "1", "2".... ou "6". Il suffit d'aller piocher dans la liste diametre à la position renvoyée par $value en faisant quelque chose comme ça: (action_tile "une_clé" "(setq une_variable (nth (atoi $value) diametre))") Ce serait plus simple si tu éditais ton code .lsp et .dcl ici, ça nous permettrait d'y voir plus clair. N'aie pas peur, on a tous commencé un jour ;) AmicalementZebulon_ 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)
charlie69 Posté(e) le 8 juin 2007 Auteur Posté(e) le 8 juin 2007 Bonjour, Je vais essayer de faire comme tu me dis. OK je vais l'éditer ici mais je ne pourrai pas le consulter souvent car je n'ai accés à internet qu'au bureau le matin, à midi et un peu le soir; chez moi je n'ai pas internet.je vais mettre le code DCL et le LISP qui traite la boite de dialogue mais pas le reste car le programme fait pas moins de 5000 lignes ca risquerai d'etre un peu long!!!!!! ;) je le met directement ici? DCL: boite_de_dialogue_massif_de_fondation:dialog {label="Massif de fondation"; :boxed_column {label="Coffrage"; :row{ :image {width=70;height=20;color=0;key=img1;} :column{ :row { :boxed_column {label="Semelle"; :edit_box {label="Largueur A (cm):"; edit_limit=4; edit_width=4; //value="350"; key=larg_semelle;} :edit_box {label="Longueur B (cm):"; edit_limit=4; edit_width=4; //value="350"; key=long_semelle;} :edit_box {label="Hauteur H (cm):"; edit_limit=4; edit_width=4; //value="70"; key=haut_semelle;} } :boxed_column {label="Fût (Si il existe)"; :edit_box {label="Largeur a (cm):"; edit_limit=4; edit_width=4; //value="110"; key=larg_fût;} :edit_box {label="Longueur b (cm):"; edit_limit=4; edit_width=4; //value="110"; key=long_fût;} :edit_box {label="Hauteur h (cm):"; edit_limit=4; edit_width=4; //value="70"; key=haut_fût;} } } :boxed_row {label="Autres paramètres"; :boxed_column {label="Excentricité du fût"; :edit_box {label="Delta X (cm):"; edit_limit=5; edit_width=5; //value="-85"; key=deltax;} :edit_box {label="Delta Y (cm):"; edit_limit=5; edit_width=5; //value="0"; key=deltay;} spacer_1; } spacer_1; :column{ spacer_1; :edit_box {label="Arase inférieure (cm):"; edit_limit=4; edit_width=4; key=arase_inf;} :edit_box {label="Epaisseur du béton de propreté bp (cm):"; edit_limit=5; edit_width=5; //value="5"; key=epaisseur_bp;} spacer_1; } } } } } :boxed_row {label="Ferraillge"; :row { :image {width=70;height=20;aspect_ratio=1;color=0;key=img2;} } :row { :boxed_column {label="Semelle"; :edit_box {label="Enrobage (cm):"; edit_limit=1; edit_width=1;// value="5"; key=enrobage_semel;} spacer_1; :row { :boxed_column {label="Ax"; :edit_box {label="Nombre de lits:"; edit_limit=4; edit_width=4; //value="32"; key=nbre_ax_semelle;} :popup_list {label="Diamètre:"; value="16"; edit_width=4; key=dia_ax_semelle;} spacer_1; } } :row { :boxed_column {label="Ay"; :edit_box {label="Nombre de lits:"; edit_limit=4; edit_width=4; //value="32"; key=nbre_ay_semelle;} :popup_list {label="Diamètre:"; value="16"; edit_width=4; key=dia_ay_semelle;} spacer_1; } } :row { :boxed_row {label="Armatures de peau"; :image {width=20;height=20;aspect_ratio=1;color=0;key=img3; } :radio_column { :radio_button {label="En U"; key=cas0; value="1";} :radio_button {label="En L"; key=cas1; value="0";} } :column{ :edit_box {label="Nombre de lits:"; edit_limit=4; edit_width=4; //value="3"; key=nbre_armature_peau;} :popup_list {label="Diamètre:"; value="10"; edit_width=4; key=dia_armature_peau;} } } spacer_1; } } } :boxed_column {label="Fût (Si il existe)"; :edit_box {label="Enrobage (cm):"; edit_limit=1; edit_width=1; //value="3"; key=enrob_fût;} :boxed_column {label="Ax"; :edit_box {label="Nombre de lits:"; edit_limit=2; edit_width=2; //value="4"; key=nbre_ax_fût;} :popup_list {label="Diamètre:"; value="18"; edit_width=4; key=dia_ax_fût;} } :boxed_column {label="Ay"; :edit_box {label="Nombre de lits:"; edit_limit=2; edit_width=2; //value="4"; key=nbre_ay_fût;} :popup_list {label="Diamètre:"; value="18"; edit_width=4; key=dia_ay_fût;} } :boxed_column {label="Cadres"; :edit_box {label="Espacement:"; edit_limit=2; edit_width=2; //value="20"; key=espace_cadre;} :popup_list {label="Diamètre:"; value="13"; edit_width=4; key=dia_cadre;} } } } :row {ok_cancel;}} LISP: (defun c:massif_de_fondation () (setq cas "0") (setq dcl_id (load_dialog "Boite de dialogue massif de fondation.dcl")) (if (not (new_dialog "boite_de_dialogue_massif_de_fondation" dcl_id)) (exit) );si il n'y a pas de boite de dialogue alors on lance le programme sans elle ;image en .sld (setq x1 (dimx_tile "img1") ;coordonnées x du coin inférieur droit de l'image nom de l'image que l'on donne dans la boite de dialogue y1 (dimy_tile "img1")) ;coordonnées y du coin inférieur droit de l'image (start_image "img1") ;Début du traitement d'un controle image (fill_image 0 0 (dimx_tile "img1") (dimy_tile "img1") 0) (slide_image 20 0 x1 y1 "massif_image1") ;centrage de la diapo (end_image) (setq x2 (dimx_tile "img2") y2 (dimy_tile "img2")) (start_image "img2");nom de la diapo (fill_image 0 0 (dimx_tile "img2") (dimy_tile "img2") 0) (slide_image 0 -60 x2 y2 "massif_image2") ;centrage de la diapo (end_image) (setq x3 (dimx_tile "img3") y3 (dimy_tile "img3")) (start_image "img3");nom de la diapo (fill_image 0 0 (dimx_tile "img3") (dimy_tile "img3") 0) (slide_image 0 0 x3 y3 "massif_image3") ;centrage de la diapo (end_image) ;j'établit la liste des diamètres qui seront insérés dans les listes déroulantes (setq diametre '("6" "8" "10" "12" "14" "16" "20")) ;coffrage ;semelle (action_tile "larg_semelle" "(setq largeur_semelle $value)") (action_tile "long_semelle" "(setq longueur_semelle $value)") (action_tile "haut_semelle" "(setq hauteur_semelle $value)") ;fût (si il existe) (action_tile "larg_fût" "(setq largeur_fût $value)") (action_tile "long_fût" "(setq longueur_fût $value)") (action_tile "haut_fût" "(setq hauteur_fût $value)") ;autre paramètres ;exentricité du fût (action_tile "deltax" "(setq delta_x $value)") (action_tile "deltay" "(setq delta_y $value)") ;arase inférieure (action_tile "arase_inferieure" "(setq arase_inferieure $value)") ;épasseur gros béton (action_tile "epaisseur_bp" "(setq epaisseur_beton_proprete $value)") ;ferraillage ;semelle (action_tile "enrobage_semel" "(setq enrobage_semelle $value)") ;acier Ax (action_tile "nbre_ax_semelle" "(setq nombre_ax_semelle $value)") (start_list "dia_ax_semelle") (mapcar 'add_list diametre) (end_list) (action_tile "dia_ax_semelle" "(setq diametre_ax_semelle (nth (atoi $value) diametre))") ;;; (setq dia_ax_semelle (nth (atoi "dia_ax_semelle") diametre));;; (action_tile "dia_ax_semelle" "(setq diametre_ax_semelle $value)") ;acier Ay (action_tile "nbre_ay_semelle" "(setq nombre_ay_semelle $value)") (start_list "dia_ay_semelle") (mapcar 'add_list diametre) (end_list) (action_tile "dia_ay_semelle" "(setq diametre_ay_semelle (nth (atoi $value) diametre))") ;;; (setq dia_ay_semelle (nth (atoi "dia_ay_semelle") diametre));;; (action_tile "diametre_ay_semelle" "(setq dia_ay_semelle $value)") ;armature de peau (action_tile "cas0" "(setq cas \"0\")") (action_tile "cas1" "(setq cas \"1\")") (action_tile "nbre_armature_peau" "(setq nombre_armature_peau $value)") (start_list "dia_armature_peau") (mapcar 'add_list diametre) (end_list) (action_tile "dia_armature_peau" "(setq diametre_armature_peau1 (nth (atoi $value) diametre))") ;;; (setq dia_armature_peau2 (nth (atoi "dia_armature_peau") diametre));;; (action_tile "diametre_armature_peau1" "(setq dia_armature_peau2 $value)") ;fût (action_tile "enrob_fût" "(setq enrobage_fût $value)") ;acier Ax (action_tile "nbre_ax_fût" "(setq nombre_ax_fût $value)") (start_list "dia_ax_fût") (mapcar 'add_list diametre) (end_list) (action_tile "dia_ax_fût" "(setq diametre_ax_fût (nth (atoi $value) diametre))") ;;; (setq dia_ax_fût (nth (atoi "dia_ax_fût") diametre));;; (action_tile "diametre_ax_fût" "(setq dia_ax_fût $value)") ;acier Ay (action_tile "nbre_ay_fût" "(setq nombre_ay_fût $value)") (start_list "dia_ay_fût") (mapcar 'add_list diametre) (end_list) (action_tile "dia_ay_fût" "(setq diametre_ay_fût (nth (atoi $value) diametre))") ;;; (setq dia_ay_fût (nth (atoi "dia_ay_fût") diametre));;; (action_tile "diametre_ay_fût" "(setq dia_ay_fût $value)") ;cadres (action_tile "espace_cadre" "(setq espacement_cadre $value)") (start_list "dia_cadre") (mapcar 'add_list diametre) (end_list) (action_tile "dia_cadre" "(setq diametre_cadre (nth (atoi $value) diametre))") (setq dia_cadre (nth (atoi "dia_cadre") diametre)) (action_tile "diametre_cadre" "(setq dia_cadre $value)") ;aide autoLISP done_dialog (action_tile "accept" "(done_dialog 1)") ;1 pour OK ; (setq userclick T) (action_tile "cancel" "(done_dialog 0)") ;o pour Cancel ; (setq userclick nil) (start_dialog) (unload_dialog dcl_id) (setq ok (start_dialog)) ;;; (if;;; (and (= ok 1) (and (/= largeur_semelle nil) (/= longueur_semelle nil) (/= hauteur_semelle nil))) ; si toutes les données sont rentrées (massif) ; on lance le programme massif;;; )(princ)) Il y un aussi un petit souci avec les image que l'on insere dans la boite de dialogue, elle sont trop grande. Merci @+ charlie69
zebulon_ Posté(e) le 8 juin 2007 Posté(e) le 8 juin 2007 C'est effectivement long, 5000 lignes... AmicalementZebulon_ 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)
charlie69 Posté(e) le 11 juin 2007 Auteur Posté(e) le 11 juin 2007 Salut, je te remercie car toute ma boite de dialogue marche impécable!!!!!!! @+ charlie69 :D
charlie69 Posté(e) le 12 juin 2007 Auteur Posté(e) le 12 juin 2007 salut a tous, j'aurai voulu savoir comment on peut insérer des blocs grace a la liste déroulante d'un boite de dialogue DCL? DCL boite_de_dialogue_corridor:dialog {label="Corridor"; :edit_box {label="largeur du corridor en m:"; edit_limit=4; edit_width=4; key=larg_corridor;} :boxed_row {label="Longueur des boîtes"; :radio_column { :radio_button {label="1Km"; key=cas0; value="1";} :radio_button {label="5Km"; key=cas1; value="0";} } } :popup_list {label="Blocs:"; value="16"; edit_width=4; key=bloc;} :row {ok_cancel;}} LISP (defun c:corridor () (setq cas "0") (setq dcl_id (load_dialog "Boite de dialogue corridor.dcl")) (if (not (new_dialog "boite_de_dialogue_corridor" dcl_id)) (exit) );si il n'y a pas de boite de dialogue alors on lance le programme sans elle ;largeur du corridor (action_tile "larg_corridor" "(setq largeur_corridor $value)") ;largeur des boites (action_tile "cas0" "(setq cas \"0\")") (action_tile "cas1" "(setq cas \"1\")") ;j'établit la liste des blocs qui seront insérés dans les listes déroulantes (setq liste_bloc '("li3" "lib" "b600")) (start_list "bloc") (mapcar 'add_list liste_bloc) (end_list);;; (action_tile "bloc" "(setq bloc_largeur (nth (atoi $value) liste_bloc))") > problème à ce niveau là ;aide autoLISP done_dialog (action_tile "accept" "(done_dialog 1)") ;1 pour OK ; (setq userclick T) (action_tile "cancel" "(done_dialog 0)") ;o pour Cancel ; (setq userclick nil) (start_dialog) (unload_dialog dcl_id) (setq ok (start_dialog)) (boite) ; on lance le programme boite (princ)) merci @+ charlie69
zebulon_ Posté(e) le 12 juin 2007 Posté(e) le 12 juin 2007 il y a déjà 2 soucis dans ton dcl : les bouton de radio peuvent se gérer plus simplement grâce au nom de la clé donné au groupe radio_column lui-même. Un action_tile sur cette clé récupère la valeur de la clé radio_button enfant.Ensuite, dans la popup_list tu donnes une value=16 alors que la liste ne compte que 3 éléments. Le lisp essaye désespérément se placer en 16ème position alors qu'il ne peut sde placer qu'en "0", "1" ou "2". Je te propose le dcl suivant boite_de_dialogue_corridor:dialog {label="Corridor"; :edit_box {label="largeur du corridor en m:"; edit_limit=4; edit_width=4; key=larg_corridor;} :boxed_radio_column { label="Longueur des boîtes"; key=cas; :radio_button {label="1Km"; key=cas0;} :radio_button {label="5Km"; key=cas1;} } :popup_list {label="Blocs:"; edit_width=5; key=bloc;} spacer_1; ok_cancel; } et le lisp (defun c:corridor () (setq dcl_id (load_dialog "Boite de dialogue corridor.dcl")) (if (not (new_dialog "boite_de_dialogue_corridor" dcl_id)) (exit) ) ;si il n'y a pas de boite de dialogue alors on lance le programme sans elle ;j'établit la liste des blocs qui seront insérés dans les listes déroulantes (setq liste_bloc '("li3" "lib" "b600")) ;; initialiser les variables (if (not largeur_corridor) (setq largeur_corridor "1.500")) (if (not cas) (setq cas "cas0")) (if (not position_liste) (setq position_liste "0")) ;; initialiser la boite de dialogue (set_tile "larg_corridor" largeur_corridor) (set_tile "cas" cas) (set_tile "bloc" position_liste) ;largeur du corridor (action_tile "larg_corridor" "(setq largeur_corridor $value)") ;largeur des boites (action_tile "cas" "(setq cas $value)") (start_list "bloc") (mapcar 'add_list liste_bloc) (end_list) (action_tile "bloc" "(setq position_liste $value)") (action_tile "accept" "(done_dialog 1)") ;1 pour OK ; (action_tile "cancel" "(done_dialog 0)") ;o pour Cancel ; (setq what_next (start_dialog)) (unload_dialog dcl_id) (if (= what_next 1) ;; ok (progn (setq bloc_largeur (nth (atoi position_liste) liste_bloc)) (alert (strcat "Largeur corridor : " largeur_corridor)) (alert (strcat "Cas : " Cas)) (alert (strcat "largeur bloc : " bloc_largeur)) (command "_insert" bloc_largeur pause "1" "1" "0") ) ) (princ) ) où je suppose que tu as des blocs "li3", "lib" ou "b600" disponibles dans ton fichier ou dans un répertoire référencé dans outils/option/fichier/chemin de recherche de fichier de support. AmicalementZebulon_ 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)
charlie69 Posté(e) le 13 juin 2007 Auteur Posté(e) le 13 juin 2007 salut à toi Zébulon je te remercie je vais essayer de voir ce que ca donne. en fait c'est pas pour moi c'est pour une pote qui doit faire un projet. @+ amicalementcharlie69
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