- Marquer comme nouveau
- Marquer
- S'abonner
- Sourdine
- S'abonner au fil RSS
- Lien permanent
- Imprimer
- Signaler
Pour faire suite à un autre sujet, j'expose ma problématique.
J'ai fait une demande d'aide pour la "recherche et remplace" de textes dans autocad + insertion d'un nuage de révision autour des textes mmodifiés. Je livrerai le code ci dessous qui fonctionne très bien.
Ce nouveau sujet complète cela par: Rechercher et remplacer des textes contenus dans des textmult et dans des valeurs d'attributs de blocs.
Pour m'expliquer, je reprend des plans autocad qui ont étés montés de façon disparate. Je me retrouve donc à devoir modifier des textes qui sont soit dans des "textes", soit dans des "textemult" soit en "valeur d'attributs" de blocs.
Le code ci dessous fonctionne pour des "textes", mais pas pour les "textemult" ni si ils sont des "valeurs d'attributs".
Ma question, sauriez vous m'aiguiller pour que le code ci dessous puisse aussi intégrer ses deux autres cas de figure?
(defun c:batch_gricatti (/ work_directory
document_to_process
modelspace_collection
height llc
ruc revcloud_object)
(setq work_directory
(strcat
(acet-ui-pickdir
"Pick directory to process"
"C:\\Users\\gricatti\\DOCS\\01-PRODUCTION\\M428-429 - PA 4780 DK 119070_H\PA 4780 DK 119070_I\\SCRIPT-070")
"\\"))
(setq find_replace_assoc_list
'(("JT01" "ZVJT31")
("DJ01" "ZVDJ52")
("DJ03" "ZVDJ51")
("VALEUR X" "VALEUR Y")
))
(foreach dwg_file (vl-directory-files work_directory "*.dwg" 1)
(princ (strcat "\nDocument \""
(strcat work_directory dwg_file)
"\" opened"))
(setq document_to_process
(vla-open (vla-get-documents
(vlax-get-acad-object))
(strcat work_directory dwg_file))
modelspace_collection
(vla-get-modelspace
(vla-get-database document_to_process))
string_to_replace_found
nil
)
(vlax-map-collection
modelspace_collection
'(lambda (object)
(cond
(
(and (= "AcDbText" (vla-get-objectname object))
(assoc (vla-get-textstring object)
find_replace_assoc_list)
)
(if (null string_to_replace_found)
(setq string_to_replace_found t))
(vla-put-textstring
object
(cadr (assoc (vla-get-textstring object)
find_replace_assoc_list)))
(vla-getboundingbox object 'llc 'ruc)
(setq height (vla-get-height object))
(setq llc (mapcar '-
(vlax-safearray->list llc)
(list height height))
ruc (mapcar '+
(vlax-safearray->list ruc)
(list height height))
)
(initcommandversion)
(command "_revcloud"
"_a"
(* 0.2 (- (car ruc) (car llc)))
llc
ruc)
(vla-put-color
(setq revcloud_object
(vlax-ename->vla-object (entlast)))
1)
(vlax-invoke
(vla-get-database
(vla-get-activedocument (vlax-get-acad-object)))
'copyobjects
(list revcloud_object)
(vla-get-modelspace document_to_process)
)
(vla-erase revcloud_object)
)
(
t
)
)
)
)
(if string_to_replace_found
(vla-save document_to_process))
(vla-close document_to_process)
(princ (strcat "\nDocument\""
(strcat work_directory dwg_file)
"\" closed\n"))
)
(princ)
)
Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
Rechercher et remplacer des textes, dans: des Champs de texte des textmult et des valeurs d' attributs de blocs
Résolu ! Accéder à la solution.