00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <physics/ODEBallJoint>
00026 #include <physics/ODEConstraintGroup>
00027
00028 using physics::ODEBallJoint;
00029 using physics::ODEConstraintGroup;
00030
00031
00032 ODEBallJoint::ODEBallJoint()
00033 {
00034 }
00035
00036 ODEBallJoint::~ODEBallJoint()
00037 {
00038 }
00039
00040 void ODEBallJoint::onConstraintGroupAdd(ref<ConstraintGroup> g)
00041 {
00042 Assert(g != 0);
00043 Assert(instanceof(*g,ODEConstraintGroup));
00044 group = g;
00045
00046 ref<ODEConstraintGroup> ogroup = narrow_ref<ODEConstraintGroup>(group);
00047 setJointID( dJointCreateBall(ogroup->getWorldID(), ogroup->getJointGroupID()) );
00048 }
00049
00050
00051
00052 void ODEBallJoint::setAnchor(const Point3& p)
00053 {
00054 checkAddedAndAttached();
00055 Point3 gp( body1->getRelPointPos(p) );
00056 dJointSetBallAnchor(jointID, gp.x, gp.y, gp.z);
00057 }
00058
00059 base::Point3 ODEBallJoint::getAnchor() const
00060 {
00061 checkAddedAndAttached();
00062 dVector3 ogp;
00063 dJointGetBallAnchor(jointID, ogp);
00064 Point3 gp(ogp[0], ogp[1], ogp[2]);
00065 return body1->getGlobalPointRelPos(gp);
00066 }
00067
00068
00069
00070
00071 bool ODEBallJoint::hasMotor(Int dof) const
00072 {
00073 return false;
00074 }
00075
00076 void ODEBallJoint::setMotorTargetVel(Int dof, Real vel)
00077 {
00078 Assert(false);
00079 }
00080
00081 void ODEBallJoint::setMotorMaxForce(Int dof, Real force)
00082 {
00083 Assert(false);
00084 }