opensurgsim
TetrahedronMesh-inl.h
1 // This file is a part of the OpenSurgSim project.
2 // Copyright 2013, SimQuest Solutions Inc.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 
16 #ifndef SURGSIM_DATASTRUCTURES_TETRAHEDRONMESH_INL_H
17 #define SURGSIM_DATASTRUCTURES_TETRAHEDRONMESH_INL_H
18 
19 namespace SurgSim
20 {
21 
22 namespace DataStructures
23 {
24 
25 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
28 {
29 }
30 
31 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
34 {
35 }
36 
37 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
38 size_t
40  addEdge(const EdgeType& edge)
41 {
42  m_edges.push_back(edge);
43  return m_edges.size() - 1;
44 }
45 
46 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
47 size_t
49  addTriangle(const TriangleType& triangle)
50 {
51  m_triangles.push_back(triangle);
52  return m_triangles.size() - 1;
53 }
54 
55 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
56 size_t
58  addTetrahedron(const TetrahedronType& tetrahedron)
59 {
60  m_tetrahedrons.push_back(tetrahedron);
61  return m_tetrahedrons.size() - 1;
62 }
63 
64 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
65 size_t
67  getNumEdges() const
68 {
69  return m_edges.size();
70 }
71 
72 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
73 size_t
76 {
77  return m_triangles.size();
78 }
79 
80 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
81 size_t
84 {
85  return m_tetrahedrons.size();
86 }
87 
88 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
89 const std::vector<typename TetrahedronMesh<VertexData, EdgeData, TriangleData, TetrahedronData>::EdgeType>&
91  getEdges() const
92 {
93  return m_edges;
94 }
95 
96 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
97 std::vector<typename TetrahedronMesh<VertexData, EdgeData, TriangleData, TetrahedronData>::EdgeType>&
100 {
101  return m_edges;
102 }
103 
104 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
105 const std::vector<typename TetrahedronMesh<VertexData, EdgeData, TriangleData, TetrahedronData>::TriangleType>&
108 {
109  return m_triangles;
110 }
111 
112 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
113 std::vector<typename TetrahedronMesh<VertexData, EdgeData, TriangleData, TetrahedronData>::TriangleType>&
116 {
117  return m_triangles;
118 }
119 
120 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
121 const std::vector<typename TetrahedronMesh<VertexData, EdgeData, TriangleData, TetrahedronData>::TetrahedronType>&
124 {
125  return m_tetrahedrons;
126 }
127 
128 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
129 std::vector<typename TetrahedronMesh<VertexData, EdgeData, TriangleData, TetrahedronData>::TetrahedronType>&
132 {
133  return m_tetrahedrons;
134 }
135 
136 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
139  getEdge(size_t id) const
140 {
141  return m_edges[id];
142 }
143 
144 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
147  getEdge(size_t id)
148 {
149  return m_edges[id];
150 }
151 
152 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
155  getTriangle(size_t id) const
156 {
157  return m_triangles[id];
158 }
159 
160 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
163  getTriangle(size_t id)
164 {
165  return m_triangles[id];
166 }
167 
168 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
171  getTetrahedron(size_t id) const
172 {
173  return m_tetrahedrons[id];
174 }
175 
176 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
179  getTetrahedron(size_t id)
180 {
181  return m_tetrahedrons[id];
182 }
183 
184 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
185 bool
187  isValid() const
188 {
190  EdgeType;
192  TriangleType;
195 
196  size_t numVertices = Vertices<VertexData>::getNumVertices();
197 
198  // Test edges validity
199  for (typename std::vector<EdgeType>::const_iterator it = m_edges.begin();
200  it != m_edges.end();
201  it++)
202  {
203  for (size_t vertexId = 0; vertexId < 2; vertexId++)
204  {
205  if (it->verticesId[vertexId] >= numVertices)
206  {
207  return false;
208  }
209  }
210  }
211 
212  // Test triangles validity
213  for (typename std::vector<TriangleType>::const_iterator it = m_triangles.begin();
214  it != m_triangles.end();
215  it++)
216  {
217  for (size_t vertexId = 0; vertexId < 3; vertexId++)
218  {
219  if (it->verticesId[vertexId] >= numVertices)
220  {
221  return false;
222  }
223  }
224  }
225 
226  // Test tetrahedrons validity
227  for (typename std::vector<TetrahedronType>::const_iterator it = m_tetrahedrons.begin();
228  it != m_tetrahedrons.end();
229  it++)
230  {
231  for (size_t vertexId = 0; vertexId < 4; vertexId++)
232  {
233  if (it->verticesId[vertexId] >= numVertices)
234  {
235  return false;
236  }
237  }
238  }
239 
240  return true;
241 }
242 
243 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
244 void
247 {
248  m_edges.clear();
249 }
250 
251 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
252 void
255 {
256  m_triangles.clear();
257 }
258 
259 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
260 void
263 {
264  m_tetrahedrons.clear();
265 }
266 
267 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
268 bool
270  isEqual(const Vertices<VertexData>& mesh) const
271 {
272  const TetrahedronMesh& tetrahedronMesh = static_cast<const TetrahedronMesh&>(mesh);
273  return Vertices<VertexData>::isEqual(mesh) && m_edges == tetrahedronMesh.getEdges() &&
274  m_triangles == tetrahedronMesh.getTriangles() && m_tetrahedrons == tetrahedronMesh.getTetrahedrons();
275 }
276 
277 template <class VertexData, class EdgeData, class TriangleData, class TetrahedronData>
278 void
280  doClear()
281 {
282  doClearTetrahedrons();
283  doClearTriangles();
284  doClearEdges();
286 }
287 
288 }; // namespace DataStructures
289 
290 }; // namespace SurgSim
291 
292 #endif // SURGSIM_DATASTRUCTURES_TETRAHEDRONMESH_INL_H
const std::vector< EdgeType > & getEdges() const
Returns a vector containing the position of each edge.
Definition: TetrahedronMesh-inl.h:91
Wraps glewInit() to separate the glew opengl definitions from the osg opengl definitions only imgui n...
Definition: AddRandomSphereBehavior.cpp:36
size_t getNumVertices() const
Returns the number of vertices in this mesh.
Definition: Vertices-inl.h:99
Basic class for storing Tetrahedron Meshes, handling basic vertex, edge, triangle and tetrahedron fun...
Definition: TetrahedronMesh.h:60
bool isValid() const
Test if the TetrahedronMesh is valid (valid vertex Ids used in all MeshElements)
Definition: TetrahedronMesh-inl.h:187
virtual void doClearEdges()
Remove all edges from the mesh.
Definition: TetrahedronMesh-inl.h:246
size_t getNumEdges() const
Returns the number of edges in this mesh.
Definition: TetrahedronMesh-inl.h:67
size_t addTriangle(const TriangleType &triangle)
Adds a triangle to the mesh.
Definition: TetrahedronMesh-inl.h:49
virtual void doClearTriangles()
Remove all triangles from the mesh.
Definition: TetrahedronMesh-inl.h:254
size_t getNumTetrahedrons() const
Returns the number of tetrahedrons in this mesh.
Definition: TetrahedronMesh-inl.h:83
const std::vector< TetrahedronType > & getTetrahedrons() const
Returns a vector containing the position of each tetrahedron.
Definition: TetrahedronMesh-inl.h:123
virtual bool isEqual(const Vertices< VertexData > &mesh) const
Internal comparison of meshes of the same type: returns true if equal, false if not equal...
Definition: TetrahedronMesh-inl.h:270
size_t addEdge(const EdgeType &edge)
Adds an edge to the mesh.
Definition: TetrahedronMesh-inl.h:40
virtual void doClearTetrahedrons()
Remove all tetrahedrons from the mesh.
Definition: TetrahedronMesh-inl.h:262
size_t addTetrahedron(const TetrahedronType &tetrahedron)
Adds a tetrahedron to the mesh.
Definition: TetrahedronMesh-inl.h:58
virtual ~TetrahedronMesh()
Destructor.
Definition: TetrahedronMesh-inl.h:33
TetrahedronMesh()
Constructor. The mesh is initially empty (no vertices, no edges, no triangles, no tetrahedrons)...
Definition: TetrahedronMesh-inl.h:27
Element structure for meshes.
Definition: MeshElement.h:44
const TetrahedronType & getTetrahedron(size_t id) const
Returns the specified tetrahedron.
Definition: TetrahedronMesh-inl.h:171
virtual bool isEqual(const Vertices &mesh) const
Internal comparison of meshes of the same type: returns true if equal, false if not equal...
Definition: Vertices-inl.h:184
const TriangleType & getTriangle(size_t id) const
Returns the specified triangle.
Definition: TetrahedronMesh-inl.h:155
virtual void doClearVertices()
Remove all vertices from the mesh.
Definition: Vertices-inl.h:178
const std::vector< TriangleType > & getTriangles() const
Returns a vector containing the position of each triangle.
Definition: TetrahedronMesh-inl.h:107
const EdgeType & getEdge(size_t id) const
Returns the specified edge.
Definition: TetrahedronMesh-inl.h:139
Base class for mesh structures, handling basic vertex functionality.
Definition: Vertices.h:51
size_t getNumTriangles() const
Returns the number of triangles in this mesh.
Definition: TetrahedronMesh-inl.h:75