Matt666 Posté(e) le 18 décembre 2007 Posté(e) le 18 décembre 2007 Salut ! Suite à ce message, je pose la même question ici, au cas où des gens sauraient faire... Est-ce possible de donner le choix à l'utilisateur de :- Cliquer sur une entité- Entrer le nom de l'entité?Bien sur, sans avoir à faire un entrée pour entrer le nom.... Exemple : (car (entsel "\nCliquer sur une entité ou entrer le nom du calque : ")) Avec (initget 128) avant, ça fonctionne, mais les espaces sont considérés comme des entrées.... Voilà !Je vois pas... A bientot !Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
Bred Posté(e) le 18 décembre 2007 Posté(e) le 18 décembre 2007 Salut,une manière détourné :(setq Q (getstring t "\n Entrer le nom du calque < Cliquer sur une entité > : ")) (if (Equal Q "") (while (not ent) (setq ent (car (entsel "\n Cliquer sur une entité :"))) ) ) [Edité le 18/12/2007 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Matt666 Posté(e) le 18 décembre 2007 Auteur Posté(e) le 18 décembre 2007 Ah ok pas mal ! Mais c'est pas tout à fait ça que je veux... J'avais donné ça, mais ça n'est pas tout à fait ça, encore :(INITGET 128) (setq q (entsel "\nSelect object or tape name of layer: ")) (cond ((= (type q) 'STR) (setq layer q)) ((= (type q) 'LIST) (setq layer (cdr (assoc 8 (entget (car q)))))) ) EDIT : J'avais pas vu la réponse du type sur le forum autocad...J'ai pas compris grand chose à sa réponse, mais je trouve que le problème de l'espace est plus important... Et je ne sais pas du tout comment faire... Pour ta routine, il faut quand même passer par une entrée pour sélectionner l'entité...Donc ça ne fonctionne pas.. [Edité le 18/12/2007 par Matt666] "Chacun compte pour un, et nul ne compte pour plus d'un."
Bred Posté(e) le 18 décembre 2007 Posté(e) le 18 décembre 2007 Zut !Je pensais y arriver comme ça, mais ça plante si il y a des espaces dans le nom du calque (ce sui revient à ton problème...)(setq calq "") (vlax-for i (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) (setq calq (strcat (vla-get-Name i) " " calq))) (initget calq) (setq ent (entsel "\nCliquer sur une entité ou entrer le nom du calque : ")) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Matt666 Posté(e) le 18 décembre 2007 Auteur Posté(e) le 18 décembre 2007 Ah oui... :D Franchement je vois pas du tout comment faire... Compliqué ce truc ! "Chacun compte pour un, et nul ne compte pour plus d'un."
bonuscad Posté(e) le 19 décembre 2007 Posté(e) le 19 décembre 2007 Peut être avec (grread) (defun Entsel_Getstring ( / ent key kstr) (setq kstr nil ent "") (princ "\nSelectionner un objet / Chaine de caractère: ") (while (and (not (equal (setq key (grread T 4 2)) '(2 13))) (/= (car key) 3)) (if (eq (car key) 2) (progn (setq kstr (cons (cadr key) kstr)) (princ (chr (cadr key))) ) ) ) (if (eq (car key) 3) (if (setq ent (nentselp (cadr key))) (setq ent (entget (car ent))) (progn (princ "\nAucune sélection") (setq ent nil)) ) (foreach n kstr (setq ent (strcat (chr n) ent))) ) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 19 décembre 2007 Posté(e) le 19 décembre 2007 Ah ah ! Mister grread ! Très intéressant, j'ai essayé d'améliorer la routine en lui adjoignant un truc que j'avais pour récupérer les saisies au clavier et qui prend en compte la touche "Retour/effacer". La routine, renommée GetEntStr, requiet un argument (le message d'invite ou nil) et retourne un nom d'entité (ename), une chaine non vide ou nil. ;; GetEntStr (d'après Bonuscad) ;; Demande à l'utilisateur de sélectionner un objet ou ;; d'entrer une chaîne de caractères ;; ;; Argument ;; msg : un message d'invite ou nil ;; (défaut : "Sélectionnez un objet ou entrez chaîne de caractère: ") ;; ;; Retour ;; un nom d'entité, une chaîne non vide ou nil (defun GetEntStr (msg / loop key pt ent str) (setq loop T) (princ (strcat "\n" msg)) (while (and (setq key (grread T 4 2)) (/= (car key) 3) loop) (cond ((= 5 (car key)) (setq pt (cadr key)) ) ((equal key '(2 13)) (setq loop nil) ) (T (if (= (cadr key) 8) ;_ 8 = retour/effacer (or (and str (/= str "") (setq str (substr str 1 (1- (strlen str)))) (princ (chr 8)) (princ (chr 32)) ) (setq str nil) ) (or (and str (setq str (strcat str (chr (cadr key))))) (setq str (chr (cadr key))) ) ) (and str (princ (chr (cadr key)))) ;_ affichage sur la ligne de commande ) ) ) (cond ((and (listp (cadr key)) (setq ent (ssget pt))) (ssname ent 0)) ((and str (/= str "")) str) (T nil) ) ) ;; Exemple d'utilisation pour obtenir un nom de calque (defun getlay (/ lay) (while (not (and (setq lay (GetEntOrString "Spécifiez le calque ou sélectionnez un objet: " ) ) (or (= (type lay) 'ENAME) (tblsearch "LAYER" lay) ) ) ) (if lay (princ (strcat "\nLe calque \"" lay "\" n'existe pas.")) (princ "\Aucun objet sélectionné.") ) ) (if (= (type lay) 'STR) lay (cdr (assoc 8 (entget lay))) ) ) [Edité le 19/12/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Matt666 Posté(e) le 19 décembre 2007 Auteur Posté(e) le 19 décembre 2007 Grread... Ah bah oui !!! Merci à vous deux, cette bout de code risque d'être bien pratique, dans beacoups de routines !!! Dément... A bientot !Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
(gile) Posté(e) le 19 décembre 2007 Posté(e) le 19 décembre 2007 J'ai apporté une petite amélioration (la possibilité de spécifier un message d'invite) et j'ai ajouté un exemple d'utilisation pour récupérer un nom de calque valide. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Matt666 Posté(e) le 20 décembre 2007 Auteur Posté(e) le 20 décembre 2007 Désolé d'être chiant, mais ne peut-on pas faire une routine "getselorstring" ? "Chacun compte pour un, et nul ne compte pour plus d'un."
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