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
查看完整版本: [已经解决]获取对象包围盒、最小包围盒-----(也适于UCS)