Aller au contenu

Messages recommandés

Posté(e)

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 ! :rolleyes:

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é