明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6741|回复: 15

求实体最小包围盒 ,支持spline

    [复制链接]
发表于 2008-5-10 21:41 | 显示全部楼层 |阅读模式
因为vba的求盒子函数对spline误差较大,因此做了这个东东。
包围盒的程序已经有很多了,今天献丑,拿几个以前写的函数拼凑一下,得出这个加强版的求单个实体包围盒。
求spline的方法大致说一下。因为我数学差,用的是逼近法。先vla-GetBoundingBox 求的“最小”外框四个角点,
将曲线细分,排序求曲线与直线最近点和距离,四个方向四个距离。四个角点分别+-距离差值即可。
内含演示命令 c:xbox 和几个函数,其中求spline外框的函数参数如下
  1. (defun x!box (e / ent)
  2.   (setq ent (entget e))
  3.   (if (= "SPLINE" (cdr(assoc 0 ent)))
  4.     (x@box e 100) ;; 500 指逼近运算次数,通常取10~500即可,越大越精确.
  5.     (x!box1 e)
  6.   )
  7. )
  8. ;| x@box = 对spline用逼近法求最大外框---- by lxx.2008.5
  9. 格式:(x@box @ n)
  10. 参数:@ spline实体名
  11.       n 最大外框的逼近运算次数,整数。
  12. 说明:本函数调用   (x!nea 曲线1 曲线2 精度) 求最近点函数.
  13. 实例:
  14. (setq @ (car(entsel "\n 选择样条曲线:")) n 4)
  15. (x@box @ n)
  16. |;
  17. (defun c:xbox (/ e box)
  18.   (setq e (car(entsel "\n 用多义线画出包围盒,选单个实体:"))
  19. box(x!box e))
  20.   (apply 'command (cons ".pline" (mapcar '(lambda(x)(trans x 0 1))box)))(command "c")
  21.   (princ)
  22. )
附件是编译的文件。


本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-3-24 11:11 | 显示全部楼层
TANER 发表于 2012-4-12 12:40
http://lee-mac.com/minboundingbox.html

他这个含曲线的,就会出现尺寸不准确。
发表于 2019-6-19 10:23 | 显示全部楼层
第二个文件不好用
发表于 2008-5-11 00:07 | 显示全部楼层
谢谢!
发表于 2008-5-11 00:07 | 显示全部楼层
谢谢!
发表于 2008-5-11 00:44 | 显示全部楼层

还有一种方法,就是将SPLINE曲线分成N多段,然后取得各点的坐标,比较各点的坐标,可以求得最小包围矩形。(N越大越精确)

用vlax-curve-getPointAtDist函数取点,有兴趣的朋友可以试试。

发表于 2012-2-20 21:02 | 显示全部楼层
偶把这个也顶起来
发表于 2012-3-3 23:10 | 显示全部楼层
谢过了,顶起来。
发表于 2012-3-4 09:34 | 显示全部楼层
强人啊....
发表于 2012-4-5 10:20 | 显示全部楼层
有没有源码的,我想要!
发表于 2012-4-12 09:43 | 显示全部楼层
有没有源码的
发表于 2012-4-12 12:40 | 显示全部楼层
http://lee-mac.com/minboundingbox.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-9 07:57 , Processed in 2.432986 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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