|
From: <a-...@us...> - 2009-12-04 09:19:01
|
Revision: 114
http://simspark.svn.sourceforge.net/simspark/?rev=114&view=rev
Author: a-held
Date: 2009-12-04 09:18:52 +0000 (Fri, 04 Dec 2009)
Log Message:
-----------
Completed bridge pattern for the RigidBody class
Modified Paths:
--------------
branches/multiphys/spark/lib/oxygen/physicsserver/body.h
branches/multiphys/spark/lib/oxygen/physicsserver/int/rigidbodyint.h
branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.cpp
branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.h
branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.cpp
branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.h
branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody_c.cpp
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/body.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/body.h 2009-12-03 09:04:19 UTC (rev 113)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/body.h 2009-12-04 09:18:52 UTC (rev 114)
@@ -23,7 +23,6 @@
#define OXYGEN_BODY_H
#include <oxygen/physicsserver/physicsobject.h>
-#include <oxygen/physicsserver/ode/odewrapper.h>
namespace oxygen
{
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/rigidbodyint.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/int/rigidbodyint.h 2009-12-03 09:04:19 UTC (rev 113)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/int/rigidbodyint.h 2009-12-04 09:18:52 UTC (rev 114)
@@ -41,7 +41,7 @@
virtual bool UsesGravity() const = 0;
virtual void CreateBody(long world) = 0;
virtual void SetMass(float mass) = 0;
- virtual void SetMassParameters(const dMass& mass) = 0;
+ virtual void SetMassParameters(const float& mass) = 0;
virtual float GetMass() const = 0;
virtual void GetMassParameters(float& mass) const = 0;
virtual void SetSphere(float density, float radius) = 0;
@@ -73,7 +73,7 @@
virtual salt::Vector3f GetPosition() const = 0;
virtual void DestroyPhysicsObject() = 0;
virtual salt::Matrix GetSynchronisationMatrix() = 0;
- virtual void AddMass(const dMass& mass, const salt::Matrix& matrix) = 0;
+ virtual void AddMass(const float& mass, const salt::Matrix& matrix) = 0;
//virtual salt::Vector3f GetMassCenter() const = 0;
virtual void BodySetData(RigidBody* rb) = 0;
virtual RigidBody* BodyGetData(long bodyID) = 0;
@@ -102,22 +102,22 @@
/** sets up an ode mass struct representing a box of the given
size and total_mass
*/
- virtual void PrepareBoxTotal(dMass& mass, float total_mass, const salt::Vector3f& size) const = 0;
+ virtual void PrepareBoxTotal(float& mass, float total_mass, const salt::Vector3f& size) const = 0;
/** sets up an ode mass struct representing a box of the given
density and size
*/
- virtual void PrepareBox(dMass& mass, float density, const salt::Vector3f& size) const = 0;
+ virtual void PrepareBox(float& mass, float density, const salt::Vector3f& size) const = 0;
/** sets up an ode mass struct representing a sphere of the given
density and radius
*/
- virtual void PrepareSphere(dMass& mass, float density, float radius) const = 0;
+ virtual void PrepareSphere(float& mass, float density, float radius) const = 0;
/** sets up an ode mass struct representing a sphere of the given
radius and total_mass
*/
- virtual void PrepareSphereTotal(dMass& mass, float total_mass, float radius) const = 0;
+ virtual void PrepareSphereTotal(float& mass, float total_mass, float radius) const = 0;
/** sets up an ode mass struct representing a flat-ended cylinder
of the given parameters and density, with the center of mass
@@ -125,7 +125,7 @@
radius. The length of the cylinder is length. The cylinder's
long axis is oriented along the body's z axis.
*/
- virtual void PrepareCylinder(dMass& mass, float density, float radius, float length) const = 0;
+ virtual void PrepareCylinder(float& mass, float density, float radius, float length) const = 0;
/** sets up an ode mass struct representing a flat-ended cylinder
of the given parameters and total mass, with the center of
@@ -133,7 +133,7 @@
cylinder is radius. The length of the cylinder is length. The
cylinder's long axis is oriented along the body's z axis.
*/
- virtual void PrepareCylinderTotal(dMass& mass, float total_mass, float radius, float length) const = 0;
+ virtual void PrepareCylinderTotal(float& mass, float total_mass, float radius, float length) const = 0;
/* sets up an ode mass struct representing a capsule of
the given parameters and density, with the center of mass at
@@ -142,7 +142,7 @@
counting the spherical cap) is length. The capsule's long axis
is oriented along the body's z axis.
*/
- virtual void PrepareCapsule(dMass& mass, float density, float radius, float length) const = 0;
+ virtual void PrepareCapsule(float& mass, float density, float radius, float length) const = 0;
/* sets up an ode mass struct representing a capsule of
the given parameters and total mass, with the center of mass at
@@ -151,7 +151,7 @@
counting the spherical cap) is length. The capsule's long axis
is oriented along the body's z axis.
*/
- virtual void PrepareCapsuleTotal(dMass& mass, float total_mass, float radius, float length) const = 0;
+ virtual void PrepareCapsuleTotal(float& mass, float total_mass, float radius, float length) const = 0;
protected:
long mBodyID;
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.cpp
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.cpp 2009-12-03 09:04:19 UTC (rev 113)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.cpp 2009-12-04 09:18:52 UTC (rev 114)
@@ -124,9 +124,10 @@
return m.mass;
}
-void ODERigidBody::AddMass(const dMass& mass, const Matrix& matrix)
+void ODERigidBody::AddMass(const float& mass, const Matrix& matrix)
{
- dMass transMass(mass);
+ dMass ODEMass = (dMass&) mass;
+ dMass transMass(ODEMass);
dMatrix3 rot;
ConvertRotationMatrix(matrix,(int&) rot);
@@ -161,178 +162,203 @@
void ODERigidBody::GetMassParameters(float& mass) const
{
- dMass& odeMass = (dMass&) mass;
- dBodyGetMass((dBodyID) mBodyID, &odeMass);
- mass = (float&) odeMass;
+ dMass& ODEMass = (dMass&) mass;
+ dBodyGetMass((dBodyID) mBodyID, &ODEMass);
+ mass = (float&) ODEMass;
}
-void ODERigidBody::SetMassParameters(const dMass& mass)
+void ODERigidBody::SetMassParameters(const float& mass)
{
- dBodySetMass((dBodyID) mBodyID, &mass);
+ dMass& ODEMass = (dMass&) mass;
+ dBodySetMass((dBodyID) mBodyID, &ODEMass);
}
-void ODERigidBody::PrepareSphere(dMass& mass, float density, float radius) const
+void ODERigidBody::PrepareSphere(float& mass, float density, float radius) const
{
- dMassSetSphere(&mass, density, radius);
+ dMass& ODEMass = (dMass&) mass;
+ dMassSetSphere(&ODEMass, density, radius);
}
void ODERigidBody::SetSphere(float density, float radius)
{
dMass ODEMass;
- PrepareSphere(ODEMass, density, radius);
+ float& massRef = (float&) ODEMass;
+ PrepareSphere(massRef, density, radius);
dBodySetMass((dBodyID) mBodyID, &ODEMass);
}
void ODERigidBody::AddSphere(float density, float radius, const Matrix& matrix)
{
dMass ODEMass;
- PrepareSphere(ODEMass, density, radius);
- AddMass(ODEMass, matrix);
+ float& massRef = (float&) ODEMass;
+ PrepareSphere(massRef, density, radius);
+ AddMass(massRef, matrix);
}
-void ODERigidBody::PrepareSphereTotal(dMass& mass, float total_mass, float radius) const
+void ODERigidBody::PrepareSphereTotal(float& mass, float total_mass, float radius) const
{
- dMassSetSphereTotal(&mass, total_mass, radius);
+ dMass& ODEMass = (dMass&) mass;
+ dMassSetSphereTotal(&ODEMass, total_mass, radius);
}
void ODERigidBody::SetSphereTotal(float total_mass, float radius)
{
dMass ODEMass;
- PrepareSphereTotal(ODEMass, total_mass, radius);
+ float& massRef = (float&) ODEMass;
+ PrepareSphereTotal(massRef, total_mass, radius);
dBodySetMass((dBodyID) mBodyID, &ODEMass);
}
void ODERigidBody::AddSphereTotal(float total_mass, float radius, const Matrix& matrix)
{
dMass ODEMass;
- PrepareSphereTotal(ODEMass, total_mass, radius);
- AddMass(ODEMass, matrix);
+ float& massRef = (float&) ODEMass;
+ PrepareSphereTotal(massRef, total_mass, radius);
+ AddMass(massRef, matrix);
}
-void ODERigidBody::PrepareBox(dMass& mass, float density, const Vector3f& size) const
+void ODERigidBody::PrepareBox(float& mass, float density, const Vector3f& size) const
{
- dMassSetBox(&mass, density, size[0], size[1], size[2]);
+ dMass& ODEMass = (dMass&) mass;
+ dMassSetBox(&ODEMass, density, size[0], size[1], size[2]);
}
void ODERigidBody::SetBox(float density, const Vector3f& size)
{
dMass ODEMass;
- PrepareBox(ODEMass, density, size);
+ float& massRef = (float&) ODEMass;
+ PrepareBox(massRef, density, size);
dBodySetMass((dBodyID) mBodyID, &ODEMass);
}
void ODERigidBody::AddBox(float density, const Vector3f& size, const Matrix& matrix)
{
dMass ODEMass;
- PrepareBox(ODEMass, density, size);
- AddMass(ODEMass, matrix);
+ float& massRef = (float&) ODEMass;
+ PrepareBox(massRef, density, size);
+ AddMass(massRef, matrix);
}
-void ODERigidBody::PrepareBoxTotal(dMass& mass, float total_mass, const Vector3f& size) const
+void ODERigidBody::PrepareBoxTotal(float& mass, float total_mass, const Vector3f& size) const
{
- dMassSetBoxTotal(&mass, total_mass, size[0], size[1], size[2]);
+ dMass& ODEMass = (dMass&) mass;
+ dMassSetBoxTotal(&ODEMass, total_mass, size[0], size[1], size[2]);
}
void ODERigidBody::SetBoxTotal(float total_mass, const Vector3f& size)
{
dMass ODEMass;
- PrepareBoxTotal(ODEMass, total_mass, size);
+ float& massRef = (float&) ODEMass;
+ PrepareBoxTotal(massRef, total_mass, size);
dBodySetMass((dBodyID) mBodyID, &ODEMass);
}
void ODERigidBody::AddBoxTotal(float total_mass, const Vector3f& size, const Matrix& matrix)
{
dMass ODEMass;
- PrepareBoxTotal(ODEMass, total_mass, size);
- AddMass(ODEMass, matrix);
+ float& massRef = (float&) ODEMass;
+ PrepareBoxTotal(massRef, total_mass, size);
+ AddMass(massRef, matrix);
}
-void ODERigidBody::PrepareCylinder (dMass& mass, float density, float radius, float length) const
+void ODERigidBody::PrepareCylinder (float& mass, float density, float radius, float length) const
{
// direction: (1=x, 2=y, 3=z)
int direction = 3;
- dMassSetCylinder (&mass, density, direction, radius, length);
+ dMass& ODEMass = (dMass&) mass;
+ dMassSetCylinder (&ODEMass, density, direction, radius, length);
}
void ODERigidBody::SetCylinder (float density, float radius, float length)
{
dMass ODEMass;
- PrepareCylinder(ODEMass, density, radius, length);
+ float& massRef = (float&) ODEMass;
+ PrepareCylinder(massRef, density, radius, length);
dBodySetMass((dBodyID) mBodyID, &ODEMass);
}
void ODERigidBody::AddCylinder (float density, float radius, float length, const Matrix& matrix)
{
dMass ODEMass;
- PrepareCylinder(ODEMass, density, radius, length);
- AddMass(ODEMass, matrix);
+ float& massRef = (float&) ODEMass;
+ PrepareCylinder(massRef, density, radius, length);
+ AddMass(massRef, matrix);
}
-void ODERigidBody::PrepareCylinderTotal(dMass& mass, float total_mass, float radius, float length) const
+void ODERigidBody::PrepareCylinderTotal(float& mass, float total_mass, float radius, float length) const
{
// direction: (1=x, 2=y, 3=z)
int direction = 3;
- dMassSetCylinderTotal(&mass, total_mass, direction, radius, length);
+ dMass& ODEMass = (dMass&) mass;
+ dMassSetCylinderTotal(&ODEMass, total_mass, direction, radius, length);
}
void ODERigidBody::SetCylinderTotal(float total_mass, float radius, float length)
{
dMass ODEMass;
- PrepareCylinderTotal(ODEMass, total_mass, radius, length);
+ float& massRef = (float&) ODEMass;
+ PrepareCylinderTotal(massRef, total_mass, radius, length);
dBodySetMass((dBodyID) mBodyID, &ODEMass);
}
void ODERigidBody::AddCylinderTotal(float total_mass, float radius, float length, const Matrix& matrix)
{
dMass ODEMass;
- PrepareCylinderTotal(ODEMass, total_mass, radius, length);
- AddMass(ODEMass, matrix);
+ float& massRef = (float&) ODEMass;
+ PrepareCylinderTotal(massRef, total_mass, radius, length);
+ AddMass(massRef, matrix);
}
-void ODERigidBody::PrepareCapsule (dMass& mass, float density, float radius, float length) const
+void ODERigidBody::PrepareCapsule (float& mass, float density, float radius, float length) const
{
// direction: (1=x, 2=y, 3=z)
int direction = 3;
- dMassSetCapsule (&mass, density, direction, radius, length);
+ dMass ODEMass = (dMass&) mass;
+ dMassSetCapsule (&ODEMass, density, direction, radius, length);
}
void ODERigidBody::SetCapsule (float density, float radius, float length)
{
dMass ODEMass;
- PrepareCapsule(ODEMass, density, radius, length);
+ float& massRef = (float&) ODEMass;
+ PrepareCapsule(massRef, density, radius, length);
dBodySetMass((dBodyID) mBodyID, &ODEMass);
}
void ODERigidBody::AddCapsule (float density, float radius, float length, const Matrix& matrix)
{
dMass ODEMass;
- PrepareCapsule(ODEMass, density, radius, length);
- AddMass(ODEMass, matrix);
+ float& massRef = (float&) ODEMass;
+ PrepareCapsule(massRef, density, radius, length);
+ AddMass(massRef, matrix);
}
-void ODERigidBody::PrepareCapsuleTotal(dMass& mass, float total_mass, float radius, float length) const
+void ODERigidBody::PrepareCapsuleTotal(float& mass, float total_mass, float radius, float length) const
{
// direction: (1=x, 2=y, 3=z)
int direction = 3;
- dMassSetCapsuleTotal(&mass, total_mass, direction, radius, length);
+ dMass& ODEMass = (dMass&) mass;
+ dMassSetCapsuleTotal(&ODEMass, total_mass, direction, radius, length);
}
void ODERigidBody::SetCapsuleTotal(float total_mass, float radius, float length)
{
dMass ODEMass;
- PrepareCapsuleTotal(ODEMass, total_mass, radius, length);
+ float& massRef = (float&) ODEMass;
+ PrepareCapsuleTotal(massRef, total_mass, radius, length);
dBodySetMass((dBodyID) mBodyID, &ODEMass);
}
void ODERigidBody::AddCapsuleTotal(float total_mass, float radius, float length, const salt::Matrix& matrix)
{
dMass ODEMass;
- PrepareCapsuleTotal(ODEMass, total_mass, radius, length);
- AddMass(ODEMass, matrix);
+ float& massRef = (float&) ODEMass;
+ PrepareCapsuleTotal(massRef, total_mass, radius, length);
+ AddMass(massRef, matrix);
}
Vector3f ODERigidBody::GetVelocity() const
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.h 2009-12-03 09:04:19 UTC (rev 113)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.h 2009-12-04 09:18:52 UTC (rev 114)
@@ -38,10 +38,10 @@
void UseGravity(bool f);
bool UsesGravity() const;
void SetMass(float mass);
- void SetMassParameters(const dMass& mass);
+ void SetMassParameters(const float& mass);
float GetMass() const;
void GetMassParameters(float& mass) const;
- void AddMass(const dMass& mass, const salt::Matrix& matrix);
+ void AddMass(const float& mass, const salt::Matrix& matrix);
void SetSphere(float density, float radius);
void AddSphere(float density, float radius, const salt::Matrix& matrix);
void SetSphereTotal(float total_mass, float radius);
@@ -83,14 +83,14 @@
protected:
void CreateBody(long world);
- void PrepareBoxTotal(dMass& mass, float total_mass, const salt::Vector3f& size) const;
- void PrepareBox(dMass& mass, float density, const salt::Vector3f& size) const;
- void PrepareSphere(dMass& mass, float density, float radius) const;
- void PrepareSphereTotal(dMass& mass, float total_mass, float radius) const;
- void PrepareCylinder(dMass& mass, float density, float radius, float length) const;
- void PrepareCylinderTotal(dMass& mass, float total_mass, float radius, float length) const;
- void PrepareCapsule(dMass& mass, float density, float radius, float length) const;
- void PrepareCapsuleTotal(dMass& mass, float total_mass, float radius, float length) const;
+ void PrepareBoxTotal(float& mass, float total_mass, const salt::Vector3f& size) const;
+ void PrepareBox(float& mass, float density, const salt::Vector3f& size) const;
+ void PrepareSphere(float& mass, float density, float radius) const;
+ void PrepareSphereTotal(float& mass, float total_mass, float radius) const;
+ void PrepareCylinder(float& mass, float density, float radius, float length) const;
+ void PrepareCylinderTotal(float& mass, float total_mass, float radius, float length) const;
+ void PrepareCapsule(float& mass, float density, float radius, float length) const;
+ void PrepareCapsuleTotal(float& mass, float total_mass, float radius, float length) const;
};
} //namespace oxygen
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.cpp
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.cpp 2009-12-03 09:04:19 UTC (rev 113)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.cpp 2009-12-04 09:18:52 UTC (rev 114)
@@ -131,7 +131,7 @@
return mRigidBodyImp->GetMass();
}
-void RigidBody::AddMass(const dMass& mass, const Matrix& matrix)
+void RigidBody::AddMass(const float& mass, const Matrix& matrix)
{
mRigidBodyImp->AddMass(mass, matrix);
}
@@ -141,7 +141,7 @@
mRigidBodyImp->GetMassParameters(mass);
}
-void RigidBody::SetMassParameters(const dMass& mass)
+void RigidBody::SetMassParameters(const float& mass)
{
mRigidBodyImp->SetMassParameters(mass);
}
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.h 2009-12-03 09:04:19 UTC (rev 113)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.h 2009-12-04 09:18:52 UTC (rev 114)
@@ -78,7 +78,7 @@
void SetMass(float mass);
/** set the ODE mass parameters of this body */
- void SetMassParameters(const dMass& mass);
+ void SetMassParameters(const float& mass);
/** returns the mass of this body */
float GetMass() const;
@@ -89,7 +89,7 @@
/** adds the given ode mass to this body. The given matrix is
applied to the mass center
*/
- void AddMass(const dMass& mass, const salt::Matrix& matrix);
+ void AddMass(const float& mass, const salt::Matrix& matrix);
/** sets the mass parameters to represent a sphere of the given
radius and density, with the center of mass at (0,0,0)
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody_c.cpp
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody_c.cpp 2009-12-03 09:04:19 UTC (rev 113)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody_c.cpp 2009-12-04 09:18:52 UTC (rev 114)
@@ -20,6 +20,7 @@
*/
#include <oxygen/physicsserver/rigidbody.h>
+#include <oxygen/physicsserver/ode/odewrapper.h>
using namespace boost;
using namespace oxygen;
@@ -100,7 +101,8 @@
}
}
- obj->SetMassParameters(mass);
+ float& massRef = (float&) mass;
+ obj->SetMassParameters(massRef);
return true;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|