Medical Imaging Interaction Toolkit  2021.10.99-1c4db16f
Medical Imaging Interaction Toolkit
mitkPolhemusInterface.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef MITKPolhemusINTERFACE_H_HEADER_INCLUDED_
14 #define MITKPolhemusINTERFACE_H_HEADER_INCLUDED_
15 
16 #include <vector>
17 #include <string>
18 
19 #include <MitkIGTExports.h>
20 #include "mitkCommon.h"
21 
22 #include <itkObject.h>
23 #include <itkObjectFactory.h>
24 
25 #include <windows.h>
26 #include <tchar.h>
27 #include <string>
28 
29 #include <mitkNavigationData.h>
30 
31 class CPDIdev;
32 
33 namespace mitk
34 {
42  class MITKIGT_EXPORT PolhemusInterface : public itk::Object
43  {
44  public:
45 
47  itkFactorylessNewMacro(Self);
48  itkCloneMacro(Self);
49 
50  struct trackingData
51  {
54  BYTE id;
56  };
57 
62  bool StartTracking();
63 
68  bool StopTracking();
69 
70  bool Connect();
71 
72  bool Disconnect();
73 
75  unsigned int GetNumberOfTools();
76 
78  void SetHemisphereTrackingEnabled(bool _HemisphereTrackingEnabled, int _tool = -1);
79 
83  void ToggleHemisphere(int _tool = -1);
84 
86  void PrintStatus();
87 
91  void SetHemisphere(int _tool, mitk::Vector3D _hemisphere);
92 
96  mitk::Vector3D GetHemisphere(int _tool);
97 
100  std::vector<int> GetToolPorts();
101 
104  bool GetHemisphereTrackingEnabled(int _tool);
105 
108  void AdjustHemisphere(int _tool);
109 
111  std::vector<trackingData> GetSingleFrame();
112 
114  std::vector<trackingData> AutoDetectTools();
115 
117  std::vector<trackingData> GetLastFrame();
118 
119  protected:
128 
130  CPDIdev* m_pdiDev;
131 
133  std::vector<mitk::PolhemusInterface::trackingData> ParsePolhemusRawData(PBYTE pBuf, DWORD dwSize);
134 
135  bool InitializeDevice();
136 
137  bool SetupDevice();
138 
139  //returns the index in the arrays of tool _tool. Eg. sensor 3 (_tool = 3) is the second tool --> index 1 in m_Hemispheres etc.
140  int GetToolIndex(int _tool);
141 
145  std::vector<trackingData> GetFrame();
146 
147  private:
148  //returns vector with tool index as only element if tool != -1, else returns vector from 0 to numberOfTools
149  std::vector<int> GetToolIterator(int _tool);
150 
151  //helper method to open connection
152  bool OpenConnection();
153 
154 
155  private:
156  //Stores the hemispheres for all sensors. Default is (1|0|0).
157  std::vector<mitk::Vector3D> m_Hemispheres;
158 
159  //Stores, if hemisphereTracking is on for this Sensor.
160  std::vector<bool> m_HemisphereTracking;
161 
162  //This vector stores the order of tools, which are available.
163  //E.g. only Sensor 1 and 3 are attached, then this vector maps the first tool (0) to Polhemus identifier 1 and the second tool (1) to Polhemus 3.
164  std::vector<int> m_ToolPorts;
165 
166  unsigned int m_numberOfTools;
167 
168  bool m_continousTracking;
169  };
170 }//mitk
171 #endif
An object of this class represents the interface to Polhemus trackers. All variables with the name "t...
DataCollection - Class to facilitate loading/accessing structured data.
#define MITKIGT_EXPORT
#define mitkClassMacroItkParent(className, SuperClassName)
Definition: mitkCommon.h:45
vnl_quaternion< ScalarType > Quaternion