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

📄 gps_bfs_xor_visitor.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 2005  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/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/Gps_bfs_xor_visitor.h $// $Id: Gps_bfs_xor_visitor.h 28831 2006-02-27 14:28:18Z baruchzu $// //// Author(s)     : Baruch Zukerman <baruchzu@post.tau.ac.il>#ifndef CGAL_GPS_BFS_XOR_VISITOR_H#define CGAL_GPS_BFS_XOR_VISITOR_H#include <CGAL/Boolean_set_operations_2/Gps_bfs_base_visitor.h>CGAL_BEGIN_NAMESPACEtemplate <class Arrangement_>class Gps_bfs_xor_visitor : public Gps_bfs_base_visitor<Arrangement_>{  typedef  Arrangement_                                  Arrangement;  typedef typename Arrangement::Face_iterator            Face_iterator;  typedef typename Arrangement::Halfedge_iterator        Halfedge_iterator;  typedef Gps_bfs_base_visitor<Arrangement>              Base;  typedef typename Base::Edges_hash                      Edges_hash;  typedef typename Base::Faces_hash                      Faces_hash;public:  Gps_bfs_xor_visitor(Edges_hash* edges_hash, Faces_hash* faces_hash, unsigned int n_pgn):     Base(edges_hash, faces_hash, n_pgn)  {}  void flip_face(Face_iterator f1, Face_iterator f2, Halfedge_iterator he)  {    unsigned int ic_f2;    ic_f2 = this->compute_ic(f1, f2, he);    (*(this->m_faces_hash))[f2] = ic_f2;          if(ic_f2%2)      f2->set_contained(true);  }   // mark the unbounded_face (true iff contained)  void visit_ubf(Face_iterator ubf, unsigned int ubf_ic)  {    CGAL_assertion(ubf->is_unbounded());    if(ubf_ic%2)      ubf->set_contained(true);  }  void after_scan(Arrangement& arr)  {    typedef typename Arrangement::Traits_2  Traits;    typedef typename Traits::Compare_endpoints_xy_2 Compare_endpoints_xy_2;    typedef typename Traits::Construct_opposite_2   Construct_opposite_2;    typedef typename Traits::X_monotone_curve_2     X_monotone_curve_2;    typedef typename Arrangement::Edge_iterator     Edge_iterator;    Traits tr;    Compare_endpoints_xy_2 cmp_endpoints =      tr.compare_endpoints_xy_2_object();    Construct_opposite_2 ctr_opp = tr.construct_opposite_2_object();    for(Edge_iterator eit = arr.edges_begin();        eit != arr.edges_end();        ++eit)    {      Halfedge_iterator he = eit;      X_monotone_curve_2&  cv = he->curve();      bool is_cont = he->face()->contained();      bool has_same_dir = (cmp_endpoints(cv) == he->direction());      if((is_cont && !has_same_dir) ||         (!is_cont && has_same_dir))        arr.modify_edge(he, ctr_opp(cv));    }  }};CGAL_END_NAMESPACE#endif

⌨️ 快捷键说明

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