$search
00001 00060 #ifndef SHAPE_CLUSTER_H_ 00061 #define SHAPE_CLUSTER_H_ 00062 00063 #include "cob_3d_mapping_common/shape.h" 00064 #include <list> 00065 00066 namespace cob_3d_mapping 00067 { 00071 class ShapeCluster : public Shape 00072 { 00073 public: 00078 typedef boost::shared_ptr<ShapeCluster> Ptr; 00079 00080 00085 typedef boost::shared_ptr<const ShapeCluster> ConstPtr; 00086 00087 public: 00088 00092 ShapeCluster() 00093 : shapes() 00094 , scale(Eigen::Vector3f::Zero()) 00095 , d_(0.1) 00096 { } 00097 00101 void computeAttributes(); 00102 00103 00109 void transform2tf(const Eigen::Affine3f& trafo); 00110 00111 00118 void getMergeCandidates(const std::vector<ShapeCluster::Ptr>& sc_vec, 00119 std::vector<int>& intersections) const; 00120 00121 00129 void merge(std::vector<ShapeCluster::Ptr>& sc_vec); 00130 00134 void insert(Shape::Ptr shape); 00135 00142 inline bool hasSimilarParametersWith(ShapeCluster::Ptr sc) const 00143 { 00144 return ( (this->centroid - sc->centroid).norm() < d_ ); 00145 } 00146 00150 std::list<Shape::Ptr> shapes; 00154 Eigen::Vector3f scale; 00155 00156 private: 00157 float d_; 00158 }; 00159 } 00160 00161 #endif