明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 邹锋

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

    [复制链接]
发表于 2014-5-12 22:18:26 | 显示全部楼层
xyp1964 发表于 2014-5-12 17:53
这样的图会出现啥效果?

以所选图元的凸包来选择,这样可以避免直接用矩形框选择的不精确。

点评

先试试再说  发表于 2014-5-12 22:22
发表于 2014-5-12 22:29:18 | 显示全部楼层
cxjzxh 发表于 2014-5-12 22:18
以所选图元的凸包来选择,这样可以避免直接用矩形框选择的不精确。

院长有什么好思路,说说嘛。
发表于 2014-5-17 22:12:17 | 显示全部楼层
我能解决。E:\gif\cxjk.gif和这个是一个道理

本帖子中包含更多资源

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

x

点评

源码放出来学习一下,建筑模型常用  发表于 2014-5-17 22:53
发表于 2014-5-17 23:29:01 | 显示全部楼层
Gu_xl 发表于 2014-5-12 20:05
程序:

[/post]

希望G版顺便说说程序的原理

点评

源码都在了,自己你不拿研究下?  发表于 2014-5-18 21:46
发表于 2014-7-25 11:42:36 | 显示全部楼层
Gu_xl 发表于 2014-5-12 20:05
程序:

[/post]

当框选一个图的时候,会出现上面图是一个盒子,下面图名是若干个盒子,怎么解决呢
 楼主| 发表于 2014-8-19 22:02:28 | 显示全部楼层
G版的还点小BUG,上传个图,测试下,很简单的图
G版可以下载测试下

如下图

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-8-19 22:03:25 | 显示全部楼层
Gu_xl 发表于 2014-5-12 20:05
程序:

[/post]

G版主,你的程序还有点不对,应该是点计算出错了吧,见36楼我上传的图
发表于 2014-8-19 22:39:56 | 显示全部楼层
都这么久的贴了,希望知道的出来说说程序的原理
 楼主| 发表于 2014-8-20 00:48:21 | 显示全部楼层
本帖最后由 邹锋 于 2014-8-25 22:01 编辑
Jack_PC 发表于 2014-8-19 22:39
都这么久的贴了,希望知道的出来说说程序的原理


求出每 一个实体的最小包围框的角点,然后每个点与点表循环判断是不是在别的对角点表内,


BOX是求一个实体的最小包围框函数,对SPLINE很有用
intersect 函数是判断每两个包围框的角点,判断第一个A的两个角点是在那个包围框内还是外,如果在外,则不返回,如果要交就返回这两个中的最小点与最大点



rectang 函数是生成一个最小框,

它如果是这样的图形,会出现错误的话,我再加一组判断就行了




  (defun intersect (a b)
    (if
      (or
        (and
          (<= (caar a) (caar b) (caadr a))
          (<= (cadar a) (cadar b) (cadadr a))
        ) ;_ 结束and
        (and
          (<= (caar a) (caar b) (caadr a))
          (<= (cadar a) (cadadr b) (cadadr a))
        ) ;_ 结束and
        (and
          (<= (caar a) (caadr b) (caadr a))
          (<= (cadar a) (cadadr b) (cadadr a))
        ) ;_ 结束and
        (and
          (<= (caar a) (caadr b) (caadr a))
          (<= (cadar a) (cadar b) (cadadr a))
        ) ;_ 结束and
       
        (and
          (<= (caar a) (caar b))
          (>= (caadr a) (caar b))
          (<= (caadr a) (cadadr b))
          (>= (cadar a) (cadar b))
          (<= (cadadr a) (cadadr b))          
        ) ;_ 结束and


      ) ;_ 结束or
       (list
         (apply 'mapcar (cons 'min (append a b)))
         (apply 'mapcar (cons 'max (append a b)))
       ) ;_ 结束list
    ) ;_ 结束if
  ) ;_ 结束defun

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2014-8-25 22:03:59 | 显示全部楼层
Jack_PC 发表于 2014-8-19 22:39
都这么久的贴了,希望知道的出来说说程序的原理

见39楼

增加一组判断

        (and
           (<= (caar a) (caar b))
           (>= (caadr a) (caar b))
           (<= (caadr a) (cadadr b))
           (>= (cadar a) (cadar b))
           (<= (cadadr a) (cadadr b))           
         ) ;_ 结束and
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 12:58 , Processed in 0.197443 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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