NorMIT-nav  18.04
An IGT application
cxOpenIGTLinkTrackingSystemService.cpp
Go to the documentation of this file.
1 /*=========================================================================
2 This file is part of CustusX, an Image Guided Therapy Application.
3 
4 Copyright (c) SINTEF Department of Medical Technology.
5 All rights reserved.
6 
7 CustusX is released under a BSD 3-Clause license.
8 
9 See Lisence.txt (https://github.com/SINTEFMedtek/CustusX/blob/master/License.txt) for details.
10 =========================================================================*/
11 
13 
14 #include "cxLogger.h"
15 #include "cxOpenIGTLinkTool.h"
16 #include "cxProfile.h"
17 
20 
21 namespace cx
22 {
23 
24 std::vector<ToolPtr> toVector(std::map<QString, OpenIGTLinkToolPtr> map)
25 {
26  std::vector<ToolPtr> retval;
27  std::map<QString, OpenIGTLinkToolPtr>::iterator it = map.begin();
28  for(; it!= map.end(); ++it)
29  {
30  retval.push_back(it->second);
31  }
32  return retval;
33 }
34 
36  mNetworkHandler(networkHandler)
37 {
38  if(mNetworkHandler == NULL)
39  return;
40 
41  connect(mNetworkHandler.get(), &NetworkHandler::connected,this, &OpenIGTLinkTrackingSystemService::serverIsConnected);
42  connect(mNetworkHandler.get(), &NetworkHandler::disconnected, this, &OpenIGTLinkTrackingSystemService::serverIsDisconnected);
43  connect(mNetworkHandler.get(), &NetworkHandler::transform, this, &OpenIGTLinkTrackingSystemService::receiveTransform);
44  //connect(mNetworkHandler.get(), &NetworkHandler::calibration, this, &OpenIGTLinkTrackingSystemService::receiveCalibration);
45  connect(mNetworkHandler.get(), &NetworkHandler::probedefinition, this, &OpenIGTLinkTrackingSystemService::receiveProbedefinition);
46 
48 
49  this->setConfigurationFile(profile()->getToolConfigFilePath());
50 }
51 
53 {
54  this->deconfigure();
55 }
56 
58 {
59  return "org.custusx.core.openigtlink3";
60 }
61 
63 {
64  emit setInternalState(val);
65 }
66 
68 {
70  mState = val;
71  emit stateChanged();
72 }
73 
75 {
76  return toVector(mTools);
77 }
78 
80 {
82  retval.reset(new TrackerConfigurationImpl());
83  retval->setTrackingSystemImplementation(TRACKING_SYSTEM_IMPLEMENTATION_IGTLINK);
84  return retval;
85 }
86 
88 {
89  return mReference;
90 }
91 
93 {
94  //parse
96 
97  if(!configParser.getTrackingSystemImplementation().contains(TRACKING_SYSTEM_IMPLEMENTATION_IGTLINK, Qt::CaseInsensitive))
98  {
99  CX_LOG_DEBUG() << "OpenIGTLinkTrackingSystemService::configure(): Not using OpenIGTLink tracking.";
100  this->setState(Tool::tsNONE);
101  return;
102  }
103 
104  CX_LOG_DEBUG() << "OpenIGTLinkTrackingSystemService::configure(): Using OpenIGTLink3 tracking";
105 
106  std::vector<ConfigurationFileParser::ToolStructure> toolList = configParser.getToolListWithMetaInformation();
107 
108  //Create tools
109  for(std::vector<ConfigurationFileParser::ToolStructure>::iterator it = toolList.begin(); it != toolList.end(); ++it)
110  {
111  ToolFileParser toolParser((*it).mAbsoluteToolFilePath, mLoggingFolder);
112  ToolFileParser::ToolInternalStructurePtr internalTool = toolParser.getTool();
113 
114  QString devicename = internalTool->mUid;
115  OpenIGTLinkToolPtr newTool = OpenIGTLinkToolPtr(new OpenIGTLinkTool((*it), internalTool));
116  if(mTools.count(devicename))
117  CX_LOG_WARNING() << "Tool configuration already contain tool: " << devicename << ". Existing tool will be overwritten";
118  mTools[devicename] = newTool;
119  if(newTool->isReference())
120  mReference = newTool;
121  }
122  if(!mReference)
123  CX_LOG_WARNING() << "OpenIGTLinkTrackingSystemService::configure() Got no reference tool";
124 
125  mState = Tool::tsCONFIGURED;//Setting state directly. Cannot get setState() to work with test
126 }
127 
129 {
130  if (!this->isConfigured())
131  return;
132 
133  mState = Tool::tsNONE;//Setting state directly. Cannot get setState() to work with test
134 
135  mTools.clear();
136  mReference.reset();
137 }
138 
139 void OpenIGTLinkTrackingSystemService::serverIsConnected()
140 {
142  this->setState(Tool::tsTRACKING);
143 }
144 
145 void OpenIGTLinkTrackingSystemService::serverIsDisconnected()
146 {
149 }
150 
151 void OpenIGTLinkTrackingSystemService::receiveTransform(QString devicename, Transform3D transform, double timestamp)
152 {
153 // CX_LOG_DEBUG() << "receiveTransform for: " << devicename;
154  OpenIGTLinkToolPtr tool = this->getTool(devicename);
155  if(tool)
156  {
157  tool->toolTransformAndTimestampSlot(transform, timestamp);
158  }
159 }
160 
161 void OpenIGTLinkTrackingSystemService::receiveCalibration(QString devicename, Transform3D calibration)
162 {
163  CX_LOG_DEBUG() << "receiveCalibration for: " << devicename;
164  OpenIGTLinkToolPtr tool = this->getTool(devicename);
165  if(tool)
166  tool->setCalibration_sMt(calibration);
167 }
168 
169 void OpenIGTLinkTrackingSystemService::receiveProbedefinition(QString devicename, ProbeDefinitionPtr definition)
170 {
171  OpenIGTLinkToolPtr tool = this->getTool(devicename);
172  if(tool)
173  {
174  ProbePtr probe = tool->getProbe();
175  if(probe)
176  {
177  ProbeDefinition old_def = probe->getProbeDefinition();
178  definition->setUid(old_def.getUid());
179  definition->applySoundSpeedCompensationFactor(old_def.getSoundSpeedCompensationFactor());
180 
181  probe->setProbeDefinition(*(definition.get()));
182  emit stateChanged();
183  }
184  }
185 }
186 
187 OpenIGTLinkToolPtr OpenIGTLinkTrackingSystemService::getTool(QString devicename)
188 {
189 // CX_LOG_DEBUG() << "OpenIGTLinkTrackingSystemService::getTool: " << devicename;
190 
191  std::map<QString, OpenIGTLinkToolPtr>::iterator it;
192  for (it = mTools.begin(); it != mTools.end(); ++it)
193  {
194  OpenIGTLinkToolPtr tool = it->second;
195  if (tool->doIdCorrespondToTool(devicename))
196  {
197  return tool;
198  }
199  }
200  return OpenIGTLinkToolPtr();
201 }
202 
203 
204 } /* namespace cx */
cxResource_EXPORT ProfilePtr profile()
Definition: cxProfile.cpp:160
DoubleBoundingBox3D transform(const Transform3D &m, const DoubleBoundingBox3D &bb)
boost::shared_ptr< ToolInternalStructure > ToolInternalStructurePtr
Transform3D Transform3D
Transform3D is a representation of an affine 3D transform.
QString mConfigurationFilePath
path to the configuration file
virtual void setConfigurationFile(QString configurationFile)
double getSoundSpeedCompensationFactor() const
boost::shared_ptr< class NetworkHandler > NetworkHandlerPtr
QString getUid() const
configured with basic info
Definition: cxTool.h:75
boost::shared_ptr< Probe > ProbePtr
Definition: cxProbe.h:72
boost::shared_ptr< class TrackerConfiguration > TrackerConfigurationPtr
#define TRACKING_SYSTEM_IMPLEMENTATION_IGTLINK
Definition: cxDefinitions.h:26
QString mLoggingFolder
path to where logging should be saved
virtual ToolInternalStructurePtr getTool()
void setUid(QString uid)
void transform(QString devicename, Transform3D transform, double timestamp)
std::vector< ToolPtr > toVector(std::map< QString, OpenIGTLinkToolPtr > map)
void probedefinition(QString devicename, ProbeDefinitionPtr definition)
Class for reading the files defining a CustusX tool.
not available
Definition: cxTool.h:74
connected to hardware, if any, ready to use
Definition: cxTool.h:76
Definition of characteristics for an Ultrasound Probe Sector.
#define CX_LOG_DEBUG
Definition: cxLogger.h:95
virtual bool isConfigured() const
#define CX_LOG_WARNING
Definition: cxLogger.h:98
emitting tracking data
Definition: cxTool.h:77
Class for reading the files defining a CustusX tool.
void internalSetState(Tool::State val)
boost::shared_ptr< class ProbeDefinition > ProbeDefinitionPtr
std::vector< ConfigurationFileParser::ToolStructure > getToolListWithMetaInformation()
Namespace for all CustusX production code.
boost::shared_ptr< class Tool > ToolPtr