乐筑天下

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

[编程交流] 图层名称到文字

[复制链接]

15

主题

64

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 18:17:50 | 显示全部楼层 |阅读模式
大家好,
 
我发现了这个李Mac的Lisp程序,我正在寻找一些帮助来修改它。它工作得很好,只是需要调整它,以满足我的需要。
 
我一直从几个城镇收到税务地图,每个地块都在自己的图层上,图层名称是地块和区块。例如:层名称:2003298-10,其中2003年为年份,298为区块,10为地块。
 
我希望修改代码,这样当我选择其中一个批次(顺便说一句,这是一条多段线)时,它会适当地标记多段线。
 
到目前为止,代码可以工作,并用图层名标记线。我想修改它,这样它会提示用户输入文本大小,通过删除前四个字符来打破标签,在接下来的三个字符中添加Block,删除-并在最后两个字符中添加lot。然后尽可能将文字放置在多段线地块的中心,文字旋转角度设置为snapang或viewtwist变量。
 
我希望我能解释清楚,在这些方面有任何帮助都会很好。
 
谢谢
气缸0509
 
  1. ;; LayText.lsp by Lee McDonnell, 03.12.2009
  2. ;; Function will display layer information
  3. ;; at midpoint of every line selected.
  4. (defun c:LayText (/ *error* mk_txt
  5. DOC ENT I IPT LANG OFAC P SPC SS TOBJ TSZE UFLAG)
  6. (vl-load-com)
  7. (setq oFac 0.7) ;; Offset Factor
  8. (setq tSze nil) ;; Text Size ~ nil for TEXTSIZE Variable
  9. (defun *error* (msg)
  10. (and uFlag (vla-EndUndoMark doc))
  11. (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  12. (princ (strcat "\n** Error: " msg " **")))
  13. (princ))
  14. (defun mk_txt (p v) (vla-addText spc v (vlax-3D-point p) tSze))
  15. (setq doc (vla-get-ActiveDocument
  16. (vlax-get-Acad-Object))
  17. spc (if (zerop (vla-get-activespace doc))
  18. (if (= (vla-get-mspace doc) :vlax-true)
  19. (vla-get-modelspace doc)
  20. (vla-get-paperspace doc))
  21. (vla-get-modelspace doc)))
  22. (or tSze (setq tSze (getvar "TEXTSIZE")))
  23. (if (setq i -1 ss (ssget '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
  24. (progn
  25. (setq uFlag (not (vla-StartUndoMark doc)))
  26. (while (setq ent (ssname ss (setq i (1+ i))))
  27. (setq iPt (vlax-curve-getPointatDist ent
  28. (/ (- (vlax-curve-getDistatParam ent
  29. (vlax-curve-getEndParam ent))
  30. (vlax-curve-getDistatParam ent
  31. (vlax-curve-getStartParam ent))) 2.)))
  32. (setq lAng (angle '(0 0 0) (vlax-curve-getFirstDeriv ent
  33. (vlax-curve-getParamatPoint ent iPt))))
  34. (if (equal lAng (/ pi 2.) 0.001) (setq lAng (/ pi 2.)))
  35. (if (equal lAng (/ (* 3 pi) 2.) 0.001) (setq lAng (/ (* 3 pi) 2.)))
  36. (cond ( (and (> lAng (/ pi 2)) (<= lAng pi)) (setq lAng (- lAng pi)))
  37. ( (and (> lAng pi) (<= lAng (/ (* 3 pi) 2))) (setq lAng (+ lAng pi))))
  38. (setq tObj (mk_txt (setq p (polar iPt (+ lAng (/ pi 2.)) (* oFac tSze)))
  39. (vla-get-Layer (vlax-ename->vla-object ent))))
  40. (vla-put-Alignment tObj acAlignmentMiddleCenter)
  41. (vla-put-TextAlignmentPoint tObj (vlax-3D-point p))
  42. (vla-put-Rotation tObj lAng))
  43. (setq uFlag (vla-EndUndoMark doc))))
  44. (princ))
回复

使用道具 举报

15

主题

64

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 18:21:52 | 显示全部楼层
好的,我已经知道了如何提示输入文本大小,并将标签设置为图形的捕捉角度。它工作得很好。但我仍在努力解决如何将文本集中在对象上,以及如何将层名称截断为我想要的格式。
 
  1. ;; LayText.lsp by Lee McDonnell, 03.12.2009
  2. ;; Function will display layer information
  3. ;; at midpoint of every line selected.
  4. (defun c:LBLL (/ *error* mk_txt
  5. DOC ENT I IPT LANG OFAC P SPC SS TOBJ TSZE UFLAG)
  6. (vl-load-com)
  7. (setq oFac 0.7) ;; Offset Factor
  8. (setq tSze (getint "Enter the text size for the label: "))
  9. (defun *error* (msg)
  10. (and uFlag (vla-EndUndoMark doc))
  11. (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  12. (princ (strcat "\n** Error: " msg " **")))
  13. (princ))
  14. (defun mk_txt (p v) (vla-addText spc v (vlax-3D-point p) tSze))
  15. (setq doc (vla-get-ActiveDocument
  16. (vlax-get-Acad-Object))
  17. spc (if (zerop (vla-get-activespace doc))
  18. (if (= (vla-get-mspace doc) :vlax-true)
  19. (vla-get-modelspace doc)
  20. (vla-get-paperspace doc))
  21. (vla-get-modelspace doc)))
  22. (if (setq i -1 ss (ssget '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
  23. (progn
  24. (setq uFlag (not (vla-StartUndoMark doc)))
  25. (while (setq ent (ssname ss (setq i (1+ i))))
  26. (setq iPt (vlax-curve-getPointatDist ent
  27. (/ (- (vlax-curve-getDistatParam ent
  28. (vlax-curve-getEndParam ent))
  29. (vlax-curve-getDistatParam ent
  30. (vlax-curve-getStartParam ent))) 2.)))
  31. (setq lAng (getvar "snapang"))
  32. (setq tObj (mk_txt (setq p (polar iPt (+ lAng (/ pi 2.)) (* oFac tSze)))
  33. (vla-get-Layer (vlax-ename->vla-object ent))))
  34. (vla-put-Alignment tObj acAlignmentMiddleCenter)
  35. (vla-put-TextAlignmentPoint tObj (vlax-3D-point p))
  36. (vla-put-Rotation tObj lAng))
  37. (setq uFlag (vla-EndUndoMark doc))))
  38. (princ))
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:26:45 | 显示全部楼层
要截断字符串,请使用SUBTR函数。
回复

使用道具 举报

15

主题

64

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 18:28:59 | 显示全部楼层
 
嗨,塔瓦,
 
我明白了,但我遇到的问题是,由于没有更好的术语,我在代码中从哪里开始“格式化”。
 
谢谢
气缸0509
回复

使用道具 举报

2

主题

15

帖子

13

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:33:50 | 显示全部楼层
 
我建议你转向注释性文本(我想是在2008年引入的),这样,您可以在模型和纸张中获得所需的文本高度,而不会出现任何问题。然后使用图层名为lisp的一些标签线。然后使用find并替换为find命令。关于添加块,不知道你的意思?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:37:36 | 显示全部楼层
您有一个层名称,正如您在2003298-10之前提到的,首先您要删除代表年份的前四个数字。那么剩下的呢?
 
如。
  1. (substr "2003298-10" 5)
返回;
 
"298-10"
 
给我看看你想要的最终字符串。
回复

使用道具 举报

15

主题

64

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 18:39:08 | 显示全部楼层
 
 
谢谢Tharwat,
 
我想用同一个例子实现的最终格式是:两行10号地块298。
 
我也在努力让用户选择标签的位置。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:41:38 | 显示全部楼层
在给出任何解决方案之前,让我们先弄清楚这一点。可以
 
所有层名称的字符格式或长度是否相同?我的意思是,四个数字=年份,三个数字=区块,两个数字=地块?
 
你说的是一层,还是所有其他层都有相同长度的字符?
回复

使用道具 举报

15

主题

64

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 18:46:12 | 显示全部楼层
它们确实略有不同。它总是四个数字=年份,三个数字=区块,变量=地块,但地块可以是“-”之后的所有内容。
 

                               
登录/注册后可看大图

 
好吧,那没用。。。想给你看一张图层对话框的图片。
回复

使用道具 举报

15

主题

64

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 18:49:11 | 显示全部楼层
附件是图层对话框的图像
191756b35vdvsvzeuvbwsb.png
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 20:23 , Processed in 0.712277 second(s), 85 queries .

© 2020-2025 乐筑天下

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