Aller au contenu

Messages recommandés

Posté(e)

Bonjour à Toutes et à Tous

 

je suis en train d'améliorer mes anciens fichiers Lisp en leur adjoignant des cases en DCL

 

le lisp fabrique une liste avec certains calques qui ont certaines caractéristiques précises.

 

je souhaite, faire une DCL avec autant de boutons radio qu'il y a de calques dans la liste

et dont, le label du bouton sera le nom du calque

 

c'est assez aisé avec des ":list_box" et (start_list)

mais je n'ai pas trouvé comment agir sur le label d'un bouton depuis le lisp.

 

merci à toutes celles et à tous ceux qui viendront à ma rescousse.

 

amicalement

Posté(e)

Salut Didier

 

Je n'ai pas totocad sous la main, mais tu peux avoir un lisp qui écrit la boite de dialogue, et donc ainsi créer les boutons souhaités ainsi que leurs clés en fonction de tes calques.

Le premier bouton pourrai de nommer calque1 avec son label, le second calque2, etc..

Une simple boucle en fonction du nombre de calque.

Le seul danger dans ce type de lisp est la taille de l'écran qui risque d'être vite très petit.

 

@+

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)

Coucou

 

oui, je suis d'accord que c'est bien comme ça qu'il faut faire,

le nombre de bouton est limité, toutefois sans être connu à l'avance.

 

donc je pensais faire par exemple six boutons

si j'en ai besoin de trois, j'injecte les noms des calques en labels des boutons

et les inutilisés se verront inactivés.

 

je réitère donc ma question

comment injecter, depuis le lisp,l'intitulé du label du bouton ?

(ce qui sera visible sur la case de dialogue)

 

amicalement

Posté(e)

je réitère donc ma question

comment injecter, depuis le lisp,l'intitulé du label du bouton ?

Ben, comme tu es d'accord que c'est le lisp qui écrit le DCL, tu as la réponse :huh:

 

Je doit rater quelque chose.

 

@+

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)

coucou

 

merci de tes réponses, c'est gentil de prendre du temps,

oui, tu rates quelque chose, et c'est sans doute dans mon explication

 

comment, autrement dit quelle syntaxe dois-je utiliser

pour que, depuis le lisp je change la valeur LABEL d'un bouton ?

 

par exemple je mets par défaut bouton1,

et qu'à l'affichage de la DCL je vois le nom du calque en face du bouton

que j'ai nommé bouton1 dans mon DCL, la "key" est bouton1.

 

j'ai essayé avec set_tile "bouton1" ""nomcalque"

et rien ne se passe dans la DCL,

je vois toujours écrit "bouton1"

 

pour injecter une liste, depuis le lisp on utilise start_list blabla..

comment faire pour un bouton ?

 

amicalement

Posté(e)

Bonjour Didier

 

Ce que Patrick_35 suggère c’est de t’inspirer des Lisp de (gile) dans la rubrique routines lisp:

 

Le coin des lispeurs

 

Il ne s'agit plus ici de commandes définies en LISP mais de routines LISP utilisables dans divers programmes.

 

Dialog : Des petites boites de dialogue (sans fichier DCL séparé) pour récupérer des données de la part de l'utilisateur .

 

A+

(Désolé j'ai pas fait de lien..)

Apprendre => Prendre => Rendre

Posté(e)

Salut Didier,

 

Dans le fichier Dialog.lsp (lien donné par Bruno), tu trouveras une routine appelée OptionBox qui fait ce que tu demandes.

 

Par exemple, l'expression :

(OptionBox "Calques"  "Choisissez un calque: " '( "0" . "0") ("1" . "Calque1") ("2" . "Calque2")) nil)

 

Affiche une boite de dialogue dont le titre est : "Calques", le message : "Choisissez un calque :" (aucun message si cet argument est "" ou nil) avec 3 boutons radios dont les labels sont : "0", "Calque1" et "Calque2". La valeur retournée sera, respectivement "0", "1" ou "2" (ou nil si l'utilisateur fait "Annuler").

 

Cette même routine affichera des cases à cocher si le dernier argument n'est pas nil (T) et autorisera donc des choix multiples.

 

Cette méthode consistant à écrire un fichier DCL temporaire depuis le LISP permet de créer des boites de dialogue en fonction de paramètres récupérés par le LISP comme dans la routine SSD (dans Special_Selections.lsp sur la même page) où la boite de dialogue est crée en fonction des propriétés dynamiques du bloc sélectionné.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut didier

 

J'ai enfin pris le temps pour te donner un exemple

;=========================================================================
; Boite de dialogue
;=========================================================================

 (defun bd(titre bts / bou bouton btn dcl fil res tmp txt val)
   (defun bouton (label cle)
     (if label
(write-line (strcat "    :button {label = \"" label "\"; key = \"bt" cle "\"; width = 30;}") fil)
(write-line (strcat "    :button {label = \"\"; 	 key = \"bt" cle "\"; width = 30;}") fil)
     )
   )

   (setq tmp (vl-filename-mktemp "rap" nil ".dcl")
  fil (open tmp "w")
   )
   (foreach txt '(	"tst : dialog {"
		"  key = titre;"
		"  is_cancel = true;"
		"  fixed_width = true;"
		"  alignment = centered;"
		"  spacer;"
	 )
     (write-line txt fil)
   )
   (setq bou 0)
   (while (nth bou bts)
     (write-line "  :row {" fil)
     (bouton (nth bou bts) (itoa bou))
     (bouton (nth (1+ bou) bts) (itoa (1+ bou)))
     (bouton (nth (+ 2 bou) bts) (itoa (+ 2 bou)))
     (write-line "  }" fil)
     (setq bou (+ bou 3))
   )
   (foreach txt '(	"  spacer;"
		"  cancel_button;"
		"}"
	 )
     (write-line txt fil)
   )
   (close fil)
   (setq dcl (load_dialog tmp))
   (new_dialog "tst" dcl "")
   (set_tile "titre" titre)
   (mode_tile "accept" 1)
   (setq bou 0)
   (repeat (length bts)
     (action_tile (strcat "bt" (itoa bou)) (strcat "(setq val " (itoa bou) ")(done_dialog 1)"))
     (setq bou (1+ bou))
   )
   (action_tile "cancel" "(done_dialog 0)")
   (setq res (start_dialog))
   (if (eq res 1)
     (alert (strcat "Le calque choisis est " (nth val bts)))
   )
   (unload_dialog dcl)
   (vl-file-delete tmp)
   (princ)
 )

 

Pour tester

  (bd "Un Titre" '("Calque1" "Calque2" "Calque3" "Calque4" "Calque5" "Calque6" "Calque7"))

 

@+

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)

Coucou

 

je ne suis pas allé manger, il aimer le lisp n'est-ce pas ?

 

cette façon de faire des DCL dans des fichiers temporaires est vraiment puissante

je vous remercie tous grandement de m'avoir orienté vers cette solution.

 

initiée par Marseille (gile)

formalisée par la Bretagne (Patrick_35)

elle est pas belle la vie ?

 

encore merci

Posté(e)

cette façon de faire des DCL dans des fichiers temporaires est vraiment puissante

Oui, et c'est aussi une façon de de faire qui permet de ne plus joindre de dcl avec un lisp. B)

 

@+

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é