MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
QmitkMITKIGTTrackingToolboxViewWorker.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
17
21
25
30
32{
34}
35
37{
38 m_DataStorage = d;
39}
40
45
50
51void QmitkMITKIGTTrackingToolboxViewWorker::SetNavigationToolStorage(mitk::NavigationToolStorage::Pointer n)
52{
54}
55
58{
59 switch (m_WorkerMethod)
60 {
62 this->AutoDetectTools();
63 break;
64 case eConnectDevice:
65 this->ConnectDevice();
66 break;
67 case eStartTracking:
68 this->StartTracking();
69 break;
70 case eStopTracking:
71 this->StopTracking();
72 break;
74 this->DisconnectDevice();
75 break;
76 default:
77 MITK_WARN << "Undefined worker method was set ... something went wrong!";
78 break;
79 }
80}
82
84{
85 mitk::NavigationToolStorage::Pointer autoDetectedStorage = mitk::NavigationToolStorage::New(m_DataStorage);
86 try
87 {
88 mitk::NavigationToolStorage::Pointer tempStorage = m_TrackingDevice->AutoDetectTools();
89 for (unsigned int i = 0; i < tempStorage->GetToolCount(); i++) { autoDetectedStorage->AddTool(tempStorage->GetTool(i)); }
90 }
91 catch (mitk::Exception& e)
92 {
93 MITK_WARN << e.GetDescription();
94 emit AutoDetectToolsFinished(false, e.GetDescription());
95 return;
96 }
98 m_NavigationToolStorage = autoDetectedStorage;
99 emit AutoDetectToolsFinished(true, "");
100 MITK_INFO << "AutoDetect Tools Finished.";
101}
102
104{
105 std::string message = "";
106
107 //build the IGT pipeline
108 mitk::TrackingDevice::Pointer trackingDevice = m_TrackingDevice;
109 trackingDevice->SetData(m_TrackingDeviceData);
110
111 //set device to rotation mode transposed because we are working with VNL style quaternions
112 if (m_InverseMode)
113 {
114 trackingDevice->SetRotationMode(mitk::TrackingDevice::RotationTransposed);
115 }
116
117 //Get Tracking Volume Data
119
120 //Create Navigation Data Source with the factory class
121 mitk::TrackingDeviceSourceConfigurator::Pointer myTrackingDeviceSourceFactory = mitk::TrackingDeviceSourceConfigurator::New(m_NavigationToolStorage, trackingDevice);
122
123 m_TrackingDeviceSource = myTrackingDeviceSourceFactory->CreateTrackingDeviceSource(m_ToolVisualizationFilter);
124
125 if (m_TrackingDeviceSource.IsNull())
126 {
127 message = std::string("Cannot connect to device: ") + myTrackingDeviceSourceFactory->GetErrorMessage();
128 emit ConnectDeviceFinished(false, QString(message.c_str()));
129 return;
130 }
131
132 //set filter to rotation mode transposed because we are working with VNL style quaternions
133 if (m_InverseMode)
135
136 //First check if the created object is valid
137 if (m_TrackingDeviceSource.IsNull())
138 {
139 message = myTrackingDeviceSourceFactory->GetErrorMessage();
140 emit ConnectDeviceFinished(false, QString(message.c_str()));
141 return;
142 }
143
144 MITK_INFO << "Connected device with " << m_TrackingDeviceSource->GetNumberOfOutputs() << " tools.";
145
146 //connect to device
147 try
148 {
149 m_TrackingDeviceSource->Connect();
150 //Microservice registration:
151 m_TrackingDeviceSource->SetToolMetaDataCollection(m_NavigationToolStorage);
152 m_TrackingDeviceSource->RegisterAsMicroservice();
153 m_NavigationToolStorage->SetSourceID(m_TrackingDeviceSource->GetMicroserviceID()); //DEPRECATED / not needed anymore because NavigationDataSource now holds a member of its tool storage. Only left for backward compatibility.
154 m_NavigationToolStorage->LockStorage();
155 }
156 catch (...) //todo: change to mitk::IGTException
157 {
158 message = "Error on connecting the tracking device.";
159 emit ConnectDeviceFinished(false, QString(message.c_str()));
160 return;
161 }
162 emit ConnectDeviceFinished(true, QString(message.c_str()));
163}
164
166{
167 return this->m_TrackingDeviceSource;
168}
169
171{
172 QString errorMessage = "";
173 try
174 {
175 m_TrackingDeviceSource->StartTracking();
176 }
177 catch (...) //todo: change to mitk::IGTException
178 {
179 errorMessage += "Error while starting the tracking device!";
180 emit StartTrackingFinished(false, errorMessage);
181 return;
182 }
183 //remember the original colors of the tools
184 m_OriginalColors = std::map<mitk::DataNode::Pointer, mitk::Color>();
185 for (unsigned int i = 0; i < this->m_NavigationToolStorage->GetToolCount(); i++)
186 {
187 mitk::DataNode::Pointer currentToolNode = m_NavigationToolStorage->GetTool(i)->GetDataNode();
188 float c[3];
189 currentToolNode->GetColor(c);
190 mitk::Color color;
191 color.SetRed(c[0]);
192 color.SetGreen(c[1]);
193 color.SetBlue(c[2]);
194 m_OriginalColors[currentToolNode] = color;
195 }
196
197 emit StartTrackingFinished(true, errorMessage);
198}
199
201{
202 //stop tracking
203 try
204 {
205 m_TrackingDeviceSource->StopTracking();
206 }
207 catch (mitk::Exception& e)
208 {
209 emit StopTrackingFinished(false, e.GetDescription());
210 }
211
212 //restore the original colors of the tools
213 for (unsigned int i = 0; i < this->m_NavigationToolStorage->GetToolCount(); i++)
214 {
215 mitk::DataNode::Pointer currentToolNode = m_NavigationToolStorage->GetTool(i)->GetDataNode();
216 if (m_OriginalColors.find(currentToolNode) == m_OriginalColors.end())
217 {
218 MITK_WARN << "Cannot restore original color of tool " << m_NavigationToolStorage->GetTool(i)->GetToolName();
219 }
220 else
221 {
222 currentToolNode->SetColor(m_OriginalColors[currentToolNode]);
223 }
224 }
225
226 // clear map m_OriginalColors
227 m_OriginalColors.clear();
228
229 //emit signal
230 emit StopTrackingFinished(true, "");
231}
232
234{
235 try
236 {
237 if (m_TrackingDeviceSource->IsTracking()) { m_TrackingDeviceSource->StopTracking(); }
238 m_TrackingDeviceSource->Disconnect();
239 m_TrackingDeviceSource->UnRegisterMicroservice();
240
241 m_NavigationToolStorage->UnLockStorage();
242
243 m_TrackingDeviceSource = nullptr;
244 }
245 catch (mitk::Exception& e)
246 {
247 emit DisconnectDeviceFinished(false, e.GetDescription());
248 }
249 emit DisconnectDeviceFinished(true, "");
250}
std::map< mitk::DataNode::Pointer, mitk::Color > m_OriginalColors
mitk::TrackingDeviceSource::Pointer GetTrackingDeviceSource()
mitk::TrackingDeviceSource::Pointer m_TrackingDeviceSource
void AutoDetectToolsFinished(bool success, QString errorMessage)
void StartTrackingFinished(bool success, QString errorMessage)
void StopTrackingFinished(bool success, QString errorMessage)
void SetNavigationToolStorage(mitk::NavigationToolStorage::Pointer n)
void ConnectDeviceFinished(bool success, QString errorMessage)
mitk::NavigationDataObjectVisualizationFilter::Pointer m_ToolVisualizationFilter
void DisconnectDeviceFinished(bool success, QString errorMessage)
mitk::NavigationToolStorage::Pointer m_NavigationToolStorage