@startuml
title 测量结果检验模块


class Railing
{

    + * 构造函数()
    + * a,b,c代表栏杆所在直线方程, ax+by+c=0()
    + * width:表示栏杆的宽()
    +Railing(float a,float b,float c,float width);
    + * 检验结果框,是否会与栏杆冲突()
    +Error_manager verify(cv::RotatedRect rotate_rect);

    -float m_a;
    -float m_b;
    -float m_c;
    -float m_width;
}
note left of Railing
    栏杆检验类
    检验测量结果是否碰撞栏杆
    栏杆信息包括:栏杆斜角,宽度
end note

class Terminal_region_limit
{
    +Terminal_region_limit(Railing* left_railing,Railing* right_railing);
  
    + * 检验是否碰撞左右栏杆,()
    + * 返回结果:左边碰撞,右边碰撞,左右都碰撞,正确()
    +Error_manager verify(cv::RotatedRect rect);

    -//左边栏杆
    -Railing*                     mp_left_railing;
    -//右边栏杆
    -Railing*                     mp_right_railing;
}
note left of Terminal_region_limit
    硬件场地检验类
    检验测量结果是否满足现场安全要求
end note

class Verify_result
{
    + * 构造函数
    + * parameter:硬件限制配置参数
    +Verify_result(Hardware_limit::Hardware_parameter parameter);

    + * 检验硬件限制
    + * rotate_rect:待检验的旋转矩形
    + * height:输入高度
    + * verify_vertex:只检验中心点,不检验顶角
    +Error_manager verify(cv::RotatedRect rotate_rect,float height,bool verify_vertex=true);

    + * 检验硬件限制
    + * rotate_rect:待检验的旋转矩形
    + * height:输入高度
    + * terminal_id:终端编号,终端对应的左右栏杆号为: id,id+1
    + * code:返回超界状态(前后左右,按位或运算)
    + * 主要用于电子围栏,检验栏杆及前后
    +Error_manager verify(cv::RotatedRect rotate_rect,int terminal_id,int& code);

    -Hardware_limit::Hardware_parameter          m_hardware_parameter;
}
note left of Verify_result
    测量结果检测器
    根据现场硬件要求
    检验测量结果是否合法(安全性)
end note

note left of Hardware_parameter
    硬件配置类
    配置现场硬件参数
    包括 前后左右超界范围,栏杆参数等
end note 
Terminal_region_limit --> Railing
Verify_result --> Terminal_region_limit
Verify_result --> Hardware_parameter

@enduml