【发布时间】:2023-03-17 05:52:01
【问题描述】:
我不得不在 Autocad 中更改几个块的文本样式和宽度属性。每个 dwg 上有 10-30 个块,将近 100 个 dg,我懒得手动将每个块转换为新标准。
https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/attribute-width-change/td-p/1525357
此链接有一个脚本可以将所有块(标题块和几个电气符号)的宽度更改为 1,并且作为第一遍它执行我想要的操作(由于bad ; error: bad argument type: lentityp nil Command:which 在将其更改为手动选择并仅选择块后失败我想修复它)。但是,我还需要将测试样式从任何类型更改为“标准”
https://www.afralisp.net/reference/dxf-group-codes.php
检查此链接后,我发现“文本样式名称”是代码 dxf 7
所以我将脚本更改为以下内容。
(defun C:StandardFromDWGTEXT (/ ss sslen cnt blck ent entinfo)
(setq ss (ssget))
(setq cnt 0)
(setq sslen (sslength ss))
(while (< cnt sslen)
(setq blck (ssname ss cnt))
(setq ent (entnext blck))
(setq entinfo (entget ent))
(while
(and ent (= (cdr (assoc 0 entinfo)) "ATTRIB"))
(entmod (subst (cons 41 1) (assoc 41 entinfo) entinfo))
;;; (entupd ent)
;;; (setq ent (entnext ent))
;;; (setq entinfo (entget ent))
(entmod (subst (cons 7 "Standard") (assoc 7 entinfo) entinfo))
(entupd ent)
(setq ent (entnext ent))
(setq entinfo (entget ent))
)
(setq cnt (1+ cnt))
)
(princ)
)
现在它只适用于我注释掉的行(停止使用它们,但这也意味着它只改变文本样式而不是宽度)并且只改变一半时间的文本样式。我设法通过任意重新加载 auto-cad 来处理所有文件,有时当它不起作用时(不起作用意味着当我期望它时没有任何变化)在可视化 lisp 编辑器中打开脚本并点击加载活动窗口修复它。我会把它放在我身边,但为了学习,因为我已经不得不两次更改标准,所以我很有可能不得不再次这样做,我想尝试解决这个问题。
考虑到仅将宽度更改为 1 的脚本在 100% 的情况下有效,我认为问题不在于将其添加到启动套件/在可视化 lisp 编辑器中打开它,而在于我添加到代码中本身。但是我添加的用于更改文本样式的行
(entmod (subst (cons 7 "Standard") (assoc 7 entinfo) entinfo)) 似乎与更改文字宽度的行没有什么不同。
如果有人有任何见解,我将不胜感激。我有其他编程语言的经验,但在 Autolisp/lisp 方面完全是新手。
【问题讨论】: