#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; };