OpenMesh

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
TriConnectivity.hh
1 /*===========================================================================*\
2 * *
3 * OpenMesh *
4 * Copyright (C) 2001-2012 by Computer Graphics Group, RWTH Aachen *
5 * www.openmesh.org *
6 * *
7 *---------------------------------------------------------------------------*
8 * This file is part of OpenMesh. *
9 * *
10 * OpenMesh 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 * OpenMesh 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 OpenMesh. If not, *
31 * see <http://www.gnu.org/licenses/>. *
32 * *
33 \*===========================================================================*/
34
35 /*===========================================================================*\
36 * *
37 * $Revision: 760 $ *
38 * $Date: 2012-11-06 08:41:28 +0100 (Di, 06 Nov 2012) $ *
39 * *
40 \*===========================================================================*/
41
42 #ifndef OPENMESH_TRICONNECTIVITY_HH
43 #define OPENMESH_TRICONNECTIVITY_HH
44
45 #include <OpenMesh/Core/Mesh/PolyConnectivity.hh>
46
47 namespace OpenMesh {
48
51 class OPENMESHDLLEXPORT TriConnectivity : public PolyConnectivity
52 {
53 public:
54
55 TriConnectivity() {}
56 virtual ~TriConnectivity() {}
57
58 inline static bool is_triangles()
59 { return true; }
60
64 inline void assign_connectivity(const TriConnectivity& _other)
65 { PolyConnectivity::assign_connectivity(_other); }
66
67 inline void assign_connectivity(const PolyConnectivity& _other)
68 {
69 PolyConnectivity::assign_connectivity(_other);
70 triangulate();
71 }
72
77
86 FaceHandle add_face(const VertexHandle* _vhandles, size_t _vhs_size);
87
96 FaceHandle add_face(const std::vector<VertexHandle>& _vhandles);
97
108 FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2);
109
111
115 inline VertexHandle opposite_vh(HalfedgeHandle _heh) const
116 {
117 return is_boundary(_heh) ? InvalidVertexHandle :
118 to_vertex_handle(next_halfedge_handle(_heh));
119 }
120
124 VertexHandle opposite_he_opposite_vh(HalfedgeHandle _heh) const
125 { return opposite_vh(opposite_halfedge_handle(_heh)); }
126
130
131
136 bool is_collapse_ok(HalfedgeHandle _heh);
137
139 HalfedgeHandle vertex_split(VertexHandle v0, VertexHandle v1,
140 VertexHandle vl, VertexHandle vr);
141
143 bool is_flip_ok(EdgeHandle _eh) const;
144
147 void flip(EdgeHandle _eh);
148
149
161 void split(EdgeHandle _eh, VertexHandle _vh);
162
174 void split_copy(EdgeHandle _eh, VertexHandle _vh);
175
181 inline void split(FaceHandle _fh, VertexHandle _vh)
182 { PolyConnectivity::split(_fh, _vh); }
183
189 inline void split_copy(FaceHandle _fh, VertexHandle _vh)
190 { PolyConnectivity::split_copy(_fh, _vh); }
191
193
194 private:
196 HalfedgeHandle insert_loop(HalfedgeHandle _hh);
198 HalfedgeHandle insert_edge(VertexHandle _vh,
199 HalfedgeHandle _h0, HalfedgeHandle _h1);
200 };
201
202 }
203
204 #endif//OPENMESH_TRICONNECTIVITY_HH