//
// Created by zx on 2019/12/30.
//

#ifndef LOCATE_TASK_H
#define LOCATE_TASK_H
#include "../task/task_command_manager.h"
#include "../error_code/error_code.h"
#include <pcl/point_types.h>
#include <pcl/common/common.h>

/*
 * 测量结果结构体
 */
typedef struct LOCATE_INFORMATION
{
    float locate_x;
    float locate_y;
    float locate_theta;
    float locate_length;
    float locate_width;
    float locate_hight;
    float locate_wheel_base;
    bool locate_correct;
}Locate_information;

/*
 * 测量任务类,负责维护测量任务所需的输入参数以及测量的结果
 */
class Locate_task: public Task_Base
{
public:
    Locate_task();
    virtual  ~Locate_task();
    //设置测量输入点云
    Error_manager set_locate_cloud(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud);
    //获取输入点云
    pcl::PointCloud<pcl::PointXYZ>::Ptr get_locate_cloud();
    //获取测量结果
    Locate_information get_locate_information();
    //设置测量结果
    Error_manager set_locate_information(Locate_information information);
    //获取文件存放路径
    std::string get_save_path();
    //设置文件村昂路径
    Error_manager set_save_path(std::string path);
protected:
    //测量算法输入点云
    pcl::PointCloud<pcl::PointXYZ>::Ptr         m_locate_cloud_ptr;
    //测量结果
    Locate_information                          m_locate_information;
    //测量中间文件存放路径
    std::string                                 m_save_path;
};


#endif //LOCATE_TASK_H
