72 lines
2.0 KiB
C++
72 lines
2.0 KiB
C++
#ifndef ICLOUDSHOW_H
|
||
#define ICLOUDSHOW_H
|
||
|
||
#include "CloudShow_global.h"
|
||
#include "VZNL_Types.h"
|
||
|
||
#include <memory>
|
||
#include <string>
|
||
#include <utility>
|
||
#include <vector>
|
||
|
||
/// 帧元信息(不包含点数据)
|
||
struct CloudFrameInfo
|
||
{
|
||
uint32_t height = 0; ///< 线数(organized cloud)
|
||
uint32_t width = 0; ///< 每线点数
|
||
bool isDense = false;
|
||
};
|
||
|
||
class CLOUDSHOW_EXPORT ICloudShow
|
||
{
|
||
public:
|
||
/// 标准格式别名
|
||
using CloudData = std::vector<std::pair<EVzResultDataType, SVzLaserLineData>>;
|
||
|
||
virtual ~ICloudShow() = default;
|
||
|
||
/// 工厂方法
|
||
static std::unique_ptr<ICloudShow> Create();
|
||
|
||
/// 单次显示:弹出窗口,阻塞直到关闭
|
||
virtual int Show(const CloudData& cloudData,
|
||
const CloudFrameInfo& info,
|
||
const std::string& windowName = "PointCloud") = 0;
|
||
|
||
/// 连续显示:非阻塞启动渲染窗口
|
||
/// @param hwnd 父窗口句柄(Windows HWND),nullptr 则独立窗口
|
||
virtual int Start(const std::string& windowName = "PointCloud", void* hwnd = nullptr) = 0;
|
||
|
||
/// 停止连续显示
|
||
virtual int Stop() = 0;
|
||
|
||
/// 消费点云并驱动一次渲染事件(必须与 Start 同线程调用)
|
||
virtual int SpinOnce(int ms = 1) = 0;
|
||
|
||
/// 是否正在连续显示
|
||
virtual bool IsRunning() const = 0;
|
||
|
||
/// 推送一帧到显示 + 可选保存队列(全帧频调用)
|
||
virtual void PushFrame(const CloudData& cloudData,
|
||
const CloudFrameInfo& info) = 0;
|
||
|
||
/// 设置保存基目录(默认 ".")
|
||
virtual void SetSaveBaseDir(const std::string& dir) = 0;
|
||
|
||
/// 设置保存帧间隔(默认 1=每帧都存,10=每10帧存1帧)
|
||
virtual void SetSaveFrameInterval(int interval) = 0;
|
||
|
||
/// 是否正在保存或刷新中
|
||
virtual bool IsSaveActive() const = 0;
|
||
|
||
// ── 单帧保存 ──
|
||
|
||
/// 键盘按钮查询
|
||
virtual bool IsQuitRequested() const = 0;
|
||
virtual bool IsSaveRequested() const = 0;
|
||
virtual void ClearSaveRequest() = 0;
|
||
|
||
};
|
||
|
||
#endif // ICLOUDSHOW_H
|