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

📄 straight_skeleton_builder_events_2.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 2005, 2006 Fernando Luis Cacciola Carballal. 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/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_builder_events_2.h $// $Id: Straight_skeleton_builder_events_2.h 36824 2007-03-05 16:42:00Z spion $//// Author(s)     : Fernando Cacciola <fernando_cacciola@ciudad.com.ar>//#ifndef CGAL_STRAIGHT_SKELETON_BUILDER_EVENTS_2_H#define CGAL_STRAIGHT_SKELETON_BUILDER_EVENTS_2_H 1#include<ostream>#include <CGAL/Straight_skeleton_2/Straight_skeleton_aux.h>CGAL_BEGIN_NAMESPACEnamespace CGAL_SS_i{template<class SSkel_, class Traits_>class Event_2 : public Ref_counted_base{  typedef SSkel_  SSkel ;  typedef Traits_ Traits ;  public:   typedef Event_2<SSkel,Traits> Self ;  typedef boost::intrusive_ptr<Self> SelfPtr ;  typedef typename Traits::Point_2             Point_2 ;  typedef typename Traits::FT                  FT ;  typedef typename Traits::Seeded_trisegment_2 Seeded_trisegment_2 ;    typedef typename SSkel::Halfedge_handle Halfedge_handle ;  typedef typename SSkel::Vertex_handle   Vertex_handle ;  typedef CGAL_SS_i::Triedge<Halfedge_handle> Triedge ;    enum Type { cEdgeEvent, cSplitEvent, cPseudoSplitEvent } ;public:  Event_2 ( Triedge const& aTriedge, Seeded_trisegment_2 const& aSTrisegment )    :     mTriedge    (aTriedge)    ,mSTrisegment(aSTrisegment)  {}  virtual ~ Event_2() {}  virtual Type type() const = 0 ;  virtual Vertex_handle seed0() const = 0 ;  virtual Vertex_handle seed1() const = 0 ;  Triedge const&             triedge    () const { return mTriedge    ; }  Seeded_trisegment_2 const& strisegment() const { return mSTrisegment; }  Point_2 const&             point      () const { return mP          ; }  FT                         time       () const { return mTime       ; }  void SetTimeAndPoint( FT aTime, Point_2 const& aP ) { mTime = aTime ; mP = aP ; }  friend std::ostream& operator<< ( std::ostream& ss, Self const& e )  {    ss << "[" ;    e.dump(ss);    ss << " p=(" << e.point().x() << "," << e.point().y() << ") t=" << e.time() << "] "        << trisegment_collinearity_to_string(e.strisegment().event().collinearity()) ;    return ss ;  }protected :  virtual void dump ( std::ostream& ss ) const  {    ss << mTriedge ;  } ;private :  Triedge             mTriedge ;  Seeded_trisegment_2 mSTrisegment ;  Point_2             mP ;  FT                  mTime ;} ;template<class SSkel_, class Traits_>class Edge_event_2 : public Event_2<SSkel_,Traits_>{  typedef SSkel_  SSkel ;  typedef Traits_ Traits ;  typedef Event_2<SSkel,Traits> Base ;  typedef typename SSkel::Halfedge_handle Halfedge_handle ;  typedef typename SSkel::Vertex_handle   Vertex_handle ;  typedef typename Base::Type                Type ;  typedef typename Base::Triedge             Triedge ;  typedef typename Base::Seeded_trisegment_2 Seeded_trisegment_2 ;public:  Edge_event_2 ( Triedge const&             aTriedge               , Seeded_trisegment_2 const& aSTrisegment                , Vertex_handle              aLSeed               , Vertex_handle              aRSeed               )    :      Base(aTriedge,aSTrisegment)    , mLSeed(aLSeed)    , mRSeed(aRSeed)  {}  virtual Type type() const { return this->cEdgeEvent ; }  virtual Vertex_handle seed0() const { return mLSeed ; }  virtual Vertex_handle seed1() const { return mRSeed ; }private :  virtual void dump ( std::ostream& ss ) const  {    this->Base::dump(ss);    ss << " (LSeed=" << mLSeed->id() << " RSeed=" << mRSeed->id() << ')' ;  }private :  Vertex_handle mLSeed ;  Vertex_handle mRSeed ;} ;template<class SSkel_, class Traits_>class Split_event_2 : public Event_2<SSkel_,Traits_>{  typedef SSkel_  SSkel ;  typedef Traits_ Traits ;  typedef Event_2<SSkel,Traits> Base ;  typedef typename SSkel::Halfedge_handle Halfedge_handle ;  typedef typename SSkel::Vertex_handle   Vertex_handle ;    typedef typename Base::Type                Type ;  typedef typename Base::Triedge             Triedge ;  typedef typename Base::Seeded_trisegment_2 Seeded_trisegment_2 ;public:  Split_event_2 ( Triedge const&             aTriedge                , Seeded_trisegment_2 const& aSTrisegment                 , Vertex_handle              aSeed                )    :      Base(aTriedge,aSTrisegment)    , mSeed(aSeed)  {}  virtual Type type() const { return this->cSplitEvent ; }  virtual Vertex_handle seed0() const { return mSeed ; }  virtual Vertex_handle seed1() const { return mSeed ; }  void set_opposite_rnode( Vertex_handle aOppR ) { mOppR = aOppR ; }    Vertex_handle opposite_rnode() const { return mOppR ; }  private :  virtual void dump ( std::ostream& ss ) const  {    this->Base::dump(ss);    ss << " (Seed=" << mSeed->id() << " OppBorder=" << this->triedge().e2()->id() << ')' ;  }private :  Vertex_handle mSeed ;  Vertex_handle mOppR ;} ;template<class SSkel_, class Traits_>class Pseudo_split_event_2 : public Event_2<SSkel_,Traits_>{  typedef SSkel_  SSkel ;  typedef Traits_ Traits ;    typedef Event_2<SSkel,Traits> Base ;  typedef typename SSkel::Halfedge_handle Halfedge_handle ;  typedef typename SSkel::Vertex_handle   Vertex_handle ;  typedef typename Base::Type                Type ;  typedef typename Base::Triedge             Triedge ;  typedef typename Base::Seeded_trisegment_2 Seeded_trisegment_2 ;public:  Pseudo_split_event_2 ( Triedge const&             aTriedge                       , Seeded_trisegment_2 const& aSTrisegment                        , Vertex_handle              aSeed                       , Vertex_handle              aOppositeNode                       )    :      Base(aTriedge,aSTrisegment)    , mSeed(aSeed)    , mOppNode(aOppositeNode)  {}  virtual Type type() const { return this->cPseudoSplitEvent ; }  virtual Vertex_handle seed0() const { return mSeed ; }  virtual Vertex_handle seed1() const { return mOppNode ; }private :  virtual void dump ( std::ostream& ss ) const  {    this->Base::dump(ss);    ss << " (Seed=" << mSeed->id() << " OppNode=" << mOppNode->id() << ')' ;  }private :  Vertex_handle mSeed   ;  Vertex_handle mOppNode ;} ;}CGAL_END_NAMESPACE#endif // CGAL_STRAIGHT_SKELETON_BUILDER_EVENTS_2_H //// EOF //

⌨️ 快捷键说明

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