Skip to content

Commit

Permalink
Merge pull request #2057 from mwoehlke-kitware/split-result-collector
Browse files Browse the repository at this point in the history
Separate ResultCollector base
  • Loading branch information
david-german-tri committed Apr 12, 2016
2 parents 2a0a91a + 6c0eee2 commit b06552b
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 42 deletions.
21 changes: 3 additions & 18 deletions drake/systems/plants/collision/BulletResultCollector.cpp
Original file line number Diff line number Diff line change
@@ -1,31 +1,16 @@
#include <iostream>
#include <btBulletCollisionCommon.h>
#include "drake/systems/plants/collision/BulletResultCollector.h"

#include "drake/systems/plants/collision/DrakeCollision.h"
#include "BulletResultCollector.h"

using namespace std;
using namespace Eigen;

namespace DrakeCollision {
Vector3d toVector3d(const Vector3d& vec) { return vec; }

Vector3d toVector3d(const btVector3& bt_vec) {
Vector3d vec;
Eigen::Vector3d toVector3d(const btVector3& bt_vec) {
Eigen::Vector3d vec;
vec(0) = (double)bt_vec.getX();
vec(1) = (double)bt_vec.getY();
vec(2) = (double)bt_vec.getZ();
return vec;
}

void ResultCollector::addPointPairResult(const PointPair& result) {
pts.push_back(result);
}

PointPair ResultCollector::minDistPoint() {
return *min_element(pts.begin(), pts.end());
}

btScalar BulletResultCollector::addSingleResult(
btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap,
int partId0, int index0, const btCollisionObjectWrapper* colObj1Wrap,
Expand Down
26 changes: 3 additions & 23 deletions drake/systems/plants/collision/BulletResultCollector.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,13 @@
#define DRAKE_SYSTEMS_PLANTS_COLLISION_BULLETRESULTCOLLECTOR_H_

#include "drake/systems/plants/collision/DrakeCollision.h"
#include "drake/systems/plants/collision/ResultCollector.h"

#include <btBulletCollisionCommon.h>

namespace DrakeCollision {
Eigen::Vector3d toVector3d(const Eigen::Vector3d& vec);
Eigen::Vector3d toVector3d(const btVector3& bt_vec);

class ResultCollector {
public:
virtual ~ResultCollector() {}

virtual void addPointPairResult(const PointPair& result);

inline void addSingleResult(const ElementId idA, const ElementId idB,
const Eigen::Vector3d& ptA,
const Eigen::Vector3d& ptB,
const Eigen::Vector3d& normal, double distance) {
addPointPairResult(PointPair(idA, idB, ptA, ptB, normal, distance));
}

std::vector<PointPair> getResults() const { return pts; }

PointPair minDistPoint();

std::vector<PointPair> pts;
};

class BulletResultCollector : public ResultCollector,
public btCollisionWorld::ContactResultCallback {
public:
Expand All @@ -50,8 +32,6 @@ class BulletResultCollector : public ResultCollector,
int curr_bodyA_idx;
int curr_bodyB_idx;
};

typedef std::shared_ptr<ResultCollector> ResultCollShPtr;
}

#endif // DRAKE_SYSTEMS_PLANTS_COLLISION_BULLETRESULTCOLLECTOR_H_
2 changes: 1 addition & 1 deletion drake/systems/plants/collision/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(drakeCollision_SRC_FILES DrakeCollision.cpp Element.cpp point_pair.cc Model.cpp)
set(drakeCollision_SRC_FILES DrakeCollision.cpp Element.cpp point_pair.cc Model.cpp ResultCollector.cpp)
pods_find_pkg_config(bullet)

if (bullet_FOUND)
Expand Down
13 changes: 13 additions & 0 deletions drake/systems/plants/collision/ResultCollector.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#include "drake/systems/plants/collision/ResultCollector.h"

#include "drake/systems/plants/collision/DrakeCollision.h"

namespace DrakeCollision {
void ResultCollector::addPointPairResult(const PointPair& result) {
pts.push_back(result);
}

PointPair ResultCollector::minDistPoint() const {
return *std::min_element(pts.begin(), pts.end());
}
}
31 changes: 31 additions & 0 deletions drake/systems/plants/collision/ResultCollector.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#ifndef DRAKE_SYSTEMS_PLANTS_COLLISION_RESULTCOLLECTOR_H_
#define DRAKE_SYSTEMS_PLANTS_COLLISION_RESULTCOLLECTOR_H_

#include "drake/systems/plants/collision/DrakeCollision.h"

namespace DrakeCollision {
class ResultCollector {
public:
virtual ~ResultCollector() {}

virtual void addPointPairResult(const PointPair& result);

inline void addSingleResult(const ElementId idA, const ElementId idB,
const Eigen::Vector3d& ptA,
const Eigen::Vector3d& ptB,
const Eigen::Vector3d& normal,
const double distance) {
addPointPairResult(PointPair(idA, idB, ptA, ptB, normal, distance));
}

std::vector<PointPair> getResults() const { return pts; }

PointPair minDistPoint() const;

std::vector<PointPair> pts;
};

typedef std::shared_ptr<ResultCollector> ResultCollShPtr;
}

#endif // DRAKE_SYSTEMS_PLANTS_COLLISION_RESULTCOLLECTOR_H_

0 comments on commit b06552b

Please sign in to comment.