ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
SimpleMesh.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 // Local
11 #include "BoundingBox.h"
12 #include "GenericIndexedMesh.h"
13 #include "SimpleTriangle.h"
14 
15 // System
16 #include <vector>
17 
18 namespace cloudViewer {
19 
20 class GenericIndexedCloud;
21 
23 
27 public: // constructors
29 
33  SimpleMesh(GenericIndexedCloud* _theVertices,
34  bool linkVerticesWithMesh = false);
35 
37  ~SimpleMesh() override;
38 
39 public: // inherited methods
40  void forEach(genericTriangleAction action) override;
41  void placeIteratorAtBeginning() override;
42  GenericTriangle* _getNextTriangle() override; // temporary
43  GenericTriangle* _getTriangle(
44  unsigned triangleIndex) override; // temporary
45  VerticesIndexes* getNextTriangleVertIndexes() override;
46  VerticesIndexes* getTriangleVertIndexes(unsigned triangleIndex) override;
47  virtual unsigned size() const override {
48  return static_cast<unsigned>(m_triIndexes.size());
49  }
50  void getBoundingBox(CCVector3& bbMin, CCVector3& bbMax) override;
51  void getTriangleVertices(unsigned triangleIndex,
52  CCVector3& A,
53  CCVector3& B,
54  CCVector3& C) const override;
55  virtual void getTriangleVertices(unsigned triangleIndex,
56  double A[3],
57  double B[3],
58  double C[3]) const override;
59 
60 public: // specific methods
62  inline unsigned capacity() const {
63  return static_cast<unsigned>(m_triIndexes.capacity());
64  }
65 
67  inline const GenericIndexedCloud* vertices() const { return theVertices; }
68 
70  inline void clear() { m_triIndexes.resize(0); }
71 
73 
78  virtual void addTriangle(unsigned i1, unsigned i2, unsigned i3);
79 
81 
84  virtual bool reserve(unsigned n);
85 
87 
92  virtual bool resize(unsigned n);
93 
94  // inherited from GenericIndexedMesh
95  bool normalsAvailable() const override;
96  bool interpolateNormals(unsigned triIndex,
97  const CCVector3& P,
98  CCVector3& N) override;
99 
100 protected:
102  using TriangleIndexesContainer = std::vector<VerticesIndexes>;
105 
107  unsigned globalIterator;
110 
116 
119 };
120 
121 } // namespace cloudViewer
#define CV_CORE_LIB_API
Definition: CVCoreLibWin.h:15
A generic 3D point cloud with index-based point access.
A generic mesh with index-based vertex access.
std::function< void(GenericTriangle &)> genericTriangleAction
Generic function to apply to a triangle (used by foreach)
Definition: GenericMesh.h:53
A generic triangle interface.
A simple mesh structure, with index-based vertex access.
Definition: SimpleMesh.h:26
virtual unsigned size() const override
Returns the number of triangles.
Definition: SimpleMesh.h:47
unsigned globalIterator
Iterator on the list of triangles.
Definition: SimpleMesh.h:107
std::vector< VerticesIndexes > TriangleIndexesContainer
A triangle vertices indexes container.
Definition: SimpleMesh.h:102
SimpleTriangle dummyTriangle
Dump triangle structure to transmit temporary data.
Definition: SimpleMesh.h:109
const GenericIndexedCloud * vertices() const
Returns the vertices.
Definition: SimpleMesh.h:67
unsigned capacity() const
Returns the mesh capacity.
Definition: SimpleMesh.h:62
BoundingBox m_bbox
Bounding-box.
Definition: SimpleMesh.h:118
void clear()
Clears the mesh.
Definition: SimpleMesh.h:70
GenericIndexedCloud * theVertices
The associated point cloud (vertices)
Definition: SimpleMesh.h:112
TriangleIndexesContainer m_triIndexes
The triangles indexes.
Definition: SimpleMesh.h:104
A simple triangle class.
Generic file read and write utility for python interface.
Triangle described by the indexes of its 3 vertices.