Aller au contenu

Lisp remplace style de texte par un autre.


baba0000000000

Messages recommandés

N'ayant aucune compétance en lisp je me tourne vers vous.

J'ai trouvé un lisp à cette adresse: https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/lisp-to-replace-mtext-style-override-fcentury-b0-with-farial/m-p/4982864#M322002

le code en copie:

(vl-load-com)
(defun ChangeMtextStyle (mtxt)
(setq ntxt  "fArial Narrow" )
(setq oldtxts '("fCentury" "Fromans"));list of text styles to search
(setq mcont (cdr (assoc 1 mtxt)))

(foreach n oldtxts
(if (vl-string-search n mcont)
(progn
(setq nwtxt (vl-string-subst ntxt n mcont))
(setq mtxt (subst (cons 1 nwtxt) (assoc 1 mtxt) mtxt ))
(entmod mtxt)
(princ)
);progn
);if
);for

);defun


(defun c:ChangeTxtStyle (/ a ts n index b1 b c d b2)
(setq a (ssget "_X" '((0 . "*TEXT,ATTDEF"))))
(setq ts "ArialN")
(setq n (sslength a))
(setq index 0)
 (repeat n
  (setq b1 (entget (ssname a index)))
  (setq index (1+ index))
  (setq b (assoc 0 b1))
   (if (= "TEXT" (cdr B))
    (progn
     (setq c (assoc 7 b1))
     (setq d (cons (car c) ts))
     (setq b2 (subst d c b1))
     (entmod b2)
    );progn
   );if
(if ( = "MTEXT" (cdr B))
(ChangeMtextStyle b1)
);if
 );repeat
);defun
);defun

 

Déjà je pense que la dernière est à supprimer non ? On dirait un doublon.

 

De ce que je comprends dans le lisp:

 

mes variable :

(vl-load-com)
(defun ChangeMtextStyle (mtxt)
(setq ntxt  "fArial Narrow" )
(setq oldtxts '("fCentury" "Fromans"));list of text styles to search
(setq mcont (cdr (assoc 1 mtxt)))

 

setq ntxt : nouveau style

setq oldtxts : ancien style

je ne comprends pas trop les "f" devant, mais je me suis dit c'est peut être leur façon d'écrire.

 

Donc j'ai replacé par mes styles qui sont dans mon dessin, mais j'ai le retour du lisp est nil à chaque fois.

 

Merci pour le futur aide apporté.

Lien vers le commentaire
Partager sur d’autres sites

Salut

N'ayant aucune compétance en lisp je me tourne vers vous.

J'ai trouvé un lisp à cette adresse:

 

Déjà je pense que la dernière est à supprimer non ? On dirait un doublon.

Non, un est la commande, l'autre la fonction, en fin en principe, car c'est pas très bien programmé

je ne comprends pas trop les "f" devant, mais je me suis dit c'est peut être leur façon d'écrire.

Le f a été ajouté au nom de style pour un raison qui échappe complètement à la logique du programme..

 

Je t'ai modifié le code pour qu'il marche avec les textes et mtext, mais en dehors du mtext

(au départ le code était prévu pour pouvoir modifier la police forcée dans un mtext)

dans ce cas, il faut chercher l'utilitaire gratuit "striptexformat", ce sera plus sain.

a+

gg

 

(vl-load-com)

(defun ChangeMtextStyle (mtxt ntxt oldtxts)
(setq mcont (cdr (assoc 1 mtxt)))

(foreach n oldtxts
(if (vl-string-search n mcont)
(progn
(setq nwtxt (vl-string-subst ntxt n mcont))
(setq mtxt (subst (cons 1 ntxt) (assoc 1 mtxt) mtxt ))
(entmod mtxt)
(princ)
);progn
);if
);for

);defun




(defun c:ChangeTxtStyle (/ a ts n index b1 b c d b2 nstyle loldStyle)
(setq nstyle  "g-eaux-LT" );_le nouvau style que tu veux appliquer
(setq loldStyle '("ARIAL" ));_la liste des anciens styles de texte que tu veux changer

(setq a (ssget "_X" '((0 . "*TEXT,ATTDEF"))))
;;(setq ts "ArialN")
(setq n (sslength a))
(setq index 0)
 (repeat n
  (setq b1 (entget (ssname a index)))
  (setq index (1+ index))
  (setq b (assoc 0 b1))
   (if (or (= "TEXT" (cdr B))
    ( = "MTEXT" (cdr B))
    )
    (progn
     (setq c (assoc 7 b1))
     (setq d (cons (car c) nstyle))
     (setq b2 (subst d c b1))
     (entmod b2)
    );progn
   );if
       (if ( = "MTEXT" (cdr B))
       (ChangeMtextStyle b1 nstyle loldStyle)
       );if
 );repeat
);defun

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

Merci à toi GEGEMATIC.

 

Je viens de testé les modifications que tu as apporté.

 

J'ai fais plusieurs testes avant de me lancer ça dans tous les fichiers standard de la société.

 

Peut être que c'est moi qui n'est pas compris une chose.

J'ai bien vu les endroits qu'il fallait modifier grâce à tes commentaires.

Nouveau style: ENT-ARIAL

Ancien style: TECHNA-A1 ( j'ai pas fais de liste ça vient peut être de la le problème qui suit)

Autre style mais on le change pas TECHNA-R1 ( je ferais 2 lisp différent )

 

Un fois la moulinette passé j'obtiens ça:

Tout ce qui est TECHNA-A1 ===> ENT-ARIAL ça c'est OK merci à toi.

Mais le style TECHNA-R1 à eu la même punition :(

 

Une autre petite chose si c'est possible, si le style de destinations n'existe pas il applique le style courant au texte. Il ne peut pas rien faire à la place ?

 

Je sais j'en demande beaucoup. Mais y a enormément de plans standard à modifier.

Encore merci pour le temps que tu passes ( et les autres de forum ;) ) à nous aider.

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Au début on trouve une fonction qui est appelée si dans la sélection on trouve des entités "MTEXT"

Pour les "\f" c'est le formatage de ces MTEXT qui est en cause, la police est précédée de ces signes dans l'entité

J'aime pas les MTEXT je sais pourquoi...

0lg0.png

 

Amicalement

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é