MNE-CPP  0.1.9
A Framework for Electrophysiology
coregsettingsview.cpp
Go to the documentation of this file.
1 //=============================================================================================================
35 # define M_PI 3.14159265358979323846 /* pi */
36 
37 //=============================================================================================================
38 // INCLUDES
39 //=============================================================================================================
40 
41 #include "coregsettingsview.h"
42 #include "ui_coregsettingsview.h"
43 
44 #include <fiff/fiff_stream.h>
45 #include <fiff/fiff_coord_trans.h>
46 
47 #include <iostream>
48 
49 //=============================================================================================================
50 // QT INCLUDES
51 //=============================================================================================================
52 
53 #include <QSettings>
54 #include <QDebug>
55 #include <QFileInfo>
56 #include <QFileDialog>
57 #include <QMessageBox>
58 #include <QVector3D>
59 
60 //=============================================================================================================
61 // EIGEN INCLUDES
62 //=============================================================================================================
63 
64 #include <Eigen/Core>
65 #include <Eigen/Geometry>
66 
67 //=============================================================================================================
68 // USED NAMESPACES
69 //=============================================================================================================
70 
71 using namespace DISPLIB;
72 using namespace Eigen;
73 
74 //=============================================================================================================
75 // DEFINE GLOBAL METHODS
76 //=============================================================================================================
77 
78 //=============================================================================================================
79 // DEFINE MEMBER METHODS
80 //=============================================================================================================
81 
82 CoregSettingsView::CoregSettingsView(const QString& sSettingsPath,
83  QWidget *parent,
84  Qt::WindowFlags f)
85 : AbstractView(parent, f)
86 , m_pUi(new Ui::CoregSettingsViewWidget)
87 {
88  m_sSettingsPath = sSettingsPath;
89  m_pUi->setupUi(this);
90 
91  loadSettings();
92 
93  // Connect File loading and saving
94  connect(m_pUi->m_qPushButton_LoadFid, &QPushButton::released,
95  this, &CoregSettingsView::onLoadFidFile);
96  connect(m_pUi->m_qPushButton_StoreFid, &QPushButton::released,
97  this, &CoregSettingsView::onStoreFidFile);
98  connect(m_pUi->m_qPushButton_LoadDig, &QPushButton::released,
99  this, &CoregSettingsView::onLoadDigFile);
100  connect(m_pUi->m_qPushButton_LoadTrans, &QPushButton::released,
101  this, &CoregSettingsView::onLoadTrans);
102  connect(m_pUi->m_qPushButton_StoreTrans, &QPushButton::released,
103  this, &CoregSettingsView::onStoreTrans);
104  connect(m_pUi->m_qComboBox_BemItems, &QComboBox::currentTextChanged,
105  this, &CoregSettingsView::changeSelectedBem, Qt::UniqueConnection);
106 
107  connect(m_pUi->m_qComboBox_BemItems, &QComboBox::currentTextChanged,
108  this, &CoregSettingsView::changeSelectedBem, Qt::UniqueConnection);
109  connect(m_pUi->m_qComboBox_BemItems, &QComboBox::currentTextChanged,
110  this, &CoregSettingsView::changeSelectedBem, Qt::UniqueConnection);
111 
112 
113  // Connect Fiducial Pickings
114  connect(m_pUi->m_qCheckBox_PickFiducials, &QCheckBox::stateChanged,
115  this, &CoregSettingsView::onPickingStatus);
116  connect(m_pUi->m_qRadioButton_LPA, &QCheckBox::toggled,
117  this, &CoregSettingsView::onFiducialChanged);
118  connect(m_pUi->m_qRadioButton_NAS, &QCheckBox::toggled,
119  this, &CoregSettingsView::onFiducialChanged);
120  connect(m_pUi->m_qRadioButton_RPA, &QCheckBox::toggled,
121  this, &CoregSettingsView::onFiducialChanged);
122  onPickingStatus();
123 
124  // connect icp settings
125  connect(m_pUi->m_qPushButton_FitFiducials, &QPushButton::released,
126  this, &CoregSettingsView::onFitFiducials);
127  connect(m_pUi->m_qPushButton_FitICP, &QPushButton::released,
128  this, &CoregSettingsView::onFitICP);
129 
130  // connect adjustment settings
131  connect(m_pUi->m_qDoubleSpinBox_ScalingX, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
133  connect(m_pUi->m_qDoubleSpinBox_ScalingY, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
135  connect(m_pUi->m_qDoubleSpinBox_ScalingZ, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
137  connect(m_pUi->m_qDoubleSpinBox_RotX, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
139  connect(m_pUi->m_qDoubleSpinBox_RotY, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
141  connect(m_pUi->m_qDoubleSpinBox_RotZ, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
143  connect(m_pUi->m_qDoubleSpinBox_TransX, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
145  connect(m_pUi->m_qDoubleSpinBox_TransY, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
147  connect(m_pUi->m_qDoubleSpinBox_TransZ, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
149  connect(m_pUi->m_qComboBox_ScalingMode, &QComboBox::currentTextChanged,
150  this, &CoregSettingsView::onScalingModeChanges, Qt::UniqueConnection);
151  onScalingModeChanges();
152 
153  // set button infos
154  setToolTipInfo();
155 }
156 
157 //=============================================================================================================
158 
159 CoregSettingsView::~CoregSettingsView()
160 {
161  saveSettings();
162  delete m_pUi;
163 }
164 
165 //=============================================================================================================
166 
168 {
169  if(m_sSettingsPath.isEmpty()) {
170  return;
171  }
172 
173  // Save Settings
174  QSettings settings("MNECPP");
175 
176 }
177 
178 //=============================================================================================================
179 
181 {
182  if(m_sSettingsPath.isEmpty()) {
183  return;
184  }
185 
186  // Load Settings
187  QSettings settings("MNECPP");
188 
189 }
190 
191 //=============================================================================================================
192 
194 {
195  switch(mode) {
196  case GuiMode::Clinical:
197  break;
198  default: // default is research mode
199  break;
200  }
201 }
202 
203 //=============================================================================================================
204 
206 {
207  switch(mode) {
208  case ProcessingMode::Offline:
209  break;
210  default: // default is realtime mode
211  break;
212  }
213 }
214 
215 //=============================================================================================================
216 
217 void CoregSettingsView::setToolTipInfo()
218 {
219  m_pUi->m_qComboBox_BemItems->setToolTip("Select the Bem to use for coregistration. Load the Bem via: File->Open");
220  m_pUi->m_qPushButton_LoadFid->setToolTip("Optional. Load the fiducials from file.");
221  m_pUi->m_qPushButton_StoreFid->setToolTip("Store the fiducials to file.");
222  m_pUi->m_qPushButton_LoadDig->setToolTip("Load the digitizers from file.");
223  m_pUi->m_qPushButton_LoadTrans->setToolTip("Optional. Load the coordinate transformation from file.");
224  m_pUi->m_qPushButton_StoreTrans->setToolTip("Store the coordinate transformation to file.");
225 
226  m_pUi->m_qDoubleSpinBox_WeightRpa->setToolTip("The weight for the RPA.");
227  m_pUi->m_qDoubleSpinBox_WeightLpa->setToolTip("The weight for the LPA.");
228  m_pUi->m_qDoubleSpinBox_WeightNas->setToolTip("The weight for the Nasion.");
229  m_pUi->m_qDoubleSpinBox_WeightEEG->setToolTip("The weight for the EEG points.");
230  m_pUi->m_qDoubleSpinBox_WeightHPI->setToolTip("The weight for the HPI points.");
231  m_pUi->m_qDoubleSpinBox_WeightHSP->setToolTip("The weight for the HSP points. HSP = Head Shape Points");
232  m_pUi->m_qCheckBox_HSP->setToolTip("Wheater to use the HSP points for the Coregistration. HSP = Head Shape Points");
233  m_pUi->m_qCheckBox_EEG->setToolTip("Wheater to use the EEG points for the Coregistration.");
234  m_pUi->m_qCheckBox_HPI->setToolTip("Wheater to use the HPI points for the Coregistration.");
235  m_pUi->m_qSpinBox_MaxDist->setToolTip("The maximum allowed distace between head surface and digitizer cloud. This is used to discard outliers.");
236 
237  m_pUi->m_qCheckBox_AutoScale->setToolTip("Wheater to use automatic scaling for the fiducial alignment.");
238  m_pUi->m_qDoubleSpinBox_Converge->setToolTip("The convergence limit for the ICP algorithm.");
239  m_pUi->m_qSpinBox_MaxIter->setToolTip("The maximum number of iterations for the ICP algorithm.");
240  m_pUi->m_qPushButton_FitFiducials->setToolTip("Fiducial alignment. Apply this step before using the ICP algorithm to get a better first guess.");
241  m_pUi->m_qPushButton_FitICP->setToolTip("Co-Registration with the ICP algorithm.");
242  m_pUi->m_qLabel_RMSE->setToolTip("The Root-Mean-Square-Error of the distance between closest point and digigizer in mm");
243  m_pUi->m_qComboBox_ScalingMode->setToolTip("The scaling Mode. None - No scaling is applied; Uniform - same scaling for x,y,z-axis; 3-Axis - scaling on each axis.");
244  m_pUi->m_qDoubleSpinBox_ScalingX->setToolTip("Scaling to apply in x-direction.");
245  m_pUi->m_qDoubleSpinBox_ScalingY->setToolTip("Scaling to apply in y-direction.");
246  m_pUi->m_qDoubleSpinBox_ScalingZ->setToolTip("Scaling to apply in z-direction.");
247 
248  m_pUi->m_qDoubleSpinBox_RotX->setToolTip("Rotation arround x-axis.");
249  m_pUi->m_qDoubleSpinBox_RotY->setToolTip("Rotation arround y-axis.");
250  m_pUi->m_qDoubleSpinBox_RotZ->setToolTip("Rotation arround z-axis.");
251 
252  m_pUi->m_qDoubleSpinBox_TransX->setToolTip("Translation to apply in x-direction.");
253  m_pUi->m_qDoubleSpinBox_TransY->setToolTip("Translation to apply in y-direction.");
254  m_pUi->m_qDoubleSpinBox_TransZ->setToolTip("Translation to apply in z-direction.");
255 
256 }
257 
258 //=============================================================================================================
259 
260 void CoregSettingsView::onLoadFidFile()
261 {
262  QString sFileName = QFileDialog::getOpenFileName(this,
263  tr("Select fiducials"),
264  QString(),
265  tr("Fif Files (*.fif)"));
266 
267  if (sFileName.isEmpty()) {
268  return;
269  } else {
270  emit fidFileChanged(sFileName);
271  }
272 }
273 
274 //=============================================================================================================
275 
276 void CoregSettingsView::onPickingStatus()
277 {
278  bool bState = m_pUi->m_qCheckBox_PickFiducials->isChecked();
279  if(bState) {
280  m_pUi->m_qWidget_ResultFiducials->setEnabled(true);
281  emit pickFiducials(true);
282  } else {
283  m_pUi->m_qWidget_ResultFiducials->setEnabled(false);
284  emit pickFiducials(false);
285  }
286  return;
287 }
288 
289 //=============================================================================================================
290 
291 void CoregSettingsView::setFiducials(const QVector3D vecPosition)
292 {
293  QVector3D vecTemp;
294  // store incoming vector
295  if(m_pUi->m_qRadioButton_LPA->isChecked()) {
296  m_vecLPA = vecPosition;
297 
298  // step to next fiducial
299  m_pUi->m_qRadioButton_NAS->setChecked(true);
300  vecTemp = m_vecNAS;
301  onFiducialChanged();
302  } else if (m_pUi->m_qRadioButton_NAS->isChecked()) {
303  m_vecNAS = vecPosition;
304 
305  // step to next fiducial
306  m_pUi->m_qRadioButton_RPA->setChecked(true);
307  vecTemp = m_vecRPA;
308  onFiducialChanged();
309  } else {
310  m_vecRPA = vecPosition;
311 
312  // step to next fiducial
313  m_pUi->m_qRadioButton_LPA->setChecked(true);
314  vecTemp = m_vecLPA;
315  onFiducialChanged();
316  }
317 
318  // floor(vecAxialPosition[0]*100)/100 makes sure to only take 2 decimal positions
319  m_pUi->m_qLineEdit_FidX->setText(QString::number(floor(vecTemp[0]*100)/100 * 1000) + " mm" );
320  m_pUi->m_qLineEdit_FidY->setText(QString::number(floor(vecTemp[1]*100)/100 * 1000) + " mm" );
321  m_pUi->m_qLineEdit_FidZ->setText(QString::number(floor(vecTemp[2]*100)/100 * 1000) + " mm" );
322  return;
323 }
324 
325 //=============================================================================================================
326 
327 void CoregSettingsView::onFiducialChanged()
328 {
329  QVector3D vecTemp;
330  if(m_pUi->m_qRadioButton_LPA->isChecked()) {
331  vecTemp = m_vecLPA;
332  emit fiducialChanged(FIFFV_POINT_LPA);
333  } else if (m_pUi->m_qRadioButton_NAS->isChecked()) {
334  vecTemp = m_vecNAS;
335  emit fiducialChanged(FIFFV_POINT_NASION);
336  } else {
337  vecTemp = m_vecRPA;
338  emit fiducialChanged(FIFFV_POINT_RPA);
339  }
340 
341  // floor(vecAxialPosition[0]*100)/100 makes sure to only take 2 decimal positions
342  m_pUi->m_qLineEdit_FidX->setText(QString::number(floor(vecTemp[0]*100)/100 * 1000) + " mm" );
343  m_pUi->m_qLineEdit_FidY->setText(QString::number(floor(vecTemp[1]*100)/100 * 1000) + " mm" );
344  m_pUi->m_qLineEdit_FidZ->setText(QString::number(floor(vecTemp[2]*100)/100 * 1000) + " mm" );
345  return;
346 }
347 
348 //=============================================================================================================
349 
350 void CoregSettingsView::onStoreFidFile()
351 {
352  QString sFileName = QFileDialog::getSaveFileName(Q_NULLPTR,
353  tr("Save Fiducials"), "",
354  tr("Fif file (*fiducials.fif)"));
355 
356  if (sFileName.isEmpty()) {
357  return;
358  } else {
359  emit fidStoreFileChanged(sFileName);
360  }
361 }
362 
363 //=============================================================================================================
364 
365 void CoregSettingsView::onLoadDigFile()
366 {
367  QString sFileName = QFileDialog::getOpenFileName(this,
368  tr("Select digitizer file"),
369  QString(),
370  tr("Fif Files (*.fif)"));
371 
372  if (sFileName.isEmpty()) {
373  return;
374  } else {
375  emit digFileChanged(sFileName);
376  }
377 }
378 
379 //=============================================================================================================
380 
381 void CoregSettingsView::onLoadTrans()
382 {
383  QString sFileName = QFileDialog::getOpenFileName(this,
384  tr("Select Transformation"),
385  QString(),
386  tr("Fif Files (*-trans.fif)"));
387 
388  if (sFileName.isEmpty()) {
389  return;
390  } else {
391  emit loadTrans(sFileName);
392  }
393 }
394 
395 //=============================================================================================================
396 
397 void CoregSettingsView::onStoreTrans()
398 {
399  QString sFileName = QFileDialog::getSaveFileName(Q_NULLPTR,
400  tr("Save Transformation"), "",
401  tr("Fif file (*-trans.fif)"));
402 
403  if (sFileName.isEmpty()) {
404  return;
405  } else{
406  emit storeTrans(sFileName);
407  }
408 }
409 
410 //=============================================================================================================
411 
413 {
414  // choose to use other points as well
415  if(m_pUi->m_qRadioButton_LPA->isChecked()) {
416  return FIFFV_POINT_LPA;
417  } else if(m_pUi->m_qRadioButton_NAS->isChecked()) {
418  return FIFFV_POINT_NASION;
419  } else if(m_pUi->m_qRadioButton_RPA->isChecked()) {
420  return FIFFV_POINT_RPA;
421  };
422  return -1;
423 }
424 
425 //=============================================================================================================
426 
428 {
429  return m_pUi->m_qSpinBox_MaxIter->value();
430 }
431 
432 //=============================================================================================================
433 
435 {
436  return m_pUi->m_qDoubleSpinBox_Converge->value()/1000;
437 }
438 
439 //=============================================================================================================
440 
442 {
443  return m_pUi->m_qCheckBox_AutoScale->isChecked();
444 }
445 
446 //=============================================================================================================
447 
449 {
450  return m_pUi->m_qDoubleSpinBox_WeightLpa->text().toFloat();
451 }
452 
453 //=============================================================================================================
454 
455 float CoregSettingsView::getWeightRPA()
456 {
457  return m_pUi->m_qDoubleSpinBox_WeightRpa->text().toFloat();
458 }
459 
460 //=============================================================================================================
461 
462 float CoregSettingsView::getWeightNAS()
463 {
464  return m_pUi->m_qDoubleSpinBox_WeightNas->text().toFloat();
465 }
466 
467 //=============================================================================================================
468 
469 float CoregSettingsView::getWeightEEG()
470 {
471  return m_pUi->m_qDoubleSpinBox_WeightEEG->text().toFloat();
472 }
473 
474 //=============================================================================================================
475 
476 float CoregSettingsView::getWeightHPI()
477 {
478  return m_pUi->m_qDoubleSpinBox_WeightHPI->text().toFloat();
479 }
480 
481 //=============================================================================================================
482 
483 float CoregSettingsView::getWeightHSP()
484 {
485  return m_pUi->m_qDoubleSpinBox_WeightHSP->text().toFloat();
486 }
487 
488 //=============================================================================================================
489 
491 {
492  return static_cast<float>(m_pUi->m_qSpinBox_MaxDist->value())/1000.0;
493 }
494 
495 //=============================================================================================================
496 
498 {
499  // always use cardinal points
500  QList<int> lPicks({FIFFV_POINT_CARDINAL});
501 
502  // choose to use other points as well
503  if(m_pUi->m_qCheckBox_EEG) {
504  lPicks << FIFFV_POINT_EEG;
505  }
506  if(m_pUi->m_qCheckBox_HPI) {
507  lPicks << FIFFV_POINT_HPI;
508  }
509  if(m_pUi->m_qCheckBox_HSP) {
510  lPicks << FIFFV_POINT_EXTRA;
511  }
512  return lPicks;
513 }
514 
515 //=============================================================================================================
516 
518 {
519  // block to avoid action loop
520  QSignalBlocker blockerComboBox(m_pUi->m_qComboBox_BemItems);
521  m_pUi->m_qComboBox_BemItems->clear();
522 }
523 
524 //=============================================================================================================
525 
526 void CoregSettingsView::addSelectionBem(const QString& sBemName)
527 {
528  m_pUi->m_qComboBox_BemItems->addItem(sBemName);
529 }
530 
531 //=============================================================================================================
532 
534 {
535  return m_pUi->m_qComboBox_BemItems->currentText();
536 }
537 
538 //=============================================================================================================
539 
541 {
542  m_pUi->m_qLabel_NOmitted->setText(QString::number(iN));
543 }
544 
545 //=============================================================================================================
546 
547 void CoregSettingsView::setRMSE(const float fRMSE)
548 {
549  m_pUi->m_qLabel_RMSE->setText(QString::number(fRMSE*1000) + " mm");
550 }
551 
552 //=============================================================================================================
553 
554 void CoregSettingsView::setTransParams(const Vector3f& vecTrans,
555  const Vector3f& vecRot,
556  const Vector3f& vecScale)
557 {
558  // block signals to avoid action loop
559  QSignalBlocker blockerTransX(m_pUi->m_qDoubleSpinBox_TransX);
560  QSignalBlocker blockerTransY(m_pUi->m_qDoubleSpinBox_TransY);
561  QSignalBlocker blockerTransZ(m_pUi->m_qDoubleSpinBox_TransZ);
562  QSignalBlocker blockerRotX(m_pUi->m_qDoubleSpinBox_RotX);
563  QSignalBlocker blockerRotY(m_pUi->m_qDoubleSpinBox_RotY);
564  QSignalBlocker blockerRotZ(m_pUi->m_qDoubleSpinBox_RotZ);
565  QSignalBlocker blockerScaleX(m_pUi->m_qDoubleSpinBox_ScalingX);
566  QSignalBlocker blockerScaleY(m_pUi->m_qDoubleSpinBox_ScalingY);
567  QSignalBlocker blockerScaleZ(m_pUi->m_qDoubleSpinBox_ScalingZ);
568 
569  m_pUi->m_qDoubleSpinBox_TransX->setValue(vecTrans(0)*1000);
570  m_pUi->m_qDoubleSpinBox_TransY->setValue(vecTrans(1)*1000);
571  m_pUi->m_qDoubleSpinBox_TransZ->setValue(vecTrans(2)*1000);
572 
573  // Inverted order due to euler rotation
574  m_pUi->m_qDoubleSpinBox_RotX->setValue(vecRot(2)*180/M_PI);
575  m_pUi->m_qDoubleSpinBox_RotY->setValue(vecRot(1)*180/M_PI);
576  m_pUi->m_qDoubleSpinBox_RotZ->setValue(vecRot(0)*180/M_PI);
577 
578  m_pUi->m_qDoubleSpinBox_ScalingX->setValue(vecScale(2));
579  m_pUi->m_qDoubleSpinBox_ScalingY->setValue(vecScale(1));
580  m_pUi->m_qDoubleSpinBox_ScalingZ->setValue(vecScale(0));
581 }
582 
583 //=============================================================================================================
584 
585 void CoregSettingsView::getTransParams(Vector3f& vecRot,
586  Vector3f& vecTrans,
587  Vector3f& vecScale)
588 {
589  vecTrans(0) = m_pUi->m_qDoubleSpinBox_TransX->value()/1000.0;
590  vecTrans(1) = m_pUi->m_qDoubleSpinBox_TransY->value()/1000.0;
591  vecTrans(2) = m_pUi->m_qDoubleSpinBox_TransZ->value()/1000.0;
592 
593  // Inverted order due to euler rotation
594  vecRot(2) = m_pUi->m_qDoubleSpinBox_RotX->value() * M_PI/180.0;
595  vecRot(1) = m_pUi->m_qDoubleSpinBox_RotY->value() * M_PI/180.0;
596  vecRot(0) = m_pUi->m_qDoubleSpinBox_RotZ->value() * M_PI/180.0;
597 
598  // apply different scaling modes
599  if (m_pUi->m_qComboBox_ScalingMode->currentText() == "Uniform") {
600  vecScale.fill(m_pUi->m_qDoubleSpinBox_ScalingX->value());
601  } else if (m_pUi->m_qComboBox_ScalingMode->currentText() == "3-Axis") {
602  vecScale(0) = m_pUi->m_qDoubleSpinBox_ScalingX->value();
603  vecScale(1) = m_pUi->m_qDoubleSpinBox_ScalingY->value();
604  vecScale(2) = m_pUi->m_qDoubleSpinBox_ScalingZ->value();
605  } else {
606  vecScale.fill(1);
607  }
608 
609  return;
610 }
611 
612 //=============================================================================================================
613 
614 void CoregSettingsView::onScalingModeChanges()
615 {
616  // apply different scaling modes
617  if (m_pUi->m_qComboBox_ScalingMode->currentText() == "Uniform") {
618  m_pUi->m_qDoubleSpinBox_ScalingX->setEnabled(true);
619  m_pUi->m_qDoubleSpinBox_ScalingY->setEnabled(false);
620  m_pUi->m_qDoubleSpinBox_ScalingZ->setEnabled(false);
621  } else if (m_pUi->m_qComboBox_ScalingMode->currentText() == "3-Axis") {
622  m_pUi->m_qDoubleSpinBox_ScalingX->setEnabled(true);
623  m_pUi->m_qDoubleSpinBox_ScalingY->setEnabled(true);
624  m_pUi->m_qDoubleSpinBox_ScalingZ->setEnabled(true);
625  } else {
626  m_pUi->m_qDoubleSpinBox_ScalingX->setEnabled(false);
627  m_pUi->m_qDoubleSpinBox_ScalingY->setEnabled(false);
628  m_pUi->m_qDoubleSpinBox_ScalingZ->setEnabled(false);
629  }
630  return;
631 }
632 
633 //=============================================================================================================
634 
635 void CoregSettingsView::onFitFiducials()
636 {
637  m_pUi->m_qCheckBox_PickFiducials->setChecked(false);
638  emit fitFiducials();
639 }
640 
641 //=============================================================================================================
642 
643 void CoregSettingsView::onFitICP()
644 {
645  m_pUi->m_qCheckBox_PickFiducials->setChecked(false);
646  emit fitICP();
647 }
648 
649 //=============================================================================================================
650 
652 {
653 
654 }
FiffCoordTrans class declaration.
FiffStream class declaration.
void getTransParams(Eigen::Vector3f &vecRot, Eigen::Vector3f &vecTrans, Eigen::Vector3f &vecScale)
void fiducialChanged(const int iFiducial)
CoregSettingsView(const QString &sSettingsPath="", QWidget *parent=0, Qt::WindowFlags f=Qt::Widget)
void loadTrans(const QString &sFilePath)
void addSelectionBem(const QString &sBemName)
Definition: applytoview.h:58
void pickFiducials(bool bActivatePicking)
void updateProcessingMode(ProcessingMode mode)
void changeSelectedBem(const QString &sText)
CoregSettingsView class declaration.
void fidStoreFileChanged(const QString &sFilePath)
void updateGuiMode(GuiMode mode)
void fidFileChanged(const QString &sFilePath)
void storeTrans(const QString &sFilePath)
void setFiducials(const QVector3D vecAxialPosition)
void setTransParams(const Eigen::Vector3f &vecTrans, const Eigen::Vector3f &vecRot, const Eigen::Vector3f &vecScale)
void setOmittedPoints(const int iN)
void digFileChanged(const QString &sFilePath)
void setRMSE(const float fRMSE)
The AbstractView class provides the base calss for all Disp viewers.
Definition: abstractview.h:75