13 #define _USE_MATH_DEFINES 17 #include <QMessageBox> 21 #include <QGridLayout> 23 #include <QFileDialog> 29 #pragma GCC visibility push(default) 30 #include <itkEventObject.h> 31 #pragma GCC visibility pop 32 #include <itksys/SystemTools.hxx> 34 struct QFileDialogArgs;
35 class QFileDialogPrivate;
58 this->
m_Controls =
new Ui::QmitkToFRecorderWidgetControls;
68 connect( (QObject*)(
m_Controls->m_PlayButton), SIGNAL(clicked()),(QObject*)
this, SLOT(
OnPlay()) );
69 connect( (QObject*)(
m_Controls->m_StopButton), SIGNAL(clicked()),(QObject*)
this, SLOT(
OnStop()) );
90 m_Controls->m_StartRecordingButton->setChecked(
false);
91 m_Controls->m_RecorderGroupBox->setEnabled(
true);
103 m_Controls->m_RecorderGroupBox->setEnabled(
false);
108 m_Controls->m_StartRecordingButton->setChecked(
false);
109 m_Controls->m_RecorderGroupBox->setEnabled(
true);
126 m_Controls->m_RecorderGroupBox->setEnabled(
true);
158 m_Controls->m_StartRecordingButton->setChecked(
true);
159 m_Controls->m_RecorderGroupBox->setEnabled(
false);
162 int numOfFrames =
m_Controls->m_NumOfFramesSpinBox->value();
166 bool distanceImageSelected =
true;
167 bool amplitudeImageSelected =
false;
168 bool intensityImageSelected =
false;
169 bool rgbImageSelected =
false;
170 bool rawDataSelected =
false;
173 m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty(
"HasAmplitudeImage",amplitudeImageSelected);
174 m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty(
"HasIntensityImage",intensityImageSelected);
175 m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty(
"HasRGBImage",rgbImageSelected);
177 QString tmpFileName(
"");
178 QString selectedFilter(
"");
179 QString imageFileName(
"");
182 distanceImageSelected, amplitudeImageSelected, intensityImageSelected, rgbImageSelected, rawDataSelected,
183 nullptr,
"Save Image To...", imageFileName,
"NRRD Images (*.nrrd);;PIC Images - deprecated (*.pic);;Text (*.csv)", &selectedFilter);
185 if (tmpFileName.isEmpty())
191 imageFileName = tmpFileName;
196 std::string dir = itksys::SystemTools::GetFilenamePath( imageFileName.toStdString() );
197 std::string baseFilename = itksys::SystemTools::GetFilenameWithoutLastExtension( imageFileName.toStdString() );
198 std::string extension = itksys::SystemTools::GetFilenameLastExtension( imageFileName.toStdString() );
203 QString integrationTimeStr;
204 integrationTimeStr.setNum(integrationTime);
205 QString modulationFreqStr;
206 modulationFreqStr.setNum(modulationFreq);
207 QString numOfFramesStr(
"");
210 numOfFramesStr.setNum(numOfFrames);
213 std::string distImageFileName =
prepareFilename(dir, baseFilename, modulationFreqStr.toStdString(),
214 integrationTimeStr.toStdString(), numOfFramesStr.toStdString(), extension,
"_DistanceImage");
215 MITK_INFO <<
"Save distance data to: " << distImageFileName;
217 std::string amplImageFileName =
prepareFilename(dir, baseFilename, modulationFreqStr.toStdString(),
218 integrationTimeStr.toStdString(), numOfFramesStr.toStdString(), extension,
"_AmplitudeImage");
219 MITK_INFO <<
"Save amplitude data to: " << amplImageFileName;
221 std::string intenImageFileName =
prepareFilename(dir, baseFilename, modulationFreqStr.toStdString(),
222 integrationTimeStr.toStdString(), numOfFramesStr.toStdString(), extension,
"_IntensityImage");
223 MITK_INFO <<
"Save intensity data to: " << intenImageFileName;
225 std::string rgbImageFileName =
prepareFilename(dir, baseFilename, modulationFreqStr.toStdString(),
226 integrationTimeStr.toStdString(), numOfFramesStr.toStdString(), extension,
"_RGBImage");
227 MITK_INFO <<
"Save intensity data to: " << rgbImageFileName;
229 if (selectedFilter.compare(
"Text (*.csv)") == 0)
233 else if (selectedFilter.compare(
"PIC Images - deprecated (*.pic)") == 0)
238 QMessageBox::warning(
nullptr,
"Deprecated File Format!",
239 "Please note that *.pic file format is deprecated and not longer supported! The suggested file format for images is *.nrrd!");
241 else if (selectedFilter.compare(
"NRRD Images (*.nrrd)") == 0)
247 QMessageBox::warning(
nullptr,
"Unsupported file format!",
"Please specify one of the supported file formats *.nrrd, *.csv!");
251 numOfFrames =
m_Controls->m_NumOfFramesSpinBox->value();
272 catch(std::exception& e)
274 QMessageBox::critical(
nullptr,
"Error", QString(e.what()));
280 bool& distanceImageSelected,
281 bool& amplitudeImageSelected,
282 bool& intensityImageSelected,
283 bool& rgbImageSelected,
284 bool& rawDataSelected,
286 const QString &caption,
288 const QString &filter,
289 QString *selectedFilter,
293 QString selectedFileName =
"";
294 QComboBox* combo =
new QComboBox;
295 combo->addItem(
"3D");
296 combo->addItem(
"2D + t");
298 QHBoxLayout* checkBoxGroup =
new QHBoxLayout();
300 QCheckBox* distanceImageCheckBox =
new QCheckBox;
301 distanceImageCheckBox->setText(
"Distance image");
302 distanceImageCheckBox->setChecked(distanceImageSelected);
304 QCheckBox* amplitudeImageCheckBox =
new QCheckBox;
305 amplitudeImageCheckBox->setText(
"Amplitude image");
306 amplitudeImageCheckBox->setChecked(amplitudeImageSelected);
307 amplitudeImageCheckBox->setEnabled(amplitudeImageSelected);
308 if(!amplitudeImageSelected)
309 amplitudeImageCheckBox->setToolTip(QString(
"This device does not provide amplitude data."));
311 QCheckBox* intensityImageCheckBox =
new QCheckBox;
312 intensityImageCheckBox->setText(
"Intensity image");
313 intensityImageCheckBox->setChecked(intensityImageSelected);
314 intensityImageCheckBox->setEnabled(intensityImageSelected);
315 if(!intensityImageSelected)
316 intensityImageCheckBox->setToolTip(QString(
"This device does not provide intensity data."));
318 QCheckBox* rgbImageCheckBox =
new QCheckBox;
319 rgbImageCheckBox->setText(
"RGB image");
320 rgbImageCheckBox->setChecked(rgbImageSelected);
321 rgbImageCheckBox->setEnabled(rgbImageSelected);
322 if(!rgbImageSelected)
323 rgbImageCheckBox->setToolTip(QString(
"This device does not provide RGB data."));
325 QCheckBox* rawDataCheckBox =
new QCheckBox;
326 rawDataCheckBox->setText(
"Raw data");
327 rawDataCheckBox->setChecked(
false);
328 rawDataCheckBox->setEnabled(
false);
330 checkBoxGroup->addWidget(distanceImageCheckBox);
331 checkBoxGroup->addWidget(amplitudeImageCheckBox);
332 checkBoxGroup->addWidget(intensityImageCheckBox);
333 checkBoxGroup->addWidget(rgbImageCheckBox);
334 checkBoxGroup->addWidget(rawDataCheckBox);
336 QFileDialog* fileDialog =
new QFileDialog(parent, caption, dir, filter);
338 QLayout* layout = fileDialog->layout();
339 QGridLayout* gridbox = qobject_cast<QGridLayout*>(layout);
343 gridbox->addWidget(
new QLabel(
"ToF-Image type:"));
344 gridbox->addWidget(combo);
345 int lastRow = gridbox->rowCount();
346 gridbox->addLayout(checkBoxGroup, lastRow, 0, 1, -1);
349 fileDialog->setLayout(gridbox);
350 fileDialog->setAcceptMode(QFileDialog::AcceptSave);
354 fileDialog->selectNameFilter(*selectedFilter);
357 if (fileDialog->exec() == QDialog::Accepted)
361 *selectedFilter = fileDialog->selectedNameFilter();
364 if (combo->currentIndex() == 0)
374 distanceImageSelected = distanceImageCheckBox->isChecked();
375 amplitudeImageSelected = amplitudeImageCheckBox->isChecked();
376 intensityImageSelected = intensityImageCheckBox->isChecked();
377 rgbImageSelected = rgbImageCheckBox->isChecked();
378 rawDataSelected = rawDataCheckBox->isChecked();
380 selectedFileName = fileDialog->selectedFiles().value(0);
384 return selectedFileName;
388 std::string baseFilename,
389 std::string modulationFreq,
390 std::string integrationTime,
391 std::string numOfFrames,
392 std::string extension,
393 std::string imageType)
395 std::string filenName(
"");
396 filenName.append(dir);
397 filenName.append(
"/");
398 filenName.append(baseFilename);
399 filenName.append(
"_MF");
400 filenName.append(modulationFreq);
401 filenName.append(
"_IT");
402 filenName.append(integrationTime);
403 filenName.append(
"_");
404 filenName.append(numOfFrames);
405 filenName.append(
"Images");
406 filenName.append(imageType);
407 filenName.append(extension);
416 m_Controls->m_NumOfFramesSpinBox->setEnabled(
true);
421 m_Controls->m_NumOfFramesSpinBox->setEnabled(
false);
Recorder class for ToF images.
Image source providing ToF images. Interface for filters provided in ToFProcessing module...