| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #include "stdafx.h"
- #include <ode/ode.h>
- #include "jointhinge.h"
- namespace ODEManaged
- {
- //Constructors
- JointHinge::JointHinge(void) : Joint(){}
- JointHinge::JointHinge(World &world)
- {
- if(this->_id) dJointDestroy(this->_id);
- _id = dJointCreateHinge(world.Id(), 0);
- }
-
- JointHinge::JointHinge(World &world, JointGroup &jointGroup)
- {
- if(this->_id) dJointDestroy(this->_id);
- _id = dJointCreateHinge(world.Id(), jointGroup.Id());
- }
- //Destructor
- JointHinge::~JointHinge(void){}
- //Methods
- //Overloaded Create
- void JointHinge::Create(World &world, JointGroup &jointGroup)
- {
- if(this->_id) dJointDestroy(this->_id);
- _id = dJointCreateHinge(world.Id(), jointGroup.Id());
- }
- void JointHinge::Create(World &world)
- {
- if(this->_id) dJointDestroy(this->_id);
- _id = dJointCreateHinge(world.Id(), 0);
- }
- //Overloaded Attach
- void JointHinge::Attach(Body &body1, Body &body2)
- {
- dJointAttach(this->_id, body1.Id(), body2.Id());
- }
- void JointHinge::Attach(Body &body1)
- {
- dJointAttach(this->_id, body1.Id(), 0);
- }
- //SetAxis
- void JointHinge::SetAxis(double x, double y, double z)
- {
- dJointSetHingeAxis(this->_id, x, y, z);
- }
- //GetAxis
- Vector3 JointHinge::GetAxis(void)
- {
- Vector3 retVal;
- dVector3 temp;
- dJointGetHingeAxis(this->_id, temp);
- retVal.x = temp[0];
- retVal.y = temp[1];
- retVal.z = temp[2];
- return retVal;
- }
- //SetAnchor
- void JointHinge::SetAnchor(double x, double y, double z)
- {
- dJointSetHingeAnchor(this->_id, x, y, z);
- }
- //GetAnchor
- Vector3 JointHinge::GetAnchor(void)
- {
- Vector3 retVal;
- dVector3 temp;
- dJointGetHingeAnchor(this->_id, temp);
- retVal.x = temp[0];
- retVal.y = temp[1];
- retVal.z = temp[2];
- return retVal;
- }
- //Movement Parameters
- //SetAllMovParams
- void JointHinge::SetAllMovParams(double LoStop, double HiStop,
- double Velocity, double MaxForce,
- double FudgeFactor, double Bounce,
- double StopERP, double StopCFM)
- {
- if (LoStop > -3.141592653 && LoStop <= 0)
- dJointSetHingeParam(this->_id, dParamLoStop, LoStop);
- if (HiStop < 3.141592653 && HiStop >= 0)
- dJointSetHingeParam(this->_id, dParamHiStop, HiStop);
- dJointSetHingeParam(this->_id, dParamVel, Velocity);
- dJointSetHingeParam(this->_id, dParamFMax, MaxForce);
- dJointSetHingeParam(this->_id, dParamFudgeFactor, FudgeFactor);
- dJointSetHingeParam(this->_id, dParamBounce, Bounce);
- dJointSetHingeParam(this->_id, dParamStopERP, StopERP);
- dJointSetHingeParam(this->_id, dParamStopCFM, StopCFM);
- }
-
- }
|