Matt666 Posté(e) le 20 septembre 2007 Partager Posté(e) le 20 septembre 2007 Salut !Voici, pour ceux qui n'ont pas AutoCAD et les outils express, deux routines de conversion de textes...;;Transforme des textes simples en textes mutliples (defun c:T2MT (/ CMDECHO ENT41 ENTNUN MYERROR NEWTXT NOUVENT TEMPERROR TOU) (setq cmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) (command "_undo" "d") (princ "\nSélectionner les textes à transformer en un texte multiple unique...\n") (if (setq tou (ssget '((0 . "text")))) (progn (setq entnun (entget (ssname tou (setq cntr 0))) newtxt (cdr (assoc 1 entnun)) ) (entdel (ssname tou 0)) (while (setq nouvent (ssname tou (setq cntr (1+ cntr)))) (setq newtxt (strcat newtxt " " (cdr (assoc 1 (entget nouvent))))) (entdel nouvent) ) (if (> (strlen newtxt) 40) (setq ent41 (* (cdr (assoc 40 entnun)) 40)) (setq ent41 (* (cdr (assoc 40 entnun)) (strlen newtxt))) ) (entmake (list (cons 0 "MTEXT") (cons 1 newtxt) (cons 6 (cdr (assoc 6 entnun))) (cons 7 (cdr (assoc 7 entnun))) (cons 8 (cdr (assoc 8 entnun))) (cons 10 (cdr (assoc 10 entnun))) (cons 40 (cdr (assoc 40 entnun))) (cons 41 ent41) (cons 50 (cdr (assoc 50 entnun))) (cons 62 (cdr (assoc 62 entnun))) (cons 71 (aligne (cdr (assoc 72 entnun)) (cdr (assoc 73 entnun)))) )) (princ "\nConversion réussie.") )) (command "_undo" "f") (setvar "cmdecho" cmdecho) (princ) )Bon le principal pb dans cette routine est de donner une largeur au mtexte... Donc ya une bidouille un peu pourrie, qui va surement faire rire les pros du lisp ;) ;;Transforme des textes multiples en textes simples (defun c:MT2T (/ CMDECHO CN CNT3 CNTR ENT10 ENT72 ENT73 JUSTIF TOU) (setq cmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) (command "_undo" "d") (princ "\nSélectionner les textes multiples à transformer en textes simples...\n") (if (setq tou (ssget '((0 . "MTEXT")))) (repeat (setq cn (sslength tou)) (setq entnun (entget (ssname tou (setq cn (1- cn)))) justif (aligne (cdr (assoc 71 entnun)) nil) ent72 (atoi (substr justif 1 1)) ent73 (atoi (substr justif 2 1)) ent10 (cdr (assoc 10 entnun)) ) (foreach pt (str2lst (cdr (assoc 1 entnun)) "\\P") (if (/= pt "") (entmake (list (cons 0 "TEXT") (cons 1 pt) (cons 6 (cdr (assoc 6 entnun))) (cons 7 (cdr (assoc 7 entnun))) (cons 8 (cdr (assoc 8 entnun))) (cons 11 ent10) (cons 40 (cdr (assoc 40 entnun))) (cons 50 (cdr (assoc 50 entnun))) (cons 62 (cdr (assoc 62 entnun))) (cons 72 ent72) (cons 73 ent73) )) ) (setq ent10 (list (car ent10) (- (cadr ent10) (* (cdr (assoc 44 entnun)) (/ 5.00 3.00) (cdr (assoc 40 entnun)))) (caddr ent10) )) ) (entdel (ssname tou cn)) (princ "\nConversion réussie.") ) ) (command "_undo" "f") (setvar "cmdecho" cmdecho) (princ) )Le pb pour celui a été de trouver le décalage entre les lignes d'un mtexte... Merci Gile, qui a répondu ici... Et pour finir, une routine qui permet de recopier l'alignement des textes... C'est pareil, un peu bidouille, mais ça a le mérite de fonctionner !;;Pour gérer les variables de justification de texte (defun aligne (arg1 arg2 / lst) (cond ((and arg1 arg2) (setq lst ' ((1 . "03")(1 . "04")(1 . "05")(1 . "30")(2 . "01")(2 . "31")(3 . "02")(3 . "32") (4 . "20")(5 . "21")(6 . "22")(7 . "10")(8 . "11")(9 . "12")(1 . "00")) ) (car (nth (position (strcat (itoa arg1)(itoa arg2))(mapcar 'cdr lst)) lst)) ) ((and arg1 (not arg2)) (setq lst '((1 . "03")(2 . "13")(3 . "32")(4 . "02")(5 . "12")(6 . "22")(7 . "01")(8 . "11")(9 . "21"))) (cdr (nth (position arg1 (mapcar 'car lst)) lst)) ) ) ) La fonction hors autolisp pur ("position") est disponible là ! Au passage copiez toutes ces fonctions et lancez-les au démarrage, elles sont très pratiques ! Quand je te disais, Gile, que je les utilise tous les jours tes équivalences :P Voilà, évidemment ces routines sont largement améliorables, donc si quelqu'un est tenté, n'hésite pas ! A bientot.Matt. "Chacun compte pour un, et nul ne compte pour plus d'un." Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bred Posté(e) le 20 septembre 2007 Partager Posté(e) le 20 septembre 2007 Salut,beau boulot !je n'ai pas testé, mais queqlues remarque : ;;Transforme des textes simples en textes mutliplesPourquoi ne pas utiliser "entmode" ? ;;Transforme des textes multiples en textes simplesPourquoi ne pas tout simplement décomposer le MTEXT ? Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Matt666 Posté(e) le 20 septembre 2007 Auteur Partager Posté(e) le 20 septembre 2007 Merci !! Pourquoi ne pas utiliser "entmode" ?je n'ai pas réussi à passer de text à mtext en entmod Pourquoi ne pas tout simplement décomposer le MTEXT ?Non diponible avec le logiciel que j'utilise... :mad: (moteur intellicad) Merci pour tes remarques !A bientot..Matt "Chacun compte pour un, et nul ne compte pour plus d'un." Lien vers le commentaire Partager sur d’autres sites More sharing options...
tiboulen Posté(e) le 20 septembre 2007 Partager Posté(e) le 20 septembre 2007 Sur une version light avec ltextender donc pour faire marcher les lispj'ai installe les outils express, en declarant le chemin sur un repertoireou j'ai installe les fichiers pris sur un cd de autocad completet ca marche donc j'ai la conversion text en mtext Lien vers le commentaire Partager sur d’autres sites More sharing options...
JUJUZAZA Posté(e) le 20 septembre 2007 Partager Posté(e) le 20 septembre 2007 Salut CADxp Exact BRED, je n'est jamais pensé à décomposer un MTEXT pour le transformer en simple texte, par contre utiliser (entmode) , là j'ai fait un essai ça ne donne rien es_tu sur de l'orthographe de (entmode) ? Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Matt666 Posté(e) le 20 septembre 2007 Auteur Partager Posté(e) le 20 septembre 2007 es_tu sur de l'orthographe de (entmode) C'est (entmod) la vraie orthographe... Cette fonction sert entre autres à substituer une code DXF par un autre...Mais ça ne fonctionne pas sur le code dxf 0... Tiboulen, ce message s'adresse surtout aux utilisateurs des moteurs intellicad...Mais j'ai déjà entendu parler de ltextender, qui permet d'utiliser du lisp sur une version lt de autoCAD... Et ça fonctionne bien ? C'est vrai que c'est une bonne alternative, et assez bon marché... à peu drès 400 € c'est ça ? En plus si on peut insérer les outils express , c'est vraiment dément !! [Edité le 20/9/2007 par Matt666] "Chacun compte pour un, et nul ne compte pour plus d'un." Lien vers le commentaire Partager sur d’autres sites More sharing options...
JUJUZAZA Posté(e) le 20 septembre 2007 Partager Posté(e) le 20 septembre 2007 merci pour l'orthographe, mais entmod ne fonctionne pas !!!j'ai AutoCAD v2008est ce normal ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Matt666 Posté(e) le 20 septembre 2007 Auteur Partager Posté(e) le 20 septembre 2007 Attends...Comment utilises-tu entmod ???? :casstet: ici, pour essayer, il faut dans ta routine que tu intègres un (entmod (subst (cons 0 "MTEXT")(assoc 0 ;;;entget de l'entité) ;;;entget de l'entité))Tu vois ? J'ai l'impression (je dois me planter) que tu entres entmod dans la ligne de commande...Forcément ça ne fonctionnera pas !! :) A bientotMatt. "Chacun compte pour un, et nul ne compte pour plus d'un." Lien vers le commentaire Partager sur d’autres sites More sharing options...
JUJUZAZA Posté(e) le 21 septembre 2007 Partager Posté(e) le 21 septembre 2007 Exact Matt666 ,je n'ai pas du tout compris le message, et loin de savoir que ça concerner une routine !!! :o Lien vers le commentaire Partager sur d’autres sites More sharing options...
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