STDMETHODIMP [!output CLASS_NAME]::AddToDb (AcDbObjectId &objId, AcDbObjectId ownerId /*=AcDbObjectId::kNull*/, TCHAR *keyName /*=NULL*/) { try { AcAxDocLock docLock (ownerId) ; Acad::ErrorStatus es ; AcAxObjectRefPtr<[!output ARX_CLASS_NAME]> obj (&m_objRef, AcDb::kForRead) ; [!if ACAD_ENTITY_INTERFACE] //----- Entities can be owned by block table records only AcDbBlockTableRecordPointer pBlockTableRecord (ownerId, AcDb::kForWrite, true) ; if ( (es =pBlockTableRecord.openStatus ()) != Acad::eOk ) throw es ; if ( (es =pBlockTableRecord->appendAcDbEntity (objId, obj.object ())) != Acad::eOk ) throw es ; [!else] //----- Non-entities cannot be owned by block table record, but are //----- usually owned by dictionaries. If this is not your case, please //----- change the code below. AcDbDictionaryPointer pDictionary (ownerId, AcDb::kForWrite, true) ; if ( (es =pDictionary.openStatus ()) != Acad::eOk ) throw es ; if ( (es =pDictionary->setAt (keyName, obj.object (), objId)) != Acad::eOk ) throw es ; [!endif] } catch( const Acad::ErrorStatus ) { return (Error(L"Failed to add [!output ARX_CLASS_NAME] to database", IID_[!output INTERFACE_NAME], E_FAIL)) ; } return (SetObjectId (objId)) ; }
Acad::ErrorStatus CGraphListCtrl::GetBlock1( LPCTSTR szBlockName, AcDbBlockTableRecord*& pBlockRecord ) { Acad::ErrorStatus es; pBlockRecord = NULL; AcDbBlockTableRecordPointer pSrcRc(szBlockName, m_pCurDb, AcDb::kForRead); es = pSrcRc.openStatus(); if (Acad::eOk != es) return es; AcDbBlockTablePointer pDestTbl(m_DefDb, AcDb::kForRead); es = pDestTbl.openStatus(); if (Acad::eOk != es) return es; AcDbBlockTableRecordPointer pDestRc; pDestRc.create(); es = pDestRc.openStatus(); if (Acad::eOk != es) return es; es = pDestRc->setName(szBlockName); if (Acad::eOk != es) return es; pDestTbl->upgradeOpen(); es = pDestTbl->add(pDestRc.object()); pDestTbl->downgradeOpen(); if (Acad::eOk != es) return es; AcDbBlockTableRecordIterator* pIter = NULL; es = pSrcRc->newIterator(pIter); if (Acad::eOk != es) return es; AcDbObjectId objId; AcDbIdMapping idMap; AcDbObject* pObject = NULL; for (pIter->start(); !pIter->done(); pIter->step()) { es = pIter->getEntityId(objId); if (Acad::eOk != es) continue; AcDbEntityPointer pEnt(objId, AcDb::kForRead); es = pEnt.openStatus(); if (Acad::eOk != es) continue; if (pEnt->isKindOf(AcDbText::desc())) { continue; } es = pEnt->deepClone(pDestRc.object(), pObject, idMap, true); if (Acad::eOk != es) continue; pObject->close(); } pBlockRecord = pDestRc.object(); return es; }