@@ -42,6 +42,7 @@ _x_at_y(e::Edge, y) = (y - e.start[2]) * e.gradient + e.start[1]
42
42
struct Edges <: AbstractVector{Edge}
43
43
edges:: Vector{Edge}
44
44
max_ylen:: Int
45
+ min_y:: Int
45
46
edge_count:: Int
46
47
end
47
48
Edges (geom, dims; kw... ) = Edges (GI. geomtrait (geom), geom, dims; kw... )
@@ -55,12 +56,14 @@ function Edges(
55
56
# TODO fix bug that requires this to be redefined
56
57
edges = Vector {Edge} (undef, 0 )
57
58
local edge_count = max_ylen = 0
59
+ local min_y = typemax (Int)
58
60
if tr isa GI. AbstractCurveTrait
59
- edge_count, max_ylen = _to_edges! (edges, geom, dims, edge_count)
61
+ edge_count, max_ylen, min_y = _to_edges! (edges, geom, dims, edge_count)
60
62
else
61
63
for ring in GI. getring (geom)
62
- edge_count, ring_max_ylen = _to_edges! (edges, ring, dims, edge_count)
64
+ edge_count, ring_max_ylen, ring_min_y = _to_edges! (edges, ring, dims, edge_count)
63
65
max_ylen = max (max_ylen, ring_max_ylen)
66
+ min_y = min (min_y, ring_min_y)
64
67
end
65
68
end
66
69
@@ -72,7 +75,7 @@ function Edges(
72
75
sort! (edges1; scratch)
73
76
end
74
77
75
- return Edges (edges, max_ylen, edge_count)
78
+ return Edges (edges, max_ylen, min_y, edge_count)
76
79
end
77
80
78
81
Base. parent (edges:: Edges ) = edges. edges
99
102
local firstpos = prevpos = nextpos = Position ((0.0 , 0.0 ), 0 )
100
103
isfirst = true
101
104
local max_ylen = 0
105
+ local min_y = typemax (Int)
102
106
103
- GI. npoint (geom) > 0 || return edge_count, max_ylen
107
+ GI. npoint (geom) > 0 || return edge_count, max_ylen, min_y
104
108
xlookup, ylookup = lookup (dims, (X (), Y ()))
105
109
(length (xlookup) > 0 && length (ylookup) > 0 ) || return edge_count, max_ylen
106
110
136
140
edge = Edge (prevpos, nextpos)
137
141
_add_edge! (edges, edge, edge_count)
138
142
max_ylen = max (max_ylen, edge. iystop - edge. iystart)
143
+ min_y = min (min_y, edge. iystart)
139
144
prevpos = nextpos
140
145
prevpoint = p
141
146
end
@@ -145,11 +150,12 @@ end
145
150
edge = Edge (prevpos, firstpos)
146
151
# Update the longest y distance of any edge
147
152
max_ylen = max (max_ylen, edge. iystop - edge. iystart)
153
+ min_y = min (min_y, edge. iystart)
148
154
# assign/push the edge to edges
149
155
_add_edge! (edges, edge, edge_count)
150
156
end
151
157
152
- return edge_count, max_ylen
158
+ return edge_count, max_ylen, min_y
153
159
end
154
160
155
161
function _add_edge! (edges, edge, edge_count)
0 commit comments