Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
QmitkToolDistanceWidget.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
14 
15 #include <QGridLayout>
16 #include <itkDataObject.h>
18 #include <cmath>
19 
20 
21 
22 
24 : QWidget(parent), m_Controls(nullptr), m_DistanceLabels(nullptr)
25 {
26  this->CreateQtPartControl( this );
27 }
28 
30 {
32  delete m_DistanceLabels;
33  m_DistanceLabels = nullptr;
34  m_Controls = nullptr;
35 }
36 
38 {
39  if (!m_Controls)
40  {
41  // create GUI widgets
42  m_Controls = new Ui::QmitkToolDistanceWidgetControls;
43  m_Controls->setupUi(parent);
44  m_Controls->m_StatusLabel->setText(QString("No tracking tools connected. Please set up a connection first."));
45 
46  this->CreateConnections();
47  }
48 }
49 
51 {
52 
53 }
54 
55 void QmitkToolDistanceWidget::CreateToolDistanceMatrix(itk::ProcessObject::DataObjectPointerArray & outputs)
56 {
57 
58  if(outputs.size() > 1)
59  {
60  this->show();
61 
62  mitk::NavigationData* navData;
63 
64 
65  if(m_DistanceLabels == nullptr)
66  {
67  m_DistanceLabels = new DistanceLabelType;
68  }
69 
70  if(m_DistanceLabels->isEmpty())
71  {
72  this->m_Controls->m_StatusLabel->setText("");
73 
74  QLabel* label;
75 
76 
77  // labeling of matrix
78  for (unsigned int i = 0; i < outputs.size()-1; i++)
79  {
80  navData = dynamic_cast<mitk::NavigationData*>(outputs.at(i).GetPointer());
81  label = new QLabel(navData->GetName(),this);
82  label->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
83  this->m_Controls->m_GridLayout->addWidget(label,i+1,0);
84 
85  navData = dynamic_cast<mitk::NavigationData*>(outputs.at(i+1).GetPointer());
86  label = new QLabel(navData->GetName(),this);
87  label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
88  this->m_Controls->m_GridLayout->addWidget(label,0,i+1);
89  }
90 
91 
92  for(unsigned int i = 0; i < outputs.size()-1; i++)
93  {
94  QVector<QLabel*>* rowDistances = new QVector<QLabel*>();
95 
96  for(unsigned int j = i+1; j < outputs.size(); j++)
97  {
98  // distance labels initializing
99  label = new QLabel(QString("---"), this);
100  label->setFrameStyle(QFrame::Box | QFrame::Sunken);
101  label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
102  rowDistances->append(label);
103 
104  //initial distance label adding to the QGridLayout
105  this->m_Controls->m_GridLayout->addWidget(label,i+1,j);
106  }
107  this->m_DistanceLabels->append(*rowDistances);
108  }
109  }
110  }
111  else
112  {
113  this->m_Controls->m_StatusLabel->setText(QString("For distance information please connect at least two tools"));
114  }
115 
116 }
117 
118 
119 
120  void QmitkToolDistanceWidget::ShowDistanceValues(itk::ProcessObject::DataObjectPointerArray & outputs)
121  {
122 
123  mitk::NavigationData* navData;
124  mitk::NavigationData* nextNavData;
125 
126  for(int i=0; i < m_DistanceLabels->size(); i++)
127  {
128  int j = i+1;
129 
130  for(int k=0; k < m_DistanceLabels->at(i).size(); k++)
131  {
132  navData = dynamic_cast<mitk::NavigationData*>(outputs.at(i).GetPointer());
133  nextNavData = dynamic_cast<mitk::NavigationData*>(outputs.at(j++).GetPointer());
134 
135  if(navData == nullptr || nextNavData == nullptr)
136  return;
137 
138  mitk::NavigationData::PositionType::RealType distance = navData->GetPosition().EuclideanDistanceTo(nextNavData->GetPosition());
139  distance = floor(distance * 10.) / 10.;
140  QString distanceStr;
141  if(!navData->IsDataValid() || !nextNavData->IsDataValid())
142  {
143  distanceStr = "---";
144  }
145  else
146  {
147  distanceStr.setNum(distance);
148  distanceStr += " mm";
149  }
150  this->m_DistanceLabels->at(i).at(k)->setText(distanceStr);
151  }
152  }
153  }
154 
156  {
157 
158  while(m_Controls->m_GridLayout->count() > 0)
159  {
160  QWidget* widget = m_Controls->m_GridLayout->itemAt(0)->widget();
161  m_Controls->m_GridLayout->removeWidget(widget);
162  delete widget;
163  }
164  delete this->m_DistanceLabels;
165  this->m_DistanceLabels = nullptr;
166 
167  this->m_Controls->m_StatusLabel->setText(QString("For distance information please set up the connection again."));
168 
169  }
170 
172  {
173  for(int i = 0; i < m_DistanceLabels->size(); i++)
174  {
175  for(int j= 0; j < m_DistanceLabels->at(i).size(); j++)
176  {
177  this->m_DistanceLabels->at(i).at(j)->setText(QString("---"));
178  }
179  }
180  }
181 
182 
183 
184 
float k(1.0)
void ClearDistanceMatrix()
This method clears the whole tool distances matrix.
Navigation Data.
void CreateQtPartControl(QWidget *parent)
void SetDistanceLabelValuesInvalid()
This method set&#39;s all distance entries in the matrix to "---". Can be used e.g. if tracking is stoppe...
virtual const char * GetName() const
returns the name of the NavigationData object
QVector< QVector< QLabel * > > DistanceLabelType
virtual PositionType GetPosition() const
returns position of the NavigationData object
void ShowDistanceValues(itk::ProcessObject::DataObjectPointerArray &outputs)
This method displays the matrix with the distances between the tracking source&#39;s outputs in a QGridLa...
void CreateToolDistanceMatrix(itk::ProcessObject::DataObjectPointerArray &outputs)
This method creates the initial distances matrix and labels it with the connected tool names...
Ui::QmitkToolDistanceWidgetControls * m_Controls
gui widgets
~QmitkToolDistanceWidget() override
default destructor
virtual bool IsDataValid() const
returns true if the object contains valid data
QmitkToolDistanceWidget(QWidget *parent)
default constructor