批处理脚本/VBA-512 Drawi
大家好,首先感谢你们抽出时间准备我的帖子。生活很忙,但外面有那么多人真的努力帮助别人,我真的很感激。其次,我要克服一个巨大的挑战。我不精通脚本文件或vba或任何类型的编程。我只是一个需要卓越帮助的工程师。
我拥有512张客户机autocad图纸(2008年版),需要进行一些操作(细节如下),以准备大量控制系统移植的图纸。谢天谢地,所需的准备工作在全套图纸中相当典型。准备范围包括但不限于,缩放模型空间中图形的全部内容,使其与A2图形边框紧密匹配,删除现有图形边框,并插入新的图形边框。
我的第一个问题是。我如何以最节省时间的方式执行这一准备工作?这个过程不一定要漂亮,我只想在一天结束时处理512张图纸(不是字面上!)
任何指点都将不胜感激。我附上了一个客户图纸的例子,也是新的绘图边框的信息。
提前谢谢。
A2_边框。图纸
测试回路。图纸 如果客户端的标题栏和边框是一个可以轻松删除和替换的属性块,那就太好了。事实似乎并非如此。
客户的绘图是以英制单位绘制的,您想将所有内容转换为公制单位吗?你已经计算出比例因子了吗?
因此,所有内容都将在模型空间中,您将不会使用新标题栏和边框的布局。对的 这将取决于你所说的缩放以适应A2是什么意思,它必须是一个标准的可识别比例,还是缩放到足以适应,我会亲自用A2模板创建一个布局,并包括一个视口,然后为每个图形删除旧标题栏(如果它很好地勾勒出所有图形,则保留旧边框),如果布局都是一样的,但如果一切都不标准化,那么这很容易做到,然后导入新布局并在视口中进行最大化。然后在下一幅图上,如果所有的图都以不同的方式排列,那么可能需要几个小时,或者是一个非常缓慢乏味的工作,如果所有的东西都像示例一样排列,那么脚本将是理想的。 您需要提供一个真实的示例dwg,我知道这是关于版权的,但创建一个随机的dwg,一些PLINE表示实际模型空间dwg的边界,但仍以英尺为单位。这里显而易见的是使用带有新A2标题栏的布局,而不是在模型中。需要一个与模型空间对象匹配的标题栏,如备注样本是比例为1的块,这与您所描述的内容并不完全正确。
可以找到对象的近似中心,并执行公制到英尺类型的比例因子,并生成A2。
512脚本部分听起来很简单。
Ps Steven-g加入黑暗面,尝试lisp。 @比加尔
从来没有,我只是在修补VBA,但这只狗太老了,不能玩lisp,像你这样的人太擅长了,此外,这里有那么多可用的材料和其他论坛,能够进行互联网搜索会比尝试学习一门新语言更快地找到大多数解决方案 @备注:我不确定帝国的事情是否是一个问题(或者是吗?)。如果这是一个可以很容易地融入到脚本中的东西,那么我想这将是一个奖励?
我确实考虑过纸张空间的布局,但客户cad程序(LOL)规定文字高度必须至少为2.5mm。
到目前为止,我发现了一些可能有用也可能无用的东西。。。
比例因子=33
全球文字样式更改为“标准”(客户规定)
全局文字高度更改为2.5mm(客户规定)
再加上一点操作,以获得正确的位置,给我附上的图纸,这是非常接近我需要的(见附件)
测试输出。图纸 是否值得开发一个脚本文件或类似文件来执行上述范围,或者我们是否应该考虑每个单独图形的手动操作路径? 版面中的文字可以是2.5mm!!将布局中的纸张设置为A2。在布局上放置边框。在边界内创建一个尽可能大的视口。将其另存为模板。然后你需要做的就是打开每个文件,从模板中插入一个新布局。删除或关闭模型空间中的边框。在新布局中,可以在视口中进行最大化,或者如果比例很重要,则使用比例因子进行缩放。保存图形并移动到下一个。对于一个最多只需要几个小时的宏和一个可能只需要几分钟的脚本,显然,这不包括脚本或宏的准备和编写/测试。它也不会考虑由于某种原因导致这种方法的逻辑失败的奇怪绘图。只有你才能判断这是否会节省你在这个项目上的时间,以及你对编写代码有多自信,只有你看到了其他图形可能有多不同。 查看dwg后,这将使用调整后的A2图纸尺寸将新标题栏自动化为布局。我确实需要一些帮助错误捕捉“外部参照丢失”,但它似乎是一个标志,所以应该工作。看看文字大小。
如果所有dwg都相同,则一次测试几个dwg不会出错。我可以给你一些关于写剧本的提示。
; Fit model space to a fixed size title block in a layout
; By Alan H Aug 2017
(vl-load-com)
(defun c:ktnl ( / ss lay alllayouts)
(setvar "ctab" "Model")
(command "erase" (ssget "x" (list (cons 0 "insert")(cons 2 "JE_BORDER")(cons 410 "Model")))"")
(setq alllayouts (vla-get-Layouts (vla-get-activedocument (vlax-get-acad-object))))
(vlax-for lay alllayouts
(if (= 1 (vla-get-taborder lay))
(setvar "ctab" (vla-get-name lay))
)
)
(command "erase" (ssget "x" (list (cons 0 "Viewport"))) "")
(setvar "attdia" 0)
(command "insert" "JE_BORDER" (list 0 0) 1 1 0 "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "")
(command "-layer" "M" "Vport" "")
(command "mview" (list 7.75 42.0) (list 576.5 405.5))
(setq obj (vlax-ename->vla-object (entlast)))
(command "zoom" "E")
(command "mspace")
(command "zoom" "E")
(command "zoom" 0.95x)
(setq sc (vla-get-customscale obj))
(vla-put-DisplayLockedobj -1)
(setq ss (ssget "X" (list (cons 0 "Text"))))
(repeat (setq x (sslength ss))
(setq tobj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
(vla-put-height tobj(/ (vla-get-height tobj) sc))
)
(command "pspace")
(command "zoom" "E")
)
(c:ktnl)
如果没有外部参照,则编写脚本
Open dwg1 (load "kntl") close "y")
Open dwg2 (load "kntl") close "y")
Open dwg3 (load "kntl") close "y")
@比加尔
谢谢你的回复。抱歉,在这次小冒险之前,我对宏/lisp等的经验非常少,我正在同时阅读3个单独的Autolisp指南,以提高我的速度。
我在“Autolisp->Visual Lisp编辑器”中输入了您的代码,得到了以下结果。。。
C: KTNL公司
; 错误:没有函数定义:VLAX-GET-ACAD-OBJECT
_$
_$
页:
[1]
2