Aller au contenu

Pb pour sortir d\'un WHILE


didicools

Messages recommandés

Bonjour,

 

Je souhaiterai faire une boule pour selectionner les un a la suite des autre un certain nombre de block, j'utilise donc en "entsel" dans un "while". jusque la pas pb.

 

(while (setq SEL_BLOC (entsel "\nChoix d'un objet : "))

 

Le pb est que lorsque je clique dans une zone vide du dessin je sort de mon while

Je souhaiterai sortir de mon while en tapant sur la touche "entrée" ou eventuellement en rentrant une lettre au clavier.

 

Est ce que cela est possible ? sinon quelle instruction puis je utiliser pour réaliser une selection succéssive de block et sortir quand je le décide ?

 

Merci pour votre aide

Lien vers le commentaire
Partager sur d’autres sites

Merci Carboleum!

 

C'est deja une belle avancée, par contre maintenant que je clique sur une partie vide du dessin, le programme plante.

N'y aurai t il pas moyen de gérer le "nil" ? c'est a dire que quand un "nil" apparait le lisp continue quand meme?

 

merci

Lien vers le commentaire
Partager sur d’autres sites

Une boucle dont on peut sortir avec Espace, Entrée ou Clic-droit.

((lambda ( / key ent)
(princ "\nChoix d'un objet: ")
(while (and (not (member (setq key (grread T 4 2)) '((2 13) (2 32)))) (/= (car key) 25))
	(if (eq (car key) 3)
		(if (setq ent (nentselp (cadr key)))
			(print (entget (car ent)))
		)
	)
)
(prin1)
))

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

Lien vers le commentaire
Partager sur d’autres sites

J'arrive pas a ce que je veux avec la routine de bonuscad.

A chaque sélection de bloc de bloc, je récupère le nom de celui ci en faite et avec le lisp de bonuscad, a chaque déplacement la variable "ent" est redefinie. trop compliqué pour moi <acronym class=dict title=

Sinon avec la routine de Carboleum c'est deja pas mal, reste juste le nil a gérer..

 

Merci a vous

Lien vers le commentaire
Partager sur d’autres sites

J'arrive pas a ce que je veux avec la routine de bonuscad

 

Ne connaissant pas la suite de ce que tu veux faire... j'ai construit le code en exemple.

 

Mais je me demande en fait si une sélection filtrée ne suffirait pas, du style:

 

(ssget '((0 . "INSERT"))) 

 

avec celui-ci tu ne sort pas du mode de sélection même si tu clique à coté.

après suivant ce que tu veut faire, il faut utiliser (sslength) (ssname indicé) pour récupérer les infos des objet sélectionnés.

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous,

 

Bien que je sois persuadé qu’avec :

(ssget '((0 . "INSERT")))

 

bonuscad a donné la plus simple et la meilleure formulation. Néanmoins l’exercice m’a tout de même inspiré, alors j’y vais également de ma petite variante qui répond aux conditions suivante :

 

Sortie de boucle

- Echappe (prévoir tout de même la gestion d’erreur)

- Barre d’espacement ou Entrée

- Saisie clavier avec Q ou Quitter (ou Clic BD)

 

La fonction boucle pour

- Une saisie arbitraire au clavier

- Un clic sur une zone vide du dessin ou une entité non valide (autre qu’un bloc)

- Un bloc cliqué avec le curseur en affichant le non d’entité principal

 

 

Le code :

 
((lambda (/ pt ss)
  ;; Apparence curseur: pointage -> sélection (type R12)
  (ai_sysvar (list (cons "aperture" (getvar "pickbox"))
	    '("autosnap" . 0)
	    '("osmode" . 512)
      )
  )
  (setq pt T)
  (while (not (or (= pt "Quitter") (null pt)))
    (initget 128 "Quitter")
    (setq pt (getpoint "\nChoix d'un objet ou [Quitter]: "))
    (if (listp pt)
      (if (setq ss (ssget pt '((0 . "INSERT"))))
 ;; affiche le nom d'entité
 (print (ssname ss 0))
      )
    )
  )
  ;; resitue aux variables leurs valeurs
  (ai_sysvar nil)
)
)

 

 

 

 

[Edité le 11/8/2011 par VDH-Bruno]

Apprendre => Prendre => Rendre

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é