#pragma once
#include "myOpenCV.h"
#include "BaseProcess.h"
#include <Windows.h>
#include <tchar.h>
#include <vector>
#include <string>
class Marker;
struct TargetInfo {
cv::Point2f pos;
float size;
TargetInfo(float x, float y, float s) {
pos = cv::Point2f(x, y);
size = s;
}
};
struct FrameInfo {
float time;
std::vector<TargetInfo> target;
};
struct StimInfo {
int type; // 1:画像 2:動画
std::string filename; // 提示ファイル
float dulation; // 時間(sec)
std::string csvfile; // ターゲット座標ファイル(無い場合は_アンダーバー)
int target; // ターゲット(無い場合は0)
std::vector<FrameInfo> frame;
};
class Stimulus : public BaseProcess
{
public:
enum PAGES {OPENING, CALIB, CALIB_COMPLETE, CALIB_FAILED, START, STOP, NEXT, BACK, WHITE};
private:
const cv::String OPENING_FILE = "../images/ECT_toppage.png";
const cv::String CALIB_FILE = "../images/calib.png";
const cv::String CALIB_COMPLETE_FILE = "../images/CalibComplete.png";
const cv::String CALIB_FAILED_FILE = "../images/CalibFailed.png";
const cv::String WHITE_FILE = "../images/white.png";
const std::string DATA_FILE = "StimDataS.txt";
Marker* _pMarker;
cv::Mat _DispBuffer;
std::vector<StimInfo> _StimInfoSet;
//std::vector<StimImage> _StimImages;
int _StimNo; // 刺激データ番号 -1:停止
DWORD _StartTime; // 刺激提示開始時間
//void StimWithMarker();
bool SetStimulus();
void ReadCsv();
public:
Stimulus(ECTrainer* pEct, Marker* pMarker);
bool Init();
bool MainLoop();
void SetPage(PAGES st);
//cv::Point2f GetEyeR() { return _StimImages[_StimNo].eyes[0]; }
//cv::Point2f GetEyeL() { return _StimImages[_StimNo].eyes[1]; }
};