找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 907|回复: 1

[曲线] (XD::Curve:GetPointsAtDistGroup)曲线给点定距离组求一系列点

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-28 22:46:53 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Curve:GetPointsAtDistGroup
调用格式: (XD::Curve:GetPointsAtDistGroup e pt disl)
参数说明: e ---------- 曲线实体
pt ---------- 开始点
disl ---------- 距离表
返回值: 点表 或NIL
函数简介: 曲线给点定距离组求一系列点
函数来源: 原创
函数作者: Newer
适用版本: 不限 
最后更新时间: 2016-10-28
备注: -
演示图片: -

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

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

×
本帖最后由 newer 于 2016-10-30 13:09 编辑

源自 http://bbs.xdcad.net/thread-705968-1-1.html

各位大哥,已知一条样条曲线及线上一点,有没有什么方法可以找到线上这样一组点(如:知道第二个点距离第一个点500,第三个距居第二个点200,第四距第三1500,等等,这些点不等间距,且均在样条曲线上),用CAD定距等分太麻烦了,少数几个点还能等分,数量多了,效率低呢。这个有什么快速方法么?或者小插件么?小弟感激不尽
(defun XD::Curve:GetPointsAtDistGroup (e pt disl / dis1 p1 pts x)
  (if (not (setq dis1 (vlax-curve-getdistatpoint e pt)))
    (setq pt (vlax-curve-getClosestPointTo e pt)
          dis1 (vlax-curve-getdistatpoint e pt)
    )
  )
  (setq pts (list pt))
  (mapcar
    '(lambda (x)
       (if (and (setq p1 (vlax-curve-getpointatdist e (setq dis1 (+ dis1 x))))
                (not (equal p1 (vlax-curve-getstartpoint e)))
           )
         (setq pts (cons p1 pts))
       )
     )
    disl
  )
  (reverse pts)
)


(setq a (XD::CURVE:GETPOINTSATDISTGROUP e p1 '(100 200 300 400)))
((2865.54 773.647 0.0) (2873.57 873.299 0.0) (2964.42 1031.75 0.0) (3210.97
865.563 0.0) (3511.21 931.797 0.0))

测试代码,曲线上指定间隔画圆:

(defun c:tt()
    (if (and (/= "" (setq disl (getstring "\n输入距离间隔(逗号分隔)<退出>:")))
             (setq disl (xdrx_string_regexps "[^,]+" disl))
             (setq e (car (xdrx_entsel "\n选取曲线<退出>:" '((0 . "*LINE,ELLIPSE,CIRCLE,ARC")))))
             (setq pt (getpoint "\n点取开始点<退出>:"))
        )
      (progn
        (setq disl (mapcar 'atof disl))
        (setq pt (xdrx_curve_getclosestpoint e pt))
        (setq pts (XD::Curve:GetPointsAtDistGroup e pt disl)
              r (/ (car disl) 3.0)
        )
        (mapcar '(lambda(x)(xdrx_circle_make x r)) pts)
      )
    )
    (princ)
)


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

已领礼包: 5605个

财富等级: 富甲天下

发表于 2016-10-29 07:50:14 | 显示全部楼层
感谢“Newer”的程序,看着亲切。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 03:27 , Processed in 0.419400 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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