找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: st788796

[每日一码] Spline精确包围盒ClosestPointToProjection应用

  [复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-9-6 17:21:42 | 显示全部楼层
lgx9612 发表于 2014-9-6 16:50
看看你的代码能否正确的把如附件中spline的曲线计算成功?
请看http://bbs.xdcad.net/forum.php?mod=viewth ...

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

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

发表于 2014-9-6 19:20:18 | 显示全部楼层
csharp 发表于 2014-9-6 17:21
你用的取模拟点方式,不如 AutoDESK 提供的方法精确方便

AutoDESK 提供的方法?可否教我?

点评

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-9-6 19:31:28 | 显示全部楼层
lgx9612 发表于 2014-9-6 19:20
AutoDESK 提供的方法?可否教我?

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

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

发表于 2014-9-6 19:51:24 | 显示全部楼层
本帖最后由 lgx9612 于 2014-9-6 19:56 编辑
csharp 发表于 2014-9-6 19:31
主题标题中已经说出了函数名称

ClosestPointToProjection?不行吧(最起码1阶spline不行)?我的应用中到目前为止我的代码对spline完全可以成功计算,但其它用到函数来实现都不能百分百成功,我的附件中的spline用函数来就不能成功。

点评

41楼 http://bbs.xdcad.net/forum.php?mod=redirect&goto=findpost&ptid=671782&pid=3498849 函数中的 ptl 应为局部变量,否则就出错,把 ptl 加入局部变量就 ok  详情 回复 发表于 2014-9-7 12:12
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-9-7 12:12:00 | 显示全部楼层
lgx9612 发表于 2014-9-6 19:51
ClosestPointToProjection?不行吧(最起码1阶spline不行)?我的应用中到目前为止我的代码对spline完全可 ...

41楼
http://bbs.xdcad.net/forum.php?m ... 782&pid=3498849

函数中的 ptl 应为局部变量,否则就出错,把 ptl 加入局部变量就 ok


点评

但凡用GetBoundingBox这个函数就不能百分之百可以完全包容所选的spline线,有的包不住,更有完全在spline线之外, 但凡用Curve_GetClosestPointToProject 这个函数就不能百分之百成功计算最外的最小包容框点。或许大家  详情 回复 发表于 2014-9-7 19:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

发表于 2014-9-7 19:02:47 | 显示全部楼层
Free-Lancer 发表于 2014-9-7 12:12
41楼
http://bbs.xdcad.net/forum.php?mod=redirect&goto=findpost&ptid=671782&pid=3498849

但凡用GetBoundingBox这个函数就不能百分之百可以完全包容所选的spline线,有的包不住,更有完全在spline线之外,
但凡用Curve_GetClosestPointToProject 这个函数就不能百分之百成功计算最外的最小包容框点。或许大家在应用过程中没有碰到这种情况,但我的附件中的几条spline线就会让你的函数无能为力。完全在spline线之外的实例我就找不到了,因为之前做的实验没有保存起来,我实验的spline线不下万条.

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-9-7 23:09:40 | 显示全部楼层
lgx9612 发表于 2014-9-7 19:02
但凡用GetBoundingBox这个函数就不能百分之百可以完全包容所选的spline线,有的包不住,更有完全在spline线 ...

不在于你试验多少条,看看 Help






  1. (defun c:t1 (/ ss)
  2.   (if (setq ss (ssget '((0 . "spline"))))
  3.     ('((x / e i)
  4.        (setq i x)
  5.        (while (setq e (ssname ss (setq i (1+ i))))
  6.          (Pline:Make (Pnts:Box (SPline:box e)) t)
  7.        )
  8.       )
  9.       -1
  10.     )
  11.   )
  12.   (princ)
  13. )
  14. (defun Spline:Box (e / el pts ll ptl)
  15.   (if (and (setq el (entget e))
  16.            (= (cdr (assoc 0 el)) "SPLINE")
  17.       )
  18.     (progn
  19.       (setq pts        (mapcar        'cdr
  20.                         (vl-remove-if-not '(lambda (x) (= (car x) 10)) el)
  21.                 )
  22.             ll        (list (apply 'mapcar (cons 'min pts))
  23.                       (apply 'mapcar (cons 'max pts))
  24.                 )
  25.       )
  26.       (foreach n (list (getvar "ucsxdir") (getvar "ucsydir"))
  27.         (foreach p ll
  28.           (setq x (vlax-curve-getclosestpointtoprojection e p n t))
  29.           (and x (setq ptl (cons x ptl)))
  30.         )
  31.       )
  32.       (list (apply 'mapcar (cons 'min ptl))
  33.             (apply 'mapcar (cons 'max ptl))
  34.       )
  35.     )
  36.   )
  37. )
  38. (defun Pnts:Box        (pts / bp up)
  39.   (setq        bp (apply 'mapcar (cons 'min pts))
  40.         up (apply 'mapcar (cons 'max pts))
  41.   )
  42.   (list        bp
  43.         (list (car up) (cadr bp) 0.)
  44.         up
  45.         (list (car bp) (cadr up) 0.)
  46.   )
  47. )
  48. ;;;---------------------------------------------------------------;
  49. ;;;功能: 制造多段线                                               ;
  50. ;;;输入: pts --- 点表(2D)                                         ;
  51. ;;;输出: 实体                                                     ;
  52. ;;;---------------------------------------------------------------;
  53. (defun Pline:Make (pts tf)
  54.   (entmakex (append '((0 . "LWPOLYLINE")
  55.                       (100 . "AcDbEntity")
  56.                       (100 . "AcDbPolyline")
  57.                      )
  58.                     (list (cons 90 (length pts))
  59.                           (cons        70
  60.                                 (if tf
  61.                                   1
  62.                                   0
  63.                                 )
  64.                           )
  65.                     )
  66.                     (mapcar '(lambda (x)
  67.                                (list 10 (car x) (cadr x))
  68.                              )
  69.                             pts
  70.                     )
  71.             )
  72.   )
  73. )

