通过Lisp或Script在AutoCAD中选择文本

时间:2017-08-19 19:49:02

标签: text autocad autolisp

我试图想办法让某种类型的脚本或宏选择一个文本短语,然后编辑它并加入它。然而,我唯一发现有效的是Qselect,它在我记录的宏中工作,或者在任何脚本中工作(我知道)。寻找一个坚实的地方从这开始。

基本上到目前为止我只做了QSelect>" MTEX​​T"> MTEDIT> Ctrl + A> Ctrl + B

由于

1 个答案:

答案 0 :(得分:0)

获取选择

您无法自动执行QSELECT命令。

您需要使用带有ssget模式字符串的"X"函数(以自动查询图形数据库)获取选择,并使用适当的过滤器列表来定位所需文本。

由于您在评论中提及TXT2MTXT命令的使用,我将假设初始文本块'是单行文本(TEXT)。

要获得单行文本选择,您可以使用ssget表达式,例如:

(ssget "_X" '((0 . "TEXT")))

但是,这将返回位于所有绘图布局中的所有单行文本对象。

因此,您需要优化提供给ssget函数的过滤器列表,以定位您需要的单行文本的特定实例。

这可以通过布局过滤来实现,例如:

(ssget "_X" '((0 . "TEXT") (410 . "MyLayout")))

按层,例如:

(ssget "_X" '((0 . "TEXT") (8 . "MyLayer")))

或者通过任何其他属性或属性组合将目标单行文本与图形中的所有其他文本区分开来。

您可以参考我的ssget reference,了解有关将ssget与过滤器列表一起使用的更多信息和示例。

从TEXT转换为MTEXT

获取适当的单行文本对象选择集后,首先需要生成与每个单行文本对象具有相同属性的多行文本对象(MTEXT),如{{1} }无法显示粗体。

为此,您需要迭代上面获得的选择集。我在Selection Set Processing的教程中提供了几种演示如何执行此操作的方法。

对于每个TEXT对象,您可以发出对TEXT函数的调用(但请注意,由于这是一个Express Tools命令,您需要将其评估为LISP函数,不是内置的AutoCAD命令),然后收集已添加到绘图数据库的TXT2MTXT个对象(即使用MTEXT& entlast的组合。或者,您可以使用entnext函数生成MTEXT实体,并从entmake实体的DXF数据中获取DXF属性(使用TEXT) - 这就是我个人会解决这个问题。

应用粗体字

文本样式覆盖(例如粗体,斜体,下划线,上划线)使用嵌入在MText内容中的MText格式代码表示。

对于粗体文字,您需要使用以下MText格式代码包围现有的MText内容:

entget

此处,{\\f<FontFace>|b1|i0|c0|p18;<Existing Text Content>} 表示将使用b1的粗体版本。