//-----------------------------------------------------------------------------+ // Copyright (C), 1998-2007, SH Software Co. Ltd. // = FileName : XBlockTableRecPtr.h // = Version : ver2.0 // = Author : zjq // = CreateDate : 2002-09-09 // = Description: ÀàµÄÉùÃ÷ // = Maintainers: // //-----------------------------------------------------------------------------+ #ifndef _XBlockTableRecPtr_H_ #define _XBlockTableRecPtr_H_ class GEOAPI XBlockTableRecPtr { public: XBlockTableRecPtr(const TCHAR *pszBlock = ACDB_MODEL_SPACE, AcDb::OpenMode opMode = AcDb::kForRead, AcDbDatabase *pDb = NULL); XBlockTableRecPtr(const AcDbObjectId &id, AcDb::OpenMode opMode = AcDb::kForRead); ~XBlockTableRecPtr(); int operator !(); operator AcDbBlockTableRecord & (); void Close(); public: AcDbBlockTableRecord *m_pBlockTableRec; }; inline XBlockTableRecPtr::XBlockTableRecPtr(const AcDbObjectId &id, AcDb::OpenMode opMode) : m_pBlockTableRec(NULL) { acdbOpenObject(m_pBlockTableRec, id, opMode); } inline XBlockTableRecPtr::XBlockTableRecPtr(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 XBlockTableRecPtr::~XBlockTableRecPtr() { if (m_pBlockTableRec) { m_pBlockTableRec->close(); } } inline int XBlockTableRecPtr::operator !() { return !m_pBlockTableRec; } inline void XBlockTableRecPtr::Close() { if (m_pBlockTableRec) { m_pBlockTableRec->close(); } m_pBlockTableRec = NULL; } inline XBlockTableRecPtr::operator AcDbBlockTableRecord & () { assert(m_pBlockTableRec); return *m_pBlockTableRec; } #endif