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 "QmitkSimpleMeasurement.h"
00019
00020
00021 #include <mitkGlobalInteraction.h>
00022
00023 #include <mitkPointSet.h>
00024
00025 #include <mitkProperties.h>
00026 #include <mitkStringProperty.h>
00027 #include <mitkIDataStorageService.h>
00028
00029 #include <berryIEditorPart.h>
00030 #include <berryIWorkbenchPage.h>
00031 #include <berryPlatform.h>
00032
00033
00034
00035
00036
00037
00038
00039
00040 QmitkSimpleMeasurement::~QmitkSimpleMeasurement()
00041 {
00042 }
00043
00044 void QmitkSimpleMeasurement::Activated()
00045 {
00046 std::vector<mitk::DataNode*> selection = this->GetDataManagerSelection();
00047 this->OnSelectionChanged( selection );
00048 }
00049
00050 void QmitkSimpleMeasurement::Deactivated()
00051 {
00052 std::vector<mitk::DataNode*> selection;
00053 this->OnSelectionChanged( selection );
00054 }
00055
00056 void QmitkSimpleMeasurement::AddDistanceSimpleMeasurement()
00057 {
00058 mitk::PointSet::Pointer pointSet = mitk::PointSet::New();
00059
00060 mitk::DataNode::Pointer _CurrentPointSetNode = mitk::DataNode::New();
00061 _CurrentPointSetNode->SetData(pointSet);
00062 _CurrentPointSetNode->SetProperty("show contour", mitk::BoolProperty::New(true));
00063 _CurrentPointSetNode->SetProperty("name", mitk::StringProperty::New("distance"));
00064 _CurrentPointSetNode->SetProperty("show distances", mitk::BoolProperty::New(true));
00065
00066
00067 this->GetDataStorage()->Add(_CurrentPointSetNode);
00068 m_CreatedPointSetNodes.push_back( _CurrentPointSetNode );
00069
00070
00071 std::vector<mitk::DataNode*> selection;
00072 selection.push_back( _CurrentPointSetNode );
00073 this->FireNodesSelected( selection );
00074 this->OnSelectionChanged( selection );
00075 }
00076
00077 void QmitkSimpleMeasurement::AddAngleSimpleMeasurement()
00078 {
00079 mitk::PointSet::Pointer pointSet = mitk::PointSet::New();
00080
00081 mitk::DataNode::Pointer _CurrentPointSetNode = mitk::DataNode::New();
00082 _CurrentPointSetNode->SetData(pointSet);
00083 _CurrentPointSetNode->SetProperty("show contour", mitk::BoolProperty::New(true));
00084 _CurrentPointSetNode->SetProperty("name", mitk::StringProperty::New("angle"));
00085 _CurrentPointSetNode->SetProperty("show angles", mitk::BoolProperty::New(true));
00086
00087
00088 this->GetDataStorage()->Add(_CurrentPointSetNode);
00089 m_CreatedPointSetNodes.push_back( _CurrentPointSetNode );
00090
00091
00092 std::vector<mitk::DataNode*> selection;
00093 selection.push_back( _CurrentPointSetNode );
00094 this->FireNodesSelected( selection );
00095 this->OnSelectionChanged( selection );
00096 }
00097
00098 void QmitkSimpleMeasurement::AddPathSimpleMeasurement()
00099 {
00100 mitk::PointSet::Pointer pointSet = mitk::PointSet::New();
00101
00102 mitk::DataNode::Pointer _CurrentPointSetNode = mitk::DataNode::New();
00103 _CurrentPointSetNode->SetData(pointSet);
00104 _CurrentPointSetNode->SetProperty("show contour", mitk::BoolProperty::New(true));
00105 _CurrentPointSetNode->SetProperty("name", mitk::StringProperty::New("path"));
00106 _CurrentPointSetNode->SetProperty("show distances", mitk::BoolProperty::New(true));
00107 _CurrentPointSetNode->SetProperty("show angles", mitk::BoolProperty::New(true));
00108
00109
00110 this->GetDataStorage()->Add(_CurrentPointSetNode);
00111 m_CreatedPointSetNodes.push_back( _CurrentPointSetNode );
00112
00113
00114 std::vector<mitk::DataNode*> selection;
00115 selection.push_back( _CurrentPointSetNode );
00116 this->FireNodesSelected( selection );
00117 this->OnSelectionChanged( selection );
00118 }
00119
00120 void QmitkSimpleMeasurement::CreateQtPartControl( QWidget* parent )
00121 {
00122 m_Controls = new Ui::QmitkSimpleMeasurementControls;
00123 m_Controls->setupUi(parent);
00124
00125 connect( (QObject*)(m_Controls->pbDistance), SIGNAL(clicked()),(QObject*) this, SLOT(AddDistanceSimpleMeasurement()) );
00126 connect( (QObject*)(m_Controls->pbAngle), SIGNAL(clicked()),(QObject*) this, SLOT(AddAngleSimpleMeasurement()) );
00127 connect( (QObject*)(m_Controls->pbPath), SIGNAL(clicked()),(QObject*) this, SLOT(AddPathSimpleMeasurement()) );
00128 }
00129
00130 void QmitkSimpleMeasurement::OnSelectionChanged( std::vector<mitk::DataNode*> nodes )
00131 {
00132 mitk::DataNode* selectedNode = 0;
00133 if(nodes.size() > 0)
00134 selectedNode = nodes.front();
00135
00136 mitk::PointSet* pointSet = 0;
00137 if(selectedNode)
00138 pointSet = dynamic_cast<mitk::PointSet*> ( selectedNode->GetData() );
00139
00140
00141 if (m_PointSetInteractor.IsNotNull())
00142 {
00143 mitk::GlobalInteraction::GetInstance()->RemoveInteractor(m_PointSetInteractor);
00144 }
00145
00146 bool pointsetCreatedByThis = false;
00147
00148
00149 if(pointSet)
00150 {
00151
00152 std::vector<mitk::DataNode*>::iterator it = std::find( m_CreatedPointSetNodes.begin()
00153 , m_CreatedPointSetNodes.end(), selectedNode);
00154 if(it != m_CreatedPointSetNodes.end())
00155 pointsetCreatedByThis = true;
00156 }
00157
00158
00159 if(pointsetCreatedByThis && this->IsActivated())
00160 {
00161
00162 m_Controls->selectedPointSet->setText( QString::fromStdString(selectedNode->GetName()) );
00163 mitk::PointSetInteractor::Pointer newPointSetInteractor
00164 = mitk::PointSetInteractor::New("pointsetinteractor", selectedNode);
00165 mitk::GlobalInteraction::GetInstance()->AddInteractor(newPointSetInteractor);
00166 m_PointSetInteractor = newPointSetInteractor;
00167 float green[] = { 0, 255, 0 };
00168 float red[] = { 255, 0, 0 };
00169 selectedNode->SetColor(green);
00170 if(m_SelectedPointSetNode.IsNotNull())
00171 m_SelectedPointSetNode->SetColor(red);
00172 m_SelectedPointSetNode = selectedNode;
00173 }
00174 else
00175 {
00176
00177 m_Controls->selectedPointSet->setText( "None" );
00178 }
00179 }
00180
00181 bool QmitkSimpleMeasurement::IsExclusiveFunctionality() const
00182 {
00183 return true;
00184 }
00185
00186 void QmitkSimpleMeasurement::NodeRemoved( const mitk::DataNode* node )
00187 {
00188
00189 std::vector<mitk::DataNode*>::iterator it = std::find( m_CreatedPointSetNodes.begin()
00190 , m_CreatedPointSetNodes.end(), node);
00191 if(it != m_CreatedPointSetNodes.end())
00192 m_CreatedPointSetNodes.erase(it);
00193 }