//-----------------------------------------------------------------------------+ // Copyright (C), 1998-2007, SH Software Co. Ltd. // = FileName : XDbObject.h // = Version : ver2.0 // = Author : zjq // = CreateDate : 2002-09-09 // = Description: ÀàµÄÉùÃ÷ // = Maintainers: // //-----------------------------------------------------------------------------+ #ifndef _XDbObject_H_ #define _XDbObject_H_ class GEOAPI XDbObject { public: XDbObject(const ads_name ent, AcDb::OpenMode mode, Adesk::Boolean bOpErased = Adesk::kFalse); XDbObject(AcDbObjectId nId, AcDb::OpenMode mode, Adesk::Boolean bOpErased = Adesk::kFalse); XDbObject(AcDbObject *pObj); ~XDbObject(); operator AcDbObject & (); operator AcDbEntity & (); bool operator !(); void Close(); public: AcDbObject *m_pObject; }; inline XDbObject::XDbObject(const ads_name ent, AcDb::OpenMode mode, Adesk::Boolean bOpErased) : m_pObject(NULL) { AcDbObjectId nId; if (acdbGetObjectId(nId, (LONG_PTR *)ent) == Acad::eOk) { bool bVal = bOpErased ? true : false; acdbOpenObject(m_pObject, nId, mode, bVal); } } inline XDbObject::XDbObject(AcDbObjectId nId, AcDb::OpenMode mode, Adesk::Boolean bOpErased) : m_pObject(NULL) { bool bVal = bOpErased ? true : false; acdbOpenObject(m_pObject, nId, mode, bVal); } inline XDbObject::XDbObject(AcDbObject *pObj) : m_pObject(pObj) { } inline XDbObject::~XDbObject() { if (m_pObject) { m_pObject->close(); } } inline XDbObject::operator AcDbObject &() { assert(m_pObject); return *m_pObject; } inline XDbObject::operator AcDbEntity & () { assert(m_pObject && m_pObject->isKindOf(AcDbEntity::desc())); return *(AcDbEntity *)m_pObject; } inline bool XDbObject::operator !() { return (m_pObject == NULL) ? true : false; } inline void XDbObject::Close() { if (m_pObject) { m_pObject->close(); } m_pObject = NULL; } #endif