# HG changeset patch # User Ingo Weinzierl # Date 1325060893 0 # Node ID 522826b41ffac1d5c3a3dc31adb2db89fc96731e # Parent f97cf2e350c98291ba92f533a86959d91eea8d30 Compute better step width for W/Q input. flys-artifacts/trunk@3551 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r f97cf2e350c9 -r 522826b41ffa flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Tue Dec 27 11:37:23 2011 +0000 +++ b/flys-artifacts/ChangeLog Wed Dec 28 08:28:13 2011 +0000 @@ -1,3 +1,12 @@ +2011-12-28 Ingo Weinzierl + + * src/main/java/de/intevation/flys/artifacts/states/WQSelect.java: + Compute better step width based on a maximal number of steps = 30. + Results with digits are rounded up. E.g.: + Q range = 9.6 - 1750 + Step width = 58.01 + Rounded result = 60 + 2011-12-27 Ingo Weinzierl * src/main/java/de/intevation/flys/exports/AxisSection.java, diff -r f97cf2e350c9 -r 522826b41ffa flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/WQSelect.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/WQSelect.java Tue Dec 27 11:37:23 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/WQSelect.java Wed Dec 28 08:28:13 2011 +0000 @@ -45,6 +45,9 @@ /** The default step width for Qs. */ public static final String DEFAULT_STEP_W = "30"; + /** The max number of steps for Qs and Ws. */ + public static final int MAX_STEPS = 30; + /** The name of the 'mode' field. */ public static final String WQ_MODE = "wq_mode"; @@ -237,14 +240,68 @@ } else { Element stepW = createItem( - cr, new String[] {"stepW", DEFAULT_STEP_W}); + cr, new String[] { + "stepW", + String.valueOf(getStepsW(minmaxW[0], minmaxW[1]))}); Element stepQ = createItem( - cr, new String[] {"stepQ", DEFAULT_STEP_Q}); + cr, new String[] { + "stepQ", + String.valueOf(getStepsW(minmaxQ[0], minmaxQ[1]))}); return new Element[] { stepW, stepQ }; } } + protected static double getStepsW(double min, double max) { + double diff = min < max ? max - min : min - max; + double step = diff / MAX_STEPS; + + if (step < 1000) { + return getSteps(step, 100); + } + else if (step < 100) { + return getSteps(step, 10); + } + else if (step < 10) { + return getSteps(step, 1); + } + else { + return step; + } + } + + + protected static double getStepsQ(double min, double max) { + double diff = min < max ? max - min : min - max; + double step = diff / MAX_STEPS; + + if (step < 1000) { + return getSteps(step, 100); + } + else if (step < 100) { + return getSteps(step, 10); + } + else if (step < 10) { + return getSteps(step, 1); + } + else { + return step; + } + } + + + protected static double getSteps(double steps, double factor) { + int fac = (int) steps / 10; + double diff = steps - fac * 10; + + if (diff == 0) { + return steps; + } + + return 10d * (fac + 1); + } + + protected Element createItem(XMLUtils.ElementCreator cr, Object obj) { Element item = ProtocolUtils.createArtNode(cr, "item", null, null); Element label = ProtocolUtils.createArtNode(cr, "label", null, null);