Aller au contenu

Remplacer un texte par un autre


Messages recommandés

Posté(e)

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

:)

Posté(e)

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

Posté(e)

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

Posté(e)

 

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

Posté(e)

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

Posté(e)

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

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é