Files
envi-code/SourceCode/Code2026/tg_shs/shs_kernal/SolidData.cpp
T
2026-09-28 15:28:50 +08:00

1502 lines
31 KiB
C++

#include "stdafx.h"
#include "dbcfilrs.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
static BOOL DeepCloneObject(AcDbObject* pSrc, AcDbObject*& pDest)
{
ASSERT(pSrc);
if (pSrc == NULL)
return FALSE;
AcDbDeepCloneFiler cloneFiler;
if (pSrc->dwgOut(&cloneFiler) != Acad::eOk)
return FALSE;
cloneFiler.seek(0L, AcDb::kSeekFromStart);
AcDbObject* pClone = AcDbObject::cast(pSrc->isA()->create());
if (pClone == NULL)
return FALSE;
if (pClone->dwgIn(&cloneFiler) != Acad::eOk)
{
delete pClone;
return FALSE;
}
pDest = pClone;
return TRUE;
}
CSolidData::CSolidData()
{
m_eType = CSolidData::eNull;
m_pData = NULL;
m_nColorIndex = 256;
m_ptUcsXDir.set(1.0, 0.0, 0.0);
m_ptUcsYDir.set(0.0, 1.0, 0.0);
m_ptUcsZDir.set(0.0, 0.0, 1.0);
}
CSolidData::CSolidData(CSolidData& data)
{
m_eType = CSolidData::eNull;
m_pData = NULL;
Copy(&data);
}
CSolidData::~CSolidData()
{
Clean();
}
void CSolidData::Clean()
{
m_eType = CSolidData::eNull;
m_idSolid = NULL;
m_nColorIndex = 256;
m_ptPosition.set(0.0, 0.0, 0.0);
m_ptUcsOrigin.set(0.0, 0.0, 0.0);
m_ptUcsXDir.set(1.0, 0.0, 0.0);
m_ptUcsYDir.set(0.0, 1.0, 0.0);
m_ptUcsZDir.set(0.0, 0.0, 1.0);
if (m_pData)
delete m_pData;
m_pData = NULL;
}
BOOL CSolidData::SetType(CSolidData::SolidType eType)
{
Clean();
m_eType = eType;
return CreateData();
}
CSolidData::SolidType CSolidData::GetType() const
{
return m_eType;
}
void CSolidData::SetColorIndex(UINT nColor)
{
m_nColorIndex = nColor;
}
UINT CSolidData::GetColorIndex()
{
return m_nColorIndex;
}
AcDbObjectId CSolidData::GetObjectId()
{
return m_idSolid;
}
void CSolidData::SetObjectId(AcDbObjectId idEnt)
{
m_idSolid = idEnt;
}
void CSolidData::SetPosition(AcGePoint3d ptPosition)
{
m_ptPosition = ptPosition;
}
AcGePoint3d CSolidData::GetPosition()
{
return m_ptPosition;
}
void CSolidData::SetUcsCoordinateSystem(AcGePoint3d pt, AcGeVector3d vecX, AcGeVector3d vecY, AcGeVector3d vecZ)
{
m_ptUcsOrigin = pt;
m_ptUcsXDir = pt + vecX;
m_ptUcsYDir = pt + vecY;
m_ptUcsZDir = pt + vecZ;
}
void CSolidData::GetUcsCoordinateSystem(AcGePoint3d& pt, AcGeVector3d& vecX, AcGeVector3d& vecY, AcGeVector3d& vecZ)
{
pt = m_ptUcsOrigin;
vecX = m_ptUcsXDir - m_ptUcsOrigin;
vecY = m_ptUcsYDir - m_ptUcsOrigin;
vecZ = m_ptUcsZDir - m_ptUcsOrigin;
}
void CSolidData::GetUcsScale(double& dXScale, double& dYScale, double& dZScale)
{
dXScale = m_ptUcsXDir.distanceTo(m_ptUcsOrigin);
dYScale = m_ptUcsYDir.distanceTo(m_ptUcsOrigin);
dZScale = m_ptUcsZDir.distanceTo(m_ptUcsOrigin);
}
const CBaseData* CSolidData::GetData() const
{
return m_pData;
}
BOOL CSolidData::CreateData()
{
switch (m_eType)
{
case CSolidData::eUnknown:
m_pData = new CUnknownData;
break;
case CSolidData::eBox:
m_pData = new CBoxData;
break;
case CSolidData::eFrustum:
m_pData = new CFrustumData;
break;
case CSolidData::eSphere:
m_pData = new CSphereData;
break;
case CSolidData::eTorus:
m_pData = new CTorusData;
break;
case CSolidData::eWedge:
m_pData = new CWedgeData;
break;
case CSolidData::eExtrude:
m_pData = new CExtrudeData;
break;
case CSolidData::eRevolve:
m_pData = new CRevolveData;
break;
case CSolidData::eBoolean:
m_pData = new CBooleanData;
break;
case CSolidData::eSlice:
m_pData = new CSliceData;
break;
case CSolidData::eArcBridge:
m_pData = new CArcBridgeData;
break;
case CSolidData::eArcColumn:
m_pData = new CArcColumnData;
break;
case CSolidData::eHillWall:
m_pData = new CHillWallData;
break;
case CSolidData::ePyramid:
m_pData = new CPyramidData;
break;
case CSolidData::eSpherePiece:
m_pData = new CSpherePieceData;
break;
default:
return FALSE;
}
ASSERT(m_pData);
return (m_pData != NULL);
}
CSolidData& CSolidData::operator=(const CSolidData& data)
{
Copy(&data);
return (*this);
}
BOOL CSolidData::Clone(const CBaseData* pData)
{
ASSERT(pData);
if (m_eType != ((CSolidData*)pData)->m_eType)
{
return FALSE;
}
m_idSolid = ((CSolidData*)pData)->m_idSolid;
m_nColorIndex = ((CSolidData*)pData)->m_nColorIndex;
m_ptPosition = ((CSolidData*)pData)->m_ptPosition;
m_ptUcsOrigin = ((CSolidData*)pData)->m_ptUcsOrigin;
m_ptUcsXDir = ((CSolidData*)pData)->m_ptUcsXDir;
m_ptUcsYDir = ((CSolidData*)pData)->m_ptUcsYDir;
m_ptUcsZDir = ((CSolidData*)pData)->m_ptUcsZDir;
if (m_pData)
{
m_pData->Clone(((CSolidData*)pData)->m_pData);
}
return TRUE;
}
BOOL CSolidData::Copy(const CBaseData* pData)
{
ASSERT(pData);
Clean();
m_eType = ((CSolidData*)pData)->m_eType;
m_idSolid = ((CSolidData*)pData)->m_idSolid;
m_nColorIndex = ((CSolidData*)pData)->m_nColorIndex;
m_ptPosition = ((CSolidData*)pData)->m_ptPosition;
m_ptUcsOrigin = ((CSolidData*)pData)->m_ptUcsOrigin;
m_ptUcsXDir = ((CSolidData*)pData)->m_ptUcsXDir;
m_ptUcsYDir = ((CSolidData*)pData)->m_ptUcsYDir;
m_ptUcsZDir = ((CSolidData*)pData)->m_ptUcsZDir;
if (CreateData())
{
m_pData->Copy(((CSolidData*)pData)->m_pData);
}
return TRUE;
}
Acad::ErrorStatus CSolidData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CSolidData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CSolidData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem((Adesk::Int32)m_eType);
pFiler->writeItem((Adesk::Int32)m_nColorIndex);
pFiler->writeItem(m_ptPosition);
pFiler->writeItem(m_ptUcsOrigin);
pFiler->writeItem(m_ptUcsXDir);
pFiler->writeItem(m_ptUcsYDir);
pFiler->writeItem(m_ptUcsZDir);
if (m_pData != NULL)
{
m_pData->dwgOutFields(pFiler);
}
return pFiler->filerStatus();
}
Acad::ErrorStatus CSolidData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
Clean();
pFiler->readItem((Adesk::Int32*)&m_eType);
pFiler->readItem((Adesk::Int32*)&m_nColorIndex);
pFiler->readItem(&m_ptPosition);
pFiler->readItem(&m_ptUcsOrigin);
pFiler->readItem(&m_ptUcsXDir);
pFiler->readItem(&m_ptUcsYDir);
pFiler->readItem(&m_ptUcsZDir);
if (CreateData())
{
m_pData->dwgInFields(pFiler);
}
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////
CUnknownData::CUnknownData()
{
}
CUnknownData::~CUnknownData()
{
}
BOOL CUnknownData::Clone(const CBaseData* pData)
{
return Copy(pData);
}
BOOL CUnknownData::Copy(const CBaseData* pData)
{
ASSERT(pData);
m_arsAcis.RemoveAll();
m_arsAcis.Copy(((CUnknownData*)pData)->m_arsAcis);
return TRUE;
}
BOOL CUnknownData::Create3dSolid(AcDb3dSolid*& pSolid)
{
INT_PTR iCount = m_arsAcis.GetSize();
if (iCount <= 0)
{
return FALSE;
}
struct resbuf* pRb = acutNewRb(0);
struct resbuf* pRbTemp = pRb;
RBList rb(pRb);
pRbTemp->resval.rstring = _tcsdup(_T("3DSOLID"));
pRbTemp->rbnext = acutNewRb(100);
pRbTemp = pRbTemp->rbnext;
pRbTemp->resval.rstring = _tcsdup(_T("AcDbEntity"));
pRbTemp->rbnext = acutNewRb(100);
pRbTemp = pRbTemp->rbnext;
pRbTemp->resval.rstring = _tcsdup(_T("AcDbModelerGeometry"));
pRbTemp->rbnext = acutNewRb(70);
pRbTemp = pRbTemp->rbnext;
pRbTemp->resval.rint = 1;
for (INT_PTR i = 0; i < iCount; i++)
{
pRbTemp->rbnext = acutNewRb(1);
pRbTemp = pRbTemp->rbnext;
pRbTemp->resval.rstring = _tcsdup(m_arsAcis[i]);
}
pRbTemp->rbnext = NULL;
ads_name adsName;
if (acdbEntMake(pRb) != RTNORM || acdbEntLast(adsName) != RTNORM)
return FALSE;
AcDbObjectId idEnt;
acdbGetObjectId(idEnt, adsName);
AcDbObject* pObj;
if (acdbOpenObject(pObj, idEnt, AcDb::kForWrite) != Acad::eOk)
return FALSE;
if (!pObj->isKindOf(AcDb3dSolid::desc()))
{
pObj->close();
return FALSE;
}
pSolid = (AcDb3dSolid*)pObj;
return TRUE;
}
BOOL CUnknownData::GetAcisString(AcDbObjectId idEnt, CStringArray& arsAcis)
{
arsAcis.RemoveAll();
ads_name adsName;
acdbGetAdsName(adsName, idEnt);
struct resbuf* pRb = acdbEntGet(adsName);
RBList rb(pRb);
if (pRb == NULL)
return FALSE;
struct resbuf* pRbTemp;
for (pRbTemp = pRb; pRbTemp != NULL; pRbTemp = pRbTemp->rbnext)
{
if (pRbTemp->restype == 1)
break;
}
for (; pRbTemp != NULL; pRbTemp = pRbTemp->rbnext)
{
if (pRbTemp->restype == 1)
arsAcis.Add(pRbTemp->resval.rstring);
}
return TRUE;
}
BOOL CUnknownData::From3dSolid(AcDbObjectId idEnt)
{
return GetAcisString(idEnt, m_arsAcis);
}
Acad::ErrorStatus CUnknownData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CUnknownData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CUnknownData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
INT_PTR iCount = m_arsAcis.GetSize();
pFiler->writeItem((Adesk::Int32)iCount);
for (INT_PTR i = 0; i < iCount; i++)
pFiler->writeItem((LPCTSTR)m_arsAcis[i]);
return pFiler->filerStatus();
}
Acad::ErrorStatus CUnknownData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
m_arsAcis.RemoveAll();
int iCount = 0;
LPTSTR pszAcis = NULL;
pFiler->readItem((Adesk::Int32*)&iCount);
for (int i = 0; i < iCount; i++)
{
pFiler->readItem(&pszAcis);
m_arsAcis.Add(pszAcis);
}
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CBoxData::CBoxData()
{
m_eBaseType = CBoxData::eCorner;
m_dXLen = 0.0;
m_dYLen = 0.0;
m_dZLen = 0.0;
}
CBoxData::~CBoxData()
{
}
BOOL CBoxData::Clone(const CBaseData* pData)
{
return Copy(pData);
}
BOOL CBoxData::Copy(const CBaseData* pData)
{
ASSERT(pData);
m_eBaseType = ((CBoxData*)pData)->m_eBaseType;
m_dXLen = ((CBoxData*)pData)->m_dXLen;
m_dYLen = ((CBoxData*)pData)->m_dYLen;
m_dZLen = ((CBoxData*)pData)->m_dZLen;
return TRUE;
}
Acad::ErrorStatus CBoxData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CBoxData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CBoxData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem((Adesk::Int32)m_eBaseType);
pFiler->writeItem(m_dXLen);
pFiler->writeItem(m_dYLen);
pFiler->writeItem(m_dZLen);
return pFiler->filerStatus();
}
Acad::ErrorStatus CBoxData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
pFiler->readItem((Adesk::Int32*)&m_eBaseType);
pFiler->readItem(&m_dXLen);
pFiler->readItem(&m_dYLen);
pFiler->readItem(&m_dZLen);
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CBooleanData::CBooleanData()
{
m_eOperateType = AcDb::kBoolUnite;
}
CBooleanData::~CBooleanData()
{
Clean();
}
void CBooleanData::Clean()
{
INT_PTR iCount = m_arpSrcObj.GetSize();
for (INT_PTR i = 0; i < iCount; i++)
delete m_arpSrcObj[i];
iCount = m_arpDesObj.GetSize();
for (i = 0; i < iCount; i++)
delete m_arpDesObj[i];
m_arpSrcObj.RemoveAll();
m_arpDesObj.RemoveAll();
}
BOOL CBooleanData::Clone(const CBaseData* pData)
{
ASSERT(pData);
m_eOperateType = ((CBooleanData*)pData)->m_eOperateType;
m_arpDesObj.Copy(((CBooleanData*)pData)->m_arpDesObj);
m_arpSrcObj.Copy(((CBooleanData*)pData)->m_arpSrcObj);
return TRUE;
}
BOOL CBooleanData::Copy(const CBaseData* pData)
{
ASSERT(pData);
Clean();
m_eOperateType = ((CBooleanData*)pData)->m_eOperateType;
CSolidData* pSubData;
INT_PTR iCount = ((CBooleanData*)pData)->m_arpSrcObj.GetSize();
for (INT_PTR i = 0; i < iCount; i++)
{
pSubData = new CSolidData;
ASSERT(pSubData);
pSubData->Copy((const CBaseData *)((CBooleanData*)pData)->m_arpSrcObj[i]);
m_arpSrcObj.Add(pSubData);
}
iCount = ((CBooleanData*)pData)->m_arpDesObj.GetSize();
for (i = 0; i < iCount; i++)
{
pSubData = new CSolidData;
ASSERT(pSubData);
pSubData->Copy((const CBaseData *)((CBooleanData*)pData)->m_arpDesObj[i]);
m_arpDesObj.Add(pSubData);
}
return TRUE;
}
Acad::ErrorStatus CBooleanData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CBooleanData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CBooleanData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem((Adesk::Int32)m_eOperateType);
INT_PTR iCount = m_arpSrcObj.GetSize();
pFiler->writeItem((Adesk::Int32)iCount);
for (INT_PTR i = 0; i < iCount; i++)
{
((CSolidData*)m_arpSrcObj[i])->dwgOutFields(pFiler);
}
iCount = m_arpDesObj.GetSize();
pFiler->writeItem((Adesk::Int32)iCount);
for (i = 0; i < iCount; i++)
{
((CSolidData*)m_arpDesObj[i])->dwgOutFields(pFiler);
}
return pFiler->filerStatus();
}
Acad::ErrorStatus CBooleanData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
Clean();
pFiler->readItem((Adesk::Int32*)&m_eOperateType);
int iCount = 0;
CSolidData* pData;
pFiler->readItem((Adesk::Int32*)&iCount);
for (int i = 0; i < iCount; i++)
{
pData = new CSolidData;
ASSERT(pData);
pData->dwgInFields(pFiler);
m_arpSrcObj.Add(pData);
}
iCount = 0;
pFiler->readItem((Adesk::Int32*)&iCount);
for (i = 0; i < iCount; i++)
{
pData = new CSolidData;
ASSERT(pData);
pData->dwgInFields(pFiler);
m_arpDesObj.Add(pData);
}
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CFrustumData::CFrustumData()
{
m_eBaseType = CFrustumData::eBase;
m_dHeight = 0.0;
m_dXRadius = 0.0;
m_dYRadius = 0.0;
m_dTopXRadius = 0.0;
}
CFrustumData::~CFrustumData()
{
}
BOOL CFrustumData::Clone(const CBaseData* pData)
{
return Copy(pData);
}
BOOL CFrustumData::Copy(const CBaseData* pData)
{
m_eBaseType = ((CFrustumData*)pData)->m_eBaseType;
m_dHeight = ((CFrustumData*)pData)->m_dHeight;
m_dXRadius = ((CFrustumData*)pData)->m_dXRadius;
m_dYRadius = ((CFrustumData*)pData)->m_dYRadius;
m_dTopXRadius = ((CFrustumData*)pData)->m_dTopXRadius;
return TRUE;
}
Acad::ErrorStatus CFrustumData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CFrustumData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CFrustumData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem((Adesk::Int32)m_eBaseType);
pFiler->writeItem(m_dHeight);
pFiler->writeItem(m_dXRadius);
pFiler->writeItem(m_dYRadius);
pFiler->writeItem(m_dTopXRadius);
return pFiler->filerStatus();
}
Acad::ErrorStatus CFrustumData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
pFiler->readItem((Adesk::Int32*)&m_eBaseType);
pFiler->readItem(&m_dHeight);
pFiler->readItem(&m_dXRadius);
pFiler->readItem(&m_dYRadius);
pFiler->readItem(&m_dTopXRadius);
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CSphereData::CSphereData()
{
m_dRadius = 0.0;
}
CSphereData::~CSphereData()
{
}
BOOL CSphereData::Clone(const CBaseData* pData)
{
return Copy(pData);
}
BOOL CSphereData::Copy(const CBaseData* pData)
{
m_dRadius = ((CSphereData*)pData)->m_dRadius;
return TRUE;
}
Acad::ErrorStatus CSphereData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CSphereData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CSphereData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem(m_dRadius);
return pFiler->filerStatus();
}
Acad::ErrorStatus CSphereData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
pFiler->readItem(&m_dRadius);
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CTorusData::CTorusData()
{
m_dMajorRadius = 0.0;
m_dMinorRadius = 0.0;
}
CTorusData::~CTorusData()
{
}
BOOL CTorusData::Clone(const CBaseData* pData)
{
return Copy(pData);
}
BOOL CTorusData::Copy(const CBaseData* pData)
{
m_dMajorRadius = ((CTorusData*)pData)->m_dMajorRadius;
m_dMinorRadius = ((CTorusData*)pData)->m_dMinorRadius;
return TRUE;
}
Acad::ErrorStatus CTorusData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CTorusData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CTorusData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem(m_dMajorRadius);
pFiler->writeItem(m_dMinorRadius);
return pFiler->filerStatus();
}
Acad::ErrorStatus CTorusData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
pFiler->readItem(&m_dMajorRadius);
pFiler->readItem(&m_dMinorRadius);
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CWedgeData::CWedgeData()
{
m_eBaseType = CWedgeData::eCorner;
m_bEqualSide = FALSE;
m_dXLen = 0.0;
m_dYLen = 0.0;
m_dZLen = 0.0;
}
CWedgeData::~CWedgeData()
{
}
BOOL CWedgeData::Clone(const CBaseData* pData)
{
return Copy(pData);
}
BOOL CWedgeData::Copy(const CBaseData* pData)
{
ASSERT(pData);
m_eBaseType = ((CWedgeData*)pData)->m_eBaseType;
m_bEqualSide = ((CWedgeData*)pData)->m_bEqualSide;
m_dXLen = ((CWedgeData*)pData)->m_dXLen;
m_dYLen = ((CWedgeData*)pData)->m_dYLen;
m_dZLen = ((CWedgeData*)pData)->m_dZLen;
return TRUE;
}
Acad::ErrorStatus CWedgeData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CWedgeData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CWedgeData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem((Adesk::Int32)m_eBaseType);
pFiler->writeItem((Adesk::Boolean)m_bEqualSide);
pFiler->writeItem(m_dXLen);
pFiler->writeItem(m_dYLen);
pFiler->writeItem(m_dZLen);
return pFiler->filerStatus();
}
Acad::ErrorStatus CWedgeData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
pFiler->readItem((Adesk::Int32*)&m_eBaseType);
pFiler->readItem((Adesk::Boolean*)&m_bEqualSide);
pFiler->readItem(&m_dXLen);
pFiler->readItem(&m_dYLen);
pFiler->readItem(&m_dZLen);
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CExtrudeData::CExtrudeData()
{
m_eBaseType = CExtrudeData::eBase;
m_pProfile = NULL;
m_pPath = NULL;
m_dHeight = 0.0;
m_dTaper = 0.0;
}
CExtrudeData::~CExtrudeData()
{
Clean();
}
void CExtrudeData::Clean()
{
m_eBaseType = CExtrudeData::eBase;
if (m_pProfile != NULL)
delete m_pProfile;
m_pProfile = NULL;
if (m_pPath != NULL)
delete m_pPath;
m_pPath = NULL;
}
BOOL CExtrudeData::Clone(const CBaseData* pData)
{
ASSERT(pData);
m_eBaseType = ((CExtrudeData*)pData)->m_eBaseType;
m_dHeight = ((CExtrudeData*)pData)->m_dHeight;
m_dTaper = ((CExtrudeData*)pData)->m_dTaper;
return TRUE;
}
BOOL CExtrudeData::Copy(const CBaseData* pData)
{
ASSERT(pData);
Clean();
m_eBaseType = ((CExtrudeData*)pData)->m_eBaseType;
m_dHeight = ((CExtrudeData*)pData)->m_dHeight;
m_dTaper = ((CExtrudeData*)pData)->m_dTaper;
if (((CExtrudeData*)pData)->m_pPath)
{
DeepCloneObject(((CExtrudeData*)pData)->m_pPath, (AcDbObject*&)m_pPath);
}
if (((CExtrudeData*)pData)->m_pProfile)
{
DeepCloneObject(((CExtrudeData*)pData)->m_pProfile, (AcDbObject*&)m_pProfile);
}
return TRUE;
}
Acad::ErrorStatus CExtrudeData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CExtrudeData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CExtrudeData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem((Adesk::Int32)m_eBaseType);
pFiler->writeItem(m_pProfile->isA()->name());
m_pProfile->dwgOutFields(pFiler);
if (m_eBaseType == CExtrudeData::ePath)
{
pFiler->writeItem(m_pPath->isA()->name());
m_pPath->dwgOutFields(pFiler);
}
else
{
pFiler->writeItem(m_dHeight);
pFiler->writeItem(m_dTaper);
}
return pFiler->filerStatus();
}
Acad::ErrorStatus CExtrudeData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
Clean();
pFiler->readItem((Adesk::Int32*)&m_eBaseType);
LPTSTR pszTemp = NULL;
AcDbObject* pObj;
AcRxClass* pClass;
pFiler->readItem(&pszTemp);
pClass = AcRxClass::cast(acrxClassDictionary->at(pszTemp));
if (pClass == NULL)
{
return Acad::eMakeMeProxy;
}
pObj = AcDbObject::cast(pClass->create());
if (pObj == NULL)
{
return Acad::eMakeMeProxy;
}
pObj->dwgInFields(pFiler);
m_pProfile = AcDbRegion::cast(pObj);
if (m_eBaseType == CExtrudeData::ePath)
{
pFiler->readItem(&pszTemp);
pClass = AcRxClass::cast(acrxClassDictionary->at(pszTemp));
if (pClass == NULL)
{
return Acad::eMakeMeProxy;
}
pObj = AcDbObject::cast(pClass->create());
if (pObj == NULL)
{
return Acad::eMakeMeProxy;
}
pObj->dwgInFields(pFiler);
m_pPath = AcDbCurve::cast(pObj);
}
else
{
pFiler->readItem(&m_dHeight);
pFiler->readItem(&m_dTaper);
}
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CRevolveData::CRevolveData()
{
m_dAngle = 0.0;
m_ptAxis.set(0.0, 0.0, 0.0);
m_vecAxis.set(0.0, 0.0, 1.0);
m_pProfile = NULL;
}
CRevolveData::~CRevolveData()
{
Clean();
}
void CRevolveData::Clean()
{
if (m_pProfile != NULL)
delete m_pProfile;
m_pProfile = NULL;
}
BOOL CRevolveData::Clone(const CBaseData* pData)
{
ASSERT(pData);
m_dAngle = ((CRevolveData*)pData)->m_dAngle;
m_ptAxis = ((CRevolveData*)pData)->m_ptAxis;
m_vecAxis = ((CRevolveData*)pData)->m_vecAxis;
return TRUE;
}
BOOL CRevolveData::Copy(const CBaseData* pData)
{
ASSERT(pData);
Clean();
m_dAngle = ((CRevolveData*)pData)->m_dAngle;
m_ptAxis = ((CRevolveData*)pData)->m_ptAxis;
m_vecAxis = ((CRevolveData*)pData)->m_vecAxis;
if (((CRevolveData*)pData)->m_pProfile)
DeepCloneObject(((CRevolveData*)pData)->m_pProfile, (AcDbObject*&)m_pProfile);
return TRUE;
}
Acad::ErrorStatus CRevolveData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CRevolveData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CRevolveData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem(m_dAngle);
pFiler->writeItem(m_ptAxis);
pFiler->writeItem(m_vecAxis);
pFiler->writeItem(m_pProfile->isA()->name());
m_pProfile->dwgOutFields(pFiler);
return pFiler->filerStatus();
}
Acad::ErrorStatus CRevolveData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
Clean();
pFiler->readItem(&m_dAngle);
pFiler->readItem(&m_ptAxis);
pFiler->readItem(&m_vecAxis);
LPTSTR pszTemp = NULL;
AcDbObject* pObj;
AcRxClass* pClass;
pFiler->readItem(&pszTemp);
pClass = AcRxClass::cast(acrxClassDictionary->at(pszTemp));
if (pClass == NULL)
return Acad::eMakeMeProxy;
pObj = AcDbObject::cast(pClass->create());
if (pObj == NULL)
return Acad::eMakeMeProxy;
pObj->dwgInFields(pFiler);
m_pProfile = AcDbRegion::cast(pObj);
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CSliceData::CSliceData()
{
m_ptOrigin.set(0.0, 0.0, 0.0);
m_vecNormal.set(0.0, 0.0, 1.0);
}
CSliceData::~CSliceData()
{
}
BOOL CSliceData::Clone(const CBaseData* pData)
{
ASSERT(pData);
m_ptOrigin = ((CSliceData*)pData)->m_ptOrigin;
m_vecNormal = ((CSliceData*)pData)->m_vecNormal;
return TRUE;
}
BOOL CSliceData::Copy(const CBaseData* pData)
{
ASSERT(pData);
m_ptOrigin = ((CSliceData*)pData)->m_ptOrigin;
m_vecNormal = ((CSliceData*)pData)->m_vecNormal;
m_Solid = ((CSliceData*)pData)->m_Solid;
return TRUE;
}
Acad::ErrorStatus CSliceData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CSliceData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CSliceData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem(m_ptOrigin);
pFiler->writeItem(m_vecNormal);
m_Solid.dwgOutFields(pFiler);
return pFiler->filerStatus();
}
Acad::ErrorStatus CSliceData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
pFiler->readItem(&m_ptOrigin);
pFiler->readItem(&m_vecNormal);
m_Solid.dwgInFields(pFiler);
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CArcBridgeData::CArcBridgeData()
{
m_eBaseType = CArcBridgeData::eCorner;
m_dX = 0.0;
m_dY = 0.0;
m_dZ = 0.0;
m_dW = 0.0;
m_dH = 0.0;
}
CArcBridgeData::~CArcBridgeData()
{
}
BOOL CArcBridgeData::Clone(const CBaseData* pData)
{
return Copy(pData);
}
BOOL CArcBridgeData::Copy(const CBaseData* pData)
{
ASSERT(pData);
m_eBaseType = ((CArcBridgeData*)pData)->m_eBaseType;
m_dX = ((CArcBridgeData*)pData)->m_dX;
m_dY = ((CArcBridgeData*)pData)->m_dY;
m_dZ = ((CArcBridgeData*)pData)->m_dZ;
m_dW = ((CArcBridgeData*)pData)->m_dW;
m_dH = ((CArcBridgeData*)pData)->m_dH;
return TRUE;
}
Acad::ErrorStatus CArcBridgeData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CArcBridgeData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CArcBridgeData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem((Adesk::Int32)m_eBaseType);
pFiler->writeItem(m_dX);
pFiler->writeItem(m_dY);
pFiler->writeItem(m_dZ);
pFiler->writeItem(m_dW);
pFiler->writeItem(m_dH);
return pFiler->filerStatus();
}
Acad::ErrorStatus CArcBridgeData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
pFiler->readItem((Adesk::Int32*)&m_eBaseType);
pFiler->readItem(&m_dX);
pFiler->readItem(&m_dY);
pFiler->readItem(&m_dZ);
pFiler->readItem(&m_dW);
pFiler->readItem(&m_dH);
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CArcColumnData::CArcColumnData()
{
m_eBaseType = CArcColumnData::eCorner;
m_dX = 0.0;
m_dY = 0.0;
m_dZ = 0.0;
}
CArcColumnData::~CArcColumnData()
{
}
BOOL CArcColumnData::Clone(const CBaseData* pData)
{
return Copy(pData);
}
BOOL CArcColumnData::Copy(const CBaseData* pData)
{
ASSERT(pData);
m_eBaseType = ((CArcColumnData*)pData)->m_eBaseType;
m_dX = ((CArcColumnData*)pData)->m_dX;
m_dY = ((CArcColumnData*)pData)->m_dY;
m_dZ = ((CArcColumnData*)pData)->m_dZ;
return TRUE;
}
Acad::ErrorStatus CArcColumnData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CArcColumnData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CArcColumnData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem((Adesk::Int32)m_eBaseType);
pFiler->writeItem(m_dX);
pFiler->writeItem(m_dY);
pFiler->writeItem(m_dZ);
return pFiler->filerStatus();
}
Acad::ErrorStatus CArcColumnData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
pFiler->readItem((Adesk::Int32*)&m_eBaseType);
pFiler->readItem(&m_dX);
pFiler->readItem(&m_dY);
pFiler->readItem(&m_dZ);
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CHillWallData::CHillWallData()
{
m_eBaseType = CHillWallData::eCorner;
m_dX = 0.0;
m_dY = 0.0;
m_dZ = 0.0;
m_dH = 0.0;
}
CHillWallData::~CHillWallData()
{
}
BOOL CHillWallData::Clone(const CBaseData* pData)
{
return Copy(pData);
}
BOOL CHillWallData::Copy(const CBaseData* pData)
{
ASSERT(pData);
m_eBaseType = ((CHillWallData*)pData)->m_eBaseType;
m_dX = ((CHillWallData*)pData)->m_dX;
m_dY = ((CHillWallData*)pData)->m_dY;
m_dZ = ((CHillWallData*)pData)->m_dZ;
m_dH = ((CHillWallData*)pData)->m_dH;
return TRUE;
}
Acad::ErrorStatus CHillWallData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CHillWallData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CHillWallData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem((Adesk::Int32)m_eBaseType);
pFiler->writeItem(m_dX);
pFiler->writeItem(m_dY);
pFiler->writeItem(m_dZ);
pFiler->writeItem(m_dH);
return pFiler->filerStatus();
}
Acad::ErrorStatus CHillWallData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
pFiler->readItem((Adesk::Int32*)&m_eBaseType);
pFiler->readItem(&m_dX);
pFiler->readItem(&m_dY);
pFiler->readItem(&m_dZ);
pFiler->readItem(&m_dH);
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CPyramidData::CPyramidData()
{
m_eBaseType = CPyramidData::eCorner;
m_dX = 0.0;
m_dY = 0.0;
m_dZ = 0.0;
}
CPyramidData::~CPyramidData()
{
}
BOOL CPyramidData::Clone(const CBaseData* pData)
{
return Copy(pData);
}
BOOL CPyramidData::Copy(const CBaseData* pData)
{
ASSERT(pData);
m_eBaseType = ((CPyramidData*)pData)->m_eBaseType;
m_dX = ((CPyramidData*)pData)->m_dX;
m_dY = ((CPyramidData*)pData)->m_dY;
m_dZ = ((CPyramidData*)pData)->m_dZ;
return TRUE;
}
Acad::ErrorStatus CPyramidData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CPyramidData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CPyramidData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem((Adesk::Int32)m_eBaseType);
pFiler->writeItem(m_dX);
pFiler->writeItem(m_dY);
pFiler->writeItem(m_dZ);
return pFiler->filerStatus();
}
Acad::ErrorStatus CPyramidData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
pFiler->readItem((Adesk::Int32*)&m_eBaseType);
pFiler->readItem(&m_dX);
pFiler->readItem(&m_dY);
pFiler->readItem(&m_dZ);
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
CSpherePieceData::CSpherePieceData()
{
m_dW = 0.0;
m_dH = 0.0;
}
CSpherePieceData::~CSpherePieceData()
{
}
BOOL CSpherePieceData::Clone(const CBaseData* pData)
{
return Copy(pData);
}
BOOL CSpherePieceData::Copy(const CBaseData* pData)
{
ASSERT(pData);
m_dW = ((CSpherePieceData*)pData)->m_dW;
m_dH = ((CSpherePieceData*)pData)->m_dH;
return TRUE;
}
Acad::ErrorStatus CSpherePieceData::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CSpherePieceData::dxfInFields(AcDbDxfFiler* pFiler)
{
return pFiler->filerStatus();
}
Acad::ErrorStatus CSpherePieceData::dwgOutFields(AcDbDwgFiler* pFiler) const
{
pFiler->writeItem(m_dW);
pFiler->writeItem(m_dH);
return pFiler->filerStatus();
}
Acad::ErrorStatus CSpherePieceData::dwgInFields(AcDbDwgFiler* pFiler)
{
if (pFiler->filerStatus() != Acad::eOk)
return pFiler->filerStatus();
pFiler->readItem(&m_dW);
pFiler->readItem(&m_dH);
return pFiler->filerStatus();
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////