didicools Posté(e) le 8 août 2011 Posté(e) le 8 août 2011 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 whileJe 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
Carboleum Posté(e) le 8 août 2011 Posté(e) le 8 août 2011 Pour sortir de la boucle en tapant "q": (while (progn (initget "Quitter") (not (= "Quitter" (setq o (entsel "\nChoix d'un objet ou Quitter: ")))))) Pour sortir en tapant , je ne connais pas. J'ai cherché du coté d'initget, sans résultat Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
didicools Posté(e) le 9 août 2011 Auteur Posté(e) le 9 août 2011 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
bonuscad Posté(e) le 9 août 2011 Posté(e) le 9 août 2011 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
didicools Posté(e) le 9 août 2011 Auteur Posté(e) le 9 août 2011 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
bonuscad Posté(e) le 9 août 2011 Posté(e) le 9 août 2011 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
bryce Posté(e) le 9 août 2011 Posté(e) le 9 août 2011 Bonjour, Peut-être de cette façon ? (setq o T) (while (/= o "Quitter") (initget "Quitter") (if (setq o (entsel "\nChoix de l'objet ou [Quitter] : ")) [...] ) ) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
Carboleum Posté(e) le 9 août 2011 Posté(e) le 9 août 2011 (ssget '((0 . "INSERT"))) C'est beau! :-) Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
capde06 Posté(e) le 10 août 2011 Posté(e) le 10 août 2011 dans cette exemple si tu clic sur rienil ne se passe rien (defun c:test () (setq sel nil) (while (not(setq sel (entsel "\nchoiix de l'objet")))) ) Vous fîtes ce que vous pûtes et vous m'épatâtes !!!!
VDH-Bruno Posté(e) le 11 août 2011 Posté(e) le 11 août 2011 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant