#pragma once
|
|
#include "GreedyTSP.h"
|
#include "PathSchedulerData.h"
|
#include "PathSchedulerResult.h"
|
|
enum PathSchedulerType { SchedulerType_Default=0,
|
SchedulerType_TSP,
|
SchedulerType_Dual,
|
SchedulerType_Dual_TSP,
|
SchedulerType_Dual_Active,
|
SchedulerType_Dual_Active_TSP,
|
SchedulerType_Flying,
|
SchedulerType_Dual_Flying,
|
SchedulerType_Dual_Flying_Random,
|
SchedulerType_Sorting,
|
SchedulerType_Dual_Sorting,
|
SchedulerType_Dual_Active_Sorting,
|
SchedulerType_Quad_Sorting,
|
SchedulerType_Qual_Active_Sorting,
|
SchedulerType_Qual_Active_TSP,
|
SchedulerType_Count };
|
|
|
|
|
|
class AFX_EXT_CLASS CPathScheduler
|
{
|
public:
|
CPathScheduler(void);
|
virtual ~CPathScheduler(void);
|
void Reset();
|
|
public:
|
// virtual func
|
virtual int GetSchedulerType() const { return SchedulerType_Default; }
|
virtual int PathScheduling(const VectorPathData& vecPathData, const VectorPathData& vecStartPath);
|
virtual int PathScheduling(const VectorPathData& vecPathData, const SPathData& startPath);
|
|
virtual int PathScheduling(const SPathData* pPathData, int nPathDataCount, const SPathData* pStartPath, int nStartPathCount);
|
virtual int PathScheduling(const SPathData* pPathData, int nPathDataCount, const SPathData& startPath);
|
|
public:
|
int PathScheduling(const VectorPathData& vecPathData, const VectorPathData& vecStackPathData, const VectorPathData& vecStartPath);
|
|
protected:
|
virtual int CalculatePath(const SPathData& startPath, const VectorPathData& vecTotalPathData, CPathSchedulerResult& scheduleResult);
|
virtual int CalculatePath(const SPathData& startPath, const VectorPathData& vecTotalPathData, const CRect& rtRange, CPathSchedulerResult& scheduleResult);
|
|
virtual int CalculatePath(const SPathData& startPath, const VectorPathData& vecFirstPathData, const VectorPathData& vecSecondPathData, CPathSchedulerResult& scheduleResult);
|
|
public:
|
// getter
|
int GetPathSchedulerResultCount() const;
|
double GetTotalSchedulerTime(int nIndex=0) const;
|
double GetTotalSchedulerDistance(int nIndex=0) const;
|
CPathSchedulerParm* GetPathSchedulerParam();
|
CPathSchedulerResult* GetPathSchedulerResult(int nIndex=0);
|
|
int GetRangeRectCount() const;
|
CRect* GetRangeRect(int nIndex);
|
const CRect* GetRangeRect(int nIndex) const;
|
|
// setter
|
void SetPointInfo(int nMin, int nMax);
|
void SetPathSchedulerParam(const CPathSchedulerParm& scheduleParam);
|
|
// load/save
|
BOOL LoadPathSchedulerParam(const CString& strFilename);
|
BOOL SavePathSchedulerParam(const CString& strFilename);
|
|
protected:
|
BOOL CalculateDistanceSpeedTime(SSchedulerResult& pt1, const SSchedulerResult &pt2);
|
BOOL CalculateDistanceSpeedTime(SSchedulerResult& pt1, double dPosX, double dPosY);
|
|
protected:
|
int m_nPointMin;
|
int m_nPointMax;
|
CPathSchedulerParm m_PathSchedulerParam;
|
VectorPathSchedulerResult m_vecPathSchedulerResult;
|
|
VectorRect m_vecRangeRect;
|
};
|