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
ModBaseT.hh
Go to the documentation of this file.
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: 737 $ *
38
* $Date: 2012-10-08 09:33:20 +0200 (Mo, 08 Okt 2012) $ *
39
* *
40
\*===========================================================================*/
41
46
//=============================================================================
47
//
48
// CLASS ModBaseT
49
//
50
//=============================================================================
51
52
#ifndef OPENMESH_DECIMATER_MODBASET_HH
53
#define OPENMESH_DECIMATER_MODBASET_HH
54
55
56
//== INCLUDES =================================================================
57
58
#include <OpenMesh/Core/Utils/Noncopyable.hh>
59
#include <
OpenMesh/Tools/Decimater/CollapseInfoT.hh
>
60
#include <string>
61
62
63
//== NAMESPACE ================================================================
64
65
namespace
OpenMesh {
66
namespace
Decimater {
67
68
69
//== FORWARD DECLARATIONS =====================================================
70
71
template
<
typename
Mesh>
class
BaseDecimaterT;
72
73
74
//== CLASS DEFINITION =========================================================
75
80
template
<
typename
Module>
81
class
ModHandleT
:
private
Utils::Noncopyable
82
{
83
public
:
84
85
typedef
ModHandleT<Module>
Self
;
86
typedef
Module module_type;
87
88
public
:
89
91
ModHandleT
() : mod_(NULL) {}
92
94
~ModHandleT
() {
/* don't delete mod_, since handle is not owner! */
}
95
98
bool
is_valid
()
const
{
return
mod_ != NULL; }
99
100
private
:
101
102
#if defined(OM_CC_MSVC)
103
friend
class
BaseDecimaterT
;
104
#else
105
template
<
typename
Mesh>
friend
class
BaseDecimaterT
;
106
#endif
107
108
void
clear() { mod_ = NULL; }
109
void
init(Module* _m) { mod_ = _m; }
110
Module* module() {
return
mod_; }
111
112
113
private
:
114
115
Module* mod_;
116
117
};
118
119
120
121
122
//== CLASS DEFINITION =========================================================
123
124
125
128
#define DECIMATER_MODNAME(_mod_name) \
129
virtual const std::string& name() const { \
130
static std::string _s_modname_(#_mod_name); return _s_modname_; \
131
}
132
133
147
#define DECIMATING_MODULE(Classname, MeshT, Name) \
148
typedef Classname < MeshT > Self; \
149
typedef OpenMesh::Decimater::ModHandleT< Self > Handle; \
150
typedef OpenMesh::Decimater::ModBaseT< MeshT > Base; \
151
typedef typename Base::Mesh Mesh; \
152
typedef typename Base::CollapseInfo CollapseInfo; \
153
DECIMATER_MODNAME( Name )
154
155
156
157
//== CLASS DEFINITION =========================================================
158
159
189
template
<
typename
MeshT>
190
class
ModBaseT
191
{
192
public
:
193
typedef
MeshT Mesh;
194
typedef
CollapseInfoT<MeshT>
CollapseInfo
;
195
196
enum
{
197
ILLEGAL_COLLAPSE = -1,
198
LEGAL_COLLAPSE = 0
199
};
200
201
protected
:
202
205
ModBaseT
(MeshT& _mesh,
bool
_is_binary)
206
: error_tolerance_factor_(1.0), mesh_(_mesh), is_binary_(_is_binary) {}
207
208
public
:
209
211
virtual
~ModBaseT
() { }
212
214
DECIMATER_MODNAME
(ModBase);
215
216
218
bool
is_binary
(
void
)
const
{
return
is_binary_; }
219
221
void
set_binary
(
bool
_b) { is_binary_ = _b; }
222
223
224
public
:
// common interface
225
227
virtual
void
initialize
() { }
228
243
virtual
float
collapse_priority(
const
CollapseInfoT<MeshT>
&
/* _ci */
)
244
{
return
LEGAL_COLLAPSE; }
245
249
virtual
void
preprocess_collapse(
const
CollapseInfoT<MeshT>
&
/* _ci */
)
250
{}
251
255
virtual
void
postprocess_collapse(
const
CollapseInfoT<MeshT>
&
/* _ci */
)
256
{}
257
266
virtual
void
set_error_tolerance_factor
(
double
_factor) {
267
if
(_factor >= 0.0 && _factor <= 1.0)
268
error_tolerance_factor_ = _factor;
269
}
270
271
272
protected
:
273
275
MeshT&
mesh
() {
return
mesh_; }
276
277
// current percentage of the original constraint
278
double
error_tolerance_factor_;
279
280
private
:
281
282
// hide copy constructor & assignemnt
283
ModBaseT
(
const
ModBaseT
& _cpy);
284
ModBaseT
& operator=(
const
ModBaseT
& );
285
286
MeshT& mesh_;
287
288
bool
is_binary_;
289
};
290
291
292
//=============================================================================
293
}
// namespace Decimater
294
}
// namespace OpenMesh
295
//=============================================================================
296
#endif // OPENMESH_DECIMATER_MODBASE_HH defined
297
//=============================================================================
298
Project
OpenMesh
, © Computer Graphics Group, RWTH Aachen. Documentation generated using
doxygen
.