GrabBag/Module/CloudShow/Inc/ICloudShow.h

72 lines
2.0 KiB
C
Raw Normal View History

#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