//-----------------------------------------------------------------------------+ // Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd. // = FileName : TAcDbBlockTableRecPtr.h // = Version : ver2.0 // = Author : xlc // = CreateDate : 2002-09-09 // = Description: ÀàµÄÉùÃ÷ // = Maintainers: // //-----------------------------------------------------------------------------+ #ifndef _TACDBBLOCKTABLERECPTR_H_ #define _TACDBBLOCKTABLERECPTR_H_ class GEOAPI TAcDbBlockTableRecPtr { public: TAcDbBlockTableRecPtr(const TCHAR *pszBlock = ACDB_MODEL_SPACE, AcDb::OpenMode opMode = AcDb::kForRead, AcDbDatabase *pDb = NULL); TAcDbBlockTableRecPtr(const AcDbObjectId &id, AcDb::OpenMode opMode = AcDb::kForRead); ~TAcDbBlockTableRecPtr(); int operator !(); operator AcDbBlockTableRecord & (); void Close(); public: AcDbBlockTableRecord *m_pBlockTableRec; }; inline TAcDbBlockTableRecPtr::TAcDbBlockTableRecPtr(const AcDbObjectId &id, AcDb::OpenMode opMode) : m_pBlockTableRec(NULL) { acdbOpenObject(m_pBlockTableRec, id, opMode); } inline TAcDbBlockTableRecPtr::TAcDbBlockTableRecPtr(const TCHAR *pszBlock, AcDb::OpenMode opMode, AcDbDatabase *pDb) : m_pBlockTableRec(NULL) { if (!pDb) { pDb = acdbCurDwg(); } AcDbBlockTable *pBlockTable; Acad::ErrorStatus es = pDb->getBlockTable(pBlockTable, AcDb::kForRead); if (es != Acad::eOk) { return; } es = pBlockTable->getAt(pszBlock, m_pBlockTableRec, opMode); pBlockTable->close(); } inline TAcDbBlockTableRecPtr::~TAcDbBlockTableRecPtr() { if (m_pBlockTableRec) { m_pBlockTableRec->close(); } } inline int TAcDbBlockTableRecPtr::operator !() { return !m_pBlockTableRec; } inline void TAcDbBlockTableRecPtr::Close() { if (m_pBlockTableRec) { m_pBlockTableRec->close(); } m_pBlockTableRec = NULL; } inline TAcDbBlockTableRecPtr::operator AcDbBlockTableRecord & () { assert(m_pBlockTableRec); return *m_pBlockTableRec; } #endif