明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 586|回复: 0

根据大于3点的三维多段线首尾高程分配给中间个点

[复制链接]
发表于 2023-6-8 18:41:15 | 显示全部楼层 |阅读模式

根据大于3点的三维多段线首尾高程分配给中间个点

  1. ;; 测量选定曲线上两点之间的距离
  2. (defun apkl (ENOBJ p1 p2 / DIST DIST1 DIST2 EN ENOBJ OSM P1 P2)
  3. ;;;来源:QQ群友:GreenWood(181976640)。属QQ群:SP编程,e派<a href="http://bbs.mjtd.com/forum-6-1.html" target="_blank" class="relatedlink">工具</a>箱,摄影  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 vxs (e / i v lst ppp)
  16.   (setq i 0)
  17.   (while
  18.     (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
  19.      (setq lst (cons v lst))
  20.   )
  21.   (setq ppp (reverse lst) )
  22. (append (list(vlax-curve-getpointatparam e 0)) ppp )
  23.   
  24.   )
  25. ;;;;;;;;
  26. (defun  ddx ( Polyline  p1  gccc / x xdb xh coord temp0 temp1  PolylineObj aaa n)
  27.   
  28. (setq PolylineObj (vlax-ename->vla-object Polyline ) )
  29.   (setq aaa (vxs Polyline) )     (setq n (length aaa))
  30.   (setq xdb (apply 'append (mapcar'(lambda(x)(setq aaa(cdr aaa))   (list(cons (- n (length aaa)) x))  )aaa))  )


  31. (foreach x  xdb
  32.    
  33.       (if    (< (distance (list (nth 1 x) (nth 2 x) ) (list (car p1) (cadr p1)) )  0.0500)

  34. (setq xh (-(car x) 1))
  35.   ;(setq xh nil )

  36.   )
  37.    

  38. );;;;;;
  39. ;; 找出第一个索引位置的坐标

  40.   (setq coord(vla-get-Coordinate PolylineObj  xh))


  41. ;;; 改变坐标

  42.   ;(setq temp(+ (vlax-safearray-get-element (vlax-variant-value coord) 0) 1))
  43. (setq temp0 (car p1)
  44.       temp1  (cadr p1)
  45.            

  46.      )

  47.   (setq coord(vlax-variant-value coord))

  48.   (vlax-safearray-put-element coord 0 temp0)

  49. (vlax-safearray-put-element coord 1 temp1)
  50. (vlax-safearray-put-element coord 2 gccc)
  51.   (vla-put-Coordinate PolylineObj xh coord)

  52.   (vla-Update PolylineObj)
  53.   
  54. ;;;;;;;
  55.   )


  56.       

  57. ;;;;;;;

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

  59. (setq ENOBJ (CAR (ENTSEL "\n请选择线段")))
  60. (setq p1 (getpoint "\n选择曲线上的一点:"))
  61.   (setq s1 (getreal "\n请输入该点标高:"))
  62. (setq p2 (getpoint "\n选择曲线上的另一点:"))
  63. (setq s2 (getreal "\n请输入该点标高:"))
  64.   (setq dist (apkl ENOBJ p1 p2 ))
  65. (setq gcc (- s1 s2))
  66.   (setq bz (/ gcc dist))

  67.   (foreach  y   (vl-remove  (last (cdr(vxs ENOBJ) ))  (cdr(vxs ENOBJ) ) )
  68.         
  69.         (setq dist1 (apkl ENOBJ y p2 ) )
  70. (setq xgc (+ s2 (* dist1 bz )))
  71.    (ddx ENOBJ  y  xgc )
  72. (entmake (list '(0 . "TEXT") '(8 . "fgbj")(cons 1 (rtos xgc 2 3)) (cons 10 y ) (cons 40 1.0)))
  73.     )

  74.   
  75. (ddx ENOBJ  p1  s1 )
  76.   (entmake (list '(0 . "TEXT") '(8 . "fgbj")(cons 1 (rtos s1 2 3)) (cons 10 p1 ) (cons 40 1.0)))
  77.   (ddx ENOBJ  p2  s2 )
  78.   (entmake (list '(0 . "TEXT") '(8 . "fgbj")(cons 1 (rtos s2 2 3)) (cons 10 p2 ) (cons 40 1.0)))
  79. (princ)
  80.       )

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-22 20:49 , Processed in 0.152983 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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