Aller au contenu

Problème de popup_list


charlie69

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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.

 

Amicalement

Zebulon_

 

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)

Lien vers le commentaire
Partager sur d’autres sites

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_semelle

diametre_ay_semelle

diametre_armature_peau1

diametre_ax_fût

diametre_ay_fût

diametre_cadre

 

Que me manque t il? car j'ai du mal à comprendre certaines étapes malgrés ce que vous m'avez expliqué.

 

merci

 

@+

Lien vers le commentaire
Partager sur d’autres sites

(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

 

Amicalement

Zebulon_

 

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)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

 

Amicalement

Zebulon_

 

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)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

 

Amicalement

Zebulon_

 

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)

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité