vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
OptiTrack.h
Go to the documentation of this file.
1 #ifndef OPTITRACK_H
2 #define OPTITRACK_H
3 
4 #ifdef WIN32
5 #include <string>
6 #include <windows.h>
7 #endif
8 
9 #include <vrecko/IOPins.h>
10 #include <vrecko/Device.h>
11 #include <vrecko/EventDispatcher.h>
12 
13 #include <osg/Vec3>
14 #include <osg/Vec4>
15 #include <osg/Matrix>
16 #include <osg/Quat>
17 
18 #include "vrpn_Connection.h" // Missing this file? Get the latest VRPN distro at
19 #include "vrpn_Tracker.h" // ftp://ftp.cs.unc.edu/pub/packages/GRIP/vrpn
20 
21 #define TRACKER_MAX_COUNT 12
22 
23 namespace vreckoDP_base {
24 
25 class DP_EXPORT OptiTrack : public vrecko::Device {
26  public:
27  OptiTrack();
28  OptiTrack(const char* _port_number);
29  ~OptiTrack();
30 
31  virtual int openDevice(void);
32  int closeDevice(void);
33 
34  void preInitialize();
35  void postInitialize();
36  //void processEvent(const std::string &input_name, void *value);
37 
38  void update(void);
39 
40  bool loadXMLParameters(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *pParametersNode);
41  XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *saveXMLParameters(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *);
42 
43  void sendEvent(int sid, osg::Vec3 *p, osg::Quat *o);
44 
45  inline float getSensorScale() { return sensorScale; }
46  inline osg::Vec3* getOriginPosition() { return &_origin_pos; }
47  inline osg::Vec3* getTranslateMapping() { return &_trans_mapp; }
48 
49  typedef struct {
50  int T_ID;
52  } info_struct;
53 
54  protected:
55  std::string _hostname;
56  int _port;
57  vrpn_Connection *connection;
58  char connectionName[128];
59  vrpn_Tracker_Remote *tracker[TRACKER_MAX_COUNT];
61 
62  //void VRPN_CALLBACK handle_tracker0(void *, const vrpn_TRACKERCB t);
63 
64  osg::Vec3 _origin_pos, _trans_mapp;
65  float sensorScale;
66  unsigned int sensor_count;
68  std::string server_address;
69 
71 
72  void addSensor(int i);
73 
74  DECLARE_INPUT(SetSensorCount, vrecko::MessageInt);
76 };
77 
78 }
79 
80 #endif