bool pcl::gpu::kinfuLS::CyclicalBuffer::checkForShift (const TsdfVolume::Ptr volume, const Eigen::Affine3f &cam_pose, const double distance_camera_target, const bool perform_shift, const bool last_shift, const bool force_shift) { bool result = false; // project the target point in the cube pcl::PointXYZ targetPoint; targetPoint.x = 0.0f; targetPoint.y = 0.0f; targetPoint.z = distance_camera_target; // place the point at camera position + distance_camera_target on Z targetPoint = pcl::transformPoint (targetPoint, cam_pose); // check distance from the cube's center pcl::PointXYZ center_cube; center_cube.x = buffer_.origin_metric.x + buffer_.volume_size.x/2.0f; center_cube.y = buffer_.origin_metric.y + buffer_.volume_size.y/2.0f; center_cube.z = buffer_.origin_metric.z + buffer_.volume_size.z/2.0f; if (pcl::euclideanDistance (targetPoint, center_cube) > distance_threshold_) result = true; if (!perform_shift && !force_shift) return (result); // perform shifting operations if (result || force_shift) performShift (volume, targetPoint, last_shift); return (result); }
static void performReduce( traceback **h, a_pro *pro ) { an_item *p; for( p = pro->item; p->p.sym != NULL; ++p ) { popTrace( h ); } performShift( h, pro->sym ); }