明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2093|回复: 8

沿曲线标注高程

[复制链接]
发表于 2017-8-3 09:00 | 显示全部楼层 |阅读模式
  1. ;; 测量选定曲线上两点之间的距离
  2. (defun apkl (ENOBJ p1 p2 / DIST DIST1 DIST2 EN ENOBJ OSM P1 P2)
  3. ;;;来源:QQ群友:GreenWood(181976640)。属QQ群:SP编程,e派工具箱,摄影  24942984
  4.   
  5.   
  6. ;(setq ENOBJ (CAR (ENTSEL)))
  7. ;(setq p1 (getpoint "\n选择曲线上的一点:"))
  8. ;(setq p2 (getpoint "\n选择曲线上的另一点:"))
  9. (setq dist1 (vlax-curve-getDistAtPoint enobj p1))
  10. (setq dist2 (vlax-curve-getDistAtPoint enobj p2))
  11. ;(print "\n测量段曲线长度:")
  12. (setq dist (abs (- dist1 dist2)))
  13. dist
  14. )

  15. (defun c:bg (  / ENOBJ p1 p2 s1 s2 p3  dist gcc bz dist1 xgc)

  16. (setq ENOBJ (CAR (ENTSEL "\n请选择线段")))
  17. (setq p1 (getpoint "\n选择曲线上的一点:"))
  18.   (setq s1 (getreal "\n请输入该点标高:"))
  19. (setq p2 (getpoint "\n选择曲线上的另一点:"))
  20. (setq s2 (getreal "\n请输入该点标高:"))
  21.   (setq dist (apkl ENOBJ p1 p2 ))
  22. (setq gcc (- s1 s2))
  23.   (setq bz (/ gcc dist))
  24.   (while (setq p3 (getpoint "\n选择曲线上要查询的一点:"))
  25.     (setq dist1 (apkl ENOBJ p3 p2 ) )
  26. (setq xgc (+ s2 (* dist1 bz )))
  27.     (entmake (list '(0 . "TEXT") '(8 . "fgbj")(cons 1 (rtos xgc 2 3)) (cons 10 p3 ) (cons 40 1.0)))
  28.    )
  29. (princ)
  30.       )


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2017-8-3 10:13 | 显示全部楼层
测绘板块就你还活跃着
发表于 2017-8-3 10:21 | 显示全部楼层
; 错误: 输入的字符串有缺陷
发表于 2017-8-6 19:09 | 显示全部楼层
文字如能垂直于曲线可能更加美观。
发表于 2022-9-7 13:39 | 显示全部楼层
好东西顶一个
 楼主| 发表于 2022-10-14 23:31 | 显示全部楼层
