JUJUZAZA Posté(e) le 4 juillet 2007 Posté(e) le 4 juillet 2007 Hello cadxp J'ai fait des recherches sur le site mais je ne trouve pas ce que je cherche : en fait je veux remplacer du texte simple, multi-ligne ou attribut de bloc, par un autre texte. j'ai actuellement deux plans, dont le 1er, je dois faire un remplacement par lot de texte simple et multi-ligne, et sur un 2nd plan, et de traiter le contenu des attributs en les remplaçant par un autre texte. Est-ce qu'un lisp ou script existe déjà? merci :)
(gile) Posté(e) le 4 juillet 2007 Posté(e) le 4 juillet 2007 Salut, (defun c:r-txt (/ str txt) (vl-load-com) (and (setq str (getstring T "\nEntrez le texte de remplacement: ")) (while (setq txt (car (nentsel "\nSélectionnez le texte ou attribut à remplacer: " ) ) ) (setq txt (vlax-ename->vla-object txt)) (if (member (vla-get-ObjectName txt) '("AcDbAttribute" "AcDbMText" "AcDbText") ) (vla-put-TextString txt str) (princ "\nEntité non valide.") ) ) ) (princ) ) [Edité le 5/7/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 5 juillet 2007 Posté(e) le 5 juillet 2007 Ou encore, pour remplacer tous les textes, mtextes et attributs semblables au texte sélectionné (ignore la casse), un peu comme rechercher / remplacer (defun c:f&r (/ str txt) (vl-load-com) (and (setq txt (car (nentsel "\nSélectionnez le texte ou attribut à remplacer: " ) ) ) (setq str (getstring T "\nEntrez le texte de remplacement: ")) (setq txt (vlax-ename->vla-object txt)) (member (vla-get-ObjectName txt) '("AcDbAttribute" "AcDbMText" "AcDbText")) (setq txt (vla-get-TextString txt)) (ssget "_X" '((0 . "INSERT,*TEXT"))) (vlax-for s (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)) ) (if (= (vla-get-ObjectName s) "AcDbBlockReference") (if (setq att (vlax-invoke s 'GetAttributes)) (foreach a att (if (= (strcase txt) (strcase (vla-get-TextString a))) (vla-put-TextString a str) ) ) ) (if (= (strcase txt) (strcase (vla-get-TextString s))) (vla-put-TextString s str) ) ) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
JUJUZAZA Posté(e) le 5 juillet 2007 Auteur Posté(e) le 5 juillet 2007 ok Gile merci pour ton aide je testais entre temps , le lisp de patrick_35 (cat.lsp) mais je pense que ton lisp me sera bien utile ... à +
lecrabe Posté(e) le 6 juillet 2007 Posté(e) le 6 juillet 2007 Hello Gilles C quoi la difference entre ces 2 routines ? :exclam: Le Decapode "pas bien reveillé" Autodesk Expert Elite Team
lecrabe Posté(e) le 6 juillet 2007 Posté(e) le 6 juillet 2007 Hello Le Decapode se reveille doucement ... ;) Bon j'ai compris, par contre je pense qu'il serait mieux de pouvoir faire une sélection "classique" : cad pas seulement un simple clic (= une seule sélection) mais aussi une fenêtre C / F / CP / etc (Utilisation de SHIFT) !? Ainsi on pourrait sélectionner un "paquet" de textes / mtextes / attributs ! :P Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 6 juillet 2007 Posté(e) le 6 juillet 2007 Salut lecrabe, on peut le faire avec un jeu de sélection : (defun c:r-texte (/ doc str) (vl-load-com) (and (setq str (getstring T "\nEntrez le texte de remplacement: ")) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (ssget '((0 . "*TEXT"))) (vlax-for txt (vla-get-ActiveSelectionSet doc) (vla-put-TextString txt str) ) ) (princ) ) Mais ça ne marchera que pour les textes et mtextes. L'intérêt de la fonction (nentsel), utilisée dans r-txt, est de pouvoir sélectionner aussi un attribut ou un mtexte dans un tableau. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 6 juillet 2007 Posté(e) le 6 juillet 2007 J'ai essayé de faire une synthèse : Après avoir entré le texte de remplacement, l'utilisateur fait un sélection classique.Les textes, mtextes et attributs uniques des blocs sélectionnés sont automatiquement remplacé.Si le jeu de sélection contient des tableaux ou des blocs avec plusieurs attributs, pour chacune de ces entité (mise en surbrillance) il est demandé à l'utilisateur de sélectionner les textes ou attributs à remplacer. (defun c:r-t (/ str doc typ att txt) (vl-load-com) (and (setq str (getstring T "\nEntrez le texte de remplacement: ")) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (ssget '((0 . "ACAD_TABLE,INSERT,*TEXT"))) (vlax-for obj (vla-get-ActiveSelectionSet doc) (setq typ (vla-get-ObjectName obj)) (cond ((wcmatch typ "*Text") (vla-put-TextString obj str) ) ((= typ "AcDbBlockReference") (setq att (vlax-invoke obj 'GetAttributes)) (cond ((= 1 (length att)) (vla-put-TextString (car att) str) ) (( (vla-Highlight obj :vlax-true) (while (setq txt (car (nentsel "\nSélectionnez l'attribut à remplacer: " ) ) ) (vla-put-TextString (vlax-ename->vla-object txt) str) ) (vla-Highlight obj :vlax-false) ) ) ) ((= typ "AcDbTable") (vla-Highlight obj :vlax-true) (while (setq txt (car (nentsel "\nSélectionnez le texte à remplacer: ")) ) (vla-put-TextString (vlax-ename->vla-object txt) str) ) (vla-Highlight obj :vlax-false) (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport ) ) ) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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