172 lines
4.7 KiB
Julia
172 lines
4.7 KiB
Julia
|
|
|
|
# [WEBSITE]
|
|
|
|
supportedArgs(::GLVisualizeBackend) = [
|
|
# :annotation,
|
|
# :axis,
|
|
# :background_color,
|
|
# :color_palette,
|
|
# :fillrange,
|
|
# :fillcolor,
|
|
# :fillalpha,
|
|
# :foreground_color,
|
|
# :group,
|
|
# :label,
|
|
# :layout,
|
|
# :legend,
|
|
# :linecolor,
|
|
# :linestyle,
|
|
:linetype
|
|
# :seriescolor, :seriesalpha,
|
|
# :linewidth,
|
|
# :linealpha,
|
|
# :markershape,
|
|
# :markercolor,
|
|
# :markersize,
|
|
# :markeralpha,
|
|
# :markerstrokewidth,
|
|
# :markerstrokecolor,
|
|
# :markerstrokestyle,
|
|
# :n,
|
|
# :bins,
|
|
# :nc,
|
|
# :nr,
|
|
# :pos,
|
|
# :smooth,
|
|
# :show,
|
|
# :size,
|
|
# :title,
|
|
# :windowtitle,
|
|
# :x,
|
|
# :xlabel,
|
|
# :xlims,
|
|
# :xticks,
|
|
# :y,
|
|
# :ylabel,
|
|
# :ylims,
|
|
# :yrightlabel,
|
|
# :yticks,
|
|
# :xscale,
|
|
# :yscale,
|
|
# :xflip,
|
|
# :yflip,
|
|
# :z,
|
|
# :tickfont,
|
|
# :guidefont,
|
|
# :legendfont,
|
|
# :grid,
|
|
# :surface
|
|
# :levels,
|
|
]
|
|
supportedAxes(::GLVisualizeBackend) = [:auto, :left]
|
|
supportedTypes(::GLVisualizeBackend) = [:surface] #, :path, :scatter ,:steppre, :steppost, :sticks, :heatmap, :hexbin, :hist, :bar, :hline, :vline, :contour]
|
|
supportedStyles(::GLVisualizeBackend) = [:auto, :solid] #, :dash, :dot, :dashdot, :dashdotdot]
|
|
supportedMarkers(::GLVisualizeBackend) = [:none, :auto, :ellipse] #, :rect, :diamond, :utriangle, :dtriangle, :cross, :xcross, :star5] #vcat(_allMarkers, Shape)
|
|
supportedScales(::GLVisualizeBackend) = [:identity] #, :log, :log2, :log10, :asinh, :sqrt]
|
|
subplotSupported(::GLVisualizeBackend) = false
|
|
|
|
# --------------------------------------------------------------------------------------
|
|
|
|
|
|
function _initialize_backend(::GLVisualizeBackend; kw...)
|
|
@eval begin
|
|
import GLVisualize
|
|
export GLVisualize
|
|
end
|
|
end
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
immutable GLScreenWrapper
|
|
window
|
|
end
|
|
|
|
function _create_plot(pkg::GLVisualizeBackend, d::KW)
|
|
# TODO: create the window/canvas/context that is the plot within the backend (call it `o`)
|
|
# TODO: initialize the plot... title, xlabel, bgcolor, etc
|
|
|
|
# TODO: this should be moved to the display method?
|
|
w=GLVisualize.glscreen()
|
|
@async GLVisualize.renderloop(w)
|
|
Plot(GLScreenWrapper(w), pkg, 0, d, KW[])
|
|
end
|
|
|
|
|
|
function _add_series(::GLVisualizeBackend, plt::Plot, d::KW)
|
|
# TODO: add one series to the underlying package
|
|
push!(plt.seriesargs, d)
|
|
# TODO: this should be moved to the display method?
|
|
x,y,z=map(Float32,d[:x]), map(Float32,d[:y]), map(Float32,d[:z].surf)
|
|
GLVisualize.view(GLVisualize.visualize((x*ones(y)', ones(x)*y', z), :surface),plt.o.window)
|
|
plt
|
|
end
|
|
|
|
function _add_annotations{X,Y,V}(plt::Plot{GLVisualizeBackend}, anns::AVec{@compat(Tuple{X,Y,V})})
|
|
for ann in anns
|
|
# TODO: add the annotation to the plot
|
|
end
|
|
end
|
|
|
|
# ----------------------------------------------------------------
|
|
|
|
function _before_update_plot(plt::Plot{GLVisualizeBackend})
|
|
end
|
|
|
|
# TODO: override this to update plot items (title, xlabel, etc) after creation
|
|
function _update_plot(plt::Plot{GLVisualizeBackend}, d::KW)
|
|
end
|
|
|
|
function _update_plot_pos_size(plt::AbstractPlot{GLVisualizeBackend}, d::KW)
|
|
end
|
|
|
|
# ----------------------------------------------------------------
|
|
|
|
# accessors for x/y data
|
|
|
|
function getxy(plt::Plot{GLVisualizeBackend}, i::Int)
|
|
# TODO:
|
|
# series = plt.o.lines[i]
|
|
# series.x, series.y
|
|
nothing, nothing
|
|
end
|
|
|
|
function setxy!{X,Y}(plt::Plot{GLVisualizeBackend}, xy::Tuple{X,Y}, i::Integer)
|
|
# TODO:
|
|
# series = plt.o.lines[i]
|
|
# series.x, series.y = xy
|
|
plt
|
|
end
|
|
|
|
# ----------------------------------------------------------------
|
|
|
|
function _create_subplot(subplt::Subplot{GLVisualizeBackend})
|
|
# TODO: build the underlying Subplot object. this is where you might layout the panes within a GUI window, for example
|
|
end
|
|
|
|
function _expand_limits(lims, plt::Plot{GLVisualizeBackend}, isx::Bool)
|
|
# TODO: call expand limits for each plot data
|
|
end
|
|
|
|
function _remove_axis(plt::Plot{GLVisualizeBackend}, isx::Bool)
|
|
# TODO: if plot is inner subplot, might need to remove ticks or axis labels
|
|
end
|
|
|
|
# ----------------------------------------------------------------
|
|
|
|
function Base.writemime(io::IO, ::MIME"image/png", plt::AbstractPlot{GLVisualizeBackend})
|
|
# TODO: write a png to io
|
|
end
|
|
|
|
function Base.display(::PlotsDisplay, plt::Plot{GLVisualizeBackend})
|
|
# TODO: display/show the plot
|
|
|
|
# NOTE: I think maybe this should be empty? We can start with the assumption that creating
|
|
# and adding to a plot will automatically open a window and draw to it, then the display
|
|
# wouldn't actually need to do anything
|
|
end
|
|
|
|
function Base.display(::PlotsDisplay, plt::Subplot{GLVisualizeBackend})
|
|
# TODO: display/show the subplot
|
|
end
|