找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2498|回复: 11

[研讨] 做一个无所不能的选择集外包围

[复制链接]
发表于 2013-5-21 10:53:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
近期大家一直在讨论图形外包围的问题
干脆玩大一点
大家一块努力做一个无所不能的外包围,让XD放到小东工具箱的201位:lol
我提供自己的思路:首先支持所有CAD的图元,各类线、光栅图、块、填充、文字。。。。。。
SPLINE的错误问题(这个其实很简单,用点表模拟SPLINE最后排序就行),主要是块的处理,要考虑嵌套块的处理,块里有可能包含SPLINE的情况;支持UCS

评分

参与人数 1D豆 +6 收起 理由
XDSoft + 6 技术引导讨论!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-21 10:55:16 | 显示全部楼层
贴个图说明问题啊。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-21 11:02:36 | 显示全部楼层
其实对于SPLINE也不比那么准确,ACAD内核既然那么做,说明可以满足需要

想想,我们为啥要用包围盒? 不过是为了定位实体为后面程序处理。得到范围内的实体就够了。

除了特殊指定的需要(个别)的需要准确的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-21 11:12:50 | 显示全部楼层
这个是vla-getboundingbox SPLINE出错的图片,这个主题就是把以前大家做的所有关于外包围的帖子总结,考虑到SPLINE的问题和块内SPLINE的问题,甚至嵌套块内SPLINE的问题,需要遍历图块内所有图元,支持CAD包含的所有图元,不经常用的图元没有测试,不知道vla-getboundingbox是不是也会出错
QQ图片20130521110532.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-21 11:17:01 | 显示全部楼层
本帖最后由 snsj 于 2013-5-21 11:18 编辑

SPLINE误差很大的,处理也不复杂,既然要做外包围,就要做到最好,等忙完了,我贴上我的代码,完全可以考虑重写vla-getboundingbox,直接用点表模拟所有ACAD图元,然后排序生成外框,一个更为强大无敌的外包围程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

发表于 2013-5-21 13:33:17 | 显示全部楼层
高手过招贴
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-5-21 14:00:05 | 显示全部楼层
snsj 发表于 2013-5-21 11:17
SPLINE误差很大的,处理也不复杂,既然要做外包围,就要做到最好,等忙完了,我贴上我的代码,完全可以考虑 ...

vla-getboundingbox好像只对SPLINE计算包围框不准确!所有对于图块对象,要线检查一下图块嵌套对象是否有Spline,如果没有则直接计算图块的包围盒,如果包含了Spline,则只能对每个嵌套对象计算包围框,然后坐标换算到wcs,这样可以少计算几次vla-getboundingbox!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-21 14:23:16 | 显示全部楼层
牢固 发表于 2013-5-21 14:00
vla-getboundingbox好像只对SPLINE计算包围框不准确!所有对于图块对象,要线检查一下图块嵌套对象是否有 ...

另外在加上 CLIP BLOCK 的,论坛有朋友提供代码了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-21 20:58:47 | 显示全部楼层
本帖最后由 snsj 于 2013-5-22 00:42 编辑

[pcode=lisp,true]
;;;判断块内是否包含SPLINE线,有则返回T,否则返回NIL
;;;blkenm为块物体,snsj 2013.5.21
(defun apple-pd-blkspl (blkenm / pd lis obj kn)
  (setq kn (vla-get-name (vlax-ename->vla-object blkenm)))
  (setq pd nil   lis (list kn))
  (while (/= lis nil)
    (setq lis (vl-remove kn lis))
    (vlax-for obj
        (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) kn)
        (cond
             ((=  (vla-get-objectname obj)  "AcDbSpline")
                    (setq pd t)
             )
             ((=  (vla-get-objectname obj) "AcDbBlockReference" )
                 (setq lis (cons  (vla-get-name obj) lis)
             )
         )
     )
   )
    (setq kn (car lis))
  )
  pd
)
[/pcode]先贴一个判断块(含嵌套块)内是否有SPLINE的函数
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-5-21 22:33:02 | 显示全部楼层
你是要处理了Spline 的 Getboundingbox?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-9 11:02:20 | 显示全部楼层
spline的误差主要来自头尾的两条切线 ms不可避免
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3256个

财富等级: 富可敌国

发表于 2013-6-9 16:14:00 | 显示全部楼层
这么准确不知道有没有必要,对于块 接触不深,学习了:lol
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-21 09:01 , Processed in 0.316199 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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