天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 5|回复: 0

计算AcDbBlockReference准确的包围盒

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    AcDbExtents CEntity::GetRefBoundingBox (AcDbBlockReference *pRef, const AcGeMatrix3d & mat)
    {
            AcDbExtents ext;
            AcDbExtents RetExt;
            AcDbObjectId recId = pRef->blockTableRecord();
            AcDbBlockTableRecordPointer block(recId,AcDb::kForRead);
            Acad::ErrorStatus es = block.openStatus();
            if (es == eOk)
            {
                    AcDbBlockTableRecordIterator *pItr = NULL;
                    block->newIterator(pItr);
                    AcDbObjectId id;
                    AcDbEntity *pEnt = NULL;
                    for (pItr->start();!pItr->done();pItr->step())
                    {
                            es = pItr->getEntity(pEnt,AcDb::kForWrite);
                            if (es == eOk)
                            {
                                    pEnt->transformBy(mat);
                                    if (pEnt->isKindOf(AcDbBlockReference::desc()))
                                    {
                                            AcGeMatrix3d blkmat=((AcDbBlockReference*)pEnt)->blockTransform();
                                            ext = GetRefBoundingBox((AcDbBlockReference *)pEnt,blkmat);
                                    }
                                    else
                                    {
                                            pEnt->getGeomExtents(ext);
                                    }
                                    pEnt->transformBy(mat.inverse());
                                    RetExt.addExt(ext);
                                    pEnt->close();
                            }
                    }
                    delete pItr;
                    pItr = NULL;
            }
            return RetExt;
    }



    譬如:
    AcDbObjectPointer<AcDbBlockReference> blkref(id,AcDb::kForRead);     //id块参照的id
    AcDbExtents  ext = CEntity::GetRefBoundingBox(blkref.object(),blkref->blockTransform());

    这个代码得到的box跟geomExtentsBestFit是一致的。

     

     

     

     

    计算AcDbBlockReference准确的包围盒
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:58 , Processed in 0.058433 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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