14#include <berryISelectionService.h>
15#include <berryIWorkbenchWindow.h>
22#include <qfiledialog.h>
29#include <mitkLogBackend.h>
56 QString LogFileName =
m_Controls->m_OutputPath->text() +
"_results.log";
57 mitk::LogBackend::Unregister();
58 mitk::LogBackend::SetLogFile(LogFileName.toStdString());
59 mitk::LogBackend::Register();
62 for (std::size_t i = 0; i <
m_RMSValues.size(); ++i)
68 MITK_INFO <<
"RMS mean over " <<
m_RMSValues.size() <<
" values: " << RMSmean;
70 mitk::DataNode::Pointer newNode = mitk::DataNode::New();
71 newNode->SetName(
"Tracking Results");
73 this->GetDataStorage()->Add(newNode);
75 std::vector<mitk::HummelProtocolEvaluation::HummelProtocolDistanceError> results5cmDistances;
78 else if (
m_Controls->m_smallVolume->isChecked())
80 else if (
m_Controls->m_standardVolume->isChecked())
90 m_Controls =
new Ui::QmitkIGTTrackingSemiAutomaticMeasurementViewControls;
105 qApp->installEventFilter(
this);
112 m_Controls->m_StopTracking->setEnabled(
false);
125 m_Controls->m_ReferenceBox->setEnabled(
false);
126 m_Controls->m_SetReference->setEnabled(
false);
132 mitk::NavigationToolStorage::Pointer returnValue;
135 returnValue = mitk::NavigationToolStorage::New();
138 mitk::NavigationToolStorageDeserializer::Pointer myDeserializer = mitk::NavigationToolStorageDeserializer::New(GetDataStorage());
139 returnValue = myDeserializer->Deserialize(file);
140 if (returnValue.IsNull())
143 msgBox.setText(myDeserializer->GetErrorMessage().c_str());
146 returnValue =
nullptr;
157 QString Label =
"Positions At Start: ";
161 Label = Label +
"Tool" + QString::number(i) +
":[" + QString::number(position[0]) +
":" + QString::number(position[1]) +
":" + QString::number(position[1]) +
"] ";
164 m_Controls->m_ReferencePosAtStart->setText(Label);
170 QString filename = QFileDialog::getOpenFileName(
nullptr, tr(
"Open Toolfile"),
"/", tr(
"All Files (*.*)"));
171 if (filename.isNull())
return;
176 Poco::Path myPath = Poco::Path(filename.toStdString());
177 QString toolLabel = QString(
"Tool Storage: ") + QString::number(
m_MeasurementStorage->GetToolCount()) +
" Tools from " + myPath.getFileName().c_str();
178 m_Controls->m_MeasurementToolStorageLabel->setText(toolLabel);
181 m_Controls->m_ToolStatusWidget->RemoveStatusLabels();
188 static QString oldFile;
189 if (oldFile.isNull()) oldFile =
"/";
190 QString filename = QFileDialog::getOpenFileName(
nullptr, tr(
"Open Toolfile"), oldFile, tr(
"All Files (*.*)"));
191 if (filename.isNull())
return;
197 Poco::Path myPath = Poco::Path(filename.toStdString());
198 QString toolLabel = QString(
"Tool Storage: ") + QString::number(
m_ReferenceStorage->GetToolCount()) +
" Tools from " + myPath.getFileName().c_str();
199 m_Controls->m_ReferenceToolStorageLabel->setText(toolLabel);
207 MessageBox(
"Error: No measurement tools loaded yet!");
212 MessageBox(
"Error: No reference tools loaded yet!");
217 MessageBox(
"Error: No way to track without tools!");
222 MessageBox(
"Error: No way to track without tools!");
227 mitk::TrackingDeviceSourceConfigurator::Pointer myTrackingDeviceSourceFactory1 = mitk::TrackingDeviceSourceConfigurator::New(this->
m_MeasurementStorage, this->
m_Controls->m_MeasurementTrackingDeviceConfigurationWidget->GetTrackingDevice());
231 MessageBox(myTrackingDeviceSourceFactory1->GetErrorMessage());
240 m_Controls->m_ToolStatusWidget->ShowStatusLabels();
241 m_Controls->m_ToolStatusWidget->SetShowPositions(
true);
242 m_Controls->m_ToolStatusWidget->SetShowQuaternions(
true);
245 if (
m_Controls->m_UseReferenceTrackingSystem->isChecked())
247 mitk::TrackingDeviceSourceConfigurator::Pointer myTrackingDeviceSourceFactory2 = mitk::TrackingDeviceSourceConfigurator::New(this->
m_ReferenceStorage, this->
m_Controls->m_ReferenceDeviceConfigurationWidget->GetTrackingDevice());
251 MessageBox(myTrackingDeviceSourceFactory2->GetErrorMessage());
261 if (
m_Controls->m_UseReferenceTrackingSystem->isChecked())
269 MessageBox(
"Error while starting the tracking device!");
279 m_Controls->m_StartTracking->setEnabled(
false);
280 m_Controls->m_StartTracking->setEnabled(
true);
290 if (
m_Controls->m_UseReferenceTrackingSystem->isChecked())
296 m_Controls->m_StartTracking->setEnabled(
true);
297 m_Controls->m_StartTracking->setEnabled(
false);
308 QString filename = QFileDialog::getOpenFileName(
nullptr, tr(
"Open Measurement Filename List"),
"/", tr(
"All Files (*.*)"));
309 if (filename.isNull())
return;
313 setlocale(LC_ALL,
"C");
317 file.open(filename.toStdString().c_str(), std::ios::in);
321 file.seekg(0L, std::ios::beg);
325 std::getline(file, buffer);
335 std::stringstream label;
337 m_Controls->m_NextMeasurement->setText(label.str().c_str());
354 if (
m_Controls->m_UseReferenceTrackingSystem->isChecked())
357 QString Label =
"Current Positions: ";
358 bool distanceThresholdExceeded =
false;
362 Label = Label +
"Tool" + QString::number(i) +
":[" + QString::number(position[0]) +
":" + QString::number(position[1]) +
":" + QString::number(position[1]) +
"] ";
365 m_Controls->m_ReferenceCurrentPos->setText(Label);
366 if (distanceThresholdExceeded)
368 m_Controls->m_ReferenceOK->setText(
"<html><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:28pt; font-weight:400; font-style:normal;\">NOT OK!</body></html>");
373 m_Controls->m_ReferenceOK->setText(
"<html><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:28pt; font-weight:400; font-style:normal;\">OK</body></html>");
393 if (
m_Controls->m_UseReferenceTrackingSystem->isChecked() &&
407 QString loggingLabel =
"Collected Samples: " + QString::number(
m_loggedFrames);
408 m_Controls->m_CollectedSamples->setText(loggingLabel);
424 Poco::File myPath(std::string(
m_Controls->m_OutputPath->text().toUtf8()).c_str());
425 if (!myPath.exists()) myPath.createDirectory();
428 mitk::LogBackend::Unregister();
429 mitk::LogBackend::SetLogFile(LogFileName.toStdString());
430 mitk::LogBackend::Register();
446 if (
m_Controls->m_UseReferenceTrackingSystem->isChecked())
480 if (
m_Controls->m_UseReferenceTrackingSystem->isChecked())
490 std::stringstream label;
493 m_Controls->m_NextMeasurement->setText(label.str().c_str());
496 std::stringstream label2;
498 m_Controls->m_LastMeasurement->setText(label2.str().c_str());
512 msgBox.setText(s.c_str());
519 m_Controls->m_StartNextMeasurement->setEnabled(
false);
520 m_Controls->m_ReapeatLastMeasurement->setEnabled(
false);
521 m_Controls->m_SamplingRate->setEnabled(
false);
522 m_Controls->m_SamplesPerMeasurement->setEnabled(
false);
523 m_Controls->m_ReferenceThreshold->setEnabled(
false);
529 m_Controls->m_StartNextMeasurement->setEnabled(
true);
530 m_Controls->m_ReapeatLastMeasurement->setEnabled(
true);
532 m_Controls->m_SamplesPerMeasurement->setEnabled(
true);
533 m_Controls->m_ReferenceThreshold->setEnabled(
true);
542 if (
m_Controls->m_UseReferenceTrackingSystem->isChecked())
551 MITK_INFO <<
"Evaluated " <<
m_EvaluationFilter->GetNumberOfAnalysedNavigationData(0) <<
" samples.";
553 MITK_INFO <<
"RMS: " << rms;
554 MITK_INFO <<
"Position Mean: " << positionMean;
567 QString header =
"Nr;MITK_Time;Valid_Reference;";
569 header = header + tool +
"[x];" + tool +
"[y];" + tool +
"[z];" + tool +
"[qx];" + tool +
"[qy];" + tool +
"[qz];" + tool +
"[qr]\n";
572 m_logFileCSV.open(std::string(
m_Controls->m_OutputPath->text().toUtf8()).append(
"/LogFileCombined").append(filePostfix.c_str()).append(
".csv").c_str(), std::ios::out);
580 std::string valid =
"";
582 else valid =
"false";
583 std::stringstream timestamp;
585 QString dataSet = QString::number(
m_loggedFrames) +
";" + QString(timestamp.str().c_str()) +
";" + QString(valid.c_str()) +
";" + QString::number(pos[0]) +
";" + QString::number(pos[1]) +
";" + QString::number(pos[2]) +
";" + QString::number(rot.x()) +
";" + QString::number(rot.y()) +
";" + QString::number(rot.z()) +
";" + QString::number(rot.r()) +
"\n";
596 if (ev->type() == QEvent::KeyPress)
598 QKeyEvent *k = (QKeyEvent *)ev;
599 bool down = k->key() == 16777239;
mitk::NavigationDataRecorderDeprecated::Pointer m_MeasurementLoggingFilterCSV
void OnMeasurementLoadFile()
mitk::NavigationDataRecorderDeprecated::Pointer m_ReferenceLoggingFilterXML
mitk::NavigationDataEvaluationFilter::Pointer m_EvaluationFilter
std::vector< std::string > m_FilenameVector
void StopLoggingAdditionalCSVFile()
std::vector< mitk::Point3D > m_ReferenceStartPositions
void OnUseReferenceToggled(bool state)
mitk::NavigationDataObjectVisualizationFilter::Pointer m_MeasurementToolVisualizationFilter
std::fstream m_logFileCSV
mitk::TrackingDeviceSource::Pointer m_MeasurementTrackingDeviceSource
mitk::TrackingDeviceSource::Pointer m_ReferenceTrackingDeviceSource
mitk::NavigationToolStorage::Pointer ReadStorage(std::string file)
~QmitkIGTTrackingSemiAutomaticMeasurementView() override
void OnLoadMeasurementStorage()
std::vector< double > m_RMSValues
mitk::PointSet::Pointer m_MeanPoints
Ui::QmitkIGTTrackingSemiAutomaticMeasurementViewControls * m_Controls
mitk::NavigationToolStorage::Pointer m_MeasurementStorage
static const std::string VIEW_ID
void RepeatLastMeasurement()
void OnLoadReferenceStorage()
mitk::NavigationDataRecorderDeprecated::Pointer m_ReferenceLoggingFilterCSV
void StartNextMeasurement()
mitk::NavigationToolStorage::Pointer m_ReferenceStorage
void MessageBox(std::string s)
bool eventFilter(QObject *obj, QEvent *ev) override
void CreateQtPartControl(QWidget *parent) override
void LogAdditionalCSVFile()
QmitkIGTTrackingSemiAutomaticMeasurementView()
mitk::NavigationDataRecorderDeprecated::Pointer m_MeasurementLoggingFilterXML
void StartLoggingAdditionalCSVFile(std::string filePostfix)
static bool Evaluate5cmDistances(mitk::PointSet::Pointer p, HummelProtocolMeasurementVolume m, std::vector< HummelProtocolDistanceError > &Results)