From: <a-...@us...> - 2010-01-26 11:23:50
|
Revision: 151 http://simspark.svn.sourceforge.net/simspark/?rev=151&view=rev Author: a-held Date: 2010-01-26 11:23:42 +0000 (Tue, 26 Jan 2010) Log Message: ----------- Corrected some code so that really nothing is stored in implementation objects Modified Paths: -------------- branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.cpp branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.h branches/multiphys/spark/lib/oxygen/physicsserver/int/contactjointhandlerint.h branches/multiphys/spark/lib/oxygen/physicsserver/int/jointint.h branches/multiphys/spark/lib/oxygen/physicsserver/int/worldint.h branches/multiphys/spark/lib/oxygen/physicsserver/joint.cpp branches/multiphys/spark/lib/oxygen/physicsserver/joint.h branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.cpp branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.h branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.cpp branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.h branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.cpp branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.h branches/multiphys/spark/lib/oxygen/physicsserver/world.cpp branches/multiphys/spark/lib/oxygen/physicsserver/world.h branches/multiphys/spark/plugin/collisionperceptor/touchperceptorhandler.cpp Modified: branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.cpp 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.cpp 2010-01-26 11:23:42 UTC (rev 151) @@ -32,11 +32,12 @@ ContactJointHandler::ContactJointHandler() : CollisionHandler() { mContactJointHandlerImp = boost::shared_ptr<ODEContactJointHandler>(new ODEContactJointHandler()); - mContactJointHandlerImp->Initialize(); + mSurfaceParameter = mContactJointHandlerImp->Initialize(); } ContactJointHandler::~ContactJointHandler() { + delete mSurfaceParameter; } void @@ -75,7 +76,7 @@ // calculate the resulting surface parameters mContactJointHandlerImp->CalcSurfaceParam( - contact, handler->GetSurfaceParameter()); + contact, handler->GetSurfaceParameter(), mSurfaceParameter); // create the contact joint and attach it to the body long joint = mContactJointHandlerImp->CreateContactJoint( @@ -87,120 +88,115 @@ void ContactJointHandler::SetSurfaceParameter(const GenericSurfaceParameter& surface) { - mContactJointHandlerImp->SetSurfaceParameter(surface); + GenericSurfaceParameter* newSurface = (GenericSurfaceParameter*) &surface; + mSurfaceParameter = newSurface; } GenericSurfaceParameter& ContactJointHandler::GetSurfaceParameter() const { - return mContactJointHandlerImp->GetSurfaceParameter(); + return (GenericSurfaceParameter&) *mSurfaceParameter; } -void -ContactJointHandler::SetContactMode(int mode, bool set) -{ - mContactJointHandlerImp->SetContactMode(mode, set); -} - int ContactJointHandler::GetContactMode() const { - return mContactJointHandlerImp->GetContactMode(); + return mContactJointHandlerImp->GetContactMode(mSurfaceParameter); } void ContactJointHandler::SetContactBounceMode(bool set) { - mContactJointHandlerImp->SetContactBounceMode(set); + mContactJointHandlerImp->SetContactBounceMode(set, mSurfaceParameter); } void ContactJointHandler::SetMinBounceVel(float vel) { - mContactJointHandlerImp->SetMinBounceVel(vel); + mContactJointHandlerImp->SetMinBounceVel(vel, mSurfaceParameter); } float ContactJointHandler::GetMinBounceVel() const { - return mContactJointHandlerImp->GetMinBounceVel(); + return mContactJointHandlerImp->GetMinBounceVel(mSurfaceParameter); } void ContactJointHandler::SetBounceValue(float bounce) { - mContactJointHandlerImp->SetBounceValue(bounce); + mContactJointHandlerImp->SetBounceValue(bounce, mSurfaceParameter); } float ContactJointHandler::GetBounceValue() const { - return mContactJointHandlerImp->GetBounceValue(); + return mContactJointHandlerImp->GetBounceValue(mSurfaceParameter); } void ContactJointHandler::SetContactSoftERPMode(bool set) { - mContactJointHandlerImp->SetContactSoftERPMode(set); + mContactJointHandlerImp->SetContactSoftERPMode(set, mSurfaceParameter); } void ContactJointHandler::SetContactSoftERP(float erp) { - mContactJointHandlerImp->SetContactSoftERP(erp); + mContactJointHandlerImp->SetContactSoftERP(erp, mSurfaceParameter); } float ContactJointHandler::GetContactSoftERP() const { - return mContactJointHandlerImp->GetContactSoftERP(); + return mContactJointHandlerImp->GetContactSoftERP(mSurfaceParameter); } void ContactJointHandler::SetContactSoftCFMMode(bool set) { - mContactJointHandlerImp->SetContactSoftCFMMode(set); + mContactJointHandlerImp->SetContactSoftCFMMode(set, mSurfaceParameter); } void ContactJointHandler::SetContactSoftCFM(float cfm) { - mContactJointHandlerImp->SetContactSoftCFM(cfm); + mContactJointHandlerImp->SetContactSoftCFM(cfm, mSurfaceParameter); } float ContactJointHandler::GetContactSoftCFM() const { - return mContactJointHandlerImp->GetContactSoftCFM(); + return mContactJointHandlerImp->GetContactSoftCFM(mSurfaceParameter); } void ContactJointHandler::SetContactSlipMode (bool set) { - mContactJointHandlerImp->SetContactSlipMode(set); + mContactJointHandlerImp->SetContactSlipMode(set, mSurfaceParameter); } void ContactJointHandler::SetContactSlip(float slip) { - mContactJointHandlerImp->SetContactSlip(slip); + mContactJointHandlerImp->SetContactSlip(slip, mSurfaceParameter); } float ContactJointHandler::GetContactSlip1() const { - return mContactJointHandlerImp->GetContactSlip1(); + return mContactJointHandlerImp->GetContactSlip1(mSurfaceParameter); } float ContactJointHandler::GetContactSlip2() const { - return mContactJointHandlerImp->GetContactSlip2(); + return mContactJointHandlerImp->GetContactSlip2(mSurfaceParameter); } void ContactJointHandler::SetContactMu(float mu) { - mContactJointHandlerImp->SetContactMu(mu); + mContactJointHandlerImp->SetContactMu(mu, mSurfaceParameter); } float ContactJointHandler::GetContactMu() const { - return mContactJointHandlerImp->GetContactMu(); + return mContactJointHandlerImp->GetContactMu(mSurfaceParameter); } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.h 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.h 2010-01-26 11:23:42 UTC (rev 151) @@ -70,9 +70,6 @@ */ GenericSurfaceParameter& GetSurfaceParameter() const; - /** sets or resets a contact mode flag in the surface parameter*/ - void SetContactMode(int mode, bool set); - /** returns the current set of contact mode flags in the surface parameter */ @@ -142,6 +139,8 @@ protected: boost::shared_ptr<ContactJointHandlerInt> mContactJointHandlerImp; + + GenericSurfaceParameter* mSurfaceParameter; }; DECLARE_CLASS(ContactJointHandler); Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/contactjointhandlerint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/int/contactjointhandlerint.h 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/int/contactjointhandlerint.h 2010-01-26 11:23:42 UTC (rev 151) @@ -35,36 +35,31 @@ { public: virtual float MixValues(const float v1, const float v2, const int n) const = 0; - virtual void Initialize() = 0; + virtual GenericSurfaceParameter* Initialize() = 0; virtual long RetrieveBody(long geomID) = 0; virtual long CreateContactJoint(long worldID, long jointGroupID, GenericContact& contact) = 0; virtual void AttachContactJoint(long jointID, long bodyID1, long bodyID2) = 0; - virtual void CalcSurfaceParam(GenericContact& surface, GenericSurfaceParameter& collideeParam) = 0; - - virtual void SetSurfaceParameter(const GenericSurfaceParameter& surface) = 0; - virtual GenericSurfaceParameter& GetSurfaceParameter() const = 0; - virtual void SetContactMode(int mode, bool set) = 0; - virtual int GetContactMode() const = 0; - virtual void SetContactBounceMode(bool set) = 0; - virtual void SetBounceValue(float bounce) = 0; - virtual float GetBounceValue() const = 0; - virtual void SetMinBounceVel(float vel) = 0; - virtual float GetMinBounceVel() const = 0; - virtual void SetContactSoftERPMode(bool set) = 0; - virtual void SetContactSoftERP(float erp) = 0; - virtual float GetContactSoftERP() const = 0; - virtual void SetContactSoftCFMMode(bool set) = 0; - virtual void SetContactSoftCFM(float cfm) = 0; - virtual float GetContactSoftCFM() const = 0; - virtual void SetContactSlipMode (bool set) = 0; - virtual void SetContactSlip(float slip) = 0; - virtual float GetContactSlip1() const = 0; - virtual float GetContactSlip2() const = 0; - virtual void SetContactMu(float mu) = 0; - virtual float GetContactMu() const = 0; - - /** the ODE surface parameters of the created contact joint */ - dSurfaceParameters mSurfaceParameter; + virtual void CalcSurfaceParam(GenericContact& surface, + GenericSurfaceParameter& collideeParam, + GenericSurfaceParameter* surfacePtr) = 0; + virtual int GetContactMode(GenericSurfaceParameter* surface) const = 0; + virtual void SetContactBounceMode(bool set, GenericSurfaceParameter* surface) = 0; + virtual void SetBounceValue(float bounce, GenericSurfaceParameter* surface) = 0; + virtual float GetBounceValue(GenericSurfaceParameter* surface) const = 0; + virtual void SetMinBounceVel(float vel, GenericSurfaceParameter* surface) = 0; + virtual float GetMinBounceVel(GenericSurfaceParameter* surface) const = 0; + virtual void SetContactSoftERPMode(bool set, GenericSurfaceParameter* surface) = 0; + virtual void SetContactSoftERP(float erp, GenericSurfaceParameter* surface) = 0; + virtual float GetContactSoftERP(GenericSurfaceParameter* surface) const = 0; + virtual void SetContactSoftCFMMode(bool set, GenericSurfaceParameter* surface) = 0; + virtual void SetContactSoftCFM(float cfm, GenericSurfaceParameter* surface) = 0; + virtual float GetContactSoftCFM(GenericSurfaceParameter* surface) const = 0; + virtual void SetContactSlipMode (bool set, GenericSurfaceParameter* surface) = 0; + virtual void SetContactSlip(float slip, GenericSurfaceParameter* surface) = 0; + virtual float GetContactSlip1(GenericSurfaceParameter* surface) const = 0; + virtual float GetContactSlip2(GenericSurfaceParameter* surface) const = 0; + virtual void SetContactMu(float mu, GenericSurfaceParameter* surface) = 0; + virtual float GetContactMu(GenericSurfaceParameter* surface) const = 0; }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/jointint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/int/jointint.h 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/int/jointint.h 2010-01-26 11:23:42 UTC (rev 151) @@ -39,14 +39,18 @@ { public: - virtual void DestroyJoint(long jointID) = 0; + virtual void DestroyJoint(long jointID, + boost::shared_ptr<GenericJointFeedback> feedback) = 0; virtual void Attach(long bodyID1, long bodiID2, long jointID) = 0; virtual int GetType(long jointID) const = 0; virtual long GetBodyID(int idx, long jointID) = 0; - virtual void EnableFeedback(bool enable, long jointID) = 0; + virtual void EnableFeedback(bool enable, long jointID, + boost::shared_ptr<GenericJointFeedback> feedback) = 0; virtual bool FeedbackEnabled(long jointID) const = 0; - virtual salt::Vector3f GetFeedbackForce(int idx) const = 0; - virtual salt::Vector3f GetFeedbackTorque(int idx) const = 0; + virtual salt::Vector3f GetFeedbackForce(int idx, + boost::shared_ptr<GenericJointFeedback> feedback) const = 0; + virtual salt::Vector3f GetFeedbackTorque(int idx, + boost::shared_ptr<GenericJointFeedback> feedback) const = 0; virtual void SetFudgeFactor(int idx, float fudge_factor, long jointID) = 0; virtual float GetFudgeFactor(int idx, long jointID) const = 0; virtual void SetBounce(int idx, float bounce, long jointID) = 0; Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/worldint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/int/worldint.h 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/int/worldint.h 2010-01-26 11:23:42 UTC (rev 151) @@ -32,23 +32,19 @@ { public: - virtual long GetWorldID() const = 0; - virtual void SetGravity(const salt::Vector3f& gravity) = 0; - virtual salt::Vector3f GetGravity() const = 0; - virtual void SetERP(float erp) = 0; - virtual float GetERP() const = 0; - virtual void SetCFM(float cfm) = 0; - virtual float GetCFM() const = 0; - virtual void Step(float deltaTime) = 0; - virtual bool GetAutoDisableFlag() const = 0; - virtual void SetAutoDisableFlag(bool flag) = 0; - virtual void SetContactSurfaceLayer(float depth) = 0; - virtual float GetContactSurfaceLayer() const = 0; - virtual void CreateWorld() = 0; - virtual void DestroyWorld() = 0; - -protected: - long mWorldID; + virtual void SetGravity(const salt::Vector3f& gravity, long worldID) = 0; + virtual salt::Vector3f GetGravity(long worldID) const = 0; + virtual void SetERP(float erp, long worldID) = 0; + virtual float GetERP(long worldID) const = 0; + virtual void SetCFM(float cfm, long worldID) = 0; + virtual float GetCFM(long worldID) const = 0; + virtual void Step(float deltaTime, long worldID) = 0; + virtual bool GetAutoDisableFlag(long worldID) const = 0; + virtual void SetAutoDisableFlag(bool flag, long worldID) = 0; + virtual void SetContactSurfaceLayer(float depth, long worldID) = 0; + virtual float GetContactSurfaceLayer(long worldID) const = 0; + virtual long CreateWorld() = 0; + virtual void DestroyWorld(long worldID) = 0; }; } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/joint.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/joint.cpp 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/joint.cpp 2010-01-26 11:23:42 UTC (rev 151) @@ -208,7 +208,7 @@ void Joint::EnableFeedback(bool enable) { - mJointImp->EnableFeedback(enable, mJointID); + mJointImp->EnableFeedback(enable, mJointID, mFeedback); } bool Joint::FeedBackEnabled() const @@ -218,12 +218,12 @@ Vector3f Joint::GetFeedbackForce(EBodyIndex idx) const { - return mJointImp->GetFeedbackForce(idx); + return mJointImp->GetFeedbackForce(idx, mFeedback); } Vector3f Joint::GetFeedbackTorque(EBodyIndex idx) const { - return mJointImp->GetFeedbackTorque(idx); + return mJointImp->GetFeedbackTorque(idx, mFeedback); } void Joint::SetFudgeFactor(EAxisIndex idx, float fudge_factor) @@ -374,7 +374,7 @@ } EnableFeedback(false); - mJointImp->DestroyJoint(mJointID); + mJointImp->DestroyJoint(mJointID, mFeedback); mJointID = 0; } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/joint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/joint.h 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/joint.h 2010-01-26 11:23:42 UTC (rev 151) @@ -279,11 +279,15 @@ /** gets the node at 'path' and tries a cast to Body */ boost::shared_ptr<RigidBody> GetBody(const std::string& path); -protected: + // + // Members + // + /** the ID of the managed joint */ long mJointID; + + boost::shared_ptr<GenericJointFeedback> mFeedback; -protected: /** The maximum joint speed in rad, valid for both hingejoint and universaljoint */ float mJointMaxSpeed1; bool mIsLimitJointMaxSpeed1; Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.cpp 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.cpp 2010-01-26 11:23:42 UTC (rev 151) @@ -25,18 +25,22 @@ } -void ODEContactJointHandler::Initialize(){ +GenericSurfaceParameter* ODEContactJointHandler::Initialize(){ + dSurfaceParameters* ODESurface = new dSurfaceParameters(); + // set up default contact surface parameters - mSurfaceParameter.mode = dContactBounce; - mSurfaceParameter.mu = dInfinity; - mSurfaceParameter.bounce = 0.8f; - mSurfaceParameter.bounce_vel = 2.0f; + ODESurface->mode = dContactBounce; + ODESurface->mu = dInfinity; + ODESurface->bounce = 0.8f; + ODESurface->bounce_vel = 2.0f; // In contactjointhandler_c.cpp, setContactSlip function, only // accept one parameter, so two parameter is a mistake, and then // these two value will be not initialized, but slipe mode is open - mSurfaceParameter.slip1 = 5e-3; - mSurfaceParameter.slip2 = 5e-3; + ODESurface->slip1 = 5e-3; + ODESurface->slip2 = 5e-3; + + return (GenericSurfaceParameter*) ODESurface; } long ODEContactJointHandler::RetrieveBody(long geomID){ @@ -66,11 +70,14 @@ } void -ODEContactJointHandler::CalcSurfaceParam(GenericContact& surface, GenericSurfaceParameter& collideeParam){ +ODEContactJointHandler::CalcSurfaceParam(GenericContact& surface, + GenericSurfaceParameter& collideeParam, + GenericSurfaceParameter* surfacePtr){ dContact& ODEContact = (dContact&) surface; dSurfaceParameters& ODEParams = (dSurfaceParameters&) collideeParam; + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surfacePtr; - CalcSurfaceParamInternal(ODEContact.surface, ODEParams); + CalcSurfaceParamInternal(ODEContact.surface, ODEParams, ODESurface); } float @@ -99,209 +106,215 @@ void ODEContactJointHandler::CalcSurfaceParamInternal(dSurfaceParameters& surface, - const dSurfaceParameters& collideeParam) + const dSurfaceParameters& collideeParam, + const dSurfaceParameters* surfacePtr) { // init surface surface.mode = 0; // calculate average mu; mu can be dInfinity, so first multiply with // 0.5 and the sum up to avoid a range error - surface.mu = mSurfaceParameter.mu*0.5f + collideeParam.mu*0.5f; + surface.mu = surfacePtr->mu*0.5f + collideeParam.mu*0.5f; // soft cfm const int nCfm = - ((mSurfaceParameter.mode & dContactSoftCFM) ? 1:0) + + ((surfacePtr->mode & dContactSoftCFM) ? 1:0) + ((collideeParam.mode & dContactSoftCFM) ? 2:0); if (nCfm>0) { surface.soft_cfm = MixValues - (mSurfaceParameter.soft_cfm, collideeParam.soft_cfm, nCfm); + (surfacePtr->soft_cfm, collideeParam.soft_cfm, nCfm); surface.mode |= dContactSoftCFM; } // soft_erp const int nErp = - ((mSurfaceParameter.mode & dContactSoftERP) ? 1:0) + + ((surfacePtr->mode & dContactSoftERP) ? 1:0) + ((collideeParam.mode & dContactSoftERP) ? 2:0); if (nErp>0) { surface.soft_erp = MixValues - (mSurfaceParameter.soft_erp, collideeParam.soft_erp, nErp); + (surfacePtr->soft_erp, collideeParam.soft_erp, nErp); surface.mode |= dContactSoftERP; } // bounce const int nBounce = - ((mSurfaceParameter.mode & dContactBounce) ? 1:0) + + ((surfacePtr->mode & dContactBounce) ? 1:0) + ((collideeParam.mode & dContactBounce) ? 2:0); if (nBounce>0) { surface.bounce = MixValues - (mSurfaceParameter.bounce, collideeParam.bounce, nBounce); + (surfacePtr->bounce, collideeParam.bounce, nBounce); surface.bounce_vel = MixValues - (mSurfaceParameter.bounce_vel, collideeParam.bounce_vel, nBounce); + (surfacePtr->bounce_vel, collideeParam.bounce_vel, nBounce); surface.mode |= dContactBounce; } // slip1 const int nSlip1 = - ((mSurfaceParameter.mode & dContactSlip1) ? 1 : 0) + + ((surfacePtr->mode & dContactSlip1) ? 1 : 0) + ((collideeParam.mode & dContactSlip1) ? 2 : 0); if (nSlip1 > 0) { surface.slip1 = MixValues - (mSurfaceParameter.slip1, collideeParam.slip1, nSlip1); + (surfacePtr->slip1, collideeParam.slip1, nSlip1); surface.mode |= dContactSlip1; } // slip2 const int nSlip2 = - ((mSurfaceParameter.mode & dContactSlip2) ? 1 : 0) + + ((surfacePtr->mode & dContactSlip2) ? 1 : 0) + ((collideeParam.mode & dContactSlip2) ? 2 : 0); if (nSlip2 > 0) { surface.slip2 = MixValues - (mSurfaceParameter.slip2, collideeParam.slip2, nSlip2); + (surfacePtr->slip2, collideeParam.slip2, nSlip2); surface.mode |= dContactSlip2; } } void -ODEContactJointHandler::SetSurfaceParameter(const GenericSurfaceParameter& surface) +ODEContactJointHandler::SetContactMode(int mode, bool set, dSurfaceParameters* ODESurface) { - dSurfaceParameters& ODESurface = (dSurfaceParameters&) surface; - mSurfaceParameter = ODESurface; -} - -GenericSurfaceParameter& -ODEContactJointHandler::GetSurfaceParameter() const -{ - return (GenericSurfaceParameter&) mSurfaceParameter; -} - -void -ODEContactJointHandler::SetContactMode(int mode, bool set) -{ if (set) { - mSurfaceParameter.mode |= mode; + ODESurface->mode |= mode; } else { - mSurfaceParameter.mode &= ~mode; + ODESurface->mode &= ~mode; } } int -ODEContactJointHandler::GetContactMode() const +ODEContactJointHandler::GetContactMode(GenericSurfaceParameter* surface) const { - return mSurfaceParameter.mode; + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + return ODESurface->mode; } void -ODEContactJointHandler::SetContactBounceMode(bool set) +ODEContactJointHandler::SetContactBounceMode(bool set, GenericSurfaceParameter* surface) { - SetContactMode(dContactBounce,set); + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + SetContactMode(dContactBounce, set, ODESurface); } void -ODEContactJointHandler::SetMinBounceVel(float vel) +ODEContactJointHandler::SetMinBounceVel(float vel, GenericSurfaceParameter* surface) { - mSurfaceParameter.bounce_vel = std::max<float>(0.0f,vel); + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + ODESurface->bounce_vel = std::max<float>(0.0f,vel); } float -ODEContactJointHandler::GetMinBounceVel() const +ODEContactJointHandler::GetMinBounceVel(GenericSurfaceParameter* surface) const { - return mSurfaceParameter.bounce_vel; + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + return ODESurface->bounce_vel; } void -ODEContactJointHandler::SetBounceValue(float bounce) +ODEContactJointHandler::SetBounceValue(float bounce, GenericSurfaceParameter* surface) { - mSurfaceParameter.bounce = std::max<float>(0.0f,bounce); + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + ODESurface->bounce = std::max<float>(0.0f,bounce); } float -ODEContactJointHandler::GetBounceValue() const +ODEContactJointHandler::GetBounceValue(GenericSurfaceParameter* surface) const { - return mSurfaceParameter.bounce; + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + return ODESurface->bounce; } void -ODEContactJointHandler::SetContactSoftERPMode(bool set) +ODEContactJointHandler::SetContactSoftERPMode(bool set, GenericSurfaceParameter* surface) { - SetContactMode(dContactSoftERP,set); + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + SetContactMode(dContactSoftERP, set, ODESurface); } void -ODEContactJointHandler::SetContactSoftERP(float erp) -{ +ODEContactJointHandler::SetContactSoftERP(float erp, GenericSurfaceParameter* surface) +{ + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; salt::gClamp(erp,0.0f,1.0f); - mSurfaceParameter.soft_erp = erp; + ODESurface->soft_erp = erp; } float -ODEContactJointHandler::GetContactSoftERP() const +ODEContactJointHandler::GetContactSoftERP(GenericSurfaceParameter* surface) const { - return mSurfaceParameter.soft_erp; + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + return ODESurface->soft_erp; } void -ODEContactJointHandler::SetContactSoftCFMMode(bool set) +ODEContactJointHandler::SetContactSoftCFMMode(bool set, GenericSurfaceParameter* surface) { - SetContactMode(dContactSoftCFM,set); + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + SetContactMode(dContactSoftCFM, set, ODESurface); } void -ODEContactJointHandler::SetContactSoftCFM(float cfm) +ODEContactJointHandler::SetContactSoftCFM(float cfm, GenericSurfaceParameter* surface) { - mSurfaceParameter.soft_cfm = std::max<float>(0.0f,cfm); + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + ODESurface->soft_cfm = std::max<float>(0.0f,cfm); } -float ODEContactJointHandler::GetContactSoftCFM() const +float ODEContactJointHandler::GetContactSoftCFM(GenericSurfaceParameter* surface) const { - return mSurfaceParameter.soft_cfm; + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + return ODESurface->soft_cfm; } -void ODEContactJointHandler::SetContactSlipMode (bool set) +void ODEContactJointHandler::SetContactSlipMode (bool set, GenericSurfaceParameter* surface) { - SetContactMode(dContactSlip1,set); - SetContactMode(dContactSlip2,set); + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + SetContactMode(dContactSlip1,set,ODESurface); + SetContactMode(dContactSlip2,set,ODESurface); } -void ODEContactJointHandler::SetContactSlip(float slip) +void ODEContactJointHandler::SetContactSlip(float slip, GenericSurfaceParameter* surface) { - mSurfaceParameter.slip1 = slip; - mSurfaceParameter.slip2 = slip; + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + ODESurface->slip1 = slip; + ODESurface->slip2 = slip; } float -ODEContactJointHandler::GetContactSlip1() const +ODEContactJointHandler::GetContactSlip1(GenericSurfaceParameter* surface) const { - return mSurfaceParameter.slip1; + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + return ODESurface->slip1; } float -ODEContactJointHandler::GetContactSlip2() const +ODEContactJointHandler::GetContactSlip2(GenericSurfaceParameter* surface) const { - return mSurfaceParameter.slip2; + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + return ODESurface->slip2; } -void ODEContactJointHandler::SetContactMu(float mu) +void ODEContactJointHandler::SetContactMu(float mu, GenericSurfaceParameter* surface) { - mSurfaceParameter.mu = mu; + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + ODESurface->mu = mu; } -float ODEContactJointHandler::GetContactMu() const +float ODEContactJointHandler::GetContactMu(GenericSurfaceParameter* surface) const { - return mSurfaceParameter.mu; + dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface; + return ODESurface->mu; } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.h 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.h 2010-01-26 11:23:42 UTC (rev 151) @@ -32,38 +32,38 @@ { public: ODEContactJointHandler(); - void Initialize(); + GenericSurfaceParameter* Initialize(); long RetrieveBody(long geomID); long CreateContactJoint(long worldID, long jointGroupID, GenericContact& contact); void AttachContactJoint(long jointID, long bodyID1, long bodyID2); - void CalcSurfaceParam(GenericContact& surface, GenericSurfaceParameter& collideeParam); - - void SetSurfaceParameter(const GenericSurfaceParameter& surface); - GenericSurfaceParameter& GetSurfaceParameter() const; - void SetContactMode(int mode, bool set); - int GetContactMode() const; - void SetContactBounceMode(bool set); - void SetBounceValue(float bounce); - float GetBounceValue() const; - void SetMinBounceVel(float vel); - float GetMinBounceVel() const; - void SetContactSoftERPMode(bool set); - void SetContactSoftERP(float erp); - float GetContactSoftERP() const; - void SetContactSoftCFMMode(bool set); - void SetContactSoftCFM(float cfm); - float GetContactSoftCFM() const; - void SetContactSlipMode (bool set); - void SetContactSlip(float slip); - float GetContactSlip1() const; - float GetContactSlip2() const; - void SetContactMu(float mu); - float GetContactMu() const; + void CalcSurfaceParam(GenericContact& surface, + GenericSurfaceParameter& collideeParam, + GenericSurfaceParameter* surfacePtr); + int GetContactMode(GenericSurfaceParameter* surface) const; + void SetContactBounceMode(bool set, GenericSurfaceParameter* surface); + void SetBounceValue(float bounce, GenericSurfaceParameter* surface); + float GetBounceValue(GenericSurfaceParameter* surface) const; + void SetMinBounceVel(float vel, GenericSurfaceParameter* surface); + float GetMinBounceVel(GenericSurfaceParameter* surface) const; + void SetContactSoftERPMode(bool set, GenericSurfaceParameter* surface); + void SetContactSoftERP(float erp, GenericSurfaceParameter* surface); + float GetContactSoftERP(GenericSurfaceParameter* surface) const; + void SetContactSoftCFMMode(bool set, GenericSurfaceParameter* surface); + void SetContactSoftCFM(float cfm, GenericSurfaceParameter* surface); + float GetContactSoftCFM(GenericSurfaceParameter* surface) const; + void SetContactSlipMode (bool set, GenericSurfaceParameter* surface); + void SetContactSlip(float slip, GenericSurfaceParameter* surface); + float GetContactSlip1(GenericSurfaceParameter* surface) const; + float GetContactSlip2(GenericSurfaceParameter* surface) const; + void SetContactMu(float mu, GenericSurfaceParameter* surface); + float GetContactMu(GenericSurfaceParameter* surface) const; protected: f_inline float MixValues(const float v1, const float v2, const int n) const; void CalcSurfaceParamInternal(dSurfaceParameters& surface, - const dSurfaceParameters& collideeParam); + const dSurfaceParameters& collideeParam, + const dSurfaceParameters* ODESurface); + void SetContactMode(int mode, bool set, dSurfaceParameters* ODESurface); }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.cpp 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.cpp 2010-01-26 11:23:42 UTC (rev 151) @@ -57,26 +57,32 @@ return (long) ODEBodyID; } -void ODEJoint::EnableFeedback(bool enable, long jointID) +void ODEJoint::EnableFeedback(bool enable, long jointID, + shared_ptr<GenericJointFeedback> feedback) { dJointID ODEJoint = (dJointID) jointID; if (enable) { - if (mFeedback.get() == 0) + if (feedback.get() == 0) { - mFeedback = shared_ptr<dJointFeedback>(new dJointFeedback()); - memset(mFeedback.get(),0,sizeof(dJointFeedback)); + feedback = shared_ptr<GenericJointFeedback>( + (GenericJointFeedback*) new dJointFeedback()); + memset(feedback.get(),0,sizeof(dJointFeedback)); } } else { - if (mFeedback.get() != 0) + if (feedback.get() != 0) { - mFeedback.reset(); + feedback.reset(); } } - dJointSetFeedback(ODEJoint,mFeedback.get()); + cout << "bla"; + std::cin; + dJointFeedback* ODEFeedback = (dJointFeedback*) feedback.get(); + + dJointSetFeedback(ODEJoint,ODEFeedback); } bool ODEJoint::FeedbackEnabled(long jointID) const @@ -85,9 +91,10 @@ return (dJointGetFeedback(ODEJoint) != 0); } -Vector3f ODEJoint::GetFeedbackForce(int idx) const +Vector3f ODEJoint::GetFeedbackForce(int idx, + shared_ptr<GenericJointFeedback> feedback) const { - dJointFeedback* fb = mFeedback.get(); + dJointFeedback* fb = (dJointFeedback*) feedback.get(); if (fb == 0) { return Vector3f(0,0,0); @@ -114,9 +121,10 @@ } } -Vector3f ODEJoint::GetFeedbackTorque(int idx) const +Vector3f ODEJoint::GetFeedbackTorque(int idx, + shared_ptr<GenericJointFeedback> feedback) const { - dJointFeedback* fb = mFeedback.get(); + dJointFeedback* fb = (dJointFeedback*) feedback.get(); if (fb == 0) { return Vector3f(0,0,0); @@ -283,10 +291,11 @@ return GetParameter(dParamFMax + (idx * dParamGroup), jointID); } -void ODEJoint::DestroyJoint(long jointID) +void ODEJoint::DestroyJoint(long jointID, + shared_ptr<GenericJointFeedback> feedback) { dJointID ODEJoint = (dJointID) jointID; - EnableFeedback(false, jointID); + EnableFeedback(false, jointID, feedback); dJointDestroy(ODEJoint); } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.h 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.h 2010-01-26 11:23:42 UTC (rev 151) @@ -22,6 +22,7 @@ #ifndef OXYGEN_ODEJOINT_H #define OXYGEN_ODEJOINT_H +#include <oxygen/physicsserver/genericphysicsobjects.h> #include <oxygen/physicsserver/ode/odephysicsobject.h> #include <oxygen/physicsserver/int/jointint.h> @@ -33,14 +34,18 @@ public: ODEJoint(); - virtual void DestroyJoint(long jointID); - virtual void Attach(long bodyID1, long bodiID2, long jointID); + virtual void DestroyJoint(long jointID, + boost::shared_ptr<GenericJointFeedback> feedback); + virtual void Attach(long bodyID1, long bodyID2, long jointID); int GetType(long jointID) const; long GetBodyID(int idx, long jointID); - void EnableFeedback(bool enable, long jointID); + void EnableFeedback(bool enable, long jointID, + boost::shared_ptr<GenericJointFeedback> feedback); bool FeedbackEnabled(long jointID) const; - salt::Vector3f GetFeedbackForce(int idx) const; - salt::Vector3f GetFeedbackTorque(int idx) const; + salt::Vector3f GetFeedbackForce(int idx, + boost::shared_ptr<GenericJointFeedback> feedback) const; + salt::Vector3f GetFeedbackTorque(int idx, + boost::shared_ptr<GenericJointFeedback> feedback) const; void SetFudgeFactor(int idx, float fudge_factor, long jointID); float GetFudgeFactor(int idx, long jointID) const; void SetBounce(int idx, float bounce, long jointID); @@ -69,14 +74,9 @@ float GetAngularMotorVelocity(int idx, long jointID) const; void SetMaxMotorForce(int idx, float f, long jointID); float GetMaxMotorForce(int idx, long jointID) const; - virtual void SetParameter(int parameter, float value, long jointID); - virtual float GetParameter(int parameter, long jointID) const; + void SetParameter(int parameter, float value, long jointID); + float GetParameter(int parameter, long jointID) const; void OnLink(long jointID, Joint* joint); - -protected: - //It is encouraged to not store any member variables in the implementation. - //This can cause major problems. However, here, I found no way to avoid it. - boost::shared_ptr<dJointFeedback> mFeedback; }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.cpp 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.cpp 2010-01-26 11:23:42 UTC (rev 151) @@ -21,90 +21,94 @@ #include <oxygen/physicsserver/ode/odeworld.h> #include <oxygen/physicsserver/space.h> -#include <oxygen/sceneserver/scene.h> using namespace boost; using namespace oxygen; using namespace salt; ODEWorld::ODEWorld() : ODEPhysicsObject(){ - mWorldID = 0; } -long ODEWorld::GetWorldID() const +void ODEWorld::SetGravity(const Vector3f& gravity, long worldID) { - return mWorldID; + dWorldID ODEWorld = (dWorldID) worldID; + dWorldSetGravity(ODEWorld, + gravity.x(), + gravity.y(), + gravity.z() + ); } -void ODEWorld::SetGravity(const Vector3f& gravity) +salt::Vector3f ODEWorld::GetGravity(long worldID) const { - dWorldSetGravity(mODEWorld, - gravity.x(), - gravity.y(), - gravity.z() - ); + dWorldID ODEWorld = (dWorldID) worldID; + dVector3 dGravity; + dWorldGetGravity(ODEWorld,dGravity); + return Vector3f(dGravity[0],dGravity[1],dGravity[2]); } -salt::Vector3f ODEWorld::GetGravity() const +void ODEWorld::SetERP(float erp, long worldID) { - dVector3 dGravity; - dWorldGetGravity(mODEWorld,dGravity); - return Vector3f(dGravity[0],dGravity[1],dGravity[2]); + dWorldID ODEWorld = (dWorldID) worldID; + dWorldSetERP(ODEWorld, erp); } -void ODEWorld::SetERP(float erp) +float ODEWorld::GetERP(long worldID) const { - dWorldSetERP(mODEWorld, erp); + dWorldID ODEWorld = (dWorldID) worldID; + return dWorldGetERP(ODEWorld); } -float ODEWorld::GetERP() const +void ODEWorld::SetCFM(float cfm, long worldID) { - return dWorldGetERP(mODEWorld); + dWorldID ODEWorld = (dWorldID) worldID; + dWorldSetCFM(ODEWorld, cfm); } -void ODEWorld::SetCFM(float cfm) +float ODEWorld::GetCFM(long worldID) const { - dWorldSetCFM(mODEWorld, cfm); + dWorldID ODEWorld = (dWorldID) worldID; + return dWorldGetCFM(ODEWorld); } -float ODEWorld::GetCFM() const +void ODEWorld::Step(float deltaTime, long worldID) { - return dWorldGetCFM(mODEWorld); + dWorldID ODEWorld = (dWorldID) worldID; + dWorldStep(ODEWorld, deltaTime); } -void ODEWorld::Step(float deltaTime) +bool ODEWorld::GetAutoDisableFlag(long worldID) const { - dWorldStep(mODEWorld, deltaTime); + dWorldID ODEWorld = (dWorldID) worldID; + return (dWorldGetAutoDisableFlag(ODEWorld) == 1); } -bool ODEWorld::GetAutoDisableFlag() const +void ODEWorld::SetAutoDisableFlag(bool flag, long worldID) { - return (dWorldGetAutoDisableFlag(mODEWorld) == 1); + dWorldID ODEWorld = (dWorldID) worldID; + dWorldSetAutoDisableFlag(ODEWorld, static_cast<int>(flag)); } -void ODEWorld::SetAutoDisableFlag(bool flag) +void ODEWorld::SetContactSurfaceLayer(float depth, long worldID) { - dWorldSetAutoDisableFlag(mODEWorld, static_cast<int>(flag)); + dWorldID ODEWorld = (dWorldID) worldID; + dWorldSetContactSurfaceLayer(ODEWorld, depth); } -void ODEWorld::SetContactSurfaceLayer(float depth) +float ODEWorld::GetContactSurfaceLayer(long worldID) const { - dWorldSetContactSurfaceLayer(mODEWorld, depth); + dWorldID ODEWorld = (dWorldID) worldID; + return dWorldGetContactSurfaceLayer(ODEWorld); } -float ODEWorld::GetContactSurfaceLayer() const +long ODEWorld::CreateWorld() { - return dWorldGetContactSurfaceLayer(mODEWorld); + dWorldID ODEWorld = dWorldCreate(); + return (long) ODEWorld; } -void ODEWorld::CreateWorld() +void ODEWorld::DestroyWorld(long worldID) { - mODEWorld = dWorldCreate(); - mWorldID = (long) mODEWorld; + dWorldID ODEWorld = (dWorldID) worldID; + dWorldDestroy(ODEWorld); } - -void ODEWorld::DestroyWorld() -{ - dWorldDestroy(mODEWorld); - mWorldID = 0; -} Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.h 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.h 2010-01-26 11:23:42 UTC (rev 151) @@ -35,23 +35,19 @@ public: ODEWorld(); - long GetWorldID() const; - void SetGravity(const salt::Vector3f& gravity); - salt::Vector3f GetGravity() const; - void SetERP(float erp); - float GetERP() const; - void SetCFM(float cfm); - float GetCFM() const; - void Step(float deltaTime); - bool GetAutoDisableFlag() const; - void SetAutoDisableFlag(bool flag); - void SetContactSurfaceLayer(float depth); - float GetContactSurfaceLayer() const; - void CreateWorld(); - void DestroyWorld(); - -private: - dWorldID mODEWorld; + void SetGravity(const salt::Vector3f& gravity, long worldID); + salt::Vector3f GetGravity(long worldID) const; + void SetERP(float erp, long worldID); + float GetERP(long worldID) const; + void SetCFM(float cfm, long worldID); + float GetCFM(long worldID) const; + void Step(float deltaTime, long worldID); + bool GetAutoDisableFlag(long worldID) const; + void SetAutoDisableFlag(bool flag, long worldID); + void SetContactSurfaceLayer(float depth, long worldID); + float GetContactSurfaceLayer(long worldID) const; + long CreateWorld(); + void DestroyWorld(long worldID); }; } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/world.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/world.cpp 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/world.cpp 2010-01-26 11:23:42 UTC (rev 151) @@ -39,69 +39,69 @@ long World::GetWorldID() const { - return mWorldImp->GetWorldID(); + return mWorldID; } void World::SetGravity(const Vector3f& gravity) { - mWorldImp->SetGravity(gravity); + mWorldImp->SetGravity(gravity, mWorldID); } salt::Vector3f World::GetGravity() const { - return mWorldImp->GetGravity(); + return mWorldImp->GetGravity(mWorldID); } void World::SetERP(float erp) { - mWorldImp->SetERP(erp); + mWorldImp->SetERP(erp, mWorldID); } float World::GetERP() const { - return mWorldImp->GetERP(); + return mWorldImp->GetERP(mWorldID); } void World::SetCFM(float cfm) { - mWorldImp->SetCFM(cfm); + mWorldImp->SetCFM(cfm, mWorldID); } float World::GetCFM() const { - return mWorldImp->GetCFM(); + return mWorldImp->GetCFM(mWorldID); } void World::Step(float deltaTime) { - mWorldImp->Step(deltaTime); + mWorldImp->Step(deltaTime, mWorldID); } bool World::GetAutoDisableFlag() const { - return mWorldImp->GetAutoDisableFlag(); + return mWorldImp->GetAutoDisableFlag(mWorldID); } void World::SetAutoDisableFlag(bool flag) { - mWorldImp->SetAutoDisableFlag(flag); + mWorldImp->SetAutoDisableFlag(flag, mWorldID); } void World::SetContactSurfaceLayer(float depth) { - mWorldImp->SetContactSurfaceLayer(depth); + mWorldImp->SetContactSurfaceLayer(depth, mWorldID); } float World::GetContactSurfaceLayer() const { - return mWorldImp->GetContactSurfaceLayer(); + return mWorldImp->GetContactSurfaceLayer(mWorldID); } bool World::ConstructInternal() { - mWorldImp->CreateWorld(); + mWorldID = mWorldImp->CreateWorld(); - return (mWorldImp->GetWorldID() != 0); + return (mWorldID != 0); } void World::DestroyPhysicsObject() @@ -120,12 +120,13 @@ space->DestroyPhysicsObject(); } - if (mWorldImp->GetWorldID() == 0) + if (mWorldID == 0) { return; } - mWorldImp->DestroyWorld(); + mWorldImp->DestroyWorld(mWorldID); + mWorldID = 0; recurseLock = false; } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/world.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/world.h 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/lib/oxygen/physicsserver/world.h 2010-01-26 11:23:42 UTC (rev 151) @@ -122,6 +122,9 @@ the desired physics engine. */ boost::shared_ptr<WorldInt> mWorldImp; + + /** The ID of the managed physics world */ + long mWorldID; }; DECLARE_CLASS(World); Modified: branches/multiphys/spark/plugin/collisionperceptor/touchperceptorhandler.cpp =================================================================== --- branches/multiphys/spark/plugin/collisionperceptor/touchperceptorhandler.cpp 2010-01-18 19:59:05 UTC (rev 150) +++ branches/multiphys/spark/plugin/collisionperceptor/touchperceptorhandler.cpp 2010-01-26 11:23:42 UTC (rev 151) @@ -79,7 +79,7 @@ return; mContactJointHandlerImp->CalcSurfaceParam( - contact, handler->GetSurfaceParameter()); + contact, handler->GetSurfaceParameter(), mSurfaceParameter); // create the contact joint and attach it to the body long joint = mContactJointHandlerImp->CreateContactJoint( This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |