明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: lgx9612

[讨论] 精确快速求spline线的最小点及最大点

  [复制链接]
 楼主| 发表于 2014-7-17 22:25:32 | 显示全部楼层
lgx9612 发表于 2014-7-17 20:32
在这个图中不能得出正确包容盒子我只是在你的代码中加了一句
  (command "rectang" (apply 'mapcar (con ...

知道了,不好意思,可以了,我打开捕捉点,关掉就可以了.
 楼主| 发表于 2014-7-17 23:15:05 | 显示全部楼层
lgx9612 发表于 2014-7-17 22:25
知道了,不好意思,可以了,我打开捕捉点,关掉就可以了.

受益非浅,谢谢Gu_xl!!
  1. ;;;经典,费点工夫理解
  2. (SETQ  lst
  3. (mapcar '(lambda (a b)
  4.             (vlax-curve-getClosestPointToProjection curve a b t))
  5.          (list p1 p2 p3 p4)
  6.          '((1.0 0 0) (0 -1.0 0) (-1.0 0 0) (0 1.0 0))
  7.          )
  8. )

  9. ;;;按我的思路如果罗嗦成下面这样,我就很容易理解了。
  10. (setq p1 (vlax-curve-getClosestPointToProjection curve p1 (list 1.0 0 0) t))
  11. (setq p2 (vlax-curve-getClosestPointToProjection curve p2 (list 0 -1.0 0) t))
  12. (setq p3 (vlax-curve-getClosestPointToProjection curve p3 (list -1.0 0 0) t))
  13. (setq p4 (vlax-curve-getClosestPointToProjection curve p4 (list 0 1.0 0) t))
  14. (SETQ  lst (list p1 p2 p3 p4))


  15. (vla-GetBoundingBox obj 'p1 'p3);;确保这个函数能够包容整个曲线,如果不能就会出错,
  16. ;;曾经我遇到几个spline线就是不能全包住,就是ug转图的,我现在不能确认是不像刚才一样打开
  17. ;;捕捉点了
发表于 2014-7-18 10:31:02 | 显示全部楼层
lgx9612 发表于 2014-7-17 23:15
受益非浅,谢谢Gu_xl!!

还有包不住的?从来没遇见过!请把样例发上来见识下!
发表于 2014-7-18 11:01:15 | 显示全部楼层
风树 发表于 2014-7-16 20:40
楼主,你是哪里人啊,写"程式"的人好少哦

广东人~~~哈哈
 楼主| 发表于 2014-7-18 12:21:35 | 显示全部楼层
ysq101 发表于 2014-7-18 11:01
广东人~~~哈哈

这都猜到了!
 楼主| 发表于 2014-7-18 12:26:31 | 显示全部楼层
Gu_xl 发表于 2014-7-18 10:31
还有包不住的?从来没遇见过!请把样例发上来见识下!

     Gu_xl大师,你好!你是我学习的偶像.但就spline线来说我深有体会,我为我的程序,试验研究不下一个月,现有大师这几行代码就让我佩服的五体投地,但在我佩服之余,我一直回想我做过的试验,找我做的cad图档,终于让我找出来了并附上让大家研究研究.在大师面前讲我的心得和经验确实有点班门弄斧,献丑了.
spline的情况很多,autocad中画的spline线是通过点做的,故问题不是很大,但现在的3d做出的spline线就有通过点和通过控制点来画线;从阶次上又分1,2,3,4.....阶次的曲线,在曲线上的每个点都可调整它的曲率及刚度,所以用vla-getboundingbox做的包容盒子情况也很多,多数是可以把整个曲线包住,但有的只包到一点,更有的则整个在曲线之外.

本帖子中包含更多资源

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

x
发表于 2014-7-18 12:38:00 | 显示全部楼层
lgx9612 发表于 2014-7-18 12:26
Gu_xl大师,你好!你是我学习的偶像.但就spline线来说我深有体会,我为我的程序,试验研究不下一个月,现 ...

recover
一下呢?行不行呢?
 楼主| 发表于 2014-7-18 12:55:19 | 显示全部楼层
裤裆有异味 发表于 2014-7-18 12:38
recover
一下呢?行不行呢?

不行吧,修复只是修复错误,而这图本无错误.
发表于 2014-7-18 13:16:33 | 显示全部楼层
lgx9612 发表于 2014-7-18 12:26
Gu_xl大师,你好!你是我学习的偶像.但就spline线来说我深有体会,我为我的程序,试验研究不下一个月,现 ...

第一次遇见1阶SPLINE!14楼的代码已修正1阶SPLINE的错误问题!
 楼主| 发表于 2014-7-18 19:45:46 | 显示全部楼层
Gu_xl 发表于 2014-7-18 13:16
第一次遇见1阶SPLINE!14楼的代码已修正1阶SPLINE的错误问题!

再一次让你失望了,你的代码还是不能正确执行,附gif。
(setq pl (vlax-safearray->list
                 (vlax-variant-value (vla-get-ControlPoints obj))
               )
      )
这句太经典了,我就是认识不多vl的高级函数.其实下面我的程序就是要表达你的这种效果.
  • (setq bbb (entget partname_lgx))
  • (while (/= (assoc 10  bbb) nil)
  • (setq p1_lgx (assoc 10  bbb))
  • (setq p_lgx (cons (cdr p1_lgx) p_lgx))
  • (setq bbb (vl-remove p1_lgx bbb))



这句(vlax-curve-getClosestPointToProjection curve a b t)也很经典,但不是很好,因为把曲线压缩投影到平面后就成一直线了,所以得出的结果不一定是最正确的。
以我之见,单从这一句好像还不是很能够完全包住曲线
(setq pl (vlax-safearray->list
                 (vlax-variant-value (vla-get-ControlPoints obj))
               )
      ),
因为有的3d软件如果在一个最高的极点调整一曲率,使曲线的最高点高出的控制点就可能出错了.适当的加一此余量会更好.
     学生愚见,请指教!


本帖子中包含更多资源

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

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-15 13:27 , Processed in 0.224323 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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