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

📄 decomposition_strategy_adapter.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 2006  Tel-Aviv University (Israel).// All rights reserved.//// This file is part of CGAL (www.cgal.org); you may redistribute it under// the terms of the Q Public License version 1.0.// See the file LICENSE.QPL distributed with CGAL.//// Licensees holding a valid commercial license may use this file in// accordance with the commercial license agreement provided with the software.//// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.3-branch/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/Decomposition_strategy_adapter.h $// $Id: Decomposition_strategy_adapter.h 37897 2007-04-03 18:34:02Z efif $//// Author(s)     : Ron Wein   <wein@post.tau.ac.il>#ifndef CGAL_POLYGON_DECOMPOSITION_STRATEGY_ADAPTER_H#define CGAL_POLYGON_DECOMPOSITION_STRATEGY_ADAPTER_H#include <CGAL/basic.h>#include <CGAL/Polygon_2.h>#include <CGAL/Partition_traits_2.h>#include <CGAL/partition_2.h>CGAL_BEGIN_NAMESPACEstruct Tag_optimal_convex_parition{  bool    dummy;};struct Tag_approx_convex_parition{  bool    dummy;};struct Tag_Greene_convex_parition{  bool    dummy;};/*! * \class * An adapter of the global planar polygonal partitioning functions * to a decomposition strategy-class. */template <class Kernel_, class Container_, class StrategyTag_>class Polygon_decomposition_strategy_adapter{public:          typedef Kernel_                                  Kernel;  typedef CGAL::Polygon_2<Kernel, Container_>      Polygon_2;  typedef typename Kernel::Point_2                 Point_2;  typedef StrategyTag_                             Strategy_tag;protected:  typedef Partition_traits_2<Kernel>               Traits_2;  typedef typename Traits_2::Polygon_2             Traits_polygon_2;  // Data members:  Traits_2           traits;public:  /*! Default constructor. */  Polygon_decomposition_strategy_adapter () :    traits()  {}    /*!   * Decompose a simple polygon to convex sub-polygons.   * \param pgn The input polygon.   * \param oi An output iterator of convex polygons.   * \return A past-the-end iterator for the sub-polygons.   */  template <class OutputIterator>  OutputIterator operator() (const Polygon_2& pgn,                             OutputIterator oi) const  {    std::list<Traits_polygon_2>                           pgns;    typename std::list<Traits_polygon_2>::const_iterator  pgn_it;    if (pgn.orientation() == CLOCKWISE)    {      // Make a local copy of the polygon, and reverse the order of its      // vertices to make it counterclockwise oriented.      Polygon_2        my_pgn = pgn;      my_pgn.reverse_orientation();      // Perform the decomposition.      _decompose (my_pgn, Strategy_tag(), std::back_inserter (pgns));    }    else    {      // Perform the decomposition on the original polygon.      _decompose (pgn, Strategy_tag(), std::back_inserter (pgns));    }    // Copy the polygons to the output iterator.    for (pgn_it = pgns.begin(); pgn_it != pgns.end(); ++pgn_it)    {      *oi = Polygon_2 (pgn_it->vertices_begin(), pgn_it->vertices_end());      ++oi;    }    return (oi);  }private:  /*!   * Decompose the given counter clockwise-oriented polygon using the optimal   * convex-partition method.   */  template <class OutputIterator>  OutputIterator _decompose (const Polygon_2& pgn,                             Tag_optimal_convex_parition ,                             OutputIterator oi) const  {    return (optimal_convex_partition_2 (pgn.vertices_begin(),                                        pgn.vertices_end(),                                        oi,                                        traits));  }  /*!   * Decompose the given counter clockwise-oriented polygon using the   * approximated convex-partition method.   */  template <class OutputIterator>  OutputIterator _decompose (const Polygon_2& pgn,                             Tag_approx_convex_parition ,                             OutputIterator oi) const  {    return (approx_convex_partition_2 (pgn.vertices_begin(),                                       pgn.vertices_end(),                                       oi,                                       traits));  }  /*!   * Decompose the given counter clockwise-oriented polygon using Greene's   * approximated convex-partition method.   */  template <class OutputIterator>  OutputIterator _decompose (const Polygon_2& pgn,                             Tag_Greene_convex_parition ,                             OutputIterator oi) const  {    return (greene_approx_convex_partition_2 (pgn.vertices_begin(),                                              pgn.vertices_end(),                                              oi,                                              traits));  }};CGAL_END_NAMESPACE#endif

⌨️ 快捷键说明

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