Changeset 21307 in osm for applications/editors/josm


Ignore:
Timestamp:
2010-05-16T14:19:11+02:00 (15 years ago)
Author:
stoecker
Message:

display angle also for ways

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java

    r18962 r21307  
    103103        this.setPreferredSize(new Dimension(0, 92));
    104104        final MeasurementDialog dlg = this;
    105        //TODO: is this enough?
    106105
    107         DataSet.selListeners.add(new SelectionChangedListener(){
    108 
     106        DataSet.selListeners.add(new SelectionChangedListener() {
    109107            public void selectionChanged(Collection<? extends OsmPrimitive> arg0) {
    110108                double length = 0.0;
    111109                double segAngle = 0.0;
    112                                 double area = 0.0;
    113                                 Node lastNode = null;
    114                 for(OsmPrimitive p:arg0){
    115                                     // ignore incomplete nodes
    116                                     if(p instanceof Node && !((Node)p).isIncomplete()){
    117                                         Node n =(Node)p;
    118                                         if(lastNode == null){
    119                                             lastNode = n;
    120                                         }else{
    121                                             length += MeasurementLayer.calcDistance(lastNode.getCoor(), n.getCoor());
    122                                             segAngle = MeasurementLayer.angleBetween(lastNode.getCoor(), n.getCoor());
    123                                             lastNode = n;
    124                                         }
    125                                     } else if(p instanceof Way){
    126                                         Way w = (Way)p;
    127                                         Node lastN = null;
    128                                         for(Node n: w.getNodes()){
    129                                             if(lastN != null){
    130                                                 length += MeasurementLayer.calcDistance(lastN.getCoor(), n.getCoor());
    131                                                 //http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/
    132                                                 area += (MeasurementLayer.calcX(n.getCoor()) * MeasurementLayer.calcY(lastN.getCoor()))
    133                               - (MeasurementLayer.calcY(n.getCoor()) * MeasurementLayer.calcX(lastN.getCoor()));
    134                                             }
    135                                             lastN = n;
    136                                         }
    137                                         if (lastN != null && lastN == w.getNodes().iterator().next()){
    138                                             area = Math.abs(area / 2);
    139                                         }else{
    140                                             area = 0;
    141                                         }
    142                                     }
     110                double area = 0.0;
     111                Node lastNode = null;
     112                for(OsmPrimitive p:arg0) {
     113                    // ignore incomplete nodes
     114                    if(p instanceof Node && !((Node)p).isIncomplete()) {
     115                        Node n =(Node)p;
     116                        if(lastNode == null) {
     117                            lastNode = n;
     118                        } else {
     119                            length += MeasurementLayer.calcDistance(lastNode.getCoor(), n.getCoor());
     120                            segAngle = MeasurementLayer.angleBetween(lastNode.getCoor(), n.getCoor());
     121                            lastNode = n;
     122                        }
     123                    } else if(p instanceof Way) {
     124                        Way w = (Way)p;
     125                        Node lastN = null;
     126                        for(Node n: w.getNodes()) {
     127                            if(lastN != null) {
     128                                length += MeasurementLayer.calcDistance(lastN.getCoor(), n.getCoor());
     129                                //http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/
     130                                area += (MeasurementLayer.calcX(n.getCoor()) * MeasurementLayer.calcY(lastN.getCoor()))
     131                                - (MeasurementLayer.calcY(n.getCoor()) * MeasurementLayer.calcX(lastN.getCoor()));
     132                                segAngle = MeasurementLayer.angleBetween(lastN.getCoor(), n.getCoor());
     133                            }
     134                            lastN = n;
     135                        }
     136                        if (lastN != null && lastN == w.getNodes().iterator().next())
     137                            area = Math.abs(area / 2);
     138                        else
     139                            area = 0;
     140                    }
    143141                }
    144142                dlg.selectLengthLabel.setText(new DecimalFormat("#0.00").format(length) + " m");
     
    164162        MeasurementPlugin.getCurrentLayer().reset();
    165163    }
    166 
    167164}
Note: See TracChangeset for help on using the changeset viewer.