#include "sifpart.h" CSIFPart::CSIFPart() { m_pCListSolids = NULL; m_fUnits = 1; m_fCoordPrecision = .0001f; m_fDesiredAccuracy = .01f; } CSIFPart::~CSIFPart() { delete m_pCListSolids; } VOID CSIFPart::Init() { m_pCListSolids = new CList; m_pCListSolids->Init(); } VOID CSIFPart::AddSolid(CSIFSolid *pSolid) { m_pCListSolids->InsertLast(pSolid, 0); } VOID CSIFPart::MakeSingleShellPart(CLEDSGeometry *pGeometry) { CSIFSolid *pSolid; CSIFShell *pShell; pSolid = new CSIFSolid; pSolid->Init(); pShell = new CSIFShell; pShell->Init(); pShell->SetGeometry(pGeometry); pSolid->AddShellSet(pShell); if (m_pCListSolids == NULL) Init(); m_pCListSolids->InsertLast(pSolid, 0); } VOID CSIFPart::OutputLayer(FLOAT fSliceZ, INT_32 iPrecisionExp) { CListIter SolidListIter; CSIFSolid *pCurSolid; SolidListIter.Init(m_pCListSolids); pCurSolid = SolidListIter.PeekFirst(); while (pCurSolid) { pCurSolid->OutputLayer(fSliceZ, iPrecisionExp); pCurSolid = SolidListIter.PeekNext(); } } CSIFPartGeomIter::CSIFPartGeomIter() { m_pCSIFPart = NULL; m_pCurSolid = NULL; }; BOOL CSIFPartGeomIter::Valid() { if (m_pCSIFPart == NULL) return FALSE; else return TRUE; } VOID CSIFPartGeomIter::Init(CSIFPart *pCSIFPart) { m_pCSIFPart = pCSIFPart; m_SolidListIter.Init(m_pCSIFPart->GetListSolids()); m_pCurSolid = m_SolidListIter.PeekFirst(); if (m_pCurSolid) m_SolidGeomIter.Init(m_pCurSolid); } CLEDSGeometry *CSIFPartGeomIter::PeekNext() { CLEDSGeometry *pGeom; if (m_pCurSolid == NULL) return NULL; pGeom = m_SolidGeomIter.PeekNext(); if (pGeom) { return pGeom; } else { m_pCurSolid = m_SolidListIter.PeekNext(); if (m_pCurSolid) m_SolidGeomIter.Init(m_pCurSolid); return PeekNext(); } }