DenisHen Posté(e) le 29 mai 2019 Posté(e) le 29 mai 2019 Bonjour à tous. Suite à une erreur dans un fichier, j'ai des centaines de textes avec un Z. J'ai tenté de faire un petit lisp pour descendre les Z à 0, mais AutoCAD me sort un problème de liste :Commande: Z0_DENIS ; erreur: liste d'associations incorrecte: (1.77837e+06 7.22875e+06 115.207)Voici mon code :(defun c:Z0_Denis (/ i ent elst Select Coord) (if (setq Select (ssget "_X" '((0 . "TEXT")))) (progn (setq i 0) (while (setq ent (ssname Select i)) (setq elst (cdr (assoc 10 (entget ent))) i (+ 1 i) Coord (list (strcat (rtos (car elst) 2 3) "," (rtos (cadr elst) 2 3) ",0")) elst (subst (cons 10 Coord) (assoc 10 elst) elst) ) ;_ Fin de setq (entmod elst) ) ;_ Fin de while ) ;_ Fin de progn ) ;_ Fin de if (princ) ) ;_ Fin de defunSi 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)
lecrabe Posté(e) le 29 mai 2019 Posté(e) le 29 mai 2019 Hello DenisTu devrais mettre en oeuvre la fonction :TextAtSeaLevelBye, lecrabe Autodesk Expert Elite Team
(gile) Posté(e) le 29 mai 2019 Posté(e) le 29 mai 2019 Salut, Plusieurs choses :tu utilises une même variable elst pour différents types de données, AutoLISP le permet mais c'est une mauvaise pratique (généralement elst -pour entitylist- est utilisé pour une liste de données DXF telle que retournée par entget) ;tu construis une chaîne pour pour le groupe DXF 10 alors que ce groupe requiert une liste ;tu ne traites pas le groupe DXF 11 qui est déterminant pour les textes qui ne sont justifiés en bas à gauche.La programmation nécessite beaucoup de rigueur, surtout quand on utilise des langages à typage dynamique comme AutoLISP qui ne permettent pas de vérifier le type des variables avant l'exécution. Quand tu as une erreur, tu peux utiliser la méthode montrée dans le screencast ci-dessous pour arrêter l'interprétation du code à l'endroit de l'erreur et inspecter les variables à ce moment de l'exécution. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 29 mai 2019 Posté(e) le 29 mai 2019 Coucou Grillé par (gile) qui a pourtant pris le parti d'expliquer, ce qu'on a déjà fait mais qu'il faut refaire semble-t'il !!! Denis :Je te donne ma version qui permet en retirant le commentaire en ligne 9 de mettre les entités à 0 (zéro) ou à la valeur écrite dans le texteComme tu dois apprendre et te taper les commandes tu n'auras qu'un image : (hihi) C'est un cas global, je ne traite pas le code 11 comme le spécifie - à juste titre - (gile)Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 29 mai 2019 Posté(e) le 29 mai 2019 Ou encore, puisque LISP n'est qu'imbrications et traitement de listes : Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 29 mai 2019 Posté(e) le 29 mai 2019 Hello Gilles SUPER tu as respecte le nom de Fonction/Routine proposee ! Bye, lecrabe Autodesk Expert Elite Team
DenisHen Posté(e) le 29 mai 2019 Auteur Posté(e) le 29 mai 2019 Salut à tous, et mille merci pour votre aide... J'ai utilisé le code de Didier, que j'ai soigneusement recopié, du coup, j'ai bien compris où était mon erreur, en fait, mes erreurs... J'ai fais évoluer le code pour qu'il fasse de même avec les blocs... Le voici :(defun c:Z0_Denis (/ jeusel elist ent n pins newpt txstr) (if (setq jeusel (ssget "_x" '((0 . "*TEXT,INSERT")))) (progn (setq n -1) (repeat (sslength jeusel) (setq elist (entget (setq ent (ssname jeusel (setq n (1+ n))))) pins (cdr (assoc 10 elist)) txstr (cdr (assoc 1 elist)) elev 0 newpt (list (car pins) (cadr pins) elev) ) ;_ Fin de setq (entmod (subst (cons 10 newpt) (assoc 10 elist) elist)) (entupd ent) ) ;_ Fin de repeat ) ;_ Fin de progn ) ;_ Fin de if (princ) ) ;_ Fin de defun Encore merci à vous... 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)
didier Posté(e) le 29 mai 2019 Posté(e) le 29 mai 2019 Coucou Recopier est une très bonne façon d'apprendre à mes yeux.Ce n'est pas "pomper" c'est "écrire", si ensuite tu mets ton nom dans le nom de la commande tu te l’appropries et c'est un autre genre de débat mais comme tu nous as habitués à mettre du "Denis" un peu partout on ne t'en veut pas plus que ça.Pour ce qui est de l'apprentissage c'est formateur de taper les commandes de quelque chose qui marche (vérifié) Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 29 mai 2019 Auteur Posté(e) le 29 mai 2019 Re, Effectivement, je place des "Denis" un peu partout, mais c'est à cause de tout un tas de commandes qui existes à mon boulo, certaines sont "anonymes" et d'autre porte le nom (mes prédécesseurs) de celui ou celle qui l'a importé, créé, modifié, publié... C'est plus une question de traçabilité que de vanité... ;) Surtout que celles qui portent mon nom ne sont utilisées que par moi... Les autres, plus "officielles" et partagées dans toutes nos agences, portent le nom de la société, mon nom ne figure qu'en commentaire dans le code... 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)
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