⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modroundnesst.hh

📁 penMesh is a generic and efficient data structure for representing and manipulating polygonal meshes
💻 HH
字号:
//=============================================================================//                                                                            //                               OpenMesh                                     //      Copyright (C) 2001-2005 by Computer Graphics Group, RWTH Aachen       //                           www.openmesh.org                                 //                                                                            //-----------------------------------------------------------------------------//                                                                            //                                License                                     //                                                                            //   This library is free software; you can redistribute it and/or modify it //   under the terms of the GNU Library General Public License as published  //   by the Free Software Foundation, version 2.                             //                                                                             //   This library is distributed in the hope that it will be useful, but       //   WITHOUT ANY WARRANTY; without even the implied warranty of                //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         //   Library General Public License for more details.                          //                                                                            //   You should have received a copy of the GNU Library General Public         //   License along with this library; if not, write to the Free Software       //   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 //                                                                            //-----------------------------------------------------------------------------//                                                                            //   $Revision: 1.3 $//   $Date: 2005-12-21 13:55:21 $//                                                                            //=============================================================================/** \file ModRoundnessT.hh     *///=============================================================================////  CLASS ModRoundnessT////=============================================================================#ifndef OPENMESH_TOOLS_MODROUNDNESST_HH#define OPENMESH_TOOLS_MODROUNDNESST_HH//== INCLUDES =================================================================#include <OpenMesh/Tools/Decimater/ModBaseT.hh>#include <math.h>//== NAMESPACE ================================================================namespace OpenMesh { // BEGIN_NS_OPENMESHnamespace Decimater { // BEGIN_NS_DECIMATER//== CLASS DEFINITION =========================================================/** Compute error value based on roundness criteria. */template <class DecimaterType>class ModRoundnessT : public ModBaseT<DecimaterType>{public:  DECIMATING_MODULE( ModRoundnessT, DecimaterType, Roundness );  typedef typename Mesh::Point   Point;  typedef typename Mesh::Scalar  Scalar;  /// Constructor  ModRoundnessT( DecimaterType &_dec )     : Base(_dec, true), mesh_(Self::mesh()), min_roundness_(0.2f)   {} public:     float collapse_priority(const CollapseInfo& _ci)    {        typename Mesh::VertexHandle  v2, v3;    typename Mesh::Scalar        r, rmin(1.0);    typename Mesh::CVVIter       vv_it(mesh_, _ci.v0);        v3 = vv_it.handle();    while (vv_it)     {      v2 = v3;      v3 = (++vv_it).handle();             // if not boundary      if (mesh_.face_handle(vv_it.current_halfedge_handle()).is_valid())      {	if (v2 != _ci.v1 && v3 != _ci.v1)	{	  r = roundness(_ci.p1, mesh_.point(v2), mesh_.point(v3));	  if (r < rmin) rmin = r;	}      }    }    if (Base::is_binary())    {      return (rmin > min_roundness_) ? 0.0f : -1.0f;    }    else    {      return (rmin > min_roundness_) ? 1.0f - rmin : -1.0f;    }  }       /** Set a minimum roundness value.   *  \param _min_roundness in range (0,1)   */  void set_min_roundness( Scalar _min_roundness )  {    assert( 0.0 <= _min_roundness && _min_roundness <= 1.0 );    min_roundness_  = _min_roundness;  }  // compute roundness as 1.16 / aspect_ratio  Scalar roundness(const Point& _v0, const Point& _v1, const Point& _v2) const  {    const double FOUR_ROOT3 = 6.928203230275509;    const double area = 0.5*((_v1-_v0)%(_v2-_v0)).norm();    return (Scalar) (FOUR_ROOT3 * area / ((_v0-_v1).sqrnorm() +					  (_v1-_v2).sqrnorm() +					  (_v2-_v0).sqrnorm() ));  }private:    Mesh&   mesh_;  Scalar  min_roundness_;};//=============================================================================} // END_NS_DECIMATER} // END_NS_OPENMESH//=============================================================================#endif // OPENMESH_TOOLS_PROGMESHT_HH defined//=============================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -