35 #define BOOST_PARAMETER_MAX_ARITY 7 
   42     Cube::Cube(
const Eigen::Vector3f& pos, 
const Eigen::Quaternionf& rot):
 
   48   Cube::Cube(
const Eigen::Vector3f& pos, 
const Eigen::Quaternionf& rot,
 
   49              const std::vector<double>& dimensions):
 
   50     pos_(pos), rot_(rot), dimensions_(dimensions)
 
   54   Cube::Cube(
const Eigen::Vector3f& pos, 
const Eigen::Quaternionf& rot,
 
   55              const Eigen::Vector3f& dimensions):
 
   65              const Line& line_a, 
const Line& line_b, 
const Line& line_c)
 
   67     double distance_a_b = line_a.
distance(line_b);
 
   68     double distance_a_c = line_a.
distance(line_c);
 
   69     double distance_b_c = line_b.
distance(line_c);
 
   72     Eigen::Vector3f ex, ey, ez;
 
   73     if (distance_a_b >= distance_a_c &&
 
   74         distance_a_b >= distance_b_c) {
 
   80     else if (distance_a_c >= distance_a_b &&
 
   81              distance_a_c >= distance_b_c) {
 
   95     axis->getDirection(ez);
 
   99     if (ex.cross(ey).dot(ez) < 0) {
 
  103     axis->foot(pos, 
pos_);       
 
  112     Eigen::Affine3f pose;
 
  114     pos_ = Eigen::Vector3f(pose.translation());
 
  115     rot_ = Eigen::Quaternionf(pose.rotation()); 
 
  125     std::vector<Segment::Ptr> ret;
 
  126     Eigen::Vector3f 
A = 
pos_ 
  129                 (+ 
dimensions_[2] * Eigen::Vector3f::UnitZ())) / 2.0;
 
  130     Eigen::Vector3f B = 
pos_ 
  133                 (+ 
dimensions_[2] * Eigen::Vector3f::UnitZ())) / 2.0;
 
  134     Eigen::Vector3f C = 
pos_ 
  137                 (+ 
dimensions_[2] * Eigen::Vector3f::UnitZ())) / 2.0;
 
  138     Eigen::Vector3f D = 
pos_ 
  141                 (+ 
dimensions_[2] * Eigen::Vector3f::UnitZ())) / 2.0;
 
  142     Eigen::Vector3f E = 
pos_ 
  145                 (- 
dimensions_[2] * Eigen::Vector3f::UnitZ())) / 2.0;
 
  146     Eigen::Vector3f F = 
pos_ 
  149                 (- 
dimensions_[2] * Eigen::Vector3f::UnitZ())) / 2.0;
 
  150     Eigen::Vector3f G = 
pos_ 
  153                 (- 
dimensions_[2] * Eigen::Vector3f::UnitZ())) / 2.0;
 
  154     Eigen::Vector3f H = 
pos_ 
  157                 (- 
dimensions_[2] * Eigen::Vector3f::UnitZ())) / 2.0;
 
  176     std::vector<Segment::Ptr> candidate_edges = 
edges();
 
  178     for (
size_t i = 0; 
i < candidate_edges.size(); 
i++) {
 
  181       if (edge->intersect(plane, 
p)) {
 
  182         intersects.push_back(
p);
 
  187     pcl::ConvexHull<pcl::PointXYZ> chull;
 
  188     pcl::PointCloud<pcl::PointXYZ>::Ptr chull_input
 
  189       = verticesToPointCloud<pcl::PointXYZ>(intersects);
 
  190     pcl::PointCloud<pcl::PointXYZ>::Ptr chull_cloud
 
  191       (
new pcl::PointCloud<pcl::PointXYZ>);
 
  192     chull.setDimension(2);
 
  193     chull.setInputCloud(chull_input);
 
  196       chull.reconstruct(*chull_cloud);
 
  205     jsk_recognition_msgs::BoundingBox ret;
 
  206     ret.pose.position.x = 
pos_[0];
 
  207     ret.pose.position.y = 
pos_[1];
 
  208     ret.pose.position.z = 
pos_[2];
 
  209     ret.pose.orientation.x = 
rot_.x();
 
  210     ret.pose.orientation.y = 
rot_.y();
 
  211     ret.pose.orientation.z = 
rot_.z();
 
  212     ret.pose.orientation.w = 
rot_.w();
 
  237     for (
size_t i = 0; 
i < vs.size(); 
i++) {
 
  238       transformed_vertices.push_back(pose_offset * vs[
i]);
 
  240     return transformed_vertices;
 
  244                                const Eigen::Vector3f v1,
 
  245                                const Eigen::Vector3f v2,
 
  246                                const Eigen::Vector3f v3)
 
  258     std::vector<Polygon::Ptr> fs(6);
 
  260     Eigen::Vector3f 
A = vs[0];
 
  261     Eigen::Vector3f B = vs[1];
 
  262     Eigen::Vector3f C = vs[2];
 
  263     Eigen::Vector3f D = vs[3];
 
  264     Eigen::Vector3f E = vs[4];
 
  265     Eigen::Vector3f F = vs[5];
 
  266     Eigen::Vector3f G = vs[6];
 
  267     Eigen::Vector3f H = vs[7];
 
  268     Vertices vs0, vs1, vs2, vs3, vs4, vs5, vs6;
 
  269     vs0.push_back(
A); vs0.push_back(E); vs0.push_back(F); vs0.push_back(B);
 
  270     vs1.push_back(B); vs1.push_back(F); vs1.push_back(G); vs1.push_back(C);
 
  271     vs2.push_back(C); vs2.push_back(G); vs2.push_back(H); vs2.push_back(D);
 
  272     vs3.push_back(D); vs3.push_back(H); vs3.push_back(E); vs3.push_back(
A);
 
  273     vs4.push_back(
A); vs4.push_back(B); vs4.push_back(C); vs4.push_back(D);
 
  274     vs5.push_back(E); vs5.push_back(H); vs5.push_back(G); vs5.push_back(F);
 
  286     Eigen::Vector3f local = (Eigen::Vector3f::UnitX() * 
i * 
dimensions_[0] +
 
  289     return Eigen::Translation3f(
pos_) * 
rot_ * local;
 
  295     std::vector<Polygon::Ptr> current_faces = 
faces();
 
  296     double min_distance = DBL_MAX;
 
  297     Eigen::Vector3f min_point;
 
  298     for (
size_t i = 0; 
i < current_faces.size(); 
i++) {
 
  301       Eigen::Vector3f q = 
f->nearestPoint(
p, 
d);
 
  302       if (min_distance > 
d) {
 
  307     distance = min_distance;