明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 邹锋

[讨论] 研究过最大包围框的,请进

    [复制链接]
发表于 2014-9-3 11:21:57 | 显示全部楼层
Gu_xl 发表于 2014-5-12 20:05
程序:

[/post]

谢谢固版的源码!我还没有研究过你的源码,只是测试了一下有个小漏洞!那两个圆是不是应该为单独的一个最小包围框才对呢?
找时间仔细看看学习!

本帖子中包含更多资源

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

x
发表于 2014-10-25 23:23:58 | 显示全部楼层
谢谢固版的源码!
发表于 2014-12-5 17:30:44 | 显示全部楼层
我也好想知道原理啊,应该不是对每个图元都进行框选再进行逻辑运算吧,要30帖才能看大神的程序
发表于 2014-12-5 20:31:05 | 显示全部楼层
非常不错,学习了
发表于 2015-2-21 14:46:33 | 显示全部楼层
本帖最后由 革天明 于 2015-2-21 14:51 编辑
Gu_xl 发表于 2014-5-12 20:05
程序:

[/post]

如果只选择一个图元,则程序不运行,修改了一下,对于单个图元也可以运行
;;框选物体画框 By Gu_xl 明经通道 2014.05.12
(defun c:mBox (/ BOX INTERSECT RECTANG SS N L A L1 FLAG B C)
  (defun box (e / p1 p2 p3 p4 obj)
    (setq obj (vlax-ename->vla-object e))
    (vla-GetBoundingBox obj 'p1 'p3)
    (setq p1 (vlax-safearray->list p1)
          p3 (vlax-safearray->list p3)
          p2 (list (car p1) (cadr p3) (caddr p1))
          p4 (list (car p3) (cadr p1) (caddr p1))
    )
    (if        (= "SPLINE" (cdr (assoc 0 (entget e))))
      (progn
        (SETQ lst
               (mapcar '(lambda        (a b)
                          (vlax-curve-getClosestPointToProjection e a b t)
                        )
                       (list p1 p2 p3 p4)
                       '((1.0 0 0) (0 -1.0 0) (-1.0 0 0) (0 1.0 0))
               )
        )
        (list
          (apply 'mapcar (cons 'min lst))
          (apply 'mapcar (cons 'max lst))
        )
      )
      (list p1 p3)
    )
  )
  (defun intersect (a b)
    (if
      (or
        (and
          (<= (caar a) (caar b) (caadr a))
          (<= (cadar a) (cadar b) (cadadr a))
        )
        (and
          (<= (caar a) (caar b) (caadr a))
          (<= (cadar a) (cadadr b) (cadadr a))
        )
        (and
          (<= (caar a) (caadr b) (caadr a))
          (<= (cadar a) (cadadr b) (cadadr a))
        )
        (and
          (<= (caar a) (caadr b) (caadr a))
          (<= (cadar a) (cadar b) (cadadr a))
        )

      )
       (list
         (apply 'mapcar (cons 'min (append a b)))
         (apply 'mapcar (cons 'max (append a b)))
       )
    )
  )
  (defun rectang (a b)
    (entmake
      (list
        '(0 . "LWPOLYLINE")
        '(100 . "AcDbEntity")
        '(8 . "0")
        '(62 . 1)
        '(100 . "AcDbPolyline")
        '(90 . 4)
        '(70 . 1)
        (cons 10 a)
        (list 10 (car a) (cadr b))
        (cons 10 b)
        (list 10 (car b) (cadr a))
      )
    )
  )
  ;;(setq l '())
  (if (setq ss (ssget))
    (progn
      (repeat (setq n (sslength ss))
        (setq l (cons (box (ssname ss (setq n (1- n)))) l))
      )
      (setq l
             (vl-sort
               l
               '(lambda        (a b)
                  (if (equal (caar a) (caar b) 1e-3)
                    (if        (equal (cadar a) (cadar b) 1e-3)
                      (if (equal (caadr a) (caadr b) 1e-3)
                        (< (cadadr a) (cadadr b))
                        (< (caadr a) (caadr b))
                      )
                      (< (cadar a) (cadar b))
                    )
                    (< (caar a) (caar b))
                  )
                )
             )
      )
      (setq a (car l)
            l (cdr l);;(if(not(cdr l))(car l)(cdr l))
      )
      (if (not l)
        (rectang (car a) (cadr a))
        (while l
          (setq        l1   nil
                flag nil
          )
          (while l
            (setq b (car l)
                  l (cdr l)
            )
            (if        (setq c (intersect a b))
              (setq a c
                    flag t
              )
              (setq l1 (cons b l1))
            )
          )
          (setq l (reverse l1))
          (if (not flag)
            (progn
              (rectang (car a) (cadr a))
              (setq a (car l)
                    l (cdr l)
              )
            )
          )
          (if (not l)
            (rectang (car a) (cadr a))
          )
        )
      );;end if (not l)
    );;end progn      
  );;(setq ss (ssget))
  (princ)
)
发表于 2015-2-23 06:58:06 | 显示全部楼层
问题在几个月前写过代码,有空看看g版的代码
发表于 2015-6-24 17:05:18 | 显示全部楼层
太历害了 学习了
发表于 2015-7-12 12:49:41 | 显示全部楼层
学习那学习那
发表于 2015-7-12 12:50:12 | 显示全部楼层
学习那学习那
发表于 2015-9-8 22:52:59 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 12:28 , Processed in 0.186815 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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