质量块缩放
我有多个绘图文件,每个都有多个块(几个有2-3层深的嵌套块)。。。我需要从公制到英制进行缩放。lisp/宏是否可以打开图形中的所有块(忽略块名,因为有1000多个块,每个块的名称不同)、缩放并将“块单位”特性更改为“英寸”?
在我研究所需的实际编码之前,我想知道这样的事情是否可能。 使用Visual LISP,InsUnts属性为只读(RO),无法修改。
也许这可以通过DXF代码输入块定义,但目前我无法确定。
编辑:一旦知道所需比例的转换因子,就可以成功地缩放块以适应图形,但是仍然需要在块编辑器中修改此设置。
你不能设置一个宏来运行lisp吗?
如果OP想要更改的InsUnits属性是只读的(RO),那么会是什么LISP?
你要写的那个!说真的,我并不是说已经有了lisp,我只是在想宏和lisp之间的组合可能会得到IBMut想要的东西。 别担心;这对我来说是新的,因为我们所有的块都创建为“无单位”,而不是指定“英尺”等。
实际上,我已经开始为此编写代码,在完成框架设置后,我测试了一个块以获得准确的属性名称(我不可能全部记住!),然后在我需要的属性旁边看到(RO)>。
于是,我打开开发人员文档,浏览DXF代码以查找插入实体,并在(Ctrl+F)中搜索“ins”和“unit”,但找不到任何有用的东西。事实上,我对目前的结果相当失望。我真的没有时间跳进C/VB。NET,否则我会仔细阅读Object Viewer。 脚本的一部分难道不能完成并将它们全部设置为读/写吗?
澄清;这些对象模型属性,如某些系统变量(即RIBBONSTATE等)是只读的,无法修改。
Visual LISP无法使用以下任一选项修改块对象的InsUnits特性:
(vla-put-insunits <BlockObject> <Value>) ; <- Function does not exist
(vlax-put <BlockObject> 'InsUnits <Value>)
(vlax-put-property <BlockObject> 'InsUnits <Value>)
^^将其复制并粘贴到命令行中,然后按Enter键。然后键入“FOO”(不带引号),然后按Enter键。。。遵循命令提示。
HTH公司 也许这对你有帮助。可以轻松修改以更改图形中的所有块。
克鲁格
区块单元。lsp 太棒了,克鲁格!
看,我对使用tblobjname进行操作知之甚少,因此必须查找DXF 330。
编辑:
; ============================================================ ;
; Set block units ;
; Blks
- block(s) name ;
; Units - new block units ;
; ============================================================ ;
(defun kr:BLK_SetBlockUnits (Blks Units)
(foreach % Blks
(vla-Put-Units
(vlax-Ename->vla-Object
(cdr (assoc 330 (entget (tblobjname "BLOCK" %))))
)
Units
)
)
)
页:
[1]
2