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. |