vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
DynamicScene.h
Go to the documentation of this file.
1 #ifndef DYNAMICSCENE_H
2 #define DYNAMICSCENE_H
3 
4 #include <vrecko/Ability.h>
6 #include <vreckoAP/Export>
7 
8 #include <osg/Vec3>
9 #include <osg/Vec4>
10 
11 #include <ode/ode.h>
12 
13 #include <vector>
14 #include <map>
15 #include <string>
16 
17 using namespace vrecko;
18 
19 
20 namespace ode {
21 
22 typedef struct {
23  dBodyID body; // the body
24  std::vector<dGeomID*> geom; // geometries representing this body
25  std::vector<double *> geom_translate;
26  double translate[3];
27  bool enable;
29 } ODEObject;
30 
31 
32 class AP_EXPORT DynamicScene: public Ability {
33  public:
34 
36  public:
37  virtual const char* getMessageId() { return "ODERequest"; }
38 
40  std::string type;
41  double parameter[20]; // parameters - size, density, relative position and orientation
42  std::multimap<std::string, double*> object;
43  };
44 
45 /* typedef struct {
46  std::string type;
47  double parameter[20]; // parameters - size, density, relative position and orientation
48  std::multimap<std::string, double*> object;
49  } Request;*/
50 
51 
52  DynamicScene();
53  ~DynamicScene();
54 
55  virtual bool initialize(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *parameters = NULL);
56 
58 // void processEvent(const std::string &input_name, void *value);
59 
60  void update(void);
61 
62 // std::string getAcceptableMessages(void) {return "ODE";}
63 
64 // XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *saveXMLParameters(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *);
65 
66  void setEnableFlag(vrecko::EnvironmentObject *_eobject, bool _new_state);
67  void enableAllObjects(void);
68 
69  void setForceToDynamicObject(vrecko::EnvironmentObject *_eobject, float _fx, float _fy, float _fz);
70  void setTorqueToDynamicObject(vrecko::EnvironmentObject *_eobject, float _fx, float _fy, float _fz);
71  void setForce(vrecko::EnvironmentObject *_eobject, osg::Vec3 _fv);
72  void setTorque(vrecko::EnvironmentObject *_eobject, osg::Vec3 _fv);
73 
74  void setLinearVel(vrecko::EnvironmentObject *_eobject, osg::Vec3 _lv);
75  void setAngularVel(vrecko::EnvironmentObject *_eobject, osg::Vec3 _av);
76 
77 
78  dWorldID _world;
79  dSpaceID _space;
80  dJointGroupID _contact_group;
81 
82  typedef std::pair <std::string, double*> Object_Pair;
83 
84  protected:
85  osg::Vec3 _gravity;
86  double _CFM;
87  double _ERP;
88  osg::Vec4 _plane;
89 // double _step; // OBSOLETE: Incorrect setting
90 
91  std::map<vrecko::EnvironmentObject *, ODEObject *> _scene_objects;
92  std::vector<dGeomID> _objects_dGeomID;
93 
94  //MyObject obj[20];
95  std::vector<ODEObject *> _dynamic_object;
96 
97  osg::Vec3 _retv;
98  osg::Quat _retq;
99 
100  std::map<vrecko::EnvironmentObject *, bool> _enabled_objects;
101 
102  void updateLocationInDynamic(void);
103  void updateLocationInNonDynamic(void);
104 
105  void disableThreshold(void);
106 
108 };
109 
110 }
111 
112 #endif