JointHinge.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #include "stdafx.h"
  2. #include <ode/ode.h>
  3. #include "jointhinge.h"
  4. namespace ODEManaged
  5. {
  6. //Constructors
  7. JointHinge::JointHinge(void) : Joint(){}
  8. JointHinge::JointHinge(World &world)
  9. {
  10. if(this->_id) dJointDestroy(this->_id);
  11. _id = dJointCreateHinge(world.Id(), 0);
  12. }
  13. JointHinge::JointHinge(World &world, JointGroup &jointGroup)
  14. {
  15. if(this->_id) dJointDestroy(this->_id);
  16. _id = dJointCreateHinge(world.Id(), jointGroup.Id());
  17. }
  18. //Destructor
  19. JointHinge::~JointHinge(void){}
  20. //Methods
  21. //Overloaded Create
  22. void JointHinge::Create(World &world, JointGroup &jointGroup)
  23. {
  24. if(this->_id) dJointDestroy(this->_id);
  25. _id = dJointCreateHinge(world.Id(), jointGroup.Id());
  26. }
  27. void JointHinge::Create(World &world)
  28. {
  29. if(this->_id) dJointDestroy(this->_id);
  30. _id = dJointCreateHinge(world.Id(), 0);
  31. }
  32. //Overloaded Attach
  33. void JointHinge::Attach(Body &body1, Body &body2)
  34. {
  35. dJointAttach(this->_id, body1.Id(), body2.Id());
  36. }
  37. void JointHinge::Attach(Body &body1)
  38. {
  39. dJointAttach(this->_id, body1.Id(), 0);
  40. }
  41. //SetAxis
  42. void JointHinge::SetAxis(double x, double y, double z)
  43. {
  44. dJointSetHingeAxis(this->_id, x, y, z);
  45. }
  46. //GetAxis
  47. Vector3 JointHinge::GetAxis(void)
  48. {
  49. Vector3 retVal;
  50. dVector3 temp;
  51. dJointGetHingeAxis(this->_id, temp);
  52. retVal.x = temp[0];
  53. retVal.y = temp[1];
  54. retVal.z = temp[2];
  55. return retVal;
  56. }
  57. //SetAnchor
  58. void JointHinge::SetAnchor(double x, double y, double z)
  59. {
  60. dJointSetHingeAnchor(this->_id, x, y, z);
  61. }
  62. //GetAnchor
  63. Vector3 JointHinge::GetAnchor(void)
  64. {
  65. Vector3 retVal;
  66. dVector3 temp;
  67. dJointGetHingeAnchor(this->_id, temp);
  68. retVal.x = temp[0];
  69. retVal.y = temp[1];
  70. retVal.z = temp[2];
  71. return retVal;
  72. }
  73. //Movement Parameters
  74. //SetAllMovParams
  75. void JointHinge::SetAllMovParams(double LoStop, double HiStop,
  76. double Velocity, double MaxForce,
  77. double FudgeFactor, double Bounce,
  78. double StopERP, double StopCFM)
  79. {
  80. if (LoStop > -3.141592653 && LoStop <= 0)
  81. dJointSetHingeParam(this->_id, dParamLoStop, LoStop);
  82. if (HiStop < 3.141592653 && HiStop >= 0)
  83. dJointSetHingeParam(this->_id, dParamHiStop, HiStop);
  84. dJointSetHingeParam(this->_id, dParamVel, Velocity);
  85. dJointSetHingeParam(this->_id, dParamFMax, MaxForce);
  86. dJointSetHingeParam(this->_id, dParamFudgeFactor, FudgeFactor);
  87. dJointSetHingeParam(this->_id, dParamBounce, Bounce);
  88. dJointSetHingeParam(this->_id, dParamStopERP, StopERP);
  89. dJointSetHingeParam(this->_id, dParamStopCFM, StopCFM);
  90. }
  91. }