71 lines
1.0 KiB
C++
71 lines
1.0 KiB
C++
#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;
|
||
|
|
}
|
||
|
|
|
||
|
|
};
|