Ticket #6540: gpx_color_direction.2.patch

File gpx_color_direction.2.patch, 5.1 KB (added by anonymous, 23 months ago)

updated version. leaves internal integers for existing modes unchanged.

  • src/org/openstreetmap/josm/gui/layer/GpxLayer.java

    diff --git a/src/org/openstreetmap/josm/gui/layer/GpxLayer.java b/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
    index 1443089..a19ecb3 100644
    a b public class GpxLayer extends Layer { 
    310310        } 
    311311    } 
    312312 
     313    private static Color[] colors_cyclic = new Color[256]; 
     314    static { 
     315        for (int i = 0; i < colors_cyclic.length; i++) { 
     316            colors_cyclic[i] = Color.getHSBColor(i / 256.0f, 1, 1); 
     317        } 
     318    } 
     319 
    313320    // lookup array to draw arrows without doing any math 
    314321    private static int ll0 = 9; 
    315322    private static int sl4 = 5; 
    public class GpxLayer extends Layer { 
    321328 
    322329    // the different color modes 
    323330    enum colorModes { 
    324         none, velocity, dilution 
     331        none, velocity, dilution, direction 
    325332    } 
    326333 
    327334    @Override 
    public class GpxLayer extends Layer { 
    429436                                } 
    430437                                break; 
    431438 
     439                            case direction: 
     440                                // unfortunately "heading" misses a cos-factor in the 
     441                                // longitudes to account for the convergence of meridians 
     442                                double dirColor = oldWp.getCoor().heading(trkPnt.getCoor()) / (2.0 * Math.PI) * 255; 
     443                                // Bad case first 
     444                                if (dirColor != dirColor || dirColor < 0.0 || dirColor >= 256.0) { 
     445                                    trkPnt.customColoring = colors_cyclic[0]; 
     446                                } else { 
     447                                    trkPnt.customColoring = colors_cyclic[(int) (dirColor)]; 
     448                                } 
     449                                break; 
     450 
    432451                            case dilution: 
    433452                                if (trkPnt.attr.get("hdop") != null) { 
    434453                                    float hdop = ((Float) trkPnt.attr.get("hdop")).floatValue(); 
  • src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java

    diff --git a/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java b/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java
    index 785026d..69fdd14 100644
    a b public class DrawingPreference implements PreferenceSetting { 
    4444    private JCheckBox hdopCircleGpsPoints = new JCheckBox(tr("Draw a circle form HDOP value.")); 
    4545    private ButtonGroup colorGroup; 
    4646    private JRadioButton colorTypeVelocity = new JRadioButton(tr("Velocity (red = slow, green = fast)")); 
     47    private JRadioButton colorTypeDirection = new JRadioButton(tr("Direction (red = north, purple = west)")); 
    4748    private JRadioButton colorTypeDilution = new JRadioButton(tr("Dilution of Position (red = high, green = low, if available)")); 
    4849    private JRadioButton colorTypeNone = new JRadioButton(tr("Single Color (can be customized for named layers)")); 
    4950    private JComboBox colorTypeVelocityTune = new JComboBox(new String[] {tr("Car"), tr("Bicycle"), tr("Foot")}); 
    public class DrawingPreference implements PreferenceSetting { 
    169170        colorGroup = new ButtonGroup(); 
    170171        colorGroup.add(colorTypeNone); 
    171172        colorGroup.add(colorTypeVelocity); 
     173        colorGroup.add(colorTypeDirection); 
    172174        colorGroup.add(colorTypeDilution); 
    173175 
    174176        colorTypeVelocity.addChangeListener(new ChangeListener(){ 
    public class DrawingPreference implements PreferenceSetting { 
    187189        case 2: 
    188190            colorTypeDilution.setSelected(true); 
    189191            break; 
     192        case 3: 
     193            colorTypeDirection.setSelected(true); 
     194            break; 
    190195        } 
    191196 
    192197        colorTypeNone.setToolTipText(tr("All points and track segments will have the same color. Can be customized in Layer Manager.")); 
    193198        colorTypeVelocity.setToolTipText(tr("Colors points and track segments by velocity.")); 
     199        colorTypeDirection.setToolTipText(tr("Colors points and track segments by direction.")); 
    194200        colorTypeDilution.setToolTipText(tr("Colors points and track segments by dilution of position (HDOP). Your capture device needs to log that information.")); 
    195201 
    196202        // color Tracks by Velocity Tune 
    public class DrawingPreference implements PreferenceSetting { 
    205211        panel.add(colorTypeNone, GBC.eol().insets(40,0,0,0)); 
    206212        panel.add(colorTypeVelocity, GBC.std().insets(40,0,0,0)); 
    207213        panel.add(colorTypeVelocityTune, GBC.eop().insets(5,0,0,5)); 
     214        panel.add(colorTypeDirection, GBC.eol().insets(40,0,0,0)); 
    208215        panel.add(colorTypeDilution, GBC.eol().insets(40,0,0,0)); 
    209216 
    210217        // waypointLabel 
    public class DrawingPreference implements PreferenceSetting { 
    299306            Main.pref.putInteger("draw.rawgps.colors", 1); 
    300307        } else if(colorTypeDilution.isSelected()) { 
    301308            Main.pref.putInteger("draw.rawgps.colors", 2); 
     309        } else if(colorTypeDirection.isSelected()) { 
     310            Main.pref.putInteger("draw.rawgps.colors", 3); 
    302311        } else { 
    303312            Main.pref.putInteger("draw.rawgps.colors", 0); 
    304313        }