Changeset 26501 in osm


Ignore:
Timestamp:
2011-08-09T12:27:00+02:00 (13 years ago)
Author:
akks
Message:

FastDraw: line customization, use selected line=TT, ESC=exit

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

Legend:

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

    r26468 r26501  
    9595 
    9696    Point getLastPoint() {
    97         return getPoint(points.get(lastIdx));
     97        if (lastIdx<points.size()) return getPoint(points.get(lastIdx));
     98        else return null;
    9899    }
    99100
  • applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FDSettings.java

    r26468 r26501  
    1212    public Color COLOR_SELECTEDFRAGMENT;
    1313    public Color COLOR_EDITEDFRAGMENT;
    14 
     14    public Color COLOR_SIMPLIFIED;
     15   
    1516    public double maxDist;
    1617    public double epsilonMult;
     
    3334    //1="Simplify and wait", 2="Save as is"
    3435    public int simplifyMode;
     36    public float lineWidth;
    3537   
    3638    public void loadPrefs() {
     
    4042        COLOR_NORMAL = Main.pref.getColor("fastdraw.color.normal", Color.red);
    4143        COLOR_SELECTEDFRAGMENT = Main.pref.getColor("fastdraw.color.select", Color.blue);
     44        COLOR_SIMPLIFIED = Main.pref.getColor("fastdraw.color.simplified", Color.orange);
    4245        maxDist = Main.pref.getDouble("fastdraw.maxdist", 5);
    4346        epsilonMult = Main.pref.getDouble("fastdraw.epsilonmult", 1.1);
     
    5255        fixedSpacebar = Main.pref.getBoolean("fastdraw.fixedspacebar", false);
    5356        simplifyMode = Main.pref.getInteger("fastdraw.simplifymode", 0);
     57        lineWidth = (float) Main.pref.getDouble("fastdraw.linewidth", 2);
    5458    }
    5559
     
    6064         Main.pref.putColor("fastdraw.color.normal", COLOR_NORMAL);
    6165         Main.pref.putColor("fastdraw.color.select", COLOR_SELECTEDFRAGMENT);
     66         Main.pref.getColor("fastdraw.color.simplified", COLOR_SIMPLIFIED);
    6267         Main.pref.putDouble("fastdraw.maxdist", maxDist);
    6368         Main.pref.putDouble("fastdraw.epsilonmult", epsilonMult);
     
    7277         Main.pref.put("fastdraw.fixedspacebar", fixedSpacebar);
    7378         Main.pref.putInteger("fastdraw.simplifymode", simplifyMode);
     79         Main.pref.putDouble("fastdraw.linewidth",(double)lineWidth);
    7480         try {Main.pref.save();} catch (IOException e) {
    7581             System.err.println(tr("Can not save preferences"));
  • applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java

    r26490 r26501  
    4343import org.openstreetmap.josm.data.osm.OsmPrimitive;
    4444import org.openstreetmap.josm.data.osm.Way;
     45import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
    4546import org.openstreetmap.josm.gui.MapFrame;
    4647import org.openstreetmap.josm.gui.MapView;
     
    6768    private boolean shift;
    6869    private double eps;
    69     private final Stroke strokeForSimplified;
    70     private final Stroke strokeForOriginal;
     70    private Stroke strokeForSimplified;
     71    private Stroke strokeForOriginal;
    7172    private final Cursor cursorDraw;
    7273    private final Cursor cursorCtrl;
     
    9697                KeyEvent.VK_T, Shortcut.GROUP_EDIT), mapFrame, Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    9798        line=new DrawnPolyLine();
    98         strokeForOriginal = new BasicStroke();
    99         strokeForDelete = new BasicStroke(3);
    100         strokeForSimplified = new BasicStroke(1,BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL,5f,
    101                 new float[]{5.f,5f},0f);
    10299        cursorDraw = ImageProvider.getCursor("crosshair", null);
    103100        cursorCtrl = ImageProvider.getCursor("crosshair", "fixed");
     
    119116        settings.loadPrefs();
    120117        settings.savePrefs();
     118
     119        strokeForOriginal = new BasicStroke(settings.lineWidth);
     120        strokeForDelete = new BasicStroke(3);
     121        //strokeForSimplified = new BasicStroke(1,BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL,5f,
     122        //        new float[]{5.f,5f},0f);
     123        strokeForSimplified = strokeForOriginal;
    121124       
    122125        eps=settings.startingEps;
     
    130133        Main.map.mapView.addTemporaryLayer(this);
    131134
    132         updateCursor();
    133         Collection<Way> selectedWays = Main.main.getCurrentDataSet().getSelectedWays();
    134         if (selectedWays!=null // if there is a selection
    135             && selectedWays.size()==1 // and one way is selected
    136             && line.getPoints().size()==0) /* and ther is no already drawn line */ {
    137             // we can start drawing new way starting from old one
    138             Way w = selectedWays.iterator().next();
    139            
    140             if (w.isNew()) loadFromWay(w);
    141         }
     135        //tryToLoadWay();
     136       
    142137        timer = new Timer(0, new ActionListener() {
    143138            @Override
     
    205200        g.setColor(settings.COLOR_FIXED);
    206201        g.fillOval(p1.x - 3, p1.y - 3, 7, 7);
    207         Color lineColor=settings.COLOR_NORMAL;
     202        Color lineColor,initLineColor;
     203        initLineColor = line.wasSimplified() ? settings.COLOR_SIMPLIFIED: settings.COLOR_NORMAL;
     204        lineColor = initLineColor;
     205        int rp,dp;
     206        dp=line.wasSimplified() ? 7:(int)(3+((int) settings.lineWidth)/2*2);  rp=dp/2;
    208207        if (pts.size() > 1) {
    209208        Iterator<LatLon> it1,it2;
    210209        it1=pts.listIterator(0);
    211210        it2=pts.listIterator(1);
    212             for (int i = 0; i < pts.size() - 1; i++) {
     211        for (int i = 0; i < pts.size() - 1; i++) {
    213212                pp1 = it1.next();
    214213                p1 = line.getPoint(pp1);
     
    221220  //                  g.fillOval(p2.x - 5, p2.y - 5, 11, 11);
    222221                if (line.isFixed(pp2)) {
    223                     lineColor=settings.COLOR_NORMAL;
     222                    lineColor=initLineColor;
    224223                    g.setColor(settings.COLOR_FIXED);
    225224                    g.fillOval(p2.x - 3, p2.y - 3, 7, 7);
    226225                } else {
    227                     g.fillRect(p2.x - 1, p2.y - 1, 3, 3);
     226                    g.fillRect(p2.x - rp, p2.y - rp, dp, dp);
    228227                }
    229228                if (!drawing) {
     
    246245                }
    247246            }
    248             if (settings.drawLastSegment && !drawing && !shift && nearestIdx<0 && !line.wasSimplified()) {
    249                 // draw line to current point
    250                 g.setColor(lineColor);
    251                 Point lp=line.getLastPoint();
    252                 Point mp=Main.map.mapView.getMousePosition();
    253                 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);
    260             }
    261         }
     247        }
     248        if (settings.drawLastSegment && !drawing && !shift && nearestIdx<0 && !line.wasSimplified()) {
     249            // draw line to current point
     250            g.setColor(lineColor);
     251            Point lp=line.getLastPoint();
     252            Point mp=Main.map.mapView.getMousePosition();
     253            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);
     260        }
     261
    262262    }
    263263
     
    487487            // less details
    488488            e.consume();
     489            Point lastPoint = line.getLastPoint();
    489490            line.moveToTheEnd();
     491            if (lastPoint==null || lastPoint.equals(line.getLastPoint())) {
     492                 if (line.getPoints().size()>5) {
     493                 boolean answer = ConditionalOptionPaneUtil.showConfirmationDialog(
     494                    "delete_drawn_line", Main.parent,
     495                    tr("Are you sure you do not want to save the line containing {0} points?",
     496                         line.getPoints().size()), tr("Delete confirmation"),
     497                    JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_OPTION );
     498                 if(!answer) break;
     499                }
     500                newDrawing(); // stop drawing
     501                exitMode();
     502                Main.map.selectSelectTool(false);
     503            }
     504        break;
     505        case KeyEvent.VK_T:
     506            tryToLoadWay();
    490507        break;
    491508        case KeyEvent.VK_Q:
     
    541558        line.clear();
    542559    }
     560   
    543561    private void saveAsWay(boolean autoExit) {
    544562        List<LatLon> pts=line.getPoints();
     
    598616        } else cmds.add(new AddCommand(w));
    599617        Command c = new SequenceCommand(tr("Draw the way by mouse"), cmds);
     618        if (!Main.main.hasEditLayer()) return;
    600619        Main.main.undoRedo.add(c);
    601620        lineWasSaved = true;
     
    609628    }
    610629
    611  
    612 
    613     private void repaint() {
    614         Main.map.mapView.repaint();
    615     }
    616 
    617630    public void back() {
    618631        line.undo();
     
    632645        settings.minPixelsBetweenPoints*=k;
    633646        deltaChanged=true;
    634         setStatusLine(tr("min distance={0} pixes",(int)settings.minPixelsBetweenPoints));
     647       
     648        setStatusLine(tr("min distance={0} pixels or {1} m",(int)settings.minPixelsBetweenPoints,
     649                mv.getDist100Pixel()/100*settings.minPixelsBetweenPoints));
    635650        repaint();
    636651    }
    637652
    638     private void setStatusLine(String tr) {
    639         statusText=tr;
    640         updateStatusLine();
    641     }
    642653
    643654    /*private Node findClosestNode(LatLon p, double d) {
     
    658669    }*/
    659670
    660 
    661 
    662 
     671    private void loadFromWay(Way w) {
     672        List<LatLon> pts=line.getPoints();
     673
     674        Collection<Command> cmds = new LinkedList<Command>();
     675       
     676        Node firstNode=null;
     677        Object[] nodes = w.getNodes().toArray();
     678        int n=nodes.length;
     679        if (w.isClosed()) n--;
     680        for (int i=0;i<n;i++) {
     681            Node nd=(Node) nodes[i];
     682            line.addLast(nd.getCoor());
     683        }
     684        if (w.isClosed()) line.closeLine();
     685        oldNodes = w.getNodes();
     686        List <OsmPrimitive> wl = new ArrayList(); wl.add(w);
     687       
     688        Command c = DeleteCommand.delete(getEditLayer(), wl, false);
     689        if (c != null) cmds.add(c);
     690        delCmd = new SequenceCommand(tr("Convert way to FastDraw line"), cmds);
     691        Main.main.undoRedo.add(delCmd);
     692    }
     693
     694    private void setStatusLine(String tr) {
     695        statusText=tr;
     696        updateStatusLine();
     697    }
     698
     699    private void showSimplifyHint() {
     700            setStatusLine(tr("Eps={0}, {1} points, {2} p/km",
     701                eps, line.getSimplePointsCount(),line.getNodesPerKm(settings.pkmBlockSize))+" "
     702            +SIMPLIFYMODE_MESSAGE);
     703    }
     704   
    663705    private void updateCursor() {
    664706        if (shift) Main.map.mapView.setCursor(cursorShift); else
     
    671713
    672714    }
     715
     716    private void repaint() {
     717        Main.map.mapView.repaint();
     718    }
    673719// </editor-fold>
    674720
     
    686732// </editor-fold>
    687733
    688     private void showSimplifyHint() {
    689             setStatusLine(tr("Eps={0}, {1} points, {2} p/km",
    690                 eps, line.getSimplePointsCount(),line.getNodesPerKm(settings.pkmBlockSize))+" "
    691             +SIMPLIFYMODE_MESSAGE);
    692     }
    693 
    694     private void loadFromWay(Way w) {
    695         List<LatLon> pts=line.getPoints();
    696 
    697         Collection<Command> cmds = new LinkedList<Command>();
    698        
    699         Node firstNode=null;
    700         Object[] nodes = w.getNodes().toArray();
    701         int n=nodes.length;
    702         if (w.isClosed()) n--;
    703         for (int i=0;i<n;i++) {
    704             Node nd=(Node) nodes[i];
    705             line.addLast(nd.getCoor());
    706         }
    707         if (w.isClosed()) line.closeLine();
    708         oldNodes = w.getNodes();
    709         List <OsmPrimitive> wl = new ArrayList(); wl.add(w);
    710        
    711         Command c = DeleteCommand.delete(getEditLayer(), wl, false);
    712         if (c != null) cmds.add(c);
    713         delCmd = new SequenceCommand(tr("Convert way to FastDraw line"), cmds);
    714         Main.main.undoRedo.add(delCmd);
    715     }
     734    private void tryToLoadWay() {
     735        updateCursor();
     736        Collection<Way> selectedWays = Main.main.getCurrentDataSet().getSelectedWays();
     737        if (selectedWays!=null // if there is a selection
     738            && selectedWays.size()==1 // and one way is selected
     739            && line.getPoints().size()==0) /* and ther is no already drawn line */ {
     740            // we can start drawing new way starting from old one
     741            Way w = selectedWays.iterator().next();
     742           
     743            if (w.isNew()) loadFromWay(w);
     744        }
     745    }
     746
    716747
    717748}
Note: See TracChangeset for help on using the changeset viewer.