Files
envi-code/SourceCode/Code2026/Dimension/EntityField.cpp
T
2026-09-28 15:28:50 +08:00

1038 lines
16 KiB
C++

#include "StdAfx.h"
#include "globalFunc.h"
#include "EntityField.h"
#include "EntityFields.h"
#include "dbcfilrs.h"
EntityField::EntityField(const TCHAR *sName,DataType type)
: m_sName(sName),m_nType(type),m_pData(NULL)
{
Init();
}
EntityField::EntityField(const EntityField&ef)
: m_nType(kUnknown),m_pData(NULL)
{
(*this) = ef;
}
EntityField::~EntityField()
{
Clear();
}
void EntityField::Init()
{
m_pData = NULL;
switch (m_nType)
{
case kGroup:
{
m_pData = new EntityFields;
}
break;
case kString:
{
m_pData = tstrnew(_T(""));
}
break;
case kDouble:
{
m_pData = new double;
}
break;
case kAcGePoint2d:
{
m_pData = new AcGePoint2d;
}
break;
case kAcGePoint3d:
{
m_pData = new AcGePoint3d;
}
break;
case kAcGeVector2d:
{
m_pData = new AcGeVector2d;
}
break;
case kAcGeVector3d:
{
m_pData = new AcGeVector3d;
}
break;
case kAcGeScale3d:
{
m_pData = new AcGeScale3d;
}
break;
case kAcDbHardOwnershipId:
{
m_pData = new AcDbHardOwnershipId;
}
break;
case kAcDbSoftOwnershipId:
{
m_pData = new AcDbSoftOwnershipId;
}
break;
case kAcDbHardPointerId:
{
m_pData = new AcDbHardPointerId;
}
break;
case kAcDbSoftPointerId:
{
m_pData = new AcDbSoftPointerId;
}
break;
case kAcDbHandle:
{
m_pData = new AcDbHandle;
}
break;
}
}
void EntityField::Clear()
{
switch (m_nType)
{
case kGroup:
{
EntityFields *pVal = (EntityFields *)m_pData;
delete pVal;
}
break;
case kString:
{
TCHAR *pVal = (TCHAR *)m_pData;
delete[] pVal;
}
break;
case kDouble:
{
double *pVal = (double*)m_pData;
delete pVal;
}
break;
case kAcGePoint2d:
{
AcGePoint2d* pVal = (AcGePoint2d*)m_pData;
delete pVal;
}
break;
case kAcGePoint3d:
{
AcGePoint3d* pVal = (AcGePoint3d*)m_pData;
delete pVal;
}
break;
case kAcGeVector2d:
{
AcGeVector2d* pVal = (AcGeVector2d*)m_pData;
delete pVal;
}
break;
case kAcGeVector3d:
{
AcGeVector3d* pVal = (AcGeVector3d*)m_pData;
delete pVal;
}
break;
case kAcGeScale3d:
{
AcGeScale3d* pVal = (AcGeScale3d*)m_pData;
delete pVal;
}
break;
case kAcDbHardOwnershipId:
{
AcDbHardOwnershipId* pVal = (AcDbHardOwnershipId*)m_pData;
delete pVal;
}
break;
case kAcDbSoftOwnershipId:
{
AcDbSoftOwnershipId* pVal = (AcDbSoftOwnershipId*)m_pData;
delete pVal;
}
break;
case kAcDbHardPointerId:
{
AcDbHardPointerId* pVal = (AcDbHardPointerId*)m_pData;
delete pVal;
}
break;
case kAcDbSoftPointerId:
{
AcDbSoftPointerId* pVal = (AcDbSoftPointerId*)m_pData;
delete pVal;
}
break;
case kAcDbHandle:
{
AcDbHandle *pVal = (AcDbHandle*)m_pData;
delete pVal;
}
break;
}
m_pData = NULL;
m_sName = _T("");
m_nType = kUnknown;
}
void EntityField::ChangeType(DataType type)
{
Clear();
m_nType = type;
Init();
}
bool EntityField::operator >(const EntityField&ent)const
{
return _tcsicmp(GetName(),ent.GetName()) > 0;
}
bool EntityField::operator ==(const EntityField&ent)const
{
return _tcsicmp(GetName(),ent.GetName()) == 0;
}
void EntityField::SetData(const Adesk::Boolean& val)
{
if (m_nType != kBoolean)
{
ChangeType(kBoolean);
}
Adesk::Boolean&data = (Adesk::Boolean&)m_pData;
data = val;
}
void EntityField::SetData(const Adesk::Int8& val)
{
if (m_nType != kInt8)
{
ChangeType(kInt8);
}
Adesk::Int8&data = (Adesk::Int8&)m_pData;
data = val;
}
void EntityField::SetData(const Adesk::UInt8& val)
{
if (m_nType != kUInt8)
{
ChangeType(kUInt8);
}
Adesk::UInt8&data = (Adesk::UInt8&)m_pData;
data = val;
}
void EntityField::SetData(const Adesk::Int16& val)
{
if (m_nType != kInt16)
{
ChangeType(kInt16);
}
Adesk::Int16&data = (Adesk::Int16&)m_pData;
data = val;
}
void EntityField::SetData(const Adesk::UInt16& val)
{
if (m_nType != kUInt16)
{
ChangeType(kUInt16);
}
Adesk::UInt16&data = (Adesk::UInt16&)m_pData;
data = val;
}
void EntityField::SetData(const Adesk::Int32& val)
{
if (m_nType != kInt32)
{
ChangeType(kInt32);
}
Adesk::Int32&data = (Adesk::Int32&)m_pData;
data = val;
}
void EntityField::SetData(const Adesk::UInt32& val)
{
if (m_nType != kUInt32)
{
ChangeType(kUInt32);
}
Adesk::UInt32&data = (Adesk::UInt32&)m_pData;
data = val;
}
void EntityField::SetData(EntityFields *pVal)
{
if (m_nType != kGroup)
{
ChangeType(kGroup);
}
if (m_pData != NULL)
{
EntityFields *pVal = (EntityFields *)m_pData;
delete pVal;
}
m_pData = pVal;
}
void EntityField::SetData(const EntityFields &val)
{
SetData(new EntityFields(val));
}
void EntityField::SetData(const TCHAR* val)
{
if (m_nType != kString)
{
ChangeType(kString);
}
if (m_pData != NULL)
{
TCHAR *pVal = (TCHAR *)m_pData;
delete[] pVal;
}
m_pData = tstrnew(val);
}
void EntityField::SetData(const double& val)
{
if (m_nType != kDouble)
{
ChangeType(kDouble);
}
double*pData = (double*)m_pData;
*pData = val;
}
void EntityField::SetData(const AcGePoint2d& val)
{
if (m_nType != kAcGePoint2d)
{
ChangeType(kAcGePoint2d);
}
AcGePoint2d*pData = (AcGePoint2d*)m_pData;
*pData = val;
}
void EntityField::SetData(const AcGePoint3d& val)
{
if (m_nType != kAcGePoint3d)
{
ChangeType(kAcGePoint3d);
}
AcGePoint3d*pData = (AcGePoint3d*)m_pData;
*pData = val;
}
void EntityField::SetData(const AcGeVector2d& val)
{
if (m_nType != kAcGeVector2d)
{
ChangeType(kAcGeVector2d);
}
AcGeVector2d*pData = (AcGeVector2d*)m_pData;
*pData = val;
}
void EntityField::SetData(const AcGeVector3d& val)
{
if (m_nType != kAcGeVector3d)
{
ChangeType(kAcGeVector3d);
}
AcGeVector3d*pData = (AcGeVector3d*)m_pData;
*pData = val;
}
void EntityField::SetData(const AcGeScale3d& val)
{
if (m_nType != kAcGeScale3d)
{
ChangeType(kAcGeScale3d);
}
AcGeScale3d*pData = (AcGeScale3d*)m_pData;
*pData = val;
}
void EntityField::SetData(const AcDbHardOwnershipId& val)
{
if (m_nType != kAcDbHardOwnershipId)
{
ChangeType(kAcDbHardOwnershipId);
}
AcDbHardOwnershipId*pData = (AcDbHardOwnershipId*)m_pData;
*pData = val;
}
void EntityField::SetData(const AcDbSoftOwnershipId& val)
{
if (m_nType != kAcDbSoftOwnershipId)
{
ChangeType(kAcDbSoftOwnershipId);
}
AcDbSoftOwnershipId*pData = (AcDbSoftOwnershipId*)m_pData;
*pData = val;
}
void EntityField::SetData(const AcDbHardPointerId& val)
{
if (m_nType != kAcDbHardPointerId)
{
ChangeType(kAcDbHardPointerId);
}
AcDbHardPointerId*pData = (AcDbHardPointerId*)m_pData;
*pData = val;
}
void EntityField::SetData(const AcDbSoftPointerId& val)
{
if (m_nType != kAcDbSoftPointerId)
{
ChangeType(kAcDbSoftPointerId);
}
AcDbSoftPointerId*pData = (AcDbSoftPointerId*)m_pData;
*pData = val;
}
void EntityField::SetData(const AcDbHandle& val)
{
if (m_nType != kAcDbHandle)
{
ChangeType(kAcDbHandle);
}
AcDbHandle*pData = (AcDbHandle*)m_pData;
*pData = val;
}
bool EntityField::GetData(Adesk::Boolean& val)const
{
if (m_nType != kBoolean)
{
return false;
}
val = (Adesk::Boolean&)m_pData;
return true;
}
bool EntityField::GetData(Adesk::Int8& val)const
{
if (m_nType != kInt8)
{
return false;
}
val = (Adesk::Int8&)m_pData;
return true;
}
bool EntityField::GetData(Adesk::UInt8& val)const
{
if (m_nType != kUInt8)
{
return false;
}
val = (Adesk::UInt8&)m_pData;
return true;
}
bool EntityField::GetData(Adesk::Int16& val)const
{
if (m_nType != kInt16)
{
return false;
}
val = (Adesk::Int16&)m_pData;
return true;
}
bool EntityField::GetData(Adesk::UInt16& val)const
{
if (m_nType != kUInt16)
{
return false;
}
val = (Adesk::UInt16&)m_pData;
return true;
}
bool EntityField::GetData(Adesk::Int32& val)const
{
if (m_nType != kInt32)
{
return false;
}
val = (Adesk::Int32&)m_pData;
return true;
}
bool EntityField::GetData(Adesk::UInt32& val)const
{
if (m_nType != kUInt32)
{
return false;
}
val = (Adesk::UInt32&)m_pData;
return true;
}
bool EntityField::GetData(EntityFields *&pVal)const
{
if (m_nType != kGroup)
{
return false;
}
pVal = (EntityFields*)m_pData;
return true;
}
bool EntityField::GetData(EntityFields& val)const
{
if (m_nType != kGroup)
{
return false;
}
val = *((EntityFields*)m_pData);
return true;
}
bool EntityField::GetData(CString &val)const
{
if (m_nType != kString)
{
return false;
}
val = (const TCHAR*)m_pData;
return true;
}
bool EntityField::GetData(double& val)const
{
if (m_nType != kDouble)
{
return false;
}
double* pData = (double*)m_pData;
val = *pData;
return true;
}
bool EntityField::GetData(AcGePoint2d& val)const
{
if (m_nType != kAcGePoint2d)
{
return false;
}
AcGePoint2d* pData = (AcGePoint2d*)m_pData;
val = *pData;
return true;
}
bool EntityField::GetData(AcGePoint3d& val)const
{
if (m_nType != kAcGePoint3d)
{
return false;
}
AcGePoint3d* pData = (AcGePoint3d*)m_pData;
val = *pData;
return true;
}
bool EntityField::GetData(AcGeVector2d& val)const
{
if (m_nType != kAcGeVector2d)
{
return false;
}
AcGeVector2d* pData = (AcGeVector2d*)m_pData;
val = *pData;
return true;
}
bool EntityField::GetData(AcGeVector3d& val)const
{
if (m_nType != kAcGeVector3d)
{
return false;
}
AcGeVector3d* pData = (AcGeVector3d*)m_pData;
val = *pData;
return true;
}
bool EntityField::GetData(AcGeScale3d& val)const
{
if (m_nType != kAcGeScale3d)
{
return false;
}
AcGeScale3d* pData = (AcGeScale3d*)m_pData;
val = *pData;
return true;
}
bool EntityField::GetData(AcDbHardOwnershipId& val)const
{
if (m_nType != kAcDbHardOwnershipId)
{
return false;
}
AcDbHardOwnershipId* pData = (AcDbHardOwnershipId*)m_pData;
val = *pData;
return true;
}
bool EntityField::GetData(AcDbSoftOwnershipId& val)const
{
if (m_nType != kAcDbSoftOwnershipId)
{
return false;
}
AcDbSoftOwnershipId* pData = (AcDbSoftOwnershipId*)m_pData;
val = *pData;
return true;
}
bool EntityField::GetData(AcDbHardPointerId& val)const
{
if (m_nType != kAcDbHardPointerId)
{
return false;
}
AcDbHardPointerId* pData = (AcDbHardPointerId*)m_pData;
val = *pData;
return true;
}
bool EntityField::GetData(AcDbSoftPointerId& val)const
{
if (m_nType != kAcDbSoftPointerId)
{
return false;
}
AcDbSoftPointerId* pData = (AcDbSoftPointerId*)m_pData;
val = *pData;
return true;
}
bool EntityField::GetData(AcDbHandle& val)const
{
if (m_nType != kAcDbHandle)
{
return false;
}
AcDbHandle* pData = (AcDbHandle*)m_pData;
val = *pData;
return true;
}
void EntityField::DwgIn (AcDbDwgFiler* pFiler)
{
Clear();
GlobalFunc::ReadString(pFiler,m_sName);
Adesk::Int16 type;
pFiler->readItem(&type);
m_nType = (DataType)type;
Init();
switch (m_nType)
{
case kBoolean:
{
Adesk::Boolean val;
pFiler->readBoolean(&val);
SetData(val);
}
break;
case kChar:
case kInt8:
{
Adesk::Int8 val;
pFiler->readItem(&val);
SetData(val);
}
break;
case kUInt8:
{
Adesk::UInt8 val;
pFiler->readUInt8(&val);
SetData(val);
}
break;
case kInt16:
{
Adesk::Int16 val;
pFiler->readInt16(&val);
SetData(val);
}
break;
case kUInt16:
{
Adesk::UInt16 val;
pFiler->readUInt16(&val);
SetData(val);
}
break;
case kInt32:
{
Adesk::Int32 val;
pFiler->readInt32(&val);
SetData(val);
}
break;
case kUInt32:
{
Adesk::UInt32 val;
pFiler->readUInt32(&val);
SetData(val);
}
break;
case kGroup:
{
EntityFields *pVal = new EntityFields;
pVal->DwgIn(pFiler);
SetData(pVal);
}
break;
case kString:
{
TCHAR *pBuffer = NULL;
pFiler->readString(&pBuffer);
if (pBuffer != NULL)
{
SetData(pBuffer);
acdbFree(pBuffer);
}
}
break;
case kDouble:
{
double val;
pFiler->readDouble(&val);
SetData(val);
}
break;
case kAcGePoint2d:
{
AcGePoint2d val;
pFiler->readPoint2d(&val);
SetData(val);
}
break;
case kAcGePoint3d:
{
AcGePoint3d val;
pFiler->readPoint3d(&val);
SetData(val);
}
break;
case kAcGeVector2d:
{
AcGeVector2d val;
pFiler->readVector2d(&val);
SetData(val);
}
break;
case kAcGeVector3d:
{
AcGeVector3d val;
pFiler->readVector3d(&val);
SetData(val);
}
break;
case kAcGeScale3d:
{
AcGeScale3d val;
pFiler->readScale3d(&val);
SetData(val);
}
break;
case kAcDbHardOwnershipId:
{
AcDbHardOwnershipId val;
pFiler->readHardOwnershipId(&val);
SetData(val);
}
break;
case kAcDbSoftOwnershipId:
{
AcDbSoftOwnershipId val;
pFiler->readSoftOwnershipId(&val);
SetData(val);
}
break;
case kAcDbHardPointerId:
{
AcDbHardPointerId val;
pFiler->readHardPointerId(&val);
SetData(val);
}
break;
case kAcDbSoftPointerId:
{
AcDbSoftPointerId val;
pFiler->readSoftPointerId(&val);
SetData(val);
}
break;
case kAcDbHandle:
{
AcDbHandle val;
pFiler->readAcDbHandle(&val);
SetData(val);
}
break;
}
}
void EntityField::DwgOut(AcDbDwgFiler* pFiler) const
{
pFiler->writeString(m_sName);
Adesk::Int16 type = (Adesk::Int16)m_nType;
pFiler->writeItem(type);
switch (m_nType)
{
case kBoolean:
{
Adesk::Boolean val;
GetData(val);
pFiler->writeBoolean(val);
}
break;
case kChar:
case kInt8:
{
Adesk::Int8 val;
GetData(val);
pFiler->writeItem(val);
}
break;
case kUInt8:
{
Adesk::UInt8 val;
GetData(val);
pFiler->writeUInt8(val);
}
break;
case kInt16:
{
Adesk::Int16 val;
GetData(val);
pFiler->writeInt16(val);
}
break;
case kUInt16:
{
Adesk::UInt16 val;
GetData(val);
pFiler->writeUInt16(val);
}
break;
case kInt32:
{
Adesk::Int32 val;
GetData(val);
pFiler->writeInt32(val);
}
break;
case kUInt32:
{
Adesk::UInt32 val;
GetData(val);
pFiler->writeUInt32(val);
}
break;
case kGroup:
{
EntityFields *pVal;
GetData(pVal);
pVal->DwgOut(pFiler);
}
break;
case kString:
{
CString val;
GetData(val);
pFiler->writeString((const TCHAR*)val);
}
break;
case kDouble:
{
double val;
GetData(val);
pFiler->writeDouble(val);
}
break;
case kAcGePoint2d:
{
AcGePoint2d val;
GetData(val);
pFiler->writePoint2d(val);
}
break;
case kAcGePoint3d:
{
AcGePoint3d val;
GetData(val);
pFiler->writePoint3d(val);
}
break;
case kAcGeVector2d:
{
AcGeVector2d val;
GetData(val);
pFiler->writeVector2d(val);
}
break;
case kAcGeVector3d:
{
AcGeVector3d val;
GetData(val);
pFiler->writeVector3d(val);
}
break;
case kAcGeScale3d:
{
AcGeScale3d val;
GetData(val);
pFiler->writeScale3d(val);
}
break;
case kAcDbHardOwnershipId:
{
AcDbHardOwnershipId val;
GetData(val);
pFiler->writeHardOwnershipId(val);
}
break;
case kAcDbSoftOwnershipId:
{
AcDbSoftOwnershipId val;
GetData(val);
pFiler->writeSoftOwnershipId(val);
}
break;
case kAcDbHardPointerId:
{
AcDbHardPointerId val;
GetData(val);
pFiler->writeHardPointerId(val);
}
break;
case kAcDbSoftPointerId:
{
AcDbSoftPointerId val;
GetData(val);
pFiler->writeSoftPointerId(val);
}
break;
case kAcDbHandle:
{
AcDbHandle val;
GetData(val);
pFiler->writeAcDbHandle(val);
}
break;
}
}
EntityField& EntityField::operator = (const EntityField&ef)
{
AcDbDeepCloneFiler filer;
ef.DwgOut(&filer);
filer.seek(0L,0);
DwgIn(&filer);
return *this;
}
void EntityField::DxfIn (AcDbDxfFiler* pFiler)
{
Clear();
}
void EntityField::DxfOut(AcDbDxfFiler* pFiler) const
{
}
const TCHAR* EntityField::GetName()const
{
return m_sName;
}
void EntityField::SetName(const TCHAR* sName)
{
m_sName = sName;
}
EntityField::DataType EntityField::GetDataType()const
{
return m_nType;
}
bool EntityField::operator< (const EntityField&ent)const
{
return ent > (*this);
}
bool EntityField::operator != (const EntityField&ent)const
{
return !((*this) == ent);
}