过滤无效TableRecord
bool IsValidRecord(OdDbBlockTableRecordPtr pRecord)
{
if (pRecord.isNull())
{
return false;
}
OdDbObjectIteratorPtr it = pRecord->newIterator();
for (it->start(); !it->done(); it->step())
{
auto pEnt = it->entity();
if (!pEnt.isNull())
{
return true;
}
}
return false;
}
过滤模型空间(modelspace)、图纸空间(paparspace)
bool IsCustomBlock(OdDbBlockTableRecordPtr pBlock)
{
const auto blockName = pBlock->getName();
bool bRet = true;
if (OdDbSymUtil::isBlockModelSpaceName(blockName) ||
OdDbSymUtil::isBlockPaperSpaceName(blockName) ||
blockName.find(OD_T("*Paper_Space")) != -1)
{
bRet = false;
}
return bRet;
}
获取引用此块的全部块引用
void GetReffrenceRecord(const OdDbObjectId& hostId, OdDbObjectIdArray &arRefRecordId)
{
OdDbBlockTableRecordPtr pHostRecord = hostId.safeOpenObject();
if (pHostRecord.isNull())
{
return;
}
OdDbObjectIdArray arRefId;
pHostRecord->getBlockReferenceIds(arRefId);
for (auto& objectId : arRefId)
{
OdDbBlockReferencePtr pRef = objectId.safeOpenObject();
if (pRef.isNull())
{
continue;
}
OdDbObjectId recordId = pRef->blockTableRecord();
if (recordId.isNull())
{
continue;
}
unsigned int index = 0;
if (!arRefRecordId.find(recordId, index))
{
arRefRecordId.push_back(recordId);
}
}
arRefId.clear();
pHostRecord->getErasedBlockReferenceIds(arRefId);
for (auto& objectId : arRefId)
{
OdDbBlockReferencePtr pRef = objectId.safeOpenObject();
if (pRef.isNull())
{
continue;
}
OdDbObjectId recordId = pRef->blockTableRecord();
if (recordId.isNull())
{
continue;
}
unsigned int index = 0;
if (!arRefRecordId.find(recordId, index))
{
arRefRecordId.push_back(recordId);
}
}
}