Newer
Older
PrismSoftware / ECTrainer2 / Stimulus.h
#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]; }
};