# HG changeset patch # User gernotbelger # Date 1520352407 -3600 # Node ID 3ac9cb0029b2be08f399921077c82a748c5cb22c # Parent cef37cc093f210f96dc145bdb9d6da569c3581e3 Introduced new hook for chart tweaking. Also consider area-themes when calculating zoom-bounds diff -r cef37cc093f2 -r 3ac9cb0029b2 artifacts/src/main/java/org/dive4elements/river/exports/ChartExtender.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/ChartExtender.java Tue Mar 06 17:05:37 2018 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/ChartExtender.java Tue Mar 06 17:06:47 2018 +0100 @@ -20,6 +20,12 @@ public interface ChartExtender { /** + * Called before {@link DiagramGenerator#autoZoom(org.jfree.chart.plot.XYPlot)} is called, allows to tweak auto zoom + * behavior. + */ + void beforeAutoZoom(DiagramGenerator generator); + + /** * Called after {@link DiagramGenerator#autoZoom(org.jfree.chart.plot.XYPlot)} was called, allows to tweak auto zoom * behavior. */ @@ -27,7 +33,7 @@ /** * Called after the complete chart is generated. - * + * * @param plot */ void afterGenerateChart(DiagramGenerator generator, XYPlot plot); diff -r cef37cc093f2 -r 3ac9cb0029b2 artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java Tue Mar 06 17:05:37 2018 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java Tue Mar 06 17:06:47 2018 +0100 @@ -1608,4 +1608,9 @@ public final IdentifiableNumberAxis getAxis(final String axisName) { return axisNameToAxis.get(axisName); } + + /** Returns the number of registered y-axes */ + public final int getNumYAxes() { + return axisNameToAxis.size(); + } } \ No newline at end of file diff -r cef37cc093f2 -r 3ac9cb0029b2 artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java Tue Mar 06 17:05:37 2018 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java Tue Mar 06 17:06:47 2018 +0100 @@ -509,13 +509,31 @@ AxisDataset axisDataset = (AxisDataset) getAxisDataset(index); + Bounds[] xyBounds = ChartHelper.getBounds(area); + + if (xyBounds == null) { + log.warn("Skip XYDataset for Axis (invalid ranges): " + index); + return; + } + + if (visible) { + if (log.isDebugEnabled()) { + log.debug("Add new AxisDataset at index: " + index); + log.debug("X extent: " + xyBounds[0]); + log.debug("Y extent: " + xyBounds[1]); + } + axisDataset.addArea(area); } - else { - /* No range merging, for areas extending to infinity this - * causes problems. */ - } + + /* No range merging, for areas extending to infinity this causes problems. */ + /* No range merging, for areas extending to infinity this causes problems. */ + if( StyledSeriesBuilder.isBigDoubleValue( xyBounds[1].getLower() ) || StyledSeriesBuilder.isBigDoubleValue( xyBounds[1].getLower() ) ) + return; + + combineXBounds(xyBounds[0], 0); + combineYBounds(xyBounds[1], index); } /** @@ -719,6 +737,12 @@ protected void autoZoom(XYPlot plot) { log.debug("Zoom to specified ranges."); + /* allow chart extenders to tweak zoom behavior */ + final Collection extenders = this.diagramAttributes.getExtenders(); + for (final ChartExtender extender : extenders) { + extender.beforeAutoZoom(this); + } + Range xrange = getDomainAxisRange(); Range yrange = getValueAxisRange(); @@ -754,8 +778,6 @@ zoom(plot, yaxis, getYBounds(Integer.valueOf(i)), yrange); } - /* allow chart extenders to tweak zoom behaviour */ - final Collection extenders = this.diagramAttributes.getExtenders(); for (final ChartExtender extender : extenders) { extender.afterAutoZoom(this); } diff -r cef37cc093f2 -r 3ac9cb0029b2 artifacts/src/main/java/org/dive4elements/river/exports/StyledSeriesBuilder.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/StyledSeriesBuilder.java Tue Mar 06 17:05:37 2018 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/StyledSeriesBuilder.java Tue Mar 06 17:06:47 2018 +0100 @@ -400,5 +400,14 @@ ground.add(series.getMaxX(), BIG_DOUBLE_VALUE); return ground; } + + + /** Checks if a given value is the BIG_DOUBLE_VALUE */ + public static boolean isBigDoubleValue(Number value) { + if( value == null ) + return false; + + return Math.abs( BIG_DOUBLE_VALUE - Math.abs(value.doubleValue()) ) < 0.1; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :