乐筑天下

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

[编程交流] Lisp编辑多行文字

[复制链接]

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:27:55 | 显示全部楼层
@罗伊,我快速浏览了一下你的代码。
我认为在ConvSort子函数中,应该按边界框的质心排序,而不是“插入点”。
回复

使用道具 举报

7

主题

23

帖子

16

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:31:56 | 显示全部楼层
 
 
我会试试,然后再给你回复。。。谢谢
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:33:24 | 显示全部楼层
@Grrr:我不认为这有什么不同,但当然,为什么不(代码更新)。
回复

使用道具 举报

7

主题

23

帖子

16

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:39:16 | 显示全部楼层
@Roy_043:。。。非常感谢你的帮助。
有没有办法修改它以同时处理文本和多行文字?
再次感谢您的。。。我真的很感激
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:41:21 | 显示全部楼层
再次更新代码。删除了对numberp的不必要调用:
  1. (numberp (setq num (getint "\nStart nr.: ")))
回复

使用道具 举报

7

主题

23

帖子

16

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:45:58 | 显示全部楼层
谢谢@roy
我知道了如何在文字和多行文字上使用它,再次感谢你的帮助
回复

使用道具 举报

7

主题

23

帖子

16

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:49:25 | 显示全部楼层
@roy是否可以调整lisp,使MTEXT如下所示:
40B12@200-150[铃声]
44B12@200-151[铃声]
如果“@”前面的数字相同,lisp会用相同的数字重新编号,例如:
40B12@200-150[铃声]
44B12@200-151[铃声]
两个“@”前面的数字都是“12”,所以我需要在重新编号后变成这样:
40B12@200-100[铃声]
44B12@200-100[铃声]
我只需要对最后一个中有[Ring]的mtext进行这种调整。
提前感谢
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:51:22 | 显示全部楼层
@术士993:祝你好运吧:
  1. (defun KGA_Conv_Pickset_To_ObjectList (ss / i ret)
  2. (if ss
  3.    (repeat (setq i (sslength ss))
  4.      (setq ret (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) ret))
  5.    )
  6. )
  7. )
  8. (defun KGA_Geom_ObjectMiddle (obj / ptBL ptTR)
  9. (vla-getboundingbox obj 'ptBL 'ptTR)
  10. (mapcar
  11.    '/
  12.    (mapcar '+ (vlax-safearray->list ptBL) (vlax-safearray->list ptTR))
  13.    '(2.0 2.0 2.0)
  14. )
  15. )
  16. (defun ConvSort (objLst)
  17. (mapcar
  18.    '(lambda (i) (nth i objLst))
  19.    (vl-sort-i
  20.      (mapcar '(lambda (obj) (KGA_Geom_ObjectMiddle obj)) objLst)
  21.      '(lambda (a b)
  22.        (if (equal (cadr a) (cadr b) 1e- ; Equal Y.
  23.          (< (car a) (car b))
  24.          (> (cadr a) (cadr b))
  25.        )
  26.      )
  27.    )
  28. )
  29. )
  30. ; (ConvStr "40 B12@200-150 [Ring]" 123) => "40 B12@200-123 [Ring]"
  31. (defun ConvStr (str n / i)
  32. (strcat
  33.    (substr str 1 (setq i (1+ (vl-string-position 45 str)))) ; (ascii "-") => 45.
  34.    (itoa n)
  35.    (progn
  36.      (setq str (substr str (1+ i)))
  37.      (while (wcmatch (substr str 1 1) "#") (setq str (substr str 2)))
  38.      str
  39.    )
  40. )
  41. )
  42. ; (ConvRingNumGet "40 B12@200-150 [Ring]") => 12
  43. (defun ConvRingNumGet (str / i j)
  44. (if (setq i (vl-string-position 64 str i)) ; (ascii "@") => 64.
  45.    (progn
  46.      (setq j i)
  47.      (while (and (/= j 0) (wcmatch (substr str j 1) "#"))
  48.        (setq j (1- j))
  49.      )
  50.      (if (/= i j) (atoi (substr str (1+ j) (- i j))))
  51.    )
  52. )
  53. )
  54. (defun c:Conv ( / doc enm lyr mainNum ringNumLst ss strLst)
  55. (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  56. (vla-endundomark doc)
  57. (vla-startundomark doc)
  58. (if
  59.    (and
  60.      (setq enm (car (entsel "\nEntity for layer: ")))
  61.      (setq lyr (vla-get-layer (vlax-ename->vla-object enm)))
  62.      (setq mainNum (getint "\nStart nr.: "))
  63.      (setq mainNum (1- mainNum))
  64.      (setq ss (ssget "_X" (list '(0 . "MTEXT,TEXT") (cons 8 lyr) '(1 . "*-#*"))))
  65.      (setq ss (ConvSort (KGA_Conv_Pickset_To_ObjectList ss)))
  66.    )
  67.    (mapcar
  68.      '(lambda (obj / ringNum str)
  69.        (vla-put-textstring
  70.          obj
  71.          (cond
  72.            ((cdr (assoc (setq str (vla-get-textstring obj)) strLst)))
  73.            ((wcmatch str "*#`@*-#*`[Ring`]")
  74.              (if (assoc (setq ringNum (ConvRingNumGet str)) ringNumLst)
  75.                (cdar (setq strLst (cons (cons str (ConvStr str (cdr (assoc ringNum ringNumLst)))) strLst)))
  76.                (progn
  77.                  (setq ringNumLst (cons (cons ringNum (setq mainNum (1+ mainNum))) ringNumLst))
  78.                  (cdar (setq strLst (cons (cons str (ConvStr str mainNum)) strLst)))
  79.                )
  80.              )
  81.            )
  82.            ((cdar (setq strLst (cons (cons str (ConvStr str (setq mainNum (1+ mainNum)))) strLst))))
  83.          )
  84.        )
  85.      )
  86.      ss
  87.    )
  88. )
  89. (vla-endundomark doc)
  90. (princ)
  91. )
回复

使用道具 举报

7

主题

23

帖子

16

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:56:21 | 显示全部楼层
非常感谢@罗伊。。。你是救世主
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-23 13:33 , Processed in 1.839032 second(s), 69 queries .

© 2020-2025 乐筑天下

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