找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1793|回复: 11

[求助] 在用多段线模拟spline时出现的问题

[复制链接]

已领礼包: 93个

财富等级: 招财进宝

发表于 2013-8-20 15:02:06 | 显示全部楼层 |阅读模式

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

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

×
本人参考了http://www.xdcad.net/forum/forum.php?mod=viewthread&tid=668387中eachy 兄弟模拟多段线的思路 11223344.jpg
通常情况都可以完美解决,见上图
但是有两种情况有问题
第一种是封闭的spline见图,问题不明见下图
77.png


第二种情况是角度很尖锐的spline,见上图图,测试程序时,在尖角附近用vlax-curve-getClosestPointTo取到的点并不在 spline上的,
112233445566.png
请问这个怎么解决
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 51个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-8-20 15:55:59 | 显示全部楼层
第一种情况封闭点表
第二种情况绘制的时候是不是受捕捉影响? 还有你再多转换一次确保是 spline 上的点

点评

封闭点表是什么意思? 捕捉确认已经关闭。我把取得的点再次用vlax-curve-getClosestPointTo 取点结果就是[attachimg]4992[/attachimg]这样  详情 回复 发表于 2013-8-20 16:24
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 93个

财富等级: 招财进宝

 楼主| 发表于 2013-8-20 16:24:23 | 显示全部楼层
eachy 发表于 2013-8-20 15:55
第一种情况封闭点表
第二种情况绘制的时候是不是受捕捉影响? 还有你再多转换一次确保是 spline 上的点

封闭点表是什么意思?
捕捉确认已经关闭。我把取得的点再次用vlax-curve-getClosestPointTo
取点结果就是 88.png 这样
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-20 16:34:24 来自手机 | 显示全部楼层
对自交曲线肯定会有问题,加上按点参数排序会不会好些?来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 1632个

财富等级: 堆金积玉

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

使用道具 举报

已领礼包: 23个

财富等级: 恭喜发财

发表于 2013-8-22 08:12:35 | 显示全部楼层
本帖最后由 cie0588 于 2013-8-22 08:13 编辑

我采用(vlax-curve-getPointAtDist)的方式,从起点开始按一定的距离找点,形成点列表。MS不会出现这样的问题。

11.gif

点评

你这个一定距离是怎么算的? 代码可以贴上来和大家分享吗?  详情 回复 发表于 2013-8-22 08:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 23个

财富等级: 恭喜发财

发表于 2013-8-22 08:19:18 | 显示全部楼层
  1. 【功能】   曲线等距点列表
  2. [函数]        (GL&T-curve-ptlst ename spacing mode)
  3. [参数]       ename:   图元名
  4.              spacing:  间距,实数
  5.              mode:    T 由起点开始;NIL由终点开始
  6. [返回值]     多点列表 ,由起点开始则不含终点,由终点开始则不含起点


  7. (defun GL&T-curve-ptlst (ename spacing mode / i lst n pt)
  8.   (setq i   1
  9.         lst nil
  10.   )
  11.   (setq n (fix (/ (GL&T-curve-length ename) spacing)))
  12.   (repeat n
  13.     (if mode
  14.       (setq pt (vlax-curve-getPointAtDist ename (* i spacing)))
  15.       (setq pt (vlax-curve-getPointAtDist
  16.                  ename
  17.                  (- (GL&T-curve-length ename) (* i spacing))
  18.                )
  19.       )
  20.     )
  21.     (setq lst (append (list pt) lst))
  22.     (setq i (1+ i))
  23.   )
  24.   (if mode
  25.     (setq lst (append (list (vlax-curve-getStartPoint ename))
  26.                       (reverse lst)
  27.               )
  28.     )
  29.     (setq
  30.       lst
  31.        (append (list (vlax-curve-getendPoint ename)) (reverse lst))
  32.     )
  33.   )
  34. )
  35. 【功能】   曲线长度
  36. [函数]        (GL&T-curve-length ename)
  37. [参数]       ename:图元名
  38. [返回值]     实数值



  39. (defun GL&T-curve-length        (ename)
  40.   (vlax-curve-getDistAtParam
  41.     ename
  42.     (vlax-curve-getEndParam ename)
  43.   )
  44. )

评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-8-22 08:20:44 | 显示全部楼层
cie0588 发表于 2013-8-22 08:12
我采用(vlax-curve-getPointAtDist)的方式,从起点开始按一定的距离找点,形成点列表。MS不会出现这样的问 ...

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

使用道具 举报

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

使用道具 举报

发表于 2013-8-22 08:56:17 | 显示全部楼层
楼主把代码贴出来才好诊断,简单写了个,还不适合闭合Spline
  1. (defun c:s2p (/ divpts e el pts ptl)
  2.   (defun divpts (n p1 p2 / d _d an)
  3.     (setq d (distance p1 p2)
  4.           _d (/ d n)
  5.           an (angle p2 p1)
  6.     )
  7.     (repeat (1- n)
  8.       (setq pts (cons (setq p2 (polar p2 an _d))
  9.                       pts
  10.                 )
  11.       )
  12.     )
  13.     pts
  14.   )
  15.   (if (setq e (ssget ":S" '((-4 . ">") (74 . 0))))
  16.     (progn
  17.       (setq el (entget (ssname e 0))
  18.             pts (mapcar
  19.                   'cdr
  20.                   (vl-remove-if-not '(lambda (x)
  21.                                        (= (car x) 10)
  22.                                      ) el
  23.                   )
  24.                 )
  25.       )
  26.       (if (vlax-curve-isclosed (ssname e 0))
  27.         (setq pts (append
  28.                     pts
  29.                     (list (vlax-curve-getstartpoint (ssname e 0)))
  30.                   )
  31.         )
  32.       )
  33.       (setq pts (mapcar
  34.                   '(lambda (x y)
  35.                      (append
  36.                        (list x)
  37.                        (divpts 8 x y)
  38.                      )
  39.                    )
  40.                   pts
  41.                   (cdr pts)
  42.                 )
  43.             pts (apply
  44.                   'append
  45.                   pts
  46.                 )
  47.             e (ssname e 0)
  48.             ptl (mapcar
  49.                   '(lambda (x)
  50.                      (vlax-curve-getclosestpointto e x)
  51.                    )
  52.                   pts
  53.                 )
  54.             ptl (vl-sort ptl '(lambda (e1 e2)
  55.                                 (< (vlax-curve-getparamatpoint e e1)
  56.                                    (vlax-curve-getparamatpoint e e2)
  57.                                 )
  58.                               )
  59.                 )
  60.             ptl (mapcar
  61.                   '(lambda (x)
  62.                      (list (car x) (cadr x))
  63.                    )
  64.                   ptl
  65.                 )
  66.             ptl (apply
  67.                   'append
  68.                   ptl
  69.                 )
  70.       )
  71.       (vlax-invoke (vla-get-modelspace (vla-get-activedocument
  72.                                                                (vlax-get-acad-object)
  73.                                        )
  74.                    ) 'AddLightweightPolyline ptl
  75.       )
  76.     )
  77.   )
  78.   (princ)
  79. )

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 08:32 , Processed in 0.219637 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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