MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
QmitkNavigationDataPlayerView.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
13// Qmitk
15
16// QT
17#include <QFileDialog>
18#include <QMessageBox>
19
20//mitk
26#include <mitkIOUtil.h>
27
28// VTK
29#include <vtkSphereSource.h>
30
31const std::string QmitkNavigationDataPlayerView::VIEW_ID = "org.mitk.views.navigationdataplayer";
32
37
41
43{
44 // build up qt view, unless already done
45 if ( !m_Controls )
46 {
47 // create GUI widgets from the Qt Designer's .ui file
48 m_Controls = new Ui::QmitkNavigationDataPlayerViewControls;
49 m_Controls->setupUi( parent );
50
51 this->CreateConnections();
52
53 // make deselected Player invisible
54 m_Controls->m_TimedWidget->setVisible(false);
55 }
56}
57
59{
60 if ( m_Controls )
61 {
62 m_Controls->m_grpbxControls->setFocus();
63 }
64}
65
67{
68 connect( m_Controls->m_RdbSequential, SIGNAL(released()), this, SLOT(OnSelectPlayer()) );
69 connect( m_Controls->m_RdbTimeBased, SIGNAL(released()), this, SLOT(OnSelectPlayer()) );
70 connect( m_Controls->m_BtnOpenFile, SIGNAL(released()), this, SLOT(OnOpenFile()) );
71 connect( m_Controls->m_ChkDisplay, SIGNAL(released()), this, SLOT(OnSetDisplay()) );
72 connect( m_Controls->m_chkRepeat, SIGNAL(stateChanged(int)), this, SLOT(OnSetRepeat(int)) );
73 connect( m_Controls->m_ChkMicroservice, SIGNAL(released()), this, SLOT(OnSetMicroservice()) );
74
75 connect( m_Controls->m_SequentialWidget, SIGNAL(SignalUpdate()), this, SLOT(OnUpdate()) );
76 connect( m_Controls->m_TimedWidget, SIGNAL(SignalUpdate()), this, SLOT(OnUpdate()) );
77
79}
80
82{
83 mitk::NavigationDataReaderInterface::Pointer reader = nullptr;
84
85 QString filter = tr("NavigationData File (*.csv *.xml)");
86
87 QString fileName = QFileDialog::getOpenFileName(nullptr, tr("Open NavigationData Set"), "", filter);
88
89 if ( fileName.isNull() ) { return; } // user pressed cancel
90
91 try
92 {
93 m_Data = dynamic_cast<mitk::NavigationDataSet*> (mitk::IOUtil::Load(fileName.toStdString())[0].GetPointer());
94 }
95 catch ( const mitk::Exception &e )
96 {
97 MITK_WARN("NavigationDataPlayerView") << "could not open file " << fileName.toStdString();
98 QMessageBox::critical(nullptr, "Error Reading File", "The file '" + fileName
99 +"' could not be read.\n" + e.GetDescription() );
100 return;
101 }
102
103 if (m_Controls->m_ChkConvertToPointSet->isChecked())
104 m_Data->ConvertNavigationDataToPointSet();
105
106 // Update Labels
107 m_Controls->m_LblFilePath->setText(fileName);
108 m_Controls->m_LblFrames->setText(QString::number(m_Data->Size()));
109 m_Controls->m_LblTools->setText(QString::number(m_Data->GetNumberOfTools()));
110
111 // Initialize Widgets and create Player
112 this->OnSelectPlayer();
114}
115
117{
118 if (m_Controls->m_RdbSequential->isChecked())
119 {
120 m_Controls->m_SequentialWidget->setVisible(true);
121 m_Controls->m_TimedWidget->setVisible(false);
122 mitk::NavigationDataSequentialPlayer::Pointer seqPlayer = mitk::NavigationDataSequentialPlayer::New();
123 seqPlayer->SetNavigationDataSet(m_Data);
124 m_Controls->m_SequentialWidget->SetPlayer(seqPlayer);
125 m_Player = seqPlayer;
126 } else {
127 m_Controls->m_SequentialWidget->setVisible(false);
128 m_Controls->m_TimedWidget->setVisible(true);
129 mitk::NavigationDataPlayer::Pointer timedPlayer = mitk::NavigationDataPlayer::New();
130 timedPlayer->SetNavigationDataSet(m_Data);
131 m_Controls->m_TimedWidget->SetPlayer(timedPlayer);
132 m_Player = timedPlayer;
133 }
134
135 this->ConfigurePlayer();
136
137 // SetupRenderingPipeline
138 this->OnSetDisplay();
139}
140
142{
143 // set repeat mode according to the checkbox
144 m_Player->SetRepeat( m_Controls->m_chkRepeat->isChecked() );
145}
146
148{
149 m_Player->SetRepeat(checkState != 0);
150}
151
153 if(m_Controls->m_ChkMicroservice->isChecked())
154 {
155 m_ToolStorage = mitk::NavigationToolStorage::New();
156 for (itk::ProcessObject::DataObjectPointerArraySizeType i = 0;
157 i < m_Player->GetNumberOfIndexedOutputs(); i++)
158 {
159 mitk::NavigationTool::Pointer currentDummyTool = mitk::NavigationTool::New();
160 mitk::VirtualTrackingTool::Pointer dummyTool = mitk::VirtualTrackingTool::New();
161 std::stringstream name;
162 name << "Virtual Tool " << i;
163 dummyTool->SetToolName(name.str());
164 currentDummyTool->SetDataNode(m_RenderingNodes.at(i));
165 currentDummyTool->SetIdentifier(name.str());
166 m_ToolStorage->AddTool(currentDummyTool);
167 }
168 m_ToolStorage->SetName("NavigationDataPlayer Tool Storage");
169 m_Player->SetToolMetaDataCollection(m_ToolStorage);
170 m_Player->RegisterAsMicroservice();
171 m_ToolStorage->SetSourceID(m_Player->GetMicroserviceID()); //DEPRECATED / not needed anymore because NavigationDataSource now holds a member of its tool storage. Only left for backward compatibility.
172 m_ToolStorage->RegisterAsMicroservice();
173 } else {
174 if (m_ToolStorage.IsNotNull()) m_ToolStorage->UnRegisterMicroservice();
175 m_ToolStorage = nullptr;
176 m_Player->UnRegisterMicroservice();
177 }
178}
179
181 if (m_VisFilter.IsNotNull())
182 {
183 m_VisFilter->Update();
184 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
185 }
186}
187
190 if ( (m_Controls->m_ChkDisplay->isChecked()) && ( m_Player.IsNotNull() ))
191 {
193 }
194}
195
197 m_VisFilter = mitk::NavigationDataObjectVisualizationFilter::New();
198 m_VisFilter->ConnectTo(m_Player);
199
200 for (unsigned int i = 0 ; i < m_Player->GetNumberOfIndexedOutputs(); i++ ) {
201 mitk::DataNode::Pointer node = mitk::DataNode::New();
202 QString name = "Recorded Tool " + QString::number(i + 1);
203 node->SetName(name.toStdString());
204
205 //create small sphere and use it as surface
206 mitk::Surface::Pointer mySphere = mitk::Surface::New();
208 vtkData->SetRadius(5.0f);
209 vtkData->SetCenter(0.0, 0.0, 0.0);
210 vtkData->Update();
211 mySphere->SetVtkPolyData(vtkData->GetOutput());
212 node->SetData(mySphere);
213 m_VisFilter->SetRepresentationObject(i, mySphere.GetPointer());
214
215 // Add Node to DataStorageand to local list of Nodes
216 GetDataStorage()->Add(node);
217 m_RenderingNodes.push_back(node);
218 }
219 m_VisFilter->Update();
220
221 mitk::RenderingManager::GetInstance()->InitializeViewsByBoundingObjects(GetDataStorage());
222 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
223}
224
226 m_VisFilter = nullptr;
227 for (unsigned int i = 0; i < m_RenderingNodes.size(); i++){
228 this->GetDataStorage()->Remove(m_RenderingNodes[i]);
229 }
230 m_RenderingNodes.clear();
231}
232
234 m_Controls->m_grpbxSettings->setEnabled(isActive);
235 m_Controls->m_grpbxControls->setEnabled(isActive);
236}
void OnSelectPlayer()
Creates the correct player and displays the according widget.
void ConfigurePlayer()
configures the player according to the checkboxes set in the GUI
void CreateConnections()
This method creates this bundle's SIGNAL and SLOT connections.
void SetInteractionComponentsEnabledState(bool isActive)
Makes player component active or inactive.
Ui::QmitkNavigationDataPlayerViewControls * m_Controls
void OnSetRepeat(int)
Changes the repeat mode of the selected player.
void DestroyPipeline()
Destroys the Rendering Pipeline (but not the player)
void CreatePipeline()
Creates the Rendering Pipeline necessary to Render the images.
void OnSetMicroservice()
Registers or unregisters a virtual tracking device for the player.
void OnUpdate()
Updates the visualization.
mitk::NavigationToolStorage::Pointer m_ToolStorage
void CreateQtPartControl(QWidget *parent) override
mitk::NavigationDataSet::Pointer m_Data
void OnSetDisplay()
Triggers the creation and destruction of the rendering pipeline.
void OnOpenFile()
loads a file and triggers creation of players and the pipeline
mitk::NavigationDataObjectVisualizationFilter::Pointer m_VisFilter
std::vector< mitk::DataNode::Pointer > m_RenderingNodes
mitk::NavigationDataPlayerBase::Pointer m_Player
Data structure which stores streams of mitk::NavigationData for multiple tools.