明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3167|回复: 2

如何判断块表中的实体在一个矩形范围内?

[复制链接]
发表于 2002-11-21 20:08:00 | 显示全部楼层 |阅读模式
如题,有没有好的办法,遍历块表中的所有实体对象,将处于某一矩形的所有实体做成外部块。
该怎么实现?
发表于 2002-11-22 11:35:00 | 显示全部楼层

使用AcDbEntity类的getGeomExtents()函数可能是关键

该函数的完整语法:
virtual Acad::ErrorStatus AcDbEntity::getGeomExtents(AcDbExtents& extents) const;
其中AcDbExtents是ARX为该函数专门设计的类,具体使用在以下代码中介绍。
如果,你要选择的实体是完全在规定的矩形区域内部,可以参考以下代码示例(你提出的另一个问题,若不需要与用户交互,是无须使用AcAp类库,你说的方法应该可行。)
AcDbEntity *pEnt;
AcDbExtents *extents;
AcGePoint3d min,max;  //这两个参考用于从extents指针中取出内容
for(pBlkTblItr->start();!pBlkTblItr->done();pBlkTblItr->step())
//pBlkTblItr是你使用的块表记录浏览器指针
{
  pBlkTblItr->getEntity(pEnt,AcDb::kForRead);
  if(Acad::eInvalidExtents!=pEnt->getGeomExtents(extents))   /*getGeomExtents()函数在AcDbEntity层次不返回extents对象,因此,若你使用了自定义实体,且在类派生中未重载该函数,将不能得到extents指针,函数返回Acad::eInvalidExtents。*/
    {
       min=extents->minPoint();
       max=extents->maxPoint();
     }
     ....../*在这添加代码,实体pEnt处于以min为左下角,max为右上角的矩形区域中,将此矩形与你规定的矩形进行简单比较,就可判断实体是否满足你的要求,并作进一步处理。若你要选择的实体是类似CAD的交叉窗口选择,以上代码会有缺陷,曲线可能不与规定的矩形区域相交但它的extents区域可能满足条件,此时要利用boudingBoxIntersectWith()函数计算矩形区域与实体的交点来判断。*/
}
 楼主| 发表于 2002-11-22 19:12:00 | 显示全部楼层

insert方法插入的图形怎么不是图块,怎么转换为图块呢?

谢谢leayeafu,在你详细的指导下,终于完成了基本功能了,只是用acdbCurDwg()->insert(...);方法插入的图形怎么不是图块?如何把它们转换为图块呢,咳,ARX,要学的东西太多了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 09:48 , Processed in 0.161259 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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