乐筑天下

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

[编程交流] 通过LISP编辑多行文字

[复制链接]

20

主题

95

帖子

75

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 09:45:08 | 显示全部楼层 |阅读模式
我到处寻找LISP来通过LISP编辑多行文字,但只找到了一个(谢谢Mike Weaver),这几乎就是我想要的。它张贴在下面,但我希望它能自动选择一段我指定的多行文字(通过ssget)。我已经修改了这段代码,但对VisualLisp理解不够,无法知道它出错的原因。。。有什么帮助吗?
 
原件:
  1. (defun c:mtval( / ent objmtext stroldval
  2. strnewval)
  3. (setq
  4. ent (car (entsel))
  5. objMText
  6. (vlax-ename->vla-object ent)
  7. strOldval (vlax-get-property objMText
  8. "TEXTSTRING")
  9. strnewval (getstring T (strcat "\nNew text value<"
  10. stroldval ">: "))
  11. )
  12. (if
  13. strnewval
  14. (vlax-put-property objmtext "TEXTSTRING"
  15. strnewval)
  16. )
  17. (vlax-release-object objmtext)
  18. )

 
我的修改代码:
  1. (defun c:mtval( / getmtext objMText strnewval)
  2. (setq getmtext (ssget "_X" '((0 . "MTEXT")(1 . "TEST")))
  3.        objMText (vlax-ename->vla-object (entlast))
  4.        strnewval (getstring T "Enter New Text: ")
  5. )
  6. (if strnewval (vlax-put-property objmtext "TEXTSTRING" strnewval)
  7. )
  8. (vlax-release-object objmtext)
  9. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:49:05 | 显示全部楼层
请注意,文本字符串区分大小写。
 
好了,伙计。
  1. (defun c:test (/ new ss)
  2. ; Tharwat 24.02. 2010
  3. (if (and (setq new (getstring T "Enter New Text: "))
  4.           (setq ss (ssget "_X" '((0 . "MTEXT") (1 . "test"))))
  5.      )
  6.    ((lambda (i / ss1 e)
  7.       (while
  8.         (setq ss1 (ssname ss (setq i (1+ i))))
  9.          (entupd
  10.            (cdr
  11.              (assoc
  12.                -1
  13.                (entmod
  14.                  (subst (cons 1 new) (assoc 1 (setq e (entget ss1))) e)
  15.                )
  16.              )
  17.            )
  18.          )
  19.       )
  20.     )
  21.      -1
  22.    )
  23.    (Alert
  24.      "\n Your replaced text is not found in the drawing....."
  25.    )
  26. )
  27. (princ)
  28. )

 
塔瓦特
回复

使用道具 举报

20

主题

95

帖子

75

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 09:51:50 | 显示全部楼层
这行不通。。。它要求我选择一个对象,然后将其隔离。。。。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 09:57:48 | 显示全部楼层
  1.   (setq getmtext (ssget "_X" '((0 . "MTEXT")(1 . "TEST"))) [color=red]<-Select [u]all[/u] MText with "TEST" value[/color]
  2.        objMText (vlax-ename->vla-object (entlast)) [color=red]<- converts the last created object to a vla-object (not what you want to do here)[/color]

 
塔瓦特
回复

使用道具 举报

20

主题

95

帖子

75

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 10:00:20 | 显示全部楼层
@艾伦:也许我不理解你。我正在做ssget来“抓取”我画上的多行文字,并认为我需要将其转换为vla obect。多行文字的属性(文本字符串)包含哪些内容?vla get activeselectionset不是函数。
 
@Tharwat:同样的结果,它要求“在当前图形或外部参照中选择对象”。。。然后将其隔离。为什么会这样?它没有要求我输入任何文本或任何东西。。。
 
我感谢你们两位的帮助。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:03:46 | 显示全部楼层
我已经为您发布的两个例程在Arch中正常工作。Autocad,但我没有MEP cad来检查这些代码。
 
不管怎样,你能用你的版本在例程失败后复制你的命令行吗?
 
塔瓦特
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:06:03 | 显示全部楼层
这不是真正的“失败”,只是没有做我想做的。。。我想知道你的代码中有什么依赖于ACAD版本。。。
 
命令:测试
选择当前图形或外部参照中的对象:
选择当前图形或外部参照中的对象:
再生模型。
回复

使用道具 举报

20

主题

95

帖子

75

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 10:08:15 | 显示全部楼层
哈哈,这是一个完全不同的节目。确保您实际上正在加载例程。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:10:40 | 显示全部楼层
笑死我了。。。。世界跆拳道联盟。。。我已经正确地加载了它,并且非常确定我没有任何名为TEST的命令。。。。但我把这个命令改成了其他命令,它现在似乎起作用了。。。。非常感谢Tharwat!!!
 
我仍然很好奇我向你提出的问题,艾伦,只是为了让我能更好地理解它。
回复

使用道具 举报

20

主题

95

帖子

75

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 10:16:23 | 显示全部楼层
 
你能把你所做的改变发布到你的MEP cad上吗?
 
只是好奇其他cad版本。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 23:16 , Processed in 0.334792 second(s), 72 queries .

© 2020-2025 乐筑天下

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