Utils/CloudView3D/Inc/CloudView3DTypes.h
杰仔 72db40115f refactor: 重构项目结构并新增点云查看应用
- 将原CloudView重命名为CloudViewApp
- 新增ImageView可缩放图片控件库
- 新增点云过滤、XYZ范围过滤工具类
- 重构Qt项目配置,移除硬编码输出路径
- 新增版本日志文档和应用图标资源
- 扩展激光数据加载器支持回调流式加载和范围过滤
- 新增点云转换器支持多格式加载和回调加载
- 新增点云查看器配置管理功能
- 统一错误码编号偏移量避免冲突
- 修复CloudView3D项目的代码合并冲突
2026-09-11 15:18:09 +08:00

78 lines
1.9 KiB
C++

#ifndef CLOUD_VIEW_3D_TYPES_H
#define CLOUD_VIEW_3D_TYPES_H
#include <cstddef>
#include <cstdint>
#include <vector>
struct Point3D
{
float x, y, z; // millimetres
Point3D() : x(0), y(0), z(0) {}
Point3D(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {}
};
struct Point3DRGB
{
float x, y, z; // millimetres
uint8_t r, g, b;
float pointSize;
Point3DRGB() : x(0), y(0), z(0), r(255), g(255), b(255), pointSize(0) {}
Point3DRGB(float _x,
float _y,
float _z,
uint8_t _r = 255,
uint8_t _g = 255,
uint8_t _b = 255,
float _ps = 0)
: x(_x), y(_y), z(_z), r(_r), g(_g), b(_b), pointSize(_ps) {}
};
template<typename PointT>
class SimplePointCloud
{
public:
std::vector<PointT> points;
std::vector<int> lineIndices;
// Each point's original position within its scan line (-1 when unknown).
std::vector<int> pointInLineIndices;
void clear()
{
points.clear();
lineIndices.clear();
pointInLineIndices.clear();
}
size_t size() const { return points.size(); }
bool empty() const { return points.empty(); }
void reserve(size_t n)
{
points.reserve(n);
lineIndices.reserve(n);
pointInLineIndices.reserve(n);
}
void push_back(const PointT& pt)
{
points.push_back(pt);
pointInLineIndices.push_back(-1);
}
void push_back(const PointT& pt, int lineIdx)
{
points.push_back(pt);
lineIndices.push_back(lineIdx);
pointInLineIndices.push_back(-1);
}
void push_back(const PointT& pt, int lineIdx, int pointInLineIdx)
{
points.push_back(pt);
lineIndices.push_back(lineIdx);
pointInLineIndices.push_back(pointInLineIdx);
}
};
using PointCloudXYZ = SimplePointCloud<Point3D>;
using PointCloudXYZRGB = SimplePointCloud<Point3DRGB>;
#endif // CLOUD_VIEW_3D_TYPES_H