找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 900|回复: 14

[编程申请] 怎么求曲线上不等间距的点

[复制链接]
发表于 2016-10-28 21:29:46 | 显示全部楼层 |阅读模式

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

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

×
各位大哥,已知一条样条曲线及线上一点,有没有什么方法可以找到线上这样一组点(如:知道第二个点距离第一个点500,第三个距居第二个点200,第四距第三1500,等等,这些点不等间距,且均在样条曲线上),用CAD定距等分太麻烦了,少数几个点还能等分,数量多了,效率低呢。这个有什么快速方法么?或者小插件么?小弟感激不尽,529702907@qq.com

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2016-10-28 21:34:30 | 显示全部楼层
大哥些给点建议哦,在线等
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-28 22:14:56 | 显示全部楼层

你先说明下,这些点你想怎么交互输入给插件? 每次需要做的间距肯定要不同吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-28 22:32:11 | 显示全部楼层
写个函数吧
(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 (setq p1 (vlax-curve-getpointatdist e (setq dis1 (+ dis1 x))))
         (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))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-30 02:18:37 | 显示全部楼层

比如知道曲线上第一个点,我想在曲线上找到距该点500的第二点,然后距第二点750的第三点....我只用输入这些距离,程序能找到这些点?这可以么?

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

使用道具 举报

 楼主| 发表于 2016-10-30 02:21:10 | 显示全部楼层

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

使用道具 举报

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-30 12:35:04 | 显示全部楼层

上面不是给你用法了嘛

(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))


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-30 13:05:53 | 显示全部楼层
函数修改了下

(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)
)


下面是用这个函数写的插件,根据你输入的数据,在间隔点上画个圆。 安装 XDRX_API 环境后,执行TT

(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)
)


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

使用道具 举报

 楼主| 发表于 2016-10-30 19:58:29 | 显示全部楼层

嗯,我要的就是这种效果,运行了下有错误,这咋整啊
命令: tt
输入距离间隔(逗号分隔)<退出>:100,200,600
选取曲线<退出>:
点取开始点<退出>: <对象捕捉 开>
错误: no function definition: XD::CURVE:GETPOINTSATDISTGROUP

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-30 20:48:00 | 显示全部楼层

你把上面两个代码都加载啊。

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

使用道具 举报

 楼主| 发表于 2016-10-30 21:24:51 | 显示全部楼层

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-30 21:28:27 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2016-10-30 21:41:37 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 05:20 , Processed in 0.229426 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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