Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Je cherche à faire un menu contextuel qui me permettrai de selectionner, dans le cas ou plusieurs objets sont superposés, l'objet que je veux dans le menu qui apparaît.

:P

Je recherche le réacteur qui réagit à la selection. J'ai trouvé le réacteur pour la souris "vlr-mouse-reactor" mais il ne réagit pas au clic gauche. J'ai également trouvé le réacteur ":vlr-pickfirstModified" mais il ne me renvoie aucune selection et aucun position de pointeur. Peut-être y a t-il un moyen de recuperer la selection en cours mais je ne connait pas la fonction.

 

Si quelq'un à un idée cela pourrai m'avançer énormément parce qu'il ne me manque plus que ça.

 

Merci

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

Je me sens perdu avec le sens de ta question.

Le principe du réacteur, me semble t-il, ne peut avoir lieu que s'il y a une sélection pour pouvoir entrainer une modification réactive. Donc je ne voit pas trop comment mettre une réaction sur le mode de sélection. Mais je me trompe peut être, mais la démarche me parait illogique.

 

L'appui de la touche en mode selection active le "cycle de sélection" même a travers un lisp, mais tu le sais déjà je suppose.

Il est vrai que cette façon ne te renseigne aucunement sur l'entité sélectionnéee .

 

Je te propose donc quelques lignes qui font la même chose que l'appui de pendant la sélection, mais le cycle est effectué avec le click-gauche et les informations (type entité et calque) sont affiché dans la barre d'état,

Voilà une réponse qui va peut être ne pas te sastifaire, ou te permettrre d'avancer.

(defun c:what_select ( / l_ent e_sel pt_sel js l_js l_ent e_sel dxf_ent key)
(setq e_sel (entsel))
(cond
	(e_sel
		(setq
			pt_sel (osnap (cadr e_sel) "_nearest")
			js (ssget "_C" pt_sel pt_sel)
			l_js (ssnamex js)
		)
		(foreach n l_js (if (eq (type (cadr n)) 'ENAME) (setq l_ent (cons (cadr n) l_ent))))
		(setq e_sel (ssadd))
		(sssetfirst nil (ssadd (car l_ent) e_sel))
		(if (> (length l_ent) 1)
			(progn
				(setq dxf_ent (entget (car l_ent)))
				(grtext -1 (strcat (cdr (assoc 0 dxf_ent)) " " (cdr (assoc 8 dxf_ent))))
				(princ "\n[Click+gauche] pour faire défiler entité suivante; [Entrée]/[Espace]/[Click+droit] pour finir!.")
				(while (and (not (member (setq key (grread T 4 2)) '((2 13) (2 32)))) (/= (car key) 25))
					(cond
						((eq (car key) 3)
							(setq l_ent (append (cdr l_ent) (list (car l_ent))) e_sel (ssadd))
							(sssetfirst nil (ssadd (car l_ent) e_sel))
							(setq dxf_ent (entget (car l_ent)))
							(grtext -1 (strcat (cdr (assoc 0 dxf_ent)) " " (cdr (assoc 8 dxf_ent))))
						)
					)
				)
				(grtext)
			)
		)
	)
)
(prin1)
)

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

Posté(e)

Merci bonuscad pour ton programme,

je ne connaissais pas la fonction ssgetfirst. Avec le reacteur ":vlr-pickfirstModified" je peux recuperer la selection courante en temps réel.

En fait, pour repondre à bonuscad, la reaction ne doit se faire que si on selectionne un objet.

Une fonction doit verifier, à l'appel du reacteur, s'il n'y a pas d'objet en dessous de celui selectionné.

Maintenant, il me faudrait connaitre la position du curseur au moment de la selection pour savoir s'il y a d'autres objets en dessous.

 

;)

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é