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

📄 env_overlay_2.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/Envelope_3/include/CGAL/Envelope_3/Env_overlay_2.h $// $Id: Env_overlay_2.h 36329 2007-02-15 20:49:53Z spion $// //// Author(s)     : Michal Meyerovitch     <gorgymic@post.tau.ac.il>//                 Baruch Zukerman        <baruchzu@post.tau.ac.il>#ifndef CGAL_ENVELOPE_OVERLAY_2_H#define CGAL_ENVELOPE_OVERLAY_2_H#include <CGAL/Arr_overlay.h>#include <CGAL/Envelope_3/Envelope_overlay_functor.h>#include <iostream>CGAL_BEGIN_NAMESPACEtemplate <class MinimizationDiagram_2,           class OverlayFunctor = Envelope_overlay_functor<MinimizationDiagram_2> >class Envelope_overlay_2{public:  typedef MinimizationDiagram_2                                  Minimization_diagram_2;    typedef typename Minimization_diagram_2::Face_handle           Face_handle;  typedef typename Minimization_diagram_2::Face_iterator         Face_iterator;  typedef typename Minimization_diagram_2::Vertex_handle         Vertex_handle;  typedef typename Minimization_diagram_2::Vertex_iterator       Vertex_iterator;  typedef typename Minimization_diagram_2::Halfedge_handle       Halfedge_handle;  typedef typename Minimization_diagram_2::Halfedge_iterator     Halfedge_iterator;  typedef OverlayFunctor                                         Overlay_functor;protected:  typedef typename Minimization_diagram_2::Traits_2              Traits;  typedef typename Traits::Xy_monotone_surface_3                 Xy_monotone_surface_3;public:    void operator()(Minimization_diagram_2& md1,                  Minimization_diagram_2& md2,                  Minimization_diagram_2& result)  {    Overlay_functor overlay_func(md1, md2, result);    overlay(md1, md2, result, overlay_func);            CGAL_assertion_code(post_test_assertions(result));  }public:    /*  void print_face(Face_handle fh)  {    std::cout << (fh->is_unbounded() ? "unbounded" : "bounded");        if (fh->get_is_set())    {      std::cout << " #data= " << fh->number_of_data_objects();      if (fh->number_of_data_objects() > 0)        std::cout << " data= " << fh->get_data();    }    if (fh->get_aux_is_set(0))    {      std::cout << " #data1= " << get_number_of_aux_data_objects(fh, 0);      if (get_number_of_aux_data_objects(fh, 0)>0)        std::cout << " data#1= " << get_aux_data(fh, 0);    }    if (fh->get_aux_is_set(1))    {      std::cout << " #data2= " << get_number_of_aux_data_objects(fh, 1);      if (get_number_of_aux_data_objects(fh, 1)>0)        std::cout << " data#2= " << get_aux_data(fh, 1);    }    std::cout << std::endl;  }  // print the aux data in the faces of md  void print_faces(Minimization_diagram_2& md)  {    Face_iterator fit = md.faces_begin();    for(; fit != md.faces_end(); ++fit)    {      Face_handle fh = fit;      print_face(fh);    }    std::cout << std::endl;  }  void print_vertices(Minimization_diagram_2& md)  {    Vertex_iterator vit = md.vertices_begin();    for(; vit != md.vertices_end(); ++vit)    {      Vertex_handle vh = vit;      std::cout << vh->point();      if (vh->get_is_set())      {        std::cout << " #data= " << vh->number_of_data_objects();        if (vh->number_of_data_objects() > 0)          std::cout << " data= " << vh->get_data();      }      if (vh->get_aux_is_set(0))      {        std::cout << " #data1= " << get_number_of_aux_data_objects(vh, 0);        if (get_number_of_aux_data_objects(vh, 0)>0)          std::cout << " data#1= " << get_aux_data(vh, 0);      }      if (vh->get_aux_is_set(1))      {        std::cout << " #data2= " << get_number_of_aux_data_objects(vh, 1);        if (get_number_of_aux_data_objects(vh, 1)>0)          std::cout << " data#2= " << get_aux_data(vh, 1);      }      std::cout << std::endl;    }    std::cout << std::endl;    }  void print_edges(Minimization_diagram_2& md)  {    Halfedge_iterator hit = md.halfedges_begin();    for(; hit != md.halfedges_end(); ++hit, ++hit)    {      Halfedge_handle hh = hit;      std::cout << hh->curve();      if (hh->get_is_set())      {        std::cout << " #data= " << hh->number_of_data_objects();        if (hh->number_of_data_objects() > 0)          std::cout << " data= " << hh->get_data();      }      if (hh->get_aux_is_set(0))      {        std::cout << " #data1= " << get_number_of_aux_data_objects(hh, 0);        if (get_number_of_aux_data_objects(hh, 0)>0)          std::cout << " data#1= " << get_aux_data(hh, 0);      }      if (hh->get_aux_is_set(1))      {        std::cout << " #data2= " << get_number_of_aux_data_objects(hh, 1);        if (get_number_of_aux_data_objects(hh, 1)>0)          std::cout << " data#2= " << get_aux_data(hh, 1);      }      std::cout << std::endl;    }    std::cout << std::endl;  }  */  void post_test_assertions(Minimization_diagram_2& md)  {    // check that all data is filled in result    Face_iterator fi = md.faces_begin();    for(; fi != md.faces_end(); ++fi)    {      Face_handle fh = fi;      CGAL_assertion_msg(fh->get_aux_is_set(0), "data from md1 on face is not set");      CGAL_assertion_msg(fh->get_aux_is_set(1), "data from md2 on face is not set");    }    Halfedge_iterator hi = md.halfedges_begin();    for(; hi != md.halfedges_end(); ++hi)    {      Halfedge_handle hh = hi;      CGAL_assertion_msg(hh->get_aux_is_set(0), "data from md1 on halfedge is not set");      CGAL_assertion_msg(hh->get_aux_is_set(1), "data from md2 on halfedge is not set");    }    Vertex_iterator vi = md.vertices_begin();    for(; vi != md.vertices_end(); ++vi)    {      Vertex_handle vh = vi;      CGAL_assertion_msg(vh->get_aux_is_set(0), "data from md1 on vertex is not set");      CGAL_assertion_msg(vh->get_aux_is_set(1), "data from md2 on vertex is not set");    }  }protected:  // helper methods  template <class FeatureHandle>  Xy_monotone_surface_3 get_aux_data(FeatureHandle fh, unsigned int id)  {    const Object& o = fh->get_aux_source(id);    Xy_monotone_surface_3 data;    Halfedge_handle h;    Vertex_handle v;  	Face_handle f;  	if (assign(v, o))  	  data = v->get_data();  	else if (assign(h, o))  	  data = h->get_data();  	else  	{  	  CGAL_assertion(assign(f, o));      assign(f, o);  	  data = f->get_data();  	}    return data;  }  template <class FeatureHandle>  int get_number_of_aux_data_objects(FeatureHandle fh, unsigned int id)  {	  const Object& o = fh->get_aux_source(id);    int data;    Halfedge_handle h;    Vertex_handle v;  	Face_handle f;  	if (assign(v, o))  	  data = v->number_of_data_objects();  	else if (assign(h, o))  	  data = h->number_of_data_objects();  	else  	{  	  CGAL_assertion(assign(f, o));      assign(f, o);  	  data = f->number_of_data_objects();  	}    return data;  }};CGAL_END_NAMESPACE#endif

⌨️ 快捷键说明

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