// Copyright (c) 2006 Fernando Luis Cacciola Carballal. All rights reserved. // // This file is part of CGAL (www.cgal.org). // // $URL: https://github.com/CGAL/cgal/blob/v5.2/Straight_skeleton_2/include/CGAL/predicates/Polygon_offset_pred_ftC2.h $ // $Id: Polygon_offset_pred_ftC2.h 13f19c4 2020-10-07T19:28:54+02:00 Mael Rouxel-Labbé // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Fernando Cacciola // #ifndef CGAL_POLYGON_OFFSET_PRED_FTC2_H #define CGAL_POLYGON_OFFSET_PRED_FTC2_H 1 #include #include #include #include #include #include namespace CGAL { namespace CGAL_SS_i { // Given a triple of oriented straight line segments: (e0,e1,e2) such that // there exists a distance 'et' for which the offsets lines at 'et' (e0',e1',e2') intersect in a single point; // returns the relative order of 't' w.r.t 'et'. // PRECONDITION: There exists a positive distance et for which the offset triple intersect at a single point. template Uncertain compare_offset_against_isec_timeC2 ( typename K::FT const& t, boost::intrusive_ptr< Trisegment_2 > > const& tri ) { typedef typename K::FT FT ; typedef Rational Rational ; typedef Quotient Quotient ; typedef boost::optional Optional_rational ; Uncertain rResult = Uncertain::indeterminate(); No_cache > > lTime_cache ; No_cache > > lCoeff_cache ; Optional_rational et_ = compute_offset_lines_isec_timeC2(tri, lTime_cache, lCoeff_cache); if ( et_ ) { Quotient et = et_->to_quotient(); CGAL_assertion ( CGAL_NTS certified_is_positive(et) ) ; rResult = CGAL_NTS certified_compare( Quotient(t), et); } return rResult ; } } // namespace CGAL_SS_i } // end namespace CGAL #endif // CGAL_POLYGON_OFFSET_PRED_FTC2_H // // EOF //