Corro 发表于 2022-7-5 17:14:01

更改块内的文字样式

大家早上好
我一直在尝试编写lisp例程,将插入块中的旧文本样式转换为新文本样式。
这是清理旧图形的较大例程的一部分。
我试图选择图形中的块,并使其仅选择文本或多行文字,但我正在接收图形中的每个对象。
我做错了什么?????
附件是lisp例程和简单示例图。
使用AutoCAD 2017。
谢谢你的帮助。
史蒂夫
000测试12。lsp
X_STRCT1。图纸

BIGAL 发表于 2022-7-5 18:48:48

更好的方法是在树的顶部重新定义块表中的单个块,然后只更新图形,而不是获取所有块。ssget“insert”正在执行的操作。
 
类似这样,但查看实体并检查文本或多行文字,然后更改样式。我会得到实体名称并运行一系列条件,因为文本和多行文字非常直接,但属性样式再次降低了一个级别,但您可以检查“Hasattributes”变量,然后进行更深入的搜索。你可以使用dumpit。lsp获取对象的变量名列表,然后进一步使用(vlax dump object variable)
 

(setq allblocks (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
(vlax-for block allblocks
(setq blkname (vla-get-name block))
(if(not (wcmatch (strcase blkname t) "*_space*"))
   (vlax-for ent block
   (If (= "AcDbText" (vla-get-objectname ent))
   (vla-put-StyleName ent "arial") ; need a vla-put-textstyle here
   ) ; if
   ) ;_ end of vlax-for
) ;_ end of if
) ;_ end of vlax-for
(Command "regen")
(princ)

 

(if (= (vla-get-hasattributes ent) -1)
(foreach att (vlax-invoke ent 'getattributes)
;look at textstyle see if I can find an example
页: [1]
查看完整版本: 更改块内的文字样式