FANGZHENG158
发表于 2013-9-21 21:20:15
学习一下
自贡黄明儒
发表于 2013-9-22 10:10:23
669423907 发表于 2013-9-20 21:44 static/image/common/back.gif
;;----------------=={ Minimum Bounding Box }==----------------;;
;; ...
Lee Mac确实很牛,如果加载highflybir的矩阵,程序如下
;;(LM:MinBoundingBox 选择集 精度[取值0~1]);返回包盒四角点
(defun LM:MinBoundingBox (ss pr / an ba bb bm cn cv i l mb)
;;VLA列表的包围盒的最小最大点列表
(defun LM:ListBoundingBox (lst / l1 l2 ll ur)
(foreach obj lst
(vla-getboundingbox obj 'll 'ur)
(setq l1 (cons (vlax-safearray->list ll) l1)
l2 (cons (vlax-safearray->list ur) l2)
)
)
(mapcar
(function (lambda (a b) (apply 'mapcar (cons a b))))
'(min max)
(list l1 l2)
)
)
(repeat (setq i (sslength ss))
(setq l (cons (vla-copy
(vlax-ename->vla-object (ssname ss (setq i (1- i))))
)
l
)
)
)
(setq bb (LM:ListBoundingBox l)) ;((-1437.59 2366.2 0) (-1429.07 2376.16 0))
(setq pr (* pr pi)
cn (apply 'mapcar
(cons (function (lambda (a b) (/ (+ a b) 2.0))) bb)
)
cv (vlax-3D-point cn) ;中点
bm (* (- (caadr bb) (caar bb)) (- (cadadr bb) (cadar bb))) ;x*y相当于面积
mb (cons 0.0 bb)
an 0
)
(while (< (setq an (+ an pr)) pi)
(foreach x l (vla-rotate x cv pr)) ;旋转
(setq bb (LM:ListBoundingBox l) ;旋转之后图元列表的最小包围盒
ba (* (- (caadr bb) (caar bb)) (- (cadadr bb) (cadar bb)))
)
(if (< ba bm)
(setq bm ba
mb (cons an bb)
)
)
)
(foreach x l (vla-delete x)) ;删除
(LM:RotateByMatrix
(mapcar
(function
(lambda (a)
(mapcar (function (lambda (b) ((eval b) (cdr mb)))) a)
)
)
'((caar cadar) (caadr cadar) (caadr cadadr) (caar cadadr))
)
cn ;旋转中心点
(- (car mb)) ;角度
)
)
crazylsp
发表于 2013-9-22 12:13:31
本帖最后由 crazylsp 于 2013-9-22 15:24 编辑
此处四个角点的转置数学意义我想是这样的:
根据转置的定义,两行两列行列交换后仍然是两行两列
p11 p12变成 p11 p21
p21 p22 p12 p22
从四个角点看就是右上左下角的坐标交换了
yxyfy
发表于 2013-9-22 18:39:41
两种包围盒都有?
jxjaxa
发表于 2013-9-22 21:13:09
wwwwwwwwwwwwwwwwwww
jsh2939
发表于 2013-9-22 21:15:12
看看!!!!!!!
mufy
发表于 2013-9-22 23:16:12
三维实体能实现吗
USER2128
发表于 2013-9-23 14:06:54
回复,学习黄大侠的程序!
rakea
发表于 2013-9-23 21:00:27
感谢分享,我其实现在正在学习编程
峰峰兒
发表于 2013-9-24 07:26:53
页:
1
2
3
[4]
5
6
7
8
9
10
11
12
13