ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
GenericIndexedMesh.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 "GenericMesh.h"
12 
13 namespace cloudViewer {
14 
17  union {
18  struct {
19  unsigned i1, i2, i3;
20  };
21  unsigned i[3];
22  };
23 
25  VerticesIndexes(unsigned _i1, unsigned _i2, unsigned _i3)
26  : i1(_i1), i2(_i2), i3(_i3) {}
27 
29  VerticesIndexes() : i1(0), i2(0), i3(0) {}
30 
31  inline unsigned int getDimension() const { return 3; }
32 };
33 
35 
38 public:
39  GenericIndexedMesh() = default;
41  ~GenericIndexedMesh() override = default;
42 
44 
50  virtual GenericTriangle* _getTriangle(unsigned triangleIndex) = 0;
51 
53 
56  virtual VerticesIndexes* getTriangleVertIndexes(unsigned triangleIndex) = 0;
57 
59 
63  virtual void getTriangleVertices(unsigned triangleIndex,
64  CCVector3& A,
65  CCVector3& B,
66  CCVector3& C) const = 0;
67  virtual void getTriangleVertices(unsigned triangleIndex,
68  double A[3],
69  double B[3],
70  double C[3]) const = 0;
71 
74 
78 
80  virtual bool normalsAvailable() const { return false; }
81 
83 
89  virtual bool interpolateNormals(unsigned triIndex,
90  const CCVector3& P,
91  CCVector3& N) {
92  (void)triIndex;
93  (void)P;
94  (void)N;
95  return false;
96  }
97 };
98 
99 } // namespace cloudViewer
#define CV_CORE_LIB_API
Definition: CVCoreLibWin.h:15
A generic mesh with index-based vertex access.
virtual bool interpolateNormals(unsigned triIndex, const CCVector3 &P, CCVector3 &N)
Interpolates normal(s) inside a given triangle.
virtual GenericTriangle * _getTriangle(unsigned triangleIndex)=0
Returns the ith triangle.
~GenericIndexedMesh() override=default
Default destructor.
virtual VerticesIndexes * getNextTriangleVertIndexes()=0
virtual void getTriangleVertices(unsigned triangleIndex, double A[3], double B[3], double C[3]) const =0
virtual bool normalsAvailable() const
Returns whether normals are available.
virtual VerticesIndexes * getTriangleVertIndexes(unsigned triangleIndex)=0
Returns the indexes of the vertices of a given triangle.
virtual void getTriangleVertices(unsigned triangleIndex, CCVector3 &A, CCVector3 &B, CCVector3 &C) const =0
Returns the vertices of a given triangle.
A generic triangle interface.
Generic file read and write utility for python interface.
Triangle described by the indexes of its 3 vertices.
unsigned int getDimension() const
VerticesIndexes()
Default constructor.
VerticesIndexes(unsigned _i1, unsigned _i2, unsigned _i3)
Constructor with specified indexes.