Ignore:
Timestamp:
2011-08-07T08:25:31+02:00 (13 years ago)
Author:
akks
Message:

'FastDraw: more settings, autosave'

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

    r26309 r26468  
    342342                //p1 = getPoint(pp1);
    343343                pp2 = it2.next();
    344                 //p2 = getPoint(pp2);
     344                //p2 =sa getPoint(pp2);
    345345                lens[i]=pp1.greatCircleDistance(pp2);
    346346            }
  • applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FDSettings.java

    r26455 r26468  
    2424    public int pkmBlockSize;
    2525    public boolean drawLastSegment;
     26    // snap to nodes
     27    public boolean snapNodes;
     28    // add fixed foints on mouse click
     29    public boolean fixedClick;
     30    // add fixed foints on spacebar
     31    public boolean fixedSpacebar;
     32    // option for simplifiction: 0="Autosimplify and wait",
     33    //1="Simplify and wait", 2="Save as is"
     34    public int simplifyMode;
    2635   
    2736    public void loadPrefs() {
     
    3948        pkmBlockSize = Main.pref.getInteger("fastdraw.pkmblocksize", 10);
    4049        drawLastSegment = Main.pref.getBoolean("fastdraw.drawlastsegment", true);
     50        snapNodes = Main.pref.getBoolean("fastdraw.snapnodes", true);
     51        fixedClick = Main.pref.getBoolean("fastdraw.fixedclick", false);
     52        fixedSpacebar = Main.pref.getBoolean("fastdraw.fixedspacebar", false);
     53        simplifyMode = Main.pref.getInteger("fastdraw.simplifymode", 0);
    4154    }
    4255
     
    5568         Main.pref.putInteger("fastdraw.pkmblocksize",pkmBlockSize);
    5669         Main.pref.put("fastdraw.drawlastsegment",drawLastSegment);
     70         Main.pref.put("fastdraw.snapnodes", snapNodes);
     71         Main.pref.put("fastdraw.fixedclick", fixedClick);
     72         Main.pref.put("fastdraw.fixedspacebar", fixedSpacebar);
     73         Main.pref.putInteger("fastdraw.simplifymode", simplifyMode);
    5774         try {Main.pref.save();} catch (IOException e) {
    5875             System.err.println(tr("Can not save preferences"));
    5976         }
    60    
    6177    }
    6278}
  • applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawConfigDialog.java

    r26303 r26468  
    55package org.openstreetmap.josm.plugins.fastdraw;
    66
     7import org.openstreetmap.josm.tools.GBC;
     8import java.awt.GridBagLayout;
    79import javax.swing.JOptionPane;
    810import java.text.NumberFormat;
     
    1012import org.openstreetmap.josm.Main;
    1113import org.openstreetmap.josm.gui.ExtendedDialog;
    12 import javax.swing.GroupLayout;
     14import javax.swing.JCheckBox;
     15import javax.swing.JComboBox;
    1316import javax.swing.JFormattedTextField;
    1417import javax.swing.JPanel;
    1518import javax.swing.JLabel;
    16 import javax.swing.JTextField;
    1719import static org.openstreetmap.josm.tools.I18n.tr;
    1820
     
    2224        super(Main.parent,tr("FastDraw configuration"),new String[] {tr("Ok"), tr("Cancel")});
    2325        JPanel all = new JPanel();
    24         GroupLayout layout = new GroupLayout(all);
     26        GridBagLayout layout = new GridBagLayout();
    2527        all.setLayout(layout);
    26         layout.setAutoCreateGaps(true);
    27         layout.setAutoCreateContainerGaps(true);
    2828       
    2929        JLabel label1=new JLabel(tr("Epsilon multiplier"));
    3030        JLabel label2=new JLabel(tr("Starting Epsilon"));
    3131        JLabel label3=new JLabel(tr("Max points count per 1 km"));
     32        JLabel label4=new JLabel(tr("Enter key mode"));
    3233        JFormattedTextField text1=new JFormattedTextField(NumberFormat.getInstance());
    3334        JFormattedTextField text2=new  JFormattedTextField(NumberFormat.getInstance());
    3435        JFormattedTextField text3=new  JFormattedTextField(NumberFormat.getInstance());
    35         layout.setHorizontalGroup(
    36             layout.createSequentialGroup()
    37                 .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
    38                     .addComponent(label1)
    39                     .addComponent(label2)
    40                     .addComponent(label3))
    41                 .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
    42                     .addComponent(text1)
    43                     .addComponent(text2)
    44                     .addComponent(text3)
    45                 )
    46                 );
    47         layout.setVerticalGroup(
    48             layout.createSequentialGroup()
    49                 .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
    50                     .addComponent(label1)
    51                     .addComponent(text1))
    52                 .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
    53                     .addComponent(label2)
    54                     .addComponent(text2))
    55                 .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
    56                     .addComponent(label3)
    57                     .addComponent(text3))
    58                 );
     36//        JComboBox combo1=new JComboBox(new String[]{tr("Autosimplify and wait"),
     37//            tr("Autosimplify and save"),tr("Simplify and wait"),tr("Simplify and save"),
     38//            tr("Save as is")});
     39        JComboBox combo1=new JComboBox(new String[]{tr("Autosimplify"),
     40            tr("Simplify with initial epsilon"),tr("Save as is")});
     41        JCheckBox snapCb=new JCheckBox(tr("Snap to nodes"));
     42        JCheckBox fixedClickCb = new JCheckBox(tr("Add fixed points on click"));
     43        JCheckBox fixedSpaceCb = new JCheckBox(tr("Add fixed points on spacebar"));
     44        all.add(label1,GBC.std().insets(10,0,0,0));
     45        all.add(text1, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
     46        all.add(label2,GBC.std().insets(10,0,0,0));
     47        all.add(text2, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
     48        all.add(label3,GBC.std().insets(10,0,0,0));
     49        all.add(text3, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
     50        all.add(label4,GBC.std().insets(10,0,0,0));
     51        all.add(combo1, GBC.eop().fill(GBC.HORIZONTAL).insets(5,0,0,5));
     52       
     53        all.add(snapCb,GBC.eop().insets(20,0,0,0));
     54        all.add(fixedClickCb,GBC.eop().insets(20,0,0,0));
     55        all.add(fixedSpaceCb,GBC.eop().insets(20,0,0,0));
    5956       
    6057        text1.setValue(settings.epsilonMult);
    6158        text2.setValue(settings.startingEps);
    6259        text3.setValue(settings.maxPointsPerKm);
    63        
     60        snapCb.setSelected(settings.snapNodes);
     61        fixedClickCb.setSelected(settings.fixedClick);
     62        fixedSpaceCb.setSelected(settings.fixedSpacebar);
     63        combo1.setSelectedIndex(settings.simplifyMode);
     64
    6465        ExtendedDialog dialog = new ExtendedDialog(Main.parent,
    6566                tr("FastDraw settings"),
     
    8081            settings.startingEps=NumberFormat.getInstance().parse(text2.getText()).doubleValue();
    8182            settings.maxPointsPerKm=NumberFormat.getInstance().parse(text3.getText()).doubleValue();
     83            settings.snapNodes=snapCb.isSelected();
     84            settings.fixedClick=fixedClickCb.isSelected();
     85            settings.fixedSpacebar=fixedSpaceCb.isSelected();
     86            settings.simplifyMode=combo1.getSelectedIndex();
    8287            settings.savePrefs();
    8388            } catch (ParseException e) {
  • applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java

    r26460 r26468  
    8787 
    8888    private KeyEvent releaseEvent;
     89    private boolean lineWasSaved;
     90    private boolean deltaChanged;
    8991
    9092    FastDrawingMode(MapFrame mapFrame) {
     
    113115        if (!isEnabled()) return;
    114116        super.enterMode();
     117        lineWasSaved=false;
    115118        settings=new FDSettings();
    116119        settings.loadPrefs();
     
    157160    public void exitMode() {
    158161        super.exitMode();
     162        if (line.wasSimplified() && !lineWasSaved) saveAsWay(false);
    159163
    160164        Main.map.mapView.removeMouseListener(this);
     
    242246                }
    243247            }
    244             if (settings.drawLastSegment && !drawing && !shift && !line.wasSimplified()) {
     248            if (settings.drawLastSegment && !drawing && !shift && nearestIdx<0 && !line.wasSimplified()) {
    245249                // draw line to current point
    246250                g.setColor(lineColor);
     
    248252                Point mp=Main.map.mapView.getMousePosition();
    249253                if (lp!=null && mp!=null) g.drawLine(lp.x,lp.y,mp.x,mp.y);
     254            }
     255            if (deltaChanged) {
     256                g.setColor(lineColor);
     257                Point lp=line.getLastPoint();
     258                int r=(int) settings.minPixelsBetweenPoints;
     259                if (lp!=null) g.drawOval(lp.x-r,lp.y-r,2*r,2*r);
    250260            }
    251261        }
     
    315325            return;
    316326        }
    317         startDrawing(e.getPoint());
    318     }
    319 
    320     private void startDrawing(Point point) {
     327        startDrawing(e.getPoint(),settings.fixedClick);
     328    }
     329
     330    private void startDrawing(Point point, boolean fixFlag) {
    321331        //if (line.isClosed()) { setStatusLine(tr(SIMPLIFYMODE_MESSAGE));return;  }
    322332        drawing = true;
     333        if (line.wasSimplified()) {
     334            // new line started after simplification
     335            // we need to save old line
     336            saveAsWay(false);
     337            newDrawing();
     338            //line.clearSimplifiedVersion();
     339        }
     340
    323341
    324342        LatLon p = mv.getLatLon(point.x, point.y);
    325         Node nd1 = getNearestNode(point, settings.maxDist);
    326         if (nd1!=null) {
    327             // found node, make it fixed point of the line
    328             //System.out.println("node "+nd1);
    329             p=nd1.getCoor();
    330             line.fixPoint(p);
     343        if (settings.snapNodes) { // find existing node near point and use it
     344            Node nd1 = getNearestNode(point, settings.maxDist);
     345            if (nd1!=null) {
     346                // found node, make it fixed point of the line
     347                //System.out.println("node "+nd1);
     348                p=nd1.getCoor();
     349                line.fixPoint(p);
     350            }
    331351        }
    332352
    333353        line.addLast(p);
    334         if (ctrl) line.fixPoint(p);
    335         line.clearSimplifiedVersion();
    336 
     354        if (ctrl || fixFlag) line.fixPoint(p);
     355       
    337356        setStatusLine(tr("Please move the mouse to draw new way"));
    338357        repaint();
     
    363382    public void mouseMoved(MouseEvent e) {
    364383        if (!isEnabled()) return;
     384        deltaChanged=false;
    365385        Node nd1 = getNearestNode(e.getPoint(), settings.maxDist);
    366386        boolean nearpoint2=nd1!=null;
     
    422442        case KeyEvent.VK_BACK_SPACE:
    423443            if (line.wasSimplified()) {
     444                // return to line editing
    424445                line.clearSimplifiedVersion();
    425446                repaint();
     
    429450        break;
    430451        case KeyEvent.VK_ENTER:
     452            e.consume();
    431453            // first Enter = simplify, second = save the way
    432454            if (!line.wasSimplified()) {
    433455                //line.simplify(eps);
    434                 eps = line.autoSimplify(settings.startingEps, settings.epsilonMult,
     456                switch(settings.simplifyMode) {
     457                    case 0: //case 1:
     458                        eps = line.autoSimplify(settings.startingEps, settings.epsilonMult,
    435459                        settings.pkmBlockSize, settings.maxPointsPerKm);
    436                 repaint();
    437                 showSimplifyHint();
    438             } else saveAsWay();
     460                        break;
     461                    case 1: //case 2: case 3:
     462                        line.simplify(eps);
     463                        break;
     464                }
     465                if (settings.simplifyMode==2) {
     466                    // autosave
     467                    saveAsWay(true);
     468                } else {
     469                    repaint();
     470                    showSimplifyHint();
     471                }
     472            } else {saveAsWay(true);}
    439473        break;
    440474        case KeyEvent.VK_DOWN:
     
    461495                Toolkit.getDefaultToolkit().removeAWTEventListener(this);
    462496                new FastDrawConfigDialog(settings);
     497                if (line.wasSimplified()) {
    463498                eps = line.autoSimplify(settings.startingEps, settings.epsilonMult, settings.pkmBlockSize,settings.maxPointsPerKm);
     499                showSimplifyHint();
     500                }
    464501                //System.out.println("final eps="+eps);
    465502                Toolkit.getDefaultToolkit().addAWTEventListener(this,
     
    471508            if (!drawing) {
    472509                Point p = Main.map.mapView.getMousePosition();
    473                 if (p!=null) startDrawing(p);
     510                if (p!=null) startDrawing(p,settings.fixedSpacebar);
    474511            }
    475512        break;
     
    504541        line.clear();
    505542    }
    506     private void saveAsWay() {
     543    private void saveAsWay(boolean autoExit) {
    507544        List<LatLon> pts=line.getPoints();
    508545        int n = pts.size();
     
    561598        Command c = new SequenceCommand(tr("Draw the way by mouse"), cmds);
    562599        Main.main.undoRedo.add(c);
     600        lineWasSaved = true;
    563601        newDrawing(); // stop drawing
    564         // Select this way and switch drawing mode off
    565         exitMode();
    566         getCurrentDataSet().setSelected(w);
    567         Main.map.selectSelectTool(false);
    568     }
     602        if (autoExit) {
     603            // Select this way and switch drawing mode off
     604            exitMode();
     605            getCurrentDataSet().setSelected(w);
     606            Main.map.selectSelectTool(false);
     607        }
     608    }
     609
     610 
    569611
    570612    private void repaint() {
     
    588630    void changeDelta(double k) {
    589631        settings.minPixelsBetweenPoints*=k;
     632        deltaChanged=true;
    590633        setStatusLine(tr("min distance={0} pixes",(int)settings.minPixelsBetweenPoints));
    591        
     634        repaint();
    592635    }
    593636
Note: See TracChangeset for help on using the changeset viewer.