Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

J'aimerais savoir si c'est possible de faire apparaître un menu contextuel de la même forme que celui qui apparait quand on fait Shift+clic droit au cours d'un programme lisp.

En fait, je voudrais faire ce menu pour avoir une liste de choix à l'écran mais qui disparaisse après avoir fait la selection.

 

J'ai recherché en DCL mais la boite de dialogue apparait toujours avec un titre.

www.le-metal.net, sur la métallerie
Posté(e)

Je crois que Serge a parlé récemment d'un menu contextuel mais c'est avec un fichier mnu ! fait une recherche + approfondi car je n'ai pas réussi à retrouver le post.

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Posté(e)

Un exemple vaut mieux qu'un grand discours.

C'est une manière simple de procéder!

(defun c:menu_contextuel ( / key_w)
(initget 1 "Abc Def Ghi Jkl Mno Pqr Stu Vwx Yz")
(setq key_w  (entsel "\nSélectioner une entité-Choisir une option
[Abc/Def/Ghi/Jkl/Mno/Pqr/Stu/Vwx/Yz]: "))
(cond
	((eq key_w "Abc") (alert "Abc"))
	((eq key_w "Def") (alert "Def"))
	((eq key_w "Ghi") (alert "Ghi"))
	((eq key_w "Jkl") (alert "Jkl"))
	((eq key_w "Mno") (alert "Mno"))
	((eq key_w "Pqr") (alert "Pqr"))
	((eq key_w "Stu") (alert "Stu"))
	((eq key_w "Vwx") (alert "Vwx"))
	((eq key_w "Yz") (alert "Yz"))
	(T
		(if (eq (type (car key_w)) 'ENAME)
			(alert (cdr (assoc 0 (entget (car key_w)))))
			(alert "Selection vide")
		)
	)
)
(prin1)
)

Fonction honorant les mots-clé (sauf getstring)

getint

getreal

getdist

getangle

getorient

getpoint

getcorner

getkword

entsel

nentsel

nentselp

 

Voir l'aide sur (initget)

 

Armer les bits de controle et initialiser les mots-clé entre guillemet dans la fonction initget.

Si l'on veut internationaliser le code donner les mots en francais puis en Anglais

ex: (initget bit_control "CAlque COuleur Epaisseur _Layer Color Width")

dans ce cas les options retournées seront en Anglais faire le test avec ce mot SANS underscore.

Notez que seule la 1ere option en Anglais comporte le "_" (underscore) dans initget

 

Dans les fonctions (get?????) ou (?entsel?) le message fourni doit comporter entre [] (crochets) toutes les options séparées par un / (slash)

Si la cette syntaxe est bien respecté les options apparaitront dans le menu contextuel (Click-Droit) et pourront être sélectionnées.

 

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Merci Bonuscad pour ce prog mais je ne parlais pas de ce type de menu contextuel, en fait je parle d'un menu qui apparait au bout du pointeur de type menu acrochage au objet [shift + click droit] mais qui sois appelé par un programme Lisp. Je connais la fonction "menucmd" mais elle ne permet pas de faire un menu modifiable.

 

Je voudrais pouvoir obtenir au cours de mon programme un menu de ce type qui apparait pour pouvoir selectionner un calque mais comme le nom et le nombre de calque change au cours du dessin ce menu doit être modifiable.

 

Si quelqu'un a une idée, peut-être faut-il programmer en Vba.

www.le-metal.net, sur la métallerie
Posté(e)

J'ai recherché dans l'aide AutoCAD et j'ai pu trouver quelques informations

Voici la syntaxe d'un menu popup à inserer dans le fichier AutoCAD.mns et AutoCAD.mnu.

Il est possible de stocker des info dans les variables users1-5 puis de les recuperer avec du langage Diesel.

Le menu suivant permet de rendre un calque actif suite à l'appele dans un programme LISP

par

(menucmd "POP25=PERSO") -> charge le menu

(menucmd "POP25=*) -> fait apparaitre le menu

 

***POP25
**PERSO
              [Menu Perso]
ID_Users1      [$(if,$(eq,$(getvar,users1),""),~,$(eval,$(getvar,users1)))]^P(setvar "clayer" (getvar "users1"))^P;

ID_Users2      [$(if,$(eq,$(getvar,users2),""),~,$(eval,$(getvar,users2)))]^P(setvar "clayer" (getvar "users2"))^P;

ID_Users3      [$(if,$(eq,$(getvar,users3),""),~,$(eval,$(getvar,users3)))]^P(setvar "clayer" (getvar "users3"))^P;

ID_Users4      [$(if,$(eq,$(getvar,users4),""),~,$(eval,$(getvar,users4)))]^P(setvar "clayer" (getvar "users4"))^P;

ID_Users5      [$(if,$(eq,$(getvar,users5),""),~,$(eval,$(getvar,users5)))]^P(setvar "clayer" (getvar "users5"))^P;

 

Cela permet de rendre un programme plus interactif

www.le-metal.net, sur la métallerie

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é