ibnut 发表于 2022-7-6 09:00:23

质量块缩放

我有多个绘图文件,每个都有多个块(几个有2-3层深的嵌套块)。。。我需要从公制到英制进行缩放。
 
lisp/宏是否可以打开图形中的所有块(忽略块名,因为有1000多个块,每个块的名称不同)、缩放并将“块单位”特性更改为“英寸”?
 
在我研究所需的实际编码之前,我想知道这样的事情是否可能。

BlackBox 发表于 2022-7-6 09:05:42

使用Visual LISP,InsUnts属性为只读(RO),无法修改。
 
也许这可以通过DXF代码输入块定义,但目前我无法确定。
 
编辑:一旦知道所需比例的转换因子,就可以成功地缩放块以适应图形,但是仍然需要在块编辑器中修改此设置。

DANIEL 发表于 2022-7-6 09:09:25

 
你不能设置一个宏来运行lisp吗?

BlackBox 发表于 2022-7-6 09:10:55

 
如果OP想要更改的InsUnits属性是只读的(RO),那么会是什么LISP?

DANIEL 发表于 2022-7-6 09:14:07

 
你要写的那个!说真的,我并不是说已经有了lisp,我只是在想宏和lisp之间的组合可能会得到IBMut想要的东西。

BlackBox 发表于 2022-7-6 09:18:20

别担心;这对我来说是新的,因为我们所有的块都创建为“无单位”,而不是指定“英尺”等。
 
实际上,我已经开始为此编写代码,在完成框架设置后,我测试了一个块以获得准确的属性名称(我不可能全部记住!),然后在我需要的属性旁边看到(RO)>。
 
于是,我打开开发人员文档,浏览DXF代码以查找插入实体,并在(Ctrl+F)中搜索“ins”和“unit”,但找不到任何有用的东西。事实上,我对目前的结果相当失望。我真的没有时间跳进C/VB。NET,否则我会仔细阅读Object Viewer。

DANIEL 发表于 2022-7-6 09:20:58

脚本的一部分难道不能完成并将它们全部设置为读/写吗?

BlackBox 发表于 2022-7-6 09:25:05

 
澄清;这些对象模型属性,如某些系统变量(即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公司

BlackBox 发表于 2022-7-6 09:26:12

也许这对你有帮助。可以轻松修改以更改图形中的所有块。
克鲁格
区块单元。lsp

DANIEL 发表于 2022-7-6 09:29:55

太棒了,克鲁格!
 
看,我对使用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
查看完整版本: 质量块缩放