OpenMesh

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

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ModAspectRatioT.hh
Go to the documentation of this file.
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
45 //=============================================================================
46 //
47 // CLASS ModAspectRatioT
48 //
49 //=============================================================================
50
51 #ifndef OPENMESH_DECIMATER_MODASPECTRATIOT_HH
52 #define OPENMESH_DECIMATER_MODASPECTRATIOT_HH
53
54 //== INCLUDES =================================================================
55
56 #include <OpenMesh/Tools/Decimater/ModBaseT.hh>
57 #include <OpenMesh/Core/Utils/Property.hh>
58
59 //== NAMESPACES ===============================================================
60
61 namespace OpenMesh {
62 namespace Decimater {
63
64 //== CLASS DEFINITION =========================================================
65
79 template<class MeshT>
80 class ModAspectRatioT: public ModBaseT<MeshT> {
81 public:
82
83 DECIMATING_MODULE( ModAspectRatioT, MeshT, Roundness )
84 ;
85
86 typedef typename Mesh::Scalar Scalar;
87 typedef typename Mesh::Point Point;
88
90 ModAspectRatioT(MeshT& _mesh, float _min_aspect = 5.0, bool _is_binary =
91 true) :
92 Base(_mesh, _is_binary), mesh_(Base::mesh()), min_aspect_(
93 1.0 / _min_aspect) {
94 mesh_.add_property(aspect_);
95 }
96
98 ~ModAspectRatioT() {
99 mesh_.remove_property(aspect_);
100 }
101
103 float aspect_ratio() const {
104 return 1.0 / min_aspect_;
105 }
106
108 void set_aspect_ratio(float _f) {
109 min_aspect_ = 1.0 / _f;
110 }
111
113 void initialize();
114
116 float collapse_priority(const CollapseInfo& _ci);
117
119 void preprocess_collapse(const CollapseInfo& _ci);
120
122 void set_error_tolerance_factor(double _factor);
123
124 private:
125
129 Scalar aspectRatio(const Point& _v0, const Point& _v1, const Point& _v2);
130
131 private:
132
133 Mesh& mesh_;
134 float min_aspect_;
135 FPropHandleT<float> aspect_;
136 };
137
138 //=============================================================================
139 }// END_NS_DECIMATER
140 } // END_NS_OPENMESH
141 //=============================================================================
142 #if defined(OM_INCLUDE_TEMPLATES) && !defined(OPENMESH_DECIMATER_MODASPECTRATIOT_C)
143 #define OPENMESH_DECIMATER_MODASPECTRATIOT_TEMPLATES
144 #include "ModAspectRatioT.cc"
145 #endif
146 //=============================================================================
147 #endif // OPENMESH_DECIMATER_MODASPECTRATIOT_HH defined
148 //=============================================================================
149
OpenMesh::Decimater::ModBaseT::mesh
MeshT & mesh()
Access the mesh associated with the decimater.
Definition: ModBaseT.hh:275
ModBaseT.hh
Base class for all decimation modules.
ModAspectRatioT.cc
OpenMesh::Decimater::ModAspectRatioT::initialize
void initialize()
precompute face aspect ratio
Definition: ModAspectRatioT.cc:95
OpenMesh::FPropHandleT< float >
OpenMesh::Decimater::ModAspectRatioT::preprocess_collapse
void preprocess_collapse(const CollapseInfo &_ci)
update aspect ratio of one-ring
Definition: ModAspectRatioT.cc:112
OpenMesh::Decimater::ModBaseT
Base class for all decimation modules.
Definition: ModBaseT.hh:190
OpenMesh::Decimater::ModAspectRatioT::collapse_priority
float collapse_priority(const CollapseInfo &_ci)
Returns the collapse priority.
Definition: ModAspectRatioT.cc:132
OpenMesh::Decimater::ModAspectRatioT::aspect_ratio
float aspect_ratio() const
get aspect ratio
Definition: ModAspectRatioT.hh:103
OpenMesh::Decimater::ModAspectRatioT::set_error_tolerance_factor
void set_error_tolerance_factor(double _factor)
set percentage of aspect ratio
Definition: ModAspectRatioT.cc:182
OpenMesh::Decimater::ModAspectRatioT::set_aspect_ratio
void set_aspect_ratio(float _f)
set aspect ratio
Definition: ModAspectRatioT.hh:108
OpenMesh::Decimater::ModAspectRatioT::ModAspectRatioT
ModAspectRatioT(MeshT &_mesh, float _min_aspect=5.0, bool _is_binary=true)
constructor
Definition: ModAspectRatioT.hh:90
OpenMesh::Decimater::ModAspectRatioT::~ModAspectRatioT
~ModAspectRatioT()
destructor
Definition: ModAspectRatioT.hh:98
DECIMATING_MODULE
#define DECIMATING_MODULE(Classname, MeshT, Name)
Convenience macro, to be used in derived modules The macro defines the types.
Definition: ModBaseT.hh:147
OpenMesh::Decimater::ModAspectRatioT
Use aspect ratio to control decimation.
Definition: ModAspectRatioT.hh:80