Ignore:
Timestamp:
2013-01-17T12:08:28+01:00 (12 years ago)
Author:
malcolmh
Message:

save

Location:
applications/editors/josm/plugins/smed2/src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/smed2/src/seamap/Renderer.java

    r29200 r29202  
    1111
    1212import java.awt.BasicStroke;
     13import java.awt.Color;
     14import java.awt.Font;
    1315import java.awt.Graphics2D;
     16import java.awt.Rectangle;
    1417import java.awt.RenderingHints;
     18import java.awt.font.TextLayout;
    1519import java.awt.geom.GeneralPath;
    1620import java.awt.geom.Path2D;
     
    2529import seamap.SeaMap;
    2630import seamap.SeaMap.*;
     31import symbols.Areas;
    2732import symbols.Symbols;
    2833import symbols.Symbols.*;
     
    6974        public static double calcArea(Feature feature) {
    7075          if (feature.flag == Fflag.AREA) {
    71                         ArrayList<Long> way = map.ways.get(feature.refs);
     76                        ArrayList<Long> way;
     77                        if (map.mpolys.containsKey(feature.refs)) {
     78                                way = map.ways.get(map.mpolys.get(feature.refs));
     79                        } else {
     80                                way = map.ways.get(feature.refs);
     81                        }
    7282                        Coord coord = map.nodes.get(way.get(0));
    7383            double llon = coord.lon;
     
    8999        public static Coord findCentroid(Feature feature) {
    90100                Coord coord;
    91                 ArrayList<Long> way = map.ways.get(feature.refs);
     101                ArrayList<Long> way;
     102                if (map.mpolys.containsKey(feature.refs)) {
     103                        way = map.ways.get(map.mpolys.get(feature.refs));
     104                } else {
     105                        way = map.ways.get(feature.refs);
     106                }
    92107                switch (feature.flag) {
    93108                case NODE:
     
    142157        public static void lineVector (Feature feature, LineStyle style) {
    143158                if (feature.flag != Fflag.NODE) {
    144                         Long mpoly = map.outers.get(feature.refs);
    145159                        ArrayList<Long> ways = new ArrayList<Long>();
    146                         if (mpoly != null) {
    147                                 ways.addAll(map.mpolys.get(mpoly));
     160                        if (map.outers.containsKey(feature.refs)) {
     161                                ways.addAll(map.mpolys.get(map.outers.get(feature.refs)));
    148162                        } else {
    149                                 ways.add(feature.refs);
     163                                if (map.mpolys.containsKey(feature.refs)) {
     164                                        ways.addAll(map.mpolys.get(feature.refs));
     165                                } else {
     166                                        ways.add(feature.refs);
     167                                }
    150168                        }
    151169                        Path2D.Double p = new Path2D.Double();
     
    168186                                        System.arraycopy(style.dash, 0, dash, 0, style.dash.length);
    169187                                        for (int i = 0; i < style.dash.length; i++) {
    170                                                 dash[i] *= (float) (sScale);
     188                                                dash[i] *= (float) sScale;
    171189                                        }
    172190                                        g2.setStroke(new BasicStroke((float) (style.width * sScale), BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, dash, 0));
     
    184202        }
    185203       
    186         public static void labelText (Feature feature, String str, TextStyle style, Delta delta) {
     204        public static void labelText (Feature feature, String str, Font font, Delta delta) {
     205                Symbol label = new Symbol();
     206                label.add(new Instr(Prim.FILL, Color.black));
     207                label.add(new Instr(Prim.TEXT, new Caption(str, font, delta)));
     208                Point2D point = helper.getPoint(findCentroid(feature));
     209                Symbols.drawSymbol(g2, label, tScale, point.getX(), point.getY(), delta, null);
     210        }
     211       
     212        public static void lineText (Feature feature, String str, Font font, double offset, double dy) {
    187213               
    188214        }
    189        
    190         public static void lineText (Feature feature, String str, TextStyle style, double offset, Delta delta) {
    191                
    192         }
    193215}
  • applications/editors/josm/plugins/smed2/src/seamap/Rules.java

    r29199 r29202  
    103103       
    104104        private static void shoreline(Feature feature) {
    105                 CatSLC cat = (CatSLC) Renderer.getAttVal(feature, feature.type, 0, Att.CATSLC);
    106105                if (zoom >= 12) {
    107                         switch (cat) {
     106                        switch ((CatSLC) Renderer.getAttVal(feature, feature.type, 0, Att.CATSLC)) {
    108107                        case SLC_TWAL:
    109108                                WatLEV lev = (WatLEV) Renderer.getAttVal(feature, feature.type, 0, Att.WATLEV);
     
    111110                                        Renderer.lineVector(feature, new LineStyle(Color.black, 10, new float[] { 40, 40 }, null));
    112111                                        if (zoom >= 15)
    113                                                 Renderer.lineText(feature, "(covers)", new TextStyle(new Font("Arial", Font.PLAIN, 80)), 0.5, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 20)));
     112                                                Renderer.lineText(feature, "(covers)", new Font("Arial", Font.PLAIN, 80), 0.5, 20);
    114113                                } else {
    115114                                        Renderer.lineVector(feature, new LineStyle(Color.black, 10, null, null));
    116115                                }
    117116                                if (zoom >= 15)
    118                                         Renderer.lineText(feature, "Training Wall", new TextStyle(new Font("Arial", Font.PLAIN, 80)), 0.5, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -20)));
     117                                        Renderer.lineText(feature, "Training Wall", new Font("Arial", Font.PLAIN, 80), 0.5, -20);
    119118                        }
    120119                }
     
    149148                        AttItem name = feature.atts.get(Att.OBJNAM);
    150149                        if ((zoom >= 10) && (name != null))
    151                                 Renderer.labelText(feature, (String) name.val, new TextStyle(new Font("Arial", Font.BOLD, 150)), null);
     150                                Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 150), null);
    152151                        break;
    153152                case TSELNE:
     
    171170                        }
    172171                        if ((zoom >= 15) && (name != null))
    173                                 Renderer.labelText(feature, (String) name.val, new TextStyle(new Font("Arial", Font.BOLD, 80)), new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -90)));
     172                                Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -90)));
    174173                        break;
    175174                case MARCUL:
     
    196195                                Renderer.lineVector(feature, new LineStyle(Color.black, 8, new float[] { 25, 25 }, null));
    197196                        if ((zoom >= 12) && (name != null))
    198                                 Renderer.labelText(feature, (String) name.val, new TextStyle(new Font("Arial", Font.PLAIN, 100)), new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)));
     197                                Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.PLAIN, 100), new Delta(Handle.CC, AffineTransform.getTranslateInstance(0, 0)));
    199198                        break;
    200199                case RESARE:
     
    210209                                Renderer.lineVector(feature, new LineStyle(Color.black, 20, new float[] { 40, 40 }, null));
    211210                                if ((zoom >= 15) && (name != null))
    212                                         Renderer.labelText(feature, (String) name.val, new TextStyle(new Font("Arial", Font.BOLD, 80)), new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 10)));
     211                                        Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 10)));
    213212                        }
    214213                        break;
    215214                case SEAARE:
     215                        switch ((CatSEA) Renderer.getAttVal(feature, feature.type, 0, Att.CATSEA)) {
     216                        case SEA_RECH:
     217                                break;
     218                        case SEA_BAY:
     219                                break;
     220                        case SEA_SHOL:
     221                                break;
     222                        case SEA_GAT:
     223                        case SEA_NRRW:
     224                                break;
     225                        }
    216226                        break;
    217227                case SNDWAV:
  • applications/editors/josm/plugins/smed2/src/seamap/SeaMap.java

    r29200 r29202  
    120120        private Feature feature;
    121121        private ArrayList<Long> list;
    122         private long mpid;
    123122
    124123        public SeaMap() {
     
    154153                list = new ArrayList<Long>();
    155154                mpolys.put(id, list);
    156                 mpid = id;
     155                feature = new Feature();
     156                feature.refs = id;
     157                feature.flag = Fflag.AREA;
    157158        }
    158159
     
    164165                if (outer) {
    165166                        list.add(0, way);
    166                         outers.put(way, mpid);
     167                        outers.put(way, feature.refs);
    167168                } else {
    168169                        list.add(way);
  • applications/editors/josm/plugins/smed2/src/smed2/MapImage.java

    r29198 r29202  
    6464        public void paint(Graphics2D g2, MapView mv, Bounds bb) {
    6565                Rectangle rect = Main.map.mapView.getBounds();
    66                 g2.setBackground(new Color(0xb5d0d0));
    67                 g2.clearRect(rect.x, rect.y, rect.width, rect.height);
     66//              g2.setBackground(new Color(0xb5d0d0));
     67//              g2.clearRect(rect.x, rect.y, rect.width, rect.height);
    6868                g2.setPaint(Color.black);
    6969                g2.setFont(new Font("Arial", Font.BOLD, 20));
  • applications/editors/josm/plugins/smed2/src/smed2/Smed2Action.java

    r29198 r29202  
    207207                if (data != null) {
    208208                        for (OsmPrimitive osm : data) {
    209                                 if ((osm instanceof Node) || (osm instanceof Way)) {
    210                                         if (osm instanceof Node) {
    211                                                 map.addNode(((Node) osm).getUniqueId(), ((Node) osm).getCoor().lat(), ((Node) osm).getCoor().lon());
    212                                         } else {
    213                                                 map.addWay(((Way) osm).getUniqueId());
    214                                                 for (Node node : ((Way) osm).getNodes()) {
    215                                                         map.addToWay((node.getUniqueId()));
    216                                                 }
    217                                         }
    218                                         for (Entry<String, String> entry : osm.getKeys().entrySet()) {
    219                                                 map.addTag(entry.getKey(), entry.getValue());
    220                                         }
    221                                         map.tagsDone(osm.getUniqueId());
     209                                if (osm instanceof Node) {
     210                                        map.addNode(((Node) osm).getUniqueId(), ((Node) osm).getCoor().lat(), ((Node) osm).getCoor().lon());
     211                                } else if (osm instanceof Way) {
     212                                        map.addWay(((Way) osm).getUniqueId());
     213                                        for (Node node : ((Way) osm).getNodes()) {
     214                                                map.addToWay((node.getUniqueId()));
     215                                        }
    222216                                } else if ((osm instanceof Relation) && ((Relation) osm).isMultipolygon()) {
    223217                                        map.addMpoly(((Relation) osm).getUniqueId());
     
    227221                                        }
    228222                                }
     223                                for (Entry<String, String> entry : osm.getKeys().entrySet()) {
     224                                        map.addTag(entry.getKey(), entry.getValue());
     225                                }
     226                                map.tagsDone(osm.getUniqueId());
    229227                        }
    230228                }
  • applications/editors/josm/plugins/smed2/src/symbols/Notices.java

    r29198 r29202  
    5151        private static final Symbol Sport = new Symbol();
    5252        static {
    53                 Sport.add(new Instr(Prim.TEXT, new Caption("SPORT", new TextStyle(new Font("Arial", Font.BOLD, 15)), (float)-25.0, (float)5.0)));
     53                Sport.add(new Instr(Prim.TEXT, new Caption("SPORT", new Font("Arial", Font.BOLD, 15), new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)))));
    5454        }
    5555        private static final Symbol Turn = new Symbol();
     
    6565        private static final Symbol VHF = new Symbol();
    6666        static {
    67                 VHF.add(new Instr(Prim.TEXT, new Caption("VHF", new TextStyle(new Font("Arial", Font.BOLD, 20)), (float)-20.0, (float)-5.0)));
     67                VHF.add(new Instr(Prim.TEXT, new Caption("VHF", new Font("Arial", Font.BOLD, 20), new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)))));
    6868        }
    6969        private static final Symbol Waterbike = new Symbol();
  • applications/editors/josm/plugins/smed2/src/symbols/Symbols.java

    r29199 r29202  
    1515import java.awt.Graphics2D;
    1616import java.awt.Rectangle;
     17import java.awt.font.TextLayout;
    1718import java.awt.geom.*;
    1819import java.util.ArrayList;
     
    5960                Object params;
    6061
    61                 Instr(Prim itype, Object iparams) {
     62                public Instr(Prim itype, Object iparams) {
    6263                        type = itype;
    6364                        params = iparams;
     
    8586        }
    8687
    87         public static class TextStyle {
    88                 Font font;
    89 
    90                 public TextStyle(Font ifont) {
    91                         font = ifont;
    92                 }
    93         }
    94 
    9588        public static class Caption {
    9689                String str;
    97                 TextStyle style;
    98                 float x;
    99                 float y;
    100 
    101                 public Caption(String istr, TextStyle istyle, float ix, float iy) {
     90                Font font;
     91                Delta dd;
     92
     93                public Caption(String istr, Font ifont, Delta idd) {
    10294                        str = istr;
    103                         style = istyle;
    104                         x = ix;
    105                         y = iy;
     95                        font = ifont;
     96                        dd = idd;
    10697                }
    10798        }
     
    167158                                                switch (dd.h) {
    168159                                                case CC:
    169                                                         dx = bbox.x + (bbox.width / 2.0);
    170                                                         dy = bbox.y + (bbox.height / 2.0);
     160                                                        dx -= bbox.x + (bbox.width / 2.0);
     161                                                        dy -= bbox.y + (bbox.height / 2.0);
    171162                                                        break;
    172163                                                case TL:
    173                                                         dx = bbox.x;
    174                                                         dy = bbox.y;
     164                                                        dx -= bbox.x;
     165                                                        dy -= bbox.y;
    175166                                                        break;
    176167                                                case TR:
    177                                                         dx = bbox.x + bbox.width;
    178                                                         dy = bbox.y;
     168                                                        dx -= bbox.x + bbox.width;
     169                                                        dy -= bbox.y;
    179170                                                        break;
    180171                                                case TC:
    181                                                         dx = bbox.x + (bbox.width / 2.0);
    182                                                         dy = bbox.y;
     172                                                        dx -= bbox.x + (bbox.width / 2.0);
     173                                                        dy -= bbox.y;
    183174                                                        break;
    184175                                                case LC:
    185                                                         dx = bbox.x;
    186                                                         dy = bbox.y + (bbox.height / 2.0);
     176                                                        dx -= bbox.x;
     177                                                        dy -= bbox.y + (bbox.height / 2.0);
    187178                                                        break;
    188179                                                case RC:
    189                                                         dx = bbox.x + bbox.width;
    190                                                         dy = bbox.y + (bbox.height / 2.0);
     180                                                        dx -= bbox.x + bbox.width;
     181                                                        dy -= bbox.y + (bbox.height / 2.0);
    191182                                                        break;
    192183                                                case BL:
    193                                                         dx = bbox.x;
    194                                                         dy = bbox.y + bbox.height;
     184                                                        dx -= bbox.x;
     185                                                        dy -= bbox.y + bbox.height;
    195186                                                        break;
    196187                                                case BR:
    197                                                         dx = bbox.x + bbox.width;
    198                                                         dy = bbox.y + bbox.height;
     188                                                        dx -= bbox.x + bbox.width;
     189                                                        dy -= bbox.y + bbox.height;
    199190                                                        break;
    200191                                                case BC:
    201                                                         dx = bbox.x + (bbox.width / 2.0);
    202                                                         dy = bbox.y + bbox.height;
     192                                                        dx -= bbox.x + (bbox.width / 2.0);
     193                                                        dy -= bbox.y + bbox.height;
    203194                                                        break;
    204195                                                }
    205                                                 g2.translate(-dx, -dy);
     196                                                g2.translate(dx, dy);
    206197                                        }
    207198                                        break;
     
    296287                                case TEXT:
    297288                                        Caption c = (Caption) item.params;
    298                                         g2.setFont(c.style.font);
    299                                         g2.drawString(c.str, c.x, c.y);
     289                                        TextLayout layout = new TextLayout(c.str, c.font, g2.getFontRenderContext());
     290                                        Rectangle2D bb = layout.getBounds();
     291                                        dx = 0;
     292                                        dy = 0;
     293                                        if (c.dd != null) {
     294                                                g2.transform(c.dd.t);
     295                                                switch (c.dd.h) {
     296                                                case CC:
     297                                                        dx -= bb.getX() + (bb.getWidth() / 2.0);
     298                                                        dy -= bb.getY() + (bb.getHeight() / 2.0);
     299                                                        break;
     300                                                case TL:
     301                                                        dx -= bb.getX();
     302                                                        dy -= bb.getY();
     303                                                        break;
     304                                                case TR:
     305                                                        dx -= bb.getX() + bb.getWidth();
     306                                                        dy -= bb.getY();
     307                                                        break;
     308                                                case TC:
     309                                                        dx -= bb.getX() + (bb.getWidth() / 2.0);
     310                                                        dy -= bb.getY();
     311                                                        break;
     312                                                case LC:
     313                                                        dx -= bb.getX();
     314                                                        dy -= bb.getY() + (bb.getHeight() / 2.0);
     315                                                        break;
     316                                                case RC:
     317                                                        dx -= bb.getX() + bb.getWidth();
     318                                                        dy -= bb.getY() + (bb.getHeight() / 2.0);
     319                                                        break;
     320                                                case BL:
     321                                                        dx -= bb.getX();
     322                                                        dy -= bb.getY() + bb.getHeight();
     323                                                        break;
     324                                                case BR:
     325                                                        dx -= bb.getX() + bb.getWidth();
     326                                                        dy -= bb.getY() + bb.getHeight();
     327                                                        break;
     328                                                case BC:
     329                                                        dx -= bb.getX() + (bb.getWidth() / 2.0);
     330                                                        dy -= bb.getY() + bb.getHeight();
     331                                                        break;
     332                                                }
     333                                        }
     334                                        layout.draw(g2, (float)dx, (float)dy);
    300335                                        break;
    301336                                }
Note: See TracChangeset for help on using the changeset viewer.