//-----------------------------------------------------------------------------+ // Copyright (C), 1998-2007, SH Software Co. Ltd. // = FileName : EntityField 类 // = Version : ver2.0 // = Author : zjq // = CreateDate : 2002-09-09 // = Description: EntityField 定义 // = Maintainers: // //-----------------------------------------------------------------------------+ #include "StdAfx.h" #include "EntityField.h" #include "EntityFields.h" #include "dbcfilrs.h" #include "XGlobalDef.h" #include "XGlobalFunc.h" #include "XPrivateGlobalFunc.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(); 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); }