Dominique974 Posté(e) le 28 juin 2023 Posté(e) le 28 juin 2023 Bonjour, Il y fort longtemps, Patrick_35 m'avait bricoler un bout de lisp pour créer un sommaire automatique, ce LISP me fait gagner un temps fou ! Le Lisp créé un Mtext en allant chopper des données dans des attributs de mes cartouches. Je le bricole moi aussi en l'adaptant au divers bloc de cartouche que j'ai, mais j'arrive avec un problème, le LISP ne semble pas gérer plus de 20 onglets de présentation (après plusieurs tests). Pouvez vous m'aguiller sur le soucis ? Je travail actuellement sur des plans avec jusqu'à une 50aine de phases. Je vous mets en pièce jointe le LISP. Je vous ferez un export du dwg avec les présentations si besoin par la suite. Citation (defun c:som(/ ent doc lst sel txt) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget "x" (list (cons 0 "insert") (cons 2 "CART003") (cons 66 1) (cons 67 1))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (setq lst (cons (cons (cdr (assoc 410 (entget (vlax-vla-object->ename ent)))) (vla-get-textstring (nth 2 (vlax-invoke ent 'getattributes)))) lst)) ) (vla-delete sel) (setq lst (vl-sort lst '(lambda(a B)(< (car a) (car B))))) (and (ssget "x" (list (cons 0 "mtext") (cons 410 "01"))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (and (wcmatch (vla-get-textstring ent) "*LSommaire :*") (vla-delete ent) ) ) (vla-delete sel) ) ) (setq txt (strcat "{\\LSommaire :\\P\\P\\pxsm1.5;\\fArial|b1|i0|c0|p34;\\H0.71429x;\\lFOLIO " (caar lst) " : \\fArial|b0|i0|c0|p34;" (cdar lst) "\\P\\fArial|b1|i0|c0|p34;\\H1.00001x;FOLIO " (caadr lst) " : \\fArial|b0|i0|c0|p34;" (cdadr lst) ) ) (foreach ent (cddr lst) (setq txt (strcat txt "\\P\\fArial|b1|i0|c0|p34;FOLIO " (car ent) " : \\fArial|b0|i0|c0|p34;" (cdr ent) ) ) ) (setq txt (strcat txt "}")) (entmake (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 100 "AcDbMText") (cons 410 "01") (cons 10 '(20.0000 133.5000 0.0)) (cons 40 3.5) (cons 1 txt) ) ) ) ) (vla-endundomark doc) (princ) ) Peace !
Dominique974 Posté(e) le 29 juin 2023 Auteur Posté(e) le 29 juin 2023 J'ai regardé un peu de mon coté et j'ai trouvé ça concernant "assoc" : Citation Une liste d'association n'est certainement pas la façon la plus efficace de construire une table indexée. Mais pour des tables de petite taille, c'est une méthode simple car Common Lisp fournit plusieurs fonctions permettant de la manipuler. Est ce que ça peut venir de la ? Si oui, y a t-il une solution pour palier au problème ? Peace.
bonuscad Posté(e) le 29 juin 2023 Posté(e) le 29 juin 2023 Bonjour, Je pense que le problème vient du (entmake) concernant le MTEXT au niveau du (cons 1 txt) En effet si la variable txt contient une chaîne supérieur à 250 caractères, la chaîne doit être divisée par bloc de 250 caractères qui seront placé dans liste avec la clé 3 (autant de foi que nécessaire) Voir l'aide DXF sur le MTEXT 1 Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bonuscad Posté(e) le 29 juin 2023 Posté(e) le 29 juin 2023 Pour faire plus simple (surtout que le lisp proposé par Patrick_35 utilisait déjà les fonction (vla-), serait de remplacer: (entmake (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 100 "AcDbMText") (cons 410 "01") (cons 10 '(20.0000 133.5000 0.0)) (cons 40 3.5) (cons 1 txt) ) ) par cette ligne: (vla-AddMText (vla-get-ModelSpace doc) (vlax-3d-point 20.0 133.5 0.0) 3.5 txt) car dans ce cas la fonction (vla-AddMText) s'occupe de gérer les blocs par 250 caractères en créant les blocs (3 . "xxxxxx") nécessaires. Je n'ai pas testé, mais cela devrait fonctionner, par contre je ne sais pas dans quel espace cela doit être écrit (dans la ligne donnée c'est dans l'espace Objet) 1 Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Dominique974 Posté(e) le 29 juin 2023 Auteur Posté(e) le 29 juin 2023 Bim ! C'est parfait !! j'ai changé le ModelSpace en PaperSpace, pour le mettre en espace papier, et c'est nickel. Merci beaucoup 🫡 ! Peace.
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