From f7853c48b99d14d78fac41f73233e81708036616 Mon Sep 17 00:00:00 2001 From: Valenza Florian <fvalenza@laas.fr> Date: Wed, 13 Jul 2016 15:31:47 +0200 Subject: [PATCH] [C++] Pre-allocate memory for GeometryData vectors with reserve instead of resize --- python/bindings_geometry_object.py | 8 ++++---- src/algorithm/collisions.hpp | 4 ++-- src/multibody/geometry.hpp | 14 +++++++------- src/multibody/geometry.hxx | 28 ++++++++++++++-------------- src/python/geometry-model.hpp | 6 +++--- src/python/robot_wrapper.py | 4 ++-- unittest/geom.cpp | 4 ++-- 7 files changed, 34 insertions(+), 34 deletions(-) diff --git a/python/bindings_geometry_object.py b/python/bindings_geometry_object.py index bbb5a8fe8..9374d7187 100644 --- a/python/bindings_geometry_object.py +++ b/python/bindings_geometry_object.py @@ -25,13 +25,13 @@ class TestGeometryObjectBindings(unittest.TestCase): robot = RobotWrapper(romeo_model_path, hint_list, se3.JointModelFreeFlyer()) def test_name_get_set(self): - col = self.robot.collision_model.geometry_objects[1] + col = self.robot.collision_model.geometryObjects[1] self.assertTrue(col.name == 'LHipPitchLink') col.name = 'new_collision_name' self.assertTrue(col.name == 'new_collision_name') def test_parent_get_set(self): - col = self.robot.collision_model.geometry_objects[1] + col = self.robot.collision_model.geometryObjects[1] self.assertTrue(col.parent == 4) col.parent = 5 self.assertTrue(col.parent == 5) @@ -39,14 +39,14 @@ class TestGeometryObjectBindings(unittest.TestCase): def test_placement_get_set(self): m = se3.SE3(self.m3ones, self.v3zero) new_m = se3.SE3(rand([3,3]), rand(3)) - col = self.robot.collision_model.geometry_objects[1] + col = self.robot.collision_model.geometryObjects[1] self.assertTrue(np.allclose(col.placement.homogeneous,m.homogeneous)) col.placement = new_m self.assertTrue(np.allclose(col.placement.homogeneous , new_m.homogeneous)) def test_meshpath_get(self): expected_mesh_path = os.path.join(self.pinocchio_models_dir,'meshes/romeo/collision/LHipPitch.dae') - col = self.robot.collision_model.geometry_objects[1] + col = self.robot.collision_model.geometryObjects[1] self.assertTrue(col.mesh_path == expected_mesh_path) if __name__ == '__main__': diff --git a/src/algorithm/collisions.hpp b/src/algorithm/collisions.hpp index 5e4ba7bd3..28a6979e8 100644 --- a/src/algorithm/collisions.hpp +++ b/src/algorithm/collisions.hpp @@ -104,8 +104,8 @@ namespace se3 { for (GeometryData::GeomIndex i=0; i < (GeometryData::GeomIndex) data_geom.model_geom.ngeoms; ++i) { - const Model::JointIndex & parent = model_geom.geometry_objects[i].parent; - data_geom.oMg[i] = (data.oMi[parent] * model_geom.geometry_objects[i].placement); + const Model::JointIndex & parent = model_geom.geometryObjects[i].parent; + data_geom.oMg[i] = (data.oMi[parent] * model_geom.geometryObjects[i].placement); data_geom.oMg_fcl[i] = toFclTransform3f(data_geom.oMg[i]); } } diff --git a/src/multibody/geometry.hpp b/src/multibody/geometry.hpp index 96ae0df8a..2e88d9f9f 100644 --- a/src/multibody/geometry.hpp +++ b/src/multibody/geometry.hpp @@ -242,7 +242,7 @@ struct GeometryObject typedef Model::JointIndex JointIndex; typedef Model::GeomIndex GeomIndex; - typedef std::list<GeomIndex> GeomIndexList; + typedef std::vector<GeomIndex> GeomIndexList; /// \brief A const reference to the reference model. const se3::Model & model; @@ -251,7 +251,7 @@ struct GeometryObject Index ngeoms; /// \brief Vector of GeometryObjects used for collision computations - std::vector<GeometryObject> geometry_objects; + std::vector<GeometryObject> geometryObjects; /// \brief A list of associated collision GeometryObjects to a given joint Id. /// Inner objects can be seen as geometry objects that directly move when the associated joint moves @@ -264,7 +264,7 @@ struct GeometryObject GeometryModel(const se3::Model & model) : model(model) , ngeoms(0) - , geometry_objects() + , geometryObjects() , innerObjects() , outerObjects() {} @@ -280,7 +280,7 @@ struct GeometryObject * @param[in] geom_name The name of the Geometry Object * @param[in] mesh_path The absolute path to the mesh * - * @return The index of the new added GeometryObject in geometry_objects + * @return The index of the new added GeometryObject in geometryObjects */ inline GeomIndex addGeometryObject(const JointIndex parent, const fcl::CollisionObject & co, const SE3 & placement, const std::string & geom_name = "", @@ -303,7 +303,7 @@ struct GeometryObject * * @param[in] name Name of the GeometryObject * - * @return True if the GeometryObject exists in the geometry_objects. + * @return True if the GeometryObject exists in the geometryObjects. */ bool existGeometryName(const std::string & name) const; @@ -400,8 +400,8 @@ struct GeometryObject { const std::size_t num_max_collision_pairs = (model_geom.ngeoms * (model_geom.ngeoms-1))/2; collision_pairs.reserve(num_max_collision_pairs); - distance_results.resize(num_max_collision_pairs, DistanceResult( fcl::DistanceResult(), 0, 0) ); - collision_results.resize(num_max_collision_pairs, CollisionResult( fcl::CollisionResult(), 0, 0)); + distance_results.reserve(num_max_collision_pairs); + collision_results.reserve(num_max_collision_pairs); } ~GeometryData() {}; diff --git a/src/multibody/geometry.hxx b/src/multibody/geometry.hxx index 074aa088f..9bf64da7e 100644 --- a/src/multibody/geometry.hxx +++ b/src/multibody/geometry.hxx @@ -51,7 +51,7 @@ namespace se3 Index idx = (Index) (ngeoms ++); - geometry_objects.push_back(GeometryObject( geom_name, parent, co, + geometryObjects.push_back(GeometryObject( geom_name, parent, co, placement, mesh_path)); addInnerObject(parent, idx); return idx; @@ -61,27 +61,27 @@ namespace se3 inline GeometryModel::GeomIndex GeometryModel::getGeometryId(const std::string & name) const { - std::vector<GeometryObject>::const_iterator it = std::find_if(geometry_objects.begin(), - geometry_objects.end(), + std::vector<GeometryObject>::const_iterator it = std::find_if(geometryObjects.begin(), + geometryObjects.end(), boost::bind(&GeometryObject::name, _1) == name ); - return GeometryModel::GeomIndex(it - geometry_objects.begin()); + return GeometryModel::GeomIndex(it - geometryObjects.begin()); } inline bool GeometryModel::existGeometryName(const std::string & name) const { - return std::find_if(geometry_objects.begin(), - geometry_objects.end(), - boost::bind(&GeometryObject::name, _1) == name) != geometry_objects.end(); + return std::find_if(geometryObjects.begin(), + geometryObjects.end(), + boost::bind(&GeometryObject::name, _1) == name) != geometryObjects.end(); } inline const std::string& GeometryModel::getGeometryName(const GeomIndex index) const { - assert( index < (GeomIndex)geometry_objects.size() ); - return geometry_objects[index].name; + assert( index < (GeomIndex)geometryObjects.size() ); + return geometryObjects[index].name; } @@ -111,7 +111,7 @@ namespace se3 for(GeometryModel::Index i=0;i<(GeometryModel::Index)(model_geom.ngeoms);++i) { - os << model_geom.geometry_objects[i] <<std::endl; + os << model_geom.geometryObjects[i] <<std::endl; } return os; @@ -250,8 +250,8 @@ namespace se3 fcl::CollisionRequest collisionRequest (1, false, false, 1, false, true, fcl::GST_INDEP); fcl::CollisionResult collisionResult; - fcl::collide (model_geom.geometry_objects[co1].collision_object.collisionGeometry().get(), oMg_fcl[co1], - model_geom.geometry_objects[co2].collision_object.collisionGeometry().get(), oMg_fcl[co2], + fcl::collide (model_geom.geometryObjects[co1].collision_object.collisionGeometry().get(), oMg_fcl[co1], + model_geom.geometryObjects[co2].collision_object.collisionGeometry().get(), oMg_fcl[co2], collisionRequest, collisionResult); return CollisionResult (collisionResult, co1, co2); @@ -288,8 +288,8 @@ namespace se3 fcl::DistanceRequest distanceRequest (true, 0, 0, fcl::GST_INDEP); fcl::DistanceResult result; - fcl::distance ( model_geom.geometry_objects[co1].collision_object.collisionGeometry().get(), oMg_fcl[co1], - model_geom.geometry_objects[co2].collision_object.collisionGeometry().get(), oMg_fcl[co2], + fcl::distance ( model_geom.geometryObjects[co1].collision_object.collisionGeometry().get(), oMg_fcl[co1], + model_geom.geometryObjects[co2].collision_object.collisionGeometry().get(), oMg_fcl[co2], distanceRequest, result); return DistanceResult (result, co1, co2); diff --git a/src/python/geometry-model.hpp b/src/python/geometry-model.hpp index f2e13dcff..3c5698bbc 100644 --- a/src/python/geometry-model.hpp +++ b/src/python/geometry-model.hpp @@ -68,8 +68,8 @@ namespace se3 .def("getGeometryId",&GeometryModelPythonVisitor::getGeometryId) .def("existGeometryName",&GeometryModelPythonVisitor::existGeometryName) .def("getGeometryName",&GeometryModelPythonVisitor::getGeometryName) - .add_property("geometry_objects", - bp::make_function(&GeometryModelPythonVisitor::geometry_objects, + .add_property("geometryObjects", + bp::make_function(&GeometryModelPythonVisitor::geometryObjects, bp::return_internal_reference<>()) ) .def("__str__",&GeometryModelPythonVisitor::toString) @@ -87,7 +87,7 @@ namespace se3 static std::string getGeometryName(const GeometryModelHandler & gmodelPtr, const GeomIndex index) { return gmodelPtr->getGeometryName(index);} - static std::vector<GeometryObject> & geometry_objects( GeometryModelHandler & m ) { return m->geometry_objects; } + static std::vector<GeometryObject> & geometryObjects( GeometryModelHandler & m ) { return m->geometryObjects; } diff --git a/src/python/robot_wrapper.py b/src/python/robot_wrapper.py index d5dde02f8..1b5cf3742 100644 --- a/src/python/robot_wrapper.py +++ b/src/python/robot_wrapper.py @@ -170,7 +170,7 @@ class RobotWrapper(object): self.viewer.gui.createGroup(nodeName) # iterate over visuals and create the meshes in the viewer - for visual in self.visual_model.geometry_objects : + for visual in self.visual_model.geometryObjects : meshName = self.viewerNodeNames(visual) meshPath = visual.mesh_path self.viewer.gui.addMesh(meshName, meshPath) @@ -187,7 +187,7 @@ class RobotWrapper(object): self.updateGeometryPlacements(q) - for visual in self.visual_model.geometry_objects : + for visual in self.visual_model.geometryObjects : M = self.collision_data.oMg[self.visual_model.getGeometryId(visual.name)] pinocchioConf = utils.se3ToXYZQUAT(M) viewerConf = utils.XYZQUATToViewerConfiguration(pinocchioConf) diff --git a/unittest/geom.cpp b/unittest/geom.cpp index fc5e4623b..82cc738eb 100644 --- a/unittest/geom.cpp +++ b/unittest/geom.cpp @@ -132,8 +132,8 @@ std::ostream& operator<<(std::ostream& os, const std::pair < se3::Model, se3::Ge for(se3::GeometryModel::Index i=0;i<(se3::GeometryModel::Index)(robot.second.ngeoms);++i) { - os << "Object n " << i << " : " << robot.second.geometry_objects[i].name << ": attached to joint = " << robot.second.geometry_objects[i].parent - << "=" << robot.first.getJointName(robot.second.geometry_objects[i].parent) << std::endl; + os << "Object n " << i << " : " << robot.second.geometryObjects[i].name << ": attached to joint = " << robot.second.geometryObjects[i].parent + << "=" << robot.first.getJointName(robot.second.geometryObjects[i].parent) << std::endl; } return os; } -- GitLab