OpenVolumeMesh
Toggle main menu visibility
Loading...
Searching...
No Matches
TetrahedralGeometryKernel.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 TETRAHEDRALGEOMETRYKERNEL_HH_
44
#define TETRAHEDRALGEOMETRYKERNEL_HH_
45
46
#include <cassert>
47
#include <iostream>
48
49
#include "../Geometry/VectorT.hh"
50
#include "../Core/GeometryKernel.hh"
51
#include "TetrahedralMeshTopologyKernel.hh"
52
53
namespace
OpenVolumeMesh {
54
55
template
<
class
VecT,
class
TopologyKernelT = TetrahedralMeshTopologyKernel>
56
class
TetrahedralGeometryKernel
:
public
GeometryKernel
<VecT, TopologyKernelT> {
57
public
:
58
59
typedef
VecT PointT;
60
typedef
TopologyKernelT KernelT;
61
typedef
GeometryKernel<VecT, TopologyKernelT>
ParentT;
62
64
TetrahedralGeometryKernel
() {}
65
67
~TetrahedralGeometryKernel
() {}
68
69
VertexHandle
split_edge(
HalfEdgeHandle
heh,
double
alpha = 0.5)
70
{
71
OpenVolumeMeshEdge
e = TopologyKernelT::halfedge(heh);
72
PointT newPos = alpha*
ParentT::vertex
(e.from_vertex()) + (1.0-alpha)*
ParentT::vertex
(e.to_vertex());
73
VertexHandle
splitVertex =
ParentT::add_vertex
(newPos);
74
TopologyKernelT::split_edge(heh, splitVertex);
75
return
splitVertex;
76
}
77
78
VertexHandle split_edge(EdgeHandle eh)
79
{
80
return
split_edge(TopologyKernelT::halfedge_handle(eh,0));
81
}
82
83
VertexHandle split_face(FaceHandle fh, PointT pos)
84
{
85
VertexHandle splitVertex =
ParentT::add_vertex
(pos);
86
TopologyKernelT::split_face(fh, splitVertex);
87
return
splitVertex;
88
}
89
90
VertexHandle split_face(FaceHandle fh)
91
{
92
VertexHandle splitVertex =
ParentT::add_vertex
(ParentT::barycenter(fh));
93
TopologyKernelT::split_face(fh, splitVertex);
94
return
splitVertex;
95
}
96
97
protected
:
98
99
};
100
101
}
// Namespace OpenVolumeMesh
102
103
#endif
/* TETRAHEDRALGEOMETRYKERNEL_HH_ */
OpenVolumeMesh::GeometryKernel< VecT, TopologyKernelT >::vertex
const VecT & vertex(const VertexHandle &_vh) const
Definition
GeometryKernel.hh:89
OpenVolumeMesh::GeometryKernel< VecT, TetrahedralMeshTopologyKernel >::GeometryKernel
GeometryKernel()
Definition
GeometryKernel.hh:62
OpenVolumeMesh::GeometryKernel< VecT, TopologyKernelT >::add_vertex
virtual VertexHandle add_vertex()
Definition
GeometryKernel.hh:68
OpenVolumeMesh::HalfEdgeHandle
Definition
OpenVolumeMeshHandle.hh:102
OpenVolumeMesh::OpenVolumeMeshEdge
Definition
BaseEntities.hh:52
OpenVolumeMesh::TetrahedralGeometryKernel::~TetrahedralGeometryKernel
~TetrahedralGeometryKernel()
Destructor.
Definition
TetrahedralGeometryKernel.hh:67
OpenVolumeMesh::TetrahedralGeometryKernel::TetrahedralGeometryKernel
TetrahedralGeometryKernel()
Constructor.
Definition
TetrahedralGeometryKernel.hh:64
OpenVolumeMesh::VertexHandle
Definition
OpenVolumeMeshHandle.hh:98
Project
OpenVolumeMesh
, Computer Graphics Group Aachen,
RWTH Aachen