#include "StdAfx.h" #include "PathScheduler_Dual.h" CPathScheduler_Dual::CPathScheduler_Dual(void) { } CPathScheduler_Dual::~CPathScheduler_Dual(void) { } int CPathScheduler_Dual::PathScheduling(const VectorPathData& vecPathData, const VectorPathData& vecStartPath) { if (vecStartPath.size()<1) return 0; m_vecPathSchedulerResult.clear(); m_vecRangeRect.clear(); // init CRect rtLeftRange(0, 0, m_PathSchedulerParam.GetGlassSizeX(), m_PathSchedulerParam.GetGlassSizeY()); CRect rtCenterRange(0, 0, m_PathSchedulerParam.GetGlassSizeX(), m_PathSchedulerParam.GetGlassSizeY()); CRect rtRightRange(0, 0, m_PathSchedulerParam.GetGlassSizeX(), m_PathSchedulerParam.GetGlassSizeY()); // set range switch(m_PathSchedulerParam.GetOriginDir()) { case SchedulerDir_LeftTop: // left top case SchedulerDir_LeftBottom: // left bottom rtLeftRange.left = 0; rtLeftRange.right = (m_PathSchedulerParam.GetGlassSizeX() / 2) - (m_PathSchedulerParam.GetCollisionDistX()/2); rtCenterRange.left = rtLeftRange.right; rtCenterRange.right = (m_PathSchedulerParam.GetGlassSizeX() / 2) + (m_PathSchedulerParam.GetCollisionDistX()/2); rtRightRange.left = rtCenterRange.right; rtRightRange.right = m_PathSchedulerParam.GetGlassSizeX(); break; case SchedulerDir_RightTop: // right top case SchedulerDir_RightBottom: // right bottom rtLeftRange.left = m_PathSchedulerParam.GetGlassSizeX(); rtLeftRange.right = (m_PathSchedulerParam.GetGlassSizeX() / 2) + (m_PathSchedulerParam.GetCollisionDistX()/2); rtCenterRange.left = rtLeftRange.right; rtCenterRange.right = (m_PathSchedulerParam.GetGlassSizeX() / 2) - (m_PathSchedulerParam.GetCollisionDistX()/2); rtRightRange.left = rtCenterRange.right; rtRightRange.right = 0; break; } // normalize rtLeftRange.NormalizeRect(); rtCenterRange.NormalizeRect(); rtRightRange.NormalizeRect(); // add range rect m_vecRangeRect.push_back(rtLeftRange); m_vecRangeRect.push_back(rtCenterRange); m_vecRangeRect.push_back(rtRightRange); // center if (m_PathSchedulerParam.GetCenterCoord()) { rtLeftRange.MoveToXY(-m_PathSchedulerParam.GetGlassSizeX()/2, -m_PathSchedulerParam.GetGlassSizeY()/2); rtCenterRange.MoveToXY(-m_PathSchedulerParam.GetGlassSizeX()/2, -m_PathSchedulerParam.GetGlassSizeY()/2); rtRightRange.MoveToXY(-m_PathSchedulerParam.GetGlassSizeX()/2, -m_PathSchedulerParam.GetGlassSizeY()/2); } // left gantry CPathSchedulerResult scheduleResultLeft(vecStartPath[0].nIndex); CalculatePath(vecStartPath[0], vecPathData, rtLeftRange, scheduleResultLeft); // right gantry CPathSchedulerResult scheduleResultRight(vecStartPath[1].nIndex); CalculatePath(vecStartPath[1], vecPathData, rtRightRange, scheduleResultRight); // ÃÑ À̵¿½Ã°£ ºñ±³ CPathSchedulerResult* pCenterScheduleResult = NULL; if (scheduleResultLeft.GetTotalSchedulerTime() > scheduleResultRight.GetTotalSchedulerTime()) // left°¡ ¿À·¡°É¸®¸é { pCenterScheduleResult = &scheduleResultLeft; } else // right°¡ ¿À·¡°É¸®¸é { pCenterScheduleResult = &scheduleResultRight; } // center const SSchedulerResult* pLastPoint = pCenterScheduleResult->GetPathSchedulerResult(pCenterScheduleResult->GetPathSchedulerResultCount()-1); if (pLastPoint) { SPathData ptStartPath((int)(pLastPoint->dPositionX*1000.0), (int)(pLastPoint->dPositionY*1000.0)); CPathSchedulerResult scheduleResultCenter; CalculatePath(ptStartPath, vecPathData, rtCenterRange, scheduleResultCenter); if (scheduleResultLeft.GetTotalSchedulerTime() > scheduleResultRight.GetTotalSchedulerTime()) // left°¡ ¿À·¡°É¸®¸é { scheduleResultLeft.AddTailScheduleResult(scheduleResultCenter); } else // right°¡ ¿À·¡°É¸®¸é { scheduleResultRight.AddTailScheduleResult(scheduleResultCenter); } //m_vecPathSchedulerResult.push_back(scheduleResultCenter); } m_vecPathSchedulerResult.push_back(scheduleResultLeft); m_vecPathSchedulerResult.push_back(scheduleResultRight); return (int) m_vecPathSchedulerResult.size(); }