JointHinge2.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "StdAfx.h"
  2. #include <ode/ode.h>
  3. #include "jointhinge2.h"
  4. namespace ODEManaged
  5. {
  6. //Constructors
  7. JointHinge2::JointHinge2(void) : Joint(){}
  8. JointHinge2::JointHinge2(World &world)
  9. {
  10. if(this->_id) dJointDestroy(this->_id);
  11. _id = dJointCreateHinge2(world.Id(),0);
  12. }
  13. JointHinge2::JointHinge2(World &world, JointGroup &jointGroup)
  14. {
  15. if(this->_id) dJointDestroy(this->_id);
  16. _id = dJointCreateHinge2(world.Id(), jointGroup.Id());
  17. }
  18. //Destructor
  19. JointHinge2::~JointHinge2(void){}
  20. //CreateHinge2 (overload 1)
  21. void JointHinge2::Create(World &world, JointGroup &jointGroup)
  22. {
  23. if(this->_id) dJointDestroy(this->_id);
  24. _id = dJointCreateHinge2(world.Id(), jointGroup.Id());
  25. }
  26. //CreateHinge2 (overload 2)
  27. void JointHinge2::Create(World &world)
  28. {
  29. if(this->_id) dJointDestroy(this->_id);
  30. _id = dJointCreateHinge2(world.Id(),0);
  31. }
  32. //SetAnchor1
  33. void JointHinge2::SetAnchor (double x, double y ,double z)
  34. {
  35. dJointSetHinge2Anchor(_id, x,y,z);
  36. }
  37. //GetAnchor1
  38. Vector3 JointHinge2::GetAnchor()
  39. {
  40. Vector3 retVal;
  41. dVector3 temp;
  42. dJointGetHinge2Anchor(_id,temp);
  43. retVal.x = temp[0];
  44. retVal.y = temp[1];
  45. retVal.z = temp[2];
  46. return retVal;
  47. }
  48. //SetAxis1
  49. void JointHinge2::SetAxis1 (double x, double y ,double z)
  50. {
  51. dJointSetHinge2Axis1(_id, x,y,z);
  52. }
  53. //GetAxis1
  54. Vector3 JointHinge2::GetAxis1()
  55. {
  56. Vector3 retVal;
  57. dVector3 temp;
  58. dJointGetHinge2Axis1(_id,temp);
  59. retVal.x = temp[0];
  60. retVal.y = temp[1];
  61. retVal.z = temp[2];
  62. return retVal;
  63. }
  64. //SetAxis2
  65. void JointHinge2::SetAxis2 (double x, double y ,double z)
  66. {
  67. dJointSetHinge2Axis2(_id, x,y,z);
  68. }
  69. //GetAxis2
  70. Vector3 JointHinge2::GetAxis2()
  71. {
  72. Vector3 retVal;
  73. dVector3 temp;
  74. dJointGetHinge2Axis2(_id,temp);
  75. retVal.x = temp[0];
  76. retVal.y = temp[1];
  77. retVal.z = temp[2];
  78. return retVal;
  79. }
  80. //GetAngle1
  81. double JointHinge2::GetAngle1 ()
  82. {
  83. return dJointGetHinge2Angle1(this->_id);
  84. }
  85. //GetAngle1Rate
  86. double JointHinge2::GetAngle1Rate ()
  87. {
  88. return dJointGetHinge2Angle1Rate(this->_id);
  89. }
  90. ////GetAngle hmm, this doesn't exist
  91. //double JointHinge2::GetAngle2 ()
  92. //{
  93. // return dJointGetHinge2Angle2(this->_id);
  94. //}
  95. //GetAngle2Rate
  96. double JointHinge2::GetAngle2Rate ()
  97. {
  98. return dJointGetHinge2Angle2Rate(this->_id);
  99. }
  100. //Attach (overload 1)
  101. void JointHinge2::Attach (Body &body1, Body &body2)
  102. {
  103. dJointAttach(_id, body1.Id(),body2.Id());
  104. }
  105. //Attach (overload 2)
  106. //TODO: possibly add an overload that takes anchor as a param also.
  107. void JointHinge2::Attach (Body &body1)
  108. {
  109. dJointAttach(_id, body1.Id(),0);
  110. }
  111. }