#include "Stimulus.h"
#include "ECTrainer.h"
#include "Marker.h"
#include <iostream>
#include <fstream>
#include <Windows.h>
#include <tchar.h>
// コンストラクタ
Stimulus::Stimulus(ECTrainer* pEct, Marker* pMarker)
:BaseProcess(pEct)
, _pMarker(pMarker)
, _StimNo(0)
{
}
// 初期化
bool Stimulus::Init() {
SetStimulus(STIM::OPENING);
//_DispBuffer = cv::imread(OPENING_FILE);
std::ifstream ifs(DATA_FILE);
if (!ifs)
{
OutputDebugString(_T("Can't open stim data file."));
return false;
}
while (!ifs.eof()) {
StimImage st;
ifs >> st.filename >> st.eyes[0].x >> st.eyes[0].y >> st.eyes[1].x >> st.eyes[1].y;
std::cout << st.filename << st.eyes[0] << st.eyes[1] << std::endl;
if (st.filename.size() > 0) _StimImages.push_back(st);
}
return true;
}
// ループ
bool Stimulus::MainLoop() {
while (_pEct->IsRunning()) {
_pEct->SetDispBuffer(_DispBuffer);
Sleep(30);
}
return true;
}
// 刺激画像表示
void Stimulus::SetStimulus(STIM st) {
switch (st) {
case STIM::OPENING:
_DispBuffer = cv::imread(OPENING_FILE);
break;
case STIM::CALIB:
_DispBuffer = cv::imread(CALIB_FILE);
break;
case STIM::CALIB_COMPLETE:
_DispBuffer = cv::imread(CALIB_COMPLETE_FILE);
break;
case STIM::CALIB_FAILED:
_DispBuffer = cv::imread(CALIB_FAILED_FILE);
break;
case STIM::START:
_StimNo = 0;
StimWithMarker();
break;
case STIM::NEXT:
_StimNo = (_StimNo + 1) % _StimImages.size();
StimWithMarker();
break;
}
}
// 刺激をセット
void Stimulus::StimWithMarker() {
cv::Mat img = cv::imread(_StimImages[_StimNo].filename);
_pMarker->Generate(img.size());
_pMarker->DrawMarker(img);
img.copyTo(_DispBuffer);
}