明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1952|回复: 5

[求助]多文件里的普通块

[复制链接]
发表于 2010-7-29 23:24:00 | 显示全部楼层 |阅读模式
几十张的图纸文件,里面都有一个同样的普通的块,文字的块(就是标题栏里的姓名,时间,重量这些),全是文字,有没有什么方法可以把这几十个文件里的块里的某几个字,比如姓名,时间什么的,批量改成别的呢?(最早画图的时候,很笨,直接用单行文字写的这些东西,然后排好队形,复制,然后是直接粘贴为块,然后就是把这个名字是自动生成的块,拿来复制粘贴到不同的文件里了。。。。。。)现在要一个一个文件改的话太麻烦了,有否办法能批量修改呢?谢谢了!
发表于 2010-7-30 10:15:00 | 显示全部楼层
本帖最后由 作者 于 2010-8-3 12:24:48 编辑

  1. ;;;(gxl-DBX-ReplaceText '((源文本 . 目标文本)...) 文件名 替换方式) 利用ObjectDBX技术不打开DWG文件替换文本,Flag 0 仅替换文字 1 仅替换块中文字 2 全部替换
  2. (defun gxl-DBX-ReplaceText (TextList;SourceText    TargetText
  3.        DwgName Flag   /
  4.        RegObjectDBX
  5.        DBXModelSpace  DBXDOC
  6.        count
  7.       )
  8.   (setq *ACAD* (vlax-get-acad-object)
  9. *AcDocument* (vla-get-activedocument *Acad*)
  10.       *Model-Space* (vla-get-modelspace *AcDocument*)
  11. )
  12.    (defun RegObjectDBX (/ DBXSERVER)
  13.      ;by Tony Tanzillo
  14.     (cond ((vl-registry-read
  15.       "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"
  16.     ) ;_ vl-registry-read
  17.    )
  18.    ((not (setq DBXSERVER (findfile "AxDb15.dll")))
  19.     (alert "Error: Can't locate ObjectDBX Library (AxDb15.dll)")
  20.    )
  21.    (t
  22.     (startapp "regsvr32.exe" (strcat "/s "" DBXSERVER """))
  23.     (or (vl-registry-read
  24.    "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"
  25.         ) ;_ vl-registry-read
  26.         (alert
  27.    "Error: Failed to register ObjectDBX ActiveX services."
  28.         ) ;_ alert
  29.     ) ;_ or
  30.    )
  31.     ) ;_ cond
  32.   ) ;_ defun
  33.   (setq DwgName (findfile DwgName))
  34.   (if DwgName
  35.     (progn
  36.       (if (= "15" (substr (getvar "acadver") 1 2))
  37. (progn (if (not (RegObjectDBX))
  38.    (exit)
  39.         ) ;_ if
  40.         (setq
  41.    DBXDOC (vla-getinterfaceobject
  42.      *ACAD*
  43.      "ObjectDBX.AxDbDocument"
  44.    ) ;_ vla-getinterfaceobject
  45.         ) ;_ setq
  46. ) ;_ progn
  47. (setq
  48.    DBXDOC (vla-getinterfaceobject
  49.      *ACAD*
  50.      "ObjectDBX.AxDbDocument.16"
  51.    ) ;_ vla-getinterfaceobject
  52. ) ;_ setq
  53.       ) ;_ if
  54.       (setq FileName (strcat (getvar "dwgprefix") (getvar "dwgname")))
  55.       (if (equal (strcase FileName) (strcase DWGNAME))
  56. (setq DBXModelSpace *MODEL-SPACE*
  57.        DBXDOC *ACDOCUMENT*) ;_ setq
  58. (progn (vla-open DBXDOC DWGNAME)
  59.         (setq DBXModelSpace (vla-get-ModelSpace DBXDOC))
  60. ) ;_ progn
  61.       ) ;_ if
  62.       (cond ((= 0 Flag)
  63.       (setq count 0)
  64.       (vlax-for obj DBXModelSpace
  65.         (cond ((= "AcDbText" (vla-get-ObjectName obj))
  66.         (if (assoc (vla-Get-textString obj) TextList)
  67.    (progn
  68.      (vla-put-TextString obj (cdr (assoc (vla-Get-textString obj) TextList)))
  69.      (setq count (1+ count))
  70.    ) ;_ progn
  71.         ) ;_ if
  72.        )
  73.         ) ;_ cond
  74.       ) ;_ vlax-for
  75.      )
  76.      ((= 1 Flag)
  77.       (setq count 0)
  78.       (setq blocks (vla-get-Blocks DBXDOC))
  79.       (vlax-for block blocks
  80.         (vlax-for obj block
  81.         (cond ((= "AcDbText" (vla-get-ObjectName obj))
  82.         (if (assoc (vla-Get-textString obj) TextList)
  83.    (progn
  84.      (vla-put-TextString obj (cdr (assoc (vla-Get-textString obj) TextList)))
  85.      (setq count (1+ count))
  86.    ) ;_ progn
  87.         ) ;_ if
  88.        )
  89.         ) ;_ cond
  90.       )
  91.         )
  92.       )
  93.      ((= 2 Flag)
  94.       (setq count 0)
  95.       (vlax-for obj DBXModelSpace
  96.         (cond ((= "AcDbText" (vla-get-ObjectName obj))
  97.         (if (assoc (vla-Get-textString obj) TextList);(= SourceText (vla-Get-textString obj))
  98.    (progn
  99.      (vla-put-TextString obj (cdr (assoc (vla-Get-textString obj) TextList)));(vla-put-TextString obj TargetText)
  100.      (setq count (1+ count))
  101.    ) ;_ progn
  102.         ) ;_ if
  103.        )
  104.         ) ;_ cond
  105.       ) ;_ vlax-for
  106.       (setq blocks (vla-get-Blocks DBXDOC))
  107.       (vlax-for block blocks
  108.         (vlax-for obj block
  109.         (cond ((= "AcDbText" (vla-get-ObjectName obj))
  110.         (if (= SourceText (vla-Get-textString obj))
  111.    (progn
  112.      (vla-put-TextString obj TargetText)
  113.      (setq count (1+ count))
  114.    ) ;_ progn
  115.         ) ;_ if
  116.        )
  117.         ) ;_ cond
  118.       )
  119.         )
  120.       
  121.       )
  122.       ) ;_ 结束cond
  123.       (if (equal (strcase FileName) (strcase DWGNAME))
  124. (vla-Save *AcDocument*)
  125.       (vla-Saveas DBXDOC DWGNAME)
  126. )
  127.       (vlax-release-object DBXDOC)
  128.       count
  129.     ) ;_ progn
  130.   ) ;_ if
  131. ) ;_ defun
  132. ;;;要替换的文件放在同一目录下,调用命令:gxl-RePlaceText
  133. (defun c:gxl-RePlaceText (/ source Target strFolder DwgList n TextList)
  134.   (princ "\n程序编制by Gu_xl,2010年7月")
  135.   (setq source (getstring "\n输入源文字:"))
  136.   (setq Target (getstring "\n输入要替换的文字:"))
  137.   (setq TextList (append TextList (list (cons source Target))))
  138.   (initget 7 "Yes No  ")
  139.   (setq kd (getkword "\n继续输入替换文字[Yes/No]<Yes>:"))
  140.   (if (= "" kd) (setq kd "Yes"))
  141.   (while (= kd "Yes")
  142.     (setq source (getstring "\n输入源文字:"))
  143.     (setq Target (getstring "\n输入要替换的文字:"))
  144.     (setq TextList (append TextList (list (cons source Target))))
  145.     (initget 7 "Yes No  ")
  146.     (setq kd (getkword "\n继续输入替换文字[Yes/No]<Yes>:"))
  147.     (if (= "" kd)
  148.       (setq kd "Yes")
  149.     ) ;_ if
  150.   ) ;_ while
  151.   (initget 7 "0 1 2  ")
  152.   (setq kd (getkword "\n替换方式[仅替换文本<0>/仅替换块中文本<1>/全部替换<2>]仅替换文本<0>:"))
  153.   (if (= "" kd) (setq kd "0"))
  154.   (setq kd (read kd))
  155.   (setq strFolder (GXL-FILE-GETFOLDER "选择替换文件夹"))
  156.   (setq DwgList (VL-DIRECTORY-FILES strFolder "*.dwg" kd))
  157.   (if DwgList
  158.     (progn
  159.       (setq n 0)
  160.       (princ "\n  正在查找替换文本,请等待...")
  161.       (princ)
  162.       (foreach dwg DwgList
  163. (setq n (+ n (gxl-DBX-ReplaceText TextList (strcat strFolder "\"  dwg) 1)))
  164. )
  165.       )
  166.     )
  167.   (princ (strcat "\n  共完成 " (itoa n) " 处文本替换!"))
  168.   (princ)
  169.   )
发表于 2010-7-30 12:16:00 | 显示全部楼层

看来二楼楼主得修一下,用后发现提示以下:

 

继续输入替换文字[Yes/No]<Yes>:n
替换方式[仅替换文本<0>/仅替换块中文本<1>/全部替换<2>]仅替换文本<0>:1
ucs
当前 UCS 名称: *世界*
指定 UCS 的原点或 [面(F)/命名(NA)/对象(OB)/上一个(P)/视图(V)/世界(W)/X/Y/Z/Z 轴(ZA)] <世界>: p
没有保存的上一个坐标系。
; 错误: *error* 函数中出错函数被取消

发表于 2010-8-3 12:28:00 | 显示全部楼层
357785513发表于2010-7-30 12:16:00看来二楼楼主得修一下,用后发现提示以下:   继续输入替换文字<Yes>:n替换方式仅替换文本<0>:1ucs当前 UCS 名称: *世界*指定 UCS 的原点或 <世界>: p没有保存的上一个

没有发现这种情况!能仔细说说或把图发上来看看!2004以下版本调试正确!

发表于 2010-8-3 12:35:00 | 显示全部楼层
G不错不错,.好程序,很成功
发表于 2010-9-19 21:56:00 | 显示全部楼层

Gu_xl,你太牛了.

我遇到一个问题,想为选定的部分块更名,你有办法吗?请指教.

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-2 12:22 , Processed in 0.178790 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表