Ignore:
Timestamp:
2011-07-11T20:27:27+02:00 (13 years ago)
Author:
akks
Message:

'FastDraw: plugin icon'

Location:
applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/DrawnPolyLine.java

    r26264 r26303  
    88import java.util.ListIterator;
    99import java.util.Set;
     10import javax.xml.stream.events.StartDocument;
    1011import org.openstreetmap.josm.data.coor.LatLon;
    1112import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    105106    }
    106107   
     108    /**
     109     * Increase epsilon to fit points count in maxPKM point per 1 km
     110     */
     111    double autoSimplify(double initEpsilon,double ekf,double maxPKM) {
     112        double e=initEpsilon;
     113        if (e<1e-3) e=1e-3;
     114        if (ekf<1+1e-2) ekf=1.01;
     115        do {
     116             e=e*ekf;
     117             simplify(e);
     118             //System.out.printf("eps=%f n=%d\n", e,simplePoints.size());
     119        } while (getNodesPerKm()>maxPKM && e<1e3);
     120        return e;
     121    }
     122           
    107123    /**
    108124     * Simplified drawn line, not touching the nodes includes in "fixed" set.
     
    302318         }
    303319    }
     320    public double getNodesPerKm() {
     321        if (points.size()<2) return 0;
     322        Point p1, p2;
     323        LatLon pp1, pp2=null;
     324        Iterator<LatLon> it1,it2;
     325       
     326        it1=points.listIterator(0);
     327        it2=points.listIterator(1);
     328        int n=points.size();
     329        double len=0;
     330        for (int i = 0; i < n-1; i++) {
     331                pp1 = it1.next();
     332                //p1 = getPoint(pp1);
     333                pp2 = it2.next();
     334                //p2 = getPoint(pp2);
     335                len+=pp1.greatCircleDistance(pp2);
     336            }
     337        if (isClosed()) len+=pp2.greatCircleDistance(points.get(0));
     338        return Math.round((wasSimplified()?simplePoints.size():points.size())
     339                /len*1000);
     340       
     341           
     342    }
    304343
    305344}
  • applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FDSettings.java

    r26264 r26303  
    2020    /// Initial tolerance for Douglas-Pecker algorithm
    2121    public double startingEps;   
     22    /// Maximum number of points per 1 km of way
     23    public double maxPointsPerKm;
    2224   
    2325    public void loadPrefs() {
     
    3234        minPixelsBetweenPoints = Main.pref.getDouble("fastdraw.mindelta", 20);
    3335        startingEps = Main.pref.getDouble("fastdraw.startingEps", 20);
     36        maxPointsPerKm = Main.pref.getDouble("fastdraw.maxpkm", 200);
    3437    }
    3538
     
    4548         Main.pref.putDouble("fastdraw.mindelta",minPixelsBetweenPoints);
    4649         Main.pref.putDouble("fastdraw.startingEps",startingEps);
     50         Main.pref.putDouble("fastdraw.maxpkm",maxPointsPerKm);
    4751         try {Main.pref.save();} catch (IOException e) {
    4852             System.err.println(tr("Can not save preferences"));
  • applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawConfigDialog.java

    r26264 r26303  
    2929        JLabel label1=new JLabel(tr("Epsilon multiplier"));
    3030        JLabel label2=new JLabel(tr("Starting Epsilon"));
     31        JLabel label3=new JLabel(tr("Max points count per 1 km"));
    3132        JFormattedTextField text1=new JFormattedTextField(NumberFormat.getInstance());
    3233        JFormattedTextField text2=new  JFormattedTextField(NumberFormat.getInstance());
     34        JFormattedTextField text3=new  JFormattedTextField(NumberFormat.getInstance());
    3335        layout.setHorizontalGroup(
    3436            layout.createSequentialGroup()
    3537                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
    3638                    .addComponent(label1)
    37                     .addComponent(label2))
     39                    .addComponent(label2)
     40                    .addComponent(label3))
    3841                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
    3942                    .addComponent(text1)
    4043                    .addComponent(text2)
     44                    .addComponent(text3)
    4145                )
    4246                );
     
    4953                    .addComponent(label2)
    5054                    .addComponent(text2))
     55                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
     56                    .addComponent(label3)
     57                    .addComponent(text3))
    5158                );
    5259       
    5360        text1.setValue(settings.epsilonMult);
    5461        text2.setValue(settings.startingEps);
     62        text3.setValue(settings.maxPointsPerKm);
    5563       
    5664        ExtendedDialog dialog = new ExtendedDialog(Main.parent,
     
    7179            settings.epsilonMult=NumberFormat.getInstance().parse(text1.getText()).doubleValue();
    7280            settings.startingEps=NumberFormat.getInstance().parse(text2.getText()).doubleValue();
     81            settings.maxPointsPerKm=NumberFormat.getInstance().parse(text3.getText()).doubleValue();
    7382            settings.savePrefs();
    7483            } catch (ParseException e) {
  • applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java

    r26264 r26303  
    364364            // first Enter = simplify, second = save the way
    365365            if (!line.wasSimplified()) {
    366                 line.simplify(eps);
    367                 setStatusLine(tr("Eps={0}, {1} points", eps, line.getSimplePointsCount())+" "+SIMPLIFYMODE_MESSAGE);
     366                //line.simplify(eps);
     367                eps = line.autoSimplify(settings.startingEps, settings.epsilonMult, settings.maxPointsPerKm);
     368                repaint();
     369                showSimplifyHint();
    368370            } else saveAsWay();
    369371        }
     
    389391                Toolkit.getDefaultToolkit().removeAWTEventListener(this);
    390392                new FastDrawConfigDialog(settings);
     393                eps = line.autoSimplify(settings.startingEps, settings.epsilonMult, settings.maxPointsPerKm);
     394                //System.out.println("final eps="+eps);
    391395                Toolkit.getDefaultToolkit().addAWTEventListener(this,
    392396                    AWTEvent.KEY_EVENT_MASK);
    393397            } catch (SecurityException ex) {  }
    394             eps=settings.startingEps;
     398            repaint();
    395399        }
    396400    }
     
    485489        line.simplify(eps);
    486490        /* I18N: Eps = Epsilon, the tolerance parameter */
    487         setStatusLine(tr("Eps={0}, {1} points", eps, line.getSimplePointsCount()));
     491        showSimplifyHint();
    488492        repaint();
    489493    }
     
    538542// </editor-fold>
    539543
     544    private void showSimplifyHint() {
     545            setStatusLine(tr("Eps={0}, {1} points, {2} p/km",
     546                eps, line.getSimplePointsCount(),line.getNodesPerKm())+" "
     547            +SIMPLIFYMODE_MESSAGE);
     548    }
    540549}
Note: See TracChangeset for help on using the changeset viewer.