|
|
#include "StdAfx.h"
|
#include "PathScheduler_Dual_Flying_Random.h"
|
|
|
CPathScheduler_Dual_Flying_Random::CPathScheduler_Dual_Flying_Random(void)
|
{
|
m_vecPathData_Random.clear();
|
}
|
|
|
CPathScheduler_Dual_Flying_Random::~CPathScheduler_Dual_Flying_Random(void)
|
{
|
m_vecPathData_Random.clear();
|
}
|
|
int CPathScheduler_Dual_Flying_Random::PathScheduling( const VectorPathData& vecPathData, const VectorPathData& vecStartPath )
|
{
|
// random data
|
CreatePathData_Random((int)vecPathData.size());
|
|
m_vecRangeRect.clear();
|
m_vecScanRangeData.clear();
|
m_vecPathSchedulerResult.clear();
|
|
int nGantryCount = 2;
|
|
int nRangeCount = CalculateRangeRect(
|
nGantryCount,
|
m_PathSchedulerParam.GetModuleCount(),
|
m_PathSchedulerParam.GetScanCount(),
|
m_PathSchedulerParam.GetGlassSizeX(),
|
m_PathSchedulerParam.GetGlassSizeY(),
|
m_PathSchedulerParam.GetScanMargin(),
|
m_PathSchedulerParam.GetOriginDir(),
|
m_PathSchedulerParam.GetBaseModuleDir(),
|
m_vecScanRangeData);
|
|
if (nRangeCount<1) return 0;
|
|
int nTotalCount = 0;
|
SPathData sStartPath; // ¸ðµâº° ½ºÄµ ½ÃÀÛÀ§Ä¡ ÀúÀå.
|
for (int nModuleIdx=0; nModuleIdx<m_PathSchedulerParam.GetModuleCount(); nModuleIdx++)
|
{
|
for (int nScanIdx = 0; nScanIdx<m_PathSchedulerParam.GetScanCount(); nScanIdx++)
|
{
|
SRangeData* pRangeData = GetScanRangeData(nModuleIdx, nScanIdx);
|
|
if (pRangeData==NULL) continue;
|
|
// add range rect
|
m_vecRangeRect.push_back(CRect(pRangeData->nLeft, pRangeData->nTop, pRangeData->nRight, pRangeData->nBottom));
|
|
if (nScanIdx==0) // first scan ÀÇ ½ÃÀÛÀ§Ä¡´Â ÇöÀç ¸ðµâÀÇ À§Ä¡ÀÌ´Ù.
|
{
|
sStartPath = vecStartPath[nModuleIdx];
|
}
|
|
// ¿µ¿ªº° ½ºÄÉÁ층 ¼öÇà.
|
CPathSchedulerResult schedulerResult(nModuleIdx, nScanIdx);
|
int nCount = CalculatePath(nModuleIdx, nScanIdx, sStartPath, m_vecPathData_Random, *pRangeData, schedulerResult);
|
nTotalCount += nCount;
|
if (nCount>1)
|
{
|
// ´ÙÀ½ ½ºÄµÀÇ ½ÃÀÛÀ§Ä¡´Â ÀÌÀü ½ºÄµÀÇ Á¾·á À§Ä¡ÀÌ´Ù.
|
const SSchedulerResult* pNode = schedulerResult.GetPathSchedulerResult(schedulerResult.GetPathSchedulerResultCount() - 1);
|
if (pNode)
|
{
|
sStartPath.nPosX = (pRangeData->nScanEndX);
|
sStartPath.nPosY = int(pNode->dPositionY * 1000);
|
}
|
m_vecPathSchedulerResult.push_back(schedulerResult);
|
}
|
else // ´ë»ó °áÇÔÀÌ ¾øÀ»¶§ xÃà À§Ä¡¸¸ º¯°æÇÑ´Ù.
|
{
|
sStartPath.nPosX = (pRangeData->nScanEndX); //
|
}
|
}
|
}
|
|
return int(m_vecPathSchedulerResult.size());
|
}
|
|
void CPathScheduler_Dual_Flying_Random::CreatePathData_Random( int nCount )
|
{
|
int nCreateCount = (int)(nCount * m_PathSchedulerParam.GetRandomScale() + 0.5);
|
|
m_vecPathData_Random.reserve(nCreateCount);
|
|
srand((unsigned)time(NULL));
|
|
SPathData pathData;
|
for (int nIdx=0; nIdx<nCreateCount; nIdx++)
|
{
|
pathData.nIndex = nIdx;
|
|
pathData.nPosX = (rand()*1000) % int(m_PathSchedulerParam.GetGlassSizeX());// * 1000;
|
pathData.nPosY = (rand()*1000) % int(m_PathSchedulerParam.GetGlassSizeY());// * 1000;
|
|
pathData.nPosX += rand() % 1000;
|
pathData.nPosY += rand() % 1000;
|
|
m_vecPathData_Random.push_back(pathData);
|
}
|
}
|