您在 MText 内容中看到的附加信息是 MText 格式代码。
当通过 MText 编辑器应用格式覆盖时(与应用到 MText 对象引用的文本样式相反),格式使用嵌入在文本内容中的格式代码进行编码。此类格式代码在 AutoCAD 中不可见,但用于适当地渲染代码所包含的文本内容的各个部分 - 在您的情况下,格式代码:
{\\Fsimplex|c0;TEXT THAT I WANT}
导致字符串TEXT THAT I WANT
使用simplex
字体显示。
据我所知,ezdxf不包含允许您获取删除所有格式代码的文本内容的方法,但是在使用该属性获取内容后,text
您可以使用正则表达式来删除此类代码。
为了提供一个现有的示例,我之前开发了以下 AutoLISP 函数,它使用正则表达式来删除所有格式代码,但可能还有其他方法来表达 RegEx 模式并获得相同的结果:
;; Quick Unformat - Lee Mac
;; Returns a string with all MText formatting codes removed.
;; rgx - [vla] Regular Expressions (RegExp) Object
;; str - [str] String to process
(defun LM:quickunformat ( rgx str )
(if
(null
(vl-catch-all-error-p
(setq str
(vl-catch-all-apply
'(lambda nil
(vlax-put-property rgx 'global actrue)
(vlax-put-property rgx 'multiline actrue)
(vlax-put-property rgx 'ignorecase acfalse)
(foreach pair
'(
("\032" . "\\\\\\\\")
(" " . "\\\\P|\\n|\\t")
("$1" . "\\\\(\\\\[ACcFfHKkLlOopQTW])|\\\\[ACcFfHKkLlOopQTW][^\\\\;]*;|\\\\[ACcFfKkHLlOopQTW]")
("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
("$1$2" . "\\\\(\\\\S)|[\\\\](})|}")
("$1" . "[\\\\]({)|{")
("\\$1$2$3" . "(\\\\[ACcFfHKkLlOoPpQSTW])|({)|(})")
("\\\\" . "\032")
)
(vlax-put-property rgx 'pattern (cdr pair))
(setq str (vlax-invoke rgx 'replace str (car pair)))
)
)
)
)
)
)
str
)
)
对于您的示例文本字符串,上面将返回:
_$ (setq rgx (vlax-create-object "vbscript.regexp"))
#<VLA-OBJECT IRegExp2 00000000315de460>
_$ (LM:quickunformat rgx "{\\Fsimplex|c0;TEXT THAT I WANT}")
"TEXT THAT I WANT"
_$ (vlax-release-object rgx)
0