BWAPI
SPAR/AIModule/BWTA/vendors/CGAL/CGAL/HalfedgeDS_face_base.h
Go to the documentation of this file.
00001 // Copyright (c) 1997  Utrecht University (The Netherlands),
00002 // ETH Zurich (Switzerland), Freie Universitaet Berlin (Germany),
00003 // INRIA Sophia-Antipolis (France), Martin-Luther-University Halle-Wittenberg
00004 // (Germany), Max-Planck-Institute Saarbruecken (Germany), RISC Linz (Austria),
00005 // and Tel-Aviv University (Israel).  All rights reserved.
00006 //
00007 // This file is part of CGAL (www.cgal.org); you can redistribute it and/or
00008 // modify it under the terms of the GNU Lesser General Public License as
00009 // published by the Free Software Foundation; version 2.1 of the License.
00010 // See the file LICENSE.LGPL distributed with CGAL.
00011 //
00012 // Licensees holding a valid commercial license may use this file in
00013 // accordance with the commercial license agreement provided with the software.
00014 //
00015 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
00016 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00017 //
00018 // $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.5-branch/HalfedgeDS/include/CGAL/HalfedgeDS_face_base.h $
00019 // $Id: HalfedgeDS_face_base.h 35794 2007-01-24 18:00:30Z spion $
00020 // 
00021 //
00022 // Author(s)     : Lutz Kettner  <kettner@mpi-sb.mpg.de>
00023 
00024 #ifndef CGAL_HALFEDGEDS_FACE_BASE_H
00025 #define CGAL_HALFEDGEDS_FACE_BASE_H 1
00026 
00027 #include <CGAL/basic.h>
00028 
00029 CGAL_BEGIN_NAMESPACE
00030 
00031 // We use Tag_false to indicate that no plane type is provided.
00032 
00033 template < class Refs, class T = Tag_true, class Pln = Tag_false>
00034 class HalfedgeDS_face_base;
00035 
00036 template < class Refs >
00037 class HalfedgeDS_face_base< Refs, Tag_false, Tag_false> {
00038 public:
00039     typedef Refs                                 HalfedgeDS;
00040     typedef HalfedgeDS_face_base< Refs, Tag_false, Tag_false>  Base;
00041     typedef Tag_false                            Supports_face_halfedge;
00042     typedef typename Refs::Vertex_handle         Vertex_handle;
00043     typedef typename Refs::Vertex_const_handle   Vertex_const_handle;
00044     typedef typename Refs::Halfedge_handle       Halfedge_handle;
00045     typedef typename Refs::Halfedge_const_handle Halfedge_const_handle;
00046     typedef typename Refs::Face_handle           Face_handle;
00047     typedef typename Refs::Face_const_handle     Face_const_handle;
00048     typedef typename Refs::Vertex                Vertex;
00049     typedef typename Refs::Halfedge              Halfedge;
00050     // Additional tags required by Polyhedron.
00051     typedef Tag_false                            Supports_face_plane;
00052     struct Plane_not_supported {};
00053     typedef Plane_not_supported                  Plane;
00054     // No longer required.
00055     // typedef Tag_false                            Supports_face_normal;
00056 };
00057 
00058 template < class Refs >
00059 class HalfedgeDS_face_base< Refs, Tag_true, Tag_false> {
00060 public:
00061     typedef Refs                                 HalfedgeDS;
00062     typedef HalfedgeDS_face_base< Refs, Tag_true, Tag_false>   Base;
00063     typedef Tag_true                             Supports_face_halfedge;
00064     typedef typename Refs::Vertex_handle         Vertex_handle;
00065     typedef typename Refs::Vertex_const_handle   Vertex_const_handle;
00066     typedef typename Refs::Halfedge_handle       Halfedge_handle;
00067     typedef typename Refs::Halfedge_const_handle Halfedge_const_handle;
00068     typedef typename Refs::Face_handle           Face_handle;
00069     typedef typename Refs::Face_const_handle     Face_const_handle;
00070     typedef typename Refs::Vertex                Vertex;
00071     typedef typename Refs::Halfedge              Halfedge;
00072     // Additional tags required by Polyhedron.
00073     typedef Tag_false                            Supports_face_plane;
00074     struct Plane_not_supported {};
00075     typedef Plane_not_supported                  Plane;
00076     // No longer required.
00077     //typedef Tag_false                            Supports_face_normal;
00078 private:
00079     Halfedge_handle hdg;
00080 public:
00081     Halfedge_handle       halfedge()                        { return hdg; }
00082     Halfedge_const_handle halfedge() const                  { return hdg; }
00083     void                  set_halfedge( Halfedge_handle h)  { hdg = h; }
00084 };
00085 
00086 template < class Refs, class Pln >
00087 class HalfedgeDS_face_base< Refs, Tag_false, Pln> {
00088 public:
00089     typedef Refs                                 HalfedgeDS;
00090     typedef HalfedgeDS_face_base< Refs, Tag_false, Pln>     Base;
00091     typedef Tag_false                            Supports_face_halfedge;
00092     typedef typename Refs::Vertex_handle         Vertex_handle;
00093     typedef typename Refs::Vertex_const_handle   Vertex_const_handle;
00094     typedef typename Refs::Halfedge_handle       Halfedge_handle;
00095     typedef typename Refs::Halfedge_const_handle Halfedge_const_handle;
00096     typedef typename Refs::Face_handle           Face_handle;
00097     typedef typename Refs::Face_const_handle     Face_const_handle;
00098     typedef typename Refs::Vertex                Vertex;
00099     typedef typename Refs::Halfedge              Halfedge;
00100     // Additional tags and types required by Polyhedron.
00101     typedef Tag_true                             Supports_face_plane;
00102     typedef Pln                                  Plane;
00103     // No longer required.
00104     //typedef Tag_true                             Supports_face_normal;
00105     //typedef Trts                                 Traits;
00106     //typedef typename Traits::Normal              Normal;
00107     //typedef typename Traits::Plane               Plane;
00108 private:
00109     Plane  pln;
00110 public:
00111     HalfedgeDS_face_base() {}
00112     HalfedgeDS_face_base( const Plane& g) : pln(g) {}
00113     Plane&                plane()                           { return pln; }
00114     const Plane&          plane() const                     { return pln; }
00115     // No longer required.
00116     // Normal              normal() const { return pln.orthogonal_vector();}
00117 };
00118 
00119 template < class Refs, class Pln >
00120 class HalfedgeDS_face_base< Refs, Tag_true, Pln> {
00121 public:
00122     typedef Refs                                 HalfedgeDS;
00123     typedef HalfedgeDS_face_base< Refs, Tag_true, Pln>      Base;
00124     typedef Tag_true                             Supports_face_halfedge;
00125     typedef typename Refs::Vertex_handle         Vertex_handle;
00126     typedef typename Refs::Vertex_const_handle   Vertex_const_handle;
00127     typedef typename Refs::Halfedge_handle       Halfedge_handle;
00128     typedef typename Refs::Halfedge_const_handle Halfedge_const_handle;
00129     typedef typename Refs::Face_handle           Face_handle;
00130     typedef typename Refs::Face_const_handle     Face_const_handle;
00131     typedef typename Refs::Vertex                Vertex;
00132     typedef typename Refs::Halfedge              Halfedge;
00133     // Additional tags and types required by Polyhedron.
00134     typedef Tag_true                             Supports_face_plane;
00135     typedef Pln                                  Plane;
00136     // No longer required.
00137     //typedef Tag_true                             Supports_face_normal;
00138     //typedef Trts                                 Traits;
00139     //typedef typename Traits::Normal              Normal;
00140     //typedef typename Traits::Plane               Plane;
00141 private:
00142     Halfedge_handle hdg;
00143     Plane           pln;
00144 public:
00145     HalfedgeDS_face_base() {}
00146     HalfedgeDS_face_base( const Plane& g) : pln(g) {}
00147     Halfedge_handle       halfedge()                        { return hdg; }
00148     Halfedge_const_handle halfedge() const                  { return hdg; }
00149     void                  set_halfedge( Halfedge_handle h)  { hdg = h; }
00150     Plane&                plane()                           { return pln; }
00151     const Plane&          plane() const                     { return pln; }
00152     // No longer required.
00153     //Normal                normal() const { return pln.orthogonal_vector();}
00154 };
00155 
00156 CGAL_END_NAMESPACE
00157 
00158 #endif // CGAL_HALFEDGEDS_FACE_BASE_H //
00159 // EOF //
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines