乐筑天下

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

[编程交流] 链测长度lisp到等高线标签

[复制链接]

8

主题

34

帖子

26

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 22:25:29 | 显示全部楼层 |阅读模式
请帮我编辑此代码。
它沿多段线创建链测长度。我想要的是将“CH 0.00”更改为多段线的高程值
  1. (defun c:cr (/)
  2. (vl-load-com)
  3. (defun _Line (p b o)
  4.       (entmake
  5. (append
  6.    '((0 . "line")
  7.      (100 . "AcDbEntity")
  8.      (67 . 0)
  9.      (410 . "Model")
  10.      (8 . "C-CTRL_TICK")
  11.      (100 . "AcDbLine")
  12.      )
  13.    (list (cons 10 (polar p b o)))
  14.    (list (cons 11 (polar p (+ b PI) o)))
  15.    '((210 0.0 0.0 1.0))
  16.    )
  17. )
  18. )
  19. (defun _text (p b o h c)
  20.       (entmake
  21. (append
  22.    '((0 . "MTEXT")
  23.      (100 . "AcDbEntity")
  24.      (67 . 0)
  25.      (410 . "Model")
  26.      (8 . "C-CTRL_TXT")
  27.      (100 . "AcDbMText")
  28.      )
  29.    (list (cons 10 (polar p (+ b PI) o))
  30.   )
  31.    (list (cons 40 h))
  32.    (list (cons 1 (strcat "CH "
  33.     (if (setq ld (nth (strlen (rtos  c 3 0)) '(x   "")))
  34.        ld "")
  35.     (rtos c 2 2))))
  36.    (list (cons 50 (+ b PI)))
  37.      (list '(41 . 0)
  38.      '(90 . 3)
  39.      '(63 . 256)
  40.      '(441 . 3935927)
  41.      '(71 . 4)
  42.      '(72 . 5)
  43.      (cons 7 (getvar "textstyle"))
  44.      '(210 0.0 0.0 1.0)
  45.      '(73 . 1)
  46.      )
  47.    )
  48. )
  49. )
  50. (defun _ang (p1 p2)(+ (angle p1 p2) (/ PI 2.0)))
  51. (setq dist (getdist "increment: "))
  52. (setq offset (getdist "tick size: "))
  53. (setq height (getdist "text height: "))
  54. (setq to (getdist "text offset: "))
  55. (setq ss (ssget)
  56. count 0
  57. dist dist
  58. offset offset
  59. height height
  60. )
  61. (repeat (sslength ss)
  62.    (setq ent    (ssname ss count)
  63.   obj    (vlax-ename->vla-object ent)
  64.   chainage dist
  65.   )
  66.    (_line (setq p (vlax-curve-getstartpoint obj))
  67.    (setq bearing (_ang p (vlax-curve-getPointAtDist obj (+ chainage 0.001))))
  68.     offset)
  69.    (_text p bearing to height 0.0)
  70.    (while
  71.      (and
  72. (setq point1 (vlax-curve-getPointAtDist obj chainage))
  73. (setq point2 (vlax-curve-getPointAtDist obj (+ chainage 0.001)))
  74. )
  75.       (setq bearing (+ (angle point1 point2) (/ PI 2.0)))
  76.       (_line point1 bearing offset)
  77.       (_text point1 bearing to height chainage)
  78.       (setq chainage (+ chainage dist))
  79.       )
  80.    (setq count (1+ count))
  81.    )
  82. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 22:30:54 | 显示全部楼层
要获得高程,请调整这些线:
如果不是您开发的,请指定该工具的自动恢复。
回复

使用道具 举报

8

主题

34

帖子

26

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 22:33:45 | 显示全部楼层
你好,米尔恰。
 
谢谢你的帮助。
 
你能帮我再次编辑这个代码吗?
我想要的是,当多段线的长度小于用户输入的增量值时,文本必须位于多段线的中间。
有可能吗?
 
 
  1. ;;;;;CONTOUR LABELING;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;;;;based on chainage lisp posted by sean.keohane ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. (defun c:cl (/)
  4. (vl-load-com)
  5. (defun _text (p b o h c)
  6. (entmake
  7. (append
  8.    '((0 . "MTEXT")
  9.      (100 . "AcDbEntity")
  10.      (67 . 0)
  11.      (410 . "Model")
  12.      (8 . "C-CTRL_TXT")
  13.      (100 . "AcDbMText")
  14.      )
  15.    (list (cons 10 (polar p (+ b PI) o))
  16.   )
  17.    (list (cons 40 h))
  18.    (list (cons 1 (strcat ""(if (setq ld (nth (strlen (rtos  c 2 0)) '(x   "")))ld "")(rtos c 2 0))));<--:Elevation Value;;;
  19.      (list (cons 50 (+ b (/ pi 2))));<--Rotation angle of text;;
  20.    
  21.      (list '(41 . 0)
  22.      '(90 . 3);<-- Mask
  23.      '(63 . 256);<--Mask
  24.      '(441 . 3935927);<-- Mask
  25.      '(71 . 5);<--Justification:Middle Center;;
  26.      '(72 . 5)
  27.      (cons 7 (getvar "textstyle"));<--:Current text style;;
  28.      '(210 0.0 0.0 1.0)
  29.      '(73 . 3)
  30.      )
  31.    )
  32. )
  33. )
  34. (defun _ang (p1 p2)(+ (angle p1 p2) (/(* 3 PI) 2.0)))
  35. (setq dist (cond ((getdist "increment <400>:"))(400)));<--:Contour Label Increment;;
  36. (setq offset 0)
  37. (setq height 2.5);<--:default text height;;
  38. (setq to 0)
  39. (setq ss (ssget)
  40. count 0
  41. dist dist
  42. offset offset
  43. height height
  44. )
  45. (repeat (sslength ss)
  46. (setq ent (ssname ss count)
  47.   obj (vlax-ename->vla-object ent)
  48.   chainage dist)
  49.   
  50.    (_text p bearing to height (caddr p))
  51.    (while
  52.      (and
  53. (setq point1 (vlax-curve-getPointAtDist obj chainage))
  54. (setq point2 (vlax-curve-getPointAtDist obj (+ chainage 0.001)))
  55. )
  56.       (setq bearing (+ (angle point1 point2) (/(* 3 PI )2.0)))
  57.       (_text point1 bearing to height (caddr point1))
  58.       
  59.       (setq chainage (+ chainage dist))
  60.       )
  61.    (setq count (1+ count))
  62.    )
  63. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 22:36:57 | 显示全部楼层
我认为它是在这里定义的。
  1. (_text p [color=red]bearing[/color] to height (caddr p))

 
回复

使用道具 举报

8

主题

34

帖子

26

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 22:40:07 | 显示全部楼层
 
Mircea是正确的。
 
你的(setq方位…)在while循环内,但(_text p bearing to height(caddr p))在while之前
 
  1. (setq bearing (+ (angle point1 point2) (/(* 3 PI )2.0)))

对不起,我忽略了
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 22:42:43 | 显示全部楼层
 
我还意识到我发布的第二个代码不完整。
 
谢谢hanhphuc
回复

使用道具 举报

8

主题

34

帖子

26

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 22:44:59 | 显示全部楼层
 
 
你好,hanhphuc
 
你能查一下这个代码吗。
对我来说效果很好,但仍然需要你们的帮助。
如果多段线的长度小于等高线间隔,则不会创建标签。
 
  1. ;;;    (_text p bearing to height (caddr p)) <--- [color="red"]try to remove this line[/color]
  2.    (while
  3.      (and
  4. ...
  5. ...
232533mvsamkc1pkcr5n9k.jpg
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 22:50:05 | 显示全部楼层
 
你希望程序做什么?终止程序?还是做点别的?
回复

使用道具 举报

8

主题

34

帖子

26

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 22:51:08 | 显示全部楼层
我想标记多段线的中点
回复

使用道具 举报

8

主题

34

帖子

26

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 22:54:07 | 显示全部楼层
对于长度小于间隔值的*行,在开始/中间/结束处会是文本吗?
 
或者开始和结束就足够了?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 06:25 , Processed in 0.935866 second(s), 74 queries .

© 2020-2025 乐筑天下

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