#pragma once class AcDbObjectPtr { public: AcDbObject *m_pObject; public: AcDbObjectPtr(const ads_name ent , AcDb::OpenMode mode , Adesk::Boolean bOpErased = Adesk::kFalse) : m_pObject(NULL) { AcDbObjectId nId; if (acdbGetObjectId(nId, (TLong_ptr *)ent) == Acad::eOk) { bool bVal = bOpErased ? true : false; acdbOpenObject(m_pObject, nId, mode, bVal); } } AcDbObjectPtr(AcDbObjectId nId , AcDb::OpenMode mode , Adesk::Boolean bOpErased = Adesk::kFalse) : m_pObject(NULL) { bool bVal = bOpErased ? true : false; acdbOpenObject(m_pObject, nId, mode, bVal); } AcDbObjectPtr(AcDbObject *pObj) : m_pObject(pObj) { } ~AcDbObjectPtr() { if (m_pObject) { m_pObject->close(); } } operator AcDbObject &() { assert(m_pObject); return *m_pObject; } operator AcDbEntity & () { assert(m_pObject && m_pObject->isKindOf(AcDbEntity::desc())); return *(AcDbEntity *)m_pObject; } bool operator !() { return (m_pObject == NULL) ? true : false; } void Close() { if (m_pObject) { m_pObject->close(); } m_pObject = NULL; } };