OpenMesh
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TriConnectivity.hh
1 /*===========================================================================*\
2  * *
3  * OpenMesh *
4  * Copyright (C) 2001-2014 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: 990 $ *
38  * $Date: 2014-02-05 10:01:07 +0100 (Mi, 05 Feb 2014) $ *
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)
66 
67  inline void assign_connectivity(const PolyConnectivity& _other)
68  {
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 
116  {
117  return is_boundary(_heh) ? InvalidVertexHandle :
118  to_vertex_handle(next_halfedge_handle(_heh));
119  }
120 
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
VertexHandle opposite_he_opposite_vh(HalfedgeHandle _heh) const
Returns the opposite vertex to the opposite halfedge of _heh in the face referenced by it returns Inv...
Definition: TriConnectivity.hh:124
Handle for a halfedge entity.
Definition: Handles.hh:121
VertexHandle opposite_vh(HalfedgeHandle _heh) const
Returns the opposite vertex to the halfedge _heh in the face referenced by _heh returns InvalidVertex...
Definition: TriConnectivity.hh:115
Connectivity Class for polygonal meshes.
Definition: PolyConnectivity.hh:54
Handle for a edge entity.
Definition: Handles.hh:128
void split_copy(FaceHandle _fh, VertexHandle _vh)
Face split (= 1-to-n split).
Definition: PolyConnectivity.cc:1111
Connectivity Class for Triangle Meshes.
Definition: TriConnectivity.hh:51
void split_copy(FaceHandle _fh, VertexHandle _vh)
Face split (= 1-to-3) split, calls corresponding PolyMeshT function).
Definition: TriConnectivity.hh:189
void split(FaceHandle _fh, VertexHandle _vh)
Face split (= 1-to-n split).
Definition: PolyConnectivity.cc:1068
void assign_connectivity(const PolyConnectivity &_other)
assign_connectivity() method.
Definition: PolyConnectivity.hh:215
Handle for a face entity.
Definition: Handles.hh:135
void split(FaceHandle _fh, VertexHandle _vh)
Face split (= 1-to-3) split, calls corresponding PolyMeshT function).
Definition: TriConnectivity.hh:181
Handle for a vertex entity.
Definition: Handles.hh:114
void assign_connectivity(const TriConnectivity &_other)
assign_connectivity() methods.
Definition: TriConnectivity.hh:64

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