#ifndef ICLOUDSHOW_H #define ICLOUDSHOW_H #include "CloudShow_global.h" #include "VZNL_Types.h" #include #include #include #include /// 帧元信息(不包含点数据) struct CloudFrameInfo { uint32_t height = 0; ///< 线数(organized cloud) uint32_t width = 0; ///< 每线点数 bool isDense = false; }; class CLOUDSHOW_EXPORT ICloudShow { public: /// 标准格式别名 using CloudData = std::vector>; virtual ~ICloudShow() = default; /// 工厂方法 static std::unique_ptr 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