MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
QmitkToolDistanceWidget.cpp
Go to the documentation of this file.
1/*============================================================================
2
3The Medical Imaging Interaction Toolkit (MITK)
4
5Copyright (c) German Cancer Research Center (DKFZ)
6All rights reserved.
7
8Use of this source code is governed by a 3-clause BSD license that can be
9found 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
54
55void 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
void ClearDistanceMatrix()
This method clears the whole tool distances matrix.
QmitkToolDistanceWidget(QWidget *parent)
default constructor
~QmitkToolDistanceWidget() override
default destructor
void ShowDistanceValues(itk::ProcessObject::DataObjectPointerArray &outputs)
This method displays the matrix with the distances between the tracking source's outputs in a QGridLa...
void CreateQtPartControl(QWidget *parent)
Ui::QmitkToolDistanceWidgetControls * m_Controls
gui widgets
QVector< QVector< QLabel * > > DistanceLabelType
void CreateToolDistanceMatrix(itk::ProcessObject::DataObjectPointerArray &outputs)
This method creates the initial distances matrix and labels it with the connected tool names.
void SetDistanceLabelValuesInvalid()
This method set's all distance entries in the matrix to "---". Can be used e.g. if tracking is stoppe...
virtual bool IsDataValid() const
returns true if the object contains valid data