本帖最后由 树櫴希德 于 2022-10-22 23:36 编辑

  1. (defun mkgcd (inspt height  scale  / pt  pt1 blkdef obj)
  2.   (setvar "CMDECHO" 0)
  3.   (command "layer" "m" "检查高程点" "c" "1" "" "L" "CONTINUOUS" ""  "")
  4.   (if height
  5.     (setq height (rtos height 2 3))
  6.     (setq height "")
  7.   )

  8.   
  9.   (regapp "SOUTH")
  10.   ;;;检查字体 "HZ" 是否存在
  11.   (if (not (tblobjname "style" "HZ"))
  12.     (command "style" "HZ" "rs.shx,hztxt.shx" 0 1 0 "" "" "")
  13.   )
  14.   ;;;检查是否存在高程点图块定义
  15.   (if (not (tblobjname "block" "GC2000"))
  16.     (progn
  17.       ;13、entmake生成普通块
  18. (defun emkblk ( pt name /  )
  19.   (entmake (list '(0 . "block") (cons 2 name) '(70 . 0) (cons 10 pt)))

  20.   
  21. (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 4) (cons 10 (list (+ (car pt) 0.75)  (+ (cadr pt) 1)   ))(cons 10 pt) (cons 10 (list (- (car pt) 0.75)  (+ (cadr pt) 1)   ))

  22. (cons 10 (list (+ (car pt) 4.25)  (+ (cadr pt) 1)   ))



  23.          ))
  24.   
  25.   (entmake '((0 . "ENDBLK")))
  26.   
  27.   ;(entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt)))
  28. )

  29.   (emkblk '(0 0) "GC2000")
  30.     )
  31.   )
  32.   ;;;插入块
  33.   (entmake (list
  34.              '(0 . "INSERT")
  35.              '(100 . "AcDbEntity")
  36.              '(100 . "AcDbBlockReference")
  37.              '(66 . 1);;;属性跟随标志,1跟随,0不跟随
  38.               (cons 2 "GC2000")
  39.               (cons 10 inspt)
  40.               (cons 41 scale)
  41.               (cons 42 scale)
  42.               (cons 43 scale)
  43.               '(-3 ("SOUTH" (1000 . "202101")))
  44.            )
  45.   )
  46.   ;;;插入属性
  47.   (entmake (list
  48.              '(0 . "ATTRIB")
  49.              '(100 . "AcDbEntity")
  50.              '(100 . "AcDbText")
  51.               (cons 10 (setq pt (polar inspt (* 0.5 PI) (* 2.25 scale))))
  52.               (cons 40 (* 2.0 scale))
  53.               (cons 50 0)
  54.                (cons 62 3)
  55.               (cons 41 0.8)
  56.               (cons 51 0)
  57.               (cons 1 height)
  58.               (cons 7 "HZ")
  59.               (cons 72 0)
  60.               (cons 11 pt)
  61.               '(100 . "AcDbAttribute")
  62.               (cons 2 "height")
  63.               (cons 70  0)
  64.               (cons 74 2)
  65.            )
  66.    )
  67. ;;;;;;;;;;;;;;;;;;;;;;;
  68. ;;;插入属性
  69.   
  70.   
  71.    ;;;结束标志
  72.    (entmake '((0 . "SEQEND")))
  73.    (princ)
  74. )


  75. ;;;;;;;;===========================================


  76. ;; 测量选定曲线上两点之间的距离
  77. (defun apkl (ENOBJ p1 p2 / DIST DIST1 DIST2 EN ENOBJ OSM P1 P2)
  78. ;;;来源:QQ群友:GreenWood(181976640)。属QQ群:SP编程,e派<a href="http://bbs.mjtd.com/forum-6-1.html" target="_blank" class="relatedlink">工具</a>箱,摄影  24942984
  79.   
  80.   
  81. ;(setq ENOBJ (CAR (ENTSEL)))
  82. ;(setq p1 (getpoint "\n选择曲线上的一点:"))
  83. ;(setq p2 (getpoint "\n选择曲线上的另一点:"))
  84. (setq dist1 (vlax-curve-getDistAtPoint enobj p1))
  85. (setq dist2 (vlax-curve-getDistAtPoint enobj p2))
  86. ;(print "\n测量段曲线长度:")
  87. (setq dist (abs (- dist1 dist2)))
  88. dist
  89. )

  90. (defun c:bg (  / ENOBJ p1 p2 s1 s2 p3  dist gcc bz dist1 xgc p33)

  91. (setq ENOBJ (CAR (ENTSEL "\n请选择线段")))
  92. (setq p1 (getpoint "\n选择曲线上的一点:"))
  93.   (setq s1 (getreal "\n请输入该点标高:"))
  94. (setq p2 (getpoint "\n选择曲线上的另一点:"))
  95. (setq s2 (getreal "\n请输入该点标高:"))
  96.   (setq dist (apkl ENOBJ p1 p2 ))
  97. (setq gcc (- s1 s2))
  98.   (setq bz (/ gcc dist))
  99.   (while (setq p33 (getpoint "\n选择曲线上要查询的一点:")
  100.                p3   (vlax-curve-getClosestPointTo ENOBJ p33 T)

  101.          )
  102.          
  103.    
  104.     (setq dist1 (apkl ENOBJ p3 p2 ) )
  105. (setq xgc (+ s2 (* dist1 bz )))

  106.     (mkgcd p3 xgc  1)
  107.     (command "rotate" (entlast) "" p3 (* (- (angle p3 p33) (/ pi 2) ) (/ 180 pi) )  )
  108.     ;(entmake (list '(0 . "TEXT") '(8 . "fgbj")(cons 1 (rtos xgc 2 3)) (cons 10 p3 ) (cons 40 1.0)))
  109.    )
  110. (princ)
  111.       )
发表于 2022-10-16 22:21 | 显示全部楼层

大佬重出江湖啦~
发表于 2022-10-17 15:25 | 显示全部楼层
这个对渐变高程分有用!
 楼主| 发表于 2023-6-1 18:31 | 显示全部楼层
148.954,80.6901
  1. (vlax-curve-getClosestPointTo (vlax-ename->vla-object (car (entsel)))  (getpoint) )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-25 08:42 , Processed in 3.501026 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表