#pragma once class SHAcDbBlockTableRecPtr { public: SHAcDbBlockTableRecPtr(const TCHAR *pszBlock = ACDB_MODEL_SPACE, AcDb::OpenMode opMode = AcDb::kForRead, AcDbDatabase *pDb = NULL); SHAcDbBlockTableRecPtr(const AcDbObjectId &id, AcDb::OpenMode opMode = AcDb::kForRead); ~SHAcDbBlockTableRecPtr(); int operator !(); operator AcDbBlockTableRecord & (); void Close(); public: AcDbBlockTableRecord *m_pBlockTableRec; }; inline SHAcDbBlockTableRecPtr::SHAcDbBlockTableRecPtr(const AcDbObjectId &id, AcDb::OpenMode opMode) : m_pBlockTableRec(NULL) { acdbOpenObject(m_pBlockTableRec, id, opMode); } inline SHAcDbBlockTableRecPtr::SHAcDbBlockTableRecPtr(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 SHAcDbBlockTableRecPtr::~SHAcDbBlockTableRecPtr() { if (m_pBlockTableRec) { m_pBlockTableRec->close(); } } inline int SHAcDbBlockTableRecPtr::operator !() { return !m_pBlockTableRec; } inline void SHAcDbBlockTableRecPtr::Close() { if (m_pBlockTableRec) { m_pBlockTableRec->close(); } m_pBlockTableRec = NULL; } inline SHAcDbBlockTableRecPtr::operator AcDbBlockTableRecord & () { assert(m_pBlockTableRec); return *m_pBlockTableRec; }