deargui-vpl/ref/virtools/Samples/Behaviors/Grids/NodeLinker.cpp

112 lines
3.6 KiB
C++

#include "CKAll.h"
#include "PFUtils.h"
#include "NodeLinker.h"
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// IndoorLink
/////////////////////////////////////////////////////////////////////////////////////////////////////////
IndoorLink::IndoorLink()
{
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// IndoorLink
/////////////////////////////////////////////////////////////////////////////////////////////////////////
IndoorLink::~IndoorLink()
{
m_ListSameGrid.Clear();
m_ListSameGridCoast.Clear();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// NodeLinker
/////////////////////////////////////////////////////////////////////////////////////////////////////////
NodeLinker::NodeLinker(int maxParallelContext, int numLayer)
: m_Pos(0),
m_TypeCase(tc_door),
m_Occupy(FALSE)
{
int i;
m_NumParallelContext = maxParallelContext;
m_ArrayContextInfo.Resize(maxParallelContext);
m_DynNodeLinker.Resize(maxParallelContext);
m_DynNodeLinkerCoast.Resize(maxParallelContext);
for (i = 0; i < maxParallelContext; i++)
{
m_ArrayContextInfo[i] = new LinkerContext();
m_DynNodeLinker[i] = 0;
}
m_NumLayer = numLayer;
if (numLayer > 0)
m_ArrayIndoor = new IndoorLink[numLayer];
else
m_ArrayIndoor = 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// ~NodeLinker
/////////////////////////////////////////////////////////////////////////////////////////////////////////
NodeLinker::~NodeLinker()
{
if (m_Pos)
delete m_Pos;
for (int i = 0; i < m_ArrayContextInfo.Size(); i++)
delete m_ArrayContextInfo[i];
if (m_ArrayIndoor)
delete [] m_ArrayIndoor;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// ClearConnected
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void NodeLinker::ClearConnected()
{
m_ListConnected.Clear();
for (int i = 0; i < m_NumLayer; i++)
{
m_ArrayIndoor[i].m_ListSameGrid.Clear();
m_ArrayIndoor[i].m_ListSameGridCoast.Clear();
m_ArrayIndoor[i].m_ListSameGridLayerCoast.Clear();
m_ArrayIndoor[i].m_ListSameGridMaxLayerCoast.Clear();
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// ClearDynConnected
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void NodeLinker::ClearDynConnected()
{
for (int i = 0; i < m_NumParallelContext; i++)
m_DynNodeLinker[i] = 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// SetPos
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void NodeLinker::SetPos(VxVector &pos)
{
m_Pos = new VxVector(pos);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// SetPos
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void NodeLinker::ResizeParallelContext(int numberContext)
{
int oldNumberContext = m_ArrayContextInfo.Size();
m_ArrayContextInfo.Resize(numberContext);
m_DynNodeLinker.Resize(numberContext);
m_DynNodeLinkerCoast.Resize(numberContext);
if (numberContext > oldNumberContext)
for (int i = oldNumberContext; i < numberContext; i++)
{
m_ArrayContextInfo[i] = new LinkerContext();
m_DynNodeLinker[i] = 0;
}
}