BWAPI
|
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 //