CAD机械版如何用脚本替换旧图纸标题栏和明细表的操作指引
CAD机械版如何用脚本替换旧图纸标题栏和明细表的操作指引
图纸模板更新后,如何让所有历史图纸的标题栏和明细表同步升级,是很多企业标准化部门面临的现实问题。如果采用手动替换的方式,不仅效率低下,还容易出现遗漏和不一致。软件在辅助工具中集成了批量脚本操作功能,通过一段LISP脚本即可实现自动化替换。脚本运行时会自动遍历图纸中的每一个图框,删除旧的标题栏和明细表,然后按照新样式重新生成,并保留原有的图纸数据信息。脚本代码中已包含详细注释,用户只需要根据新旧模板的名称变化情况修改个别参数。下面说明具体的调用步骤和代码调整方法。
问题描述:
图幅的标题栏或明细表样式发生了变化,如何让使旧图纸能够更新样式,是否可以通过脚本实现?
步骤指引:
- 【机械】菜单下,【辅助工具】-【批量脚本操作】,加载下方的脚本文件;批量变更标题栏和明细表20231228.scr
- 根据实际的情况,调整脚本代码(在【脚本编辑窗口】中打开,并编辑);
- 如果标题栏名称前后未变更,但是样式变更了,则删除下面代码行,重新构造标题栏(setq frame (subst "TJK明细表" "明细表1" frame)) (setq frame (subst "TJK标题栏" "标题栏1" frame))
- 如果标题栏名称前后发生变化,则直接用标题栏名称进行替换,【标题栏1】是旧图纸标题栏名称,【TJK标题栏】是新图幅中标题栏名称;
- 完整代码的说明如下:
; 为说明语句
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"即可;如果需要保留,需要修改对应参数。不熟悉脚本的用户只需关注新旧标题栏名称的替换位置即可。
推荐阅读:国产CAD
推荐阅读:CAD机械图纸中明细表与标题栏数据的批量查看方法


