From d34fd9341c61d13677e029cb187d4dacff5e44ea Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Fri, 26 Oct 2018 20:31:01 -0400 Subject: [PATCH] Much better AO. --- timeflow/vis/timeline/AxisTicMarks.java | 220 +++++++++++++++++++++++++++--------------------------- 1 files changed, 111 insertions(+), 109 deletions(-) diff --git a/timeflow/vis/timeline/AxisTicMarks.java b/timeflow/vis/timeline/AxisTicMarks.java index 85a16dd..edbd96b 100755 --- a/timeflow/vis/timeline/AxisTicMarks.java +++ b/timeflow/vis/timeline/AxisTicMarks.java @@ -4,114 +4,116 @@ import timeflow.data.time.*; -public class AxisTicMarks { - public TimeUnit unit; - public List<Long> tics; - - private static final TimeUnit[] units={ - TimeUnit.YEAR, TimeUnit.MONTH, TimeUnit.DAY, TimeUnit.HOUR, TimeUnit.MINUTE, TimeUnit.SECOND - }; - - private static final TimeUnit[] histUnits={ - TimeUnit.YEAR.times(100), TimeUnit.YEAR.times(50), TimeUnit.YEAR.times(25), - TimeUnit.YEAR.times(10), TimeUnit.YEAR.times(5), TimeUnit.YEAR.times(2), TimeUnit.YEAR, - TimeUnit.MONTH.times(6), TimeUnit.MONTH.times(3), TimeUnit.MONTH.times(2), TimeUnit.MONTH, - TimeUnit.WEEK, TimeUnit.DAY.times(2), TimeUnit.DAY, +public class AxisTicMarks +{ + public TimeUnit unit; + public List<Long> tics; + private static final TimeUnit[] units = + { + TimeUnit.YEAR, TimeUnit.MONTH, TimeUnit.DAY, TimeUnit.HOUR, TimeUnit.MINUTE, TimeUnit.SECOND + }; + private static final TimeUnit[] histUnits = + { + TimeUnit.YEAR.times(100), TimeUnit.YEAR.times(50), TimeUnit.YEAR.times(25), + TimeUnit.YEAR.times(10), TimeUnit.YEAR.times(5), TimeUnit.YEAR.times(2), TimeUnit.YEAR, + TimeUnit.MONTH.times(6), TimeUnit.MONTH.times(3), TimeUnit.MONTH.times(2), TimeUnit.MONTH, + TimeUnit.WEEK, TimeUnit.DAY.times(2), TimeUnit.DAY, + TimeUnit.HOUR, + TimeUnit.MINUTE, + TimeUnit.SECOND + }; - TimeUnit.HOUR, - TimeUnit.MINUTE, - TimeUnit.SECOND - }; - - public AxisTicMarks(TimeUnit unit, long start, long end) - { - this.unit=unit; - tics=new ArrayList<Long>(); - RoughTime r=unit.roundDown(start); - tics.add(r.getTime()); - do - { - unit.addTo(r); - tics.add(r.getTime()); - } while (r.getTime()<end); - } - - - - public static List<AxisTicMarks> allRelevant(Interval interval) - { - return allRelevant(interval.start, interval.end); - } - - public static List<AxisTicMarks> allRelevant(long start, long end) - { - return allRelevant(start, end, 40); - } - - public static AxisTicMarks histoTics(long start, long end) - { - for (int i=histUnits.length-1; i>=0; i--) - { - TimeUnit u=histUnits[i]; - long estimate=u.approxNumInRange(start, end); - if (estimate<200 || i==0) - { - AxisTicMarks t=new AxisTicMarks(u, start, end); - return t; - } - } - return null; - } - - public static List<AxisTicMarks> allRelevant(long start, long end, long maxTics) - { - List<AxisTicMarks> list=new ArrayList<AxisTicMarks>(); - - - for (int i=0; i<units.length; i++) - { - TimeUnit u=units[i]; - long estimate=u.approxNumInRange(start, end); - - if (estimate<maxTics) - { - AxisTicMarks t=new AxisTicMarks(u, start, end); - if (list.size()>0) - { - AxisTicMarks last=list.get(0); - if (last.tics.size()==t.tics.size()) - list.remove(0); - } - list.add(t); - - } - } - while (list.size()>2) - list.remove(0); - - if (list.size()==0) // uh oh! must be many years. we will add in bigger increments. - { - long length=end-start; - long size=365*24*60*60*1000L; - int m=1; - maxTics=15; - while (m<2000000000 && length/(m*size)>maxTics) - { - if (length/(2*m*size)<=maxTics) - { - m*=2; - break; - } - if (length/(5*m*size)<=maxTics) - { - m*=5; - break; - } - m*=10; - } - AxisTicMarks t=new AxisTicMarks(TimeUnit.multipleYears(m), start, end); - list.add(t); - } - return list; - } + public AxisTicMarks(TimeUnit unit, long start, long end) + { + this.unit = unit; + tics = new ArrayList<Long>(); + RoughTime r = unit.roundDown(start); + tics.add(r.getTime()); + do + { + unit.addTo(r); + tics.add(r.getTime()); + } while (r.getTime() < end); + } + + public static List<AxisTicMarks> allRelevant(Interval interval) + { + return allRelevant(interval.start, interval.end); + } + + public static List<AxisTicMarks> allRelevant(long start, long end) + { + return allRelevant(start, end, 40); + } + + public static AxisTicMarks histoTics(long start, long end) + { + for (int i = histUnits.length - 1; i >= 0; i--) + { + TimeUnit u = histUnits[i]; + long estimate = u.approxNumInRange(start, end); + if (estimate < 200 || i == 0) + { + AxisTicMarks t = new AxisTicMarks(u, start, end); + return t; + } + } + return null; + } + + public static List<AxisTicMarks> allRelevant(long start, long end, long maxTics) + { + List<AxisTicMarks> list = new ArrayList<AxisTicMarks>(); + + + for (int i = 0; i < units.length; i++) + { + TimeUnit u = units[i]; + long estimate = u.approxNumInRange(start, end); + + if (estimate < maxTics) + { + AxisTicMarks t = new AxisTicMarks(u, start, end); + if (list.size() > 0) + { + AxisTicMarks last = list.get(0); + if (last.tics.size() == t.tics.size()) + { + list.remove(0); + } + } + list.add(t); + + } + } + while (list.size() > 2) + { + list.remove(0); + } + + if (list.size() == 0) // uh oh! must be many years. we will add in bigger increments. + { + long length = end - start; + long size = 365 * 24 * 60 * 60 * 1000L; + int m = 1; + maxTics = 15; + while (m < 2000000000 && length / (m * size) > maxTics) + { + if (length / (2 * m * size) <= maxTics) + { + m *= 2; + break; + } + if (length / (5 * m * size) <= maxTics) + { + m *= 5; + break; + } + m *= 10; + } + AxisTicMarks t = new AxisTicMarks(TimeUnit.multipleYears(m), start, end); + list.add(t); + } + return list; + } } -- Gitblit v1.6.2