点评

呵呵,给你这么好的案例你不试一下。教程是死的,应用是活的。给个链接你看看吧,http://bbs.mjtd.com/thread-110754-3-1.html。  详情 回复 发表于 2014-9-7 23:23
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

发表于 2014-9-7 23:23:49 | 显示全部楼层
st788796 发表于 2014-9-7 23:09
不在于你试验多少条,看看 Help

呵呵,给你这么好的案例你不试一下。教程是死的,应用是活的。给个链接你看看吧,http://bbs.mjtd.com/thread-110754-3-1.html

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-9-7 23:40:50 | 显示全部楼层
lgx9612 发表于 2014-9-7 23:23
呵呵,给你这么好的案例你不试一下。教程是死的,应用是活的。给个链接你看看吧,http://bbs.mjtd.com/th ...

你用的是旧的,错是因为函数没有写对,还是自己体会这个函数说明吧
666.gif

点评

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

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

发表于 2014-9-7 23:54:25 | 显示全部楼层
st788796 发表于 2014-9-7 23:40
你用的是旧的,错是因为函数没有写对,还是自己体会这个函数说明吧

受教,我还是井底之蛙呀,我用的还是cad2004呀。

点评

给你用图直观说明一下这个函数,曲线向一个平面投影,结果是返回曲线上距离该平面最近的一个点,如果将曲线向四个方向投影,就会有四个点,将这四个点做个 BOX ,自然就是 SPline 的精确 BOX 这个函数 ARX 原型  详情 回复 发表于 2014-9-8 00:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-9-8 00:19:36 | 显示全部楼层
lgx9612 发表于 2014-9-7 23:54
受教,我还是井底之蛙呀,我用的还是cad2004呀。

给你用图直观说明一下这个函数,曲线向一个平面投影,结果是返回曲线上距离该平面最近的一个点,如果将曲线向四个方向投影,就会有四个点,将这四个点做个 BOX ,自然就是 SPline 的精确 BOX
这个函数 ARX  原型
virtual Acad::ErrorStatus getClosestPointTo(
    const AcGePoint3d& givenPnt,
     const AcGeVector3d& direction,
     AcGePoint3d& pointOnCurve,
     Adesk::Boolean extend = Adesk::kFalse
) const;


20140908000250.jpg

点评

谢谢大师深夜做图教导,非常感谢。此函数实已理解,但可能因为我的版本较低,所以ClosestPointToProjection对一阶的spline出错了。因此我才会井底之蛙,对此函数的不支持。  详情 回复 发表于 2014-9-8 00:30

评分

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

查看全部评分

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

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

发表于 2014-9-8 00:30:41 | 显示全部楼层
Free-Lancer 发表于 2014-9-8 00:19
给你用图直观说明一下这个函数,曲线向一个平面投影,结果是返回曲线上距离该平面最近的一个点,如果将曲 ...

谢谢大师深夜做图教导,非常感谢。此函数实已理解,但可能因为我的版本较低,所以ClosestPointToProjection对一阶的spline出错了。因此我才会井底之蛙,对此函数的不支持。

点评

为什么还固守 CAD2004? http://bbs.mjtd.com/thread-110754-4-1.html 就这个问题,都折腾够久了吧,  详情 回复 发表于 2014-9-9 09:35
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-9-9 09:35:57 | 显示全部楼层
lgx9612 发表于 2014-9-8 00:30
谢谢大师深夜做图教导,非常感谢。此函数实已理解,但可能因为我的版本较低,所以ClosestPointToProjecti ...

为什么还固守 CAD2004?  http://bbs.mjtd.com/thread-110754-4-1.html


就这个问题,都折腾够久了吧,{:soso_e100:}

点评

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

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

发表于 2014-9-9 19:02:30 | 显示全部楼层
liuhaixin88 发表于 2014-9-9 09:35
为什么还固守 CAD2004?  http://bbs.mjtd.com/thread-110754-4-1.html

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-9-9 20:33:43 来自手机 | 显示全部楼层
lgx9612 发表于 2014-9-9 19:02
呵呵,工作在用呀,没有办法。是折腾够久的了。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 12:59 , Processed in 0.407086 second(s), 67 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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