乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 48|回复: 8

[编程交流] 使用lisp将文本放入mtex

[复制链接]

5

主题

7

帖子

2

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 10:23:03 | 显示全部楼层 |阅读模式
您好,
 
我找遍了所有地方,都找不到该怎么做,但我很确定它就在那里。将从lisp程序检索到的信息放入空的多行文字框需要什么代码。如果用户可以选择一个现有的并向其添加更多信息,那就更好了。
 
谢谢
布瑞恩
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:31:30 | 显示全部楼层
替换多行文字中的文字有两种基本方法。假设您将要存储的文本存储在lisp变量STR中,并将多行文字选定,其名称存储在lisp变量en中:
1、通过entmod。
  1. (setq ed (entget en)) ;Get the DXF data list
  2. (setq ed (subst (cons 1 str) (assoc 1 ed) ed)) ;Modify the DXF list
  3. (entmod ed) ;Modify the entity
1a。这可能会导致注释性缩放文本出现问题。出于这个原因,我宁愿这样说:
  1. (entmod (list (cons -1 en) (cons 1 str)))
2。vla方法(也不会给出注释性问题)
要附加到它,您需要首先获得现有值:
1.再次注意注释性缩放
  1. (setq ed (entget en)) ;Get the DXF data list
  2. (setq ed (subst (cons 1 (strcat (cdr (assoc 1 ed)) str)) (assoc 1 ed) ed)) ;Modify the DXF list
  3. (entmod ed) ;Modify the entity
1a。这变得有点强迫了
  1. (setq ed (entget en)) ;Get the DXF data list
  2. (entmod (list (cons -1 en) (cons 1 (strcat (cdr (assoc 1 ed)) str))))
2。IMO最简单的方法
  1. (setq eo (vlax-ename->vla-object en)) ;Get the ActiveX object of the entity
  2. (vla-put-TextString eo (strcat (vla-get-TextString eo) str)) ;Change the text inside the MText
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:44:20 | 显示全部楼层
使用entmod方法时,也要注意DXF代码3字符串。此外,vla get TextString将损坏字符串中的任何符号(将其转换为“?”)。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:50:29 | 显示全部楼层
所以实际上vla方法并没有那么好。alanjt和我已经为这件事奔波了一段时间。根据我之前的帖子,我选择的方法是1a型。但是你说得很好,那超过250个字符的多行文字呢。使用entmod方法会有点复杂。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:55:02 | 显示全部楼层
 
准确-附加到正确的DXF 3代码,然后重新插入到正确的位置。。。
 
编辑:尽管经过少量测试后,文本字符串的最后一部分似乎存储在DXF 1中,因此上述方法可能仍然有效。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:03:20 | 显示全部楼层
对于多行文字,我只需要从entget获取文本,然后用vla put textstring将其放回。除非我知道字符串将短于250c,否则如果我用entmod把它放回原处。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 11:14:23 | 显示全部楼层
实际上,我认为使用vla方法没有任何问题。你得到了????DText中的字符,无论您使用entmod还是vla put TextString。但是对于多行文字,如果使用entmod,有时会得到一个空白的文本实体(我认为这是由于250个限制)。
 
例如:
  1. (defun c:Add250+ (/ en s n)
  2. (if (setq en (entsel))
  3.    (progn
  4.      (setq n 128 s "")
  5.      (repeat 249
  6.        (setq s (strcat s (chr n))
  7.              n (1+ n)
  8.              )
  9.      )
  10. ;;;      (vla-put-TextString (vlax-ename->vla-object (car en)) s)
  11.      (entmod (list (cons -1 (car en)) (cons 1 s)))
  12.    )
  13. )
  14. (princ)
  15. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:21:11 | 显示全部楼层
“Puting”很好,它是导致问题的“getting”-我们还讨论了使用多行文字编辑器添加的符号,即右键单击,符号,“Angle”说
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 11:30:29 | 显示全部楼层
不完全是这样:
  1. 7
您需要做的就是将DXF 3代码和1代码连接到一个字符串变量中。尽管由于某种原因(至少在我的Vanilla 2008上),上面的内容使多行文字空白。不知道为什么。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 21:51 , Processed in 1.126800 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表