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 Cube(const jsk_recognition_msgs::BoundingBox& box);
00057 virtual ~Cube();
00058 std::vector<Segment::Ptr> edges();
00059 ConvexPolygon::Ptr intersectConvexPolygon(Plane& plane);
00060 std::vector<double> getDimensions() const { return dimensions_; };
00061 void setDimensions(const std::vector<double>& new_dimensions) {
00062 dimensions_[0] = new_dimensions[0];
00063 dimensions_[1] = new_dimensions[1];
00064 dimensions_[2] = new_dimensions[2];
00065 }
00066 jsk_recognition_msgs::BoundingBox toROSMsg();
00067
00075 Vertices vertices();
00076
00081 Vertices transformVertices(const Eigen::Affine3f& pose_offset);
00082
00088 std::vector<Polygon::Ptr> faces();
00089
00098 virtual Eigen::Vector3f nearestPoint(const Eigen::Vector3f& p,
00099 double& distance);
00100 protected:
00101 Eigen::Vector3f pos_;
00102 Eigen::Quaternionf rot_;
00103 std::vector<double> dimensions_;
00104
00109 virtual Polygon::Ptr buildFace(const Eigen::Vector3f v0,
00110 const Eigen::Vector3f v1,
00111 const Eigen::Vector3f v2,
00112 const Eigen::Vector3f v3);
00113
00118 virtual Eigen::Vector3f buildVertex(double i, double j, double k);
00119
00120 private:
00121
00122 };
00123 }
00124
00125 #endif