OpenMesh
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
TriConnectivity.hh
1 /*===========================================================================*\
2  * *
3  * OpenMesh *
4  * Copyright (C) 2001-2011 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: 558 $ *
38  * $Date: 2012-03-20 10:08:20 +0100 (Di, 20 Mär 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 
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)
66 
67  inline void assign_connectivity(const PolyConnectivity& _other)
68  {
70  triangulate();
71  }
72 
79  FaceHandle add_face(const std::vector<VertexHandle>& _vhandles)
80  { return add_face(&_vhandles.front(), _vhandles.size()); }
81 
82  FaceHandle add_face(const VertexHandle* _vhandles, size_t _vhs_size);
83 
85  {
86  VertexHandle vhs[3] = { _vh0, _vh1, _vh2 };
87  return PolyConnectivity::add_face(vhs, 3);
88  }
89 
91 
96  {
97  return is_boundary(_heh) ? InvalidVertexHandle :
98  to_vertex_handle(next_halfedge_handle(_heh));
99  }
100 
105  { return opposite_vh(opposite_halfedge_handle(_heh)); }
106 
110 
111 
116  bool is_collapse_ok(HalfedgeHandle _heh);
117 
120  VertexHandle vl, VertexHandle vr);
121 
123  bool is_flip_ok(EdgeHandle _eh) const;
124 
127  void flip(EdgeHandle _eh);
128 
130  void split(EdgeHandle _eh, VertexHandle _vh);
131 
133  inline void split(FaceHandle _fh, VertexHandle _vh)
134  { PolyConnectivity::split(_fh, _vh); }
135 
137 
138 private:
140  HalfedgeHandle insert_loop(HalfedgeHandle _hh);
142  HalfedgeHandle insert_edge(VertexHandle _vh,
143  HalfedgeHandle _h0, HalfedgeHandle _h1);
144 };
145 
146 }
147 
148 #endif//OPENMESH_TRICONNECTIVITY_HH

acg pic Project OpenMesh, ©  Computer Graphics Group, RWTH Aachen. Documentation generated using doxygen .