// Copyright (c) 2003, 2005 GeometryFactory // 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) : Andreas Fabri #ifndef CGAL_LEVEL_INTERVAL_H #define CGAL_LEVEL_INTERVAL_H #include #include #include namespace CGAL { template class Level_interval { public: typedef typename FaceHandle::value_type Face; typedef typename Face::Vertex_handle::value_type Vertex; typedef typename Vertex::Point Point; typedef typename Kernel_traits::Kernel K; typedef typename K::FT Value; private: FaceHandle fh_; Value inf_; Value sup_; // left and right boundary values public: Level_interval(){} Level_interval(FaceHandle fh); const Value& inf() const {return inf_;} const Value& sup() const {return sup_;} FaceHandle face_handle() const { return fh_;} bool contains(const Value& V) const; // true iff this contains (l,r) bool contains_interval(const Value& l, const Value& r) const; bool operator==(const Level_interval& I) const { // there is no need to compare inf and sup, as these are derived from the face return face_handle() == I.face_handle(); } bool operator!=(const Level_interval& I) const { return face_handle() != I.face_handle(); } }; template std::ostream& operator<<(std::ostream& os, const Level_interval& i) { os << i.face_handle()->vertex(0)->point() << ", " << i.face_handle()->vertex(1)->point() << ", " << i.face_handle()->vertex(2)->point() << std::endl; return os; } template Level_interval::Level_interval(FaceHandle fh) : fh_(fh), inf_(fh->vertex(0)->point().z()), sup_(inf_) { double z = fh->vertex(1)->point().z(); sup_= (z>sup_)? z : sup_; inf_ = (zvertex(2)->point().z(); sup_ = (z>sup_)? z : sup_; inf_ = (z bool Level_interval::contains_interval(const Value& i, const Value& s) const // true iff this contains (l,r) { return( (inf() <= i) && (sup() >= s) ); } template bool Level_interval::contains(const Value& v) const { // return true if this contains V, false otherwise if((v >= inf()) && (v <= sup())) return true; else return false; } } // namespace CGAL #endif // CGAL_LEVEL_INTERVAL_H