Skip to content

Commit 7fdcb3f

Browse files
authored
Merge pull request #8 from hdavid16/edge_label_middle
Edge label middle
2 parents e8a608d + d117fc2 commit 7fdcb3f

File tree

2 files changed

+38
-16
lines changed

2 files changed

+38
-16
lines changed

src/lines.jl

+16
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,22 @@ function midpoint(pt1,pt2)
77
return x,y
88
end
99

10+
function interpolate_bezier(x::Vector,t)
11+
n = length(x)-1
12+
x_loc = sum(binomial(n,i)*(1-t)^(n-i)*t^i*x[i+1][1] for i in 0:n)
13+
y_loc = sum(binomial(n,i)*(1-t)^(n-i)*t^i*x[i+1][2] for i in 0:n)
14+
return x_loc.value, y_loc.value
15+
end
16+
17+
interpolate_bezier(x::Compose.CurvePrimitive,t) =
18+
interpolate_bezier([x.anchor0, x.ctrl0, x.ctrl1, x.anchor1], t)
19+
20+
function interpolate_line(locs_x,locs_y,i,j,t)
21+
x_loc = locs_x[i] + (locs_x[j]-locs_x[i])*t
22+
y_loc = locs_y[i] + (locs_y[j]-locs_y[i])*t
23+
return x_loc, y_loc
24+
end
25+
1026
function graphline(edge_list, locs_x, locs_y, nodesize::Vector{T}, arrowlength, angleoffset) where {T<:Real}
1127
num_edges = length(edge_list)
1228
lines = Array{Vector{Tuple{Float64,Float64}}}(undef, num_edges)

src/plot.jl

+22-16
Original file line numberDiff line numberDiff line change
@@ -223,22 +223,6 @@ function gplot(g::AbstractGraph{T},
223223
text_locs_y .- nodesize .* (nodelabeldist * sin(nodelabelangleoffset)),
224224
map(string, nodelabel), [hcenter], [vcenter])
225225
end
226-
# Create edge labels if provided
227-
edgetexts = nothing
228-
if !isempty(edgelabel)
229-
edge_locs_x = zeros(R1, NE)
230-
edge_locs_y = zeros(R2, NE)
231-
for (e_idx, e) in enumerate(edges(g))
232-
i = src(e)
233-
j = dst(e)
234-
mid_x = (locs_x[i]+locs_x[j]) / 2.0
235-
mid_y = (locs_y[i]+locs_y[j]) / 2.0
236-
edge_locs_x[e_idx] = (is_directed(g) ? (mid_x+locs_x[j]) / 2.0 : mid_x) + edgelabeldistx * NODESIZE
237-
edge_locs_y[e_idx] = (is_directed(g) ? (mid_y+locs_y[j]) / 2.0 : mid_y) + edgelabeldisty * NODESIZE
238-
239-
end
240-
edgetexts = text(edge_locs_x, edge_locs_y, map(string, edgelabel), [hcenter], [vcenter])
241-
end
242226

243227
# Create lines and arrow heads
244228
lines, larrows = nothing, nothing
@@ -251,6 +235,28 @@ function gplot(g::AbstractGraph{T},
251235
lines, larrows = build_straight_edges(edges(g), locs_x, locs_y, nodesize, arrowlengthfrac, arrowangleoffset)
252236
end
253237

238+
# Create edge labels if provided
239+
edgetexts = nothing
240+
if !isempty(edgelabel)
241+
edge_locs_x = zeros(R1, NE)
242+
edge_locs_y = zeros(R2, NE)
243+
self_loop_idx = 1
244+
for (e_idx, e) in enumerate(edges(g))
245+
i, j = src(e), dst(e)
246+
if linetype == "curve"
247+
mid_x, mid_y = interpolate_bezier(curves.primitives[e_idx], 0.5)
248+
elseif src(e) == dst(e)
249+
mid_x, mid_y = interpolate_bezier(curves.primitives[self_loop_idx], 0.5)
250+
self_loop_idx += 1
251+
else
252+
mid_x, mid_y = interpolate_line(locs_x,locs_y,i,j,0.5)
253+
end
254+
edge_locs_x[e_idx] = mid_x + edgelabeldistx * NODESIZE
255+
edge_locs_y[e_idx] = mid_y + edgelabeldisty * NODESIZE
256+
end
257+
edgetexts = text(edge_locs_x, edge_locs_y, map(string, edgelabel), [hcenter], [vcenter])
258+
end
259+
254260
# Set plot_size
255261
if length(plot_size) != 2 || !isa(plot_size[1], Compose.AbsoluteLength) || !isa(plot_size[2], Compose.AbsoluteLength)
256262
error("`plot_size` must be a Tuple of lengths")

0 commit comments

Comments
 (0)