CAD机械版如何用脚本替换旧图纸标题栏和明细表的操作指引

国产CAD教程 2026-07-08 10:26:05 9

CAD机械版如何用脚本替换旧图纸标题栏和明细表的操作指引

图纸模板更新后,如何让所有历史图纸的标题栏和明细表同步升级,是很多企业标准化部门面临的现实问题。如果采用手动替换的方式,不仅效率低下,还容易出现遗漏和不一致。软件在辅助工具中集成了批量脚本操作功能,通过一段LISP脚本即可实现自动化替换。脚本运行时会自动遍历图纸中的每一个图框,删除旧的标题栏和明细表,然后按照新样式重新生成,并保留原有的图纸数据信息。脚本代码中已包含详细注释,用户只需要根据新旧模板的名称变化情况修改个别参数。下面说明具体的调用步骤和代码调整方法。

问题描述:

图幅的标题栏或明细表样式发生了变化,如何让使旧图纸能够更新样式,是否可以通过脚本实现?

步骤指引:

  1. 【机械】菜单下,【辅助工具】-【批量脚本操作】,加载下方的脚本文件;批量变更标题栏和明细表20231228.scr
  2. 根据实际的情况,调整脚本代码(在【脚本编辑窗口】中打开,并编辑);
  3. 如果标题栏名称前后未变更,但是样式变更了,则删除下面代码行,重新构造标题栏(setq frame (subst "TJK明细表" "明细表1" frame))   (setq frame (subst "TJK标题栏" "标题栏1" frame))
  4. 如果标题栏名称前后发生变化,则直接用标题栏名称进行替换,【标题栏1】是旧图纸标题栏名称,【TJK标题栏】是新图幅中标题栏名称;
  5. 完整代码的说明如下:

; 为说明语句

zoom  

e                                                              ;纸缩放到最大窗口

(setq bOpen(Zwm_DbOpenFile ""))                                ;打开当前图纸,此语句为脚本必写语句

(setq old_BOM (ssget "x" '(2 . "ZwmFrameMain_明细表*")))       ;读取旧的明细表

(setq old_TITLE (ssget "x" '(2 . "ZwmFrameMain_标题栏*")))     ;读取旧的标题栏

(setq old_FJ (ssget "x" '(2 . "ZwmFrameMain_*附加栏*")))       ;读取旧的附加栏

(setq nFrameCount(Zwm_DbGetFrameCount))

(while (> nFrameCount 0) (progn

(setq nFrameCount (- nFrameCount 1))                          ;搜索图纸中的图框数量

(setq FrameName(Zwm_DbGetFrameName nFrameCount))

(Zwm_DbSwitchFrame FrameName)                          ;切换图框

(setq Frame (Zwm_DbGetFrame))                          

(setq frame (subst "TJK明细表" "明细表1" frame))        ;将明细表1替换成TJK明细表

(setq frame (subst "TJK标题栏" "标题栏1" frame))        ;将标题栏1替换成TJK标题栏

(setq F (reverse (list (nth 0 Frame) (nth 1 Frame) (nth 2 Frame) (nth 3 Frame) (nth 4 Frame))))   ;此条语句开始,构造新的图幅数据

(setq F (cons "TJK代号栏" F))                           ;构造的图幅数据,使用 JK代号栏

(setq F (cons 0 F))                                     ;构造的图幅数据,将附加栏取消

(setq F (cons (nth 7 Frame) F))

(setq F (cons (nth 8 Frame) F))

(setq F (cons (nth 9 Frame) F))

(setq F (cons (nth 10 Frame) F))

(setq F (cons (nth 11 Frame) F))

(setq F (cons (nth 12 Frame) F))

(setq F (cons (nth 13 Frame) F))

(setq F (cons (nth 14 Frame) F))

(setq F (cons "无分区图框" F))                            ;构造的图幅,图框使用无分区图框

(setq F (cons (nth 16 Frame) F))

(setq Frame (reverse F))                               

(Zwm_DbSetFrame frame)    

(Zwm_DbBuildFrame 255)    

)

)                                                     ;按照读取的标题栏数据从新构造并生成标题栏(标题栏样式有发生变化,附加栏取消) 构造图幅数据结束

(if old_FJ (command "_.ERASE" old_FJ "")              ;删除旧附加栏

(if old_BOM (command "_.ERASE" old_BOM ""))           ;删除旧的明细表

(if old_TITLE (command "_.ERASE" old_TITLE ""))       ;删除旧的标题栏

(command "_.ZWMPARTLIST" "")                          ;生成明细表

(Zwm_DbGetTitleFieldData)                             ;获取新的标题栏数据属性列表

(setq old_VER (Zwm_TitleGetItem 5))                   ;获取版本号

(setq old_TPR (Zwm_TitleGetItem 10))                  ;获取第几页

(setq old_PNO (Zwm_TitleGetItem 11))                  ;获取总页数

(if (= (nth 2 old_TPR) "") (Zwm_TitleSetItem (list "TOTALPAPER" "1")) "")        ;如果获取的第几页为空白,填写数字1  

(if (= (nth 2 old_PNO) "") (Zwm_TitleSetItem (list "PAGENO" "1")) "")            ;如果获取的总页数为空白,填写数字1

(if (= (nth 2 old_VER) "") (Zwm_TitleSetItem (list "VER" "V01")) "")            ;如果获取的版本号为空白,填写V01

(Zwm_TitleSetItem (list "MTSL" ""))                                             ;将数量数据清空,数量数据对应的内码为MTSL

(Zwm_DbRefreshTitle)                                                            ;刷新标题栏

zoom

e             ;图纸缩放到最大窗口

qsave         ;保存图纸

close         ;关闭图纸,有此条语句,方可实现逐个替换;否则,停留在当前处理图纸的窗口

脚本运行前,建议先选择一份代表性旧图纸进行单张测试,确认替换结果无误后再批量处理。代码中从"(setq F (reverse ..."开始到构造结束的部分是图幅数据重新生成的逻辑,一般情况下不需要修改。如果不需要保留附加栏,保持代码中的"cons 0 F"即可;如果需要保留,需要修改对应参数。不熟悉脚本的用户只需关注新旧标题栏名称的替换位置即可。

立即获取报价
请填写姓名
姓名至少输入2个字符
姓名仅支持汉字、字母
验证
获取验证码
请填写手机号
请填写正确的手机号
验证码
验证码应为6位数字
验证码错误
请填写公司名称
公司名称仅支持汉字、字母
请先阅读并同意《隐私政策》
关注公众号
免费领取30天激活码
联系客服