Changeset 29204 in osm for applications/editors


Ignore:
Timestamp:
2013-01-19T15:50:02+01:00 (12 years ago)
Author:
malcolmh
Message:

save

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

Legend:

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

    r29202 r29204  
    1616import java.awt.Rectangle;
    1717import java.awt.RenderingHints;
    18 import java.awt.font.TextLayout;
     18import java.awt.geom.AffineTransform;
    1919import java.awt.geom.GeneralPath;
    2020import java.awt.geom.Path2D;
     
    2929import seamap.SeaMap;
    3030import seamap.SeaMap.*;
    31 import symbols.Areas;
    3231import symbols.Symbols;
    3332import symbols.Symbols.*;
     
    145144        }
    146145       
     146        private static Rectangle symbolSize(Symbol symbol) {
     147                Symbol ssymb = symbol;
     148                while (ssymb != null) {
     149                        for (Instr item : symbol) {
     150                                if (item.type == Prim.BBOX) {
     151                                        return (Rectangle) item.params;
     152                                }
     153                                if (item.type == Prim.SYMB) {
     154                                        ssymb = (Symbol) item.params;
     155                                        break;
     156                                }
     157                        }
     158                        if (ssymb == symbol)
     159                                break;
     160                }
     161                return null;
     162        }
     163       
    147164        public static void lineSymbols(Feature feature, Symbol prisymb, double space, Symbol secsymb, int ratio) {
    148165                if (feature.flag != Fflag.NODE) {
    149                         ArrayList<Long> way = map.ways.get(feature.refs);
    150                         for (long node : way) {
    151                                 Point2D point = helper.getPoint(map.nodes.get(node));
    152                                
    153                         }
    154                 }
    155         }
    156        
     166                        Rectangle prect = symbolSize(prisymb);
     167                        Rectangle srect = symbolSize(secsymb);
     168                        if (srect == null)
     169                                ratio = 0;
     170                        if (prect != null) {
     171                                ArrayList<Long> ways = new ArrayList<Long>();
     172                                double psize = Math.abs(prect.getY()) * sScale;
     173                                double ssize = (srect != null) ? Math.abs(srect.getY()) * sScale : 0;
     174                                if (map.outers.containsKey(feature.refs)) {
     175                                        ways.addAll(map.mpolys.get(map.outers.get(feature.refs)));
     176                                } else {
     177                                        if (map.mpolys.containsKey(feature.refs)) {
     178                                                ways.addAll(map.mpolys.get(feature.refs));
     179                                        } else {
     180                                                ways.add(feature.refs);
     181                                        }
     182                                }
     183                                Point2D prev = new Point2D.Double();
     184                                Point2D next = new Point2D.Double();
     185                                Point2D curr = new Point2D.Double();
     186                                Point2D succ = new Point2D.Double();
     187                                boolean gap = true;
     188                                boolean piv = false;
     189                                double len = 0;
     190                                double angle = 0;
     191                                int scount = ratio;
     192                                Symbol symbol = prisymb;
     193                                for (long way : ways) {
     194                                        boolean first = true;
     195                                        for (long node : map.ways.get(way)) {
     196                                                prev = next;
     197                                                next = helper.getPoint(map.nodes.get(node));
     198                                                angle = Math.atan2(next.getY() - prev.getY(), next.getX() - prev.getX());
     199                                                piv = true;
     200                                                if (first) {
     201                                                        curr = succ = next;
     202                                                        gap  = (space > 0);
     203                                                        scount  = ratio;
     204                                                        symbol  = prisymb;
     205                                                        len = gap ? psize * space * 0.5 : psize;
     206                                                        first = false;
     207                                                } else {
     208                                                        while (curr.distance(next) >= len) {
     209                                                                if (piv) {
     210                                                                        succ = new Point2D.Double(prev.getX() + (len * Math.cos(angle)), prev.getY() + (len * Math.sin(angle)));
     211                                                                        piv = false;
     212                                                                } else {
     213                                                                        succ = new Point2D.Double(curr.getX() + (len * Math.cos(angle)), curr.getY() + (len * Math.sin(angle)));
     214                                                                }
     215                                                                if (!gap) {
     216                                                                        Symbols.drawSymbol(g2, symbol, sScale, curr.getX(), curr.getY(), new Delta(Handle.BC, AffineTransform.getRotateInstance(Math.atan2(succ.getY() - curr.getY(), succ.getX() - curr.getX())+Math.toRadians(90))), null);
     217                                                                }
     218                                                                if (space > 0) gap = !gap;
     219                                                                curr = succ;
     220                                        len = gap ? (psize * space) : (--scount == 0) ? ssize : psize;
     221                                        if (scount == 0) {
     222                                          symbol = secsymb;
     223                                          scount = ratio;
     224                                        } else {
     225                                          symbol = prisymb;
     226                                        }
     227                                                        }
     228                                                }
     229                                        }
     230                                }
     231                        }
     232                }
     233        }
     234
    157235        public static void lineVector (Feature feature, LineStyle style) {
    158236                if (feature.flag != Fflag.NODE) {
     
    202280        }
    203281       
    204         public static void labelText (Feature feature, String str, Font font, Delta delta) {
     282        public static void labelText (Feature feature, String str, Font font, Color colour, Delta delta) {
    205283                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)));
     284                label.add(new Instr(Prim.TEXT, new Caption(str, font, colour
     285                                , delta)));
    208286                Point2D point = helper.getPoint(findCentroid(feature));
    209287                Symbols.drawSymbol(g2, label, tScale, point.getX(), point.getY(), delta, null);
  • applications/editors/josm/plugins/smed2/src/seamap/Rules.java

    r29202 r29204  
    148148                        AttItem name = feature.atts.get(Att.OBJNAM);
    149149                        if ((zoom >= 10) && (name != null))
    150                                 Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 150), null);
     150                                Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 150), new Color(0x80c480ff), null);
    151151                        break;
    152152                case TSELNE:
     
    170170                        }
    171171                        if ((zoom >= 15) && (name != null))
    172                                 Renderer.labelText(feature, (String) name.val, 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), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -90)));
    173173                        break;
    174174                case MARCUL:
     
    195195                                Renderer.lineVector(feature, new LineStyle(Color.black, 8, new float[] { 25, 25 }, null));
    196196                        if ((zoom >= 12) && (name != null))
    197                                 Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.PLAIN, 100), new Delta(Handle.CC, AffineTransform.getTranslateInstance(0, 0)));
     197                                Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.PLAIN, 100), Color.black, new Delta(Handle.CC, AffineTransform.getTranslateInstance(0, 0)));
    198198                        break;
    199199                case RESARE:
    200200                        if (zoom >= 12) {
    201201                                Renderer.lineSymbols(feature, Areas.Restricted, 1.0, null, 0);
    202                                 if ((CatREA)Renderer.getAttVal(feature, feature.type, 0, Att.CATREA) == CatREA.REA_NWAK)
    203                                         Renderer.symbol(feature, Areas.NoWake, Obj.RESARE, null);
     202//                              if ((CatREA)Renderer.getAttVal(feature, feature.type, 0, Att.CATREA) == CatREA.REA_NWAK)
     203//                                      Renderer.symbol(feature, Areas.NoWake, Obj.RESARE, null);
    204204                        }
    205205                        break;
     
    209209                                Renderer.lineVector(feature, new LineStyle(Color.black, 20, new float[] { 40, 40 }, null));
    210210                                if ((zoom >= 15) && (name != null))
    211                                         Renderer.labelText(feature, (String) name.val, 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), Color.black, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 10)));
    212212                        }
    213213                        break;
  • applications/editors/josm/plugins/smed2/src/smed2/MapImage.java

    r29202 r29204  
    66import java.awt.Rectangle;
    77import java.awt.geom.Point2D;
     8import java.awt.geom.Point2D.Double;
    89
    910import javax.swing.Action;
     
    8687        }
    8788
    88         public Point2D getPoint(Coord coord) {
    89                 return Main.map.mapView.getPoint2D(new LatLon(Math.toDegrees(coord.lat), Math.toDegrees(coord.lon)));
     89        public Point2D.Double getPoint(Coord coord) {
     90                return (Double) Main.map.mapView.getPoint2D(new LatLon(Math.toDegrees(coord.lat), Math.toDegrees(coord.lon)));
    9091        }
    9192}
  • applications/editors/josm/plugins/smed2/src/symbols/Areas.java

    r29198 r29204  
    3535        public static final Symbol LaneArrow = new Symbol();
    3636        static {
     37                LaneArrow.add(new Instr(Prim.BBOX, new Rectangle(-20,-240,40,240)));
    3738                LaneArrow.add(new Instr(Prim.STRK, new BasicStroke(10, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    3839                LaneArrow.add(new Instr(Prim.FILL, new Color(0x80c480ff, true)));
  • applications/editors/josm/plugins/smed2/src/symbols/Notices.java

    r29202 r29204  
    5151        private static final Symbol Sport = new Symbol();
    5252        static {
    53                 Sport.add(new Instr(Prim.TEXT, new Caption("SPORT", new Font("Arial", Font.BOLD, 15), new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)))));
     53                Sport.add(new Instr(Prim.TEXT, new Caption("SPORT", new Font("Arial", Font.BOLD, 15), Color.black, 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 Font("Arial", Font.BOLD, 20), new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)))));
     67                VHF.add(new Instr(Prim.TEXT, new Caption("VHF", new Font("Arial", Font.BOLD, 20), Color.black, 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

    r29202 r29204  
    5757
    5858        public static class Instr {
    59                 Prim type;
    60                 Object params;
     59                public Prim type;
     60                public Object params;
    6161
    6262                public Instr(Prim itype, Object iparams) {
     
    6767
    6868        public static class Delta {
    69                 Handle h;
    70                 AffineTransform t;
     69                public Handle h;
     70                public AffineTransform t;
    7171
    7272                public Delta(Handle ih, AffineTransform it) {
     
    7777
    7878        public static class Scheme {
    79                 ArrayList<ColPAT> pat;
    80                 ArrayList<ColCOL> col;
     79                public ArrayList<ColPAT> pat;
     80                public ArrayList<ColCOL> col;
    8181
    8282                public Scheme(ArrayList<ColPAT> ipat, ArrayList<ColCOL> icol) {
     
    8787
    8888        public static class Caption {
    89                 String str;
    90                 Font font;
    91                 Delta dd;
    92 
    93                 public Caption(String istr, Font ifont, Delta idd) {
    94                         str = istr;
     89                public String string;
     90                public Font font;
     91                public Color colour;
     92                public Delta dd;
     93
     94                public Caption(String istr, Font ifont, Color icolour, Delta idd) {
     95                        string = istr;
    9596                        font = ifont;
     97                        colour = icolour;
    9698                        dd = idd;
    9799                }
     
    287289                                case TEXT:
    288290                                        Caption c = (Caption) item.params;
    289                                         TextLayout layout = new TextLayout(c.str, c.font, g2.getFontRenderContext());
     291                                        g2.setPaint(c.colour);
     292                                        TextLayout layout = new TextLayout(c.string, c.font, g2.getFontRenderContext());
    290293                                        Rectangle2D bb = layout.getBounds();
    291294                                        dx = 0;
Note: See TracChangeset for help on using the changeset viewer.