#pragma once #include "CHPathScheduler/PathScheduler.h" class AFX_EXT_CLASS CPathScheduler_Dual_Flying : public CPathScheduler { public: CPathScheduler_Dual_Flying(void); virtual ~CPathScheduler_Dual_Flying(void); // virtual func virtual int GetSchedulerType() const { return SchedulerType_Dual_Flying; } virtual int PathScheduling(const VectorPathData& vecPathData, const VectorPathData& vecStartPath); protected: int CalculateRangeRect(int nGantryCount, int nModuleCount, int nScanCount, int nGlassSizeX, int nGlassSizeY, int nScanMargin, int nOriginDir, int nBaseDir, VectorRangeData& vecRangeData); int CalculatePath(int nModuleIdx, int nScanIdx, const SPathData& startPath, const VectorPathData& vecTotalPathData, const SRangeData& rtRange, CPathSchedulerResult& scheduleResult); virtual int CalculatePath(const SPathData& startPath, const VectorPathData& vecFirstPathData, const VectorPathData& vecSecondPathData, CPathSchedulerResult& scheduleResult) { return 1; } SRangeData* GetScanRangeData(int nModuleIdx, int nScanIdx); const SRangeData* GetScanRangeData(int nModuleIdx, int nScanIdx) const; static int GetDirectionX(int nDir1, int nDir2); static int GetDirectionY(int nDir1, int nDir2); static int IsChangeModuleIndex(int nDir1, int nDir2); static int IsChangeScanIndex(int nDir1, int nDir2); static int IsChangeScanDir(int nDir1, int nDir2); static int GetChangeModuleIndex(int nModuleIndex, int nOriginDir, int nBaseDir, int nGantryModuleCount, int nTotalModuleCount); static int GetChangeScanIndex(int nScanIndex, int nTotalScanCount); static int GetChangeScanDir(int nScanDir); protected: VectorRangeData m_vecScanRangeData; };