From bf8cdb90adc8ef549c38932bedc2fdab984ab0c4 Mon Sep 17 00:00:00 2001 From: Jeongseok Lee Date: Fri, 22 Apr 2016 17:48:06 -0400 Subject: [PATCH 1/2] Make ConstraintSolver to return CollisionDetector/CollisionGroup as shared pointers --- dart/constraint/ConstraintSolver.cpp | 38 ++++++++++++++++------------ dart/constraint/ConstraintSolver.h | 16 ++++++------ 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/dart/constraint/ConstraintSolver.cpp b/dart/constraint/ConstraintSolver.cpp index 0ba8b795b35f2..e35b4a26cfad3 100644 --- a/dart/constraint/ConstraintSolver.cpp +++ b/dart/constraint/ConstraintSolver.cpp @@ -66,7 +66,7 @@ using namespace dynamics; //============================================================================== ConstraintSolver::ConstraintSolver(double timeStep) : mCollisionDetector(collision::FCLCollisionDetector::create()), - mCollisionGroup(mCollisionDetector->createCollisionGroup()), + mCollisionGroup(mCollisionDetector->createCollisionGroupAsSharedPtr()), mCollisionOption( collision::CollisionOption( true, false, 100, std::make_shared())), @@ -223,42 +223,47 @@ void ConstraintSolver::setCollisionDetector( void ConstraintSolver::setCollisionDetector( const std::shared_ptr& collisionDetector) { - assert(collisionDetector && "Invalid collision detector."); + if (!collisionDetector) + { + dtwarn << "[ConstraintSolver::setCollisionDetector] Attempting to assign " + << "nullptr as the new collision detector to the constraint solver, " + << "which is not allowed. Ignoring.\n"; + } + + if (mCollisionDetector == collisionDetector) + return; - // Change the collision detector of the constraint solver to new one mCollisionDetector = collisionDetector; - auto newCollisionGroup = mCollisionDetector->createCollisionGroup(); + mCollisionGroup = mCollisionDetector->createCollisionGroupAsSharedPtr(); for (const auto& skeleton : mSkeletons) - newCollisionGroup->addShapeFramesOf(skeleton.get()); - - mCollisionGroup = std::move(newCollisionGroup); + mCollisionGroup->addShapeFramesOf(skeleton.get()); } //============================================================================== -collision::CollisionDetector* ConstraintSolver::getCollisionDetector() +collision::CollisionDetectorPtr ConstraintSolver::getCollisionDetector() { - return mCollisionDetector.get(); + return mCollisionDetector; } //============================================================================== -const collision::CollisionDetector* +collision::ConstCollisionDetectorPtr ConstraintSolver::getCollisionDetector() const { - return mCollisionDetector.get(); + return mCollisionDetector; } //============================================================================== -collision::CollisionGroup* ConstraintSolver::getCollisionGroup() +collision::CollisionGroupPtr ConstraintSolver::getCollisionGroup() { - return mCollisionGroup.get(); + return mCollisionGroup; } //============================================================================== -const collision::CollisionGroup* ConstraintSolver::getCollisionGroup() const +collision::ConstCollisionGroupPtr ConstraintSolver::getCollisionGroup() const { - return mCollisionGroup.get(); + return mCollisionGroup; } //============================================================================== @@ -268,7 +273,8 @@ collision::CollisionResult& ConstraintSolver::getLastCollisionResult() } //============================================================================== -const collision::CollisionResult& ConstraintSolver::getLastCollisionResult() const +const collision::CollisionResult& +ConstraintSolver::getLastCollisionResult() const { return mCollisionResult; } diff --git a/dart/constraint/ConstraintSolver.h b/dart/constraint/ConstraintSolver.h index 135196b93a749..6cf16379d84ff 100644 --- a/dart/constraint/ConstraintSolver.h +++ b/dart/constraint/ConstraintSolver.h @@ -114,18 +114,18 @@ class ConstraintSolver const std::shared_ptr& collisionDetector); /// Get collision detector - collision::CollisionDetector* getCollisionDetector(); + collision::CollisionDetectorPtr getCollisionDetector(); - /// Get collision detector - const collision::CollisionDetector* getCollisionDetector() const; + /// Get (const) collision detector + collision::ConstCollisionDetectorPtr getCollisionDetector() const; /// Return collision group of collision objects that are added to this /// ConstraintSolver - collision::CollisionGroup* getCollisionGroup(); + collision::CollisionGroupPtr getCollisionGroup(); /// Return (const) collision group of collision objects that are added to this /// ConstraintSolver - const collision::CollisionGroup* getCollisionGroup() const; + collision::ConstCollisionGroupPtr getCollisionGroup() const; /// Return the last collision checking result collision::CollisionResult& getLastCollisionResult(); @@ -170,12 +170,12 @@ class ConstraintSolver using CollisionDetector = collision::CollisionDetector; /// Collision detector - std::shared_ptr mCollisionDetector; + collision::CollisionDetectorPtr mCollisionDetector; /// Collision group - std::unique_ptr mCollisionGroup; + collision::CollisionGroupPtr mCollisionGroup; - /// Last collision checking result + /// Collision detection option collision::CollisionOption mCollisionOption; /// Last collision checking result From a4e06543804fdb54429a890e06b62151eede2387 Mon Sep 17 00:00:00 2001 From: Jeongseok Lee Date: Mon, 25 Apr 2016 14:14:34 -0400 Subject: [PATCH 2/2] Add missing return statement --- dart/constraint/ConstraintSolver.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/dart/constraint/ConstraintSolver.cpp b/dart/constraint/ConstraintSolver.cpp index e35b4a26cfad3..dfa8514619b0e 100644 --- a/dart/constraint/ConstraintSolver.cpp +++ b/dart/constraint/ConstraintSolver.cpp @@ -228,6 +228,7 @@ void ConstraintSolver::setCollisionDetector( dtwarn << "[ConstraintSolver::setCollisionDetector] Attempting to assign " << "nullptr as the new collision detector to the constraint solver, " << "which is not allowed. Ignoring.\n"; + return; } if (mCollisionDetector == collisionDetector)