Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef JSK_RECOGNITION_UTILS_GEO_CUBE_H_
00037 #define JSK_RECOGNITION_UTILS_GEO_CUBE_H_
00038
00039 #include "jsk_recognition_utils/geo/polygon.h"
00040 #include "jsk_recognition_utils/geo/convex_polygon.h"
00041 #include <jsk_recognition_msgs/BoundingBoxArray.h>
00042
00043 namespace jsk_recognition_utils
00044 {
00045 class Cube
00046 {
00047 public:
00048 typedef boost::shared_ptr<Cube> Ptr;
00049 Cube(const Eigen::Vector3f& pos, const Eigen::Quaternionf& rot);
00050 Cube(const Eigen::Vector3f& pos, const Eigen::Quaternionf& rot,
00051 const std::vector<double>& dimensions);
00052 Cube(const Eigen::Vector3f& pos, const Eigen::Quaternionf& rot,
00053 const Eigen::Vector3f& dimensions);
00054 Cube(const Eigen::Vector3f& pos,
00055 const Line& line_a, const Line& line_b, const Line& line_c);
00056 virtual ~Cube();
00057 std::vector<Segment::Ptr> edges();
00058 ConvexPolygon::Ptr intersectConvexPolygon(Plane& plane);
00059 std::vector<double> getDimensions() const { return dimensions_; };
00060 void setDimensions(const std::vector<double>& new_dimensions) {
00061 dimensions_[0] = new_dimensions[0];
00062 dimensions_[1] = new_dimensions[1];
00063 dimensions_[2] = new_dimensions[2];
00064 }
00065 jsk_recognition_msgs::BoundingBox toROSMsg();
00066
00074 Vertices vertices();
00075
00081 std::vector<Polygon::Ptr> faces();
00082
00091 virtual Eigen::Vector3f nearestPoint(const Eigen::Vector3f& p,
00092 double& distance);
00093 protected:
00094 Eigen::Vector3f pos_;
00095 Eigen::Quaternionf rot_;
00096 std::vector<double> dimensions_;
00097
00102 virtual Polygon::Ptr buildFace(const Eigen::Vector3f v0,
00103 const Eigen::Vector3f v1,
00104 const Eigen::Vector3f v2,
00105 const Eigen::Vector3f v3);
00106
00111 virtual Eigen::Vector3f buildVertex(double i, double j, double k);
00112
00113 private:
00114
00115 };
00116 }
00117
00118 #endif