Files
envi-code/SourceCode/Code2026/Dimension/AcDbObjectPtr.h
T

71 lines
1.0 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
#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;
}
};