找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 426|回复: 3

[原创] 多段线子线段线长的取得

[复制链接]

已领礼包: 444个

财富等级: 日进斗金

发表于 2017-6-6 09:47:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×

选择多段线,得到多段各角点距起始点的距离:
(setq ent (car (entsel))
      n   0
      result nil
)
(while
   (setq dist (vlax-curve-getDistAtParam ent n))
   (setq result (cons dist result)
         n (1+ n)
   )
)
(cdr (reverse result))

返回值:
(830.0 1050.0 1880.0 2180.0 2400.0 3370.0 3590.0 4040.0)

根据此列表,得到多段线各子线段线长:

(setq lens '(830.0 1050.0 1880.0 2180.0 2400.0 3370.0 3590.0 4040.0))
(mapcar '- lens (cons 0 (reverse (cdr (reverse lens)))))
返回值:
(830.0 220.0 830.0 300.0 220.0 970.0 220.0 450.0)

根据多段线各子线段线长列表,重新计算得到各点位距超始点距离值列表:
(setq lens '(830.0 220.0 830.0 300.0 220.0 970.0 220.0 450.0))
(setq lenq nil)
(mapcar '(lambda(x) (setq lenq (cons x lenq)) (apply '+ lenq)) lens)
返回值:
(830.0 1050.0 1880.0 2180.0 2400.0 3370.0 3590.0 4040.0)

根据多段线子线段线长列表,得到第几子段线与相对应该子线段的双元表:
(setq lens '(830.0 220.0 830.0 300.0 220.0 970.0 220.0 450.0))
(setq n 0)
(mapcar '(lambda (x) (setq n (1+ n)) (cons n x)) lens)
返回值:
((1 . 830.0) (2 . 220.0) (3 . 830.0) (4 . 300.0) (5 . 220.0) (6 . 970.0) (7 . 220.0) (8 . 450.0))

评分

参与人数 1D豆 +5 收起 理由
newer + 5

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-6 10:18:49 | 显示全部楼层
本帖最后由 newer 于 2017-6-6 10:59 编辑

贴个同功能的XDRX API的

  1. (defun _PlSegLengths (e / lens i seg)
  2.     (setq i        0
  3.           numVerts (xdrx_polyline_numverts e)
  4.     )
  5.     (repeat (1- numVerts)
  6.         (or (setq seg (xdrx_polyline_getlinesegat e i t))
  7.             (setq seg (xdrx_polyline_getarcsegat e i t))
  8.         )
  9.         (setq lens (cons (cons i (xdge::getpropertyvalue seg "length")) lens)
  10.               i    (1+ i)
  11.         )
  12.         (xdge::free seg)
  13.     )
  14.     (reverse lens)
  15. )



另外一个版本
  1. (defun _PLSegLengths (e / g gl i lens)
  2.     (if (setq g (xdge::constructor e))
  3.         (progn (setq gl (xdge::getpropertyvalue g "getcurvelist")
  4.                      i  -1
  5.                )
  6.                (setq
  7.                    lens (mapcar
  8.                             '(lambda (x)
  9.                                  (cons (setq i (1+ i)) (xdge::getpropertyvalue x "length"))
  10.                              )
  11.                             gl
  12.                         )
  13.                )
  14.                (xdge::free gl g)
  15.         )
  16.     )
  17.     lens
  18. )


命令: (_PLSEGLENGTHS (entlast))
((0 . 455.818) (1 . 473.946) (2 . 471.352) (3 . 711.616) (4 . 428.606) (5 .
726.347) (6 . 659.893))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2017-6-6 10:50:07 来自手机 | 显示全部楼层
本帖最后由 csharp 于 2017-6-6 17:40 编辑

(setq n (fix (vlax-curve-getendparam e)))(setq i 0)(repeat n (setq l(cons (list i (- (vlax-curve-getdistatparam (1+ i))(vlax-curve-getdistatparam e))) l) i (1+ i)))

  1. (defun f (e / n i l)
  2.   (setq    n (fix (vlax-curve-getendparam e))
  3.     i 0
  4.   )
  5.   (repeat n
  6.     (setq l (cons (cons    i
  7.             (- (vlax-curve-getdistatparam e (1+ i))
  8.                (vlax-curve-getdistatparam e i)
  9.             )
  10.           )
  11.           l
  12.         )
  13.       i (1+ i)
  14.     )
  15.   )
  16.   (reverse l)
  17. )

点评

太牛了,手机码这么长!!  发表于 2017-6-6 11:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-20 07:39 , Processed in 0.259541 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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