1 // Copyright (c) 2020 GeometryFactory Sarl (France).
2 // All rights reserved.
3 //
4 // This file is part of CGAL (www.cgal.org).
5 //
6 // $URL$
7 // $Id$
8 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
9 //
10 // Author(s): Ahmed Essam <theartful.ae@gmail.com>
11 
12 #include "SplitAndMerge.h"
13 #include "ArrangementTypes.h"
14 
15 template <typename Arr_>
operator ()(Arrangement * arr,Halfedge_handle hei,const Point_2 & pt)16 void Split_edge<Arr_>::operator()(
17   Arrangement* arr, Halfedge_handle hei, const Point_2& pt)
18 {
19   // check if split point lies on the edge of the curve
20   Equal_2 areEqual(arr->traits()->equal_2_object());
21   if (
22     (!hei->source()->is_at_open_boundary() &&
23      areEqual(hei->source()->point(), pt)) ||
24     (!hei->target()->is_at_open_boundary() &&
25      areEqual(hei->target()->point(), pt)))
26   { return; }
27 
28   arr->split_edge(hei, pt);
29 }
30 
31 template <typename Arr_>
mergeEdge(Arrangement * arr,Halfedge_handle h1,Halfedge_handle h2)32 void Merge_edge<Arr_>::mergeEdge(
33   Arrangement* arr, Halfedge_handle h1, Halfedge_handle h2)
34 {
35   arr->merge_edge(h1, h2);
36 }
37 
38 template <typename Arr_>
areMergeable(Arrangement * arr,Halfedge_handle h1,Halfedge_handle h2)39 bool Merge_edge<Arr_>::areMergeable(
40   Arrangement* arr, Halfedge_handle h1, Halfedge_handle h2)
41 {
42   return arr->are_mergeable(h1, h2);
43 }
44 
45 ARRANGEMENT_DEMO_SPECIALIZE_ARR(Split_edge)
46 ARRANGEMENT_DEMO_SPECIALIZE_ARR(Merge_edge)
47