00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date: 2009-02-11 18:22:32 +0100 (Mi, 11 Feb 2009) $ 00006 Version: $Revision: 16250 $ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 #ifndef MITKVIRTUALTRACKINGDEVICE_H_HEADER_INCLUDED_ 00019 #define MITKVIRTUALTRACKINGDEVICE_H_HEADER_INCLUDED_ 00020 00021 #include <MitkIGTExports.h> 00022 #include <mitkTrackingDevice.h> 00023 #include <mitkVirtualTrackingTool.h> 00024 #include <itkMultiThreader.h> 00025 00026 #include "itkFastMutexLock.h" 00027 #include <vector> 00028 00029 namespace mitk 00030 { 00040 class MitkIGT_EXPORT VirtualTrackingDevice : public TrackingDevice 00041 { 00042 public: 00043 00044 mitkClassMacro(VirtualTrackingDevice, TrackingDevice); 00045 itkNewMacro(Self); 00046 00047 00052 itkSetMacro(RefreshRate, unsigned int) 00053 00054 00058 itkGetConstMacro(RefreshRate, unsigned int) 00059 00060 00069 virtual bool StartTracking(); 00070 00075 virtual bool StopTracking(); 00076 00081 virtual bool OpenConnection(); 00082 00086 virtual bool CloseConnection(); 00087 00091 virtual unsigned int GetToolCount() const; 00092 00098 TrackingTool* GetTool(unsigned int toolNumber) const; 00099 00109 TrackingTool* AddTool(const char* toolName); 00110 00111 00121 itkSetVectorMacro(Bounds, mitk::ScalarType, 6); 00122 00129 const mitk::ScalarType* GetBounds() const 00130 { 00131 return m_Bounds; 00132 }; 00133 00142 mitk::ScalarType GetSplineChordLength(unsigned int idx); 00143 00155 void SetToolSpeed(unsigned int idx, mitk::ScalarType roundsPerSecond); 00156 00157 protected: 00158 VirtualTrackingDevice(); 00159 ~VirtualTrackingDevice(); 00164 void TrackTools(); 00165 00166 void InitializeSpline(mitk::VirtualTrackingTool* t); 00167 00168 static ITK_THREAD_RETURN_TYPE ThreadStartTracking(void* data); 00169 00170 typedef mitk::VirtualTrackingTool::SplineType::ControlPointType ControlPointType; 00171 00172 ControlPointType GetRandomPoint(); 00173 mitk::VirtualTrackingTool* GetInternalTool(unsigned int idx); 00174 00175 typedef std::vector<VirtualTrackingTool::Pointer> ToolContainer; 00176 ToolContainer m_AllTools; 00177 itk::FastMutexLock::Pointer m_ToolsMutex; 00178 00179 itk::MultiThreader::Pointer m_MultiThreader; 00180 int m_ThreadID; 00181 00182 unsigned int m_RefreshRate; 00183 unsigned int m_NumberOfControlPoints; 00184 00185 mitk::ScalarType m_Bounds[6]; 00186 }; 00187 }//mitk 00188 #endif /* MITKVIRTUALTRACKINGDEVICE_H_HEADER_INCLUDED_ */