使用lisp将文本放入mtex
您好,我找遍了所有地方,都找不到该怎么做,但我很确定它就在那里。将从lisp程序检索到的信息放入空的多行文字框需要什么代码。如果用户可以选择一个现有的并向其添加更多信息,那就更好了。
谢谢
布瑞恩 替换多行文字中的文字有两种基本方法。假设您将要存储的文本存储在lisp变量STR中,并将多行文字选定,其名称存储在lisp变量en中:
1、通过entmod。
(setq ed (entget en)) ;Get the DXF data list
(setq ed (subst (cons 1 str) (assoc 1 ed) ed)) ;Modify the DXF list
(entmod ed) ;Modify the entity1a。这可能会导致注释性缩放文本出现问题。出于这个原因,我宁愿这样说:
(entmod (list (cons -1 en) (cons 1 str)))2。vla方法(也不会给出注释性问题)
要附加到它,您需要首先获得现有值:
1.再次注意注释性缩放
(setq ed (entget en)) ;Get the DXF data list
(setq ed (subst (cons 1 (strcat (cdr (assoc 1 ed)) str)) (assoc 1 ed) ed)) ;Modify the DXF list
(entmod ed) ;Modify the entity1a。这变得有点强迫了
(setq ed (entget en)) ;Get the DXF data list
(entmod (list (cons -1 en) (cons 1 (strcat (cdr (assoc 1 ed)) str))))2。IMO最简单的方法
(setq eo (vlax-ename->vla-object en)) ;Get the ActiveX object of the entity
(vla-put-TextString eo (strcat (vla-get-TextString eo) str)) ;Change the text inside the MText 使用entmod方法时,也要注意DXF代码3字符串。此外,vla get TextString将损坏字符串中的任何符号(将其转换为“?”)。 所以实际上vla方法并没有那么好。alanjt和我已经为这件事奔波了一段时间。根据我之前的帖子,我选择的方法是1a型。但是你说得很好,那超过250个字符的多行文字呢。使用entmod方法会有点复杂。
准确-附加到正确的DXF 3代码,然后重新插入到正确的位置。。。
编辑:尽管经过少量测试后,文本字符串的最后一部分似乎存储在DXF 1中,因此上述方法可能仍然有效。 对于多行文字,我只需要从entget获取文本,然后用vla put textstring将其放回。除非我知道字符串将短于250c,否则如果我用entmod把它放回原处。 实际上,我认为使用vla方法没有任何问题。你得到了????DText中的字符,无论您使用entmod还是vla put TextString。但是对于多行文字,如果使用entmod,有时会得到一个空白的文本实体(我认为这是由于250个限制)。
例如:
(defun c:Add250+ (/ en s n)
(if (setq en (entsel))
(progn
(setq n 128 s "")
(repeat 249
(setq s (strcat s (chr n))
n (1+ n)
)
)
;;; (vla-put-TextString (vlax-ename->vla-object (car en)) s)
(entmod (list (cons -1 (car en)) (cons 1 s)))
)
)
(princ)
) “Puting”很好,它是导致问题的“getting”-我们还讨论了使用多行文字编辑器添加的符号,即右键单击,符号,“Angle”说 不完全是这样:7您需要做的就是将DXF 3代码和1代码连接到一个字符串变量中。尽管由于某种原因(至少在我的Vanilla 2008上),上面的内容使多行文字空白。不知道为什么。
页:
[1]