Developer Documentation

TetrahedralMeshIterators.hh
1 /*===========================================================================*\
2 * *
3 * OpenVolumeMesh *
4 * Copyright (C) 2011 by Computer Graphics Group, RWTH Aachen *
5 * www.openvolumemesh.org *
6 * *
7 *---------------------------------------------------------------------------*
8 * This file is part of OpenVolumeMesh. *
9 * *
10 * OpenVolumeMesh is free software: you can redistribute it and/or modify *
11 * it under the terms of the GNU Lesser General Public License as *
12 * published by the Free Software Foundation, either version 3 of *
13 * the License, or (at your option) any later version with the *
14 * following exceptions: *
15 * *
16 * If other files instantiate templates or use macros *
17 * or inline functions from this file, or you compile this file and *
18 * link it with other files to produce an executable, this file does *
19 * not by itself cause the resulting executable to be covered by the *
20 * GNU Lesser General Public License. This exception does not however *
21 * invalidate any other reasons why the executable file might be *
22 * covered by the GNU Lesser General Public License. *
23 * *
24 * OpenVolumeMesh is distributed in the hope that it will be useful, *
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
27 * GNU Lesser General Public License for more details. *
28 * *
29 * You should have received a copy of the GNU LesserGeneral Public *
30 * License along with OpenVolumeMesh. If not, *
31 * see <http://www.gnu.org/licenses/>. *
32 * *
33 \*===========================================================================*/
34
35 /*===========================================================================*\
36 * *
37 * $Revision$ *
38 * $Date$ *
39 * $LastChangedBy$ *
40 * *
41 \*===========================================================================*/
42
43 #ifndef TETRAHEDRALMESHITERATORS_HH
44 #define TETRAHEDRALMESHITERATORS_HH
45
46 #include "../Core/Iterators.hh"
47
48 namespace OpenVolumeMesh {
49
50 class TetrahedralMeshTopologyKernel;
51
52
59 class TetVertexIter : public BaseCirculator<CellHandle,
60 VertexHandle> {
61 private:
62 typedef BaseCirculator<CellHandle,
63 VertexHandle> BaseIter;
64 public:
65 TetVertexIter(const CellHandle& _ref_h,
66 const TetrahedralMeshTopologyKernel* _mesh,
67 int _max_laps = 1);
68
69 // Post increment/decrement operator
70 TetVertexIter operator++(int) {
71 TetVertexIter cpy = *this;
72 ++(*this);
73 return cpy;
74 }
75 TetVertexIter operator--(int) {
76 TetVertexIter cpy = *this;
77 --(*this);
78 return cpy;
79 }
80 TetVertexIter operator+(int _n) {
81 TetVertexIter cpy = *this;
82 for(int i = 0; i < _n; ++i) {
83 ++cpy;
84 }
85 return cpy;
86 }
87 TetVertexIter operator-(int _n) {
88 TetVertexIter cpy = *this;
89 for(int i = 0; i < _n; ++i) {
90 --cpy;
91 }
92 return cpy;
93 }
94 TetVertexIter& operator+=(int _n) {
95 for(int i = 0; i < _n; ++i) {
96 ++(*this);
97 }
98 return *this;
99 }
100 TetVertexIter& operator-=(int _n) {
101 for(int i = 0; i < _n; ++i) {
102 --(*this);
103 }
104 return *this;
105 }
106
107 TetVertexIter& operator++();
108 TetVertexIter& operator--();
109
110 private:
111 std::vector<VertexHandle> vertices_;
112 size_t cur_index_;
113 };
114
115 } // Namespace OpenVolumeMesh
116
117 #endif /* TETRAHEDRALMESHITERATORS_HH */
OpenVolumeMesh
Definition: ColorAttrib.hh:53
OpenVolumeMesh::HandleT< Entity::Cell >
OpenVolumeMesh::TetVertexIter
Iterate over all vertices of a hexahedron in a specific order.
Definition: TetrahedralMeshIterators.hh:59
OpenVolumeMesh::TetrahedralMeshTopologyKernel
A data structure based on PolyhedralMesh with specializations for tetrahedra.
Definition: TetrahedralMeshTopologyKernel.hh:63
OpenVolumeMesh::BaseCirculator
Definition: Iterators.hh:166