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

📄 sm_items.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 1997-2002  Max-Planck-Institute Saarbruecken (Germany).// 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/Nef_S2/include/CGAL/Nef_S2/SM_items.h $// $Id: SM_items.h 28567 2006-02-16 14:30:13Z lsaboret $// //// Author(s)     : Michael Seel        <seel@mpi-sb.mpg.de>//                 Miguel Granados     <granados@mpi-sb.mpg.de>//                 Susan Hert          <hert@mpi-sb.mpg.de>//                 Lutz Kettner        <kettner@mpi-sb.mpg.de>//                 Peter Hachenberger  <hachenberger@mpi-sb.mpg.de>#ifndef CGAL_SM_ITEMS_H#define CGAL_SM_ITEMS_H#include <CGAL/basic.h>#include <CGAL/In_place_list.h>#include <CGAL/Object.h>#include <CGAL/Nef_S2/Sphere_geometry.h>#include <string>#include <sstream>CGAL_BEGIN_NAMESPACE//template <typename K, typename I,typename C> class Sphere_map;template <typename SM> class SM_const_decorator;template <typename SM> class SM_decorator;struct SM_items {public:  template <typename Refs>  class SVertex  {     typedef void* GenPtr;    typedef typename Refs::Mark                    Mark;    typedef typename Refs::Sphere_point            Sphere_point;    typedef typename Refs::SVertex_handle          SVertex_handle;    typedef typename Refs::SVertex_const_handle    SVertex_const_handle;    typedef typename Refs::SHalfedge_handle        SHalfedge_handle;        typedef typename Refs::SHalfedge_const_handle  SHalfedge_const_handle;    typedef typename Refs::SFace_handle            SFace_handle;    typedef typename Refs::SFace_const_handle      SFace_const_handle;    Sphere_point    point_;     Mark            mark_;    SHalfedge_handle out_sedge_;    SFace_handle     incident_sface_;    GenPtr          info_;    // temporary information:  public:    SVertex() :       point_(), mark_(), out_sedge_(), incident_sface_(), info_() {}    SVertex(const Mark& m) :       point_(), mark_(m), out_sedge_(), incident_sface_(), info_() {}    SVertex(const Sphere_point& p) :       point_(p), mark_(), out_sedge_(), incident_sface_(), info_() {}    ~SVertex() {}    SVertex(const SVertex<Refs>& v)    { point_ = v.point_;      mark_ = v.mark_;      out_sedge_ = v.out_sedge_;      incident_sface_ = v.incident_sface_;      info_ = 0;    }    SVertex<Refs>& operator=(const SVertex<Refs>& v)    { point_ = v.point_;      mark_ = v.mark_;      out_sedge_ = v.out_sedge_;      incident_sface_ = v.incident_sface_;      info_ = 0;      return *this;    }    Mark& mark() { return mark_; }    const Mark& mark() const { return mark_; }    Sphere_point& point(){ return point_; }    const Sphere_point& point() const { return point_; }    SHalfedge_handle& out_sedge() { return out_sedge_; }    SHalfedge_const_handle out_sedge() const { return out_sedge_; }    SFace_handle& incident_sface() { return incident_sface_; }     SFace_const_handle incident_sface() const { return incident_sface_; }     bool is_isolated() const { return (out_sedge() == SHalfedge_handle()); }    GenPtr& info() { return info_; }    const GenPtr& info() const { return info_; }                              public:    std::string debug() const    { std::ostringstream os; set_pretty_mode(os);      os<<"V"<<point_<<' '<<info_<<'\0';      std::string res(os.str()); return res;    }   }; // SVertex      template <typename Refs>  class SHalfedge  {     typedef void* GenPtr;    typedef typename Refs::Mark             Mark;    typedef typename Refs::Sphere_circle    Sphere_circle;    typedef typename Refs::SVertex_handle          SVertex_handle;    typedef typename Refs::SVertex_const_handle    SVertex_const_handle;    typedef typename Refs::SHalfedge_handle        SHalfedge_handle;        typedef typename Refs::SHalfedge_const_handle  SHalfedge_const_handle;    typedef typename Refs::SFace_handle            SFace_handle;    typedef typename Refs::SFace_const_handle      SFace_const_handle;    // Role within local graph:    Sphere_circle      circle_;    Mark               mark_;    SHalfedge_handle   twin_, sprev_, snext_;    SVertex_handle     source_;    SFace_handle       incident_sface_;    GenPtr             info_;  public:    SHalfedge() : circle_(), mark_(), twin_(), sprev_(), snext_(),		 source_(), incident_sface_(), info_() {}    ~SHalfedge() {}    SHalfedge(const SHalfedge<Refs>& e)    {      circle_ = e.circle_;      mark_ = e.mark_;      twin_ = e.twin_;      sprev_ = e.sprev_;      snext_ = e.snext_;      source_ = e.source_;      incident_sface_ = e.incident_sface_;      info_ = 0;    }    SHalfedge<Refs>& operator=(const SHalfedge<Refs>& e)    {      circle_ = e.circle_;      mark_ = e.mark_;      twin_ = e.twin_;      sprev_ = e.sprev_;      snext_ = e.snext_;      source_ = e.source_;      incident_sface_ = e.incident_sface_;      info_ = 0;      return *this;    }    bool is_twin() const { return (&*twin_ < this); }    Mark& mark() {       return mark_;    }    const Mark& mark() const {      return mark_;    }    SHalfedge_handle& twin() { return twin_; }    SHalfedge_const_handle twin() const { return twin_; }    SVertex_handle& source() { return source_; }    SVertex_const_handle source() const { return source_; }    SVertex_handle& target() { return twin()->source(); }    SVertex_const_handle target() const { return twin()->source(); }    SHalfedge_handle& sprev() { return sprev_; }    SHalfedge_const_handle sprev() const { return sprev_; }    SHalfedge_handle& snext() { return snext_; }    SHalfedge_const_handle snext() const { return snext_; }    Sphere_circle& circle() { return circle_; }    const Sphere_circle& circle() const { return circle_; }        SFace_handle& incident_sface() { return incident_sface_; }    SFace_const_handle incident_sface() const { return incident_sface_; }    GenPtr& info() { return info_; }    const GenPtr& info() const { return info_; }    std::string debug() const    { std::ostringstream os; set_pretty_mode(os);       os <<"e["<<source_->debug()<<", "         <<twin_->source_->debug()<<" "<<info_<<"]"<<'\0';      std::string res(os.str()); return res;    }  }; // SHalfedge  template <typename Refs>   class SHalfloop  {    typedef void* GenPtr;    typedef typename Refs::Mark             Mark;    typedef typename Refs::Sphere_circle    Sphere_circle;    typedef typename Refs::SHalfloop_handle        SHalfloop_handle;        typedef typename Refs::SHalfloop_const_handle  SHalfloop_const_handle;    typedef typename Refs::SFace_handle            SFace_handle;    typedef typename Refs::SFace_const_handle      SFace_const_handle;    Sphere_circle   circle_;    Mark            mark_;    SHalfloop_handle twin_;    SFace_handle     incident_sface_;    GenPtr          info_;    // temporary needed:  public:    SHalfloop() : circle_(), mark_(), twin_(), incident_sface_(), info_() {}    ~SHalfloop() {}    SHalfloop(const SHalfloop<Refs>& l)    {       circle_ = l.circle_;      mark_ = l.mark_;      twin_ = l.twin_;      incident_sface_ = l.incident_sface_;      info_ = 0;    }    SHalfloop<Refs>& operator=(const SHalfloop<Refs>& l)    {       circle_ = l.circle_;      mark_ = l.mark_;      twin_ = l.twin_;      incident_sface_ = l.incident_sface_;      info_ = 0;      return *this;    }    bool is_twin() const { return (&*twin_ < this); }    Mark& mark() {       return mark_;    }    const Mark& mark() const {       return mark_;    }    SHalfloop_handle& twin() { return twin_; }    SHalfloop_const_handle twin() const { return twin_; }    Sphere_circle& circle() { return circle_; }    const Sphere_circle& circle() const { return circle_; }    SFace_handle& incident_sface() { return incident_sface_; }    SFace_const_handle incident_sface() const { return incident_sface_; }    GenPtr& info() { return info_; }    const GenPtr& info() const { return info_; }    std::string debug() const    { std::ostringstream os; set_pretty_mode(os);       os<<"l"<<circle_<<' '<<info_<<'\0';      std::string res(os.str()); return res;    }  }; // SHalfloop  template <typename Refs>  class SFace  {     typedef void* GenPtr;    typedef typename Refs::Mark                  Mark;    typedef typename Refs::Object_handle         Object_handle;    typedef typename Refs::Object_list           Object_list;    typedef typename Refs::SFace_cycle_iterator  SFace_cycle_iterator;    typedef typename Refs::SFace_cycle_const_iterator                            SFace_cycle_const_iterator;    Mark             mark_;    Object_list      boundary_entry_objects_;     // SHalfedges, SHalfloops, Vertices    GenPtr           info_;    // temporary needed:    public:    SFace() : mark_(), info_() {}    ~SFace() {}    SFace(const SFace<Refs>& f)    { mark_ = f.mark_;      boundary_entry_objects_ = f.boundary_entry_objects_;      info_ = 0;    }    SFace<Refs>& operator=(const SFace<Refs>& f)    { if (this == &f) return *this;      mark_ = f.mark_;      boundary_entry_objects_ = f.boundary_entry_objects_;      info_ = 0;      return *this;    }    SFace_cycle_iterator sface_cycles_begin()     { return boundary_entry_objects_.begin(); }    SFace_cycle_iterator sface_cycles_end()    { return boundary_entry_objects_.end(); }    SFace_cycle_const_iterator sface_cycles_begin() const    { return boundary_entry_objects_.begin(); }    SFace_cycle_const_iterator sface_cycles_end() const    { return boundary_entry_objects_.end(); }    Mark& mark() { return mark_; }    const Mark& mark() const { return mark_; }    Object_list& boundary_entry_objects() { return boundary_entry_objects_; }    const Object_list& boundary_entry_objects() const { return boundary_entry_objects_; }    GenPtr& info() { return info_; }    const GenPtr& info() const { return info_; }  }; // SFace}; // SM_itemsCGAL_END_NAMESPACE#endif // CGAL_SM_ITEMS_H

⌨️ 快捷键说明

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