Acad::ErrorStatus ArxDbgUtils::collectSymbolIds(AcRxClass* symTblClass, AcDbObjectIdArray& objIds, AcDbDatabase* db) { ASSERT(symTblClass != NULL); ASSERT(db != NULL); Acad::ErrorStatus retCode = Acad::eInvalidInput; AcDbSymbolTable* symTbl = openSymbolTable(symTblClass, AcDb::kForRead, db); if (symTbl != NULL) { // get an iterator over this symbol Table AcDbSymbolTableIterator* tblIter; if (symTbl->newIterator(tblIter) == Acad::eOk) { // walk table and just collect all the objIds // of the entries if (symTbl->isKindOf(AcDbLayerTable::desc())) static_cast<AcDbLayerTableIterator*>(tblIter)->setSkipHidden(false); Acad::ErrorStatus es; AcDbObjectId tblRecId; for (; !tblIter->done(); tblIter->step()) { es = tblIter->getRecordId(tblRecId); if (es == Acad::eOk) objIds.append(tblRecId); } delete tblIter; retCode = Acad::eOk; } symTbl->close(); } return retCode; }
int getAllSymbolRecordsIds(AcRxClass* pTableClass, AcDbObjectIdArray & idaAll) { CLogger::Print(_T("*Call: getAllSymbolRecordsIds()")); Acad::ErrorStatus es; idaAll.setLogicalLength(0); AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase(); AcDbSymbolTable* pSymbolTable = NULL; if (AcRx::kEqual == pTableClass->comparedTo(AcDbBlockTable::desc())) { CLogger::Print(_T("> This is BlockTable!")); es = pDb->getBlockTable(pSymbolTable, AcDb::kForRead); } else if (AcRx::kEqual == pTableClass->comparedTo(AcDbLayerTable::desc())) { CLogger::Print(_T("> This is LayerTable!")); es = pDb->getLayerTable(pSymbolTable, AcDb::kForRead); } else if (AcRx::kEqual == pTableClass->comparedTo(AcDbLinetypeTable::desc())) { CLogger::Print(_T("> This is LinetypeTable!")); es = pDb->getLinetypeTable(pSymbolTable, AcDb::kForRead); } else if (AcRx::kEqual == pTableClass->comparedTo(AcDbTextStyleTable::desc())) { CLogger::Print(_T("> This is TextStyleTable!")); es = pDb->getTextStyleTable(pSymbolTable, AcDb::kForRead); } else { CLogger::Print(_T("*Exit: getAllSymbolRecordsIds() - This kind of SymbolTable is not supported!")); return -1; } if (Acad::eOk != es) { CLogger::Print(_T("*Exit: getAllSymbolRecordsIds() - Fail to get SymbolTable!")); return -1; } //------------ // Get the SymbolTable's iterator. AcDbSymbolTableIterator* pSymbolTableIter = NULL; es = pSymbolTable->newIterator(pSymbolTableIter); pSymbolTable->close(); if (Acad::eOk != es) { CLogger::Print(_T("*Exit: getAllSymbolRecordsIds() - Fail to get the SymbolTable's iterator!")); return -1; } //------------ // Steps through the SymbolTable's records. // Then get the SymbolTableRecord's ObjectID. for (; !pSymbolTableIter->done(); pSymbolTableIter->step()) { AcDbObjectId idObj = AcDbObjectId::kNull; if (Acad::eOk == pSymbolTableIter->getRecordId(idObj)) idaAll.append(idObj); } delete pSymbolTableIter; CLogger::Print(_T("*Exit: getAllSymbolRecordsIds() - Count: %02d"), idaAll.length()); return idaAll.length(); }
bool ArxDbgUtils::symbolExists(AcRxClass* symTblClass, LPCTSTR name, AcDbDatabase* db) { ASSERT(symTblClass != NULL); ASSERT(db != NULL); AcDbSymbolTable* symTbl; if ((symTbl = openSymbolTable(symTblClass, AcDb::kForRead, db)) == NULL) return false; bool symExists = symTbl->has(name); symTbl->close(); return symExists; }
Acad::ErrorStatus ArxDbgUtils::nameToSymbolId(AcRxClass* symTblClass, LPCTSTR name, AcDbObjectId& recordId, AcDbDatabase* db) { ASSERT(symTblClass != NULL); ASSERT(db != NULL); AcDbSymbolTable* symTbl; if ((symTbl = openSymbolTable(symTblClass, AcDb::kForRead, db)) == NULL) return Acad::eInvalidInput; Acad::ErrorStatus es; es = symTbl->getAt(name, recordId); symTbl->close(); return es; }
void createBlock() { AcDbBlockTableRecord* pBTR = new AcDbBlockTableRecord(); pBTR->setName(DYNBLKSAMP_BLOCKNAME); AcDbSymbolTable* pBT = NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBT, AcDb::kForWrite); pBT->add(pBTR); pBT->close(); AcGePoint3d pt1(0.0, 0.0, 0.0); AcGePoint3d pt2(2.0, 0.0, 0.0); AcDbLine* pLine = new AcDbLine(pt1, pt2); pBTR->appendAcDbEntity(pLine); pLine->close(); pt1 = pt2; pt2.y = 2.0; pLine = new AcDbLine(pt1, pt2); pBTR->appendAcDbEntity(pLine); pLine->close(); pt1 = pt2; pt2.x = 0.0; pLine = new AcDbLine(pt1, pt2); pBTR->appendAcDbEntity(pLine); pLine->close(); pt1 = pt2; pt2.y = 0.0; pLine = new AcDbLine(pt1, pt2); pBTR->appendAcDbEntity(pLine); pLine->close(); pBTR->close(); }