Coverage Report

Created: 2026-09-14 06:16

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/geos/src/triangulate/quadedge/QuadEdge.cpp
Line
Count
Source
1
/**********************************************************************
2
 *
3
 * GEOS - Geometry Engine Open Source
4
 * http://geos.osgeo.org
5
 *
6
 * Copyright (C) 2012 Excensus LLC.
7
 * Copyright (C) 2019 Daniel Baston
8
 *
9
 * This is free software; you can redistribute and/or modify it under
10
 * the terms of the GNU Lesser General Licence as published
11
 * by the Free Software Foundation.
12
 * See the COPYING file for more information.
13
 *
14
 **********************************************************************
15
 *
16
 * Last port: triangulate/quadedge/QuadEdge.java r524
17
 *
18
 **********************************************************************/
19
20
#include <geos/triangulate/quadedge/QuadEdge.h>
21
#include <geos/triangulate/quadedge/QuadEdgeQuartet.h>
22
23
namespace geos {
24
namespace triangulate { //geos.triangulate
25
namespace quadedge { //geos.triangulate.quadedge
26
27
using namespace geos::geom;
28
29
0
QuadEdge* QuadEdge::makeEdge(const Vertex& o, const Vertex& d, std::deque<QuadEdgeQuartet> & edges) {
30
0
    return &QuadEdgeQuartet::makeEdge(o, d, edges);
31
0
}
32
33
QuadEdge*
34
QuadEdge::connect(QuadEdge& a, QuadEdge& b, std::deque<QuadEdgeQuartet> & edges)
35
0
{
36
0
    QuadEdge* q0 = makeEdge(a.dest(), b.orig(), edges);
37
0
    splice(*q0, a.lNext());
38
0
    splice(q0->sym(), b);
39
0
    return q0;
40
0
}
41
42
void
43
QuadEdge::splice(QuadEdge& a, QuadEdge& b)
44
0
{
45
0
    QuadEdge& alpha = a.oNext().rot();
46
0
    QuadEdge& beta = b.oNext().rot();
47
48
0
    QuadEdge& t1 = b.oNext();
49
0
    QuadEdge& t2 = a.oNext();
50
0
    QuadEdge& t3 = beta.oNext();
51
0
    QuadEdge& t4 = alpha.oNext();
52
53
0
    a.setNext(&t1);
54
0
    b.setNext(&t2);
55
0
    alpha.setNext(&t3);
56
0
    beta.setNext(&t4);
57
0
}
58
59
void
60
QuadEdge::swap(QuadEdge& e)
61
0
{
62
0
    QuadEdge& a = e.oPrev();
63
0
    QuadEdge& b = e.sym().oPrev();
64
0
    splice(e, a);
65
0
    splice(e.sym(), b);
66
0
    splice(e, a.lNext());
67
0
    splice(e.sym(), b.lNext());
68
0
    e.setOrig(a.dest());
69
0
    e.setDest(b.dest());
70
0
}
71
72
const QuadEdge&
73
QuadEdge::getPrimary()
74
0
{
75
0
    if(orig().getCoordinate().compareTo(dest().getCoordinate()) <= 0) {
76
0
        return *this;
77
0
    }
78
0
    else {
79
0
        return sym();
80
0
    }
81
0
}
82
83
void
84
QuadEdge::remove()
85
0
{
86
0
    rot().rot().rot().isAlive = false;
87
0
    rot().rot().isAlive = false;
88
0
    rot().isAlive = false;
89
0
    isAlive = false;
90
0
}
91
92
bool
93
QuadEdge::equalsNonOriented(const QuadEdge& qe) const
94
0
{
95
0
    if(equalsOriented(qe)) {
96
0
        return true;
97
0
    }
98
0
    if(equalsOriented(qe.sym())) {
99
0
        return true;
100
0
    }
101
0
    return false;
102
0
}
103
104
bool
105
QuadEdge::equalsOriented(const QuadEdge& qe) const
106
0
{
107
0
    if(orig().getCoordinate().equals2D(qe.orig().getCoordinate())
108
0
            && dest().getCoordinate().equals2D(qe.dest().getCoordinate())) {
109
0
        return true;
110
0
    }
111
0
    return false;
112
0
}
113
114
std::unique_ptr<LineSegment>
115
QuadEdge::toLineSegment() const
116
0
{
117
0
    return std::unique_ptr<geom::LineSegment>(
118
0
               new geom::LineSegment(vertex.getCoordinate(), dest().getCoordinate()));
119
0
}
120
121
std::ostream&
122
operator<< (std::ostream& os, const QuadEdge* e)
123
0
{
124
0
    os << "( " << e->orig().getCoordinate() << ", " << e->dest().getCoordinate() << " )";
125
0
    return os;
126
0
}
127
128
} //namespace geos.triangulate.quadedge
129
} //namespace geos.triangulate
130
} //namespace goes