OpenMesh
OpenMesh/Tools/Decimater/ModAspectRatioT.hh
Go to the documentation of this file.
00001 /*===========================================================================*\
00002  *                                                                           *
00003  *                               OpenMesh                                    *
00004  *      Copyright (C) 2001-2011 by Computer Graphics Group, RWTH Aachen      *
00005  *                           www.openmesh.org                                *
00006  *                                                                           *
00007  *---------------------------------------------------------------------------*
00008  *  This file is part of OpenMesh.                                           *
00009  *                                                                           *
00010  *  OpenMesh is free software: you can redistribute it and/or modify         *
00011  *  it under the terms of the GNU Lesser General Public License as           *
00012  *  published by the Free Software Foundation, either version 3 of           *
00013  *  the License, or (at your option) any later version with the              *
00014  *  following exceptions:                                                    *
00015  *                                                                           *
00016  *  If other files instantiate templates or use macros                       *
00017  *  or inline functions from this file, or you compile this file and         *
00018  *  link it with other files to produce an executable, this file does        *
00019  *  not by itself cause the resulting executable to be covered by the        *
00020  *  GNU Lesser General Public License. This exception does not however       *
00021  *  invalidate any other reasons why the executable file might be            *
00022  *  covered by the GNU Lesser General Public License.                        *
00023  *                                                                           *
00024  *  OpenMesh is distributed in the hope that it will be useful,              *
00025  *  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
00026  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *
00027  *  GNU Lesser General Public License for more details.                      *
00028  *                                                                           *
00029  *  You should have received a copy of the GNU LesserGeneral Public          *
00030  *  License along with OpenMesh.  If not,                                    *
00031  *  see <http://www.gnu.org/licenses/>.                                      *
00032  *                                                                           *
00033  \*===========================================================================*/
00034 
00035 /*===========================================================================*\
00036  *                                                                           *
00037  *   $Revision: 448 $                                                        *
00038  *   $Date: 2011-11-04 13:59:37 +0100 (Fri, 04 Nov 2011) $                   *
00039  *                                                                           *
00040  \*===========================================================================*/
00041 
00045 //=============================================================================
00046 //
00047 //  CLASS ModAspectRatioT
00048 //
00049 //=============================================================================
00050 
00051 #ifndef OPENMESH_DECIMATER_MODASPECTRATIOT_HH
00052 #define OPENMESH_DECIMATER_MODASPECTRATIOT_HH
00053 
00054 //== INCLUDES =================================================================
00055 
00056 #include <OpenMesh/Tools/Decimater/ModBaseT.hh>
00057 #include <OpenMesh/Core/Utils/Property.hh>
00058 
00059 //== NAMESPACES ===============================================================
00060 
00061 namespace OpenMesh {
00062 namespace Decimater {
00063 
00064 //== CLASS DEFINITION =========================================================
00065 
00079 template<class DecimaterT>
00080 class ModAspectRatioT: public ModBaseT<DecimaterT> {
00081   public:
00082 
00083     DECIMATING_MODULE( ModAspectRatioT, DecimaterT, Roundness )
00084     ;
00085 
00086     typedef typename Mesh::Scalar Scalar;
00087     typedef typename Mesh::Point Point;
00088 
00090     ModAspectRatioT(DecimaterT& _dec, float _min_aspect = 5.0, bool _is_binary =
00091         true) :
00092         Base(_dec, _is_binary), mesh_(Base::mesh()), min_aspect_(
00093             1.0 / _min_aspect) {
00094       mesh_.add_property(aspect_);
00095     }
00096 
00098     ~ModAspectRatioT() {
00099       mesh_.remove_property(aspect_);
00100     }
00101 
00103     float aspect_ratio() const {
00104       return 1.0 / min_aspect_;
00105     }
00106 
00108     void set_aspect_ratio(float _f) {
00109       min_aspect_ = 1.0 / _f;
00110     }
00111 
00113     void initialize();
00114 
00116     float collapse_priority(const CollapseInfo& _ci);
00117 
00119     void preprocess_collapse(const CollapseInfo& _ci);
00120 
00121   private:
00122 
00126     Scalar aspectRatio(const Point& _v0, const Point& _v1, const Point& _v2);
00127 
00128   private:
00129 
00130     Mesh& mesh_;
00131     float min_aspect_;
00132     FPropHandleT<float> aspect_;
00133 };
00134 
00135 //=============================================================================
00136 }// END_NS_DECIMATER
00137 } // END_NS_OPENMESH
00138 //=============================================================================
00139 #if defined(OM_INCLUDE_TEMPLATES) && !defined(OPENMESH_DECIMATER_MODASPECTRATIOT_C)
00140 #define OPENMESH_DECIMATER_MODASPECTRATIOT_TEMPLATES
00141 #include "ModAspectRatioT.cc"
00142 #endif
00143 //=============================================================================
00144 #endif // OPENMESH_DECIMATER_MODASPECTRATIOT_HH defined
00145 //=============================================================================
00146 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines