ReUseX  0.0.5
3D Point Cloud Processing for Building Reuse
Loading...
Searching...
No Matches
CoplanarPolygon.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2025 Povl Filip Sonne-Frederiksen
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#pragma once
6
7#include <Eigen/Core>
8#include <Eigen/Geometry>
9
10#include <cstdint>
11#include <utility>
12#include <vector>
13
14namespace reusex::geometry {
15
21 std::vector<Eigen::Vector3d> vertices;
22 Eigen::Vector4d plane{0, 0, 0, 0};
23
25 double area() const;
26
28 Eigen::Vector3d centroid() const;
29
31 Eigen::Vector3d normal() const;
32
34 bool is_valid() const;
35
37 std::pair<Eigen::Vector3d, Eigen::Vector3d> bounding_box() const;
38
40 std::vector<uint8_t> serialize_vertices() const;
41
43 static std::vector<Eigen::Vector3d> deserialize_vertices(const void *data,
44 size_t size);
45};
46
47} // namespace reusex::geometry
A closed 3D polygon whose vertices are coplanar.
std::vector< uint8_t > serialize_vertices() const
Serialize vertices to compact binary (N * 3 * sizeof(double) bytes).
std::vector< Eigen::Vector3d > vertices
std::pair< Eigen::Vector3d, Eigen::Vector3d > bounding_box() const
Axis-aligned bounding box (min, max).
Eigen::Vector3d normal() const
Unit normal extracted from plane coefficients.
bool is_valid() const
True when >= 3 vertices and nonzero plane normal.
Eigen::Vector3d centroid() const
Centroid (arithmetic mean of vertices).
static std::vector< Eigen::Vector3d > deserialize_vertices(const void *data, size_t size)
Deserialize vertices from compact binary.
double area() const
Signed area via Newell's method projected onto the plane normal.