Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "QmitkToolDistanceWidget.h"
00019
00020 #include <QGridLayout>
00021 #include <itkDataObject.h>
00022 #include <mitkNavigationDataSource.h>
00023 #include <math.h>
00024
00025
00026
00027
00028 QmitkToolDistanceWidget::QmitkToolDistanceWidget(QWidget* parent)
00029 : QWidget(parent), m_Controls(NULL), m_DistanceLabels(NULL)
00030 {
00031 this->CreateQtPartControl( this );
00032 }
00033
00034 QmitkToolDistanceWidget::~QmitkToolDistanceWidget()
00035 {
00036 ClearDistanceMatrix();
00037 delete m_DistanceLabels;
00038 m_DistanceLabels = NULL;
00039 m_Controls = NULL;
00040 }
00041
00042 void QmitkToolDistanceWidget::CreateQtPartControl(QWidget *parent)
00043 {
00044 if (!m_Controls)
00045 {
00046
00047 m_Controls = new Ui::QmitkToolDistanceWidgetControls;
00048 m_Controls->setupUi(parent);
00049 m_Controls->m_StatusLabel->setText(QString("No tracking tools connected. Please set up a connection first."));
00050
00051 this->CreateConnections();
00052 }
00053 }
00054
00055 void QmitkToolDistanceWidget::CreateConnections()
00056 {
00057
00058 }
00059
00060 void QmitkToolDistanceWidget::CreateToolDistanceMatrix(itk::ProcessObject::DataObjectPointerArray & outputs)
00061 {
00062
00063 if(outputs.size() > 1)
00064 {
00065 this->show();
00066
00067 mitk::NavigationData* navData;
00068
00069
00070 if(m_DistanceLabels == NULL)
00071 {
00072 m_DistanceLabels = new DistanceLabelType;
00073 }
00074
00075 if(m_DistanceLabels->isEmpty())
00076 {
00077 this->m_Controls->m_StatusLabel->setText("");
00078
00079 QLabel* label;
00080
00081
00082
00083 for (unsigned int i = 0; i < outputs.size()-1; i++)
00084 {
00085 navData = dynamic_cast<mitk::NavigationData*>(outputs.at(i).GetPointer());
00086 label = new QLabel(navData->GetName(),this);
00087 label->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
00088 this->m_Controls->m_GridLayout->addWidget(label,i+1,0);
00089
00090 navData = dynamic_cast<mitk::NavigationData*>(outputs.at(i+1).GetPointer());
00091 label = new QLabel(navData->GetName(),this);
00092 label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
00093 this->m_Controls->m_GridLayout->addWidget(label,0,i+1);
00094 }
00095
00096
00097 for(unsigned int i = 0; i < outputs.size()-1; i++)
00098 {
00099 QVector<QLabel*>* rowDistances = new QVector<QLabel*>();
00100
00101 for(unsigned int j = i+1; j < outputs.size(); j++)
00102 {
00103
00104 label = new QLabel(QString("---"), this);
00105 label->setFrameStyle(QFrame::Box | QFrame::Sunken);
00106 label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
00107 rowDistances->append(label);
00108
00109
00110 this->m_Controls->m_GridLayout->addWidget(label,i+1,j);
00111 }
00112 this->m_DistanceLabels->append(*rowDistances);
00113 }
00114 }
00115 }
00116 else
00117 {
00118 this->m_Controls->m_StatusLabel->setText(QString("For distance information please connect at least two tools"));
00119 }
00120
00121 }
00122
00123
00124
00125 void QmitkToolDistanceWidget::ShowDistanceValues(itk::ProcessObject::DataObjectPointerArray & outputs)
00126 {
00127
00128 mitk::NavigationData* navData;
00129 mitk::NavigationData* nextNavData;
00130
00131 for(int i=0; i < m_DistanceLabels->size(); i++)
00132 {
00133 int j = i+1;
00134
00135 for(int k=0; k < m_DistanceLabels->at(i).size(); k++)
00136 {
00137 navData = dynamic_cast<mitk::NavigationData*>(outputs.at(i).GetPointer());
00138 nextNavData = dynamic_cast<mitk::NavigationData*>(outputs.at(j++).GetPointer());
00139
00140 if(navData == NULL || nextNavData == NULL)
00141 return;
00142
00143 mitk::NavigationData::PositionType::RealType distance = navData->GetPosition().EuclideanDistanceTo(nextNavData->GetPosition());
00144 distance = floor(distance * 10.) / 10.;
00145 QString distanceStr;
00146 if(!navData->IsDataValid() || !nextNavData->IsDataValid())
00147 {
00148 distanceStr = "---";
00149 }
00150 else
00151 {
00152 distanceStr.setNum(distance);
00153 distanceStr += " mm";
00154 }
00155 this->m_DistanceLabels->at(i).at(k)->setText(distanceStr);
00156 }
00157 }
00158 }
00159
00160 void QmitkToolDistanceWidget::ClearDistanceMatrix()
00161 {
00162
00163 while(m_Controls->m_GridLayout->count() > 0)
00164 {
00165 QWidget* widget = m_Controls->m_GridLayout->itemAt(0)->widget();
00166 m_Controls->m_GridLayout->removeWidget(widget);
00167 delete widget;
00168 }
00169 delete this->m_DistanceLabels;
00170 this->m_DistanceLabels = NULL;
00171
00172 this->m_Controls->m_StatusLabel->setText(QString("For distance information please set up the connection again."));
00173
00174 }
00175
00176 void QmitkToolDistanceWidget::SetDistanceLabelValuesInvalid()
00177 {
00178 for(int i = 0; i < m_DistanceLabels->size(); i++)
00179 {
00180 for(int j= 0; j < m_DistanceLabels->at(i).size(); j++)
00181 {
00182 this->m_DistanceLabels->at(i).at(j)->setText(QString("---"));
00183 }
00184 }
00185 }
00186
00187
00188
00189