明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 自贡黄明儒

[源码] [已经解决]获取对象包围盒、最小包围盒-----(也适于UCS)

    [复制链接]
发表于 2013-9-21 21:20 | 显示全部楼层
学习一下   
 楼主| 发表于 2013-9-22 10:10 | 显示全部楼层
669423907 发表于 2013-9-20 21:44
;;----------------=={ Minimum Bounding Box }==----------------;;
;;                                 ...

Lee Mac确实很牛,如果加载highflybir的矩阵,程序如下
  1. ;;(LM:MinBoundingBox 选择集 精度[取值0~1]);返回包盒四角点
  2. (defun LM:MinBoundingBox (ss pr / an ba bb bm cn cv i l mb)
  3.   ;;VLA列表的包围盒的最小最大点列表
  4.   (defun LM:ListBoundingBox (lst / l1 l2 ll ur)
  5.     (foreach obj lst
  6.       (vla-getboundingbox obj 'll 'ur)
  7.       (setq l1 (cons (vlax-safearray->list ll) l1)
  8.             l2 (cons (vlax-safearray->list ur) l2)
  9.       )
  10.     )
  11.     (mapcar
  12.       (function (lambda (a b) (apply 'mapcar (cons a b))))
  13.       '(min max)
  14.       (list l1 l2)
  15.     )
  16.   )

  17.   (repeat (setq i (sslength ss))
  18.     (setq l (cons (vla-copy
  19.                     (vlax-ename->vla-object (ssname ss (setq i (1- i))))
  20.                   )
  21.                   l
  22.             )
  23.     )
  24.   )
  25.   (setq bb (LM:ListBoundingBox l))                  ;((-1437.59 2366.2 0) (-1429.07 2376.16 0))
  26.   (setq        pr (* pr pi)
  27.         cn (apply 'mapcar
  28.                   (cons (function (lambda (a b) (/ (+ a b) 2.0))) bb)
  29.            )
  30.         cv (vlax-3D-point cn)                          ;中点
  31.         bm (* (- (caadr bb) (caar bb)) (- (cadadr bb) (cadar bb))) ;x*y相当于面积
  32.         mb (cons 0.0 bb)
  33.         an 0
  34.   )
  35.   (while (< (setq an (+ an pr)) pi)
  36.     (foreach x l (vla-rotate x cv pr))                  ;旋转
  37.     (setq bb (LM:ListBoundingBox l)                  ;旋转之后图元列表的最小包围盒
  38.           ba (* (- (caadr bb) (caar bb)) (- (cadadr bb) (cadar bb)))
  39.     )
  40.     (if        (< ba bm)
  41.       (setq bm ba
  42.             mb (cons an bb)
  43.       )
  44.     )
  45.   )
  46.   (foreach x l (vla-delete x))                          ;删除
  47.   (LM:RotateByMatrix
  48.     (mapcar
  49.       (function
  50.         (lambda        (a)
  51.           (mapcar (function (lambda (b) ((eval b) (cdr mb)))) a)
  52.         )
  53.       )
  54.       '((caar cadar) (caadr cadar) (caadr cadadr) (caar cadadr))
  55.     )
  56.     cn                                                  ;旋转中心点
  57.     (- (car mb))                                  ;角度
  58.   )
  59. )
发表于 2013-9-22 12:13 | 显示全部楼层
本帖最后由 crazylsp 于 2013-9-22 15:24 编辑

此处四个角点的转置数学意义我想是这样的:
根据转置的定义,两行两列行列交换后仍然是两行两列
p11 p12  变成 p11 p21
p21 p22         p12 p22

从四个角点看就是右上左下角的坐标交换了

                                 
                                 
发表于 2013-9-22 18:39 | 显示全部楼层
两种包围盒都有?
发表于 2013-9-22 21:13 | 显示全部楼层
wwwwwwwwwwwwwwwwwww
发表于 2013-9-22 21:15 | 显示全部楼层
看看!!!!!!!
发表于 2013-9-22 23:16 | 显示全部楼层
三维实体能实现吗
发表于 2013-9-23 14:06 | 显示全部楼层
回复,学习黄大侠的程序!
发表于 2013-9-23 21:00 | 显示全部楼层
感谢分享,我其实现在正在学习编程
发表于 2013-9-24 07:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-30 00:00 , Processed in 0.161393 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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