GrabBag/Module/CloudShow/Inc/ICloudShow.h
2026-06-13 13:24:31 +08:00

72 lines
2.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 HWNDnullptr 则独立窗口
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