# HG changeset patch # User Chris Cannam # Date 1366730848 -3600 # Node ID b28512329efc06636828fca231388f5a58396d39 # Parent 1101ecb57e4780cbe394afc66b2da1d7aacf4d73 Offscreen rendering & save-to-file (save-to-file works, offscreen currently doesn't) diff -r 1101ecb57e47 -r b28512329efc .hgsubstate --- a/.hgsubstate Tue Apr 23 13:51:12 2013 +0100 +++ b/.hgsubstate Tue Apr 23 16:27:28 2013 +0100 @@ -1,1 +1,1 @@ -7349390722d80414bd0ce280d121f344d9908d0d ext +423dfec8262cd97b03e3137bcb05729f86cab6de ext diff -r 1101ecb57e47 -r b28512329efc yetilab/plot/plot.yeti --- a/yetilab/plot/plot.yeti Tue Apr 23 13:51:12 2013 +0100 +++ b/yetilab/plot/plot.yeti Tue Apr 23 16:27:28 2013 +0100 @@ -14,6 +14,10 @@ import org.jzy3d.plot3d.rendering.canvas: Quality; import org.jzy3d.plot3d.rendering.view.modes: ViewPositionMode; +import javax.imageio: ImageIO; + +import java.io: File; + chartColours = array [ { r = 82, g = 126, b = 154 }, // dark steel blue { r = 161, g = 54, b = 2 }, // red @@ -71,7 +75,9 @@ var animated = false, var normalised = false, var unit = "", - var xkeys = array (sort defaultXKeys) + var xkeys = array (sort defaultXKeys), + var saveTo = "", + var display = true, }; for options \case of @@ -81,12 +87,32 @@ Normalised n: parsed.normalised := n; Unit u: parsed.unit := u; Labels ll: parsed.labels := ll; + SaveTo file: parsed.saveTo := file; + Display d: parsed.display := d; esac; if empty? parsed.labels then parsed.labels := mapIntoHash id id parsed.keys fi; parsed); +newChart opts = + (quality = Quality#Fastest; + quality#setAnimated(opts.animated); +// if opts.display then + new Chart(quality); +// else +// new Chart(quality, "offscreen,640,640"); +// fi); + ); + +showChart opts chart is 'a -> ~Chart -> () = + (//if opts.display then + \() ChartLauncher#openChart(chart); +// fi; + if opts.saveTo != "" then + \() chart#screenshot(opts.saveTo); + fi); + plotMatrix matrix = (mapper = newMatrixMapper matrix; size = matrix.size; @@ -107,12 +133,10 @@ plotBarChart options values = (opts = parseOptions options (keys values) []; - quality = Quality#Fastest; - quality#setAnimated(opts.animated); - chart = new Chart(quality); + chart = newChart opts; var n = length opts.keys; scene = chart#getScene(); - ticks = new float[n+1]; + ticks = new double[n+1]; tickLabels = new TickLabelMap(); var i = 0; var x = n - i - 1; @@ -143,14 +167,11 @@ axes#setXTickProvider(new StaticTickProvider(ticks)); axes#setXTickRenderer(tickLabels); axes#setYTickLabelDisplayed(false); - ChartLauncher#openChart(chart); - ()); + showChart opts chart); plotLines options values = (opts = parseOptions options (keys values) (keys values[head (keys values)]); - quality = Quality#Fastest; - quality#setAnimated(opts.animated); - chart = new Chart(quality); + chart = newChart opts; scene = chart#getScene(); n = length opts.xkeys; var z = 0; @@ -179,8 +200,7 @@ axes#setZAxeLabelDisplayed(true); axes#setZAxeLabel(opts.unit); axes#setYTickLabelDisplayed(false); - ChartLauncher#openChart(chart); - ()); + showChart opts chart); stack keys xkeys values normalised = (stacked = mapIntoHash id \(mapIntoHash id \{ y0 = 0, y1 = 0 } xkeys) keys; @@ -215,9 +235,7 @@ plotStacked options values = (opts = parseOptions options (keys values) (keys values[head (keys values)]); - quality = Quality#Fastest; - quality#setAnimated(opts.animated); - chart = new Chart(quality); + chart = newChart opts; scene = chart#getScene(); stacked = stack opts.keys opts.xkeys values opts.normalised; var z = 0; @@ -252,8 +270,7 @@ axes#setZAxeLabel(opts.unit); fi; axes#setYTickLabelDisplayed(false); - ChartLauncher#openChart(chart); - ()); + showChart opts chart); plotStructure structure = case structure of