OpenSimMirror/libraries/ode-0.9/contrib/DotNetManaged/JointHinge2.cpp

134 lines
2.5 KiB
C++

#include "StdAfx.h"
#include <ode/ode.h>
#include "jointhinge2.h"
namespace ODEManaged
{
//Constructors
JointHinge2::JointHinge2(void) : Joint(){}
JointHinge2::JointHinge2(World &world)
{
if(this->_id) dJointDestroy(this->_id);
_id = dJointCreateHinge2(world.Id(),0);
}
JointHinge2::JointHinge2(World &world, JointGroup &jointGroup)
{
if(this->_id) dJointDestroy(this->_id);
_id = dJointCreateHinge2(world.Id(), jointGroup.Id());
}
//Destructor
JointHinge2::~JointHinge2(void){}
//CreateHinge2 (overload 1)
void JointHinge2::Create(World &world, JointGroup &jointGroup)
{
if(this->_id) dJointDestroy(this->_id);
_id = dJointCreateHinge2(world.Id(), jointGroup.Id());
}
//CreateHinge2 (overload 2)
void JointHinge2::Create(World &world)
{
if(this->_id) dJointDestroy(this->_id);
_id = dJointCreateHinge2(world.Id(),0);
}
//SetAnchor1
void JointHinge2::SetAnchor (double x, double y ,double z)
{
dJointSetHinge2Anchor(_id, x,y,z);
}
//GetAnchor1
Vector3 JointHinge2::GetAnchor()
{
Vector3 retVal;
dVector3 temp;
dJointGetHinge2Anchor(_id,temp);
retVal.x = temp[0];
retVal.y = temp[1];
retVal.z = temp[2];
return retVal;
}
//SetAxis1
void JointHinge2::SetAxis1 (double x, double y ,double z)
{
dJointSetHinge2Axis1(_id, x,y,z);
}
//GetAxis1
Vector3 JointHinge2::GetAxis1()
{
Vector3 retVal;
dVector3 temp;
dJointGetHinge2Axis1(_id,temp);
retVal.x = temp[0];
retVal.y = temp[1];
retVal.z = temp[2];
return retVal;
}
//SetAxis2
void JointHinge2::SetAxis2 (double x, double y ,double z)
{
dJointSetHinge2Axis2(_id, x,y,z);
}
//GetAxis2
Vector3 JointHinge2::GetAxis2()
{
Vector3 retVal;
dVector3 temp;
dJointGetHinge2Axis2(_id,temp);
retVal.x = temp[0];
retVal.y = temp[1];
retVal.z = temp[2];
return retVal;
}
//GetAngle1
double JointHinge2::GetAngle1 ()
{
return dJointGetHinge2Angle1(this->_id);
}
//GetAngle1Rate
double JointHinge2::GetAngle1Rate ()
{
return dJointGetHinge2Angle1Rate(this->_id);
}
////GetAngle hmm, this doesn't exist
//double JointHinge2::GetAngle2 ()
//{
// return dJointGetHinge2Angle2(this->_id);
//}
//GetAngle2Rate
double JointHinge2::GetAngle2Rate ()
{
return dJointGetHinge2Angle2Rate(this->_id);
}
//Attach (overload 1)
void JointHinge2::Attach (Body &body1, Body &body2)
{
dJointAttach(_id, body1.Id(),body2.Id());
}
//Attach (overload 2)
//TODO: possibly add an overload that takes anchor as a param also.
void JointHinge2::Attach (Body &body1)
{
dJointAttach(_id, body1.Id(),0);
}
}