// Copyright (c) 1997-2002 Max-Planck-Institute Saarbruecken (Germany). // All rights reserved. // // This file is part of CGAL (www.cgal.org). // You can redistribute it and/or modify it under the terms of the GNU // General Public License as published by the Free Software Foundation, // either version 3 of the License, or (at your option) any later version. // // 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$ // $Id$ // SPDX-License-Identifier: GPL-3.0+ // // // Author(s) : Michael Seel // Miguel Granados // Susan Hert // Lutz Kettner // Peter Hachenberger #ifndef CGAL_SM_ITEMS_H #define CGAL_SM_ITEMS_H #include #include #include #include #include #include #include #ifndef CGAL_I_DO_WANT_TO_USE_GENINFO #include #endif namespace CGAL { //template class Sphere_map; template class SM_const_decorator; template class SM_decorator; struct SM_items { public: template class SVertex { #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; #else typedef boost::any GenPtr; #endif 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& v) { point_ = v.point_; mark_ = v.mark_; out_sedge_ = v.out_sedge_; incident_sface_ = v.incident_sface_; info_ = 0; } SVertex& operator=(const SVertex& 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"< class SHalfedge { #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; #else typedef boost::any GenPtr; #endif 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& 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& operator=(const SHalfedge& 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["<debug()<<", " <source_->debug()<< #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO " "<< info_ << #endif "]"<<'\0'; std::string res(os.str()); return res; } }; // SHalfedge template class SHalfloop { #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; #else typedef boost::any GenPtr; #endif 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& l) { circle_ = l.circle_; mark_ = l.mark_; twin_ = l.twin_; incident_sface_ = l.incident_sface_; info_ = 0; } SHalfloop& operator=(const SHalfloop& 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"< class SFace { #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO typedef void* GenPtr; #else typedef boost::any GenPtr; #endif 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& f) { mark_ = f.mark_; boundary_entry_objects_ = f.boundary_entry_objects_; info_ = 0; } SFace& operator=(const SFace& 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_items } //namespace CGAL #endif // CGAL_SM_ITEMS_H