Aller au contenu

[Résolu] Petit problème de liste


DenisHen

Messages recommandés

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 defun

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)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 texte

Comme tu dois apprendre et te taper les commandes tu n'auras qu'un image : (hihi) rde4.png

C'est un cas global, je ne traite pas le code 11 comme le spécifie - à juste titre - (gile)

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

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)

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é