DenisHen Posté(e) le 23 janvier 2018 Posté(e) le 23 janvier 2018 Bonjour à tous, et excellente année à vous. Voilà, je cherche à faire une petite routine qui a besoin que l'utilisateur sélectionne un bloc nommé "PTTOPO". J'aimerais faire une boucle qui attend la bonne sélection de ce bloc. J'ai déjà écris ça mais je tourne en rond... ;;; Sélectionner uniquement le bloc "PTTOPO" (defun c:testSelectPTTOPO () (while ((/= (cdr (assoc 2 (entget (car (setq Txt_Alti (entsel "\nSélectionnez le bloc contenant l'altitude :"))))) ) ;_ Fin de cdr "PTTOPO" ) ;_ Fin de /= ) ) ;_ Fin de while (setq Txt_Alti (car Txt_Alti)) (setq Alti (getpropertyvalue Txt_Alti "ALT")) (princ "\nAlti : ") (princ Alti) (setq Coord (cdr (assoc 10 (entget Txt_Alti)))) (princ "\nCoord : ") (princ Coord) (princ) ) ;_ Fin de defun AutoCAD me répond toujours la même chose, que je sélectionne le bon bloc ou une autre entité : Sélectionnez le bloc contenant l'altitude :no function definition: niltype d'argument incorrect: VLA-OBJECT nilCommande: Si quelqu'un a une astuce, un conseil... je suis preneur... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 23 janvier 2018 Posté(e) le 23 janvier 2018 Salut, En général on fait une boucle (while (not ...)) dont on ne peut sortir qu'une fois la conditions remplie ou en faisant Echap ce qui met fin à l'exécution de la routine.Le plus souvent, comme il y a plusieurs conditions et qu'il est préférable de les tester une après l'autre pour éviter une erreur (par exemple : (entget nil) si l'utilisateur a cliqué dans le vide), on préfère mettre les conditions dans une expression (and ...) qui retournera ni à la première condition non remplie. (while (not (and (setq Txt_Alti (car (entsel "\nSélectionnez le bloc contenant l'altitude : "))) (= (cdr (assoc 0 (setq dxf (entget Txt_Alti)))) "INSERT") (= (cdr (assoc 2 dxf)) "PTTOPO") ) ) ) (setq Alti (getpropertyvalue Txt_Alti "ALT")) ... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 23 janvier 2018 Auteur Posté(e) le 23 janvier 2018 Salut (gile) et merci pour cette réponse. C'est exactement ça. C'est vrai que, vu comme ça, c'est bien plus clair et efficace... Merci encore... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 23 janvier 2018 Auteur Posté(e) le 23 janvier 2018 Encore une petite question, si je mets dans la condition "TEXT,MTEXT", celà fonctionnerait-il ? Car je boucle avec ça :;;; Sélectionner uniquement le bloc "PTTOPO" (defun c:testSelectText () (while (not (and (setq Txt_Prof (car (entsel "\nSélectionnez le texte ou la profondeur :"))) (= (cdr (assoc 0 (entget Txt_Prof))) "MTEXT") ) ;_ Fin de and ) ;_ Fin de not ) ;_ Fin de while ;(setq Txt_Alti (car Txt_Alti)) (setq Prof (cdr (assoc 1 (entget Txt_Prof)))) (princ "\nProf : ") (princ Prof) (setq Coord (cdr (assoc 10 (entget Txt_Prof)))) (princ "\nCoord : ") (princ Coord) (princ) ) ;_ Fin de defun Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 23 janvier 2018 Auteur Posté(e) le 23 janvier 2018 Ok, j'ai trouvé, il fallait placer un (or :;;; Sélectionner uniquement le bloc "PTTOPO" (defun c:testSelectText () (while (not (and (setq Txt_Prof (car (entsel "\nSélectionnez le texte ou la profondeur :"))) (or (= (cdr (assoc 0 (entget Txt_Prof))) "MTEXT") (= (cdr (assoc 0 (entget Txt_Prof))) "TEXT")) ) ;_ Fin de and ) ;_ Fin de not ) ;_ Fin de while ;(setq Txt_Alti (car Txt_Alti)) (setq Prof (cdr (assoc 1 (entget Txt_Prof)))) (princ "\nProf : ") (princ Prof) (setq Coord (cdr (assoc 10 (entget Txt_Prof)))) (princ "\nCoord : ") (princ Coord) (princ) ) ;_ Fin de defun Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
VDH-Bruno Posté(e) le 23 janvier 2018 Posté(e) le 23 janvier 2018 Bonjour, Ok, j'ai trouvé, il fallait placer un (or ou éventuellement avec wcmatch:(wcmatch (cdr (assoc 0 (entget Txt_Prof))) "*TEXT") A+ Apprendre => Prendre => Rendre
DenisHen Posté(e) le 24 janvier 2018 Auteur Posté(e) le 24 janvier 2018 Salut VDH-Bruno, et merci pour ton aide. Je n'aurais jamais pensé à ça... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
VDH-Bruno Posté(e) le 24 janvier 2018 Posté(e) le 24 janvier 2018 Re, A tout hasard, par le passé quant j'avais ce type de besoin à savoir "récupérer en AutoLisp la valeur d'un texte par sélection", j'avais tendence à préférer nentsel à entsel cela étend la portée de la fonction aux entités textes contenue dans des entités complexes (tel que les attributs de blocs ou les cellules des entités tableaux),après il suffit seulement de modifier le "pattern" de la fonction wcmatch (wcmatch (cdr (assoc 0 (entget Txt_Prof))) "*TEXT,ATTRIB") A+ 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