]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/gui/colour/ProfileDataColourer.java
Version 17, September 2014
[GpsPrune.git] / tim / prune / gui / colour / ProfileDataColourer.java
1 package tim.prune.gui.colour;
2
3 import java.awt.Color;
4
5 import tim.prune.config.Config;
6 import tim.prune.data.Track;
7 import tim.prune.gui.profile.ProfileData;
8
9 /**
10  * Colourer based on speed values
11  */
12 public abstract class ProfileDataColourer extends ContinuousPointColourer
13 {
14         /**
15          * Constructor
16          * @param inStartColour start colour
17          * @param inEndColour end colour
18          */
19         public ProfileDataColourer(Color inStartColour, Color inEndColour)
20         {
21                 super(inStartColour, inEndColour);
22         }
23
24         /**
25          * Calculate the colours according to the track and the profile data
26          */
27         public void calculateColours(Track inTrack, ProfileData inData)
28         {
29                 final int numPoints = inTrack == null ? 0 : inTrack.getNumPoints();
30
31                 // Calculate values for each point
32                 inData.init(Config.getUnitSet());
33                 // Figure out speed range
34                 double minValue = inData.getMinValue();
35                 double maxValue = inData.getMaxValue();
36                 if (!inData.hasData() || (maxValue - minValue) < 0.1)
37                 {
38                         // not enough value range, set all to null
39                         init(0);
40                 }
41                 else
42                 {
43                         // initialise the array to the right size
44                         init(numPoints);
45                         // loop over track points to calculate colours
46                         for (int i=0; i<numPoints; i++)
47                         {
48                                 if (inData.hasData(i))
49                                 {
50                                         double fraction = (inData.getData(i) - minValue) / (maxValue - minValue);
51                                         setColour(i, mixColour((float) fraction));
52                                 }
53                                 else setColour(i, null);
54                         }
55                 }
56         }
57 }