00001
00002 #include "PhysicsJointHinge.h"
00003
00004 #include "PhysicsManager.h"
00005
00006 namespace vrsode
00007 {
00008
00009 PhysicsJointHinge::PhysicsJointHinge(VRS::SO<PhysicsBody> p_bodyOne,
00010 VRS::SO<PhysicsBody> p_bodyTwo,
00011 VRS::Vector p_position,
00012 VRS::Vector p_axis)
00013 : PhysicsJoint(p_bodyOne, p_bodyTwo)
00014 {
00015 dBodyID bodyOne;
00016 dBodyID bodyTwo;
00017 p_bodyOne != 0 ? bodyOne = p_bodyOne->bodyId() : bodyOne = 0;
00018 p_bodyTwo != 0 ? bodyTwo = p_bodyTwo->bodyId() : bodyTwo = 0;
00019
00020 setJointId(dJointCreateHinge(PhysicsManager::get()->worldId(), 0));
00021 dJointAttach(jointId(), bodyOne, bodyTwo);
00022 dJointSetHingeAnchor(jointId(), p_position[0], p_position[1], p_position[2]);
00023 dJointSetHingeAxis(jointId(), p_axis[0], p_axis[1], p_axis[2]);
00024 dJointSetData(jointId(), this);
00025 }
00026
00027 PhysicsJointHinge::~PhysicsJointHinge()
00028 {
00029 dJointDestroy(jointId());
00030 }
00031
00032 void
00033 PhysicsJointHinge::setLowStop(double p_lowStop)
00034 {
00035 dJointSetHingeParam(jointId(), dParamLoStop, p_lowStop);
00036 }
00037
00038 void
00039 PhysicsJointHinge::setHighStop(double p_highStop)
00040 {
00041 dJointSetHingeParam(jointId(), dParamHiStop, p_highStop);
00042 }
00043
00044 void
00045 PhysicsJointHinge::setMotorVelocity(double p_velocity)
00046 {
00047 dJointSetHingeParam(jointId(), dParamVel, p_velocity);
00048 }
00049
00050 void
00051 PhysicsJointHinge::setMotorMaxForce(double p_maxForce)
00052 {
00053 dJointSetHingeParam(jointId(), dParamFMax, p_maxForce);
00054 }
00055
00056 void
00057 PhysicsJointHinge::setStopBounce(double p_bounce)
00058 {
00059 dJointSetHingeParam(jointId(), dParamBounce, p_bounce);
00060 }
00061
00062 void
00063 PhysicsJointHinge::setCFM(double p_cfm)
00064 {
00065 dJointSetHingeParam(jointId(), dParamCFM, p_cfm);
00066 }
00067
00068 }