geolib2
Mesh.h
Go to the documentation of this file.
1 #ifndef GEOLIB_MESH_H_
2 #define GEOLIB_MESH_H_
3 
4 #include "Triangle.h"
5 
6 #include <vector>
7 
8 namespace geo {
9 
11 struct TriangleI {
12 
13  TriangleI(unsigned int i1, unsigned int i2, unsigned int i3) : i1_(i1), i2_(i2), i3_(i3) {}
14 
15  unsigned int i1_, i2_, i3_;
16 
17  // serialize TriangleI to stream
18  friend std::ostream& operator<< (std::ostream& out, const TriangleI& tri) {
19  out << "[ " << tri.i1_ << " " << tri.i2_ << " " << tri.i3_ << " ]";
20  return out;
21  }
22 };
23 
25 class Mesh {
26 
27 public:
28 
29  Mesh();
30 
31  virtual ~Mesh();
32 
40  unsigned int addPoint(double x, double y, double z);
41 
47  unsigned int addPoint(const geo::Vector3& p);
48 
55  void addTriangle(unsigned int i1, unsigned int i2, unsigned int i3);
56 
61  void add(const Mesh& mesh);
62 
67  inline bool empty() const { return triangles_i_.empty(); }
68 
73  inline std::size_t size() const { return triangles_i_.size(); }
74 
76  inline void clear() {
77  triangles_i_.clear();
78  points_.clear();
79 
81  }
82 
88  Mesh getTransformed(const geo::Transform t) const;
89 
94  const std::vector<Triangle>& getTriangles() const;
95 
100  const std::vector<geo::Vector3>& getPoints() const;
101 
106  const std::vector<TriangleI>& getTriangleIs() const;
107 
110 
116  double getMaxRadius() const;
117 
122  double getSquaredMaxRadius() const;
123 
129  const geo::Vector3 getTriangleNormal(unsigned int index) const;
130 
131 protected:
132 
133  mutable double max_radius_cache_;
134  mutable double max_radius_squared_cache_;
135 
137 
139 
141 
144  triangles_cache_.clear();
146  max_radius_cache_ = 0;
147  }
148 };
149 
150 }
151 
152 
153 #endif
geo::Mesh::max_radius_squared_cache_
double max_radius_squared_cache_
Cached squared maximum radius.
Definition: Mesh.h:134
geo::Mesh::empty
bool empty() const
Definition: Mesh.h:67
geo::TriangleI::operator<<
friend std::ostream & operator<<(std::ostream &out, const TriangleI &tri)
Definition: Mesh.h:18
geo::TriangleI::i3_
unsigned int i3_
Points in the Mesh::points_ vector.
Definition: Mesh.h:15
geo::Mesh::Mesh
Mesh()
Definition: Mesh.cpp:8
geo::Mesh::getTriangleNormal
const geo::Vector3 getTriangleNormal(unsigned int index) const
Calculates the nornaml of a triangle in the mesh.
Definition: Mesh.cpp:132
geo
Definition: Box.h:6
geo::Mesh::getTriangleIs
const std::vector< TriangleI > & getTriangleIs() const
Definition: Mesh.cpp:46
vector
geo::Mesh::triangles_cache_
std::vector< Triangle > triangles_cache_
Cached output result.
Definition: Mesh.h:140
geo::Mesh::add
void add(const Mesh &mesh)
Definition: Mesh.cpp:31
geo::Mesh::getMaxRadius
double getMaxRadius() const
Definition: Mesh.cpp:125
geo::Mesh::getSquaredMaxRadius
double getSquaredMaxRadius() const
Definition: Mesh.cpp:116
geo::Mesh::size
std::size_t size() const
Definition: Mesh.h:73
std::vector::clear
T clear(T... args)
geo::TriangleI
Definition: Mesh.h:11
geo::TriangleI::i2_
unsigned int i2_
Definition: Mesh.h:15
geo::Mesh::getPoints
const std::vector< geo::Vector3 > & getPoints() const
Definition: Mesh.cpp:42
geo::Mesh::getTransformed
Mesh getTransformed(const geo::Transform t) const
Definition: Mesh.cpp:59
geo::Mesh::addPoint
unsigned int addPoint(double x, double y, double z)
Definition: Mesh.cpp:15
geo::Mesh::getTriangles
const std::vector< Triangle > & getTriangles() const
Definition: Mesh.cpp:50
std::ostream
geo::Mesh::clear
void clear()
Definition: Mesh.h:76
Triangle.h
geo::TriangleI::TriangleI
TriangleI(unsigned int i1, unsigned int i2, unsigned int i3)
Definition: Mesh.h:13
geo::Mesh::invalidateCache
void invalidateCache()
Definition: Mesh.h:143
geo::Transform
Definition: matrix.h:170
geo::Vector3
Definition: matrix.h:12
geo::Mesh::triangles_i_
std::vector< TriangleI > triangles_i_
Triangles of the mesh.
Definition: Mesh.h:138
geo::Mesh::~Mesh
virtual ~Mesh()
Definition: Mesh.cpp:12
geo::Mesh::max_radius_cache_
double max_radius_cache_
Cached maximum radius.
Definition: Mesh.h:133
geo::Mesh::filterOverlappingVertices
void filterOverlappingVertices()
Definition: Mesh.cpp:84
geo::Mesh::addTriangle
void addTriangle(unsigned int i1, unsigned int i2, unsigned int i3)
Definition: Mesh.cpp:26
std::size_t
geo::Mesh::points_
std::vector< geo::Vector3 > points_
Points of the mesh.
Definition: Mesh.h:136
geo::Mesh
Definition: Mesh.h:25
geo::TriangleI::i1_
unsigned int i1_
Definition: Mesh.h:15