Easy3D 2.5.3
surface_mesh_components.h
1/********************************************************************
2 * Copyright (C) 2015-2021 by Liangliang Nan <liangliang.nan@gmail.com>
3 * Copyright (C) 2000-2005 INRIA - Project ALICE
4 *
5 * The code in this file is partly from OGF/Graphite (2.0 alpha-4) with
6 * modifications and enhancement:
7 * https://gforge.inria.fr/forum/forum.php?forum_id=11459
8 * The original code was distributed under the GNU GPL license.
9 ********************************************************************/
10
11#ifndef EASY3D_ALGO_SURFACE_MESH_COMPONENTS_H
12#define EASY3D_ALGO_SURFACE_MESH_COMPONENTS_H
13
14#include <vector>
15
16#include <easy3d/core/surface_mesh.h>
17
18
19namespace easy3d {
20
28 public:
29 typedef SurfaceMesh::Face Face;
31 typedef SurfaceMesh::Edge Edge;
33
34 public:
35 explicit SurfaceMeshComponent(SurfaceMesh *mesh) : mesh_(mesh) {}
36
38 static std::vector<SurfaceMeshComponent> extract(SurfaceMesh *mesh, bool descending = true);
39
42
45
46 const std::vector<Face> &faces() const { return faces_; }
47
48 const std::vector<Vertex> &vertices() const { return vertices_; }
49
50 const std::vector<Edge> &edges() const { return edges_; }
51
52 const std::vector<Halfedge> &halfedges() const { return halfedges_; }
53
54 std::size_t n_faces() const { return faces_.size(); }
55
56 std::size_t n_vertices() const { return vertices_.size(); }
57
58 std::size_t n_edges() const { return edges_.size(); }
59
60 std::size_t n_halfedges() const { return halfedges_.size(); }
61
63 SurfaceMesh *mesh() const { return mesh_; }
64
69 float area() const;
70
72 float border_length() const;
73
75 Box3 bbox() const;
76
78 void translate(const vec3 &offset);
79
81 SurfaceMesh *to_mesh() const;
82
83 private:
84 SurfaceMesh *mesh_;
85 std::vector<Face> faces_;
86 std::vector<Vertex> vertices_;
87 std::vector<Halfedge> halfedges_;
88 std::vector<Edge> edges_;
89 };
90
91}
92
93#endif // EASY3D_ALGO_SURFACE_MESH_COMPONENTS_H
94
A connected component of a SurfaceMesh.
Definition: surface_mesh_components.h:27
SurfaceMesh * to_mesh() const
Definition: surface_mesh_components.cpp:21
void translate(const vec3 &offset)
Definition: surface_mesh_components.cpp:111
static std::vector< SurfaceMeshComponent > extract(SurfaceMesh *mesh, bool descending=true)
Definition: surface_mesh_components.cpp:118
float area() const
Definition: surface_mesh_components.cpp:50
Box3 bbox() const
Definition: surface_mesh_components.cpp:102
SurfaceMesh * mesh() const
Definition: surface_mesh_components.h:63
float border_length() const
Definition: surface_mesh_components.cpp:86
A halfedge data structure for polygonal meshes of 2-manifold.
Definition: surface_mesh.h:52
Definition: collider.cpp:182
Definition: surface_mesh.h:124
Definition: surface_mesh.h:134
Definition: surface_mesh.h:114
Definition: surface_mesh.h:104