Ignore:
Timestamp:
2016-06-24T03:48:12+02:00 (9 years ago)
Author:
donvip
Message:

checkstyle

Location:
applications/editors/josm/plugins/seachart/src/symbols
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/seachart/src/symbols/Areas.java

    r32101 r32394  
    1010package symbols;
    1111
    12 import java.awt.*;
    13 import java.awt.geom.*;
    14 import java.awt.image.*;
    15 
    16 import symbols.Symbols.*;
     12import java.awt.BasicStroke;
     13import java.awt.Color;
     14import java.awt.Graphics2D;
     15import java.awt.geom.AffineTransform;
     16import java.awt.geom.Ellipse2D;
     17import java.awt.geom.Line2D;
     18import java.awt.geom.Path2D;
     19import java.awt.geom.Rectangle2D;
     20import java.awt.image.BufferedImage;
     21
     22import symbols.Symbols.Delta;
     23import symbols.Symbols.Form;
     24import symbols.Symbols.Handle;
     25import symbols.Symbols.Instr;
     26import symbols.Symbols.Symbol;
    1727
    1828public class Areas {
    19         public static final Symbol Plane = new Symbol();
    20         static {
    21                 Plane.add(new Instr(Form.BBOX, new Rectangle2D.Double(-60,-60,120,120)));
    22                 Path2D.Double p = new Path2D.Double(); p.moveTo(40,20); p.lineTo(50,10); p.lineTo(27.0,13.3); p.lineTo(23.7,6.8); p.lineTo(40.0,5.0); p.curveTo(55,4,55,-9,40,-10);
    23                 p.quadTo(31,-11,30,-15); p.lineTo(-30,2); p.quadTo(-35,-12,-45,-15); p.quadTo(-56,-3,-50,15); p.lineTo(18.4,7.3); p.lineTo(21.7,14); p.lineTo(-20,20); p.closePath();
    24                 Plane.add(new Instr(Form.PGON, p));
    25         }
    26         public static final Symbol Cable = new Symbol();
    27         static {
    28                 Cable.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
    29                 Cable.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    30                 Cable.add(new Instr(Form.FILL, new Color(0xc480ff)));
    31                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,0); p.curveTo(-13,-13,-13,-17,0,-30); p.curveTo(13,-43,13,-47,0,-60);
    32                 Cable.add(new Instr(Form.PLIN, p));
    33         }
    34         public static final Symbol CableDot = new Symbol();
    35         static {
    36                 CableDot.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
    37                 CableDot.add(new Instr(Form.RSHP, new Ellipse2D.Double(-10,-40,20,20)));
    38         }
    39         public static final Symbol CableDash = new Symbol();
    40         static {
    41                 CableDash.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
    42                 CableDash.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    43                 CableDash.add(new Instr(Form.LINE, new Line2D.Double(0,-15,0,-45)));
    44         }
    45         public static final Symbol CableFlash = new Symbol();
    46         static {
    47                 CableFlash.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
    48                 Path2D.Double p = new Path2D.Double(); p.moveTo(-30,-25); p.lineTo(-10,-40); p.lineTo(10,-26); p.lineTo(30,-35); p.lineTo(10,-20); p.lineTo(-10,-34); p.closePath();
    49                 CableFlash.add(new Instr(Form.PGON, p));
    50         }
    51         public static final Symbol LaneArrow = new Symbol();
    52         static {
    53                 LaneArrow.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-240,40,240)));
    54                 LaneArrow.add(new Instr(Form.STRK, new BasicStroke(10, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    55                 LaneArrow.add(new Instr(Form.FILL, Symbols.Mtss));
    56                 Path2D.Double p = new Path2D.Double(); p.moveTo(15,0); p.lineTo(15,-195); p.lineTo(40,-195);
    57                 p.lineTo(0,-240); p.lineTo(-40,-195); p.lineTo(-15,-195); p.lineTo(-15,0); p.closePath();
    58                 LaneArrow.add(new Instr(Form.PLIN, p));
    59         }
    60         public static final Symbol LineAnchor = new Symbol();
    61         static {
    62                 LineAnchor.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,90)));
    63                 LineAnchor.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.5, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(-90.0))))));
    64         }
    65         public static final Symbol LinePlane = new Symbol();
    66         static {
    67                 LinePlane.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,90)));
    68                 LinePlane.add(new Instr(Form.FILL, new Color(0xc480ff)));
    69                 LinePlane.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Areas.Plane, 0.5, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(-90.0))))));
    70         }
    71         public static final Symbol MarineFarm = new Symbol();
    72         static {
    73                 MarineFarm.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    74                 Path2D.Double p = new Path2D.Double(); p.moveTo(-23,12); p.lineTo(-23,23); p.lineTo(23,23); p.lineTo(23,12); p.moveTo(-8,15); p.lineTo(-8,23); p.moveTo(8,15); p.lineTo(8,23);
    75                 p.moveTo(-23,-12); p.lineTo(-23,-23); p.lineTo(23,-23); p.lineTo(23,-12); p.moveTo(-8,-15); p.lineTo(-8,-23); p.moveTo(8,-15); p.lineTo(8,-23);
    76                 p.moveTo(-21,8); p.quadTo(-1,-14,21,0); p.quadTo(-1,14,-21,-8); p.moveTo(7,6); p.quadTo(2,0,7,-6);
    77                 MarineFarm.add(new Instr(Form.PLIN, p));
    78                 MarineFarm.add(new Instr(Form.RSHP, new Ellipse2D.Double(9,-2,4,4)));
    79         }
    80         public static final Symbol NoWake = new Symbol();
    81         static {
    82                 NoWake.add(new Instr(Form.STRK, new BasicStroke(12, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    83                 NoWake.add(new Instr(Form.FILL, new Color(0xa30075)));
    84                 Path2D.Double p = new Path2D.Double(); p.moveTo(-60,20); p.curveTo(-28,20,-32,0,0,0); p.curveTo(32,0,28,20,60,20); p.moveTo(-60,0); p.curveTo(-28,0,-32,-20,0,-20); p.curveTo(32,-20,28,0,60,0);
    85                 NoWake.add(new Instr(Form.PLIN, p));
    86                 NoWake.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    87                 NoWake.add(new Instr(Form.LINE, new Line2D.Double(-60,60,60,-60)));
    88                 NoWake.add(new Instr(Form.LINE, new Line2D.Double(-60,-60,60,60)));
    89         }
    90         public static final Symbol Pipeline = new Symbol();
    91         static {
    92                 Pipeline.add(new Instr(Form.BBOX, new Rectangle2D.Double(-15,-60,30,60)));
    93                 Pipeline.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    94                 Pipeline.add(new Instr(Form.FILL, new Color(0xc480ff)));
    95                 Pipeline.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-50)));
    96                 Pipeline.add(new Instr(Form.RSHP, new Ellipse2D.Double(-10,-60,20,20)));
    97         }
    98         public static final Symbol Restricted = new Symbol();
    99         static {
    100                 Restricted.add(new Instr(Form.BBOX, new Rectangle2D.Double(-15,-30,30,30)));
    101                 Restricted.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    102                 Restricted.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-30)));
    103                 Restricted.add(new Instr(Form.LINE, new Line2D.Double(0,-15,17,-15)));
    104         }
    105         public static final Symbol Rock = new Symbol();
    106         static {
    107                 Rock.add(new Instr(Form.FILL, new Color(0x80c0ff)));
    108                 Rock.add(new Instr(Form.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
    109                 Rock.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
    110                 Rock.add(new Instr(Form.FILL, Color.black));
    111                 Rock.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
    112                 Rock.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    113                 Rock.add(new Instr(Form.LINE, new Line2D.Double(-20,0,20,0)));
    114                 Rock.add(new Instr(Form.LINE, new Line2D.Double(0,-20,0,20)));
    115         }
    116         public static final Symbol RockA = new Symbol();
    117         static {
    118                 RockA.add(new Instr(Form.FILL, new Color(0x80c0ff)));
    119                 RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
    120                 RockA.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
    121                 RockA.add(new Instr(Form.FILL, Color.black));
    122                 RockA.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
    123                 RockA.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    124                 RockA.add(new Instr(Form.LINE, new Line2D.Double(-20,0,20,0)));
    125                 RockA.add(new Instr(Form.LINE, new Line2D.Double(0,-20,0,20)));
    126                 RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(-17,-17,8,8)));
    127                 RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(-17,9,8,8)));
    128                 RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(9,-17,8,8)));
    129                 RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(9,9,8,8)));
    130         }
    131         public static final Symbol RockC = new Symbol();
    132         static {
    133                 RockC.add(new Instr(Form.FILL, new Color(0x80c0ff)));
    134                 RockC.add(new Instr(Form.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
    135                 RockC.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
    136                 RockC.add(new Instr(Form.FILL, Color.black));
    137                 RockC.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
    138                 RockC.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    139                 RockC.add(new Instr(Form.LINE, new Line2D.Double(-20,0,20,0)));
    140                 RockC.add(new Instr(Form.LINE, new Line2D.Double(-10,17.3,10,-17.3)));
    141                 RockC.add(new Instr(Form.LINE, new Line2D.Double(10,17.3,-10,-17.3)));
    142         }
    143         public static final Symbol Seaplane = new Symbol();
    144         static {
    145                 Seaplane.add(new Instr(Form.BBOX, new Rectangle2D.Double(-60,-60,120,120)));
    146                 Seaplane.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    147                 Seaplane.add(new Instr(Form.ELPS, new Ellipse2D.Double(-58,-58,116,116)));
    148                 Seaplane.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Areas.Plane, 1.0, 0, 0, null, null)));
    149         }
    150         public static final Symbol WindFarm = new Symbol();
    151         static {
    152                 WindFarm.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    153                 WindFarm.add(new Instr(Form.ELPS, new Ellipse2D.Double(-100,-100,200,200)));
    154                 WindFarm.add(new Instr(Form.LINE, new Line2D.Double(-35,50,35,50)));
    155                 WindFarm.add(new Instr(Form.LINE, new Line2D.Double(0,50,0,-27.5)));
    156                 WindFarm.add(new Instr(Form.LINE, new Line2D.Double(0,-27.5,30,-27.5)));
    157                 WindFarm.add(new Instr(Form.LINE, new Line2D.Double(0,-27.5,-13.8,-3.8)));
    158                 WindFarm.add(new Instr(Form.LINE, new Line2D.Double(0,-27.5,-13.8,-53.6)));
    159         }
    160         public static final Symbol WreckD = new Symbol();
    161         static {
    162                 WreckD.add(new Instr(Form.FILL, new Color(0x80c0ff)));
    163                 WreckD.add(new Instr(Form.RSHP, new Ellipse2D.Double(-50,-40,100,80)));
    164                 WreckD.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
    165                 WreckD.add(new Instr(Form.FILL, Color.black));
    166                 WreckD.add(new Instr(Form.ELPS, new Ellipse2D.Double(-50,-40,100,80)));
    167                 WreckD.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    168                 WreckD.add(new Instr(Form.LINE, new Line2D.Double(-40,0,40,0)));
    169                 WreckD.add(new Instr(Form.LINE, new Line2D.Double(0,-30,0,30)));
    170                 WreckD.add(new Instr(Form.LINE, new Line2D.Double(-20,-15,-20,15)));
    171                 WreckD.add(new Instr(Form.LINE, new Line2D.Double(20,-15,20,15)));
    172         }
    173         public static final Symbol WreckND = new Symbol();
    174         static {
    175                 WreckND.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    176                 WreckND.add(new Instr(Form.LINE, new Line2D.Double(-40,0,40,0)));
    177                 WreckND.add(new Instr(Form.LINE, new Line2D.Double(0,-30,0,30)));
    178                 WreckND.add(new Instr(Form.LINE, new Line2D.Double(-20,-15,-20,15)));
    179                 WreckND.add(new Instr(Form.LINE, new Line2D.Double(20,-15,20,15)));
    180         }
    181         public static final Symbol WreckS = new Symbol();
    182         static {
    183                 WreckS.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    184                 WreckS.add(new Instr(Form.ELPS, new Ellipse2D.Double(-6,-6,12,12)));
    185                 WreckS.add(new Instr(Form.LINE, new Line2D.Double(-40,0,-6,0)));
    186                 WreckS.add(new Instr(Form.LINE, new Line2D.Double(40,0,6,0)));
    187                 Path2D.Double p = new Path2D.Double(); p.moveTo(-30,0); p.lineTo(-40,-25); p.lineTo(-0.3,-12.6); p.lineTo(13.7,-37.7); p.lineTo(16.3,-36.3);
    188                 p.lineTo(2.7,-11.6); p.lineTo(37.5,0); p.lineTo(6,0); p.curveTo(5.6,-8,-5.6,-8,-6,0); p.closePath();
    189                 WreckS.add(new Instr(Form.PGON, p));
    190         }
    191         public static final BufferedImage Sandwaves = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
    192         static {
    193                 Graphics2D g2 = Sandwaves.createGraphics();
    194                 g2.setStroke(new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
    195                 g2.setBackground(new Color(0, true));
    196                 g2.clearRect(0,  0, 100, 100);
    197                 g2.setPaint(new Color(0xffd400));
    198                 Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,34.5); p.lineTo(03.3,30.8); p.lineTo(09.9,19.3); p.lineTo(13.2,16.0); p.lineTo(16.5,16.1); p.lineTo(18.2,19.5);
    199                 p.lineTo(19.9,25.0); p.lineTo(21.6,30.3); p.lineTo(23.3,33.4); p.lineTo(25.0,33.3); p.lineTo(28.3,30.1); p.lineTo(31.6,25.0); p.lineTo(34.9,20.1); p.lineTo(38.2,17.2);
    200                 p.lineTo(41.5,17.3); p.lineTo(43.2,20.3); p.lineTo(44.9,25); p.lineTo(46.6,29.6); p.lineTo(48.3,32.2); p.lineTo(50.0,32.1);
    201                 p.moveTo(50.0,84.5); p.lineTo(53.3,80.8); p.lineTo(56.6,75.0); p.lineTo(59.9,69.3); p.lineTo(63.2,66.0); p.lineTo(66.5,66.1); p.lineTo(68.2,69.5); p.lineTo(69.9,75.0);
    202                 p.lineTo(71.6,80.3); p.lineTo(73.3,83.4); p.lineTo(75.0,83.3); p.lineTo(78.3,80.1); p.lineTo(81.6,75.0); p.lineTo(84.9,70.1); p.lineTo(88.2,67.2); p.lineTo(91.5,67.3);
    203                 p.lineTo(93.2,70.3); p.lineTo(94.9,75.0); p.lineTo(96.6,79.6); p.lineTo(98.3,82.2); p.lineTo(100.0,82.1);
    204                 g2.draw(p);
    205         }
    206         public static final Symbol KelpS = new Symbol();
    207         static {
    208                 KelpS.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    209                 Path2D.Double p = new Path2D.Double(); p.moveTo(-60,0); p.curveTo(-20,-20,-24,40,24,20); p.moveTo(-60,0); p.quadTo(-48,20,-32,12);
    210                 p.moveTo(-36,-4); p.quadTo(-24,-24,-4,-16); p.quadTo(8,-32,20,-24); p.moveTo(-4,-16); p.quadTo(8,0,20,-8);
    211                 p.moveTo(-8,20); p.quadTo(12,0,36,8); p.quadTo(48,24,60,16); p.moveTo(36,8); p.quadTo(48,-8,60,0);
    212                 KelpS.add(new Instr(Form.PLIN, p));
    213         }
    214         public static final BufferedImage KelpA = new BufferedImage(240, 240, BufferedImage.TYPE_INT_ARGB);
    215         static {
    216                 Graphics2D g2 = KelpA.createGraphics();
    217                 g2.setStroke(new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
    218                 g2.setBackground(new Color(0, true));
    219                 g2.clearRect(0,  0, 240, 240);
    220                 g2.setPaint(Color.black);
    221                 Path2D.Double p = new Path2D.Double();
    222                         p.moveTo(0,60); p.curveTo(40,40,44,100,84,80); p.moveTo(0,60); p.quadTo(12,80,28,72); p.moveTo(24,56); p.quadTo(36,36,56,44); p.quadTo(68,28,80,36);
    223       p.moveTo(56,44); p.quadTo(68,60,80,52); p.moveTo(52,76); p.quadTo(72,60,96,68); p.quadTo(108,84,120,76); p.moveTo(96,68); p.quadTo(108,52,120,60);
    224       p.moveTo(120,180); p.curveTo(160,160,164,220,204,200); p.moveTo(120,180); p.quadTo(132,200,148,192); p.moveTo(144,176); p.quadTo(156,156,176,164); p.quadTo(188,148,200,156);
    225       p.moveTo(176,164); p.quadTo(188,180,200,172); p.moveTo(172,196); p.quadTo(192,180,216,188); p.quadTo(228,204,240,196); p.moveTo(216,188); p.quadTo(228,172,240,180);
    226                 g2.draw(p);
    227         }
     29    // CHECKSTYLE.OFF: LineLength
     30    public static final Symbol Plane = new Symbol();
     31    static {
     32        Plane.add(new Instr(Form.BBOX, new Rectangle2D.Double(-60, -60, 120, 120)));
     33        Path2D.Double p = new Path2D.Double(); p.moveTo(40, 20); p.lineTo(50, 10); p.lineTo(27.0, 13.3); p.lineTo(23.7, 6.8); p.lineTo(40.0, 5.0); p.curveTo(55, 4, 55, -9, 40, -10);
     34        p.quadTo(31, -11, 30, -15); p.lineTo(-30, 2); p.quadTo(-35, -12, -45, -15); p.quadTo(-56, -3, -50, 15); p.lineTo(18.4, 7.3); p.lineTo(21.7, 14); p.lineTo(-20, 20); p.closePath();
     35        Plane.add(new Instr(Form.PGON, p));
     36    }
     37
     38    public static final Symbol Cable = new Symbol();
     39    static {
     40        Cable.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -60, 60, 60)));
     41        Cable.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     42        Cable.add(new Instr(Form.FILL, new Color(0xc480ff)));
     43        Path2D.Double p = new Path2D.Double(); p.moveTo(0, 0); p.curveTo(-13, -13, -13, -17, 0, -30); p.curveTo(13, -43, 13, -47, 0, -60);
     44        Cable.add(new Instr(Form.PLIN, p));
     45    }
     46
     47    public static final Symbol CableDot = new Symbol();
     48    static {
     49        CableDot.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -60, 60, 60)));
     50        CableDot.add(new Instr(Form.RSHP, new Ellipse2D.Double(-10, -40, 20, 20)));
     51    }
     52
     53    public static final Symbol CableDash = new Symbol();
     54    static {
     55        CableDash.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -60, 60, 60)));
     56        CableDash.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     57        CableDash.add(new Instr(Form.LINE, new Line2D.Double(0, -15, 0, -45)));
     58    }
     59
     60    public static final Symbol CableFlash = new Symbol();
     61    static {
     62        CableFlash.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -60, 60, 60)));
     63        Path2D.Double p = new Path2D.Double(); p.moveTo(-30, -25); p.lineTo(-10, -40); p.lineTo(10, -26); p.lineTo(30, -35); p.lineTo(10, -20); p.lineTo(-10, -34); p.closePath();
     64        CableFlash.add(new Instr(Form.PGON, p));
     65    }
     66
     67    public static final Symbol LaneArrow = new Symbol();
     68    static {
     69        LaneArrow.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -240, 40, 240)));
     70        LaneArrow.add(new Instr(Form.STRK, new BasicStroke(10, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     71        LaneArrow.add(new Instr(Form.FILL, Symbols.Mtss));
     72        Path2D.Double p = new Path2D.Double(); p.moveTo(15, 0); p.lineTo(15, -195); p.lineTo(40, -195);
     73        p.lineTo(0, -240); p.lineTo(-40, -195); p.lineTo(-15, -195); p.lineTo(-15, 0); p.closePath();
     74        LaneArrow.add(new Instr(Form.PLIN, p));
     75    }
     76
     77    public static final Symbol LineAnchor = new Symbol();
     78    static {
     79        LineAnchor.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -60, 60, 90)));
     80        LineAnchor.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.5, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(-90.0))))));
     81    }
     82
     83    public static final Symbol LinePlane = new Symbol();
     84    static {
     85        LinePlane.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -60, 60, 90)));
     86        LinePlane.add(new Instr(Form.FILL, new Color(0xc480ff)));
     87        LinePlane.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Areas.Plane, 0.5, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(-90.0))))));
     88    }
     89
     90    public static final Symbol MarineFarm = new Symbol();
     91    static {
     92        MarineFarm.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     93        Path2D.Double p = new Path2D.Double(); p.moveTo(-23, 12); p.lineTo(-23, 23); p.lineTo(23, 23); p.lineTo(23, 12); p.moveTo(-8, 15); p.lineTo(-8, 23); p.moveTo(8, 15); p.lineTo(8, 23);
     94        p.moveTo(-23, -12); p.lineTo(-23, -23); p.lineTo(23, -23); p.lineTo(23, -12); p.moveTo(-8, -15); p.lineTo(-8, -23); p.moveTo(8, -15); p.lineTo(8, -23);
     95        p.moveTo(-21, 8); p.quadTo(-1, -14, 21, 0); p.quadTo(-1, 14, -21, -8); p.moveTo(7, 6); p.quadTo(2, 0, 7, -6);
     96        MarineFarm.add(new Instr(Form.PLIN, p));
     97        MarineFarm.add(new Instr(Form.RSHP, new Ellipse2D.Double(9, -2, 4, 4)));
     98    }
     99
     100    public static final Symbol NoWake = new Symbol();
     101    static {
     102        NoWake.add(new Instr(Form.STRK, new BasicStroke(12, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     103        NoWake.add(new Instr(Form.FILL, new Color(0xa30075)));
     104        Path2D.Double p = new Path2D.Double(); p.moveTo(-60, 20); p.curveTo(-28, 20, -32, 0, 0, 0); p.curveTo(32, 0, 28, 20, 60, 20); p.moveTo(-60, 0); p.curveTo(-28, 0, -32, -20, 0, -20); p.curveTo(32, -20, 28, 0, 60, 0);
     105        NoWake.add(new Instr(Form.PLIN, p));
     106        NoWake.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     107        NoWake.add(new Instr(Form.LINE, new Line2D.Double(-60, 60, 60, -60)));
     108        NoWake.add(new Instr(Form.LINE, new Line2D.Double(-60, -60, 60, 60)));
     109    }
     110
     111    public static final Symbol Pipeline = new Symbol();
     112    static {
     113        Pipeline.add(new Instr(Form.BBOX, new Rectangle2D.Double(-15, -60, 30, 60)));
     114        Pipeline.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     115        Pipeline.add(new Instr(Form.FILL, new Color(0xc480ff)));
     116        Pipeline.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -50)));
     117        Pipeline.add(new Instr(Form.RSHP, new Ellipse2D.Double(-10, -60, 20, 20)));
     118    }
     119
     120    public static final Symbol Restricted = new Symbol();
     121    static {
     122        Restricted.add(new Instr(Form.BBOX, new Rectangle2D.Double(-15, -30, 30, 30)));
     123        Restricted.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     124        Restricted.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -30)));
     125        Restricted.add(new Instr(Form.LINE, new Line2D.Double(0, -15, 17, -15)));
     126    }
     127
     128    public static final Symbol Rock = new Symbol();
     129    static {
     130        Rock.add(new Instr(Form.FILL, new Color(0x80c0ff)));
     131        Rock.add(new Instr(Form.RSHP, new Ellipse2D.Double(-30, -30, 60, 60)));
     132        Rock.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5, 5}, 0)));
     133        Rock.add(new Instr(Form.FILL, Color.black));
     134        Rock.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30, -30, 60, 60)));
     135        Rock.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     136        Rock.add(new Instr(Form.LINE, new Line2D.Double(-20, 0, 20, 0)));
     137        Rock.add(new Instr(Form.LINE, new Line2D.Double(0, -20, 0, 20)));
     138    }
     139
     140    public static final Symbol RockA = new Symbol();
     141    static {
     142        RockA.add(new Instr(Form.FILL, new Color(0x80c0ff)));
     143        RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(-30, -30, 60, 60)));
     144        RockA.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5, 5}, 0)));
     145        RockA.add(new Instr(Form.FILL, Color.black));
     146        RockA.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30, -30, 60, 60)));
     147        RockA.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     148        RockA.add(new Instr(Form.LINE, new Line2D.Double(-20, 0, 20, 0)));
     149        RockA.add(new Instr(Form.LINE, new Line2D.Double(0, -20, 0, 20)));
     150        RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(-17, -17, 8, 8)));
     151        RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(-17, 9, 8, 8)));
     152        RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(9, -17, 8, 8)));
     153        RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(9, 9, 8, 8)));
     154    }
     155
     156    public static final Symbol RockC = new Symbol();
     157    static {
     158        RockC.add(new Instr(Form.FILL, new Color(0x80c0ff)));
     159        RockC.add(new Instr(Form.RSHP, new Ellipse2D.Double(-30, -30, 60, 60)));
     160        RockC.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5, 5}, 0)));
     161        RockC.add(new Instr(Form.FILL, Color.black));
     162        RockC.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30, -30, 60, 60)));
     163        RockC.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     164        RockC.add(new Instr(Form.LINE, new Line2D.Double(-20, 0, 20, 0)));
     165        RockC.add(new Instr(Form.LINE, new Line2D.Double(-10, 17.3, 10, -17.3)));
     166        RockC.add(new Instr(Form.LINE, new Line2D.Double(10, 17.3, -10, -17.3)));
     167    }
     168
     169    public static final Symbol Seaplane = new Symbol();
     170    static {
     171        Seaplane.add(new Instr(Form.BBOX, new Rectangle2D.Double(-60, -60, 120, 120)));
     172        Seaplane.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     173        Seaplane.add(new Instr(Form.ELPS, new Ellipse2D.Double(-58, -58, 116, 116)));
     174        Seaplane.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Areas.Plane, 1.0, 0, 0, null, null)));
     175    }
     176
     177    public static final Symbol WindFarm = new Symbol();
     178    static {
     179        WindFarm.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     180        WindFarm.add(new Instr(Form.ELPS, new Ellipse2D.Double(-100, -100, 200, 200)));
     181        WindFarm.add(new Instr(Form.LINE, new Line2D.Double(-35, 50, 35, 50)));
     182        WindFarm.add(new Instr(Form.LINE, new Line2D.Double(0, 50, 0, -27.5)));
     183        WindFarm.add(new Instr(Form.LINE, new Line2D.Double(0, -27.5, 30, -27.5)));
     184        WindFarm.add(new Instr(Form.LINE, new Line2D.Double(0, -27.5, -13.8, -3.8)));
     185        WindFarm.add(new Instr(Form.LINE, new Line2D.Double(0, -27.5, -13.8, -53.6)));
     186    }
     187
     188    public static final Symbol WreckD = new Symbol();
     189    static {
     190        WreckD.add(new Instr(Form.FILL, new Color(0x80c0ff)));
     191        WreckD.add(new Instr(Form.RSHP, new Ellipse2D.Double(-50, -40, 100, 80)));
     192        WreckD.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5, 5}, 0)));
     193        WreckD.add(new Instr(Form.FILL, Color.black));
     194        WreckD.add(new Instr(Form.ELPS, new Ellipse2D.Double(-50, -40, 100, 80)));
     195        WreckD.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     196        WreckD.add(new Instr(Form.LINE, new Line2D.Double(-40, 0, 40, 0)));
     197        WreckD.add(new Instr(Form.LINE, new Line2D.Double(0, -30, 0, 30)));
     198        WreckD.add(new Instr(Form.LINE, new Line2D.Double(-20, -15, -20, 15)));
     199        WreckD.add(new Instr(Form.LINE, new Line2D.Double(20, -15, 20, 15)));
     200    }
     201
     202    public static final Symbol WreckND = new Symbol();
     203    static {
     204        WreckND.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     205        WreckND.add(new Instr(Form.LINE, new Line2D.Double(-40, 0, 40, 0)));
     206        WreckND.add(new Instr(Form.LINE, new Line2D.Double(0, -30, 0, 30)));
     207        WreckND.add(new Instr(Form.LINE, new Line2D.Double(-20, -15, -20, 15)));
     208        WreckND.add(new Instr(Form.LINE, new Line2D.Double(20, -15, 20, 15)));
     209    }
     210
     211    public static final Symbol WreckS = new Symbol();
     212    static {
     213        WreckS.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     214        WreckS.add(new Instr(Form.ELPS, new Ellipse2D.Double(-6, -6, 12, 12)));
     215        WreckS.add(new Instr(Form.LINE, new Line2D.Double(-40, 0, -6, 0)));
     216        WreckS.add(new Instr(Form.LINE, new Line2D.Double(40, 0, 6, 0)));
     217        Path2D.Double p = new Path2D.Double(); p.moveTo(-30, 0); p.lineTo(-40, -25); p.lineTo(-0.3, -12.6); p.lineTo(13.7, -37.7); p.lineTo(16.3, -36.3);
     218        p.lineTo(2.7, -11.6); p.lineTo(37.5, 0); p.lineTo(6, 0); p.curveTo(5.6, -8, -5.6, -8, -6, 0); p.closePath();
     219        WreckS.add(new Instr(Form.PGON, p));
     220    }
     221
     222    public static final BufferedImage Sandwaves = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
     223    static {
     224        Graphics2D g2 = Sandwaves.createGraphics();
     225        g2.setStroke(new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
     226        g2.setBackground(new Color(0, true));
     227        g2.clearRect(0, 0, 100, 100);
     228        g2.setPaint(new Color(0xffd400));
     229        Path2D.Double p = new Path2D.Double(); p.moveTo(0.0, 34.5); p.lineTo(03.3, 30.8); p.lineTo(09.9, 19.3); p.lineTo(13.2, 16.0); p.lineTo(16.5, 16.1); p.lineTo(18.2, 19.5);
     230        p.lineTo(19.9, 25.0); p.lineTo(21.6, 30.3); p.lineTo(23.3, 33.4); p.lineTo(25.0, 33.3); p.lineTo(28.3, 30.1); p.lineTo(31.6, 25.0); p.lineTo(34.9, 20.1); p.lineTo(38.2, 17.2);
     231        p.lineTo(41.5, 17.3); p.lineTo(43.2, 20.3); p.lineTo(44.9, 25); p.lineTo(46.6, 29.6); p.lineTo(48.3, 32.2); p.lineTo(50.0, 32.1);
     232        p.moveTo(50.0, 84.5); p.lineTo(53.3, 80.8); p.lineTo(56.6, 75.0); p.lineTo(59.9, 69.3); p.lineTo(63.2, 66.0); p.lineTo(66.5, 66.1); p.lineTo(68.2, 69.5); p.lineTo(69.9, 75.0);
     233        p.lineTo(71.6, 80.3); p.lineTo(73.3, 83.4); p.lineTo(75.0, 83.3); p.lineTo(78.3, 80.1); p.lineTo(81.6, 75.0); p.lineTo(84.9, 70.1); p.lineTo(88.2, 67.2); p.lineTo(91.5, 67.3);
     234        p.lineTo(93.2, 70.3); p.lineTo(94.9, 75.0); p.lineTo(96.6, 79.6); p.lineTo(98.3, 82.2); p.lineTo(100.0, 82.1);
     235        g2.draw(p);
     236    }
     237
     238    public static final Symbol KelpS = new Symbol();
     239    static {
     240        KelpS.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     241        Path2D.Double p = new Path2D.Double(); p.moveTo(-60, 0); p.curveTo(-20, -20, -24, 40, 24, 20); p.moveTo(-60, 0); p.quadTo(-48, 20, -32, 12);
     242        p.moveTo(-36, -4); p.quadTo(-24, -24, -4, -16); p.quadTo(8, -32, 20, -24); p.moveTo(-4, -16); p.quadTo(8, 0, 20, -8);
     243        p.moveTo(-8, 20); p.quadTo(12, 0, 36, 8); p.quadTo(48, 24, 60, 16); p.moveTo(36, 8); p.quadTo(48, -8, 60, 0);
     244        KelpS.add(new Instr(Form.PLIN, p));
     245    }
     246
     247    public static final BufferedImage KelpA = new BufferedImage(240, 240, BufferedImage.TYPE_INT_ARGB);
     248    static {
     249        Graphics2D g2 = KelpA.createGraphics();
     250        g2.setStroke(new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
     251        g2.setBackground(new Color(0, true));
     252        g2.clearRect(0, 0, 240, 240);
     253        g2.setPaint(Color.black);
     254        Path2D.Double p = new Path2D.Double();
     255        p.moveTo(0, 60); p.curveTo(40, 40, 44, 100, 84, 80); p.moveTo(0, 60); p.quadTo(12, 80, 28, 72); p.moveTo(24, 56); p.quadTo(36, 36, 56, 44); p.quadTo(68, 28, 80, 36);
     256        p.moveTo(56, 44); p.quadTo(68, 60, 80, 52); p.moveTo(52, 76); p.quadTo(72, 60, 96, 68); p.quadTo(108, 84, 120, 76); p.moveTo(96, 68); p.quadTo(108, 52, 120, 60);
     257        p.moveTo(120, 180); p.curveTo(160, 160, 164, 220, 204, 200); p.moveTo(120, 180); p.quadTo(132, 200, 148, 192); p.moveTo(144, 176); p.quadTo(156, 156, 176, 164); p.quadTo(188, 148, 200, 156);
     258        p.moveTo(176, 164); p.quadTo(188, 180, 200, 172); p.moveTo(172, 196); p.quadTo(192, 180, 216, 188); p.quadTo(228, 204, 240, 196); p.moveTo(216, 188); p.quadTo(228, 172, 240, 180);
     259        g2.draw(p);
     260    }
    228261}
  • applications/editors/josm/plugins/seachart/src/symbols/Beacons.java

    r32393 r32394  
    1212import java.awt.BasicStroke;
    1313import java.awt.Color;
    14 import java.awt.geom.*;
     14import java.awt.geom.Arc2D;
     15import java.awt.geom.Ellipse2D;
     16import java.awt.geom.GeneralPath;
     17import java.awt.geom.Line2D;
     18import java.awt.geom.Path2D;
     19import java.awt.geom.Rectangle2D;
    1520import java.util.EnumMap;
    1621
    17 import symbols.Symbols.*;
    18 import s57.S57val.*;
     22import s57.S57val.BcnSHP;
     23import symbols.Symbols.Form;
     24import symbols.Symbols.Instr;
     25import symbols.Symbols.Symbol;
    1926
    2027public class Beacons {
    21        
    22         public static final Symbol Beacon = new Symbol();
    23         static {
    24                 Symbol colours = new Symbol();
    25                 Path2D.Double p = new Path2D.Double(); p.moveTo(-6.0,-8.5); p.lineTo(-6.0,-70.0); p.lineTo(6.0,-70.0); p.lineTo(6.0,-8.5); p.curveTo(6.0,-10.0,-6.0,-10.0,-6.0,-8.5); p.closePath();
    26                 colours.add(new Instr(Form.P1, p));
    27                 p = new Path2D.Double(); p.moveTo(-6.0,-8.5); p.lineTo(-6.0,-40.0); p.lineTo(6.0,-40.0); p.lineTo(6.0,-8.5); p.curveTo(6.0,-10.0,-6.0,-10.0,-6.0,-8.5); p.closePath();
    28     colours.add(new Instr(Form.H2, p));
    29                 p = new Path2D.Double(); p.moveTo(-6.0,-30.0); p.lineTo(-6.0,-50.0); p.lineTo(6.0,-50.0); p.lineTo(6.0,-30.0); p.closePath();
    30     colours.add(new Instr(Form.H3, p));
    31                 p = new Path2D.Double(); p.moveTo(-6.0,-40.0); p.lineTo(-6.0,-55.0); p.lineTo(6.0,-55.0); p.lineTo(6.0,-40.0); p.closePath();
    32     colours.add(new Instr(Form.H4, p));
    33                 p = new Path2D.Double(); p.moveTo(-6.0,-25.0); p.lineTo(-6.0,-40.0); p.lineTo(6.0,-40.0); p.lineTo(6.0,-25.0); p.closePath();
    34     colours.add(new Instr(Form.H5, p));
    35                 p = new Path2D.Double(); p.moveTo(0.0,-70.0); p.lineTo(6.0,-70.0); p.lineTo(6.0,-8.5); p.quadTo(3.0,-9.3,0.0,-10.0); p.closePath();
    36     colours.add(new Instr(Form.V2, p));
    37     Beacon.add(new Instr(Form.COLR, colours));
    38     Beacon.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    39     Beacon.add(new Instr(Form.FILL, Color.black));
    40     Beacon.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    41     Beacon.add(new Instr(Form.LINE, new Line2D.Double(-20,0,-10,0)));
    42     Beacon.add(new Instr(Form.LINE, new Line2D.Double(10,0,20,0)));
    43                 p = new Path2D.Double(); p.moveTo(-6.0,-8.5); p.lineTo(-6.0,-70.0); p.lineTo(6.0,-70.0); p.lineTo(6.0,-8.5);
    44                 Beacon.add(new Instr(Form.PLIN, p));
    45         }
    46         public static final Symbol Cairn = new Symbol();
    47         static {
    48                 Cairn.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    49                 Cairn.add(new Instr(Form.FILL, Color.black));
    50                 Cairn.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    51                 Cairn.add(new Instr(Form.LINE, new Line2D.Double(-40,0,-10,0)));
    52                 Cairn.add(new Instr(Form.LINE, new Line2D.Double(10,0,40,0)));
    53                 Cairn.add(new Instr(Form.ELPS, new Ellipse2D.Double(3,-40,40,40)));
    54                 Cairn.add(new Instr(Form.ELPS, new Ellipse2D.Double(-43,-40,40,40)));
    55                 Cairn.add(new Instr(Form.ELPS, new Ellipse2D.Double(-18,-70,36,36)));
    56         }
    57         public static final Symbol FogSignal = new Symbol();
    58         static {
    59                 FogSignal.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    60                 FogSignal.add(new Instr(Form.FILL, Color.black));
    61                 FogSignal.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    62                 FogSignal.add(new Instr(Form.STRK, new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    63                 FogSignal.add(new Instr(Form.FILL, new Color(0xd400d4)));
    64                 FogSignal.add(new Instr(Form.EARC, new Arc2D.Double(-120.0,-120.0,240.0,240.0,190.0,50.0,Arc2D.OPEN)));
    65                 FogSignal.add(new Instr(Form.EARC, new Arc2D.Double(-92.5,-92.5,185.0,185.0,190.0,50.0,Arc2D.OPEN)));
    66                 FogSignal.add(new Instr(Form.EARC, new Arc2D.Double(-65.0,-65.0,130.0,130.0,190.0,50.0,Arc2D.OPEN)));
    67         }
    68         public static final Symbol LightFlare = new Symbol();
    69         static {
    70                 LightFlare.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-100,40,100)));
    71                 LightFlare.add(new Instr(Form.RSHP, new Ellipse2D.Double(-3,-3,6,6)));
    72                 Path2D.Double p = new Path2D.Double();
    73                 p.moveTo(0.0,-25.0); p.lineTo(15.0,-95.0); p.curveTo(20.0,-123.0,-20.0,-123.0,-15.0,-95.0);
    74                 p.closePath();
    75                 LightFlare.add(new Instr(Form.PGON, p));
    76         }
    77         public static final Symbol LightMajor = new Symbol();
    78         static {
    79                 LightMajor.add(new Instr(Form.FILL, Color.black));
    80                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_NON_ZERO);
    81                 p.moveTo(0.0,-7.0); p.curveTo(-9.3,-6.5,-9.3,6.5,0.0,7.0); p.curveTo(9.3,6.5,9.3,-6.5,0.0,-7.0); p.closePath();
    82                 p.moveTo(0.0,-35.5); p.lineTo(8.0,-11.2); p.lineTo(33.5,-11.2); p.lineTo(12.8,4.0);
    83                 p.lineTo(20.5,28.5); p.lineTo(0.0,13.0); p.lineTo(-20.5,28.5); p.lineTo(-12.8,4.0); p.lineTo(-33.5,-11.2); p.lineTo(-8.0,-11.2); p.closePath();
    84                 LightMajor.add(new Instr(Form.PGON, p));
    85         }
    86         public static final Symbol LightMinor = new Symbol();
    87         static {
    88                 LightMinor.add(new Instr(Form.FILL, Color.black));
    89                 Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-26.5); p.lineTo(6.0,-8.4); p.lineTo(25.1,-8.4); p.lineTo(9.6,3.0);
    90                 p.lineTo(15.4,21.4); p.lineTo(0.0,9.8); p.lineTo(-15.4,21.4); p.lineTo(-9.6,3.0); p.lineTo(-25.1,-8.4); p.lineTo(-6.0,-8.4); p.closePath();
    91                 LightMinor.add(new Instr(Form.PGON, p));
    92         }
    93         public static final Symbol PerchPort = new Symbol();
    94         static {
    95                 PerchPort.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    96                 PerchPort.add(new Instr(Form.FILL, Color.black));
    97                 PerchPort.add(new Instr(Form.LINE, new Line2D.Double(-10,0,10,0)));
    98                 PerchPort.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-40)));
    99                 PerchPort.add(new Instr(Form.LINE, new Line2D.Double(25,-70,0,-40)));
    100                 PerchPort.add(new Instr(Form.LINE, new Line2D.Double(-25,-70,0,-40)));
    101         }
    102         public static final Symbol PerchStarboard = new Symbol();
    103         static {
    104                 PerchStarboard.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    105                 PerchStarboard.add(new Instr(Form.FILL, Color.black));
    106                 PerchStarboard.add(new Instr(Form.LINE, new Line2D.Double(-10,0,10,0)));
    107                 PerchStarboard.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-70)));
    108                 PerchStarboard.add(new Instr(Form.LINE, new Line2D.Double(25,-40,0,-68.7)));
    109                 PerchStarboard.add(new Instr(Form.LINE, new Line2D.Double(-25,-40,0,-68.7)));
    110         }
    111         public static final Symbol RadarStation = new Symbol();
    112         static {
    113                 RadarStation.add(new Instr(Form.STRK, new BasicStroke(2.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    114                 RadarStation.add(new Instr(Form.FILL, new Color(0xd400d4)));
    115                 RadarStation.add(new Instr(Form.ELPS, new Ellipse2D.Double(-125,-125,250,250)));
    116         }
    117         public static final Symbol Stake = new Symbol();
    118         static {
    119                 Stake.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    120                 Stake.add(new Instr(Form.FILL, Color.black));
    121                 Stake.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-70)));
    122                 Symbol colours = new Symbol();
    123                 Path2D.Double p = new Path2D.Double(); p.moveTo(-2.0,0.0); p.lineTo(-2.0,-70.0); p.lineTo(2.0,-70.0); p.lineTo(2.0,0.0); p.closePath();
    124                 colours.add(new Instr(Form.P1, p));
    125                 p = new Path2D.Double(); p.moveTo(-2.0,0.0); p.lineTo(-2.0,-35.0); p.lineTo(2.0,-35.0); p.lineTo(2.0,0.0); p.closePath();
    126                 colours.add(new Instr(Form.H2, p));
    127                 p = new Path2D.Double(); p.moveTo(-2.0,-23.3); p.lineTo(-2.0,-46.7); p.lineTo(2.0,-46.7); p.lineTo(2.0,-23.3); p.closePath();
    128                 colours.add(new Instr(Form.H3, p));
    129                 p = new Path2D.Double(); p.moveTo(-2.0,-35.0); p.lineTo(-2.0,-52.5); p.lineTo(2.0,-52.5); p.lineTo(2.0,-35.0); p.closePath();
    130                 colours.add(new Instr(Form.H4, p));
    131                 p = new Path2D.Double(); p.moveTo(-2.0,-17.5); p.lineTo(-2.0,-35.0); p.lineTo(2.0,-35.0); p.lineTo(2.0,-17.5); p.closePath();
    132                 colours.add(new Instr(Form.H5, p));
    133                 Stake.add(new Instr(Form.COLR, colours));
    134                 Stake.add(new Instr(Form.FILL, Color.black));
    135                 Stake.add(new Instr(Form.LINE, new Line2D.Double(-10,0,10,0)));
    136         }
    137         public static final Symbol Tower = new Symbol();
    138         static {
    139                 Symbol colours = new Symbol();
    140                 Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0,0.0); p.lineTo(-20.0,-70.0); p.lineTo(20.0,-70.0); p.lineTo(25.0,0.0); p.lineTo(10.0,0.0); p.curveTo(10.0,-13.3,-10.0,-13.3,-10.0,0.0); p.closePath();
    141                 colours.add(new Instr(Form.P1, p));
    142                 p = new Path2D.Double(); p.moveTo(-25.0,0.0); p.lineTo(-22.5,-35.0); p.lineTo(22.5,-35.0); p.lineTo(25.0,0.0); p.lineTo(10.0,0.0); p.curveTo(10.0,-13.3,-10.0,-13.3,-10.0,0.0); p.closePath();
    143     colours.add(new Instr(Form.H2, p));
    144                 p = new Path2D.Double(); p.moveTo(-23.3,-23.3); p.lineTo(-21.7,-46.7); p.lineTo(21.7,-46.7); p.lineTo(23.3,-23.3); p.closePath();
    145     colours.add(new Instr(Form.H3, p));
    146                 p = new Path2D.Double(); p.moveTo(-22.5,-35.0); p.lineTo(-21.0,-52.5); p.lineTo(21.0,-52.5); p.lineTo(22.5,-35.0); p.closePath();
    147     colours.add(new Instr(Form.H4, p));
    148                 p = new Path2D.Double(); p.moveTo(-23.6,-17.5); p.lineTo(-22.5,-35.0); p.lineTo(22.5,-35.0); p.lineTo(23.6,-17.5); p.closePath();
    149     colours.add(new Instr(Form.H5, p));
    150                 p = new Path2D.Double(); p.moveTo(0.0,-70.0); p.lineTo(20.0,-70.0); p.lineTo(25.0,0.0); p.lineTo(10.0,0.0); p.quadTo(10.0,-10.0,0.0,-10.0); p.closePath();
    151     colours.add(new Instr(Form.V2, p));
    152     Tower.add(new Instr(Form.COLR, colours));
    153     Tower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    154     Tower.add(new Instr(Form.FILL, Color.black));
    155     Tower.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    156     Tower.add(new Instr(Form.LINE, new Line2D.Double(-35,0,-10,0)));
    157     Tower.add(new Instr(Form.LINE, new Line2D.Double(10,0,35,0)));
    158                 p = new Path2D.Double(); p.moveTo(-25.0,0.0); p.lineTo(-20.0,-70.0); p.lineTo(20.0,-70.0); p.lineTo(25.0,0.0);
    159                 Tower.add(new Instr(Form.PLIN, p));
    160         }
    161         public static final Symbol WithyPort = new Symbol();
    162         static {
    163                 WithyPort.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    164                 WithyPort.add(new Instr(Form.FILL, Color.black));
    165                 WithyPort.add(new Instr(Form.LINE, new Line2D.Double(-10,0,10,0)));
    166                 WithyPort.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-70)));
    167                 WithyPort.add(new Instr(Form.LINE, new Line2D.Double(20,-60,0,-50)));
    168                 WithyPort.add(new Instr(Form.LINE, new Line2D.Double(-20,-60,0,-50)));
    169                 WithyPort.add(new Instr(Form.LINE, new Line2D.Double(30,-35,0,-21)));
    170                 WithyPort.add(new Instr(Form.LINE, new Line2D.Double(-30,-35,0,-21)));
    171         }
    172         public static final Symbol WithyStarboard = new Symbol();
    173         static {
    174                 WithyStarboard.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    175                 WithyStarboard.add(new Instr(Form.FILL, Color.black));
    176                 WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(-10,0,10,0)));
    177                 WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-70)));
    178                 WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(20,-50,0,-60)));
    179                 WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(-20,-50,0,-60)));
    180                 WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(30,-21,0,-35)));
    181                 WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(-30,-21,0,-35)));
    182         }
    183        
    184         public static final EnumMap<BcnSHP, Symbol> Shapes = new EnumMap<>(BcnSHP.class);
    185         static {
    186                 Shapes.put(BcnSHP.BCN_UNKN, Beacons.Beacon); Shapes.put(BcnSHP.BCN_STAK, Beacons.Stake); Shapes.put(BcnSHP.BCN_TOWR, Beacons.Tower);
    187                 Shapes.put(BcnSHP.BCN_LATT, Beacons.Beacon); Shapes.put(BcnSHP.BCN_PILE, Beacons.Beacon); Shapes.put(BcnSHP.BCN_POLE, Beacons.Stake);
    188                 Shapes.put(BcnSHP.BCN_CARN, Beacons.Cairn); Shapes.put(BcnSHP.BCN_BUOY, Beacons.Beacon); Shapes.put(BcnSHP.BCN_POST, Beacons.Stake);
    189                 Shapes.put(BcnSHP.BCN_PRCH, Beacons.Stake);
    190         }
     28    // CHECKSTYLE.OFF: LineLength
     29    public static final Symbol Beacon = new Symbol();
     30    static {
     31        Symbol colours = new Symbol();
     32        Path2D.Double p = new Path2D.Double(); p.moveTo(-6.0, -8.5); p.lineTo(-6.0, -70.0); p.lineTo(6.0, -70.0); p.lineTo(6.0, -8.5); p.curveTo(6.0, -10.0, -6.0, -10.0, -6.0, -8.5); p.closePath();
     33        colours.add(new Instr(Form.P1, p));
     34        p = new Path2D.Double(); p.moveTo(-6.0, -8.5); p.lineTo(-6.0, -40.0); p.lineTo(6.0, -40.0); p.lineTo(6.0, -8.5); p.curveTo(6.0, -10.0, -6.0, -10.0, -6.0, -8.5); p.closePath();
     35        colours.add(new Instr(Form.H2, p));
     36        p = new Path2D.Double(); p.moveTo(-6.0, -30.0); p.lineTo(-6.0, -50.0); p.lineTo(6.0, -50.0); p.lineTo(6.0, -30.0); p.closePath();
     37        colours.add(new Instr(Form.H3, p));
     38        p = new Path2D.Double(); p.moveTo(-6.0, -40.0); p.lineTo(-6.0, -55.0); p.lineTo(6.0, -55.0); p.lineTo(6.0, -40.0); p.closePath();
     39        colours.add(new Instr(Form.H4, p));
     40        p = new Path2D.Double(); p.moveTo(-6.0, -25.0); p.lineTo(-6.0, -40.0); p.lineTo(6.0, -40.0); p.lineTo(6.0, -25.0); p.closePath();
     41        colours.add(new Instr(Form.H5, p));
     42        p = new Path2D.Double(); p.moveTo(0.0, -70.0); p.lineTo(6.0, -70.0); p.lineTo(6.0, -8.5); p.quadTo(3.0, -9.3, 0.0, -10.0); p.closePath();
     43        colours.add(new Instr(Form.V2, p));
     44        Beacon.add(new Instr(Form.COLR, colours));
     45        Beacon.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     46        Beacon.add(new Instr(Form.FILL, Color.black));
     47        Beacon.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     48        Beacon.add(new Instr(Form.LINE, new Line2D.Double(-20, 0, -10, 0)));
     49        Beacon.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 20, 0)));
     50        p = new Path2D.Double(); p.moveTo(-6.0, -8.5); p.lineTo(-6.0, -70.0); p.lineTo(6.0, -70.0); p.lineTo(6.0, -8.5);
     51        Beacon.add(new Instr(Form.PLIN, p));
     52    }
     53
     54    public static final Symbol Cairn = new Symbol();
     55    static {
     56        Cairn.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     57        Cairn.add(new Instr(Form.FILL, Color.black));
     58        Cairn.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     59        Cairn.add(new Instr(Form.LINE, new Line2D.Double(-40, 0, -10, 0)));
     60        Cairn.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 40, 0)));
     61        Cairn.add(new Instr(Form.ELPS, new Ellipse2D.Double(3, -40, 40, 40)));
     62        Cairn.add(new Instr(Form.ELPS, new Ellipse2D.Double(-43, -40, 40, 40)));
     63        Cairn.add(new Instr(Form.ELPS, new Ellipse2D.Double(-18, -70, 36, 36)));
     64    }
     65
     66    public static final Symbol FogSignal = new Symbol();
     67    static {
     68        FogSignal.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     69        FogSignal.add(new Instr(Form.FILL, Color.black));
     70        FogSignal.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     71        FogSignal.add(new Instr(Form.STRK, new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     72        FogSignal.add(new Instr(Form.FILL, new Color(0xd400d4)));
     73        FogSignal.add(new Instr(Form.EARC, new Arc2D.Double(-120.0, -120.0, 240.0, 240.0, 190.0, 50.0, Arc2D.OPEN)));
     74        FogSignal.add(new Instr(Form.EARC, new Arc2D.Double(-92.5, -92.5, 185.0, 185.0, 190.0, 50.0, Arc2D.OPEN)));
     75        FogSignal.add(new Instr(Form.EARC, new Arc2D.Double(-65.0, -65.0, 130.0, 130.0, 190.0, 50.0, Arc2D.OPEN)));
     76    }
     77
     78    public static final Symbol LightFlare = new Symbol();
     79    static {
     80        LightFlare.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -100, 40, 100)));
     81        LightFlare.add(new Instr(Form.RSHP, new Ellipse2D.Double(-3, -3, 6, 6)));
     82        Path2D.Double p = new Path2D.Double();
     83        p.moveTo(0.0, -25.0); p.lineTo(15.0, -95.0); p.curveTo(20.0, -123.0, -20.0, -123.0, -15.0, -95.0);
     84        p.closePath();
     85        LightFlare.add(new Instr(Form.PGON, p));
     86    }
     87
     88    public static final Symbol LightMajor = new Symbol();
     89    static {
     90        LightMajor.add(new Instr(Form.FILL, Color.black));
     91        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_NON_ZERO);
     92        p.moveTo(0.0, -7.0); p.curveTo(-9.3, -6.5, -9.3, 6.5, 0.0, 7.0); p.curveTo(9.3, 6.5, 9.3, -6.5, 0.0, -7.0); p.closePath();
     93        p.moveTo(0.0, -35.5); p.lineTo(8.0, -11.2); p.lineTo(33.5, -11.2); p.lineTo(12.8, 4.0);
     94        p.lineTo(20.5, 28.5); p.lineTo(0.0, 13.0); p.lineTo(-20.5, 28.5); p.lineTo(-12.8, 4.0); p.lineTo(-33.5, -11.2); p.lineTo(-8.0, -11.2); p.closePath();
     95        LightMajor.add(new Instr(Form.PGON, p));
     96    }
     97
     98    public static final Symbol LightMinor = new Symbol();
     99    static {
     100        LightMinor.add(new Instr(Form.FILL, Color.black));
     101        Path2D.Double p = new Path2D.Double(); p.moveTo(0.0, -26.5); p.lineTo(6.0, -8.4); p.lineTo(25.1, -8.4); p.lineTo(9.6, 3.0);
     102        p.lineTo(15.4, 21.4); p.lineTo(0.0, 9.8); p.lineTo(-15.4, 21.4); p.lineTo(-9.6, 3.0); p.lineTo(-25.1, -8.4); p.lineTo(-6.0, -8.4); p.closePath();
     103        LightMinor.add(new Instr(Form.PGON, p));
     104    }
     105
     106    public static final Symbol PerchPort = new Symbol();
     107    static {
     108        PerchPort.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     109        PerchPort.add(new Instr(Form.FILL, Color.black));
     110        PerchPort.add(new Instr(Form.LINE, new Line2D.Double(-10, 0, 10, 0)));
     111        PerchPort.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -40)));
     112        PerchPort.add(new Instr(Form.LINE, new Line2D.Double(25, -70, 0, -40)));
     113        PerchPort.add(new Instr(Form.LINE, new Line2D.Double(-25, -70, 0, -40)));
     114    }
     115
     116    public static final Symbol PerchStarboard = new Symbol();
     117    static {
     118        PerchStarboard.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     119        PerchStarboard.add(new Instr(Form.FILL, Color.black));
     120        PerchStarboard.add(new Instr(Form.LINE, new Line2D.Double(-10, 0, 10, 0)));
     121        PerchStarboard.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -70)));
     122        PerchStarboard.add(new Instr(Form.LINE, new Line2D.Double(25, -40, 0, -68.7)));
     123        PerchStarboard.add(new Instr(Form.LINE, new Line2D.Double(-25, -40, 0, -68.7)));
     124    }
     125
     126    public static final Symbol RadarStation = new Symbol();
     127    static {
     128        RadarStation.add(new Instr(Form.STRK, new BasicStroke(2.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     129        RadarStation.add(new Instr(Form.FILL, new Color(0xd400d4)));
     130        RadarStation.add(new Instr(Form.ELPS, new Ellipse2D.Double(-125, -125, 250, 250)));
     131    }
     132
     133    public static final Symbol Stake = new Symbol();
     134    static {
     135        Stake.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     136        Stake.add(new Instr(Form.FILL, Color.black));
     137        Stake.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -70)));
     138        Symbol colours = new Symbol();
     139        Path2D.Double p = new Path2D.Double(); p.moveTo(-2.0, 0.0); p.lineTo(-2.0, -70.0); p.lineTo(2.0, -70.0); p.lineTo(2.0, 0.0); p.closePath();
     140        colours.add(new Instr(Form.P1, p));
     141        p = new Path2D.Double(); p.moveTo(-2.0, 0.0); p.lineTo(-2.0, -35.0); p.lineTo(2.0, -35.0); p.lineTo(2.0, 0.0); p.closePath();
     142        colours.add(new Instr(Form.H2, p));
     143        p = new Path2D.Double(); p.moveTo(-2.0, -23.3); p.lineTo(-2.0, -46.7); p.lineTo(2.0, -46.7); p.lineTo(2.0, -23.3); p.closePath();
     144        colours.add(new Instr(Form.H3, p));
     145        p = new Path2D.Double(); p.moveTo(-2.0, -35.0); p.lineTo(-2.0, -52.5); p.lineTo(2.0, -52.5); p.lineTo(2.0, -35.0); p.closePath();
     146        colours.add(new Instr(Form.H4, p));
     147        p = new Path2D.Double(); p.moveTo(-2.0, -17.5); p.lineTo(-2.0, -35.0); p.lineTo(2.0, -35.0); p.lineTo(2.0, -17.5); p.closePath();
     148        colours.add(new Instr(Form.H5, p));
     149        Stake.add(new Instr(Form.COLR, colours));
     150        Stake.add(new Instr(Form.FILL, Color.black));
     151        Stake.add(new Instr(Form.LINE, new Line2D.Double(-10, 0, 10, 0)));
     152    }
     153
     154    public static final Symbol Tower = new Symbol();
     155    static {
     156        Symbol colours = new Symbol();
     157        Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0, 0.0); p.lineTo(-20.0, -70.0); p.lineTo(20.0, -70.0); p.lineTo(25.0, 0.0); p.lineTo(10.0, 0.0); p.curveTo(10.0, -13.3, -10.0, -13.3, -10.0, 0.0); p.closePath();
     158        colours.add(new Instr(Form.P1, p));
     159        p = new Path2D.Double(); p.moveTo(-25.0, 0.0); p.lineTo(-22.5, -35.0); p.lineTo(22.5, -35.0); p.lineTo(25.0, 0.0); p.lineTo(10.0, 0.0); p.curveTo(10.0, -13.3, -10.0, -13.3, -10.0, 0.0); p.closePath();
     160        colours.add(new Instr(Form.H2, p));
     161        p = new Path2D.Double(); p.moveTo(-23.3, -23.3); p.lineTo(-21.7, -46.7); p.lineTo(21.7, -46.7); p.lineTo(23.3, -23.3); p.closePath();
     162        colours.add(new Instr(Form.H3, p));
     163        p = new Path2D.Double(); p.moveTo(-22.5, -35.0); p.lineTo(-21.0, -52.5); p.lineTo(21.0, -52.5); p.lineTo(22.5, -35.0); p.closePath();
     164        colours.add(new Instr(Form.H4, p));
     165        p = new Path2D.Double(); p.moveTo(-23.6, -17.5); p.lineTo(-22.5, -35.0); p.lineTo(22.5, -35.0); p.lineTo(23.6, -17.5); p.closePath();
     166        colours.add(new Instr(Form.H5, p));
     167        p = new Path2D.Double(); p.moveTo(0.0, -70.0); p.lineTo(20.0, -70.0); p.lineTo(25.0, 0.0); p.lineTo(10.0, 0.0); p.quadTo(10.0, -10.0, 0.0, -10.0); p.closePath();
     168        colours.add(new Instr(Form.V2, p));
     169        Tower.add(new Instr(Form.COLR, colours));
     170        Tower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     171        Tower.add(new Instr(Form.FILL, Color.black));
     172        Tower.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     173        Tower.add(new Instr(Form.LINE, new Line2D.Double(-35, 0, -10, 0)));
     174        Tower.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 35, 0)));
     175        p = new Path2D.Double(); p.moveTo(-25.0, 0.0); p.lineTo(-20.0, -70.0); p.lineTo(20.0, -70.0); p.lineTo(25.0, 0.0);
     176        Tower.add(new Instr(Form.PLIN, p));
     177    }
     178
     179    public static final Symbol WithyPort = new Symbol();
     180    static {
     181        WithyPort.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     182        WithyPort.add(new Instr(Form.FILL, Color.black));
     183        WithyPort.add(new Instr(Form.LINE, new Line2D.Double(-10, 0, 10, 0)));
     184        WithyPort.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -70)));
     185        WithyPort.add(new Instr(Form.LINE, new Line2D.Double(20, -60, 0, -50)));
     186        WithyPort.add(new Instr(Form.LINE, new Line2D.Double(-20, -60, 0, -50)));
     187        WithyPort.add(new Instr(Form.LINE, new Line2D.Double(30, -35, 0, -21)));
     188        WithyPort.add(new Instr(Form.LINE, new Line2D.Double(-30, -35, 0, -21)));
     189    }
     190
     191    public static final Symbol WithyStarboard = new Symbol();
     192    static {
     193        WithyStarboard.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     194        WithyStarboard.add(new Instr(Form.FILL, Color.black));
     195        WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(-10, 0, 10, 0)));
     196        WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -70)));
     197        WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(20, -50, 0, -60)));
     198        WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(-20, -50, 0, -60)));
     199        WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(30, -21, 0, -35)));
     200        WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(-30, -21, 0, -35)));
     201    }
     202
     203    public static final EnumMap<BcnSHP, Symbol> Shapes = new EnumMap<>(BcnSHP.class);
     204    static {
     205        Shapes.put(BcnSHP.BCN_UNKN, Beacons.Beacon); Shapes.put(BcnSHP.BCN_STAK, Beacons.Stake); Shapes.put(BcnSHP.BCN_TOWR, Beacons.Tower);
     206        Shapes.put(BcnSHP.BCN_LATT, Beacons.Beacon); Shapes.put(BcnSHP.BCN_PILE, Beacons.Beacon); Shapes.put(BcnSHP.BCN_POLE, Beacons.Stake);
     207        Shapes.put(BcnSHP.BCN_CARN, Beacons.Cairn); Shapes.put(BcnSHP.BCN_BUOY, Beacons.Beacon); Shapes.put(BcnSHP.BCN_POST, Beacons.Stake);
     208        Shapes.put(BcnSHP.BCN_PRCH, Beacons.Stake);
     209    }
    191210}
  • applications/editors/josm/plugins/seachart/src/symbols/Buoys.java

    r32393 r32394  
    1212import java.awt.BasicStroke;
    1313import java.awt.Color;
    14 import java.awt.geom.*;
     14import java.awt.geom.Arc2D;
     15import java.awt.geom.Ellipse2D;
     16import java.awt.geom.Line2D;
     17import java.awt.geom.Path2D;
    1518import java.util.EnumMap;
    1619
    1720import s57.S57val.BoySHP;
    18 import symbols.Symbols.*;
     21import symbols.Symbols.Form;
     22import symbols.Symbols.Instr;
     23import symbols.Symbols.Symbol;
    1924
    2025public class Buoys {
    21 
    22         public static final Symbol Barrel = new Symbol();
    23         static {
    24                 Symbol colours = new Symbol();
    25                 Path2D.Double p = new Path2D.Double(); p.moveTo(-50.0,0); p.curveTo(-50.0,-11.0,-45.0,-32.0,-32.0,-36.0);
    26                 p.curveTo(-18.0,-40.0,12.0,-40.0,25.0,-36.0); p.curveTo(38.0,-32.0,43.0,-11.0,43.0,0);
    27                 p.lineTo(8.0, 0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    28                 colours.add(new Instr(Form.P1, p));
    29                 Barrel.add(new Instr(Form.COLR, colours));
    30     Barrel.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    31                 Barrel.add(new Instr(Form.FILL, Color.black));
    32                 Barrel.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    33                 Barrel.add(new Instr(Form.LINE, new Line2D.Double(-57,0,-10,0)));
    34                 Barrel.add(new Instr(Form.LINE, new Line2D.Double(10,0,50,0)));
    35                 p = new Path2D.Double(); p.moveTo(-50.0,0); p.curveTo(-50.0,-11.0,-45.0,-32.0,-32.0,-36.0); p.curveTo(-18.0,-40.0,12.0,-40.0,25.0,-36.0);
    36                 p.curveTo(38.0,-32.0,43.0,-11.0,43.0,0); p.moveTo(-32.0,-36.0); p.curveTo(-23.0,-25.0,-21.0,-12.0,-21.0,0.0);
    37     Barrel.add(new Instr(Form.PLIN, p));
    38         }
    39         public static final Symbol Can = new Symbol();
    40         static {
    41                 Symbol colours = new Symbol();
    42                 Path2D.Double p = new Path2D.Double(); p.moveTo(-31.6, 0); p.lineTo(-15.7,-47.4); p.lineTo(41.1,-28.4); p.lineTo(31.6,0);
    43                 p.lineTo(8.0, 0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    44                 colours.add(new Instr(Form.P1, p));
    45                 p = new Path2D.Double(); p.moveTo(-31.6,0); p.lineTo(-22.0,-28.4); p.lineTo(34.8,-9.4); p.lineTo(31.6,0);
    46                 p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    47     colours.add(new Instr(Form.H2, p));
    48                 p = new Path2D.Double(); p.moveTo(-24.2,-22.1); p.lineTo(-19.9,-34.8); p.lineTo(36.9,-15.8); p.lineTo(32.6,-3.1);       p.closePath();
    49     colours.add(new Instr(Form.H3, p));
    50                 p = new Path2D.Double(); p.moveTo(-22.0,-28.4); p.lineTo(-18.9,-37.9); p.lineTo(37.9,-18.9); p.lineTo(34.8,-9.4);       p.closePath();
    51     colours.add(new Instr(Form.H4, p));
    52                 p = new Path2D.Double(); p.moveTo(-25.2,-19.0); p.lineTo(-22.0,-28.4); p.lineTo(34.8,-9.4); p.lineTo(31.6,0.0); p.closePath();
    53     colours.add(new Instr(Form.H5, p));
    54                 p = new Path2D.Double(); p.moveTo(12.7,-37.9); p.lineTo(41.1,-28.4); p.lineTo(31.6,0);  p.lineTo(8.0,0.0); p.quadTo(8.0,-6.0,2.5,-7.6); p.closePath();
    55     colours.add(new Instr(Form.V2, p));
    56                 Can.add(new Instr(Form.COLR, colours));
    57     Can.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    58                 Can.add(new Instr(Form.FILL, Color.black));
    59                 Can.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    60                 Can.add(new Instr(Form.LINE, new Line2D.Double(-40,0,-10,0)));
    61                 Can.add(new Instr(Form.LINE, new Line2D.Double(10,0,40,0)));
    62                 p = new Path2D.Double(); p.moveTo(-31.6, 0); p.lineTo(-15.7,-47.4); p.lineTo(41.1,-28.4); p.lineTo(31.6,0);
    63     Can.add(new Instr(Form.PLIN, p));
    64         }
    65         public static final Symbol Cone = new Symbol();
    66         static {
    67                 Symbol colours = new Symbol();
    68                 Path2D.Double p = new Path2D.Double(); p.moveTo(-31.6,0); p.curveTo(-24.9,-32.2, 1.4,-38.7,12.7,-37.9); p.curveTo(21.9,-30.5,32.8,-18.4,32.1,0.0);
    69                 p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    70                 colours.add(new Instr(Form.P1, p));
    71                 p = new Path2D.Double(); p.moveTo(-31.6,0); p.quadTo(-29.0,-15.5,-17.3,-26.9); p.lineTo(31.5,-10.5); p.quadTo(33.0,-5.0,32.1,0.0);
    72                 p.lineTo(8.0,0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
    73     colours.add(new Instr(Form.H2, p));
    74                 p = new Path2D.Double(); p.moveTo(-22.3,-21.4); p.quadTo(-15.2,-29.8,-10.8,-31.8); p.lineTo(28.8,-18.5); p.quadTo(31.8,-12.5,32.6,-3.1); p.closePath();
    75     colours.add(new Instr(Form.H3, p));
    76                 p = new Path2D.Double(); p.moveTo(-17.3,-27.0); p.quadTo(-13.0,-31.4,-6.9,-33.8); p.lineTo(26.4,-22.7); p.quadTo(30.0,-17.0,31.7,-10.3); p.closePath();
    77     colours.add(new Instr(Form.H4, p));
    78                 p = new Path2D.Double(); p.moveTo(-24.4,-18.7); p.quadTo(-20.3,-25.0,-17.3,-27.0); p.lineTo(31.7,-10.3); p.quadTo(32.7,-4.5,32.1,0.0); p.closePath();
    79     colours.add(new Instr(Form.H5, p));
    80                 p = new Path2D.Double(); p.moveTo(12.7,-37.9); p.curveTo(21.9,-30.5,32.8,-18.4,32.1,0.0);       p.lineTo(8.0,0.0); p.quadTo(8.0,-6.0,2.5,-7.6); p.closePath();
    81     colours.add(new Instr(Form.V2, p));
    82                 Cone.add(new Instr(Form.COLR, colours));
    83     Cone.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    84                 Cone.add(new Instr(Form.FILL, Color.black));
    85                 Cone.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    86                 Cone.add(new Instr(Form.LINE, new Line2D.Double(-40,0,-10,0)));
    87                 Cone.add(new Instr(Form.LINE, new Line2D.Double(10,0,40,0)));
    88                 p = new Path2D.Double(); p.moveTo(-31.6, 0); p.curveTo(-24.9,-32.2,1.4,-38.7,12.7,-37.9); p.curveTo(21.9,-30.5,32.8,-18.4,32.1,0.0);
    89     Cone.add(new Instr(Form.PLIN, p));
    90         }
    91         public static final Symbol Float = new Symbol();
    92         static {
    93                 Symbol colours = new Symbol();
    94                 Path2D.Double p = new Path2D.Double(); p.moveTo(-36.0,0); p.lineTo(-47.0,-33.0); p.quadTo(-30.0, -25.0, -19.0,-23.0);
    95                 p.lineTo(-12.0,-42.0); p.lineTo(12.0,-42.0); p.lineTo(19.0,-23.0); p.quadTo(30.0,-25.0,47.0,-33.0); p.lineTo(36.0,0);
    96                 p.lineTo(8.0, 0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    97                 colours.add(new Instr(Form.P1, p));
    98                 p = new Path2D.Double(); p.moveTo(-36.0,0); p.lineTo(-43.0,-21.0); p.lineTo(43.0,-21.0); p.lineTo(36.0,0);
    99                 p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    100     colours.add(new Instr(Form.H2, p));
    101                 p = new Path2D.Double(); p.moveTo(-40.8,-14.0); p.lineTo(-45.4,-28.0); p.lineTo(-35.5,-28.0); p.quadTo(-28.0,-25.0,-19.0,-23.0); p.lineTo(-17.2,-28.0);
    102                 p.lineTo(17.2,-28.0); p.lineTo(19.0,-23.0); p.quadTo(28.0,-25.0,35.5,-28.0); p.lineTo(45.4,-28.0); p.lineTo(40.8,-14.0); p.closePath();
    103     colours.add(new Instr(Form.H3, p));
    104                 p = new Path2D.Double(); p.moveTo(-43.0,-21.0); p.lineTo(-47.0,-33.0); p.quadTo(-29.7,-24.8,-19.0,-23.0); p.lineTo(-15.8,-31.5); p.lineTo(15.8,-31.5);
    105                 p.lineTo(19.0,-23.0); p.quadTo(28.4,-24.3,47.0,-33.0); p.lineTo(43.0,-21.0);    p.closePath();
    106     colours.add(new Instr(Form.H4, p));
    107                 p = new Path2D.Double(); p.moveTo(-39.8,-11.5); p.lineTo(-43.0,-21.0); p.lineTo(43.0,-21.0); p.lineTo(39.8,-11.5);      p.closePath();
    108     colours.add(new Instr(Form.H5, p));
    109                 p = new Path2D.Double(); p.moveTo(0.0,-42.0); p.lineTo(12.0,-42.0); p.lineTo(19.0,-23.0); p.quadTo(28.4,-24.3,47.0,-33.0); p.lineTo(36.0,0.0);
    110                 p.lineTo(8.0,0.0); p.quadTo(7.7,-7.7,0.0,-8.0); p.closePath();
    111     colours.add(new Instr(Form.V2, p));
    112                 Float.add(new Instr(Form.COLR, colours));
    113     Float.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    114                 Float.add(new Instr(Form.FILL, Color.black));
    115                 Float.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    116                 Float.add(new Instr(Form.LINE, new Line2D.Double(-54,0,-10,0)));
    117                 Float.add(new Instr(Form.LINE, new Line2D.Double(10,0,54,0)));
    118                 p = new Path2D.Double(); p.moveTo(-36.0,0); p.lineTo(-47.0,-33.0); p.curveTo(-15.0, -17.0, 15.0, -17.0, 47.0,-33.0); p.lineTo(36.0,0);
    119                 p.moveTo(-19.0, -23.0); p.lineTo(-12.0,-42.0); p.lineTo(12.0,-42.0); p.lineTo(19.0,-23.0);
    120     Float.add(new Instr(Form.PLIN, p));
    121         }
    122         public static final Symbol Ice = new Symbol();
    123         static {
    124                 Symbol colours = new Symbol();
    125                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,0); p.quadTo(-30.0,0.0,-30.0,-15.0); p.lineTo(-30.0,-25.0); p.lineTo(30.0,-25.0); p.lineTo(30.0,-15); p.quadTo(30.0,0.0,15.0,0.0);
    126                 p.lineTo(8.0, 0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    127                 colours.add(new Instr(Form.P1, p));
    128     Ice.add(new Instr(Form.COLR, colours));
    129     Ice.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    130     Ice.add(new Instr(Form.FILL, Color.black));
    131     Ice.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    132     Ice.add(new Instr(Form.LINE, new Line2D.Double(-35,0,-10,0)));
    133     Ice.add(new Instr(Form.LINE, new Line2D.Double(10,0,35,0)));
    134                 p = new Path2D.Double(); p.moveTo(-15.0,0); p.quadTo(-30.0,0.0,-30.0,-15.0); p.lineTo(-30.0,-25.0); p.lineTo(30.0,-25.0); p.lineTo(30.0,-15); p.quadTo(30.0,0.0,15.0,0.0);
    135                 Ice.add(new Instr(Form.PLIN, p));
    136                 p = new Path2D.Double(); p.moveTo(-6.0,8.0); p.lineTo(-6.0,40.0); p.lineTo(6.0,40.0); p.lineTo(6.0,8.0);
    137                 Ice.add(new Instr(Form.PLIN, p));
    138         }
    139         public static final Symbol Pillar = new Symbol();
    140         static {
    141                 Symbol colours = new Symbol();
    142                 Path2D.Double p = new Path2D.Double(); p.moveTo(-32.0,0.0); p.lineTo(-2.8,-32.5); p.lineTo(25.6,-96.7); p.lineTo(37.0,-92.9); p.lineTo(21.8,-24.3);
    143                 p.lineTo(25.0,0.0); p.lineTo(8.0, 0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    144                 colours.add(new Instr(Form.P1, p));
    145                 p = new Path2D.Double(); p.moveTo(-32.0,0); p.lineTo(-2.8,-32.5); p.lineTo(5.3,-51.0); p.lineTo(26.3,-43.9); p.lineTo(21.8,-24.3); p.lineTo(25.0,0.0);
    146                 p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    147     colours.add(new Instr(Form.H2, p));
    148                 p = new Path2D.Double(); p.moveTo(-0.9,-37.1); p.lineTo(11.3,-64.6); p.lineTo(29.6,-58.7); p.lineTo(23.1,-29.3);        p.closePath();
    149     colours.add(new Instr(Form.H3, p));
    150                 p = new Path2D.Double(); p.moveTo(5.3,-51.0); p.lineTo(14.5,-71.5); p.lineTo(31.2,-65.9); p.lineTo(26.3,-43.9); p.closePath();
    151     colours.add(new Instr(Form.H4, p));
    152                 p = new Path2D.Double(); p.moveTo(-5.2,-29.7); p.lineTo(-2.8,-32.5); p.lineTo(5.3,-51.0); p.lineTo(26.3,-43.9); p.lineTo(21.8,-24.3); p.lineTo(22.2,-21.5);     p.closePath();
    153     colours.add(new Instr(Form.H5, p));
    154                 p = new Path2D.Double(); p.moveTo(12.7,-37.9); p.lineTo(31.3,-94.8); p.lineTo(37.0,-92.9); p.lineTo(21.8,-24.3);
    155                 p.lineTo(25.0,0.0); p.lineTo(8.0,0.0); p.quadTo(8.0,-6.0,2.5,-7.6); p.closePath();
    156     colours.add(new Instr(Form.V2, p));
    157                 Pillar.add(new Instr(Form.COLR, colours));
    158                 Pillar.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    159                 Pillar.add(new Instr(Form.FILL, Color.black));
    160                 Pillar.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    161                 Pillar.add(new Instr(Form.LINE, new Line2D.Double(-42,0,-10,0)));
    162                 Pillar.add(new Instr(Form.LINE, new Line2D.Double(10,0,36,0)));
    163                 p = new Path2D.Double(); p.moveTo(-32.0,0.0); p.lineTo(-2.8,-32.5); p.lineTo(25.6,-96.7); p.lineTo(37.0,-92.9); p.lineTo(21.8,-24.3); p.lineTo(25.0,0.0);
    164                 Pillar.add(new Instr(Form.PLIN, p));
    165         }
    166         public static final Symbol Spar = new Symbol();
    167         static {
    168                 Symbol colours = new Symbol();
    169                 Path2D.Double p = new Path2D.Double(); p.moveTo(-3.2,-9.5); p.lineTo(25.6,-96.7); p.lineTo(37.0,-92.9); p.lineTo(8.2,-5.7); p.closePath();
    170                 colours.add(new Instr(Form.P1, p));
    171                 p = new Path2D.Double(); p.moveTo(-3.2,-9.5); p.lineTo(11.2,-53.1); p.lineTo(22.6,-49.3); p.lineTo(8.2,-5.7); p.closePath();
    172     colours.add(new Instr(Form.H2, p));
    173                 p = new Path2D.Double(); p.moveTo(6.4,-38.6); p.lineTo(16.0,-67.6); p.lineTo(27.4,-63.8); p.lineTo(17.8,-34.8); p.closePath();
    174     colours.add(new Instr(Form.H3, p));
    175                 p = new Path2D.Double(); p.moveTo(11.2,-53.1); p.lineTo(18.4,-74.9); p.lineTo(29.8,-71.1); p.lineTo(22.6,-49.3);        p.closePath();
    176     colours.add(new Instr(Form.H4, p));
    177                 p = new Path2D.Double(); p.moveTo(4.0,-31.3); p.lineTo(11.2,-53.1); p.lineTo(22.6,-49.3); p.lineTo(15.4,-27.5); p.closePath();
    178     colours.add(new Instr(Form.H5, p));
    179                 p = new Path2D.Double(); p.moveTo(2.5,-7.6); p.lineTo(31.3,-94.8); p.lineTo(37.0,-92.9); p.lineTo(8.2,-5.7); p.closePath();
    180     colours.add(new Instr(Form.V2, p));
    181                 Spar.add(new Instr(Form.COLR, colours));
    182                 Spar.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    183                 Spar.add(new Instr(Form.FILL, Color.black));
    184                 Spar.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    185                 Spar.add(new Instr(Form.LINE, new Line2D.Double(-20,0,-10,0)));
    186                 Spar.add(new Instr(Form.LINE, new Line2D.Double(10,0,20,0)));
    187                 p = new Path2D.Double(); p.moveTo(-3.2,-9.5); p.lineTo(25.6,-96.7); p.lineTo(37.0,-92.9); p.lineTo(8.2,-5.7);
    188                 Spar.add(new Instr(Form.PLIN, p));
    189         }
    190         public static final Symbol Sphere = new Symbol();
    191         static {
    192                 Symbol colours = new Symbol();
    193                 Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0,0); p.curveTo(-32.0,-21.0,-14.0,-45.5,12.7,-37.9); p.curveTo(27.5,-33.8,37.8,-15.5,32.0,0.0);
    194                 p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    195                 colours.add(new Instr(Form.P1, p));
    196                 p = new Path2D.Double(); p.moveTo(-25.0,0); p.quadTo(-30.0,-15.0,-20.5,-28.0); p.lineTo(33.8,-10.0); p.quadTo(33.7,-4.0,32.0,0.0);
    197                 p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    198     colours.add(new Instr(Form.H2, p));
    199                 p = new Path2D.Double(); p.moveTo(-24.2,-22.1); p.quadTo(-21.0,-28.5,-15.2,-33.3); p.lineTo(32.8,-17.2); p.quadTo(34.6,-10.0,33.0,-2.9); p.closePath();
    200     colours.add(new Instr(Form.H3, p));
    201                 p = new Path2D.Double(); p.moveTo(-20.5,-28.0); p.quadTo(-16.5,-33.0,-12.0,-35.5); p.lineTo(31.5,-21.0); p.quadTo(33.5,-17.0,34.0,-9.5); p.closePath();
    202     colours.add(new Instr(Form.H4, p));
    203                 p = new Path2D.Double(); p.moveTo(-25.2,-19.0); p.quadTo(-23.5,-24.0,-20.5,-28.0); p.lineTo(34.0,-9.5); p.quadTo(34.0,-3.0,32.0,0.0);   p.closePath();
    204     colours.add(new Instr(Form.H5, p));
    205                 p = new Path2D.Double(); p.moveTo(12.7,-37.9); p.curveTo(27.5,-33.8,37.8,-15.5,32.0,0.0);       p.lineTo(8.0,0.0); p.quadTo(8.0,-6.0,2.5,-7.6); p.closePath();
    206     colours.add(new Instr(Form.V2, p));
    207     Sphere.add(new Instr(Form.COLR, colours));
    208     Sphere.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    209     Sphere.add(new Instr(Form.FILL, Color.black));
    210     Sphere.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    211     Sphere.add(new Instr(Form.LINE, new Line2D.Double(-33,0,-10,0)));
    212     Sphere.add(new Instr(Form.LINE, new Line2D.Double(10,0,40,0)));
    213     Sphere.add(new Instr(Form.EARC, new Arc2D.Double(-26.5,-39.4,60.0,60.0,-18.0,216.0,Arc2D.OPEN)));
    214         }
    215         public static final Symbol Storage = new Symbol();
    216         static {
    217                 Storage.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    218                 Storage.add(new Instr(Form.FILL, Color.black));
    219                 Storage.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    220     Path2D.Double p = new Path2D.Double(); p.moveTo(-50.0,0.0); p.lineTo(-40.0,-20.0); p.lineTo(40.0,-20.0); p.lineTo(40.0,-20.0);
    221     p.lineTo(50.0,0.0); p.lineTo(40.0,20.0); p.lineTo(-40.0,20.0); p.closePath();
    222     Storage.add(new Instr(Form.PLIN, p));
    223         }
    224         public static final Symbol Super = new Symbol();
    225         static {
    226                 Symbol colours = new Symbol();
    227                 Path2D.Double p = new Path2D.Double(); p.moveTo(-48.0,0); p.lineTo(-28.0,-42.0); p.lineTo(28.0,-42.0); p.lineTo(48.0,0);
    228                 p.lineTo(8.0, 0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    229                 colours.add(new Instr(Form.P1, p));
    230                 p = new Path2D.Double(); p.moveTo(-48.0,0); p.lineTo(-38.0,-21.0); p.lineTo(38.0,-21.0); p.lineTo(48.0,0);
    231                 p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    232     colours.add(new Instr(Form.H2, p));
    233                 p = new Path2D.Double(); p.moveTo(-41.3,-14.0); p.lineTo(-34.7,-28.0); p.lineTo(34.7,-28.0); p.lineTo(41.3,-14.0);      p.closePath();
    234     colours.add(new Instr(Form.H3, p));
    235                 p = new Path2D.Double(); p.moveTo(-38.0,-21.0); p.lineTo(-33.0,-31.5); p.lineTo(33.0,-31.5); p.lineTo(38.0,-21.0);      p.closePath();
    236     colours.add(new Instr(Form.H4, p));
    237                 p = new Path2D.Double(); p.moveTo(-43.0,-11.5); p.lineTo(-38.0,-21.0); p.lineTo(38.0,-21.0); p.lineTo(43.0,-11.5);      p.closePath();
    238     colours.add(new Instr(Form.H5, p));
    239                 p = new Path2D.Double(); p.moveTo(0.0,-42.0); p.lineTo(28.0,-42.0); p.lineTo(48.0,0.0); p.lineTo(8.0,0.0); p.quadTo(7.7,-7.7,0.0,-8.0); p.closePath();
    240     colours.add(new Instr(Form.V2, p));
    241                 Super.add(new Instr(Form.COLR, colours));
    242     Super.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    243                 Super.add(new Instr(Form.FILL, Color.black));
    244                 Super.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    245                 Super.add(new Instr(Form.LINE, new Line2D.Double(-54,0,-10,0)));
    246                 Super.add(new Instr(Form.LINE, new Line2D.Double(10,0,54,0)));
    247                 p = new Path2D.Double(); p.moveTo(-48.0,0); p.lineTo(-28.0,-42.0); p.lineTo(28.0,-42.0); p.lineTo(48.0,0);
    248     Super.add(new Instr(Form.PLIN, p));
    249         }
    250        
    251         public static final EnumMap<BoySHP, Symbol> Shapes = new EnumMap<>(BoySHP.class);
    252         static {
    253                 Shapes.put(BoySHP.BOY_UNKN, Buoys.Pillar); Shapes.put(BoySHP.BOY_CONE, Buoys.Cone); Shapes.put(BoySHP.BOY_CAN, Buoys.Can);
    254                 Shapes.put(BoySHP.BOY_SPHR, Buoys.Sphere); Shapes.put(BoySHP.BOY_PILR, Buoys.Pillar); Shapes.put(BoySHP.BOY_SPAR, Buoys.Spar);
    255                 Shapes.put(BoySHP.BOY_BARL, Buoys.Barrel); Shapes.put(BoySHP.BOY_SUPR, Buoys.Super); Shapes.put(BoySHP.BOY_ICE, Buoys.Ice);
    256         }
     26    // CHECKSTYLE.OFF: LineLength
     27    public static final Symbol Barrel = new Symbol();
     28    static {
     29        Symbol colours = new Symbol();
     30        Path2D.Double p = new Path2D.Double(); p.moveTo(-50.0, 0); p.curveTo(-50.0, -11.0, -45.0, -32.0, -32.0, -36.0);
     31        p.curveTo(-18.0, -40.0, 12.0, -40.0, 25.0, -36.0); p.curveTo(38.0, -32.0, 43.0, -11.0, 43.0, 0);
     32        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     33        colours.add(new Instr(Form.P1, p));
     34        Barrel.add(new Instr(Form.COLR, colours));
     35        Barrel.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     36        Barrel.add(new Instr(Form.FILL, Color.black));
     37        Barrel.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     38        Barrel.add(new Instr(Form.LINE, new Line2D.Double(-57, 0, -10, 0)));
     39        Barrel.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 50, 0)));
     40        p = new Path2D.Double(); p.moveTo(-50.0, 0); p.curveTo(-50.0, -11.0, -45.0, -32.0, -32.0, -36.0); p.curveTo(-18.0, -40.0, 12.0, -40.0, 25.0, -36.0);
     41        p.curveTo(38.0, -32.0, 43.0, -11.0, 43.0, 0); p.moveTo(-32.0, -36.0); p.curveTo(-23.0, -25.0, -21.0, -12.0, -21.0, 0.0);
     42        Barrel.add(new Instr(Form.PLIN, p));
     43    }
     44
     45    public static final Symbol Can = new Symbol();
     46    static {
     47        Symbol colours = new Symbol();
     48        Path2D.Double p = new Path2D.Double(); p.moveTo(-31.6, 0); p.lineTo(-15.7, -47.4); p.lineTo(41.1, -28.4); p.lineTo(31.6, 0);
     49        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     50        colours.add(new Instr(Form.P1, p));
     51        p = new Path2D.Double(); p.moveTo(-31.6, 0); p.lineTo(-22.0, -28.4); p.lineTo(34.8, -9.4); p.lineTo(31.6, 0);
     52        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     53        colours.add(new Instr(Form.H2, p));
     54        p = new Path2D.Double(); p.moveTo(-24.2, -22.1); p.lineTo(-19.9, -34.8); p.lineTo(36.9, -15.8); p.lineTo(32.6, -3.1); p.closePath();
     55        colours.add(new Instr(Form.H3, p));
     56        p = new Path2D.Double(); p.moveTo(-22.0, -28.4); p.lineTo(-18.9, -37.9); p.lineTo(37.9, -18.9); p.lineTo(34.8, -9.4); p.closePath();
     57        colours.add(new Instr(Form.H4, p));
     58        p = new Path2D.Double(); p.moveTo(-25.2, -19.0); p.lineTo(-22.0, -28.4); p.lineTo(34.8, -9.4); p.lineTo(31.6, 0.0); p.closePath();
     59        colours.add(new Instr(Form.H5, p));
     60        p = new Path2D.Double(); p.moveTo(12.7, -37.9); p.lineTo(41.1, -28.4); p.lineTo(31.6, 0); p.lineTo(8.0, 0.0); p.quadTo(8.0, -6.0, 2.5, -7.6); p.closePath();
     61        colours.add(new Instr(Form.V2, p));
     62        Can.add(new Instr(Form.COLR, colours));
     63        Can.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     64        Can.add(new Instr(Form.FILL, Color.black));
     65        Can.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     66        Can.add(new Instr(Form.LINE, new Line2D.Double(-40, 0, -10, 0)));
     67        Can.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 40, 0)));
     68        p = new Path2D.Double(); p.moveTo(-31.6, 0); p.lineTo(-15.7, -47.4); p.lineTo(41.1, -28.4); p.lineTo(31.6, 0);
     69        Can.add(new Instr(Form.PLIN, p));
     70    }
     71
     72    public static final Symbol Cone = new Symbol();
     73    static {
     74        Symbol colours = new Symbol();
     75        Path2D.Double p = new Path2D.Double(); p.moveTo(-31.6, 0); p.curveTo(-24.9, -32.2, 1.4, -38.7, 12.7, -37.9); p.curveTo(21.9, -30.5, 32.8, -18.4, 32.1, 0.0);
     76        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     77        colours.add(new Instr(Form.P1, p));
     78        p = new Path2D.Double(); p.moveTo(-31.6, 0); p.quadTo(-29.0, -15.5, -17.3, -26.9); p.lineTo(31.5, -10.5); p.quadTo(33.0, -5.0, 32.1, 0.0);
     79        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     80        colours.add(new Instr(Form.H2, p));
     81        p = new Path2D.Double(); p.moveTo(-22.3, -21.4); p.quadTo(-15.2, -29.8, -10.8, -31.8); p.lineTo(28.8, -18.5); p.quadTo(31.8, -12.5, 32.6, -3.1); p.closePath();
     82        colours.add(new Instr(Form.H3, p));
     83        p = new Path2D.Double(); p.moveTo(-17.3, -27.0); p.quadTo(-13.0, -31.4, -6.9, -33.8); p.lineTo(26.4, -22.7); p.quadTo(30.0, -17.0, 31.7, -10.3); p.closePath();
     84        colours.add(new Instr(Form.H4, p));
     85        p = new Path2D.Double(); p.moveTo(-24.4, -18.7); p.quadTo(-20.3, -25.0, -17.3, -27.0); p.lineTo(31.7, -10.3); p.quadTo(32.7, -4.5, 32.1, 0.0); p.closePath();
     86        colours.add(new Instr(Form.H5, p));
     87        p = new Path2D.Double(); p.moveTo(12.7, -37.9); p.curveTo(21.9, -30.5, 32.8, -18.4, 32.1, 0.0); p.lineTo(8.0, 0.0); p.quadTo(8.0, -6.0, 2.5, -7.6); p.closePath();
     88        colours.add(new Instr(Form.V2, p));
     89        Cone.add(new Instr(Form.COLR, colours));
     90        Cone.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     91        Cone.add(new Instr(Form.FILL, Color.black));
     92        Cone.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     93        Cone.add(new Instr(Form.LINE, new Line2D.Double(-40, 0, -10, 0)));
     94        Cone.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 40, 0)));
     95        p = new Path2D.Double(); p.moveTo(-31.6, 0); p.curveTo(-24.9, -32.2, 1.4, -38.7, 12.7, -37.9); p.curveTo(21.9, -30.5, 32.8, -18.4, 32.1, 0.0);
     96        Cone.add(new Instr(Form.PLIN, p));
     97    }
     98
     99    public static final Symbol Float = new Symbol();
     100    static {
     101        Symbol colours = new Symbol();
     102        Path2D.Double p = new Path2D.Double(); p.moveTo(-36.0, 0); p.lineTo(-47.0, -33.0); p.quadTo(-30.0, -25.0, -19.0, -23.0);
     103        p.lineTo(-12.0, -42.0); p.lineTo(12.0, -42.0); p.lineTo(19.0, -23.0); p.quadTo(30.0, -25.0, 47.0, -33.0); p.lineTo(36.0, 0);
     104        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     105        colours.add(new Instr(Form.P1, p));
     106        p = new Path2D.Double(); p.moveTo(-36.0, 0); p.lineTo(-43.0, -21.0); p.lineTo(43.0, -21.0); p.lineTo(36.0, 0);
     107        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     108        colours.add(new Instr(Form.H2, p));
     109        p = new Path2D.Double(); p.moveTo(-40.8, -14.0); p.lineTo(-45.4, -28.0); p.lineTo(-35.5, -28.0); p.quadTo(-28.0, -25.0, -19.0, -23.0); p.lineTo(-17.2, -28.0);
     110        p.lineTo(17.2, -28.0); p.lineTo(19.0, -23.0); p.quadTo(28.0, -25.0, 35.5, -28.0); p.lineTo(45.4, -28.0); p.lineTo(40.8, -14.0); p.closePath();
     111        colours.add(new Instr(Form.H3, p));
     112        p = new Path2D.Double(); p.moveTo(-43.0, -21.0); p.lineTo(-47.0, -33.0); p.quadTo(-29.7, -24.8, -19.0, -23.0); p.lineTo(-15.8, -31.5); p.lineTo(15.8, -31.5);
     113        p.lineTo(19.0, -23.0); p.quadTo(28.4, -24.3, 47.0, -33.0); p.lineTo(43.0, -21.0); p.closePath();
     114        colours.add(new Instr(Form.H4, p));
     115        p = new Path2D.Double(); p.moveTo(-39.8, -11.5); p.lineTo(-43.0, -21.0); p.lineTo(43.0, -21.0); p.lineTo(39.8, -11.5); p.closePath();
     116        colours.add(new Instr(Form.H5, p));
     117        p = new Path2D.Double(); p.moveTo(0.0, -42.0); p.lineTo(12.0, -42.0); p.lineTo(19.0, -23.0); p.quadTo(28.4, -24.3, 47.0, -33.0); p.lineTo(36.0, 0.0);
     118        p.lineTo(8.0, 0.0); p.quadTo(7.7, -7.7, 0.0, -8.0); p.closePath();
     119        colours.add(new Instr(Form.V2, p));
     120        Float.add(new Instr(Form.COLR, colours));
     121        Float.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     122        Float.add(new Instr(Form.FILL, Color.black));
     123        Float.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     124        Float.add(new Instr(Form.LINE, new Line2D.Double(-54, 0, -10, 0)));
     125        Float.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 54, 0)));
     126        p = new Path2D.Double(); p.moveTo(-36.0, 0); p.lineTo(-47.0, -33.0); p.curveTo(-15.0, -17.0, 15.0, -17.0, 47.0, -33.0); p.lineTo(36.0, 0);
     127        p.moveTo(-19.0, -23.0); p.lineTo(-12.0, -42.0); p.lineTo(12.0, -42.0); p.lineTo(19.0, -23.0);
     128        Float.add(new Instr(Form.PLIN, p));
     129    }
     130
     131    public static final Symbol Ice = new Symbol();
     132    static {
     133        Symbol colours = new Symbol();
     134        Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0, 0); p.quadTo(-30.0, 0.0, -30.0, -15.0); p.lineTo(-30.0, -25.0); p.lineTo(30.0, -25.0); p.lineTo(30.0, -15); p.quadTo(30.0, 0.0, 15.0, 0.0);
     135        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     136        colours.add(new Instr(Form.P1, p));
     137        Ice.add(new Instr(Form.COLR, colours));
     138        Ice.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     139        Ice.add(new Instr(Form.FILL, Color.black));
     140        Ice.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     141        Ice.add(new Instr(Form.LINE, new Line2D.Double(-35, 0, -10, 0)));
     142        Ice.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 35, 0)));
     143        p = new Path2D.Double(); p.moveTo(-15.0, 0); p.quadTo(-30.0, 0.0, -30.0, -15.0); p.lineTo(-30.0, -25.0); p.lineTo(30.0, -25.0); p.lineTo(30.0, -15); p.quadTo(30.0, 0.0, 15.0, 0.0);
     144        Ice.add(new Instr(Form.PLIN, p));
     145        p = new Path2D.Double(); p.moveTo(-6.0, 8.0); p.lineTo(-6.0, 40.0); p.lineTo(6.0, 40.0); p.lineTo(6.0, 8.0);
     146        Ice.add(new Instr(Form.PLIN, p));
     147    }
     148
     149    public static final Symbol Pillar = new Symbol();
     150    static {
     151        Symbol colours = new Symbol();
     152        Path2D.Double p = new Path2D.Double(); p.moveTo(-32.0, 0.0); p.lineTo(-2.8, -32.5); p.lineTo(25.6, -96.7); p.lineTo(37.0, -92.9); p.lineTo(21.8, -24.3);
     153        p.lineTo(25.0, 0.0); p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     154        colours.add(new Instr(Form.P1, p));
     155        p = new Path2D.Double(); p.moveTo(-32.0, 0); p.lineTo(-2.8, -32.5); p.lineTo(5.3, -51.0); p.lineTo(26.3, -43.9); p.lineTo(21.8, -24.3); p.lineTo(25.0, 0.0);
     156        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     157        colours.add(new Instr(Form.H2, p));
     158        p = new Path2D.Double(); p.moveTo(-0.9, -37.1); p.lineTo(11.3, -64.6); p.lineTo(29.6, -58.7); p.lineTo(23.1, -29.3); p.closePath();
     159        colours.add(new Instr(Form.H3, p));
     160        p = new Path2D.Double(); p.moveTo(5.3, -51.0); p.lineTo(14.5, -71.5); p.lineTo(31.2, -65.9); p.lineTo(26.3, -43.9); p.closePath();
     161        colours.add(new Instr(Form.H4, p));
     162        p = new Path2D.Double(); p.moveTo(-5.2, -29.7); p.lineTo(-2.8, -32.5); p.lineTo(5.3, -51.0); p.lineTo(26.3, -43.9); p.lineTo(21.8, -24.3); p.lineTo(22.2, -21.5); p.closePath();
     163        colours.add(new Instr(Form.H5, p));
     164        p = new Path2D.Double(); p.moveTo(12.7, -37.9); p.lineTo(31.3, -94.8); p.lineTo(37.0, -92.9); p.lineTo(21.8, -24.3);
     165        p.lineTo(25.0, 0.0); p.lineTo(8.0, 0.0); p.quadTo(8.0, -6.0, 2.5, -7.6); p.closePath();
     166        colours.add(new Instr(Form.V2, p));
     167        Pillar.add(new Instr(Form.COLR, colours));
     168        Pillar.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     169        Pillar.add(new Instr(Form.FILL, Color.black));
     170        Pillar.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     171        Pillar.add(new Instr(Form.LINE, new Line2D.Double(-42, 0, -10, 0)));
     172        Pillar.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 36, 0)));
     173        p = new Path2D.Double(); p.moveTo(-32.0, 0.0); p.lineTo(-2.8, -32.5); p.lineTo(25.6, -96.7); p.lineTo(37.0, -92.9); p.lineTo(21.8, -24.3); p.lineTo(25.0, 0.0);
     174        Pillar.add(new Instr(Form.PLIN, p));
     175    }
     176
     177    public static final Symbol Spar = new Symbol();
     178    static {
     179        Symbol colours = new Symbol();
     180        Path2D.Double p = new Path2D.Double(); p.moveTo(-3.2, -9.5); p.lineTo(25.6, -96.7); p.lineTo(37.0, -92.9); p.lineTo(8.2, -5.7); p.closePath();
     181        colours.add(new Instr(Form.P1, p));
     182        p = new Path2D.Double(); p.moveTo(-3.2, -9.5); p.lineTo(11.2, -53.1); p.lineTo(22.6, -49.3); p.lineTo(8.2, -5.7); p.closePath();
     183        colours.add(new Instr(Form.H2, p));
     184        p = new Path2D.Double(); p.moveTo(6.4, -38.6); p.lineTo(16.0, -67.6); p.lineTo(27.4, -63.8); p.lineTo(17.8, -34.8); p.closePath();
     185        colours.add(new Instr(Form.H3, p));
     186        p = new Path2D.Double(); p.moveTo(11.2, -53.1); p.lineTo(18.4, -74.9); p.lineTo(29.8, -71.1); p.lineTo(22.6, -49.3); p.closePath();
     187        colours.add(new Instr(Form.H4, p));
     188        p = new Path2D.Double(); p.moveTo(4.0, -31.3); p.lineTo(11.2, -53.1); p.lineTo(22.6, -49.3); p.lineTo(15.4, -27.5); p.closePath();
     189        colours.add(new Instr(Form.H5, p));
     190        p = new Path2D.Double(); p.moveTo(2.5, -7.6); p.lineTo(31.3, -94.8); p.lineTo(37.0, -92.9); p.lineTo(8.2, -5.7); p.closePath();
     191        colours.add(new Instr(Form.V2, p));
     192        Spar.add(new Instr(Form.COLR, colours));
     193        Spar.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     194        Spar.add(new Instr(Form.FILL, Color.black));
     195        Spar.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     196        Spar.add(new Instr(Form.LINE, new Line2D.Double(-20, 0, -10, 0)));
     197        Spar.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 20, 0)));
     198        p = new Path2D.Double(); p.moveTo(-3.2, -9.5); p.lineTo(25.6, -96.7); p.lineTo(37.0, -92.9); p.lineTo(8.2, -5.7);
     199        Spar.add(new Instr(Form.PLIN, p));
     200    }
     201
     202    public static final Symbol Sphere = new Symbol();
     203    static {
     204        Symbol colours = new Symbol();
     205        Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0, 0); p.curveTo(-32.0, -21.0, -14.0, -45.5, 12.7, -37.9); p.curveTo(27.5, -33.8, 37.8, -15.5, 32.0, 0.0);
     206        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     207        colours.add(new Instr(Form.P1, p));
     208        p = new Path2D.Double(); p.moveTo(-25.0, 0); p.quadTo(-30.0, -15.0, -20.5, -28.0); p.lineTo(33.8, -10.0); p.quadTo(33.7, -4.0, 32.0, 0.0);
     209        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     210        colours.add(new Instr(Form.H2, p));
     211        p = new Path2D.Double(); p.moveTo(-24.2, -22.1); p.quadTo(-21.0, -28.5, -15.2, -33.3); p.lineTo(32.8, -17.2); p.quadTo(34.6, -10.0, 33.0, -2.9); p.closePath();
     212        colours.add(new Instr(Form.H3, p));
     213        p = new Path2D.Double(); p.moveTo(-20.5, -28.0); p.quadTo(-16.5, -33.0, -12.0, -35.5); p.lineTo(31.5, -21.0); p.quadTo(33.5, -17.0, 34.0, -9.5); p.closePath();
     214        colours.add(new Instr(Form.H4, p));
     215        p = new Path2D.Double(); p.moveTo(-25.2, -19.0); p.quadTo(-23.5, -24.0, -20.5, -28.0); p.lineTo(34.0, -9.5); p.quadTo(34.0, -3.0, 32.0, 0.0); p.closePath();
     216        colours.add(new Instr(Form.H5, p));
     217        p = new Path2D.Double(); p.moveTo(12.7, -37.9); p.curveTo(27.5, -33.8, 37.8, -15.5, 32.0, 0.0); p.lineTo(8.0, 0.0); p.quadTo(8.0, -6.0, 2.5, -7.6); p.closePath();
     218        colours.add(new Instr(Form.V2, p));
     219        Sphere.add(new Instr(Form.COLR, colours));
     220        Sphere.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     221        Sphere.add(new Instr(Form.FILL, Color.black));
     222        Sphere.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     223        Sphere.add(new Instr(Form.LINE, new Line2D.Double(-33, 0, -10, 0)));
     224        Sphere.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 40, 0)));
     225        Sphere.add(new Instr(Form.EARC, new Arc2D.Double(-26.5, -39.4, 60.0, 60.0, -18.0, 216.0, Arc2D.OPEN)));
     226    }
     227
     228    public static final Symbol Storage = new Symbol();
     229    static {
     230        Storage.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     231        Storage.add(new Instr(Form.FILL, Color.black));
     232        Storage.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     233        Path2D.Double p = new Path2D.Double(); p.moveTo(-50.0, 0.0); p.lineTo(-40.0, -20.0); p.lineTo(40.0, -20.0); p.lineTo(40.0, -20.0);
     234        p.lineTo(50.0, 0.0); p.lineTo(40.0, 20.0); p.lineTo(-40.0, 20.0); p.closePath();
     235        Storage.add(new Instr(Form.PLIN, p));
     236    }
     237
     238    public static final Symbol Super = new Symbol();
     239    static {
     240        Symbol colours = new Symbol();
     241        Path2D.Double p = new Path2D.Double(); p.moveTo(-48.0, 0); p.lineTo(-28.0, -42.0); p.lineTo(28.0, -42.0); p.lineTo(48.0, 0);
     242        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     243        colours.add(new Instr(Form.P1, p));
     244        p = new Path2D.Double(); p.moveTo(-48.0, 0); p.lineTo(-38.0, -21.0); p.lineTo(38.0, -21.0); p.lineTo(48.0, 0);
     245        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     246        colours.add(new Instr(Form.H2, p));
     247        p = new Path2D.Double(); p.moveTo(-41.3, -14.0); p.lineTo(-34.7, -28.0); p.lineTo(34.7, -28.0); p.lineTo(41.3, -14.0); p.closePath();
     248        colours.add(new Instr(Form.H3, p));
     249        p = new Path2D.Double(); p.moveTo(-38.0, -21.0); p.lineTo(-33.0, -31.5); p.lineTo(33.0, -31.5); p.lineTo(38.0, -21.0); p.closePath();
     250        colours.add(new Instr(Form.H4, p));
     251        p = new Path2D.Double(); p.moveTo(-43.0, -11.5); p.lineTo(-38.0, -21.0); p.lineTo(38.0, -21.0); p.lineTo(43.0, -11.5); p.closePath();
     252        colours.add(new Instr(Form.H5, p));
     253        p = new Path2D.Double(); p.moveTo(0.0, -42.0); p.lineTo(28.0, -42.0); p.lineTo(48.0, 0.0); p.lineTo(8.0, 0.0); p.quadTo(7.7, -7.7, 0.0, -8.0); p.closePath();
     254        colours.add(new Instr(Form.V2, p));
     255        Super.add(new Instr(Form.COLR, colours));
     256        Super.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     257        Super.add(new Instr(Form.FILL, Color.black));
     258        Super.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     259        Super.add(new Instr(Form.LINE, new Line2D.Double(-54, 0, -10, 0)));
     260        Super.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 54, 0)));
     261        p = new Path2D.Double(); p.moveTo(-48.0, 0); p.lineTo(-28.0, -42.0); p.lineTo(28.0, -42.0); p.lineTo(48.0, 0);
     262        Super.add(new Instr(Form.PLIN, p));
     263    }
     264
     265    public static final EnumMap<BoySHP, Symbol> Shapes = new EnumMap<>(BoySHP.class);
     266    static {
     267        Shapes.put(BoySHP.BOY_UNKN, Buoys.Pillar); Shapes.put(BoySHP.BOY_CONE, Buoys.Cone); Shapes.put(BoySHP.BOY_CAN, Buoys.Can);
     268        Shapes.put(BoySHP.BOY_SPHR, Buoys.Sphere); Shapes.put(BoySHP.BOY_PILR, Buoys.Pillar); Shapes.put(BoySHP.BOY_SPAR, Buoys.Spar);
     269        Shapes.put(BoySHP.BOY_BARL, Buoys.Barrel); Shapes.put(BoySHP.BOY_SUPR, Buoys.Super); Shapes.put(BoySHP.BOY_ICE, Buoys.Ice);
     270    }
    257271}
  • applications/editors/josm/plugins/seachart/src/symbols/Facilities.java

    r32393 r32394  
    1212import java.awt.BasicStroke;
    1313import java.awt.Color;
    14 import java.awt.geom.*;
     14import java.awt.geom.Arc2D;
     15import java.awt.geom.Ellipse2D;
     16import java.awt.geom.GeneralPath;
     17import java.awt.geom.Line2D;
     18import java.awt.geom.Path2D;
     19import java.awt.geom.Rectangle2D;
     20import java.awt.geom.RoundRectangle2D;
    1521import java.util.EnumMap;
    1622
    17 import s57.S57val.*;
    18 import symbols.Symbols.*;
     23import s57.S57val.CatSCF;
     24import symbols.Symbols.Form;
     25import symbols.Symbols.Instr;
     26import symbols.Symbols.Symbol;
    1927
    2028public class Facilities {
    21         private static final Symbol Facility = new Symbol();
    22         static {
    23                 Facility.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    24                 Facility.add(new Instr(Form.FILL, new Color(0x80ffffff, true)));
    25                 RoundRectangle2D.Double s = new RoundRectangle2D.Double(-29,-29,58,58,15,15);
    26                 Facility.add(new Instr(Form.RSHP, s));
    27                 Facility.add(new Instr(Form.FILL, new Color(0xa30075)));
    28                 Facility.add(new Instr(Form.RRCT, s));
    29         }
    30         public static final Symbol Boatlift = new Symbol();//was Crane
    31         static {
    32                 Boatlift.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    33                 Boatlift.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
    34                 Boatlift.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    35                 Boatlift.add(new Instr(Form.ELPS, new Ellipse2D.Double(-3.7,-19.7,12,12)));
    36                 Boatlift.add(new Instr(Form.LINE, new Line2D.Double(2.3,-7.7,2.3,-2.0)));
    37                 Boatlift.add(new Instr(Form.EARC, new Arc2D.Double(-10.0,-1.5,20,20,75.0,-260.0,Arc2D.OPEN)));
    38         }
    39         public static final Symbol Boatyard = new Symbol();
    40         static {
    41                 Boatyard.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    42                 Boatyard.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
    43                 Boatyard.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    44                 Boatyard.add(new Instr(Form.LINE, new Line2D.Double(19,19,-8,-8)));
    45                 Path2D.Double p = new Path2D.Double(); p.moveTo(-11.3,-11.3); p.lineTo(-10.5,-17.5); p.lineTo(-14.8,-21.9); p.lineTo(-11.3,-25.4); p.lineTo(-7.4,-21.5);
    46                 p.curveTo(1.0,-11.5,-11.5,1.0,-21.5,-7.4); p.lineTo(-25.4,-11.3); p.lineTo(-21.9,-14.8); p.lineTo(-17.5,-10.5); p.closePath();
    47                 Boatyard.add(new Instr(Form.PGON, p));
    48         }
    49         public static final Symbol Chandler = new Symbol();
    50         static {
    51                 Chandler.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    52                 Chandler.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
    53                 Chandler.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    54                 Chandler.add(new Instr(Form.ELPS, new Ellipse2D.Double(14,7,10,10)));
    55                 Chandler.add(new Instr(Form.LINE, new Line2D.Double(-23.0,12.0,14.0,12.0)));
    56                 Chandler.add(new Instr(Form.LINE, new Line2D.Double(8.0,21.0,8.0,-8.6)));
    57                 Chandler.add(new Instr(Form.LINE, new Line2D.Double(-16.0,21.0,-16.0,-8.6)));
    58                 Chandler.add(new Instr(Form.EARC, new Arc2D.Double(-16.0,-20.5,24,24,0.0,180.0,Arc2D.OPEN)));
    59         }
    60         public static final Symbol Fuel = new Symbol();
    61         static {
    62                 Fuel.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    63                 Fuel.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
    64                 Fuel.add(new Instr(Form.STRK, new BasicStroke(2.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    65                 Fuel.add(new Instr(Form.FILL, new Color(0xa30075)));
    66                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    67                 p.moveTo(-15.6,22.1); p.lineTo(-15.6,-19.4); p.quadTo(-15.5,-22.7,-12.2,-22.8); p.lineTo(0.2,-22.8); p.quadTo(3.3,-22.7,3.4,-19.4); p.lineTo(3.4,22.1); p.closePath();
    68                 p.moveTo(-12.8,-19.0); p.quadTo(-12.7,-19.9,-11.8,-20.0); p.lineTo(-0.4,-20.0); p.quadTo(0.5,-19.9,0.6,-19.0); p.lineTo(0.6,-9.4);
    69                 p.quadTo(0.5,-8.5,-0.4,-8.4); p.lineTo(-11.8,-8.4); p.quadTo(-12.7,-8.3,-12.8,-9.4); p.closePath();
    70                 Fuel.add(new Instr(Form.PGON, p));
    71                 p = new Path2D.Double(); p.moveTo(3.0,-3.0); p.lineTo(7.0,-3.0); p.quadTo(9.4,-2.8,9.6,-0.4); p.lineTo(9.6,18.0); p.curveTo(10.1,23.2,18.4,21.5,17.4,17.2);
    72                 p.lineTo(14.9,3.5); p.lineTo(15.1,-10.3); p.quadTo(14.9,-11.9,13.9,-13.1); p.lineTo(7.4,-19.6); p.moveTo(15.1,-7.4); p.lineTo(12.6,-7.4); p.quadTo(11.1,-7.4,11.1,-8.9); p.lineTo(11.1,-16.0);
    73                 Fuel.add(new Instr(Form.PLIN, p));
    74         }
    75         public static final Symbol Laundrette = new Symbol();
    76         static {
    77                 Laundrette.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    78                 Laundrette.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
    79                 Laundrette.add(new Instr(Form.STRK, new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    80                 Laundrette.add(new Instr(Form.FILL, new Color(0xa30075)));
    81                 Laundrette.add(new Instr(Form.RECT, new Rectangle2D.Double(-15,-15,30,30)));
    82                 Laundrette.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    83                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15,-15); p.lineTo(-15,-20); p.lineTo(15,-20); p.lineTo(15,-15);
    84                 p.moveTo(-10,15); p.lineTo(-10,20); p.lineTo(10,20); p.lineTo(10,15);
    85                 Laundrette.add(new Instr(Form.PLIN, p));
    86         }
    87         public static final Symbol PumpOut = new Symbol();
    88         static {
    89                 PumpOut.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    90                 PumpOut.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
    91                 PumpOut.add(new Instr(Form.STRK, new BasicStroke(2.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    92                 PumpOut.add(new Instr(Form.FILL, new Color(0xa30075)));
    93                 Path2D.Double p = new Path2D.Double(); p.moveTo(3.9,-3.7); p.lineTo(-7.4,-3.7); p.lineTo(-12.0,2.0); p.lineTo(-22.7,2.0);
    94                 p.lineTo(-11.8,14.9); p.lineTo(15.1,14.9); p.lineTo(21.9,10.2); p.lineTo(21.9,3.1); p.lineTo(13.5,3.1);
    95                 PumpOut.add(new Instr(Form.PLIN, p));
    96                 PumpOut.add(new Instr(Form.STRK, new BasicStroke(3.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    97                 p = new Path2D.Double(); p.moveTo(-2.5,3.0); p.lineTo(-2.5,-13.8); p.lineTo(6.9,-13.8); p.lineTo(6.9,-6.7); p.lineTo(14.5,-6.7);
    98                 PumpOut.add(new Instr(Form.PLIN, p));
    99                 p = new Path2D.Double(); p.moveTo(9.7,2.3); p.lineTo(9.7,10.3); p.lineTo(-4.1,10.3); p.lineTo(-4.1,2.3); p.closePath();
    100                 PumpOut.add(new Instr(Form.PGON, p));
    101                 p = new Path2D.Double(); p.moveTo(14.1,-10.6); p.lineTo(23.1,-6.7); p.lineTo(14.1,-2.8); p.closePath();
    102                 PumpOut.add(new Instr(Form.PGON, p));
    103         }
    104         public static final Symbol SailingClub = new Symbol();
    105         static {
    106                 SailingClub.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    107                 SailingClub.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
    108                 SailingClub.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    109                 SailingClub.add(new Instr(Form.FILL, new Color(0xa30075)));
    110                 SailingClub.add(new Instr(Form.LINE, new Line2D.Double(-5,20,-5,-20)));
    111                 Path2D.Double p = new Path2D.Double(); p.moveTo(-5,0); p.lineTo(20,-10); p.lineTo(-5,-20); p.closePath();
    112                 SailingClub.add(new Instr(Form.PGON, p));
    113         }
    114         public static final Symbol Shower = new Symbol();
    115         static {
    116                 Shower.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    117                 Shower.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
    118                 Shower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    119                 Shower.add(new Instr(Form.FILL, new Color(0xa30075)));
    120                 Shower.add(new Instr(Form.LINE, new Line2D.Double(-4.8,-24.5,6.2,-13.5)));
    121                 Shower.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    122                 Shower.add(new Instr(Form.LINE, new Line2D.Double(-18.1,-17.9,-6.1,-21.3)));
    123                 Shower.add(new Instr(Form.LINE, new Line2D.Double(-13.9,-10.2,-3.9,-17.7)));
    124                 Shower.add(new Instr(Form.LINE, new Line2D.Double(-7.8,-4.4,-0.5,-14.3)));
    125                 Shower.add(new Instr(Form.LINE, new Line2D.Double(-0.2,-0.2,3.1,-12.1)));
    126                 Path2D.Double p = new Path2D.Double(); p.moveTo(11.1,24.6); p.lineTo(11.1,-16.0); p.curveTo(11.1,-22.7,3.4,-23.6,0.8,-19.3);
    127                 Shower.add(new Instr(Form.PLIN, p));
    128         }
    129         public static final Symbol Slipway = new Symbol();
    130         static {
    131                 Slipway.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    132                 Slipway.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
    133                 Slipway.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    134                 Slipway.add(new Instr(Form.FILL, new Color(0xa30075)));
    135                 Path2D.Double p = new Path2D.Double(); p.moveTo(-24.8,0.1); p.lineTo(-24.8,18.0); p.curveTo(-21.2,18.0,-22.2,16.7,-18.6,16.7); p.curveTo(-15.0,16.7,-16.0,18.0,-12.4,18.0);
    136                 p.curveTo(-8.8,18.0,-9.8,16.7,-6.2,16.7); p.curveTo(-2.6,16.7,-3.6,18.0,0.0,18.0); p.curveTo(3.6,18.0,2.6,16.7,6.2,16.7); p.curveTo(9.8,16.7,8.8,18.0,12.4,18.0);
    137                 p.curveTo(16.0,18.0,15.0,16.7,18.6,16.7); p.curveTo(22.2,16.7,21.2,18.0,24.8,18.0);     p.lineTo(24.8,13.6); p.closePath();
    138                 Slipway.add(new Instr(Form.PGON, p));
    139                 Slipway.add(new Instr(Form.ELPS, new Ellipse2D.Double(-1.65,-1.9,8,8)));
    140                 Slipway.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    141                 Slipway.add(new Instr(Form.LINE, new Line2D.Double(-24.5,-8.3,-3.1,-2.4)));
    142                 Slipway.add(new Instr(Form.LINE, new Line2D.Double(9.3,1.1,22.2,4.6)));
    143                 p = new Path2D.Double(); p.moveTo(22.9,0.6); p.lineTo(25.0,-7.4); p.lineTo(-5.1,-15.8); p.lineTo(0.3,-19.6); p.lineTo(-1.6,-20.1); p.lineTo(-7.2,-16.2);
    144                 p.lineTo(-17.1,-18.9); p.quadTo(-16.8,-11.4,-7.7,-7.7); p.closePath();
    145                 Slipway.add(new Instr(Form.PGON, p));
    146         }
    147         public static final Symbol Toilet = new Symbol();
    148         static {
    149                 Toilet.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    150                 Toilet.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
    151                 Toilet.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    152                 Toilet.add(new Instr(Form.FILL, new Color(0xa30075)));
    153                 Toilet.add(new Instr(Form.LINE, new Line2D.Double(0,20,0,-20)));
    154                 Toilet.add(new Instr(Form.RSHP, new Ellipse2D.Double(-18.5,-22.5,7.4,7.4)));
    155                 Toilet.add(new Instr(Form.RSHP, new Ellipse2D.Double(11,-22.5,7.4,7.4)));
    156                 Path2D.Double p = new Path2D.Double(); p.moveTo(-9.8,-12.2); p.lineTo(-4.8,2.7); p.lineTo(-7.3,3.9); p.lineTo(-10.6,-7.0); p.lineTo(-11.7,-6.4); p.lineTo(-7.6,9.0);
    157                 p.lineTo(-11.3,9.0); p.lineTo(-11.6,22.1); p.lineTo(-13.9,22.1); p.lineTo(-14.2,9.0); p.lineTo(-15.8,9.0); p.lineTo(-16.2,22.1); p.lineTo(-18.4,22.1);
    158                 p.lineTo(-18.8,9.0); p.lineTo(-22.3,9.0); p.lineTo(-18.2,-6.4); p.lineTo(-19.1,-7.0); p.lineTo(-22.9,3.9); p.lineTo(-25.1,2.7); p.lineTo(-19.9,-12.2); p.closePath();
    159                 Toilet.add(new Instr(Form.PGON, p));
    160                 p = new Path2D.Double(); p.moveTo(19.2,-12.2); p.lineTo(22.3,-10.1); p.lineTo(22.3,4.4); p.lineTo(20.2,4.4); p.lineTo(20.2,-7.3); p.lineTo(18.3,-7.3); p.lineTo(18.3,22.1);
    161                 p.lineTo(15.8,22.1); p.lineTo(15.8,4.6); p.lineTo(13.8,4.6); p.lineTo(13.4,22.1); p.lineTo(11.0,22.1); p.lineTo(11.0,-7.3); p.lineTo(9.5,-7.3); p.lineTo(9.5,4.4); p.lineTo(6.8,4.4);
    162                 p.lineTo(6.8,-10.1); p.lineTo(9.4,-12.2); p.closePath();
    163                 Toilet.add(new Instr(Form.PGON, p));
    164         }
    165         public static final Symbol VisitorBerth = new Symbol();
    166         static {
    167                 VisitorBerth.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    168                 VisitorBerth.add(new Instr(Form.FILL, new Color(0xa30075)));
    169                 VisitorBerth.add(new Instr(Form.RSHP, new Ellipse2D.Double(-25,-25,50,50)));
    170                 VisitorBerth.add(new Instr(Form.FILL, Color.white));
    171                 Path2D.Double p = new Path2D.Double(); p.moveTo(7.9,-13.6); p.lineTo(14.0,-13.6); p.lineTo(3.4,13.6); p.lineTo(-3.4,13.6);
    172                 p.lineTo(-14.0,-13.6); p.lineTo(-7.9,-13.6); p.lineTo(0.0,8.7); p.closePath();
    173                 VisitorBerth.add(new Instr(Form.PGON, p));
    174         }
    175         public static final Symbol VisitorMooring = new Symbol();
    176         static {
    177                 VisitorMooring.add(new Instr(Form.FILL, new Color(0xa30075)));
    178                 Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0,0); p.curveTo(-32.0,-21.0,-14.0,-45.5,12.7,-37.9); p.curveTo(27.5,-33.8,37.8,-15.5,32.0,0.0);
    179                 p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
    180                 VisitorMooring.add(new Instr(Form.PGON, p));
    181     VisitorMooring.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    182     VisitorMooring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    183     VisitorMooring.add(new Instr(Form.LINE, new Line2D.Double(-33,0,-10,0)));
    184     VisitorMooring.add(new Instr(Form.LINE, new Line2D.Double(10,0,40,0)));
    185     VisitorMooring.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    186     VisitorMooring.add(new Instr(Form.ELPS, new Ellipse2D.Double(6.5,-49.5,12,12)));
    187     VisitorMooring.add(new Instr(Form.FILL, Color.white));
    188                 p = new Path2D.Double(); p.moveTo(8.3,-32.8); p.lineTo(12.5,-32.8); p.lineTo(5.4,-12.9); p.lineTo(1.0,-12.9); p.lineTo(-6.1,-32.8);
    189                 p.lineTo(-1.9,-32.8); p.lineTo(3.2,-18.1); p.closePath();
    190                 VisitorMooring.add(new Instr(Form.PGON, p));
    191         }
    192 
    193         public static final EnumMap<CatSCF, Symbol> Cats = new EnumMap<>(CatSCF.class);
    194         static {
    195                 Cats.put(CatSCF.SCF_BHST, Boatlift); Cats.put(CatSCF.SCF_BTYD, Boatyard); Cats.put(CatSCF.SCF_CHDR, Chandler); Cats.put(CatSCF.SCF_FUEL, Fuel); Cats.put(CatSCF.SCF_LAUN, Laundrette);
    196                 Cats.put(CatSCF.SCF_PMPO, PumpOut); Cats.put(CatSCF.SCF_CLUB, SailingClub); Cats.put(CatSCF.SCF_SHWR, Shower); Cats.put(CatSCF.SCF_SLPW, Slipway); Cats.put(CatSCF.SCF_WC, Toilet);
    197                 Cats.put(CatSCF.SCF_VBTH, VisitorBerth); Cats.put(CatSCF.SCF_VMOR, VisitorMooring);
    198         }
     29    // CHECKSTYLE.OFF: LineLength
     30    private static final Symbol Facility = new Symbol();
     31    static {
     32        Facility.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     33        Facility.add(new Instr(Form.FILL, new Color(0x80ffffff, true)));
     34        RoundRectangle2D.Double s = new RoundRectangle2D.Double(-29, -29, 58, 58, 15, 15);
     35        Facility.add(new Instr(Form.RSHP, s));
     36        Facility.add(new Instr(Form.FILL, new Color(0xa30075)));
     37        Facility.add(new Instr(Form.RRCT, s));
     38    }
     39
     40    public static final Symbol Boatlift = new Symbol(); //was Crane
     41    static {
     42        Boatlift.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     43        Boatlift.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
     44        Boatlift.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     45        Boatlift.add(new Instr(Form.ELPS, new Ellipse2D.Double(-3.7, -19.7, 12, 12)));
     46        Boatlift.add(new Instr(Form.LINE, new Line2D.Double(2.3, -7.7, 2.3, -2.0)));
     47        Boatlift.add(new Instr(Form.EARC, new Arc2D.Double(-10.0, -1.5, 20, 20, 75.0, -260.0, Arc2D.OPEN)));
     48    }
     49
     50    public static final Symbol Boatyard = new Symbol();
     51    static {
     52        Boatyard.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     53        Boatyard.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
     54        Boatyard.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     55        Boatyard.add(new Instr(Form.LINE, new Line2D.Double(19, 19, -8, -8)));
     56        Path2D.Double p = new Path2D.Double(); p.moveTo(-11.3, -11.3); p.lineTo(-10.5, -17.5); p.lineTo(-14.8, -21.9); p.lineTo(-11.3, -25.4); p.lineTo(-7.4, -21.5);
     57        p.curveTo(1.0, -11.5, -11.5, 1.0, -21.5, -7.4); p.lineTo(-25.4, -11.3); p.lineTo(-21.9, -14.8); p.lineTo(-17.5, -10.5); p.closePath();
     58        Boatyard.add(new Instr(Form.PGON, p));
     59    }
     60
     61    public static final Symbol Chandler = new Symbol();
     62    static {
     63        Chandler.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     64        Chandler.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
     65        Chandler.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     66        Chandler.add(new Instr(Form.ELPS, new Ellipse2D.Double(14, 7, 10, 10)));
     67        Chandler.add(new Instr(Form.LINE, new Line2D.Double(-23.0, 12.0, 14.0, 12.0)));
     68        Chandler.add(new Instr(Form.LINE, new Line2D.Double(8.0, 21.0, 8.0, -8.6)));
     69        Chandler.add(new Instr(Form.LINE, new Line2D.Double(-16.0, 21.0, -16.0, -8.6)));
     70        Chandler.add(new Instr(Form.EARC, new Arc2D.Double(-16.0, -20.5, 24, 24, 0.0, 180.0, Arc2D.OPEN)));
     71    }
     72
     73    public static final Symbol Fuel = new Symbol();
     74    static {
     75        Fuel.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     76        Fuel.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
     77        Fuel.add(new Instr(Form.STRK, new BasicStroke(2.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     78        Fuel.add(new Instr(Form.FILL, new Color(0xa30075)));
     79        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     80        p.moveTo(-15.6, 22.1); p.lineTo(-15.6, -19.4); p.quadTo(-15.5, -22.7, -12.2, -22.8); p.lineTo(0.2, -22.8); p.quadTo(3.3, -22.7, 3.4, -19.4); p.lineTo(3.4, 22.1); p.closePath();
     81        p.moveTo(-12.8, -19.0); p.quadTo(-12.7, -19.9, -11.8, -20.0); p.lineTo(-0.4, -20.0); p.quadTo(0.5, -19.9, 0.6, -19.0); p.lineTo(0.6, -9.4);
     82        p.quadTo(0.5, -8.5, -0.4, -8.4); p.lineTo(-11.8, -8.4); p.quadTo(-12.7, -8.3, -12.8, -9.4); p.closePath();
     83        Fuel.add(new Instr(Form.PGON, p));
     84        p = new Path2D.Double(); p.moveTo(3.0, -3.0); p.lineTo(7.0, -3.0); p.quadTo(9.4, -2.8, 9.6, -0.4); p.lineTo(9.6, 18.0); p.curveTo(10.1, 23.2, 18.4, 21.5, 17.4, 17.2);
     85        p.lineTo(14.9, 3.5); p.lineTo(15.1, -10.3); p.quadTo(14.9, -11.9, 13.9, -13.1); p.lineTo(7.4, -19.6); p.moveTo(15.1, -7.4); p.lineTo(12.6, -7.4); p.quadTo(11.1, -7.4, 11.1, -8.9); p.lineTo(11.1, -16.0);
     86        Fuel.add(new Instr(Form.PLIN, p));
     87    }
     88
     89    public static final Symbol Laundrette = new Symbol();
     90    static {
     91        Laundrette.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     92        Laundrette.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
     93        Laundrette.add(new Instr(Form.STRK, new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     94        Laundrette.add(new Instr(Form.FILL, new Color(0xa30075)));
     95        Laundrette.add(new Instr(Form.RECT, new Rectangle2D.Double(-15, -15, 30, 30)));
     96        Laundrette.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     97        Path2D.Double p = new Path2D.Double(); p.moveTo(-15, -15); p.lineTo(-15, -20); p.lineTo(15, -20); p.lineTo(15, -15);
     98        p.moveTo(-10, 15); p.lineTo(-10, 20); p.lineTo(10, 20); p.lineTo(10, 15);
     99        Laundrette.add(new Instr(Form.PLIN, p));
     100    }
     101
     102    public static final Symbol PumpOut = new Symbol();
     103    static {
     104        PumpOut.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     105        PumpOut.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
     106        PumpOut.add(new Instr(Form.STRK, new BasicStroke(2.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     107        PumpOut.add(new Instr(Form.FILL, new Color(0xa30075)));
     108        Path2D.Double p = new Path2D.Double(); p.moveTo(3.9, -3.7); p.lineTo(-7.4, -3.7); p.lineTo(-12.0, 2.0); p.lineTo(-22.7, 2.0);
     109        p.lineTo(-11.8, 14.9); p.lineTo(15.1, 14.9); p.lineTo(21.9, 10.2); p.lineTo(21.9, 3.1); p.lineTo(13.5, 3.1);
     110        PumpOut.add(new Instr(Form.PLIN, p));
     111        PumpOut.add(new Instr(Form.STRK, new BasicStroke(3.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     112        p = new Path2D.Double(); p.moveTo(-2.5, 3.0); p.lineTo(-2.5, -13.8); p.lineTo(6.9, -13.8); p.lineTo(6.9, -6.7); p.lineTo(14.5, -6.7);
     113        PumpOut.add(new Instr(Form.PLIN, p));
     114        p = new Path2D.Double(); p.moveTo(9.7, 2.3); p.lineTo(9.7, 10.3); p.lineTo(-4.1, 10.3); p.lineTo(-4.1, 2.3); p.closePath();
     115        PumpOut.add(new Instr(Form.PGON, p));
     116        p = new Path2D.Double(); p.moveTo(14.1, -10.6); p.lineTo(23.1, -6.7); p.lineTo(14.1, -2.8); p.closePath();
     117        PumpOut.add(new Instr(Form.PGON, p));
     118    }
     119
     120    public static final Symbol SailingClub = new Symbol();
     121    static {
     122        SailingClub.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     123        SailingClub.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
     124        SailingClub.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     125        SailingClub.add(new Instr(Form.FILL, new Color(0xa30075)));
     126        SailingClub.add(new Instr(Form.LINE, new Line2D.Double(-5, 20, -5, -20)));
     127        Path2D.Double p = new Path2D.Double(); p.moveTo(-5, 0); p.lineTo(20, -10); p.lineTo(-5, -20); p.closePath();
     128        SailingClub.add(new Instr(Form.PGON, p));
     129    }
     130
     131    public static final Symbol Shower = new Symbol();
     132    static {
     133        Shower.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     134        Shower.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
     135        Shower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     136        Shower.add(new Instr(Form.FILL, new Color(0xa30075)));
     137        Shower.add(new Instr(Form.LINE, new Line2D.Double(-4.8, -24.5, 6.2, -13.5)));
     138        Shower.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     139        Shower.add(new Instr(Form.LINE, new Line2D.Double(-18.1, -17.9, -6.1, -21.3)));
     140        Shower.add(new Instr(Form.LINE, new Line2D.Double(-13.9, -10.2, -3.9, -17.7)));
     141        Shower.add(new Instr(Form.LINE, new Line2D.Double(-7.8, -4.4, -0.5, -14.3)));
     142        Shower.add(new Instr(Form.LINE, new Line2D.Double(-0.2, -0.2, 3.1, -12.1)));
     143        Path2D.Double p = new Path2D.Double(); p.moveTo(11.1, 24.6); p.lineTo(11.1, -16.0); p.curveTo(11.1, -22.7, 3.4, -23.6, 0.8, -19.3);
     144        Shower.add(new Instr(Form.PLIN, p));
     145    }
     146
     147    public static final Symbol Slipway = new Symbol();
     148    static {
     149        Slipway.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     150        Slipway.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
     151        Slipway.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     152        Slipway.add(new Instr(Form.FILL, new Color(0xa30075)));
     153        Path2D.Double p = new Path2D.Double(); p.moveTo(-24.8, 0.1); p.lineTo(-24.8, 18.0); p.curveTo(-21.2, 18.0, -22.2, 16.7, -18.6, 16.7); p.curveTo(-15.0, 16.7, -16.0, 18.0, -12.4, 18.0);
     154        p.curveTo(-8.8, 18.0, -9.8, 16.7, -6.2, 16.7); p.curveTo(-2.6, 16.7, -3.6, 18.0, 0.0, 18.0); p.curveTo(3.6, 18.0, 2.6, 16.7, 6.2, 16.7); p.curveTo(9.8, 16.7, 8.8, 18.0, 12.4, 18.0);
     155        p.curveTo(16.0, 18.0, 15.0, 16.7, 18.6, 16.7); p.curveTo(22.2, 16.7, 21.2, 18.0, 24.8, 18.0); p.lineTo(24.8, 13.6); p.closePath();
     156        Slipway.add(new Instr(Form.PGON, p));
     157        Slipway.add(new Instr(Form.ELPS, new Ellipse2D.Double(-1.65, -1.9, 8, 8)));
     158        Slipway.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     159        Slipway.add(new Instr(Form.LINE, new Line2D.Double(-24.5, -8.3, -3.1, -2.4)));
     160        Slipway.add(new Instr(Form.LINE, new Line2D.Double(9.3, 1.1, 22.2, 4.6)));
     161        p = new Path2D.Double(); p.moveTo(22.9, 0.6); p.lineTo(25.0, -7.4); p.lineTo(-5.1, -15.8); p.lineTo(0.3, -19.6); p.lineTo(-1.6, -20.1); p.lineTo(-7.2, -16.2);
     162        p.lineTo(-17.1, -18.9); p.quadTo(-16.8, -11.4, -7.7, -7.7); p.closePath();
     163        Slipway.add(new Instr(Form.PGON, p));
     164    }
     165
     166    public static final Symbol Toilet = new Symbol();
     167    static {
     168        Toilet.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     169        Toilet.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
     170        Toilet.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     171        Toilet.add(new Instr(Form.FILL, new Color(0xa30075)));
     172        Toilet.add(new Instr(Form.LINE, new Line2D.Double(0, 20, 0, -20)));
     173        Toilet.add(new Instr(Form.RSHP, new Ellipse2D.Double(-18.5, -22.5, 7.4, 7.4)));
     174        Toilet.add(new Instr(Form.RSHP, new Ellipse2D.Double(11, -22.5, 7.4, 7.4)));
     175        Path2D.Double p = new Path2D.Double(); p.moveTo(-9.8, -12.2); p.lineTo(-4.8, 2.7); p.lineTo(-7.3, 3.9); p.lineTo(-10.6, -7.0); p.lineTo(-11.7, -6.4); p.lineTo(-7.6, 9.0);
     176        p.lineTo(-11.3, 9.0); p.lineTo(-11.6, 22.1); p.lineTo(-13.9, 22.1); p.lineTo(-14.2, 9.0); p.lineTo(-15.8, 9.0); p.lineTo(-16.2, 22.1); p.lineTo(-18.4, 22.1);
     177        p.lineTo(-18.8, 9.0); p.lineTo(-22.3, 9.0); p.lineTo(-18.2, -6.4); p.lineTo(-19.1, -7.0); p.lineTo(-22.9, 3.9); p.lineTo(-25.1, 2.7); p.lineTo(-19.9, -12.2); p.closePath();
     178        Toilet.add(new Instr(Form.PGON, p));
     179        p = new Path2D.Double(); p.moveTo(19.2, -12.2); p.lineTo(22.3, -10.1); p.lineTo(22.3, 4.4); p.lineTo(20.2, 4.4); p.lineTo(20.2, -7.3); p.lineTo(18.3, -7.3); p.lineTo(18.3, 22.1);
     180        p.lineTo(15.8, 22.1); p.lineTo(15.8, 4.6); p.lineTo(13.8, 4.6); p.lineTo(13.4, 22.1); p.lineTo(11.0, 22.1); p.lineTo(11.0, -7.3); p.lineTo(9.5, -7.3); p.lineTo(9.5, 4.4); p.lineTo(6.8, 4.4);
     181        p.lineTo(6.8, -10.1); p.lineTo(9.4, -12.2); p.closePath();
     182        Toilet.add(new Instr(Form.PGON, p));
     183    }
     184
     185    public static final Symbol VisitorBerth = new Symbol();
     186    static {
     187        VisitorBerth.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     188        VisitorBerth.add(new Instr(Form.FILL, new Color(0xa30075)));
     189        VisitorBerth.add(new Instr(Form.RSHP, new Ellipse2D.Double(-25, -25, 50, 50)));
     190        VisitorBerth.add(new Instr(Form.FILL, Color.white));
     191        Path2D.Double p = new Path2D.Double(); p.moveTo(7.9, -13.6); p.lineTo(14.0, -13.6); p.lineTo(3.4, 13.6); p.lineTo(-3.4, 13.6);
     192        p.lineTo(-14.0, -13.6); p.lineTo(-7.9, -13.6); p.lineTo(0.0, 8.7); p.closePath();
     193        VisitorBerth.add(new Instr(Form.PGON, p));
     194    }
     195
     196    public static final Symbol VisitorMooring = new Symbol();
     197    static {
     198        VisitorMooring.add(new Instr(Form.FILL, new Color(0xa30075)));
     199        Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0, 0); p.curveTo(-32.0, -21.0, -14.0, -45.5, 12.7, -37.9); p.curveTo(27.5, -33.8, 37.8, -15.5, 32.0, 0.0);
     200        p.lineTo(8.0, 0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
     201        VisitorMooring.add(new Instr(Form.PGON, p));
     202        VisitorMooring.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     203        VisitorMooring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     204        VisitorMooring.add(new Instr(Form.LINE, new Line2D.Double(-33, 0, -10, 0)));
     205        VisitorMooring.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 40, 0)));
     206        VisitorMooring.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     207        VisitorMooring.add(new Instr(Form.ELPS, new Ellipse2D.Double(6.5, -49.5, 12, 12)));
     208        VisitorMooring.add(new Instr(Form.FILL, Color.white));
     209        p = new Path2D.Double(); p.moveTo(8.3, -32.8); p.lineTo(12.5, -32.8); p.lineTo(5.4, -12.9); p.lineTo(1.0, -12.9); p.lineTo(-6.1, -32.8);
     210        p.lineTo(-1.9, -32.8); p.lineTo(3.2, -18.1); p.closePath();
     211        VisitorMooring.add(new Instr(Form.PGON, p));
     212    }
     213
     214    public static final EnumMap<CatSCF, Symbol> Cats = new EnumMap<>(CatSCF.class);
     215    static {
     216        Cats.put(CatSCF.SCF_BHST, Boatlift); Cats.put(CatSCF.SCF_BTYD, Boatyard); Cats.put(CatSCF.SCF_CHDR, Chandler); Cats.put(CatSCF.SCF_FUEL, Fuel); Cats.put(CatSCF.SCF_LAUN, Laundrette);
     217        Cats.put(CatSCF.SCF_PMPO, PumpOut); Cats.put(CatSCF.SCF_CLUB, SailingClub); Cats.put(CatSCF.SCF_SHWR, Shower); Cats.put(CatSCF.SCF_SLPW, Slipway); Cats.put(CatSCF.SCF_WC, Toilet);
     218        Cats.put(CatSCF.SCF_VBTH, VisitorBerth); Cats.put(CatSCF.SCF_VMOR, VisitorMooring);
     219    }
    199220}
  • applications/editors/josm/plugins/seachart/src/symbols/Harbours.java

    r32101 r32394  
    1212import java.awt.BasicStroke;
    1313import java.awt.Color;
    14 import java.awt.geom.*;
    15 
    16 import symbols.Symbols.*;
     14import java.awt.geom.Arc2D;
     15import java.awt.geom.Ellipse2D;
     16import java.awt.geom.GeneralPath;
     17import java.awt.geom.Line2D;
     18import java.awt.geom.Path2D;
     19import java.awt.geom.Rectangle2D;
     20
     21import symbols.Symbols.Form;
     22import symbols.Symbols.Instr;
     23import symbols.Symbols.Scheme;
     24import symbols.Symbols.Symbol;
    1725
    1826public class Harbours {
    19         public static final Symbol Anchor = new Symbol();
    20         static {
    21                 Anchor.add(new Instr(Form.BBOX, new Rectangle2D.Double(-60,-60,120,120)));
    22                 Anchor.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    23                 Anchor.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-59,20,20)));
    24                 Path2D.Double p = new Path2D.Double(); p.moveTo(23.0,-40.0); p.lineTo(23.0,-30.0); p.lineTo(6.0,-30.0); p.lineTo(7.0,31.0); p.quadTo(21.0,29.0,31.0,22.0);
    25                 p.lineTo(27.0,18.0); p.lineTo(52.0,0.0); p.lineTo(45.0,35.0); p.lineTo(37.0,28.0);      p.quadTo(25.0,39.0,7.0,43.0); p.lineTo(6.0,51.0);
    26                 p.lineTo(-6.0,51.0); p.lineTo(-7.0,43.0);       p.quadTo(-25.0,39.0,-37.0,28.0); p.lineTo(-45.0,35.0); p.lineTo(-52.0,0.0); p.lineTo(-27.0,18.0);
    27                 p.lineTo(-31.0,22.0); p.quadTo(-21.0,29.0,-7.0,31.0); p.lineTo(-6.0,-30.0); p.lineTo(-23.0,-30.0); p.lineTo(-23.0,-40.0); p.closePath();
    28                 Anchor.add(new Instr(Form.PGON, p));
    29         }
    30         public static final Symbol Yacht = new Symbol();
    31         static {
    32                 Yacht.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    33                 Path2D.Double p = new Path2D.Double(); p.moveTo(-65.0,50.0); p.curveTo(-36.0,97.0,36.0,97.0,65.0,50.0); p.lineTo(3.0,50.0); p.lineTo(3.0,40.0); p.lineTo(55.0,30.0);
    34                 p.curveTo(32.0,4.0,25.0,-15.0,26.0,-52.0); p.lineTo(1.5,-40.0); p.lineTo(1.0,-64.0); p.lineTo(-2.0,-64.0); p.lineTo(-4.0,50.0); p.closePath();
    35                 p.moveTo(-50.0,45.0); p.curveTo(-55.0,3.0,-37.0,-28.5,-7.0,-46.0); p.curveTo(-28.0,-15.0,-26.0,11.0,-20.5,30.0); p.closePath();
    36                 Yacht.add(new Instr(Form.PGON, p));
    37         }
    38         public static final Symbol Anchorage = new Symbol();
    39         static {
    40                 Anchorage.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.67, 0, 0, new Scheme(Symbols.Msymb), null)));
    41         }
    42         public static final Symbol Bollard = new Symbol();
    43         static {
    44                 Bollard.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    45                 Bollard.add(new Instr(Form.FILL, Color.white));
    46                 Ellipse2D.Double s = new Ellipse2D.Double(-10,-10,20,20);
    47                 Bollard.add(new Instr(Form.RSHP, s));
    48                 Bollard.add(new Instr(Form.FILL, Color.black));
    49                 Bollard.add(new Instr(Form.ELPS, s));
    50         }
    51         public static final Symbol CallPoint1 = new Symbol();
    52         static {
    53                 CallPoint1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-50,-50,100,100)));
    54                 CallPoint1.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    55                 CallPoint1.add(new Instr(Form.FILL, Symbols.Msymb));
    56                 CallPoint1.add(new Instr(Form.ELPS, new Ellipse2D.Double(-25,-25,50,50)));
    57                 Path2D.Double p = new Path2D.Double(); p.moveTo(-16.0,-20.0); p.lineTo(0.0,-50.0); p.lineTo(16.0,-20.0);
    58                 CallPoint1.add(new Instr(Form.PLIN, p));
    59         }
    60         public static final Symbol CallPoint2 = new Symbol();
    61         static {
    62                 CallPoint2.add(new Instr(Form.BBOX, new Rectangle2D.Double(-50,-50,100,100)));
    63                 CallPoint2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(CallPoint1, 1.0, 0, 0, null, null)));
    64                 Path2D.Double p = new Path2D.Double(); p.moveTo(-16.0,20.0); p.lineTo(0.0,50.0); p.lineTo(16.0,20.0);
    65                 CallPoint2.add(new Instr(Form.PLIN, p));
    66         }
    67         public static final Symbol ContainerCrane = new Symbol();
    68         static {
    69                 ContainerCrane.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    70                 ContainerCrane.add(new Instr(Form.RSHP, new Rectangle2D.Double(-15,-65,30,100)));
    71                 ContainerCrane.add(new Instr(Form.RECT, new Rectangle2D.Double(-40,-12.5,80,25)));
    72         }
    73         public static final Symbol Customs = new Symbol();
    74         static {
    75                 Customs.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    76                 Customs.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    77                 Customs.add(new Instr(Form.ELPS, new Ellipse2D.Double(-28,-28,56,56)));
    78                 Customs.add(new Instr(Form.LINE, new Line2D.Double(-25,5,25,5)));
    79                 Customs.add(new Instr(Form.LINE, new Line2D.Double(-25,-5,25,-5)));
    80         }
    81         public static final Symbol DeviationDolphin = new Symbol();
    82         static {
    83                 DeviationDolphin.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    84                 Path2D.Double p = new Path2D.Double(); p.moveTo(-30.0,0.0); p.lineTo(30.0,0.0); p.moveTo(0.0,0.0); p.lineTo(0.0,-40.0);
    85                 p.moveTo(-20.0,0.0); p.lineTo(-15.0,-32.0); p.lineTo(15.0,-32.0); p.lineTo(20.0,0.0);
    86                 DeviationDolphin.add(new Instr(Form.PLIN, p));
    87         }
    88         public static final Symbol DistanceI = new Symbol();
    89         static {
    90                 DistanceI.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    91                 DistanceI.add(new Instr(Form.ELPS, new Ellipse2D.Double(-11,-11,22,22)));
    92         }
    93         public static final Symbol DistanceU = new Symbol();
    94         static {
    95                 DistanceU.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    96                 DistanceU.add(new Instr(Form.FILL, Symbols.Msymb));
    97                 DistanceU.add(new Instr(Form.ELPS, new Ellipse2D.Double(-11,-11,22,22)));
    98         }
    99         public static final Symbol Dolphin = new Symbol();
    100         static {
    101                 Dolphin.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    102                 Dolphin.add(new Instr(Form.FILL, new Color(0xffd400)));
    103                 Path2D.Double p = new Path2D.Double(); p.moveTo(3.8,-9.2); p.lineTo(9.2,-3.8); p.lineTo(9.2,3.8); p.lineTo(3.8,9.2);
    104                 p.lineTo(-3.8,9.2); p.lineTo(-9.2,3.8); p.lineTo(-9.2,-3.8); p.lineTo(-3.8,-9.2); p.closePath();
    105                 Dolphin.add(new Instr(Form.PGON, p));
    106                 Dolphin.add(new Instr(Form.FILL, Color.black));
    107                 Dolphin.add(new Instr(Form.PLIN, p));
    108         }
    109         public static final Symbol Explosives = new Symbol();
    110         static {
    111                 Explosives.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    112                 Explosives.add(new Instr(Form.RSHP, new Ellipse2D.Double(-5,25,10,10)));
    113                 Explosives.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    114                 Path2D.Double p = new Path2D.Double(); p.moveTo(-10,20); p.lineTo(-13,17); p.lineTo(-13,8);
    115                 p.moveTo(0,10); p.lineTo(0,0); p.lineTo(-8,-10);
    116                 p.moveTo(10,17); p.lineTo(18,-10); p.lineTo(10,-20);
    117                 Explosives.add(new Instr(Form.PLIN, p));
    118         }
    119         public static final Symbol Fishing = new Symbol();
    120         static {
    121                 Fishing.add(new Instr(Form.STRK, new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    122                 Fishing.add(new Instr(Form.FILL, Symbols.Msymb));
    123                 Fishing.add(new Instr(Form.EARC, new Arc2D.Double(-50,-50,100,100,15,140,Arc2D.OPEN)));
    124                 Fishing.add(new Instr(Form.EARC, new Arc2D.Double(-50,-50,100,100,-15,-140,Arc2D.OPEN)));
    125                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    126                 p.moveTo(-24,3); p.curveTo(12,24,30,15,48,0); p.curveTo(30,-15,12,-24,-24,-3);
    127                 p.lineTo(-45,-15); p.quadTo(-48, 0, -45, 15); p.closePath();
    128                 p.moveTo(25, 0); p.curveTo(25, 6, 34, 6, 34, 0); p.curveTo(34, -6, 25, -6, 25, 0); p.closePath();
    129                 Fishing.add(new Instr(Form.PGON, p));
    130         }
    131         public static final Symbol Harbour = new Symbol();
    132         static {
    133                 Harbour.add(new Instr(Form.STRK, new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    134                 Harbour.add(new Instr(Form.FILL, Symbols.Msymb));
    135                 Harbour.add(new Instr(Form.ELPS, new Ellipse2D.Double(-50,-50,100,100)));
    136                 Harbour.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.6, 0, 0, new Scheme(Symbols.Msymb), null)));
    137         }
    138         public static final Symbol HarbourMaster = new Symbol();
    139         static {
    140                 HarbourMaster.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    141                 HarbourMaster.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    142                 HarbourMaster.add(new Instr(Form.ELPS, new Ellipse2D.Double(-24,-28,48,56)));
    143                 HarbourMaster.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, null, null)));
    144         }
    145         public static final Symbol Hospital = new Symbol();
    146         static {
    147                 Hospital.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    148                 Hospital.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    149                 Hospital.add(new Instr(Form.ELPS, new Ellipse2D.Double(-28,-28,56,56)));
    150                 Path2D.Double p = new Path2D.Double(); p.moveTo(-26,-5); p.lineTo(-5,-5); p.lineTo(-5,-25); p.moveTo(5,-25); p.lineTo(5,-5); p.lineTo(25,-5);
    151                 p.moveTo(-25,5); p.lineTo(-5,5); p.lineTo(-5,25); p.moveTo(5,25); p.lineTo(5,5); p.lineTo(25,5);
    152                 Hospital.add(new Instr(Form.PLIN, p));
    153         }
    154         public static final Symbol LandingSteps = new Symbol();
    155         static {
    156                 LandingSteps.add(new Instr(Form.FILL, Symbols.Msymb));
    157                 Path2D.Double p = new Path2D.Double(); p.moveTo(-20,-10); p.lineTo(10,20); p.lineTo(20,20); p.lineTo(20,10);
    158                 p.lineTo(10,10); p.lineTo(10,0); p.lineTo(0,0); p.lineTo(0,-10); p.lineTo(-10,-10); p.lineTo(-10,-20); p.lineTo(-20,-20); p.closePath();
    159                 LandingSteps.add(new Instr(Form.PGON, p));
    160         }
    161         public static final Symbol Marina = new Symbol();
    162         static {
    163                 Marina.add(new Instr(Form.STRK, new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    164                 Marina.add(new Instr(Form.FILL, Symbols.Msymb));
    165                 Marina.add(new Instr(Form.EARC, new Arc2D.Double(-50.0,-50.0,100.0,100.0,215.0,-250.0,Arc2D.OPEN)));
    166                 Marina.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Yacht, 0.6, 0, 0, new Scheme(Symbols.Msymb), null)));
    167         }
    168         public static final Symbol MarinaNF = new Symbol();
    169         static {
    170                 MarinaNF.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Yacht, 0.6, 0, 0, new Scheme(Symbols.Msymb), null)));
    171         }
    172         public static final Symbol Pilot = new Symbol();
    173         static{
    174                 Pilot.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    175                 Pilot.add(new Instr(Form.FILL, new Color(0xd400d4)));
    176                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15,0); p.lineTo(0,-56); p.lineTo(15,0); p.lineTo(0,56); p.closePath();
    177                 Pilot.add(new Instr(Form.PGON, p));
    178                 Pilot.add(new Instr(Form.ELPS, new Ellipse2D.Double(-58,-58,116,116)));
    179         }
    180         public static final Symbol PortCrane = new Symbol();
    181         static {
    182                 PortCrane.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    183                 PortCrane.add(new Instr(Form.EARC, new Arc2D.Double(-36.0,-36.0,72.0,72.0,70.0,-320.0,Arc2D.OPEN)));
    184                 PortCrane.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-60)));
    185         }
    186         public static final Symbol Post = new Symbol();
    187         static {
    188                 Post.add(new Instr(Form.RSHP, new Ellipse2D.Double(-10,-10,20,20)));
    189         }
    190         public static final Symbol Rescue = new Symbol();
    191         static{
    192                 Rescue.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-50,40,100)));
    193                 Rescue.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    194                 Path2D.Double p = new Path2D.Double(); p.moveTo(-11,0); p.lineTo(0,-43); p.lineTo(11,0); p.lineTo(0,43); p.closePath();
    195                 Rescue.add(new Instr(Form.PGON, p));
    196                 Rescue.add(new Instr(Form.LINE, new Line2D.Double(-15,0,15,0)));
    197         }
    198         public static final Symbol SignalStation = new Symbol();
    199         static {
    200                 SignalStation.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    201                 SignalStation.add(new Instr(Form.ELPS, new Ellipse2D.Double(-25,-25,50,50)));
    202                 SignalStation.add(new Instr(Form.RSHP, new Ellipse2D.Double(-4,-4,8,8)));
    203         }
    204         public static final Symbol TideGauge = new Symbol();
    205         static {
    206                 TideGauge.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    207                 TideGauge.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    208                 TideGauge.add(new Instr(Form.LINE, new Line2D.Double(-10,0,-30,0)));
    209                 TideGauge.add(new Instr(Form.LINE, new Line2D.Double(10,0,30,0)));
    210                 TideGauge.add(new Instr(Form.LINE, new Line2D.Double(0,-10,0,-80)));
    211                 TideGauge.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    212                 TideGauge.add(new Instr(Form.LINE, new Line2D.Double(-15,-25,15,-25)));
    213                 TideGauge.add(new Instr(Form.LINE, new Line2D.Double(-25,-45,25,-45)));
    214                 TideGauge.add(new Instr(Form.LINE, new Line2D.Double(-15,-65,15,-65)));
    215         }
     27    // CHECKSTYLE.OFF: LineLength
     28    public static final Symbol Anchor = new Symbol();
     29    static {
     30        Anchor.add(new Instr(Form.BBOX, new Rectangle2D.Double(-60, -60, 120, 120)));
     31        Anchor.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     32        Anchor.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -59, 20, 20)));
     33        Path2D.Double p = new Path2D.Double(); p.moveTo(23.0, -40.0); p.lineTo(23.0, -30.0); p.lineTo(6.0, -30.0); p.lineTo(7.0, 31.0); p.quadTo(21.0, 29.0, 31.0, 22.0);
     34        p.lineTo(27.0, 18.0); p.lineTo(52.0, 0.0); p.lineTo(45.0, 35.0); p.lineTo(37.0, 28.0); p.quadTo(25.0, 39.0, 7.0, 43.0); p.lineTo(6.0, 51.0);
     35        p.lineTo(-6.0, 51.0); p.lineTo(-7.0, 43.0); p.quadTo(-25.0, 39.0, -37.0, 28.0); p.lineTo(-45.0, 35.0); p.lineTo(-52.0, 0.0); p.lineTo(-27.0, 18.0);
     36        p.lineTo(-31.0, 22.0); p.quadTo(-21.0, 29.0, -7.0, 31.0); p.lineTo(-6.0, -30.0); p.lineTo(-23.0, -30.0); p.lineTo(-23.0, -40.0); p.closePath();
     37        Anchor.add(new Instr(Form.PGON, p));
     38    }
     39
     40    public static final Symbol Yacht = new Symbol();
     41    static {
     42        Yacht.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     43        Path2D.Double p = new Path2D.Double(); p.moveTo(-65.0, 50.0); p.curveTo(-36.0, 97.0, 36.0, 97.0, 65.0, 50.0); p.lineTo(3.0, 50.0); p.lineTo(3.0, 40.0); p.lineTo(55.0, 30.0);
     44        p.curveTo(32.0, 4.0, 25.0, -15.0, 26.0, -52.0); p.lineTo(1.5, -40.0); p.lineTo(1.0, -64.0); p.lineTo(-2.0, -64.0); p.lineTo(-4.0, 50.0); p.closePath();
     45        p.moveTo(-50.0, 45.0); p.curveTo(-55.0, 3.0, -37.0, -28.5, -7.0, -46.0); p.curveTo(-28.0, -15.0, -26.0, 11.0, -20.5, 30.0); p.closePath();
     46        Yacht.add(new Instr(Form.PGON, p));
     47    }
     48
     49    public static final Symbol Anchorage = new Symbol();
     50    static {
     51        Anchorage.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.67, 0, 0, new Scheme(Symbols.Msymb), null)));
     52    }
     53
     54    public static final Symbol Bollard = new Symbol();
     55    static {
     56        Bollard.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     57        Bollard.add(new Instr(Form.FILL, Color.white));
     58        Ellipse2D.Double s = new Ellipse2D.Double(-10, -10, 20, 20);
     59        Bollard.add(new Instr(Form.RSHP, s));
     60        Bollard.add(new Instr(Form.FILL, Color.black));
     61        Bollard.add(new Instr(Form.ELPS, s));
     62    }
     63
     64    public static final Symbol CallPoint1 = new Symbol();
     65    static {
     66        CallPoint1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-50, -50, 100, 100)));
     67        CallPoint1.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     68        CallPoint1.add(new Instr(Form.FILL, Symbols.Msymb));
     69        CallPoint1.add(new Instr(Form.ELPS, new Ellipse2D.Double(-25, -25, 50, 50)));
     70        Path2D.Double p = new Path2D.Double(); p.moveTo(-16.0, -20.0); p.lineTo(0.0, -50.0); p.lineTo(16.0, -20.0);
     71        CallPoint1.add(new Instr(Form.PLIN, p));
     72    }
     73
     74    public static final Symbol CallPoint2 = new Symbol();
     75    static {
     76        CallPoint2.add(new Instr(Form.BBOX, new Rectangle2D.Double(-50, -50, 100, 100)));
     77        CallPoint2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(CallPoint1, 1.0, 0, 0, null, null)));
     78        Path2D.Double p = new Path2D.Double(); p.moveTo(-16.0, 20.0); p.lineTo(0.0, 50.0); p.lineTo(16.0, 20.0);
     79        CallPoint2.add(new Instr(Form.PLIN, p));
     80    }
     81
     82    public static final Symbol ContainerCrane = new Symbol();
     83    static {
     84        ContainerCrane.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     85        ContainerCrane.add(new Instr(Form.RSHP, new Rectangle2D.Double(-15, -65, 30, 100)));
     86        ContainerCrane.add(new Instr(Form.RECT, new Rectangle2D.Double(-40, -12.5, 80, 25)));
     87    }
     88
     89    public static final Symbol Customs = new Symbol();
     90    static {
     91        Customs.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     92        Customs.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     93        Customs.add(new Instr(Form.ELPS, new Ellipse2D.Double(-28, -28, 56, 56)));
     94        Customs.add(new Instr(Form.LINE, new Line2D.Double(-25, 5, 25, 5)));
     95        Customs.add(new Instr(Form.LINE, new Line2D.Double(-25, -5, 25, -5)));
     96    }
     97
     98    public static final Symbol DeviationDolphin = new Symbol();
     99    static {
     100        DeviationDolphin.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     101        Path2D.Double p = new Path2D.Double(); p.moveTo(-30.0, 0.0); p.lineTo(30.0, 0.0); p.moveTo(0.0, 0.0); p.lineTo(0.0, -40.0);
     102        p.moveTo(-20.0, 0.0); p.lineTo(-15.0, -32.0); p.lineTo(15.0, -32.0); p.lineTo(20.0, 0.0);
     103        DeviationDolphin.add(new Instr(Form.PLIN, p));
     104    }
     105
     106    public static final Symbol DistanceI = new Symbol();
     107    static {
     108        DistanceI.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     109        DistanceI.add(new Instr(Form.ELPS, new Ellipse2D.Double(-11, -11, 22, 22)));
     110    }
     111
     112    public static final Symbol DistanceU = new Symbol();
     113    static {
     114        DistanceU.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     115        DistanceU.add(new Instr(Form.FILL, Symbols.Msymb));
     116        DistanceU.add(new Instr(Form.ELPS, new Ellipse2D.Double(-11, -11, 22, 22)));
     117    }
     118
     119    public static final Symbol Dolphin = new Symbol();
     120    static {
     121        Dolphin.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     122        Dolphin.add(new Instr(Form.FILL, new Color(0xffd400)));
     123        Path2D.Double p = new Path2D.Double(); p.moveTo(3.8, -9.2); p.lineTo(9.2, -3.8); p.lineTo(9.2, 3.8); p.lineTo(3.8, 9.2);
     124        p.lineTo(-3.8, 9.2); p.lineTo(-9.2, 3.8); p.lineTo(-9.2, -3.8); p.lineTo(-3.8, -9.2); p.closePath();
     125        Dolphin.add(new Instr(Form.PGON, p));
     126        Dolphin.add(new Instr(Form.FILL, Color.black));
     127        Dolphin.add(new Instr(Form.PLIN, p));
     128    }
     129
     130    public static final Symbol Explosives = new Symbol();
     131    static {
     132        Explosives.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     133        Explosives.add(new Instr(Form.RSHP, new Ellipse2D.Double(-5, 25, 10, 10)));
     134        Explosives.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     135        Path2D.Double p = new Path2D.Double(); p.moveTo(-10, 20); p.lineTo(-13, 17); p.lineTo(-13, 8);
     136        p.moveTo(0, 10); p.lineTo(0, 0); p.lineTo(-8, -10);
     137        p.moveTo(10, 17); p.lineTo(18, -10); p.lineTo(10, -20);
     138        Explosives.add(new Instr(Form.PLIN, p));
     139    }
     140
     141    public static final Symbol Fishing = new Symbol();
     142    static {
     143        Fishing.add(new Instr(Form.STRK, new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     144        Fishing.add(new Instr(Form.FILL, Symbols.Msymb));
     145        Fishing.add(new Instr(Form.EARC, new Arc2D.Double(-50, -50, 100, 100, 15, 140, Arc2D.OPEN)));
     146        Fishing.add(new Instr(Form.EARC, new Arc2D.Double(-50, -50, 100, 100, -15, -140, Arc2D.OPEN)));
     147        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     148        p.moveTo(-24, 3); p.curveTo(12, 24, 30, 15, 48, 0); p.curveTo(30, -15, 12, -24, -24, -3);
     149        p.lineTo(-45, -15); p.quadTo(-48, 0, -45, 15); p.closePath();
     150        p.moveTo(25, 0); p.curveTo(25, 6, 34, 6, 34, 0); p.curveTo(34, -6, 25, -6, 25, 0); p.closePath();
     151        Fishing.add(new Instr(Form.PGON, p));
     152    }
     153
     154    public static final Symbol Harbour = new Symbol();
     155    static {
     156        Harbour.add(new Instr(Form.STRK, new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     157        Harbour.add(new Instr(Form.FILL, Symbols.Msymb));
     158        Harbour.add(new Instr(Form.ELPS, new Ellipse2D.Double(-50, -50, 100, 100)));
     159        Harbour.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.6, 0, 0, new Scheme(Symbols.Msymb), null)));
     160    }
     161
     162    public static final Symbol HarbourMaster = new Symbol();
     163    static {
     164        HarbourMaster.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     165        HarbourMaster.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     166        HarbourMaster.add(new Instr(Form.ELPS, new Ellipse2D.Double(-24, -28, 48, 56)));
     167        HarbourMaster.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, null, null)));
     168    }
     169
     170    public static final Symbol Hospital = new Symbol();
     171    static {
     172        Hospital.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     173        Hospital.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     174        Hospital.add(new Instr(Form.ELPS, new Ellipse2D.Double(-28, -28, 56, 56)));
     175        Path2D.Double p = new Path2D.Double(); p.moveTo(-26, -5); p.lineTo(-5, -5); p.lineTo(-5, -25); p.moveTo(5, -25); p.lineTo(5, -5); p.lineTo(25, -5);
     176        p.moveTo(-25, 5); p.lineTo(-5, 5); p.lineTo(-5, 25); p.moveTo(5, 25); p.lineTo(5, 5); p.lineTo(25, 5);
     177        Hospital.add(new Instr(Form.PLIN, p));
     178    }
     179
     180    public static final Symbol LandingSteps = new Symbol();
     181    static {
     182        LandingSteps.add(new Instr(Form.FILL, Symbols.Msymb));
     183        Path2D.Double p = new Path2D.Double(); p.moveTo(-20, -10); p.lineTo(10, 20); p.lineTo(20, 20); p.lineTo(20, 10);
     184        p.lineTo(10, 10); p.lineTo(10, 0); p.lineTo(0, 0); p.lineTo(0, -10); p.lineTo(-10, -10); p.lineTo(-10, -20); p.lineTo(-20, -20); p.closePath();
     185        LandingSteps.add(new Instr(Form.PGON, p));
     186    }
     187
     188    public static final Symbol Marina = new Symbol();
     189    static {
     190        Marina.add(new Instr(Form.STRK, new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     191        Marina.add(new Instr(Form.FILL, Symbols.Msymb));
     192        Marina.add(new Instr(Form.EARC, new Arc2D.Double(-50.0, -50.0, 100.0, 100.0, 215.0, -250.0, Arc2D.OPEN)));
     193        Marina.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Yacht, 0.6, 0, 0, new Scheme(Symbols.Msymb), null)));
     194    }
     195
     196    public static final Symbol MarinaNF = new Symbol();
     197    static {
     198        MarinaNF.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Yacht, 0.6, 0, 0, new Scheme(Symbols.Msymb), null)));
     199    }
     200
     201    public static final Symbol Pilot = new Symbol();
     202    static {
     203        Pilot.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     204        Pilot.add(new Instr(Form.FILL, new Color(0xd400d4)));
     205        Path2D.Double p = new Path2D.Double(); p.moveTo(-15, 0); p.lineTo(0, -56); p.lineTo(15, 0); p.lineTo(0, 56); p.closePath();
     206        Pilot.add(new Instr(Form.PGON, p));
     207        Pilot.add(new Instr(Form.ELPS, new Ellipse2D.Double(-58, -58, 116, 116)));
     208    }
     209
     210    public static final Symbol PortCrane = new Symbol();
     211    static {
     212        PortCrane.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     213        PortCrane.add(new Instr(Form.EARC, new Arc2D.Double(-36.0, -36.0, 72.0, 72.0, 70.0, -320.0, Arc2D.OPEN)));
     214        PortCrane.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -60)));
     215    }
     216
     217    public static final Symbol Post = new Symbol();
     218    static {
     219        Post.add(new Instr(Form.RSHP, new Ellipse2D.Double(-10, -10, 20, 20)));
     220    }
     221
     222    public static final Symbol Rescue = new Symbol();
     223    static {
     224        Rescue.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -50, 40, 100)));
     225        Rescue.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     226        Path2D.Double p = new Path2D.Double(); p.moveTo(-11, 0); p.lineTo(0, -43); p.lineTo(11, 0); p.lineTo(0, 43); p.closePath();
     227        Rescue.add(new Instr(Form.PGON, p));
     228        Rescue.add(new Instr(Form.LINE, new Line2D.Double(-15, 0, 15, 0)));
     229    }
     230
     231    public static final Symbol SignalStation = new Symbol();
     232    static {
     233        SignalStation.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     234        SignalStation.add(new Instr(Form.ELPS, new Ellipse2D.Double(-25, -25, 50, 50)));
     235        SignalStation.add(new Instr(Form.RSHP, new Ellipse2D.Double(-4, -4, 8, 8)));
     236    }
     237
     238    public static final Symbol TideGauge = new Symbol();
     239    static {
     240        TideGauge.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     241        TideGauge.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     242        TideGauge.add(new Instr(Form.LINE, new Line2D.Double(-10, 0, -30, 0)));
     243        TideGauge.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 30, 0)));
     244        TideGauge.add(new Instr(Form.LINE, new Line2D.Double(0, -10, 0, -80)));
     245        TideGauge.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     246        TideGauge.add(new Instr(Form.LINE, new Line2D.Double(-15, -25, 15, -25)));
     247        TideGauge.add(new Instr(Form.LINE, new Line2D.Double(-25, -45, 25, -45)));
     248        TideGauge.add(new Instr(Form.LINE, new Line2D.Double(-15, -65, 15, -65)));
     249    }
    216250}
  • applications/editors/josm/plugins/seachart/src/symbols/Landmarks.java

    r32393 r32394  
    1111
    1212import java.awt.BasicStroke;
    13 import java.awt.geom.*;
     13import java.awt.geom.Arc2D;
     14import java.awt.geom.Ellipse2D;
     15import java.awt.geom.Line2D;
     16import java.awt.geom.Path2D;
     17import java.awt.geom.Rectangle2D;
    1418import java.util.EnumMap;
    1519
    16 import s57.S57val.*;
    17 import symbols.Symbols.*;
    18 
     20import s57.S57val.CatLMK;
     21import s57.S57val.FncFNC;
     22import symbols.Symbols.Form;
     23import symbols.Symbols.Instr;
     24import symbols.Symbols.Symbol;
    1925
    2026public class Landmarks {
    21         private static final Symbol Base = new Symbol();
    22         static {
    23                 Base.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    24                 Base.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
    25                 Base.add(new Instr(Form.LINE, new Line2D.Double(-35,0,-10,0)));
    26                 Base.add(new Instr(Form.LINE, new Line2D.Double(10,0,35,0)));
    27         }
    28        
    29         public static final Symbol Chimney = new Symbol();
    30         static {
    31                 Chimney.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
    32                 Chimney.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    33                 Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0,0.0); p.lineTo(-10.0,-120.0); p.lineTo(10.0,-120.0); p.lineTo(25.0,0.0);
    34                 p.moveTo(-10.0,-128.0); p.curveTo(-13.0,-147.0,15.0,-159.0,20.0,-148.0);
    35                 p.moveTo(16.0,-152.3); p.curveTo(58.0,-194.0,98.0,-87.0,16.0,-132.0);
    36                 p.moveTo(11.0,-128.0); p.curveTo(13.4,-132.0,20.0,-132.0,20.0,-136.0);
    37                 Chimney.add(new Instr(Form.PLIN, p));
    38         }
    39         public static final Symbol Church = new Symbol();
    40         static {
    41                 Path2D.Double p = new Path2D.Double(); p.moveTo(10.0,-10.0); p.lineTo(37.0,-10.0); p.quadTo(48.0,-10.0,48.0,-21.0); p.lineTo(50.0,-21.0); p.lineTo(50.0,21.0);
    42                 p.lineTo(48.0,21.0); p.quadTo(48.0,10.0,37.0,10.0); p.lineTo(10.0,10.0); p.lineTo(10.0,37.0); p.quadTo(10.0,48.0,21.0,48.0); p.lineTo(21.0,50.0);
    43                 p.lineTo(-21.0,50.0); p.lineTo(-21.0,48.0); p.quadTo(-10.0,48.0,-10.0,37.0); p.lineTo(-10.0,10.0); p.lineTo(-37.0,10.0); p.quadTo(-48.0,10.0,-48.0,21.0);
    44                 p.lineTo(-50.0,21.0); p.lineTo(-50.0,-21.0); p.lineTo(-48.0,-21.0); p.quadTo(-48.0,-10.0,-37.0,-10.0); p.lineTo(-10.0,-10.0); p.lineTo(-10.0,-37.0);
    45                 p.quadTo(-10.0,-48.0,-21.0,-48.0); p.lineTo(-21.0,-50.0); p.lineTo(21.0,-50.0); p.lineTo(21.0,-48.0); p.quadTo(10.0,-48.0,10.0,-37.0); p.closePath();
    46                 Church.add(new Instr(Form.PGON, p));
    47         }
    48         public static final Symbol ChurchTower = new Symbol();
    49         static {
    50                 ChurchTower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    51                 ChurchTower.add(new Instr(Form.RECT, new Rectangle2D.Double(-36,-36,72,72)));
    52                 ChurchTower.add(new Instr(Form.ELPS, new Ellipse2D.Double(-2,-2,4,4)));
    53         }
    54         public static final Symbol Cross = new Symbol();
    55         static {
    56                 Cross.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
    57                 Cross.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    58                 Cross.add(new Instr(Form.LINE, new Line2D.Double(0,-10,0,-150)));
    59                 Cross.add(new Instr(Form.LINE, new Line2D.Double(-30,-115,30,-115)));
    60         }
    61         public static final Symbol DishAerial = new Symbol();
    62         static {
    63                 DishAerial.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
    64                 DishAerial.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)));
    65                 Path2D.Double p = new Path2D.Double(); p.moveTo(-7.8,-6.0); p.lineTo(0.0,-62.0); p.lineTo(7.8,-6.0); p.moveTo(18.0,-109.0); p.lineTo(25.0,-113.0);
    66                 p.moveTo(-9.5,-157.0); p.curveTo(-60.7,-125.5,-16.5,-33.9,44.9,-61.7); p.closePath();
    67                 DishAerial.add(new Instr(Form.PLIN, p));
    68         }
    69         public static final Symbol Dome = new Symbol();
    70         static {
    71                 Dome.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    72                 Dome.add(new Instr(Form.ELPS, new Ellipse2D.Double(-36,-36,72,72)));
    73                 Dome.add(new Instr(Form.RSHP, new Ellipse2D.Double(-4,-4,8,8)));
    74         }
    75         public static final Symbol Flagstaff = new Symbol();
    76         static {
    77                 Flagstaff.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
    78                 Flagstaff.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    79                 Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(0.0,-150.0); p.moveTo(0.0,-140.0); p.lineTo(40.0,-140.0); p.lineTo(40.0,-100.0); p.lineTo(0.0,-100.0);
    80                 Flagstaff.add(new Instr(Form.PLIN, p));
    81         }
    82         public static final Symbol FlareStack = new Symbol();
    83         static {
    84                 FlareStack.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
    85                 FlareStack.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    86                 Path2D.Double p = new Path2D.Double(); p.moveTo(-7.8,-6.0); p.lineTo(-7.8,-100.0); p.lineTo(7.8,-100.0); p.lineTo(7.8,-6.0);
    87                 FlareStack.add(new Instr(Form.PLIN, p));
    88                 FlareStack.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    89                 p = new Path2D.Double(); p.moveTo(21.6,-169.6); p.curveTo(-22.0,-132.4,-27.4,-103.5,3.0,-100.0); p.curveTo(39.0,-118.0,-4.0,-141.0,21.6,-169.6);
    90                 FlareStack.add(new Instr(Form.PLIN, p));
    91         }
    92         public static final Symbol LandTower = new Symbol();
    93         static {
    94                 LandTower.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
    95                 LandTower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    96                 LandTower.add(new Instr(Form.LINE, new Line2D.Double(-25,0,-15,-120)));
    97                 LandTower.add(new Instr(Form.LINE, new Line2D.Double(25,0,15,-120)));
    98                 LandTower.add(new Instr(Form.RECT, new Rectangle2D.Double(-15,-150,30,30)));
    99         }
    100         public static final Symbol Mast = new Symbol();
    101         static {
    102                 Mast.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
    103                 Mast.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)));
    104                 Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0,0.0); p.lineTo(0.0,-150.0); p.lineTo(25.0,0.0);
    105                 Mast.add(new Instr(Form.PLIN, p));
    106         }
    107         public static final Symbol Monument = new Symbol();
    108         static {
    109                 Monument.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
    110                 Monument.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    111                 Monument.add(new Instr(Form.LINE, new Line2D.Double(-25,0,-15,-105)));
    112                 Monument.add(new Instr(Form.LINE, new Line2D.Double(25,0,15,-105)));
    113                 Monument.add(new Instr(Form.EARC, new Arc2D.Double(-25.0,-150.0,50.0,50.0,233.0,-285.0,Arc2D.OPEN)));
    114         }
    115         public static final Symbol Platform = new Symbol();
    116         static {
    117                 Platform.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    118                 Platform.add(new Instr(Form.RECT, new Rectangle2D.Double(-48,-48,96,96)));
    119                 Platform.add(new Instr(Form.RSHP, new Ellipse2D.Double(-4,-4,8,8)));
    120         }
    121         public static final Symbol RadioTV = new Symbol();
    122         static {
    123                 RadioTV.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL)));
    124                 RadioTV.add(new Instr(Form.EARC, new Arc2D.Double(-30.0,-180.0,60.0,60.0,45.0,-90.0,Arc2D.OPEN)));
    125                 RadioTV.add(new Instr(Form.EARC, new Arc2D.Double(-45.0,-195.0,90.0,90.0,45.0,-90.0,Arc2D.OPEN)));
    126                 RadioTV.add(new Instr(Form.EARC, new Arc2D.Double(-30.0,-180.0,60.0,60.0,225.0,-90.0,Arc2D.OPEN)));
    127                 RadioTV.add(new Instr(Form.EARC, new Arc2D.Double(-45.0,-195.0,90.0,90.0,225.0,-90.0,Arc2D.OPEN)));
    128         }
    129         public static final Symbol Spire = new Symbol();
    130         static {
    131                 Spire.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    132                 Spire.add(new Instr(Form.ELPS, new Ellipse2D.Double(-25,-25,50,50)));
    133                 Spire.add(new Instr(Form.RSHP, new Ellipse2D.Double(-4,-4,8,8)));
    134         }
    135         public static final Symbol Minaret = new Symbol();
    136         static {
    137                 Minaret.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Spire, 1.0, 0, 0, null, null)));
    138                 Minaret.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    139                 Minaret.add(new Instr(Form.LINE, new Line2D.Double(0,-25,0,-50)));
    140                 Minaret.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    141                 Minaret.add(new Instr(Form.EARC, new Arc2D.Double(-40.0,-110.0,80.0,60.0,180.0,180.0,Arc2D.OPEN)));
    142         }
    143         public static final Symbol Temple = new Symbol();
    144         static {
    145                 Temple.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    146                 Temple.add(new Instr(Form.RECT, new Rectangle2D.Double(-25,-15,50,30)));
    147                 Temple.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    148                 Temple.add(new Instr(Form.LINE, new Line2D.Double(-35,-21,35,21)));
    149                 Temple.add(new Instr(Form.LINE, new Line2D.Double(-35,21,35,-21)));
    150         }
    151         public static final Symbol WaterTower = new Symbol();
    152         static {
    153                 WaterTower.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
    154                 WaterTower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    155                 WaterTower.add(new Instr(Form.LINE, new Line2D.Double(-25,0,-15,-120)));
    156                 WaterTower.add(new Instr(Form.LINE, new Line2D.Double(25,0,15,-120)));
    157                 WaterTower.add(new Instr(Form.RECT, new Rectangle2D.Double(-25,-150,50,30)));
    158         }
    159         public static final Symbol WindMotor = new Symbol();
    160         static {
    161                 WindMotor.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
    162                 WindMotor.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    163                 WindMotor.add(new Instr(Form.LINE, new Line2D.Double(0,-10,0,-90)));
    164                 WindMotor.add(new Instr(Form.LINE, new Line2D.Double(0,-90,30,-90)));
    165                 WindMotor.add(new Instr(Form.LINE, new Line2D.Double(0,-90,-14,-116.6)));
    166                 WindMotor.add(new Instr(Form.LINE, new Line2D.Double(0,-90,-14.3,-66.7)));
    167         }
    168         public static final Symbol Windmill = new Symbol();
    169         static {
    170                 Windmill.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    171                 Windmill.add(new Instr(Form.ELPS, new Ellipse2D.Double(-12,-12,24,24)));
    172                 Windmill.add(new Instr(Form.LINE, new Line2D.Double(-30,-42,30,10)));
    173                 Windmill.add(new Instr(Form.LINE, new Line2D.Double(-30,10,30,-42)));
    174         }
    175         public static final Symbol Windsock = new Symbol();
    176         static {
    177                 Windsock.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
    178                 Windsock.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    179                 Windsock.add(new Instr(Form.LINE, new Line2D.Double(0,-10,0,-100)));
    180                 Windsock.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    181                 Windsock.add(new Instr(Form.LINE, new Line2D.Double(0,-100,0,-150)));
    182                 Windsock.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    183                 Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-100.0); p.lineTo(10.0,-100.0); p.lineTo(10.0,-150.0); p.lineTo(0.0,-150.0);
    184                 p.moveTo(10.0,-150.0); p.lineTo(50.0,-145.0); p.lineTo(120.0,-70.0); p.quadTo(120.0,-55.0,105.0,-55.0);
    185                 p.lineTo(55,-95); p.lineTo(40,-102); p.lineTo(10,-100); p.moveTo(40,-102); p.lineTo(50,-120); p.moveTo(55,-95); p.lineTo(75,-97);
    186                 Windsock.add(new Instr(Form.PLIN, p));
    187         }
    188        
    189         public static final EnumMap<CatLMK, Symbol> Shapes = new EnumMap<>(CatLMK.class);
    190         static {
    191                 Shapes.put(CatLMK.LMK_CARN, Beacons.Cairn); Shapes.put(CatLMK.LMK_CHMY, Landmarks.Chimney);
    192                 Shapes.put(CatLMK.LMK_DISH, Landmarks.DishAerial); Shapes.put(CatLMK.LMK_FLAG, Landmarks.Flagstaff); Shapes.put(CatLMK.LMK_FLAR, Landmarks.FlareStack);
    193                 Shapes.put(CatLMK.LMK_MAST, Landmarks.Mast); Shapes.put(CatLMK.LMK_WNDS, Landmarks.Windsock); Shapes.put(CatLMK.LMK_MNMT, Landmarks.Monument);
    194                 Shapes.put(CatLMK.LMK_CLMN, Landmarks.Monument); Shapes.put(CatLMK.LMK_MEML, Landmarks.Monument); Shapes.put(CatLMK.LMK_OBLK, Landmarks.Monument);
    195                 Shapes.put(CatLMK.LMK_STAT, Landmarks.Monument); Shapes.put(CatLMK.LMK_CROS, Landmarks.Cross); Shapes.put(CatLMK.LMK_DOME, Landmarks.Dome);
    196                 Shapes.put(CatLMK.LMK_RADR, Landmarks.Mast); Shapes.put(CatLMK.LMK_TOWR, Landmarks.LandTower); Shapes.put(CatLMK.LMK_WNDM, Landmarks.Windmill);
    197                 Shapes.put(CatLMK.LMK_WNDG, Landmarks.WindMotor); Shapes.put(CatLMK.LMK_SPIR, Landmarks.Spire); Shapes.put(CatLMK.LMK_BLDR, Beacons.Cairn);
    198         }
    199 
    200         public static final EnumMap<FncFNC, Symbol> Funcs = new EnumMap<>(FncFNC.class);
    201         static {
    202                 Funcs.put(FncFNC.FNC_CHCH, Landmarks.Church); Funcs.put(FncFNC.FNC_CHPL, Landmarks.Church); Funcs.put(FncFNC.FNC_TMPL, Landmarks.Temple);
    203                 Funcs.put(FncFNC.FNC_PGDA, Landmarks.Temple); Funcs.put(FncFNC.FNC_SHSH, Landmarks.Temple); Funcs.put(FncFNC.FNC_BTMP, Landmarks.Temple);
    204                 Funcs.put(FncFNC.FNC_MOSQ, Landmarks.Minaret); Funcs.put(FncFNC.FNC_MRBT, Landmarks.Spire); Funcs.put(FncFNC.FNC_COMM, Landmarks.RadioTV);
    205                 Funcs.put(FncFNC.FNC_TV, Landmarks.RadioTV); Funcs.put(FncFNC.FNC_RADO, Landmarks.RadioTV); Funcs.put(FncFNC.FNC_RADR, Landmarks.RadioTV);
    206                 Funcs.put(FncFNC.FNC_LGHT, Beacons.LightMajor); Funcs.put(FncFNC.FNC_MCWV, Landmarks.RadioTV); Funcs.put(FncFNC.FNC_HBRM, Harbours.HarbourMaster);
    207                 Funcs.put(FncFNC.FNC_CSTM, Harbours.Customs); Funcs.put(FncFNC.FNC_HLTH, Harbours.Hospital); Funcs.put(FncFNC.FNC_HOSP, Harbours.Hospital);
    208         }
     27    // CHECKSTYLE.OFF: LineLength
     28    private static final Symbol Base = new Symbol();
     29    static {
     30        Base.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     31        Base.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10, -10, 20, 20)));
     32        Base.add(new Instr(Form.LINE, new Line2D.Double(-35, 0, -10, 0)));
     33        Base.add(new Instr(Form.LINE, new Line2D.Double(10, 0, 35, 0)));
     34    }
     35
     36    public static final Symbol Chimney = new Symbol();
     37    static {
     38        Chimney.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
     39        Chimney.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     40        Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0, 0.0); p.lineTo(-10.0, -120.0); p.lineTo(10.0, -120.0); p.lineTo(25.0, 0.0);
     41        p.moveTo(-10.0, -128.0); p.curveTo(-13.0, -147.0, 15.0, -159.0, 20.0, -148.0);
     42        p.moveTo(16.0, -152.3); p.curveTo(58.0, -194.0, 98.0, -87.0, 16.0, -132.0);
     43        p.moveTo(11.0, -128.0); p.curveTo(13.4, -132.0, 20.0, -132.0, 20.0, -136.0);
     44        Chimney.add(new Instr(Form.PLIN, p));
     45    }
     46
     47    public static final Symbol Church = new Symbol();
     48    static {
     49        Path2D.Double p = new Path2D.Double(); p.moveTo(10.0, -10.0); p.lineTo(37.0, -10.0); p.quadTo(48.0, -10.0, 48.0, -21.0); p.lineTo(50.0, -21.0); p.lineTo(50.0, 21.0);
     50        p.lineTo(48.0, 21.0); p.quadTo(48.0, 10.0, 37.0, 10.0); p.lineTo(10.0, 10.0); p.lineTo(10.0, 37.0); p.quadTo(10.0, 48.0, 21.0, 48.0); p.lineTo(21.0, 50.0);
     51        p.lineTo(-21.0, 50.0); p.lineTo(-21.0, 48.0); p.quadTo(-10.0, 48.0, -10.0, 37.0); p.lineTo(-10.0, 10.0); p.lineTo(-37.0, 10.0); p.quadTo(-48.0, 10.0, -48.0, 21.0);
     52        p.lineTo(-50.0, 21.0); p.lineTo(-50.0, -21.0); p.lineTo(-48.0, -21.0); p.quadTo(-48.0, -10.0, -37.0, -10.0); p.lineTo(-10.0, -10.0); p.lineTo(-10.0, -37.0);
     53        p.quadTo(-10.0, -48.0, -21.0, -48.0); p.lineTo(-21.0, -50.0); p.lineTo(21.0, -50.0); p.lineTo(21.0, -48.0); p.quadTo(10.0, -48.0, 10.0, -37.0); p.closePath();
     54        Church.add(new Instr(Form.PGON, p));
     55    }
     56
     57    public static final Symbol ChurchTower = new Symbol();
     58    static {
     59        ChurchTower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     60        ChurchTower.add(new Instr(Form.RECT, new Rectangle2D.Double(-36, -36, 72, 72)));
     61        ChurchTower.add(new Instr(Form.ELPS, new Ellipse2D.Double(-2, -2, 4, 4)));
     62    }
     63
     64    public static final Symbol Cross = new Symbol();
     65    static {
     66        Cross.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
     67        Cross.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     68        Cross.add(new Instr(Form.LINE, new Line2D.Double(0, -10, 0, -150)));
     69        Cross.add(new Instr(Form.LINE, new Line2D.Double(-30, -115, 30, -115)));
     70    }
     71
     72    public static final Symbol DishAerial = new Symbol();
     73    static {
     74        DishAerial.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
     75        DishAerial.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)));
     76        Path2D.Double p = new Path2D.Double(); p.moveTo(-7.8, -6.0); p.lineTo(0.0, -62.0); p.lineTo(7.8, -6.0); p.moveTo(18.0, -109.0); p.lineTo(25.0, -113.0);
     77        p.moveTo(-9.5, -157.0); p.curveTo(-60.7, -125.5, -16.5, -33.9, 44.9, -61.7); p.closePath();
     78        DishAerial.add(new Instr(Form.PLIN, p));
     79    }
     80
     81    public static final Symbol Dome = new Symbol();
     82    static {
     83        Dome.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     84        Dome.add(new Instr(Form.ELPS, new Ellipse2D.Double(-36, -36, 72, 72)));
     85        Dome.add(new Instr(Form.RSHP, new Ellipse2D.Double(-4, -4, 8, 8)));
     86    }
     87
     88    public static final Symbol Flagstaff = new Symbol();
     89    static {
     90        Flagstaff.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
     91        Flagstaff.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     92        Path2D.Double p = new Path2D.Double(); p.moveTo(0.0, -10.0); p.lineTo(0.0, -150.0); p.moveTo(0.0, -140.0); p.lineTo(40.0, -140.0); p.lineTo(40.0, -100.0); p.lineTo(0.0, -100.0);
     93        Flagstaff.add(new Instr(Form.PLIN, p));
     94    }
     95
     96    public static final Symbol FlareStack = new Symbol();
     97    static {
     98        FlareStack.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
     99        FlareStack.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     100        Path2D.Double p = new Path2D.Double(); p.moveTo(-7.8, -6.0); p.lineTo(-7.8, -100.0); p.lineTo(7.8, -100.0); p.lineTo(7.8, -6.0);
     101        FlareStack.add(new Instr(Form.PLIN, p));
     102        FlareStack.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     103        p = new Path2D.Double(); p.moveTo(21.6, -169.6); p.curveTo(-22.0, -132.4, -27.4, -103.5, 3.0, -100.0); p.curveTo(39.0, -118.0, -4.0, -141.0, 21.6, -169.6);
     104        FlareStack.add(new Instr(Form.PLIN, p));
     105    }
     106
     107    public static final Symbol LandTower = new Symbol();
     108    static {
     109        LandTower.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
     110        LandTower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     111        LandTower.add(new Instr(Form.LINE, new Line2D.Double(-25, 0, -15, -120)));
     112        LandTower.add(new Instr(Form.LINE, new Line2D.Double(25, 0, 15, -120)));
     113        LandTower.add(new Instr(Form.RECT, new Rectangle2D.Double(-15, -150, 30, 30)));
     114    }
     115
     116    public static final Symbol Mast = new Symbol();
     117    static {
     118        Mast.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
     119        Mast.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)));
     120        Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0, 0.0); p.lineTo(0.0, -150.0); p.lineTo(25.0, 0.0);
     121        Mast.add(new Instr(Form.PLIN, p));
     122    }
     123
     124    public static final Symbol Monument = new Symbol();
     125    static {
     126        Monument.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
     127        Monument.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     128        Monument.add(new Instr(Form.LINE, new Line2D.Double(-25, 0, -15, -105)));
     129        Monument.add(new Instr(Form.LINE, new Line2D.Double(25, 0, 15, -105)));
     130        Monument.add(new Instr(Form.EARC, new Arc2D.Double(-25.0, -150.0, 50.0, 50.0, 233.0, -285.0, Arc2D.OPEN)));
     131    }
     132
     133    public static final Symbol Platform = new Symbol();
     134    static {
     135        Platform.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     136        Platform.add(new Instr(Form.RECT, new Rectangle2D.Double(-48, -48, 96, 96)));
     137        Platform.add(new Instr(Form.RSHP, new Ellipse2D.Double(-4, -4, 8, 8)));
     138    }
     139
     140    public static final Symbol RadioTV = new Symbol();
     141    static {
     142        RadioTV.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL)));
     143        RadioTV.add(new Instr(Form.EARC, new Arc2D.Double(-30.0, -180.0, 60.0, 60.0, 45.0, -90.0, Arc2D.OPEN)));
     144        RadioTV.add(new Instr(Form.EARC, new Arc2D.Double(-45.0, -195.0, 90.0, 90.0, 45.0, -90.0, Arc2D.OPEN)));
     145        RadioTV.add(new Instr(Form.EARC, new Arc2D.Double(-30.0, -180.0, 60.0, 60.0, 225.0, -90.0, Arc2D.OPEN)));
     146        RadioTV.add(new Instr(Form.EARC, new Arc2D.Double(-45.0, -195.0, 90.0, 90.0, 225.0, -90.0, Arc2D.OPEN)));
     147    }
     148
     149    public static final Symbol Spire = new Symbol();
     150    static {
     151        Spire.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     152        Spire.add(new Instr(Form.ELPS, new Ellipse2D.Double(-25, -25, 50, 50)));
     153        Spire.add(new Instr(Form.RSHP, new Ellipse2D.Double(-4, -4, 8, 8)));
     154    }
     155
     156    public static final Symbol Minaret = new Symbol();
     157    static {
     158        Minaret.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Spire, 1.0, 0, 0, null, null)));
     159        Minaret.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     160        Minaret.add(new Instr(Form.LINE, new Line2D.Double(0, -25, 0, -50)));
     161        Minaret.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     162        Minaret.add(new Instr(Form.EARC, new Arc2D.Double(-40.0, -110.0, 80.0, 60.0, 180.0, 180.0, Arc2D.OPEN)));
     163    }
     164
     165    public static final Symbol Temple = new Symbol();
     166    static {
     167        Temple.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     168        Temple.add(new Instr(Form.RECT, new Rectangle2D.Double(-25, -15, 50, 30)));
     169        Temple.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     170        Temple.add(new Instr(Form.LINE, new Line2D.Double(-35, -21, 35, 21)));
     171        Temple.add(new Instr(Form.LINE, new Line2D.Double(-35, 21, 35, -21)));
     172    }
     173
     174    public static final Symbol WaterTower = new Symbol();
     175    static {
     176        WaterTower.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
     177        WaterTower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     178        WaterTower.add(new Instr(Form.LINE, new Line2D.Double(-25, 0, -15, -120)));
     179        WaterTower.add(new Instr(Form.LINE, new Line2D.Double(25, 0, 15, -120)));
     180        WaterTower.add(new Instr(Form.RECT, new Rectangle2D.Double(-25, -150, 50, 30)));
     181    }
     182
     183    public static final Symbol WindMotor = new Symbol();
     184    static {
     185        WindMotor.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
     186        WindMotor.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     187        WindMotor.add(new Instr(Form.LINE, new Line2D.Double(0, -10, 0, -90)));
     188        WindMotor.add(new Instr(Form.LINE, new Line2D.Double(0, -90, 30, -90)));
     189        WindMotor.add(new Instr(Form.LINE, new Line2D.Double(0, -90, -14, -116.6)));
     190        WindMotor.add(new Instr(Form.LINE, new Line2D.Double(0, -90, -14.3, -66.7)));
     191    }
     192
     193    public static final Symbol Windmill = new Symbol();
     194    static {
     195        Windmill.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     196        Windmill.add(new Instr(Form.ELPS, new Ellipse2D.Double(-12, -12, 24, 24)));
     197        Windmill.add(new Instr(Form.LINE, new Line2D.Double(-30, -42, 30, 10)));
     198        Windmill.add(new Instr(Form.LINE, new Line2D.Double(-30, 10, 30, -42)));
     199    }
     200
     201    public static final Symbol Windsock = new Symbol();
     202    static {
     203        Windsock.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
     204        Windsock.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     205        Windsock.add(new Instr(Form.LINE, new Line2D.Double(0, -10, 0, -100)));
     206        Windsock.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     207        Windsock.add(new Instr(Form.LINE, new Line2D.Double(0, -100, 0, -150)));
     208        Windsock.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     209        Path2D.Double p = new Path2D.Double(); p.moveTo(0.0, -100.0); p.lineTo(10.0, -100.0); p.lineTo(10.0, -150.0); p.lineTo(0.0, -150.0);
     210        p.moveTo(10.0, -150.0); p.lineTo(50.0, -145.0); p.lineTo(120.0, -70.0); p.quadTo(120.0, -55.0, 105.0, -55.0);
     211        p.lineTo(55, -95); p.lineTo(40, -102); p.lineTo(10, -100); p.moveTo(40, -102); p.lineTo(50, -120); p.moveTo(55, -95); p.lineTo(75, -97);
     212        Windsock.add(new Instr(Form.PLIN, p));
     213    }
     214
     215    public static final EnumMap<CatLMK, Symbol> Shapes = new EnumMap<>(CatLMK.class);
     216    static {
     217        Shapes.put(CatLMK.LMK_CARN, Beacons.Cairn); Shapes.put(CatLMK.LMK_CHMY, Landmarks.Chimney);
     218        Shapes.put(CatLMK.LMK_DISH, Landmarks.DishAerial); Shapes.put(CatLMK.LMK_FLAG, Landmarks.Flagstaff); Shapes.put(CatLMK.LMK_FLAR, Landmarks.FlareStack);
     219        Shapes.put(CatLMK.LMK_MAST, Landmarks.Mast); Shapes.put(CatLMK.LMK_WNDS, Landmarks.Windsock); Shapes.put(CatLMK.LMK_MNMT, Landmarks.Monument);
     220        Shapes.put(CatLMK.LMK_CLMN, Landmarks.Monument); Shapes.put(CatLMK.LMK_MEML, Landmarks.Monument); Shapes.put(CatLMK.LMK_OBLK, Landmarks.Monument);
     221        Shapes.put(CatLMK.LMK_STAT, Landmarks.Monument); Shapes.put(CatLMK.LMK_CROS, Landmarks.Cross); Shapes.put(CatLMK.LMK_DOME, Landmarks.Dome);
     222        Shapes.put(CatLMK.LMK_RADR, Landmarks.Mast); Shapes.put(CatLMK.LMK_TOWR, Landmarks.LandTower); Shapes.put(CatLMK.LMK_WNDM, Landmarks.Windmill);
     223        Shapes.put(CatLMK.LMK_WNDG, Landmarks.WindMotor); Shapes.put(CatLMK.LMK_SPIR, Landmarks.Spire); Shapes.put(CatLMK.LMK_BLDR, Beacons.Cairn);
     224    }
     225
     226    public static final EnumMap<FncFNC, Symbol> Funcs = new EnumMap<>(FncFNC.class);
     227    static {
     228        Funcs.put(FncFNC.FNC_CHCH, Landmarks.Church); Funcs.put(FncFNC.FNC_CHPL, Landmarks.Church); Funcs.put(FncFNC.FNC_TMPL, Landmarks.Temple);
     229        Funcs.put(FncFNC.FNC_PGDA, Landmarks.Temple); Funcs.put(FncFNC.FNC_SHSH, Landmarks.Temple); Funcs.put(FncFNC.FNC_BTMP, Landmarks.Temple);
     230        Funcs.put(FncFNC.FNC_MOSQ, Landmarks.Minaret); Funcs.put(FncFNC.FNC_MRBT, Landmarks.Spire); Funcs.put(FncFNC.FNC_COMM, Landmarks.RadioTV);
     231        Funcs.put(FncFNC.FNC_TV, Landmarks.RadioTV); Funcs.put(FncFNC.FNC_RADO, Landmarks.RadioTV); Funcs.put(FncFNC.FNC_RADR, Landmarks.RadioTV);
     232        Funcs.put(FncFNC.FNC_LGHT, Beacons.LightMajor); Funcs.put(FncFNC.FNC_MCWV, Landmarks.RadioTV); Funcs.put(FncFNC.FNC_HBRM, Harbours.HarbourMaster);
     233        Funcs.put(FncFNC.FNC_CSTM, Harbours.Customs); Funcs.put(FncFNC.FNC_HLTH, Harbours.Hospital); Funcs.put(FncFNC.FNC_HOSP, Harbours.Hospital);
     234    }
    209235}
  • applications/editors/josm/plugins/seachart/src/symbols/Notices.java

    r32393 r32394  
    1313import java.awt.Color;
    1414import java.awt.Font;
    15 import java.awt.geom.*;
     15import java.awt.geom.AffineTransform;
     16import java.awt.geom.Arc2D;
     17import java.awt.geom.Ellipse2D;
     18import java.awt.geom.GeneralPath;
     19import java.awt.geom.Line2D;
     20import java.awt.geom.Path2D;
     21import java.awt.geom.Rectangle2D;
     22import java.awt.geom.RoundRectangle2D;
    1623import java.util.ArrayList;
    1724import java.util.EnumMap;
    1825
    19 import s57.S57val.*;
    20 import symbols.Symbols.*;
     26import s57.S57val.BnkWTW;
     27import s57.S57val.CatNMK;
     28import s57.S57val.MarSYS;
     29import symbols.Symbols.Caption;
     30import symbols.Symbols.Delta;
     31import symbols.Symbols.Form;
     32import symbols.Symbols.Handle;
     33import symbols.Symbols.Instr;
     34import symbols.Symbols.Scheme;
     35import symbols.Symbols.Symbol;
    2136
    2237public class Notices {
    23         private static final Symbol Bollard = new Symbol();
    24         static {
    25                 Path2D.Double p = new Path2D.Double(); p.moveTo(20,21); p.lineTo(20,16.5); p.lineTo(11.6,16.5); p.quadTo(9.1,9.6,8.3,2.0); p.lineTo(-8.0,-0.3); p.quadTo(-8.6,9.0,-11.3,16.5);
    26                 p.lineTo(-23.5,16.5); p.lineTo(-23.5,21.0); p.closePath(); p.moveTo(23.8,3.0); p.lineTo(-10.7,-1.8); p.curveTo(-13.1,-2.2,-12.8,-6.0,-10.2,-5.8); p.lineTo(23.8,-1.1);
    27                 p.closePath(); p.moveTo(8.4,-4.3); p.curveTo(9.0,-9.3,9.0,-11.4,11.2,-13.0); p.curveTo(12.8,-15.0,12.8,-16.7,11.0,-18.6); p.curveTo(4.0,-22.2,-4.0,-22.2,-11.0,-18.6);
    28                 p.curveTo(-12.8,-16.7,-12.8,-15.0,-11.2,-13.0); p.curveTo(-9.0,-11.3,-8.7,-9.5,-8.4,-6.5); p.closePath();
    29                 Bollard.add(new Instr(Form.PGON, p));
    30         }
    31         private static final Symbol Motor = new Symbol();
    32         static {
    33                 Path2D.Double p = new Path2D.Double(); p.moveTo(-5.0,4.3); p.curveTo(-3.7,5.5,-1.8,5.7,-0.2,4.9); p.curveTo(1.3,8.7,4.6,10.9,8.4,10.9); p.curveTo(14.0,10.9,17.5,6.3,17.5,2.0);
    34                 p.curveTo(17.5,-0.7,16.1,-3.2,14.5,-3.2); p.curveTo(12.5,-3.2,11.7,0.8,2.5,1.1); p.curveTo(2.5,-1.2,1.6,-2.2,0.6,-3.0); p.curveTo(3.2,-5.6,4.0,-12.6,-1.0,-16.1);
    35                 p.curveTo(-5.3,-19.2,-11.6,-18.3,-13.7,-13.7); p.curveTo(-14.3,-12.2,-14.0,-11.2,-12.5,-10.6); p.curveTo(-8.6,-9.6,-5.3,-6.0,-4.0,-3.4); p.curveTo(-5.4,-2.6,-6.2,-2.0,-6.2,0.2);
    36                 p.curveTo(-12.8,-1.0,-17.5,3.7,-17.5,9.3); p.curveTo(-17.5,14.7,-12.6,18.8,-8.0,17.6); p.curveTo(-7.0,17.2,-6.6,16.2,-7.2,14.6); p.curveTo(-7.7,12.4,-7.0,7.7,-5.0,4.3); p.closePath();
    37                 Motor.add(new Instr(Form.PGON, p));
    38         }
    39         private static final Symbol Rowboat = new Symbol();
    40         static {
    41                 Path2D.Double p = new Path2D.Double(); p.moveTo(-17.5,-2.0); p.lineTo(17.5,-2.0); p.lineTo(15.0,6.0); p.lineTo(-11.0,6.0); p.closePath();
    42                 Rowboat.add(new Instr(Form.PGON, p));
    43                 Rowboat.add(new Instr(Form.RSHP, new Ellipse2D.Double(-6,-17.5,6,6)));
    44                 Rowboat.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    45                 Rowboat.add(new Instr(Form.LINE, new Line2D.Double(-5.5,-9,-8,0)));
    46                 Rowboat.add(new Instr(Form.LINE, new Line2D.Double(-5.0,10.0,-7.5,14.0)));
    47                 Rowboat.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    48                 Rowboat.add(new Instr(Form.LINE, new Line2D.Double(-5.5,-9,7,-6.5)));
    49                 Rowboat.add(new Instr(Form.LINE, new Line2D.Double(7.3,-7.8,-5.0,10.0)));
    50         }
    51         private static final Symbol Sailboard = new Symbol();
    52         static {
    53                 Path2D.Double p = new Path2D.Double(); p.moveTo(-6.0,19.0); p.quadTo(-4.0,-5,1.5,-20.0); p.quadTo(14,-7,15.5,6.5); p.quadTo(7,17,-6.0,19.0); p.closePath();
    54                 Sailboard.add(new Instr(Form.PGON, p));
    55                 Sailboard.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    56                 Sailboard.add(new Instr(Form.LINE, new Line2D.Double(-2,20,-10,20)));
    57                 Sailboard.add(new Instr(Form.LINE, new Line2D.Double(-13,2.5,-3,2.5)));
    58                 Sailboard.add(new Instr(Form.RSHP, new Ellipse2D.Double(-15,-4,5,5)));
    59                 Sailboard.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    60                 p = new Path2D.Double(); p.moveTo(-13,2.5); p.lineTo(-12,6.0); p.lineTo(-12,9.5);
    61                 Sailboard.add(new Instr(Form.PLIN, p));
    62                 Sailboard.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    63                 p = new Path2D.Double(); p.moveTo(-12,9.5); p.lineTo(-7.5,13.0); p.lineTo(-6.0,19.0);
    64                 Sailboard.add(new Instr(Form.PLIN, p));
    65         }
    66         private static final Symbol Sailboat = new Symbol();
    67         static {
    68                 Path2D.Double p = new Path2D.Double(); p.moveTo(3.75,-20.5); p.lineTo(3.75,8.5); p.lineTo(-19.5,8.5); p.closePath();
    69                 Sailboat.add(new Instr(Form.PGON, p));
    70                 p = new Path2D.Double(); p.moveTo(-19.5,12.0); p.lineTo(19.5,12.0); p.lineTo(13.0,20.5); p.lineTo(-16.0,20.5); p.closePath();
    71                 Sailboat.add(new Instr(Form.PGON, p));
    72         }
    73         private static final Symbol Slipway = new Symbol();
    74         static {
    75                 Path2D.Double p = new Path2D.Double(); p.moveTo(-17,-5.5); p.lineTo(-13.5,0); p.lineTo(4,-1.5); p.quadTo(18,-5,20,-13.5); p.closePath();
    76                 p.moveTo(-14,7); p.lineTo(-14,11); p.lineTo(20,11); p.lineTo(20,2); p.closePath();
    77                 Slipway.add(new Instr(Form.PGON, p));
    78                 Slipway.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    79                 Slipway.add(new Instr(Form.LINE, new Line2D.Double(-14,3,20,-2.5)));
    80                 Slipway.add(new Instr(Form.STRK, new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    81                 Slipway.add(new Instr(Form.ELPS, new Ellipse2D.Double(1,1.5,3,3)));
    82                 p = new Path2D.Double(); p.moveTo(-21,8.5); p.curveTo(-17.5, 5, -17.5, 12, -13, 7.2);
    83                 Slipway.add(new Instr(Form.PLIN, p));
    84         }
    85         private static final Symbol Speedboat = new Symbol();
    86         static {
    87                 Speedboat.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    88                 Speedboat.add(new Instr(Form.LINE, new Line2D.Double(-21,0,-17,-1)));
    89                 Path2D.Double p = new Path2D.Double(); p.moveTo(-17.5,8.5); p.curveTo(-10.5,13,-2.5,2,4,6); p.curveTo(12,2,11.5,9.5,20,6);
    90                 Speedboat.add(new Instr(Form.PLIN, p));
    91                 p = new Path2D.Double(); p.moveTo(-18.5,1.5); p.lineTo(-16,6); p.curveTo(-9, 9.0, -3.5, -2.0, 4.5, 3.5); p.lineTo(14.5,0); p.quadTo(19, -3, 19.5, -9);
    92                 p.lineTo(9.5,-6); p.lineTo(6.5,-8); p.lineTo(2.5,-4); p.closePath();
    93                 Speedboat.add(new Instr(Form.PGON, p));
    94                 Speedboat.add(new Instr(Form.RSHP, new Ellipse2D.Double(-1.5,-13,5,5)));
    95                 Speedboat.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    96                 Speedboat.add(new Instr(Form.LINE, new Line2D.Double(-2,-7,-5,0)));
    97                 Speedboat.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    98                 Speedboat.add(new Instr(Form.LINE, new Line2D.Double(-2,-7,5,-5)));
    99         }
    100         private static final Symbol Turn = new Symbol();
    101         static {
    102                 Turn.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    103                 Turn.add(new Instr(Form.EARC, new Arc2D.Double(-9.0,-9.0,18.0,18.0,270.0,230.0,Arc2D.OPEN)));
    104                 Turn.add(new Instr(Form.EARC, new Arc2D.Double(-20.0,-20.0,40.0,40.0,315.0,-280.0,Arc2D.OPEN)));
    105                 Path2D.Double p = new Path2D.Double(); p.moveTo(21.8,-7.0); p.lineTo(18.8,-18.2); p.lineTo(10.5,-10.0); p.closePath();
    106                 p.moveTo(-12.9,0.7); p.lineTo(-1.7,-2.3); p.lineTo(-9.9,-10.5); p.closePath();
    107                 Turn.add(new Instr(Form.PGON, p));
    108         }
    109         private static final Symbol Waterbike = new Symbol();
    110         static {
    111                 Path2D.Double p = new Path2D.Double(); p.moveTo(-17.5,13); p.curveTo(-10.5,17.5,-2.5,6.5,4,10.5); p.curveTo(12,6.5,11.5,14,20,10.5);
    112                 Waterbike.add(new Instr(Form.PLIN, p));
    113                 p = new Path2D.Double(); p.moveTo(-16.5,9.5); p.lineTo(-16,10.5); p.curveTo(-9, 13.5, -3.5, 2.5, 4.5, 8); p.quadTo(15, 4, 19.5, -4); p.closePath();
    114                 p.moveTo(19.5,-5); p.lineTo(1, -5); p.lineTo(-4.5, -10); p.lineTo(-5.5, -10); p.lineTo(2, -2); p.lineTo(-15, 4); p.lineTo(-16, 8); p.closePath();
    115                 Waterbike.add(new Instr(Form.PGON, p));
    116                 Waterbike.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    117                 p = new Path2D.Double(); p.moveTo(-7,1); p.lineTo(-7.5,-1.5); p.lineTo(-12.5,-3.5); p.lineTo(-11.5,-10.5);
    118                 Waterbike.add(new Instr(Form.PLIN, p));
    119                 Waterbike.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    120                 Waterbike.add(new Instr(Form.LINE, new Line2D.Double(-11.5,-10.5,-3,-8.5)));
    121                 Waterbike.add(new Instr(Form.RSHP, new Ellipse2D.Double(-11.5,-18,5,5)));
    122         }
    123         private static final Symbol Waterski = new Symbol();
    124         static {
    125                 Waterski.add(new Instr(Form.RSHP, new Ellipse2D.Double(12,-18,6,6)));
    126                 Waterski.add(new Instr(Form.STRK, new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    127                 Waterski.add(new Instr(Form.LINE, new Line2D.Double(-18,-6,0,-6)));
    128                 Waterski.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    129                 Path2D.Double p = new Path2D.Double(); p.moveTo(6.5,17.5); p.lineTo(-13,14.5); p.curveTo(-15,14.25,-16.0,13.6,-17.5,12.0);
    130                 Waterski.add(new Instr(Form.PLIN, p));
    131                 Waterski.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
    132                 p = new Path2D.Double(); p.moveTo(-1.5,-4.0); p.lineTo(14,-7.5); p.lineTo(9.5,3.5); p.lineTo(2.0,6.0); p.lineTo(-4.4,15.8);
    133                 Waterski.add(new Instr(Form.PLIN, p));
    134         }
    135         private static final Symbol NoticeA = new Symbol();
    136         static {
    137                 NoticeA.add(new Instr(Form.FILL, new Color(0xe80000)));
    138                 NoticeA.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    139                 NoticeA.add(new Instr(Form.FILL, Color.white));
    140                 NoticeA.add(new Instr(Form.RSHP, new Rectangle2D.Double(-21,-21,42,42)));
    141                 NoticeA.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    142                 NoticeA.add(new Instr(Form.FILL, new Color(0xe80000)));
    143                 NoticeA.add(new Instr(Form.LINE, new Line2D.Double(-25,-25,25,25)));
    144                 NoticeA.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    145                 NoticeA.add(new Instr(Form.FILL, Color.black));
    146                 NoticeA.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    147         }
    148         private static final Symbol NoticeB = new Symbol();
    149         static {
    150                 NoticeB.add(new Instr(Form.FILL, new Color(0xe80000)));
    151                 NoticeB.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    152                 NoticeB.add(new Instr(Form.FILL, Color.white));
    153                 NoticeB.add(new Instr(Form.RSHP, new Rectangle2D.Double(-21,-21,42,42)));
    154                 NoticeB.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    155                 NoticeB.add(new Instr(Form.FILL, Color.black));
    156                 NoticeB.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    157         }
    158         private static final Symbol NoticeE = new Symbol();
    159         static {
    160                 NoticeE.add(new Instr(Form.FILL, new Color(0x0000a0)));
    161                 NoticeE.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    162                 NoticeE.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    163                 NoticeE.add(new Instr(Form.FILL, Color.black));
    164                 NoticeE.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    165                 NoticeE.add(new Instr(Form.FILL, Color.white));
    166         }
    167         public static final Symbol Notice = new Symbol();
    168         static {
    169                 Notice.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    170                 Notice.add(new Instr(Form.FILL, new Color(0xe80000)));
    171                 Notice.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    172                 Notice.add(new Instr(Form.FILL, new Color(0x0000a0)));
    173                 Notice.add(new Instr(Form.RSHP, new Rectangle2D.Double(-21,-21,42,42)));
    174                 Notice.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    175                 Notice.add(new Instr(Form.FILL, Color.black));
    176                 Notice.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    177         }
    178         public static final Symbol NoticeA1 = new Symbol();
    179         static {
    180                 NoticeA1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    181                 NoticeA1.add(new Instr(Form.FILL, new Color(0xe80000)));
    182                 NoticeA1.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    183                 NoticeA1.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    184                 NoticeA1.add(new Instr(Form.FILL, Color.white));
    185                 NoticeA1.add(new Instr(Form.RSHP, new Rectangle2D.Double(-30,-10,60,20)));
    186                 NoticeA1.add(new Instr(Form.FILL, Color.black));
    187                 NoticeA1.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    188         }
    189         public static final Symbol NoticeA1a = new Symbol();
    190         static {
    191                 NoticeA1a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    192                 NoticeA1a.add(new Instr(Form.FILL, new Color(0xe80000)));
    193                 NoticeA1a.add(new Instr(Form.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
    194                 NoticeA1a.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    195                 NoticeA1a.add(new Instr(Form.FILL, Color.white));
    196                 NoticeA1a.add(new Instr(Form.RSHP, new Rectangle2D.Double(-29,-10,58,20)));
    197                 NoticeA1a.add(new Instr(Form.FILL, Color.black));
    198                 NoticeA1a.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
    199         }
    200         public static final Symbol NoticeA2 = new Symbol();
    201         static {
    202                 NoticeA2.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    203                 NoticeA2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    204                 NoticeA2.add(new Instr(Form.FILL, Color.black));
    205                 Path2D.Double p = new Path2D.Double(); p.moveTo(-10,23); p.lineTo(-10,0); p.lineTo(-6,0); p.lineTo(-12.5,-8); p.lineTo(-19,0); p.lineTo(-15,0); p.lineTo(-15,23);
    206                 p.closePath(); p.moveTo(10,8); p.lineTo(10,-15); p.lineTo(6,-15); p.lineTo(12.5,-23); p.lineTo(19,-15); p.lineTo(15,-15); p.lineTo(15,8); p.closePath();
    207                 NoticeA2.add(new Instr(Form.PGON, p));
    208         }
    209         public static final Symbol NoticeA3 = new Symbol();
    210         static {
    211                 NoticeA3.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    212                 NoticeA3.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA2, 1.0, 0, 0, null, null)));
    213                 Path2D.Double p = new Path2D.Double(); p.moveTo(-10,12); p.lineTo(-6,12); p.lineTo(-12.5,4); p.lineTo(-19,12);
    214                 p.closePath(); p.moveTo(10,-3); p.lineTo(6,-3); p.lineTo(12.5,-11); p.lineTo(19,-3); p.closePath();
    215                 NoticeA3.add(new Instr(Form.PGON, p));
    216         }
    217         public static final Symbol NoticeA4 = new Symbol();
    218         static {
    219                 NoticeA4.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    220                 NoticeA4.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    221                 NoticeA4.add(new Instr(Form.FILL, Color.black));
    222                 Path2D.Double p = new Path2D.Double(); p.moveTo(-10,-15); p.lineTo(-10,8); p.lineTo(-6,8); p.lineTo(-12.5,16); p.lineTo(-19,8); p.lineTo(-15,8); p.lineTo(-15,-15);
    223                 p.closePath(); p.moveTo(10,15); p.lineTo(10,-8); p.lineTo(6,-8); p.lineTo(12.5,-16); p.lineTo(19,-8); p.lineTo(15,-8); p.lineTo(15,15); p.closePath();
    224                 NoticeA4.add(new Instr(Form.PGON, p));
    225         }
    226         public static final Symbol NoticeA4_1 = new Symbol();
    227         static {
    228                 NoticeA4_1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    229                 NoticeA4_1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA4, 1.0, 0, 0, null, null)));
    230                 Path2D.Double p = new Path2D.Double(); p.moveTo(-10,-4); p.lineTo(-6,-4); p.lineTo(-12.5,4); p.lineTo(-19,-4);
    231                 p.closePath(); p.moveTo(10,5); p.lineTo(6,5); p.lineTo(12.5,-3); p.lineTo(19,5); p.closePath();
    232                 NoticeA4_1.add(new Instr(Form.PGON, p));
    233         }
    234         public static final Symbol NoticeA5 = new Symbol();
    235         static {
    236                 NoticeA5.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    237                 NoticeA5.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    238                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD); p.moveTo(-5.3,14.6); p.lineTo(-5.3,4.0); p.lineTo(0.0,4.0); p.curveTo(4.2,4.0,7.4,3.5,9.4,0.0);
    239                 p.curveTo(11.4,-2.8,11.4,-7.2,9.4,-10.5); p.curveTo(7.4,-13.6,4.2,-14.0,0.0,-14.0); p.lineTo(-11.0,-14.0); p.lineTo(-11.0,14.6); p.closePath();
    240                 p.moveTo(-5.3,-1.0); p.lineTo(0.0,-1.0); p.curveTo(6.5,-1.0,6.5,-9.0,0.0,-9.0); p.lineTo(-5.3,-9.0); p.closePath();
    241                 NoticeA5.add(new Instr(Form.PGON, p));
    242         }
    243         public static final Symbol NoticeA5_1 = new Symbol();
    244         static {
    245                 NoticeA5_1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    246                 NoticeA5_1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    247         }
    248         public static final Symbol NoticeA6 = new Symbol();
    249         static {
    250                 NoticeA6.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    251                 NoticeA6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    252                 NoticeA6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, new Scheme(Color.black), new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(180.0))))));
    253         }
    254         public static final Symbol NoticeA7 = new Symbol();
    255         static {
    256                 NoticeA7.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    257                 NoticeA7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    258                 NoticeA7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Bollard, 1.0, 0, 0, new Scheme(Color.black), null)));
    259         }
    260         public static final Symbol NoticeA8 = new Symbol();
    261         static {
    262                 NoticeA8.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    263                 NoticeA8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    264                 NoticeA8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Turn, 1.0, 0, 0, new Scheme(Color.black), null)));
    265         }
    266         public static final Symbol NoticeA9 = new Symbol();
    267         static {
    268                 NoticeA9.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    269                 NoticeA9.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    270                 NoticeA9.add(new Instr(Form.STRK, new BasicStroke(7, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    271                 NoticeA9.add(new Instr(Form.FILL, Color.black));
    272                 Path2D.Double p = new Path2D.Double(); p.moveTo(-23,10); p.curveTo(-11,10,-12,4,0,4); p.curveTo(12,4,11,10,23,10);
    273                 p.moveTo(-23,-3); p.curveTo(-11,-3,-12,-9,0,-9); p.curveTo(12,-9,11,-3,23,-3);
    274                 NoticeA9.add(new Instr(Form.PLIN, p));
    275         }
    276         public static final Symbol NoticeA10a = new Symbol();
    277         static {
    278                 NoticeA10a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    279                 NoticeA10a.add(new Instr(Form.FILL, Color.white));
    280                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(30,0); p.lineTo(0,30); p.closePath();
    281                 NoticeA10a.add(new Instr(Form.PGON, p));
    282                 NoticeA10a.add(new Instr(Form.FILL, new Color(0xe80000)));
    283                 p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(-30,0); p.lineTo(0,30); p.closePath();
    284                 NoticeA10a.add(new Instr(Form.PGON, p));
    285                 NoticeA10a.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    286                 NoticeA10a.add(new Instr(Form.FILL, Color.black));
    287                 p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(-30,0); p.lineTo(0,30); p.lineTo(30,0); p.closePath();
    288                 NoticeA10a.add(new Instr(Form.PLIN, p));
    289         }
    290         public static final Symbol NoticeA10b = new Symbol();
    291         static {
    292                 NoticeA10b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    293                 NoticeA10b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA10a, 1.0, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(180.0))))));
    294         }
    295         public static final Symbol NoticeA12 = new Symbol();
    296         static {
    297                 NoticeA12.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    298                 NoticeA12.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    299                 NoticeA12.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Motor, 1.0, 0, 0, new Scheme(Color.black), null)));
    300         }
    301         public static final Symbol NoticeA13 = new Symbol();
    302         static {
    303                 NoticeA13.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    304                 NoticeA13.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    305                 NoticeA13.add(new Instr(Form.TEXT, new Caption("SPORT", new Font("Arial", Font.BOLD, 15), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 5)))));
    306         }
    307         public static final Symbol NoticeA14 = new Symbol();
    308         static {
    309                 NoticeA14.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    310                 NoticeA14.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    311                 NoticeA14.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Waterski, 1.0, 0, 0, new Scheme(Color.black), null)));
    312         }
    313         public static final Symbol NoticeA15 = new Symbol();
    314         static {
    315                 NoticeA15.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    316                 NoticeA15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    317                 NoticeA15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Sailboat, 1.0, 0, 0, new Scheme(Color.black), null)));
    318         }
    319         public static final Symbol NoticeA16 = new Symbol();
    320         static {
    321                 NoticeA16.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    322                 NoticeA16.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    323                 NoticeA16.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Rowboat, 1.0, 0, 0, new Scheme(Color.black), null)));
    324         }
    325         public static final Symbol NoticeA17 = new Symbol();
    326         static {
    327                 NoticeA17.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    328                 NoticeA17.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    329                 NoticeA17.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Sailboard, 1.0, 0, 0, new Scheme(Color.black), null)));
    330         }
    331         public static final Symbol NoticeA18 = new Symbol();
    332         static {
    333                 NoticeA18.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    334                 NoticeA18.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    335                 NoticeA18.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Speedboat, 1.0, 0, 0, new Scheme(Color.black), null)));
    336         }
    337         public static final Symbol NoticeA19 = new Symbol();
    338         static {
    339                 NoticeA19.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    340                 NoticeA19.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    341                 NoticeA19.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Slipway, 1.0, 0, 0, new Scheme(Color.black), null)));
    342         }
    343         public static final Symbol NoticeA20 = new Symbol();
    344         static {
    345                 NoticeA20.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    346                 NoticeA20.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
    347                 NoticeA20.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Waterbike, 1.0, 0, 0, new Scheme(Color.black), null)));
    348         }
    349         public static final Symbol NoticeB1a = new Symbol();
    350         static {
    351                 NoticeB1a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    352                 NoticeB1a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    353                 Path2D.Double p = new Path2D.Double(); p.moveTo(21,8); p.lineTo(-8,8); p.lineTo(-8,18); p.lineTo(-21,0);
    354                 p.lineTo(-8,-18); p.lineTo(-8,-8); p.lineTo(21,-8); p.closePath();
    355                 NoticeB1a.add(new Instr(Form.PGON, p));
    356         }
    357         public static final Symbol NoticeB1b = new Symbol();
    358         static {
    359                 NoticeB1b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    360                 NoticeB1b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    361                 Path2D.Double p = new Path2D.Double(); p.moveTo(-21,8); p.lineTo(8,8); p.lineTo(8,18); p.lineTo(21,0);
    362                 p.lineTo(8,-18); p.lineTo(8,-8); p.lineTo(-21,-8); p.closePath();
    363                 NoticeB1b.add(new Instr(Form.PGON, p));
    364         }
    365         public static final Symbol NoticeB2a = new Symbol();
    366         static {
    367                 NoticeB2a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    368                 NoticeB2a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    369                 NoticeB2a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    370                 Path2D.Double p = new Path2D.Double(); p.moveTo(18,21); p.lineTo(18,10); p.lineTo(-15,-10); p.lineTo(-15,-15);
    371                 NoticeB2a.add(new Instr(Form.PLIN, p));
    372                 p = new Path2D.Double(); p.moveTo(-15,-21); p.lineTo(-21,-15); p.lineTo(-9,-15); p.closePath();
    373                 NoticeB2a.add(new Instr(Form.PGON, p));
    374         }
    375         public static final Symbol NoticeB2b = new Symbol();
    376         static {
    377                 NoticeB2b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    378                 NoticeB2b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    379                 NoticeB2b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    380                 NoticeB2b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    381                 Path2D.Double p = new Path2D.Double(); p.moveTo(-18,21); p.lineTo(-18,10); p.lineTo(15,-10); p.lineTo(15,-15);
    382                 NoticeB2b.add(new Instr(Form.PLIN, p));
    383                 p = new Path2D.Double(); p.moveTo(15,-21); p.lineTo(21,-15); p.lineTo(9,-15); p.closePath();
    384                 NoticeB2b.add(new Instr(Form.PGON, p));
    385         }
    386         public static final Symbol NoticeB3a = new Symbol();
    387         static {
    388                 NoticeB3a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    389                 NoticeB3a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    390                 NoticeB3a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    391                 NoticeB3a.add(new Instr(Form.LINE, new Line2D.Double(-15,21,-15,-15)));
    392                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15,-21); p.lineTo(-21,-15); p.lineTo(-9,-15); p.closePath();
    393                 NoticeB3a.add(new Instr(Form.PGON, p));
    394                 NoticeB3a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 5.5f, 2.4f }, 0.0f)));
    395                 NoticeB3a.add(new Instr(Form.LINE, new Line2D.Double(15,-21,15,15)));
    396                 p = new Path2D.Double(); p.moveTo(15,21); p.lineTo(21,15); p.lineTo(9,15); p.closePath();
    397                 NoticeB3a.add(new Instr(Form.PGON, p));
    398         }
    399         public static final Symbol NoticeB3b = new Symbol();
    400         static {
    401                 NoticeB3b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    402                 NoticeB3b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    403                 NoticeB3b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    404                 NoticeB3b.add(new Instr(Form.LINE, new Line2D.Double(15,21,15,-15)));
    405                 Path2D.Double p = new Path2D.Double(); p.moveTo(15,-21); p.lineTo(21,-15); p.lineTo(9,-15); p.closePath();
    406                 NoticeB3b.add(new Instr(Form.PGON, p));
    407                 NoticeB3b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 5.5f, 2.4f }, 0.0f)));
    408                 NoticeB3b.add(new Instr(Form.LINE, new Line2D.Double(-15,-21,-15,15)));
    409                 p = new Path2D.Double(); p.moveTo(-15,21); p.lineTo(-21,15); p.lineTo(-9,15); p.closePath();
    410                 NoticeB3b.add(new Instr(Form.PGON, p));
    411         }
    412         public static final Symbol NoticeB4a = new Symbol();
    413         static {
    414                 NoticeB4a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    415                 NoticeB4a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB2a, 1.0, 0, 0, null, null)));
    416                 NoticeB4a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 5.5f, 2.4f }, 0.0f)));
    417                 Path2D.Double p = new Path2D.Double(); p.moveTo(18,-21); p.lineTo(18,-10); p.lineTo(-15,10); p.lineTo(-15,15);
    418                 NoticeB4a.add(new Instr(Form.PLIN, p));
    419                 p = new Path2D.Double(); p.moveTo(-15,21); p.lineTo(-21,15); p.lineTo(-9,15); p.closePath();
    420                 NoticeB4a.add(new Instr(Form.PGON, p));
    421         }
    422         public static final Symbol NoticeB4b = new Symbol();
    423         static {
    424                 NoticeB4b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    425                 NoticeB4b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB2b, 1.0, 0, 0, null, null)));
    426                 NoticeB4b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 5.5f, 2.4f }, 0.0f)));
    427                 Path2D.Double p = new Path2D.Double(); p.moveTo(-18,-21); p.lineTo(-18,-10); p.lineTo(15,10); p.lineTo(15,15);
    428                 NoticeB4b.add(new Instr(Form.PLIN, p));
    429                 p = new Path2D.Double(); p.moveTo(15,21); p.lineTo(21,15); p.lineTo(9,15); p.closePath();
    430                 NoticeB4b.add(new Instr(Form.PGON, p));
    431         }
    432         public static final Symbol NoticeB5 = new Symbol();
    433         static {
    434                 NoticeB5.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    435                 NoticeB5.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    436                 NoticeB5.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    437                 NoticeB5.add(new Instr(Form.LINE, new Line2D.Double(15,0,-15,0)));
    438         }
    439         public static final Symbol NoticeB6 = new Symbol();
    440         static {
    441                 NoticeB6.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    442                 NoticeB6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    443         }
    444         public static final Symbol NoticeB7 = new Symbol();
    445         static {
    446                 NoticeB7.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    447                 NoticeB7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    448                 NoticeB7.add(new Instr(Form.RSHP, new Ellipse2D.Double(-10,-10,20,20)));
    449         }
    450         public static final Symbol NoticeB8 = new Symbol();
    451         static {
    452                 NoticeB8.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    453                 NoticeB8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    454                 NoticeB8.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    455                 NoticeB8.add(new Instr(Form.LINE, new Line2D.Double(0,15,0,-15)));
    456         }
    457         public static final Symbol NoticeB9a = new Symbol();
    458         static {
    459                 NoticeB9a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    460                 NoticeB9a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    461                 NoticeB9a.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    462                 NoticeB9a.add(new Instr(Form.LINE, new Line2D.Double(-21,0,21,0)));
    463                 NoticeB9a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    464                 NoticeB9a.add(new Instr(Form.LINE, new Line2D.Double(0,21,0,0)));
    465         }
    466         public static final Symbol NoticeB9b = new Symbol();
    467         static {
    468                 NoticeB9b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    469                 NoticeB9b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    470                 NoticeB9b.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    471                 NoticeB9b.add(new Instr(Form.LINE, new Line2D.Double(-21,0,21,0)));
    472                 NoticeB9b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    473                 NoticeB9b.add(new Instr(Form.LINE, new Line2D.Double(0,21,0,-21)));
    474         }
    475         public static final Symbol NoticeB11 = new Symbol();
    476         static {
    477                 NoticeB11.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    478                 NoticeB11.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    479                 NoticeB11.add(new Instr(Form.TEXT, new Caption("VHF", new Font("Arial", Font.BOLD, 20), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)))));
    480         }
    481         public static final Symbol NoticeC1 = new Symbol();
    482         static {
    483                 NoticeC1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    484                 NoticeC1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    485                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15,21); p.lineTo(0,12); p.lineTo(15,21); p.closePath();
    486                 NoticeC1.add(new Instr(Form.PGON, p));
    487         }
    488         public static final Symbol NoticeC2 = new Symbol();
    489         static {
    490                 NoticeC2.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    491                 NoticeC2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    492                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15,-21); p.lineTo(0,-12); p.lineTo(15,-21); p.closePath();
    493                 NoticeC2.add(new Instr(Form.PGON, p));
    494         }
    495         public static final Symbol NoticeC3 = new Symbol();
    496         static {
    497                 NoticeC3.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    498                 NoticeC3.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    499                 Path2D.Double p = new Path2D.Double(); p.moveTo(21,-15); p.lineTo(12,0); p.lineTo(21,15); p.closePath();
    500                 p.moveTo(-21,-15); p.lineTo(-12,0); p.lineTo(-21,15); p.closePath();
    501                 NoticeC3.add(new Instr(Form.PGON, p));
    502         }
    503         public static final Symbol NoticeC4 = new Symbol();
    504         static {
    505                 NoticeC4.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    506                 NoticeC4.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    507         }
    508         public static final Symbol NoticeC5a = new Symbol();
    509         static {
    510                 NoticeC5a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    511                 NoticeC5a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    512                 Path2D.Double p = new Path2D.Double(); p.moveTo(-21,-21); p.lineTo(10,-21); p.lineTo(21,0);     p.lineTo(10,21);        p.lineTo(-21,21); p.closePath();
    513                 NoticeC5a.add(new Instr(Form.PGON, p));
    514         }
    515         public static final Symbol NoticeC5b = new Symbol();
    516         static {
    517                 NoticeC5b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    518                 NoticeC5b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
    519                 Path2D.Double p = new Path2D.Double(); p.moveTo(21,-21); p.lineTo(-10,-21); p.lineTo(-21,0);    p.lineTo(-10,21);       p.lineTo(21,21); p.closePath();
    520                 NoticeC5b.add(new Instr(Form.PGON, p));
    521         }
    522         public static final Symbol NoticeD1a = new Symbol();
    523         static {
    524                 NoticeD1a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    525                 NoticeD1a.add(new Instr(Form.FILL, Color.yellow));
    526                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(-30,0); p.lineTo(0,30); p.lineTo(30,0); p.closePath();
    527                 NoticeD1a.add(new Instr(Form.PGON, p));
    528                 NoticeD1a.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    529                 NoticeD1a.add(new Instr(Form.FILL, Color.black));
    530                 NoticeD1a.add(new Instr(Form.PLIN, p));
    531         }
    532         public static final Symbol NoticeD1b = new Symbol();
    533         static {
    534                 NoticeD1b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    535                 NoticeD1b.add(new Instr(Form.FILL, Color.yellow));
    536                 Path2D.Double p = new Path2D.Double(); p.moveTo(-30,0); p.lineTo(-15,25); p.lineTo(15,-25); p.lineTo(30,0);     p.lineTo(15,25); p.lineTo(-15,-25); p.closePath();
    537                 NoticeD1b.add(new Instr(Form.PGON, p));
    538                 NoticeD1b.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    539                 NoticeD1b.add(new Instr(Form.FILL, Color.black));
    540                 NoticeD1b.add(new Instr(Form.PLIN, p));
    541         }
    542         public static final Symbol NoticeD2a = new Symbol();
    543         static {
    544                 NoticeD2a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    545                 NoticeD2a.add(new Instr(Form.FILL, Color.white));
    546                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(-30,0); p.lineTo(0,30); p.closePath();
    547                 NoticeD2a.add(new Instr(Form.PGON, p));
    548                 NoticeD2a.add(new Instr(Form.FILL, new Color(0x00e800)));
    549                 p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(30,0); p.lineTo(0,30); p.closePath();
    550                 NoticeD2a.add(new Instr(Form.PGON, p));
    551                 NoticeD2a.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    552                 NoticeD2a.add(new Instr(Form.FILL, Color.black));
    553                 p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(-30,0); p.lineTo(0,30); p.lineTo(30,0); p.closePath();
    554                 NoticeD2a.add(new Instr(Form.PLIN, p));
    555         }
    556         public static final Symbol NoticeD2b = new Symbol();
    557         static {
    558                 NoticeD2b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    559                 NoticeD2b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeD2a, 1.0, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(180.0))))));
    560         }
    561         public static final Symbol NoticeD3a = new Symbol();
    562         static {
    563                 NoticeD3a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    564                 NoticeD3a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    565                 Path2D.Double p = new Path2D.Double(); p.moveTo(28,10); p.lineTo(-10,10); p.lineTo(-10,20); p.lineTo(-28,0);
    566                 p.lineTo(-10,-20); p.lineTo(-10,-10); p.lineTo(28,-10); p.closePath();
    567                 NoticeD3a.add(new Instr(Form.PGON, p));
    568         }
    569         public static final Symbol NoticeD3b = new Symbol();
    570         static {
    571                 NoticeD3b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    572                 NoticeD3b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    573                 Path2D.Double p = new Path2D.Double(); p.moveTo(-28,10); p.lineTo(10,10); p.lineTo(10,20); p.lineTo(28,0);
    574                 p.lineTo(10,-20); p.lineTo(10,-10); p.lineTo(-28,-10); p.closePath();
    575                 NoticeD3b.add(new Instr(Form.PGON, p));
    576         }
    577         public static final Symbol NoticeE1 = new Symbol();
    578         static {
    579                 NoticeE1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    580                 NoticeE1.add(new Instr(Form.FILL, new Color(0x00e800)));
    581                 NoticeE1.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    582                 NoticeE1.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    583                 NoticeE1.add(new Instr(Form.FILL, Color.white));
    584                 NoticeE1.add(new Instr(Form.RSHP, new Rectangle2D.Double(-10,-30,20,60)));
    585                 NoticeE1.add(new Instr(Form.FILL, Color.black));
    586                 NoticeE1.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    587         }
    588         public static final Symbol NoticeE2 = new Symbol();
    589         static {
    590                 NoticeE2.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    591                 NoticeE2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    592                 Path2D.Double p = new Path2D.Double(); p.moveTo(5,-25); p.lineTo(-10,-1); p.lineTo(10,-1); p.lineTo(-10,20);
    593                 p.lineTo(-7,20); p.lineTo(-12,25); p.lineTo(-16,20); p.lineTo(-13,20); p.lineTo(4,1); p.lineTo(-14,1);
    594                 p.lineTo(2,-25); p.closePath();
    595                 NoticeE2.add(new Instr(Form.PGON, p));
    596         }
    597         public static final Symbol NoticeE3 = new Symbol();
    598         static {
    599                 NoticeE3.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    600                 NoticeE3.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    601                 NoticeE3.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    602                 NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(25,-20,25,20)));
    603                 NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-25,-20,-25,20)));
    604                 NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-15,-15,-15,20)));
    605                 NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-5,-15,-5,20)));
    606                 NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(5,-15,5,20)));
    607                 NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(15,-15,15,20)));
    608                 NoticeE3.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    609                 NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-26,18.5,26,18.5)));
    610                 NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-26,-15,26,-15)));
    611         }
    612         public static final Symbol NoticeE4a = new Symbol();
    613         static {
    614                 NoticeE4a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    615                 NoticeE4a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    616                 Path2D.Double p = new Path2D.Double(); p.moveTo(-20,-10); p.lineTo(-5,-10); p.lineTo(-5,-20); p.lineTo(5,-20); p.lineTo(5,-10);
    617                 p.lineTo(20,-10); p.lineTo(15,0); p.lineTo(-15,0); p.closePath();
    618                 p.moveTo(-25,5); p.lineTo(25,5); p.lineTo(25,10); p.lineTo(-25,10); p.closePath();
    619                 NoticeE4a.add(new Instr(Form.PGON, p));
    620         }
    621         public static final Symbol NoticeE4b = new Symbol();
    622         static {
    623                 NoticeE4b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    624                 NoticeE4b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    625                 Path2D.Double p = new Path2D.Double(); p.moveTo(-20,0); p.lineTo(-5,0); p.lineTo(-5,-10); p.lineTo(5,-10); p.lineTo(5,0);
    626                 p.lineTo(20,0); p.lineTo(15,10); p.lineTo(-15,10); p.closePath();
    627                 NoticeE4b.add(new Instr(Form.PGON, p));
    628         }
    629         public static final Symbol NoticeE5 = new Symbol();
    630         static {
    631                 NoticeE5.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    632                 NoticeE5.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    633                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD); p.moveTo(-5.3,14.6); p.lineTo(-5.3,4.0); p.lineTo(0.0,4.0); p.curveTo(4.2,4.0,7.4,3.5,9.4,0.0);
    634                 p.curveTo(11.4,-2.8,11.4,-7.2,9.4,-10.5); p.curveTo(7.4,-13.6,4.2,-14.0,0.0,-14.0); p.lineTo(-11.0,-14.0); p.lineTo(-11.0,14.6); p.closePath();
    635                 p.moveTo(-5.3,-1.0); p.lineTo(0.0,-1.0); p.curveTo(6.5,-1.0,6.5,-9.0,0.0,-9.0); p.lineTo(-5.3,-9.0); p.closePath();
    636                 NoticeE5.add(new Instr(Form.PGON, p));
    637         }
    638         public static final Symbol NoticeE5_1 = new Symbol();
    639         static {
    640                 NoticeE5_1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    641                 NoticeE5_1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    642         }
    643         public static final Symbol NoticeE5_2 = new Symbol();
    644         static {
    645                 NoticeE5_2.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    646                 NoticeE5_2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    647         }
    648         public static final Symbol NoticeE5_3 = new Symbol();
    649         static {
    650                 NoticeE5_3.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    651                 NoticeE5_3.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    652         }
    653         public static final Symbol NoticeE5_4 = new Symbol();
    654         static {
    655                 NoticeE5_4.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    656                 NoticeE5_4.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    657                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    658                 p.moveTo(-28,25); p.lineTo(0,-28); p.lineTo(28,25); p.closePath();
    659                 NoticeE5_4.add(new Instr(Form.PGON, p));
    660         }
    661         public static final Symbol NoticeE5_5 = new Symbol();
    662         static {
    663                 NoticeE5_5.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    664                 NoticeE5_5.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    665                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    666                 p.moveTo(-28,25); p.lineTo(0,-28); p.lineTo(28,25); p.closePath();
    667                 p.moveTo(0,24); p.lineTo(-15,2); p.lineTo(15,2); p.closePath();
    668                 NoticeE5_5.add(new Instr(Form.PGON, p));
    669         }
    670         public static final Symbol NoticeE5_6 = new Symbol();
    671         static {
    672                 NoticeE5_6.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    673                 NoticeE5_6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    674                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    675                 p.moveTo(-28,25); p.lineTo(0,-28); p.lineTo(28,25); p.closePath();
    676                 p.moveTo(0,7); p.lineTo(-10,-8); p.lineTo(10,-8); p.closePath();
    677                 p.moveTo(0,24); p.lineTo(-10,9); p.lineTo(10,9); p.closePath();
    678                 NoticeE5_6.add(new Instr(Form.PGON, p));
    679         }
    680         public static final Symbol NoticeE5_7 = new Symbol();
    681         static {
    682                 NoticeE5_7.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    683                 NoticeE5_7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    684                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    685                 p.moveTo(-28,25); p.lineTo(0,-28); p.lineTo(28,25); p.closePath();
    686                 p.moveTo(0,-1); p.lineTo(-8,-11); p.lineTo(8,-11); p.closePath();
    687                 p.moveTo(0,11); p.lineTo(-8,1); p.lineTo(8,1); p.closePath();
    688                 p.moveTo(0,23); p.lineTo(-8,13); p.lineTo(8,13); p.closePath();
    689                 NoticeE5_7.add(new Instr(Form.PGON, p));
    690         }
    691         public static final Symbol NoticeE5_8 = new Symbol();
    692         static {
    693                 NoticeE5_8.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    694                 NoticeE5_8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    695                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    696                 p.moveTo(-28,-25); p.lineTo(0,28); p.lineTo(28,-25); p.closePath();
    697                 NoticeE5_8.add(new Instr(Form.PGON, p));
    698         }
    699         public static final Symbol NoticeE5_9 = new Symbol();
    700         static {
    701                 NoticeE5_9.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    702                 NoticeE5_9.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    703                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    704                 p.moveTo(-28,-25); p.lineTo(0,28); p.lineTo(28,-25); p.closePath();
    705                 p.moveTo(0,8); p.lineTo(-15,-14); p.lineTo(15,-14); p.closePath();
    706                 NoticeE5_9.add(new Instr(Form.PGON, p));
    707         }
    708         public static final Symbol NoticeE5_10 = new Symbol();
    709         static {
    710                 NoticeE5_10.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    711                 NoticeE5_10.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    712                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    713                 p.moveTo(-28,-25); p.lineTo(0,28); p.lineTo(28,-25); p.closePath();
    714                 p.moveTo(0,-5); p.lineTo(-10,-20); p.lineTo(10,-20); p.closePath();
    715                 p.moveTo(0,15); p.lineTo(-10,0); p.lineTo(10,0); p.closePath();
    716                 NoticeE5_10.add(new Instr(Form.PGON, p));
    717         }
    718         public static final Symbol NoticeE5_11 = new Symbol();
    719         static {
    720                 NoticeE5_11.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    721                 NoticeE5_11.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    722                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    723                 p.moveTo(-28,-25); p.lineTo(0,28); p.lineTo(28,-25); p.closePath();
    724                 p.moveTo(0,-12); p.lineTo(-8,-22); p.lineTo(8,-22); p.closePath();
    725                 p.moveTo(0,3); p.lineTo(-8,-7); p.lineTo(8,-7); p.closePath();
    726                 p.moveTo(0,18); p.lineTo(-8,8); p.lineTo(8,8); p.closePath();
    727                 NoticeE5_11.add(new Instr(Form.PGON, p));
    728         }
    729         public static final Symbol NoticeE5_12 = new Symbol();
    730         static {
    731                 NoticeE5_12.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    732                 NoticeE5_12.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    733                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    734                 p.moveTo(-28,0); p.lineTo(0,28); p.lineTo(28,0); p.lineTo(0,-28); p.closePath();
    735                 NoticeE5_12.add(new Instr(Form.PGON, p));
    736         }
    737         public static final Symbol NoticeE5_13 = new Symbol();
    738         static {
    739                 NoticeE5_13.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    740                 NoticeE5_13.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    741                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    742                 p.moveTo(-28,0); p.lineTo(0,28); p.lineTo(28,0); p.lineTo(0,-28); p.closePath();
    743                 p.moveTo(0,15); p.lineTo(-15,-7); p.lineTo(15,-7); p.closePath();
    744                 NoticeE5_13.add(new Instr(Form.PGON, p));
    745         }
    746         public static final Symbol NoticeE5_14 = new Symbol();
    747         static {
    748                 NoticeE5_14.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    749                 NoticeE5_14.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    750                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    751                 p.moveTo(-28,0); p.lineTo(0,28); p.lineTo(28,0); p.lineTo(0,-28); p.closePath();
    752                 p.moveTo(0,0); p.lineTo(-10,-15); p.lineTo(10,-15); p.closePath();
    753                 p.moveTo(0,20); p.lineTo(-10,5); p.lineTo(10,5); p.closePath();
    754                 NoticeE5_14.add(new Instr(Form.PGON, p));
    755         }
    756         public static final Symbol NoticeE5_15 = new Symbol();
    757         static {
    758                 NoticeE5_15.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    759                 NoticeE5_15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    760                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    761                 p.moveTo(-28,0); p.lineTo(0,28); p.lineTo(28,0); p.lineTo(0,-28); p.closePath();
    762                 p.moveTo(0,-7); p.lineTo(-8,-17); p.lineTo(8,-17); p.closePath();
    763                 p.moveTo(0,8); p.lineTo(-8,-2); p.lineTo(8,-2); p.closePath();
    764                 p.moveTo(0,23); p.lineTo(-8,13); p.lineTo(8,13); p.closePath();
    765                 NoticeE5_15.add(new Instr(Form.PGON, p));
    766         }
    767         public static final Symbol NoticeE6 = new Symbol();
    768         static {
    769                 NoticeE6.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    770                 NoticeE6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    771                 NoticeE6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, new Scheme(Color.white), null)));
    772         }
    773         public static final Symbol NoticeE7 = new Symbol();
    774         static {
    775                 NoticeE7.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    776                 NoticeE7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    777                 NoticeE7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Bollard, 1.0, 0, 0, new Scheme(Color.white), null)));
    778         }
    779         public static final Symbol NoticeE7_1 = new Symbol();
    780         static {
    781                 NoticeE7_1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    782                 NoticeE7_1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    783                 NoticeE7_1.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    784                 NoticeE7_1.add(new Instr(Form.LINE, new Line2D.Double(20,25,20,-10)));
    785                 NoticeE7_1.add(new Instr(Form.LINE, new Line2D.Double(22,-8,-15,-20)));
    786                 NoticeE7_1.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    787                 NoticeE7_1.add(new Instr(Form.LINE, new Line2D.Double(20,8,0,-15)));
    788                 Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    789                 p.moveTo(-17,2); p.quadTo(-5,0,7,2); p.lineTo(9,12); p.lineTo(7,20); p.lineTo(6,20); p.lineTo(6,23); p.lineTo(3,23); p.lineTo(3,20);
    790                 p.quadTo(-5,22,-13,20); p.lineTo(-13,23); p.lineTo(-16,23); p.lineTo(-16,20); p.lineTo(-17,20); p.lineTo(-19,12); p.closePath();
    791                 p.moveTo(-15,4); p.quadTo(-3,2,5,4); p.lineTo(6,11); p.quadTo(-5,9,-16,11); p.closePath();
    792                 NoticeE7_1.add(new Instr(Form.PGON, p));
    793                 NoticeE7_1.add(new Instr(Form.FILL, new Color(0x0000a0)));
    794                 NoticeE7_1.add(new Instr(Form.RSHP, new Ellipse2D.Double(-16,13,4,4)));
    795                 NoticeE7_1.add(new Instr(Form.RSHP, new Ellipse2D.Double(2,13,4,4)));
    796         }
    797         public static final Symbol NoticeE8 = new Symbol();
    798         static {
    799                 NoticeE8.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    800                 NoticeE8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    801                 NoticeE8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Turn, 1.0, 0, 0, new Scheme(Color.white), null)));
    802         }
    803         public static final Symbol NoticeE9a = new Symbol();
    804         static {
    805                 NoticeE9a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    806                 NoticeE9a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    807                 NoticeE9a.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    808                 NoticeE9a.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-29)));
    809                 NoticeE9a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    810                 NoticeE9a.add(new Instr(Form.LINE, new Line2D.Double(-29,0,29,0)));
    811         }
    812         public static final Symbol NoticeE9b = new Symbol();
    813         static {
    814                 NoticeE9b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    815                 NoticeE9b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    816                 NoticeE9b.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    817                 NoticeE9b.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-29)));
    818                 NoticeE9b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    819                 NoticeE9b.add(new Instr(Form.LINE, new Line2D.Double(-2,0,29,0)));
    820         }
    821         public static final Symbol NoticeE9c = new Symbol();
    822         static {
    823                 NoticeE9c.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    824                 NoticeE9c.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    825                 NoticeE9c.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    826                 NoticeE9c.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-29)));
    827                 NoticeE9c.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    828                 NoticeE9c.add(new Instr(Form.LINE, new Line2D.Double(2,0,-29,0)));
    829         }
    830         public static final Symbol NoticeE9d = new Symbol();
    831         static {
    832                 NoticeE9d.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    833                 NoticeE9d.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    834                 NoticeE9d.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    835                 NoticeE9d.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-4)));
    836                 NoticeE9d.add(new Instr(Form.LINE, new Line2D.Double(-4,0,29,0)));
    837                 NoticeE9d.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    838                 NoticeE9d.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,2)));
    839         }
    840         public static final Symbol NoticeE9e = new Symbol();
    841         static {
    842                 NoticeE9e.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    843                 NoticeE9e.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    844                 NoticeE9e.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    845                 NoticeE9e.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-4)));
    846                 NoticeE9e.add(new Instr(Form.LINE, new Line2D.Double(4,0,-29,0)));
    847                 NoticeE9e.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    848                 NoticeE9e.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,2)));
    849         }
    850         public static final Symbol NoticeE9f = new Symbol();
    851         static {
    852                 NoticeE9f.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    853                 NoticeE9f.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    854                 NoticeE9f.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    855                 NoticeE9f.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-4)));
    856                 NoticeE9f.add(new Instr(Form.LINE, new Line2D.Double(-4,0,29,0)));
    857                 NoticeE9f.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    858                 NoticeE9f.add(new Instr(Form.LINE, new Line2D.Double(2,0,-29,0)));
    859         }
    860         public static final Symbol NoticeE9g = new Symbol();
    861         static {
    862                 NoticeE9g.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    863                 NoticeE9g.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    864                 NoticeE9g.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    865                 NoticeE9g.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-4)));
    866                 NoticeE9g.add(new Instr(Form.LINE, new Line2D.Double(4,0,-29,0)));
    867                 NoticeE9g.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    868                 NoticeE9g.add(new Instr(Form.LINE, new Line2D.Double(-2,0,29,0)));
    869         }
    870         public static final Symbol NoticeE9h = new Symbol();
    871         static {
    872                 NoticeE9h.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    873                 NoticeE9h.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    874                 NoticeE9h.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    875                 NoticeE9h.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-4)));
    876                 NoticeE9h.add(new Instr(Form.LINE, new Line2D.Double(-4,0,29,0)));
    877                 NoticeE9h.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    878                 NoticeE9h.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,2)));
    879                 NoticeE9h.add(new Instr(Form.LINE, new Line2D.Double(2,0,-29,0)));
    880         }
    881         public static final Symbol NoticeE9i = new Symbol();
    882         static {
    883                 NoticeE9i.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    884                 NoticeE9i.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    885                 NoticeE9i.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    886                 NoticeE9i.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-4)));
    887                 NoticeE9i.add(new Instr(Form.LINE, new Line2D.Double(4,0,-29,0)));
    888                 NoticeE9i.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    889                 NoticeE9i.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,2)));
    890                 NoticeE9i.add(new Instr(Form.LINE, new Line2D.Double(-2,0,29,0)));
    891         }
    892         public static final Symbol NoticeE10a = new Symbol();
    893         static {
    894                 NoticeE10a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    895                 NoticeE10a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    896                 NoticeE10a.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    897                 NoticeE10a.add(new Instr(Form.LINE, new Line2D.Double(-29,0,29,0)));
    898                 NoticeE10a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    899                 NoticeE10a.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-29)));
    900         }
    901         public static final Symbol NoticeE10b = new Symbol();
    902         static {
    903                 NoticeE10b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    904                 NoticeE10b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    905                 NoticeE10b.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    906                 NoticeE10b.add(new Instr(Form.LINE, new Line2D.Double(-29,0,29,0)));
    907                 NoticeE10b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    908                 NoticeE10b.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-2)));
    909         }
    910         public static final Symbol NoticeE10c = new Symbol();
    911         static {
    912                 NoticeE10c.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    913                 NoticeE10c.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    914                 NoticeE10c.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    915                 NoticeE10c.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,4)));
    916                 NoticeE10c.add(new Instr(Form.LINE, new Line2D.Double(-4,0,29,0)));
    917                 NoticeE10c.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    918                 NoticeE10c.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-2)));
    919         }
    920         public static final Symbol NoticeE10d = new Symbol();
    921         static {
    922                 NoticeE10d.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    923                 NoticeE10d.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    924                 NoticeE10d.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    925                 NoticeE10d.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,4)));
    926                 NoticeE10d.add(new Instr(Form.LINE, new Line2D.Double(4,0,-29,0)));
    927                 NoticeE10d.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    928                 NoticeE10d.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-2)));
    929         }
    930         public static final Symbol NoticeE10e = new Symbol();
    931         static {
    932         NoticeE10e.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    933         NoticeE10e.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    934         NoticeE10e.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    935         NoticeE10e.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,4)));
    936         NoticeE10e.add(new Instr(Form.LINE, new Line2D.Double(-4,0,29,0)));
    937         NoticeE10e.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    938         NoticeE10e.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-2)));
    939         NoticeE10e.add(new Instr(Form.LINE, new Line2D.Double(2,0,-29,0)));
    940         }
    941         public static final Symbol NoticeE10f = new Symbol();
    942         static {
    943                 NoticeE10f.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    944                 NoticeE10f.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    945                 NoticeE10f.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    946                 NoticeE10f.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,4)));
    947                 NoticeE10f.add(new Instr(Form.LINE, new Line2D.Double(4,0,-29,0)));
    948                 NoticeE10f.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    949                 NoticeE10f.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-2)));
    950                 NoticeE10f.add(new Instr(Form.LINE, new Line2D.Double(-2,0,29,0)));
    951         }
    952         public static final Symbol NoticeE11 = new Symbol();
    953         static {
    954                 NoticeE11.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    955                 NoticeE11.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    956                 NoticeE11.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
    957                 NoticeE11.add(new Instr(Form.LINE, new Line2D.Double(-27,-27,27,27)));
    958         }
    959         public static final Symbol NoticeE13 = new Symbol();
    960         static {
    961                 NoticeE13.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    962                 NoticeE13.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    963                 Path2D.Double p = new Path2D.Double(); p.moveTo(-4,-16); p.lineTo(9,-16); p.lineTo(9,-14); p.lineTo(3.5,-14); p.lineTo(3.5,-7); p.lineTo(5,-7);
    964                 p.lineTo(5,1); p.lineTo(6.5,1); p.lineTo(6.5,5); p.lineTo(17.5,5); p.lineTo(17.5,1); p.lineTo(19,1); p.lineTo(19,15); p.lineTo(17.5,15);
    965                 p.lineTo(17.5,10); p.lineTo(17.5,10); p.lineTo(6.5,10); p.lineTo(6.5,13); p.lineTo(-2,13); p.lineTo(-2,10); p.lineTo(-9,10);
    966                 p.quadTo(-13.5,10,-13.5,16); p.lineTo(-19,16); p.quadTo(-19,5,-9,5); p.lineTo(-2,5); p.lineTo(-2,1); p.lineTo(0,1); p.lineTo(0,-7);
    967                 p.lineTo(1.5,-7); p.lineTo(1.5,-14); p.lineTo(-4,-14); p.closePath();
    968                 NoticeE13.add(new Instr(Form.PGON, p));
    969         }
    970         public static final Symbol NoticeE14 = new Symbol();
    971         static {
    972                 NoticeE14.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    973                 NoticeE14.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    974                 Path2D.Double p = new Path2D.Double(); p.moveTo(-18,-18); p.lineTo(-11,-7); p.lineTo(-9,-10); p.lineTo(-14,-18); p.closePath();
    975                 p.moveTo(9.5,7); p.lineTo(22.5,9); p.lineTo(21.5,5.5); p.lineTo(12,4); p.closePath();
    976                 p.moveTo(-19,-16.5); p.lineTo(-13,-6.5); p.quadTo(-15.5,-2,-12.5,0); p.lineTo(4,11); p.quadTo(7,13,10,9); p.lineTo(21.5,11);
    977                 p.curveTo(15.5,23,1,18.5,-9,12); p.curveTo(-18,6,-28.5,-7,-19,-16.5); p.closePath();
    978                 NoticeE14.add(new Instr(Form.PGON, p));
    979         }
    980         public static final Symbol NoticeE15 = new Symbol();
    981         static {
    982                 NoticeE15.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    983                 NoticeE15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    984                 NoticeE15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Motor, 1.0, 0, 0, new Scheme(Color.white), null)));
    985         }
    986         public static final Symbol NoticeE16 = new Symbol();
    987         static {
    988                 NoticeE16.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    989                 NoticeE16.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    990                 NoticeE16.add(new Instr(Form.TEXT, new Caption("SPORT", new Font("Arial", Font.BOLD, 15), Color.white, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 5)))));
    991         }
    992         public static final Symbol NoticeE17 = new Symbol();
    993         static {
    994                 NoticeE17.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    995                 NoticeE17.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    996                 NoticeE17.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Waterski, 1.0, 0, 0, new Scheme(Color.white), null)));
    997         }
    998         public static final Symbol NoticeE18 = new Symbol();
    999         static {
    1000                 NoticeE18.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1001                 NoticeE18.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    1002                 NoticeE18.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Sailboat, 1.0, 0, 0, new Scheme(Color.white), null)));
    1003         }
    1004         public static final Symbol NoticeE19 = new Symbol();
    1005         static {
    1006                 NoticeE19.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1007                 NoticeE19.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    1008                 NoticeE19.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Rowboat, 1.0, 0, 0, new Scheme(Color.white), null)));
    1009         }
    1010         public static final Symbol NoticeE20 = new Symbol();
    1011         static {
    1012                 NoticeE20.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1013                 NoticeE20.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    1014                 NoticeE20.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Sailboard, 1.0, 0, 0, new Scheme(Color.white), null)));
    1015         }
    1016         public static final Symbol NoticeE21 = new Symbol();
    1017         static {
    1018                 NoticeE21.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1019                 NoticeE21.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    1020                 NoticeE21.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Speedboat, 1.0, 0, 0, new Scheme(Color.white), null)));
    1021         }
    1022         public static final Symbol NoticeE22 = new Symbol();
    1023         static {
    1024                 NoticeE22.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1025                 NoticeE22.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    1026                 NoticeE22.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Slipway, 1.0, 0, 0, new Scheme(Color.white), null)));
    1027         }
    1028         public static final Symbol NoticeE23 = new Symbol();
    1029         static {
    1030                 NoticeE23.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1031                 NoticeE23.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    1032                 NoticeE23.add(new Instr(Form.TEXT, new Caption("VHF", new Font("Arial", Font.BOLD, 20), Color.white, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)))));
    1033         }
    1034         public static final Symbol NoticeE24 = new Symbol();
    1035         static {
    1036                 NoticeE24.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1037                 NoticeE24.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
    1038                 NoticeE24.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Waterbike, 1.0, 0, 0, new Scheme(Color.white), null)));
    1039         }
    1040 
    1041         public static final Symbol NoticeBoard = new Symbol();
    1042         static {
    1043                 NoticeBoard.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,30)));
    1044                 NoticeBoard.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1045                 Path2D.Double p = new Path2D.Double(); p.moveTo(-20,0); p.lineTo(20,0); p.lineTo(20,-15); p.lineTo(-20,-15); p.closePath();
    1046                 NoticeBoard.add(new Instr(Form.FILL, Color.white));
    1047                 NoticeBoard.add(new Instr(Form.PGON, p));
    1048                 NoticeBoard.add(new Instr(Form.FILL, Color.black));
    1049                 NoticeBoard.add(new Instr(Form.PLIN, p));
    1050         }
    1051         public static final Symbol NoticeTriangle = new Symbol();
    1052         static {
    1053                 NoticeTriangle.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,30)));
    1054                 NoticeTriangle.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1055                 Path2D.Double p = new Path2D.Double(); p.moveTo(-20,0); p.lineTo(20,0); p.lineTo(0,-15); p.closePath();
    1056                 NoticeTriangle.add(new Instr(Form.FILL, Color.white));
    1057                 NoticeTriangle.add(new Instr(Form.PGON, p));
    1058                 NoticeTriangle.add(new Instr(Form.FILL, Color.black));
    1059                 NoticeTriangle.add(new Instr(Form.PLIN, p));
    1060         }
    1061 
    1062         public static final EnumMap<CatNMK, Symbol> NmkCevni = new EnumMap<>(CatNMK.class);
    1063         static {
    1064                 NmkCevni.put(CatNMK.NMK_UNKN, Notice); NmkCevni.put(CatNMK.NMK_NENT, NoticeA1); NmkCevni.put(CatNMK.NMK_CLSA, NoticeA1a); NmkCevni.put(CatNMK.NMK_NOVK, NoticeA2);
    1065                 NmkCevni.put(CatNMK.NMK_NCOV, NoticeA3); NmkCevni.put(CatNMK.NMK_NPAS, NoticeA4); NmkCevni.put(CatNMK.NMK_NCPS, NoticeA4_1); NmkCevni.put(CatNMK.NMK_NBRT, NoticeA5);
    1066                 NmkCevni.put(CatNMK.NMK_NBLL, NoticeA5_1); NmkCevni.put(CatNMK.NMK_NANK, NoticeA6); NmkCevni.put(CatNMK.NMK_NMOR, NoticeA7); NmkCevni.put(CatNMK.NMK_NTRN, NoticeA8);
    1067                 NmkCevni.put(CatNMK.NMK_NWSH, NoticeA9); NmkCevni.put(CatNMK.NMK_NPSL, NoticeA10a); NmkCevni.put(CatNMK.NMK_NPSR, NoticeA10b); NmkCevni.put(CatNMK.NMK_NMTC, NoticeA12);
    1068                 NmkCevni.put(CatNMK.NMK_NSPC, NoticeA13); NmkCevni.put(CatNMK.NMK_NWSK, NoticeA14); NmkCevni.put(CatNMK.NMK_NSLC, NoticeA15); NmkCevni.put(CatNMK.NMK_NUPC, NoticeA16);
    1069                 NmkCevni.put(CatNMK.NMK_NSLB, NoticeA17); NmkCevni.put(CatNMK.NMK_NWBK, NoticeA20); NmkCevni.put(CatNMK.NMK_NHSC, NoticeA18); NmkCevni.put(CatNMK.NMK_NLBG, NoticeA19);
    1070                 NmkCevni.put(CatNMK.NMK_MVTL, NoticeB1a); NmkCevni.put(CatNMK.NMK_MVTR, NoticeB1b); NmkCevni.put(CatNMK.NMK_MVTP, NoticeB2a); NmkCevni.put(CatNMK.NMK_MVTS, NoticeB2b);
    1071                 NmkCevni.put(CatNMK.NMK_KPTP, NoticeB3a); NmkCevni.put(CatNMK.NMK_KPTS, NoticeB3b); NmkCevni.put(CatNMK.NMK_CSTP, NoticeB4a); NmkCevni.put(CatNMK.NMK_CSTS, NoticeB4b);
    1072                 NmkCevni.put(CatNMK.NMK_STOP, NoticeB5); NmkCevni.put(CatNMK.NMK_SPDL, NoticeB6); NmkCevni.put(CatNMK.NMK_SHRN, NoticeB7); NmkCevni.put(CatNMK.NMK_KPLO, NoticeB8);
    1073                 NmkCevni.put(CatNMK.NMK_GWJN, NoticeB9a); NmkCevni.put(CatNMK.NMK_GWCS, NoticeB9b); NmkCevni.put(CatNMK.NMK_MKRC, NoticeB11);
    1074                 NmkCevni.put(CatNMK.NMK_LMDP, NoticeC1); NmkCevni.put(CatNMK.NMK_LMHR, NoticeC2);       NmkCevni.put(CatNMK.NMK_LMWD, NoticeC3); NmkCevni.put(CatNMK.NMK_NAVR, NoticeC4);
    1075                 NmkCevni.put(CatNMK.NMK_CHDL, NoticeC5a); NmkCevni.put(CatNMK.NMK_CHDR, NoticeC5b);
    1076                 NmkCevni.put(CatNMK.NMK_CHTW, NoticeD1a); NmkCevni.put(CatNMK.NMK_CHOW, NoticeD1b); NmkCevni.put(CatNMK.NMK_OPTR, NoticeD2a); NmkCevni.put(CatNMK.NMK_OPTL, NoticeD2b);
    1077                 NmkCevni.put(CatNMK.NMK_PRTL, NoticeD3a); NmkCevni.put(CatNMK.NMK_PRTR, NoticeD3b);
    1078                 NmkCevni.put(CatNMK.NMK_ENTP, NoticeE1); NmkCevni.put(CatNMK.NMK_OVHC, NoticeE2);       NmkCevni.put(CatNMK.NMK_WEIR, NoticeE3); NmkCevni.put(CatNMK.NMK_FERN, NoticeE4a);
    1079                 NmkCevni.put(CatNMK.NMK_FERI, NoticeE4b); NmkCevni.put(CatNMK.NMK_BRTP, NoticeE5);      NmkCevni.put(CatNMK.NMK_BTLL, NoticeE5_1); NmkCevni.put(CatNMK.NMK_BTLS, NoticeE5_2);
    1080                 NmkCevni.put(CatNMK.NMK_BTRL, NoticeE5_3); NmkCevni.put(CatNMK.NMK_BTUP, NoticeE5_4);   NmkCevni.put(CatNMK.NMK_BTP1, NoticeE5_5); NmkCevni.put(CatNMK.NMK_BTP2, NoticeE5_6);
    1081                 NmkCevni.put(CatNMK.NMK_BTP3, NoticeE5_7); NmkCevni.put(CatNMK.NMK_BTUN, NoticeE5_8);   NmkCevni.put(CatNMK.NMK_BTN1, NoticeE5_9); NmkCevni.put(CatNMK.NMK_BTN2, NoticeE5_10);
    1082                 NmkCevni.put(CatNMK.NMK_BTN3, NoticeE5_11); NmkCevni.put(CatNMK.NMK_BTUM, NoticeE5_12); NmkCevni.put(CatNMK.NMK_BTU1, NoticeE5_13); NmkCevni.put(CatNMK.NMK_BTU2, NoticeE5_14);
    1083                 NmkCevni.put(CatNMK.NMK_BTU3, NoticeE5_15); NmkCevni.put(CatNMK.NMK_ANKP, NoticeE6);    NmkCevni.put(CatNMK.NMK_MORP, NoticeE7); NmkCevni.put(CatNMK.NMK_VLBT, NoticeE7_1);
    1084                 NmkCevni.put(CatNMK.NMK_TRNA, NoticeE8); NmkCevni.put(CatNMK.NMK_SWWC, NoticeE9a);      NmkCevni.put(CatNMK.NMK_SWWR, NoticeE9b); NmkCevni.put(CatNMK.NMK_SWWL, NoticeE9c);
    1085                 NmkCevni.put(CatNMK.NMK_WRSA, NoticeE9d); NmkCevni.put(CatNMK.NMK_WLSA, NoticeE9e);     NmkCevni.put(CatNMK.NMK_WRSL, NoticeE9f); NmkCevni.put(CatNMK.NMK_WLSR, NoticeE9g);
    1086                 NmkCevni.put(CatNMK.NMK_WRAL, NoticeE9h); NmkCevni.put(CatNMK.NMK_WLAR, NoticeE9i);     NmkCevni.put(CatNMK.NMK_MWWC, NoticeE10a); NmkCevni.put(CatNMK.NMK_MWWJ, NoticeE10b);
    1087                 NmkCevni.put(CatNMK.NMK_MWAR, NoticeE10c); NmkCevni.put(CatNMK.NMK_MWAL, NoticeE10d);   NmkCevni.put(CatNMK.NMK_WARL, NoticeE10e); NmkCevni.put(CatNMK.NMK_WALR, NoticeE10f);
    1088                 NmkCevni.put(CatNMK.NMK_PEND, NoticeE11); NmkCevni.put(CatNMK.NMK_DWTR, NoticeE13);     NmkCevni.put(CatNMK.NMK_TELE, NoticeE14); NmkCevni.put(CatNMK.NMK_MTCP, NoticeE15);
    1089                 NmkCevni.put(CatNMK.NMK_SPCP, NoticeE16); NmkCevni.put(CatNMK.NMK_WSKP, NoticeE17);     NmkCevni.put(CatNMK.NMK_SLCP, NoticeE18); NmkCevni.put(CatNMK.NMK_UPCP, NoticeE19);
    1090                 NmkCevni.put(CatNMK.NMK_SLBP, NoticeE20); NmkCevni.put(CatNMK.NMK_RADI, NoticeE23);     NmkCevni.put(CatNMK.NMK_WTBP, NoticeE24); NmkCevni.put(CatNMK.NMK_HSCP, NoticeE21);
    1091                 NmkCevni.put(CatNMK.NMK_LBGP, NoticeE22);
    1092   };
    1093 
    1094   private static final Symbol NoticeBB = new Symbol();
    1095   static {
    1096         NoticeBB.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1097         NoticeBB.add(new Instr(Form.LINE, new Line2D.Double(-29,-29,-29,29)));
    1098         NoticeBB.add(new Instr(Form.LINE, new Line2D.Double(29,-29,29,29)));
    1099         NoticeBB.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1100         NoticeBB.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1101   }
    1102  
    1103   private static final Symbol NoticeBP = new Symbol();
    1104         static {
    1105                 NoticeBP.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1106                 NoticeBP.add(new Instr(Form.FILL, Color.white));
    1107                 NoticeBP.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1108                 NoticeBP.add(new Instr(Form.FILL, Color.black));
    1109                 NoticeBP.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1110         }
    1111 
    1112   private static final Symbol NoticeCR = new Symbol();
    1113         static {
    1114                 NoticeCR.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1115                 NoticeCR.add(new Instr(Form.FILL, Color.white));
    1116                 Path2D.Double p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(-30, 0); p.lineTo(0, 30); p.lineTo(30, 0); p.closePath();
    1117                 NoticeCR.add(new Instr(Form.PGON, p));
    1118                 NoticeCR.add(new Instr(Form.FILL, Color.black));
    1119                 NoticeCR.add(new Instr(Form.PLIN, p));
    1120         }
    1121 
    1122   private static final Symbol NoticeKT = new Symbol();
    1123         static {
    1124                 NoticeKT.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1125                 NoticeKT.add(new Instr(Form.FILL, Color.white));
    1126                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(-30,30); p.lineTo(30,30); p.closePath();
    1127                 NoticeKT.add(new Instr(Form.PGON, p));
    1128                 NoticeKT.add(new Instr(Form.FILL, Color.black));
    1129                 NoticeKT.add(new Instr(Form.PLIN, p));
    1130         }
    1131 
    1132         public static final Symbol NoticeBnank = new Symbol();
    1133         static {
    1134                 NoticeBnank.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1135                 Symbol colours = new Symbol();
    1136                 Symbol ss = new Symbol();
    1137                 ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1138                 colours.add(new Instr(Form.N1, ss));
    1139                 ss = new Symbol();
    1140                 ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, null, null)));
    1141                 ss.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    1142                 ss.add(new Instr(Form.LINE, new Line2D.Double(-27,-27,27,27)));
    1143                 ss.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1144                 ss.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1145                 colours.add(new Instr(Form.N2, ss));
    1146                 NoticeBnank.add(new Instr(Form.COLR, colours));
    1147         }
    1148         public static final Symbol NoticeBlmhr = new Symbol();
    1149         static {
    1150                 NoticeBlmhr.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1151                 Symbol colours = new Symbol();
    1152                 Symbol ss = new Symbol();
    1153                 ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1154                 colours.add(new Instr(Form.N1, ss));
    1155                 ss = new Symbol();
    1156                 ss.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    1157                 Path2D.Double p = new Path2D.Double(); p.moveTo(-29,-29); p.lineTo(29,-29); p.lineTo(0,0); p.closePath();
    1158                 ss.add(new Instr(Form.PGON, p));
    1159                 ss.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1160                 ss.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1161                 colours.add(new Instr(Form.N2, ss));
    1162                 NoticeBlmhr.add(new Instr(Form.COLR, colours));
    1163         }
    1164         public static final Symbol NoticeBktpm = new Symbol();
    1165         static {
    1166                 NoticeBktpm.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1167                 Symbol colours = new Symbol();
    1168                 Symbol ss = new Symbol();
    1169                 ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1170                 colours.add(new Instr(Form.N1, ss));
    1171                 ss = new Symbol();
    1172                 Path2D.Double p = new Path2D.Double(); p.moveTo(-14,-26); p.lineTo(-20,-12); p.lineTo(-8,-12); p.closePath();
    1173                 ss.add(new Instr(Form.PGON, p));
    1174         ss.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1175         ss.add(new Instr(Form.LINE, new Line2D.Double(-14,-16,-14,25)));
    1176                 ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
    1177                 colours.add(new Instr(Form.N2, ss));
    1178                 NoticeBktpm.add(new Instr(Form.COLR, colours));
    1179         }
    1180         public static final Symbol NoticeBktsm = new Symbol();
    1181         static {
    1182                 NoticeBktsm.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1183                 Symbol colours = new Symbol();
    1184                 Symbol ss = new Symbol();
    1185                 ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1186                 colours.add(new Instr(Form.N1, ss));
    1187                 ss = new Symbol();
    1188                 Path2D.Double p = new Path2D.Double(); p.moveTo(14,-26); p.lineTo(20,-12); p.lineTo(8,-12); p.closePath();
    1189                 ss.add(new Instr(Form.PGON, p));
    1190         ss.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1191         ss.add(new Instr(Form.LINE, new Line2D.Double(14,-16,14,25)));
    1192                 ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
    1193                 colours.add(new Instr(Form.N2, ss));
    1194                 NoticeBktsm.add(new Instr(Form.COLR, colours));
    1195         }
    1196         public static final Symbol NoticeBktmr = new Symbol();
    1197         static {
    1198                 NoticeBktmr.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1199                 Symbol colours = new Symbol();
    1200                 Symbol ss = new Symbol();
    1201                 ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1202                 colours.add(new Instr(Form.N1, ss));
    1203                 ss = new Symbol();
    1204                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,-26); p.lineTo(-6,-12); p.lineTo(6,-12); p.closePath();
    1205                 ss.add(new Instr(Form.PGON, p));
    1206         ss.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1207         ss.add(new Instr(Form.LINE, new Line2D.Double(0,-16,0,25)));
    1208                 ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
    1209                 colours.add(new Instr(Form.N2, ss));
    1210                 NoticeBktmr.add(new Instr(Form.COLR, colours));
    1211         }
    1212         public static final Symbol NoticeBcrtp = new Symbol();
    1213         static {
    1214                 NoticeBcrtp.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1215                 Symbol colours = new Symbol();
    1216                 Symbol ss = new Symbol();
    1217                 ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1218                 colours.add(new Instr(Form.N1, ss));
    1219                 ss = new Symbol();
    1220                 Path2D.Double p = new Path2D.Double(); p.moveTo(-14,-26); p.lineTo(-20,-12); p.lineTo(-8,-12); p.closePath();
    1221                 ss.add(new Instr(Form.PGON, p));
    1222         ss.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1223                 p = new Path2D.Double(); p.moveTo(-14,-16); p.lineTo(-14,0); p.lineTo(14,10); p.lineTo(14,25);
    1224                 ss.add(new Instr(Form.PLIN, p));
    1225                 ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
    1226                 colours.add(new Instr(Form.N2, ss));
    1227                 NoticeBcrtp.add(new Instr(Form.COLR, colours));
    1228         }
    1229         public static final Symbol NoticeBcrts = new Symbol();
    1230         static {
    1231                 NoticeBcrts.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1232                 Symbol colours = new Symbol();
    1233                 Symbol ss = new Symbol();
    1234                 ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1235                 colours.add(new Instr(Form.N1, ss));
    1236                 ss = new Symbol();
    1237                 Path2D.Double p = new Path2D.Double(); p.moveTo(14,-26); p.lineTo(20,-12); p.lineTo(8,-12); p.closePath();
    1238                 ss.add(new Instr(Form.PGON, p));
    1239         ss.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1240                 p = new Path2D.Double(); p.moveTo(14,-16); p.lineTo(14,0); p.lineTo(-14,10); p.lineTo(-14,25);
    1241                 ss.add(new Instr(Form.PLIN, p));
    1242                 ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
    1243                 colours.add(new Instr(Form.N2, ss));
    1244                 NoticeBcrts.add(new Instr(Form.COLR, colours));
    1245         }
    1246         public static final Symbol NoticeBtrbm = new Symbol();
    1247         static {
    1248                 NoticeBtrbm.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1249                 Symbol colours = new Symbol();
    1250                 Symbol ss = new Symbol();
    1251                 ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1252                 colours.add(new Instr(Form.N1, ss));
    1253                 ss = new Symbol();
    1254         ss.add(new Instr(Form.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1255         ss.add(new Instr(Form.LINE, new Line2D.Double(0,-25,0,25)));
    1256         ss.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1257         ss.add(new Instr(Form.LINE, new Line2D.Double(-20,0,20,0)));
    1258                 ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
    1259                 colours.add(new Instr(Form.N2, ss));
    1260                 NoticeBtrbm.add(new Instr(Form.COLR, colours));
    1261         }
    1262         public static final Symbol NoticeBrspd = new Symbol();
    1263         static {
    1264                 NoticeBrspd.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1265                 Symbol colours = new Symbol();
    1266                 Symbol ss = new Symbol();
    1267                 ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1268                 colours.add(new Instr(Form.N1, ss));
    1269                 ss = new Symbol();
    1270                 ss.add(new Instr(Form.TEXT, new Caption("R", new Font("Arial", Font.BOLD, 60), null, new Delta(Handle.CC, null))));
    1271                 ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
    1272                 colours.add(new Instr(Form.N2, ss));
    1273                 NoticeBrspd.add(new Instr(Form.COLR, colours));
    1274         }
    1275         static final Symbol NoticePBwral = new Symbol();
    1276         static {
    1277                 NoticePBwral.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1278                 NoticePBwral.add(new Instr(Form.FILL, new Color(0xffff00)));
    1279                 Path2D.Double p = new Path2D.Double(); p.moveTo(-20,-25); p.lineTo(-8,-5); p.lineTo(-8,25); p.lineTo(8,25); p.lineTo(8,-5);
    1280                 p.lineTo(20,-25); p.lineTo(5,-25); p.lineTo(-5,-10); p.lineTo(-15,-25); p.closePath();
    1281                 NoticePBwral.add(new Instr(Form.PGON, p));
    1282         }
    1283         public static final Symbol NoticeBwral = new Symbol();
    1284         static {
    1285                 NoticeBwral.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1286                 NoticeBwral.add(new Instr(Form.FILL, Color.black));
    1287                 NoticeBwral.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1288                 NoticeBwral.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticePBwral, 1.0, 0, 0, null, null)));
    1289         }
    1290         public static final Symbol NoticeBwlar = new Symbol();
    1291         static {
    1292                 NoticeBwlar.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1293                 NoticeBwlar.add(new Instr(Form.FILL, Color.black));
    1294                 NoticeBwlar.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
    1295                 NoticeBwlar.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticePBwral, 1.0, 0, 0, null, new Delta(Handle.CC, AffineTransform.getScaleInstance(-1, 1)))));
    1296         }
    1297         public static final Symbol NoticeBoptr = new Symbol();
    1298         static {
    1299                 NoticeBoptr.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1300                 NoticeBoptr.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBP, 1.0, 0, 0, null, null)));
    1301                 NoticeBoptr.add(new Instr(Form.FILL, new Color(0x00a000)));
    1302                 NoticeBoptr.add(new Instr(Form.RSHP, new Rectangle2D.Double(-20,-20,40,40)));
    1303         }
    1304         public static final Symbol NoticeBoptl = new Symbol();
    1305         static {
    1306                 NoticeBoptl.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1307                 NoticeBoptl.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBP, 1.0, 0, 0, null, null)));
    1308                 NoticeBoptl.add(new Instr(Form.FILL, new Color(0xf00000)));
    1309                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,-20); p.lineTo(-20,20); p.lineTo(20,20); p.closePath();
    1310                 NoticeBoptl.add(new Instr(Form.PGON, p));
    1311         }
    1312         public static final EnumMap<CatNMK, Symbol> NmkBniwr = new EnumMap<>(CatNMK.class);
    1313         static {
    1314                 NmkBniwr.put(CatNMK.NMK_NANK, NoticeBnank); NmkBniwr.put(CatNMK.NMK_LMHR, NoticeBlmhr); NmkBniwr.put(CatNMK.NMK_OPTR, NoticeBoptr); NmkBniwr.put(CatNMK.NMK_OPTL, NoticeBoptl);
    1315                 NmkBniwr.put(CatNMK.NMK_WRAL, NoticeBwral); NmkBniwr.put(CatNMK.NMK_WLAR, NoticeBwlar); NmkBniwr.put(CatNMK.NMK_KTPM, NoticeBktpm); NmkBniwr.put(CatNMK.NMK_KTSM, NoticeBktsm);
    1316                 NmkBniwr.put(CatNMK.NMK_KTMR, NoticeBktmr); NmkBniwr.put(CatNMK.NMK_CRTP, NoticeBcrtp); NmkBniwr.put(CatNMK.NMK_CRTS, NoticeBcrts); NmkBniwr.put(CatNMK.NMK_TRBM, NoticeBtrbm);
    1317                 NmkBniwr.put(CatNMK.NMK_RSPD, NoticeBrspd);
    1318         }
    1319         public static final Symbol NoticePwralL = new Symbol();
    1320         static {
    1321                 NoticePwralL.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1322                 NoticePwralL.add(new Instr(Form.FILL, Color.black));
    1323                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(-30,30); p.lineTo(30,30); p.closePath();
    1324                 NoticePwralL.add(new Instr(Form.PGON, p));
    1325                 NoticePwralL.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticePBwral, 1.0, 0, 0, null, new Delta(Handle.TC, AffineTransform.getScaleInstance(0.5, 0.5)))));
    1326         }
    1327         public static final Symbol NoticePwralR = new Symbol();
    1328         static {
    1329                 NoticePwralR.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1330                 NoticePwralR.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBwral, 1.0, 0, 0, null, null)));
    1331         }
    1332         public static final Symbol NoticePwlarL = new Symbol();
    1333         static {
    1334                 NoticePwlarL.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1335                 NoticePwlarL.add(new Instr(Form.FILL, Color.black));
    1336                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(-30,30); p.lineTo(30,30); p.closePath();
    1337                 NoticePwlarL.add(new Instr(Form.PGON, p));
    1338                 NoticePwlarL.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticePBwral, 1.0, 0, 0, null, new Delta(Handle.TC, AffineTransform.getScaleInstance(-0.5, 0.5)))));
    1339         }
    1340         public static final Symbol NoticePwlarR = new Symbol();
    1341         static {
    1342                 NoticePwlarR.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1343                 NoticePwlarR.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBwlar, 1.0, 0, 0, null, null)));
    1344         }
    1345         public static final Symbol NoticePktmR = new Symbol();
    1346         static {
    1347                 NoticePktmR.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1348                 NoticePktmR.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBP, 1.0, 0, 0, null, null)));
    1349                 NoticePktmR.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1350                 NoticePktmR.add(new Instr(Form.FILL, new Color(0x00d400)));
    1351                 NoticePktmR.add(new Instr(Form.RECT, new Rectangle2D.Double(-20,-20,40,40)));
    1352         }
    1353         public static final Symbol NoticePktmL = new Symbol();
    1354         static {
    1355                 NoticePktmL.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1356                 NoticePktmL.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeKT, 1.0, 0, 0, null, null)));
    1357                 NoticePktmL.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1358                 NoticePktmL.add(new Instr(Form.FILL, new Color(0xd40000)));
    1359                 NoticePktmL.add(new Instr(Form.RECT, new Rectangle2D.Double(-12,2,24,24)));
    1360         }
    1361         public static final Symbol NoticePktmrL = new Symbol();
    1362         static {
    1363                 NoticePktmrL.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1364                 NoticePktmrL.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeKT, 1.0, 0, 0, null, null)));
    1365                 NoticePktmrL.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1366                 NoticePktmrL.add(new Instr(Form.FILL, new Color(0xd40000)));
    1367                 NoticePktmrL.add(new Instr(Form.LINE, new Line2D.Double(-12,2,-12,28)));
    1368                 NoticePktmrL.add(new Instr(Form.LINE, new Line2D.Double(12,2,12,28)));
    1369                 NoticePktmrL.add(new Instr(Form.LINE, new Line2D.Double(-12,15,12,15)));
    1370         }
    1371         public static final Symbol NoticePktmrR = new Symbol();
    1372         static {
    1373                 NoticePktmrR.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1374                 NoticePktmrR.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBP, 1.0, 0, 0, null, null)));
    1375                 NoticePktmrR.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1376                 NoticePktmrR.add(new Instr(Form.FILL, new Color(0x00d400)));
    1377                 NoticePktmrR.add(new Instr(Form.LINE, new Line2D.Double(-15,-20,-15,20)));
    1378                 NoticePktmrR.add(new Instr(Form.LINE, new Line2D.Double(15,-20,15,20)));
    1379                 NoticePktmrR.add(new Instr(Form.LINE, new Line2D.Double(-15,0,15,0)));
    1380         }
    1381         public static final Symbol NoticePcrL = new Symbol();
    1382         static {
    1383                 NoticePcrL.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1384                 NoticePcrL.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1385                 NoticePcrL.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeCR, 1.0, 0, 0, null, null)));
    1386                 NoticePcrL.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1387                 NoticePcrL.add(new Instr(Form.FILL, new Color(0xd40000)));
    1388                 NoticePcrL.add(new Instr(Form.LINE, new Line2D.Double(-12,-12,12,12)));
    1389                 NoticePcrL.add(new Instr(Form.LINE, new Line2D.Double(-12,12,12,-12)));
    1390         }
    1391         public static final Symbol NoticePcrR = new Symbol();
    1392         static {
    1393                 NoticePcrR.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1394                 NoticePcrR.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeCR, 1.0, 0, 0, null, null)));
    1395                 NoticePcrR.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1396                 NoticePcrR.add(new Instr(Form.FILL, new Color(0x00d400)));
    1397                 NoticePcrR.add(new Instr(Form.LINE, new Line2D.Double(-12,-12,12,12)));
    1398                 NoticePcrR.add(new Instr(Form.LINE, new Line2D.Double(-12,12,12,-12)));
    1399         }
    1400         static final Symbol NoticeRphib = new Symbol();
    1401         static {
    1402                 NoticeRphib.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1403                 NoticeRphib.add(new Instr(Form.FILL, new Color(0xd40000)));
    1404                 NoticeRphib.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
    1405                 NoticeRphib.add(new Instr(Form.LINE, new Line2D.Double(-20,-20,20,20)));
    1406         }
    1407         static final Symbol NoticeRinfo = new Symbol();
    1408         static {
    1409                 NoticeRinfo.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1410                 NoticeRinfo.add(new Instr(Form.FILL, new Color(0xd40000)));
    1411                 NoticeRinfo.add(new Instr(Form.RECT, new Rectangle2D.Double(-30,-30,60,60)));
    1412         }
    1413         public static final Symbol NoticeRnpas = new Symbol();
    1414         static {
    1415                 NoticeRnpas.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1416                 NoticeRnpas.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRphib, 1.0, 0, 0, null, null)));
    1417                 NoticeRnpas.add(new Instr(Form.FILL, Color.black));
    1418                 Path2D.Double p = new Path2D.Double(); p.moveTo(-10,-15); p.lineTo(-10,8); p.lineTo(-6,8); p.lineTo(-12.5,16); p.lineTo(-19,8); p.lineTo(-15,8); p.lineTo(-15,-15);
    1419                 p.closePath(); p.moveTo(10,15); p.lineTo(10,-8); p.lineTo(6,-8); p.lineTo(12.5,-16); p.lineTo(19,-8); p.lineTo(15,-8); p.lineTo(15,15); p.closePath();
    1420                 NoticeRnpas.add(new Instr(Form.PGON, p));
    1421         }
    1422         public static final Symbol NoticeRnank = new Symbol();
    1423         static {
    1424                 NoticeRnank.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1425                 NoticeRnank.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRphib, 1.0, 0, 0, null, null)));
    1426                 NoticeRnank.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, new Scheme(Color.black), null)));
    1427         }
    1428         public static final Symbol NoticeRnwsh = new Symbol();
    1429         static {
    1430                 NoticeRnwsh.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1431                 NoticeRnwsh.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRphib, 1.0, 0, 0, null, null)));
    1432                 NoticeRnwsh.add(new Instr(Form.FILL, Color.black));
    1433                 Path2D.Double p = new Path2D.Double(); p.moveTo(-23,10); p.curveTo(-11,10,-12,4,0,4); p.curveTo(12,4,11,10,23,10);
    1434                 p.moveTo(-23,-3); p.curveTo(-11,-3,-12,-9,0,-9); p.curveTo(12,-9,11,-3,23,-3);
    1435                 NoticeRnwsh.add(new Instr(Form.PLIN, p));
    1436         }
    1437         public static final Symbol NoticeRlmhr = new Symbol();
    1438         static {
    1439                 NoticeRlmhr.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1440                 NoticeRlmhr.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRinfo, 1.0, 0, 0, null, null)));
    1441                 NoticeRlmhr.add(new Instr(Form.FILL, Color.black));
    1442                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,-10); p.lineTo(27,-27); p.lineTo(-27,-27); p.closePath();
    1443                 NoticeRlmhr.add(new Instr(Form.PGON, p));
    1444         }
    1445         public static final Symbol NoticeRtrna = new Symbol();
    1446         static {
    1447                 NoticeRtrna.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1448                 NoticeRtrna.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeCR, 1.0, 0, 0, null, null)));
    1449                 NoticeRtrna.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1450                 NoticeRtrna.add(new Instr(Form.EARC, new Arc2D.Double(-15.0,-15.0,30.0,30.0,315.0,-280.0,Arc2D.OPEN)));
    1451                 Path2D.Double p = new Path2D.Double(); p.moveTo(18.8,-2.0); p.lineTo(15.8,-13.2); p.lineTo(7.5,-5.0); p.closePath();
    1452                 NoticeRtrna.add(new Instr(Form.PGON, p));
    1453         }
    1454         public static final Symbol NoticeRncps = new Symbol();
    1455         static {
    1456                 NoticeRncps.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1457                 NoticeRncps.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRphib, 1.0, 0, 0, null, null)));
    1458                 NoticeRncps.add(new Instr(Form.FILL, Color.black));
    1459                 Path2D.Double p = new Path2D.Double(); p.moveTo(-10,0); p.lineTo(-10,8); p.lineTo(-6,8); p.lineTo(-12.5,16); p.lineTo(-19,8); p.lineTo(-15,8); p.lineTo(-15,0);
    1460                 p.closePath(); p.moveTo(10,0); p.lineTo(10,-8); p.lineTo(6,-8); p.lineTo(12.5,-16); p.lineTo(19,-8); p.lineTo(15,-8); p.lineTo(15,0); p.closePath();
    1461                 NoticeRncps.add(new Instr(Form.PGON, p));
    1462         }
    1463         public static final Symbol NoticeRnsmc = new Symbol();
    1464         static {
    1465                 NoticeRnsmc.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1466                 NoticeRnsmc.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRphib, 1.0, 0, 0, null, null)));
    1467                 NoticeRnsmc.add(new Instr(Form.FILL, Color.black));
    1468                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15,5); p.lineTo(15,5); p.lineTo(25,-10); p.lineTo(12,-5); p.lineTo(-18,-1); p.closePath();
    1469                 p.moveTo(-23,2); p.lineTo(-21,10); p.lineTo(-18,8); p.lineTo(-20,0); p.closePath();
    1470                 NoticeRnsmc.add(new Instr(Form.PGON, p));
    1471         }
    1472         public static final Symbol NoticeRattn = new Symbol();
    1473         static {
    1474                 NoticeRattn.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1475                 NoticeRattn.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRinfo, 1.0, 0, 0, null, null)));
    1476                 NoticeRattn.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    1477                 NoticeRattn.add(new Instr(Form.FILL, Color.black));
    1478                 NoticeRattn.add(new Instr(Form.LINE, new Line2D.Double(0,-20,0,10)));
    1479                 NoticeRattn.add(new Instr(Form.LINE, new Line2D.Double(0,15,0,20)));
    1480         }
    1481         public static final Symbol NoticeRfwcr = new Symbol();
    1482         static {
    1483                 NoticeRfwcr.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1484                 NoticeRfwcr.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRinfo, 1.0, 0, 0, null, null)));
    1485                 NoticeRfwcr.add(new Instr(Form.FILL, Color.black));
    1486                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,-25); p.lineTo(-8,-15); p.lineTo(-8,5); p.lineTo(-20,5); p.lineTo(-20,15); p.lineTo(-8,15); p.lineTo(-8,25);
    1487                 p.lineTo(8,25); p.lineTo(8,15); p.lineTo(20,15); p.lineTo(20,5); p.lineTo(8,5); p.lineTo(8,-15); p.closePath();
    1488                 NoticeRfwcr.add(new Instr(Form.PGON, p));
    1489         }
    1490         public static final Symbol NoticeRship = new Symbol();
    1491         static {
    1492                 NoticeRship.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
    1493                 NoticeRship.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeCR, 1.0, 0, 0, null, null)));
    1494                 NoticeRship.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
    1495                 NoticeRship.add(new Instr(Form.FILL, Color.black));
    1496                 NoticeRship.add(new Instr(Form.LINE, new Line2D.Double(-12,-12,10,10)));
    1497                 NoticeRship.add(new Instr(Form.LINE, new Line2D.Double(-12,-8,-8,-12)));
    1498                 NoticeRship.add(new Instr(Form.LINE, new Line2D.Double(12,-12,-10,10)));
    1499                 NoticeRship.add(new Instr(Form.LINE, new Line2D.Double(12,-8,8,-12)));
    1500                 NoticeRship.add(new Instr(Form.EARC, new Arc2D.Double(-17,-13,30,30,185,80,Arc2D.OPEN)));
    1501                 NoticeRship.add(new Instr(Form.EARC, new Arc2D.Double(-13,-13,30,30,275,80,Arc2D.OPEN)));
    1502         }
    1503 
    1504         public static final EnumMap<CatNMK, Symbol> NmkPpwbcl = new EnumMap<>(CatNMK.class);
    1505         static {
    1506                 NmkPpwbcl.put(CatNMK.NMK_WRAL, NoticePwralL); NmkPpwbcl.put(CatNMK.NMK_WLAR, NoticePwlarL); NmkPpwbcl.put(CatNMK.NMK_KTPM, NoticePktmL); NmkPpwbcl.put(CatNMK.NMK_KTSM, NoticePktmL);
    1507                 NmkPpwbcl.put(CatNMK.NMK_KTMR, NoticePktmrL); NmkPpwbcl.put(CatNMK.NMK_CRTP, NoticePcrL); NmkPpwbcl.put(CatNMK.NMK_CRTS, NoticePcrL);
    1508         }
    1509        
    1510         public static final EnumMap<CatNMK, Symbol> NmkPpwbcr = new EnumMap<>(CatNMK.class);
    1511         static {
    1512                 NmkPpwbcr.put(CatNMK.NMK_WRAL, NoticePwralR); NmkPpwbcr.put(CatNMK.NMK_WLAR, NoticePwlarR); NmkPpwbcr.put(CatNMK.NMK_KTPM, NoticePktmR); NmkPpwbcr.put(CatNMK.NMK_KTSM, NoticePktmR);
    1513                 NmkPpwbcr.put(CatNMK.NMK_KTMR, NoticePktmrR); NmkPpwbcr.put(CatNMK.NMK_CRTP, NoticePcrR); NmkPpwbcr.put(CatNMK.NMK_CRTS, NoticePcrR);
    1514         }
    1515        
    1516         public static final EnumMap<CatNMK, Symbol> NmkRiwr = new EnumMap<>(CatNMK.class);
    1517         static {
    1518                 NmkRiwr.put(CatNMK.NMK_NPAS, NoticeRnpas); NmkRiwr.put(CatNMK.NMK_NANK, NoticeRnank); NmkRiwr.put(CatNMK.NMK_NWSH, NoticeRnwsh); NmkRiwr.put(CatNMK.NMK_LMHR, NoticeRlmhr); NmkRiwr.put(CatNMK.NMK_TRNA, NoticeRtrna);
    1519                 NmkRiwr.put(CatNMK.NMK_NCPS, NoticeRncps); NmkRiwr.put(CatNMK.NMK_NSMC, NoticeRnsmc); NmkRiwr.put(CatNMK.NMK_ATTN, NoticeRattn); NmkRiwr.put(CatNMK.NMK_FWCR, NoticeRfwcr); NmkRiwr.put(CatNMK.NMK_SHIP, NoticeRship);
    1520         }
    1521        
    1522         public static Scheme getScheme(MarSYS sys, BnkWTW bank) {
    1523                 ArrayList<Color> colours = new ArrayList<>();
    1524                 Scheme scheme = new Scheme(colours);
    1525                 switch (sys) {
    1526                 case SYS_BNWR:
    1527                 case SYS_BWR2:
    1528                         switch (bank) {
    1529                         case BWW_LEFT:
    1530                                 colours.add(Color.white);
    1531                                 colours.add(new Color(0xf00000));
    1532                                 break;
    1533                         case BWW_RGHT:
    1534                                 colours.add(Color.white);
    1535                                 colours.add(new Color(0x00a000));
    1536                                 break;
    1537                         default:
    1538                                 colours.add(new Color(0xff8040));
    1539                                 colours.add(Color.black);
    1540                                 break;
    1541                         }
    1542                         break;
    1543                 default:
    1544                         break;
    1545                 }
    1546                 return scheme;
    1547         }
    1548        
    1549         public static Symbol getNotice(CatNMK cat, MarSYS sys, BnkWTW bank) {
    1550                 Symbol symbol = null;
    1551                 switch (sys) {
    1552                 case SYS_CEVN:
    1553                         symbol = NmkCevni.get(cat);
    1554                         break;
    1555                 case SYS_BNWR:
    1556                 case SYS_BWR2:
    1557                         symbol = NmkBniwr.get(cat);
    1558                         break;
    1559                 case SYS_PPWB:
    1560                         switch (bank) {
    1561                         case BWW_LEFT:
    1562                                 symbol = NmkPpwbcl.get(cat);
    1563                                 break;
    1564                         case BWW_RGHT:
    1565                                 symbol = NmkPpwbcr.get(cat);
    1566                                 break;
    1567                         default:
    1568                                 break;
    1569                         }
    1570                         break;
    1571                 case SYS_RIWR:
    1572                         symbol = NmkRiwr.get(cat);
    1573                         break;
    1574                 default:
    1575                         break;
    1576                 }
    1577                 return symbol;
    1578         }
     38    // CHECKSTYLE.OFF: LineLength
     39    private static final Symbol Bollard = new Symbol();
     40    static {
     41        Path2D.Double p = new Path2D.Double(); p.moveTo(20, 21); p.lineTo(20, 16.5); p.lineTo(11.6, 16.5); p.quadTo(9.1, 9.6, 8.3, 2.0); p.lineTo(-8.0, -0.3); p.quadTo(-8.6, 9.0, -11.3, 16.5);
     42        p.lineTo(-23.5, 16.5); p.lineTo(-23.5, 21.0); p.closePath(); p.moveTo(23.8, 3.0); p.lineTo(-10.7, -1.8); p.curveTo(-13.1, -2.2, -12.8, -6.0, -10.2, -5.8); p.lineTo(23.8, -1.1);
     43        p.closePath(); p.moveTo(8.4, -4.3); p.curveTo(9.0, -9.3, 9.0, -11.4, 11.2, -13.0); p.curveTo(12.8, -15.0, 12.8, -16.7, 11.0, -18.6); p.curveTo(4.0, -22.2, -4.0, -22.2, -11.0, -18.6);
     44        p.curveTo(-12.8, -16.7, -12.8, -15.0, -11.2, -13.0); p.curveTo(-9.0, -11.3, -8.7, -9.5, -8.4, -6.5); p.closePath();
     45        Bollard.add(new Instr(Form.PGON, p));
     46    }
     47
     48    private static final Symbol Motor = new Symbol();
     49    static {
     50        Path2D.Double p = new Path2D.Double(); p.moveTo(-5.0, 4.3); p.curveTo(-3.7, 5.5, -1.8, 5.7, -0.2, 4.9); p.curveTo(1.3, 8.7, 4.6, 10.9, 8.4, 10.9); p.curveTo(14.0, 10.9, 17.5, 6.3, 17.5, 2.0);
     51        p.curveTo(17.5, -0.7, 16.1, -3.2, 14.5, -3.2); p.curveTo(12.5, -3.2, 11.7, 0.8, 2.5, 1.1); p.curveTo(2.5, -1.2, 1.6, -2.2, 0.6, -3.0); p.curveTo(3.2, -5.6, 4.0, -12.6, -1.0, -16.1);
     52        p.curveTo(-5.3, -19.2, -11.6, -18.3, -13.7, -13.7); p.curveTo(-14.3, -12.2, -14.0, -11.2, -12.5, -10.6); p.curveTo(-8.6, -9.6, -5.3, -6.0, -4.0, -3.4); p.curveTo(-5.4, -2.6, -6.2, -2.0, -6.2, 0.2);
     53        p.curveTo(-12.8, -1.0, -17.5, 3.7, -17.5, 9.3); p.curveTo(-17.5, 14.7, -12.6, 18.8, -8.0, 17.6); p.curveTo(-7.0, 17.2, -6.6, 16.2, -7.2, 14.6); p.curveTo(-7.7, 12.4, -7.0, 7.7, -5.0, 4.3); p.closePath();
     54        Motor.add(new Instr(Form.PGON, p));
     55    }
     56
     57    private static final Symbol Rowboat = new Symbol();
     58    static {
     59        Path2D.Double p = new Path2D.Double(); p.moveTo(-17.5, -2.0); p.lineTo(17.5, -2.0); p.lineTo(15.0, 6.0); p.lineTo(-11.0, 6.0); p.closePath();
     60        Rowboat.add(new Instr(Form.PGON, p));
     61        Rowboat.add(new Instr(Form.RSHP, new Ellipse2D.Double(-6, -17.5, 6, 6)));
     62        Rowboat.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     63        Rowboat.add(new Instr(Form.LINE, new Line2D.Double(-5.5, -9, -8, 0)));
     64        Rowboat.add(new Instr(Form.LINE, new Line2D.Double(-5.0, 10.0, -7.5, 14.0)));
     65        Rowboat.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     66        Rowboat.add(new Instr(Form.LINE, new Line2D.Double(-5.5, -9, 7, -6.5)));
     67        Rowboat.add(new Instr(Form.LINE, new Line2D.Double(7.3, -7.8, -5.0, 10.0)));
     68    }
     69
     70    private static final Symbol Sailboard = new Symbol();
     71    static {
     72        Path2D.Double p = new Path2D.Double(); p.moveTo(-6.0, 19.0); p.quadTo(-4.0, -5, 1.5, -20.0); p.quadTo(14, -7, 15.5, 6.5); p.quadTo(7, 17, -6.0, 19.0); p.closePath();
     73        Sailboard.add(new Instr(Form.PGON, p));
     74        Sailboard.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     75        Sailboard.add(new Instr(Form.LINE, new Line2D.Double(-2, 20, -10, 20)));
     76        Sailboard.add(new Instr(Form.LINE, new Line2D.Double(-13, 2.5, -3, 2.5)));
     77        Sailboard.add(new Instr(Form.RSHP, new Ellipse2D.Double(-15, -4, 5, 5)));
     78        Sailboard.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     79        p = new Path2D.Double(); p.moveTo(-13, 2.5); p.lineTo(-12, 6.0); p.lineTo(-12, 9.5);
     80        Sailboard.add(new Instr(Form.PLIN, p));
     81        Sailboard.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     82        p = new Path2D.Double(); p.moveTo(-12, 9.5); p.lineTo(-7.5, 13.0); p.lineTo(-6.0, 19.0);
     83        Sailboard.add(new Instr(Form.PLIN, p));
     84    }
     85
     86    private static final Symbol Sailboat = new Symbol();
     87    static {
     88        Path2D.Double p = new Path2D.Double(); p.moveTo(3.75, -20.5); p.lineTo(3.75, 8.5); p.lineTo(-19.5, 8.5); p.closePath();
     89        Sailboat.add(new Instr(Form.PGON, p));
     90        p = new Path2D.Double(); p.moveTo(-19.5, 12.0); p.lineTo(19.5, 12.0); p.lineTo(13.0, 20.5); p.lineTo(-16.0, 20.5); p.closePath();
     91        Sailboat.add(new Instr(Form.PGON, p));
     92    }
     93
     94    private static final Symbol Slipway = new Symbol();
     95    static {
     96        Path2D.Double p = new Path2D.Double(); p.moveTo(-17, -5.5); p.lineTo(-13.5, 0); p.lineTo(4, -1.5); p.quadTo(18, -5, 20, -13.5); p.closePath();
     97        p.moveTo(-14, 7); p.lineTo(-14, 11); p.lineTo(20, 11); p.lineTo(20, 2); p.closePath();
     98        Slipway.add(new Instr(Form.PGON, p));
     99        Slipway.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     100        Slipway.add(new Instr(Form.LINE, new Line2D.Double(-14, 3, 20, -2.5)));
     101        Slipway.add(new Instr(Form.STRK, new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     102        Slipway.add(new Instr(Form.ELPS, new Ellipse2D.Double(1, 1.5, 3, 3)));
     103        p = new Path2D.Double(); p.moveTo(-21, 8.5); p.curveTo(-17.5, 5, -17.5, 12, -13, 7.2);
     104        Slipway.add(new Instr(Form.PLIN, p));
     105    }
     106
     107    private static final Symbol Speedboat = new Symbol();
     108    static {
     109        Speedboat.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     110        Speedboat.add(new Instr(Form.LINE, new Line2D.Double(-21, 0, -17, -1)));
     111        Path2D.Double p = new Path2D.Double(); p.moveTo(-17.5, 8.5); p.curveTo(-10.5, 13, -2.5, 2, 4, 6); p.curveTo(12, 2, 11.5, 9.5, 20, 6);
     112        Speedboat.add(new Instr(Form.PLIN, p));
     113        p = new Path2D.Double(); p.moveTo(-18.5, 1.5); p.lineTo(-16, 6); p.curveTo(-9, 9.0, -3.5, -2.0, 4.5, 3.5); p.lineTo(14.5, 0); p.quadTo(19, -3, 19.5, -9);
     114        p.lineTo(9.5, -6); p.lineTo(6.5, -8); p.lineTo(2.5, -4); p.closePath();
     115        Speedboat.add(new Instr(Form.PGON, p));
     116        Speedboat.add(new Instr(Form.RSHP, new Ellipse2D.Double(-1.5, -13, 5, 5)));
     117        Speedboat.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     118        Speedboat.add(new Instr(Form.LINE, new Line2D.Double(-2, -7, -5, 0)));
     119        Speedboat.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     120        Speedboat.add(new Instr(Form.LINE, new Line2D.Double(-2, -7, 5, -5)));
     121    }
     122
     123    private static final Symbol Turn = new Symbol();
     124    static {
     125        Turn.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     126        Turn.add(new Instr(Form.EARC, new Arc2D.Double(-9.0, -9.0, 18.0, 18.0, 270.0, 230.0, Arc2D.OPEN)));
     127        Turn.add(new Instr(Form.EARC, new Arc2D.Double(-20.0, -20.0, 40.0, 40.0, 315.0, -280.0, Arc2D.OPEN)));
     128        Path2D.Double p = new Path2D.Double(); p.moveTo(21.8, -7.0); p.lineTo(18.8, -18.2); p.lineTo(10.5, -10.0); p.closePath();
     129        p.moveTo(-12.9, 0.7); p.lineTo(-1.7, -2.3); p.lineTo(-9.9, -10.5); p.closePath();
     130        Turn.add(new Instr(Form.PGON, p));
     131    }
     132
     133    private static final Symbol Waterbike = new Symbol();
     134    static {
     135        Path2D.Double p = new Path2D.Double(); p.moveTo(-17.5, 13); p.curveTo(-10.5, 17.5, -2.5, 6.5, 4, 10.5); p.curveTo(12, 6.5, 11.5, 14, 20, 10.5);
     136        Waterbike.add(new Instr(Form.PLIN, p));
     137        p = new Path2D.Double(); p.moveTo(-16.5, 9.5); p.lineTo(-16, 10.5); p.curveTo(-9, 13.5, -3.5, 2.5, 4.5, 8); p.quadTo(15, 4, 19.5, -4); p.closePath();
     138        p.moveTo(19.5, -5); p.lineTo(1, -5); p.lineTo(-4.5, -10); p.lineTo(-5.5, -10); p.lineTo(2, -2); p.lineTo(-15, 4); p.lineTo(-16, 8); p.closePath();
     139        Waterbike.add(new Instr(Form.PGON, p));
     140        Waterbike.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     141        p = new Path2D.Double(); p.moveTo(-7, 1); p.lineTo(-7.5, -1.5); p.lineTo(-12.5, -3.5); p.lineTo(-11.5, -10.5);
     142        Waterbike.add(new Instr(Form.PLIN, p));
     143        Waterbike.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     144        Waterbike.add(new Instr(Form.LINE, new Line2D.Double(-11.5, -10.5, -3, -8.5)));
     145        Waterbike.add(new Instr(Form.RSHP, new Ellipse2D.Double(-11.5, -18, 5, 5)));
     146    }
     147
     148    private static final Symbol Waterski = new Symbol();
     149    static {
     150        Waterski.add(new Instr(Form.RSHP, new Ellipse2D.Double(12, -18, 6, 6)));
     151        Waterski.add(new Instr(Form.STRK, new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     152        Waterski.add(new Instr(Form.LINE, new Line2D.Double(-18, -6, 0, -6)));
     153        Waterski.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     154        Path2D.Double p = new Path2D.Double(); p.moveTo(6.5, 17.5); p.lineTo(-13, 14.5); p.curveTo(-15, 14.25, -16.0, 13.6, -17.5, 12.0);
     155        Waterski.add(new Instr(Form.PLIN, p));
     156        Waterski.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     157        p = new Path2D.Double(); p.moveTo(-1.5, -4.0); p.lineTo(14, -7.5); p.lineTo(9.5, 3.5); p.lineTo(2.0, 6.0); p.lineTo(-4.4, 15.8);
     158        Waterski.add(new Instr(Form.PLIN, p));
     159    }
     160
     161    private static final Symbol NoticeA = new Symbol();
     162    static {
     163        NoticeA.add(new Instr(Form.FILL, new Color(0xe80000)));
     164        NoticeA.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     165        NoticeA.add(new Instr(Form.FILL, Color.white));
     166        NoticeA.add(new Instr(Form.RSHP, new Rectangle2D.Double(-21, -21, 42, 42)));
     167        NoticeA.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     168        NoticeA.add(new Instr(Form.FILL, new Color(0xe80000)));
     169        NoticeA.add(new Instr(Form.LINE, new Line2D.Double(-25, -25, 25, 25)));
     170        NoticeA.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     171        NoticeA.add(new Instr(Form.FILL, Color.black));
     172        NoticeA.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     173    }
     174
     175    private static final Symbol NoticeB = new Symbol();
     176    static {
     177        NoticeB.add(new Instr(Form.FILL, new Color(0xe80000)));
     178        NoticeB.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     179        NoticeB.add(new Instr(Form.FILL, Color.white));
     180        NoticeB.add(new Instr(Form.RSHP, new Rectangle2D.Double(-21, -21, 42, 42)));
     181        NoticeB.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     182        NoticeB.add(new Instr(Form.FILL, Color.black));
     183        NoticeB.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     184    }
     185
     186    private static final Symbol NoticeE = new Symbol();
     187    static {
     188        NoticeE.add(new Instr(Form.FILL, new Color(0x0000a0)));
     189        NoticeE.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     190        NoticeE.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     191        NoticeE.add(new Instr(Form.FILL, Color.black));
     192        NoticeE.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     193        NoticeE.add(new Instr(Form.FILL, Color.white));
     194    }
     195
     196    public static final Symbol Notice = new Symbol();
     197    static {
     198        Notice.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     199        Notice.add(new Instr(Form.FILL, new Color(0xe80000)));
     200        Notice.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     201        Notice.add(new Instr(Form.FILL, new Color(0x0000a0)));
     202        Notice.add(new Instr(Form.RSHP, new Rectangle2D.Double(-21, -21, 42, 42)));
     203        Notice.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     204        Notice.add(new Instr(Form.FILL, Color.black));
     205        Notice.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     206    }
     207
     208    public static final Symbol NoticeA1 = new Symbol();
     209    static {
     210        NoticeA1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     211        NoticeA1.add(new Instr(Form.FILL, new Color(0xe80000)));
     212        NoticeA1.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     213        NoticeA1.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     214        NoticeA1.add(new Instr(Form.FILL, Color.white));
     215        NoticeA1.add(new Instr(Form.RSHP, new Rectangle2D.Double(-30, -10, 60, 20)));
     216        NoticeA1.add(new Instr(Form.FILL, Color.black));
     217        NoticeA1.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     218    }
     219
     220    public static final Symbol NoticeA1a = new Symbol();
     221    static {
     222        NoticeA1a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     223        NoticeA1a.add(new Instr(Form.FILL, new Color(0xe80000)));
     224        NoticeA1a.add(new Instr(Form.RSHP, new Ellipse2D.Double(-30, -30, 60, 60)));
     225        NoticeA1a.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     226        NoticeA1a.add(new Instr(Form.FILL, Color.white));
     227        NoticeA1a.add(new Instr(Form.RSHP, new Rectangle2D.Double(-29, -10, 58, 20)));
     228        NoticeA1a.add(new Instr(Form.FILL, Color.black));
     229        NoticeA1a.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30, -30, 60, 60)));
     230    }
     231
     232    public static final Symbol NoticeA2 = new Symbol();
     233    static {
     234        NoticeA2.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     235        NoticeA2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     236        NoticeA2.add(new Instr(Form.FILL, Color.black));
     237        Path2D.Double p = new Path2D.Double(); p.moveTo(-10, 23); p.lineTo(-10, 0); p.lineTo(-6, 0); p.lineTo(-12.5, -8); p.lineTo(-19, 0); p.lineTo(-15, 0); p.lineTo(-15, 23);
     238        p.closePath(); p.moveTo(10, 8); p.lineTo(10, -15); p.lineTo(6, -15); p.lineTo(12.5, -23); p.lineTo(19, -15); p.lineTo(15, -15); p.lineTo(15, 8); p.closePath();
     239        NoticeA2.add(new Instr(Form.PGON, p));
     240    }
     241
     242    public static final Symbol NoticeA3 = new Symbol();
     243    static {
     244        NoticeA3.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     245        NoticeA3.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA2, 1.0, 0, 0, null, null)));
     246        Path2D.Double p = new Path2D.Double(); p.moveTo(-10, 12); p.lineTo(-6, 12); p.lineTo(-12.5, 4); p.lineTo(-19, 12);
     247        p.closePath(); p.moveTo(10, -3); p.lineTo(6, -3); p.lineTo(12.5, -11); p.lineTo(19, -3); p.closePath();
     248        NoticeA3.add(new Instr(Form.PGON, p));
     249    }
     250
     251    public static final Symbol NoticeA4 = new Symbol();
     252    static {
     253        NoticeA4.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     254        NoticeA4.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     255        NoticeA4.add(new Instr(Form.FILL, Color.black));
     256        Path2D.Double p = new Path2D.Double(); p.moveTo(-10, -15); p.lineTo(-10, 8); p.lineTo(-6, 8); p.lineTo(-12.5, 16); p.lineTo(-19, 8); p.lineTo(-15, 8); p.lineTo(-15, -15);
     257        p.closePath(); p.moveTo(10, 15); p.lineTo(10, -8); p.lineTo(6, -8); p.lineTo(12.5, -16); p.lineTo(19, -8); p.lineTo(15, -8); p.lineTo(15, 15); p.closePath();
     258        NoticeA4.add(new Instr(Form.PGON, p));
     259    }
     260
     261    public static final Symbol NoticeA4_1 = new Symbol();
     262    static {
     263        NoticeA4_1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     264        NoticeA4_1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA4, 1.0, 0, 0, null, null)));
     265        Path2D.Double p = new Path2D.Double(); p.moveTo(-10, -4); p.lineTo(-6, -4); p.lineTo(-12.5, 4); p.lineTo(-19, -4);
     266        p.closePath(); p.moveTo(10, 5); p.lineTo(6, 5); p.lineTo(12.5, -3); p.lineTo(19, 5); p.closePath();
     267        NoticeA4_1.add(new Instr(Form.PGON, p));
     268    }
     269
     270    public static final Symbol NoticeA5 = new Symbol();
     271    static {
     272        NoticeA5.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     273        NoticeA5.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     274        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD); p.moveTo(-5.3, 14.6); p.lineTo(-5.3, 4.0); p.lineTo(0.0, 4.0); p.curveTo(4.2, 4.0, 7.4, 3.5, 9.4, 0.0);
     275        p.curveTo(11.4, -2.8, 11.4, -7.2, 9.4, -10.5); p.curveTo(7.4, -13.6, 4.2, -14.0, 0.0, -14.0); p.lineTo(-11.0, -14.0); p.lineTo(-11.0, 14.6); p.closePath();
     276        p.moveTo(-5.3, -1.0); p.lineTo(0.0, -1.0); p.curveTo(6.5, -1.0, 6.5, -9.0, 0.0, -9.0); p.lineTo(-5.3, -9.0); p.closePath();
     277        NoticeA5.add(new Instr(Form.PGON, p));
     278    }
     279
     280    public static final Symbol NoticeA5_1 = new Symbol();
     281    static {
     282        NoticeA5_1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     283        NoticeA5_1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     284    }
     285
     286    public static final Symbol NoticeA6 = new Symbol();
     287    static {
     288        NoticeA6.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     289        NoticeA6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     290        NoticeA6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, new Scheme(Color.black), new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(180.0))))));
     291    }
     292
     293    public static final Symbol NoticeA7 = new Symbol();
     294    static {
     295        NoticeA7.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     296        NoticeA7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     297        NoticeA7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Bollard, 1.0, 0, 0, new Scheme(Color.black), null)));
     298    }
     299
     300    public static final Symbol NoticeA8 = new Symbol();
     301    static {
     302        NoticeA8.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     303        NoticeA8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     304        NoticeA8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Turn, 1.0, 0, 0, new Scheme(Color.black), null)));
     305    }
     306
     307    public static final Symbol NoticeA9 = new Symbol();
     308    static {
     309        NoticeA9.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     310        NoticeA9.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     311        NoticeA9.add(new Instr(Form.STRK, new BasicStroke(7, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     312        NoticeA9.add(new Instr(Form.FILL, Color.black));
     313        Path2D.Double p = new Path2D.Double(); p.moveTo(-23, 10); p.curveTo(-11, 10, -12, 4, 0, 4); p.curveTo(12, 4, 11, 10, 23, 10);
     314        p.moveTo(-23, -3); p.curveTo(-11, -3, -12, -9, 0, -9); p.curveTo(12, -9, 11, -3, 23, -3);
     315        NoticeA9.add(new Instr(Form.PLIN, p));
     316    }
     317
     318    public static final Symbol NoticeA10a = new Symbol();
     319    static {
     320        NoticeA10a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     321        NoticeA10a.add(new Instr(Form.FILL, Color.white));
     322        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(30, 0); p.lineTo(0, 30); p.closePath();
     323        NoticeA10a.add(new Instr(Form.PGON, p));
     324        NoticeA10a.add(new Instr(Form.FILL, new Color(0xe80000)));
     325        p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(-30, 0); p.lineTo(0, 30); p.closePath();
     326        NoticeA10a.add(new Instr(Form.PGON, p));
     327        NoticeA10a.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     328        NoticeA10a.add(new Instr(Form.FILL, Color.black));
     329        p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(-30, 0); p.lineTo(0, 30); p.lineTo(30, 0); p.closePath();
     330        NoticeA10a.add(new Instr(Form.PLIN, p));
     331    }
     332
     333    public static final Symbol NoticeA10b = new Symbol();
     334    static {
     335        NoticeA10b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     336        NoticeA10b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA10a, 1.0, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(180.0))))));
     337    }
     338
     339    public static final Symbol NoticeA12 = new Symbol();
     340    static {
     341        NoticeA12.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     342        NoticeA12.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     343        NoticeA12.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Motor, 1.0, 0, 0, new Scheme(Color.black), null)));
     344    }
     345
     346    public static final Symbol NoticeA13 = new Symbol();
     347    static {
     348        NoticeA13.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     349        NoticeA13.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     350        NoticeA13.add(new Instr(Form.TEXT, new Caption("SPORT", new Font("Arial", Font.BOLD, 15), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 5)))));
     351    }
     352
     353    public static final Symbol NoticeA14 = new Symbol();
     354    static {
     355        NoticeA14.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     356        NoticeA14.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     357        NoticeA14.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Waterski, 1.0, 0, 0, new Scheme(Color.black), null)));
     358    }
     359
     360    public static final Symbol NoticeA15 = new Symbol();
     361    static {
     362        NoticeA15.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     363        NoticeA15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     364        NoticeA15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Sailboat, 1.0, 0, 0, new Scheme(Color.black), null)));
     365    }
     366
     367    public static final Symbol NoticeA16 = new Symbol();
     368    static {
     369        NoticeA16.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     370        NoticeA16.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     371        NoticeA16.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Rowboat, 1.0, 0, 0, new Scheme(Color.black), null)));
     372    }
     373
     374    public static final Symbol NoticeA17 = new Symbol();
     375    static {
     376        NoticeA17.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     377        NoticeA17.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     378        NoticeA17.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Sailboard, 1.0, 0, 0, new Scheme(Color.black), null)));
     379    }
     380
     381    public static final Symbol NoticeA18 = new Symbol();
     382    static {
     383        NoticeA18.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     384        NoticeA18.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     385        NoticeA18.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Speedboat, 1.0, 0, 0, new Scheme(Color.black), null)));
     386    }
     387
     388    public static final Symbol NoticeA19 = new Symbol();
     389    static {
     390        NoticeA19.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     391        NoticeA19.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     392        NoticeA19.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Slipway, 1.0, 0, 0, new Scheme(Color.black), null)));
     393    }
     394
     395    public static final Symbol NoticeA20 = new Symbol();
     396    static {
     397        NoticeA20.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     398        NoticeA20.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
     399        NoticeA20.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Waterbike, 1.0, 0, 0, new Scheme(Color.black), null)));
     400    }
     401
     402    public static final Symbol NoticeB1a = new Symbol();
     403    static {
     404        NoticeB1a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     405        NoticeB1a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     406        Path2D.Double p = new Path2D.Double(); p.moveTo(21, 8); p.lineTo(-8, 8); p.lineTo(-8, 18); p.lineTo(-21, 0);
     407        p.lineTo(-8, -18); p.lineTo(-8, -8); p.lineTo(21, -8); p.closePath();
     408        NoticeB1a.add(new Instr(Form.PGON, p));
     409    }
     410
     411    public static final Symbol NoticeB1b = new Symbol();
     412    static {
     413        NoticeB1b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     414        NoticeB1b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     415        Path2D.Double p = new Path2D.Double(); p.moveTo(-21, 8); p.lineTo(8, 8); p.lineTo(8, 18); p.lineTo(21, 0);
     416        p.lineTo(8, -18); p.lineTo(8, -8); p.lineTo(-21, -8); p.closePath();
     417        NoticeB1b.add(new Instr(Form.PGON, p));
     418    }
     419
     420    public static final Symbol NoticeB2a = new Symbol();
     421    static {
     422        NoticeB2a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     423        NoticeB2a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     424        NoticeB2a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     425        Path2D.Double p = new Path2D.Double(); p.moveTo(18, 21); p.lineTo(18, 10); p.lineTo(-15, -10); p.lineTo(-15, -15);
     426        NoticeB2a.add(new Instr(Form.PLIN, p));
     427        p = new Path2D.Double(); p.moveTo(-15, -21); p.lineTo(-21, -15); p.lineTo(-9, -15); p.closePath();
     428        NoticeB2a.add(new Instr(Form.PGON, p));
     429    }
     430
     431    public static final Symbol NoticeB2b = new Symbol();
     432    static {
     433        NoticeB2b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     434        NoticeB2b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     435        NoticeB2b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     436        NoticeB2b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     437        Path2D.Double p = new Path2D.Double(); p.moveTo(-18, 21); p.lineTo(-18, 10); p.lineTo(15, -10); p.lineTo(15, -15);
     438        NoticeB2b.add(new Instr(Form.PLIN, p));
     439        p = new Path2D.Double(); p.moveTo(15, -21); p.lineTo(21, -15); p.lineTo(9, -15); p.closePath();
     440        NoticeB2b.add(new Instr(Form.PGON, p));
     441    }
     442
     443    public static final Symbol NoticeB3a = new Symbol();
     444    static {
     445        NoticeB3a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     446        NoticeB3a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     447        NoticeB3a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     448        NoticeB3a.add(new Instr(Form.LINE, new Line2D.Double(-15, 21, -15, -15)));
     449        Path2D.Double p = new Path2D.Double(); p.moveTo(-15, -21); p.lineTo(-21, -15); p.lineTo(-9, -15); p.closePath();
     450        NoticeB3a.add(new Instr(Form.PGON, p));
     451        NoticeB3a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] {5.5f, 2.4f}, 0.0f)));
     452        NoticeB3a.add(new Instr(Form.LINE, new Line2D.Double(15, -21, 15, 15)));
     453        p = new Path2D.Double(); p.moveTo(15, 21); p.lineTo(21, 15); p.lineTo(9, 15); p.closePath();
     454        NoticeB3a.add(new Instr(Form.PGON, p));
     455    }
     456
     457    public static final Symbol NoticeB3b = new Symbol();
     458    static {
     459        NoticeB3b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     460        NoticeB3b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     461        NoticeB3b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     462        NoticeB3b.add(new Instr(Form.LINE, new Line2D.Double(15, 21, 15, -15)));
     463        Path2D.Double p = new Path2D.Double(); p.moveTo(15, -21); p.lineTo(21, -15); p.lineTo(9, -15); p.closePath();
     464        NoticeB3b.add(new Instr(Form.PGON, p));
     465        NoticeB3b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] {5.5f, 2.4f}, 0.0f)));
     466        NoticeB3b.add(new Instr(Form.LINE, new Line2D.Double(-15, -21, -15, 15)));
     467        p = new Path2D.Double(); p.moveTo(-15, 21); p.lineTo(-21, 15); p.lineTo(-9, 15); p.closePath();
     468        NoticeB3b.add(new Instr(Form.PGON, p));
     469    }
     470
     471    public static final Symbol NoticeB4a = new Symbol();
     472    static {
     473        NoticeB4a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     474        NoticeB4a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB2a, 1.0, 0, 0, null, null)));
     475        NoticeB4a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] {5.5f, 2.4f}, 0.0f)));
     476        Path2D.Double p = new Path2D.Double(); p.moveTo(18, -21); p.lineTo(18, -10); p.lineTo(-15, 10); p.lineTo(-15, 15);
     477        NoticeB4a.add(new Instr(Form.PLIN, p));
     478        p = new Path2D.Double(); p.moveTo(-15, 21); p.lineTo(-21, 15); p.lineTo(-9, 15); p.closePath();
     479        NoticeB4a.add(new Instr(Form.PGON, p));
     480    }
     481
     482    public static final Symbol NoticeB4b = new Symbol();
     483    static {
     484        NoticeB4b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     485        NoticeB4b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB2b, 1.0, 0, 0, null, null)));
     486        NoticeB4b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] {5.5f, 2.4f}, 0.0f)));
     487        Path2D.Double p = new Path2D.Double(); p.moveTo(-18, -21); p.lineTo(-18, -10); p.lineTo(15, 10); p.lineTo(15, 15);
     488        NoticeB4b.add(new Instr(Form.PLIN, p));
     489        p = new Path2D.Double(); p.moveTo(15, 21); p.lineTo(21, 15); p.lineTo(9, 15); p.closePath();
     490        NoticeB4b.add(new Instr(Form.PGON, p));
     491    }
     492
     493    public static final Symbol NoticeB5 = new Symbol();
     494    static {
     495        NoticeB5.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     496        NoticeB5.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     497        NoticeB5.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     498        NoticeB5.add(new Instr(Form.LINE, new Line2D.Double(15, 0, -15, 0)));
     499    }
     500
     501    public static final Symbol NoticeB6 = new Symbol();
     502    static {
     503        NoticeB6.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     504        NoticeB6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     505    }
     506
     507    public static final Symbol NoticeB7 = new Symbol();
     508    static {
     509        NoticeB7.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     510        NoticeB7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     511        NoticeB7.add(new Instr(Form.RSHP, new Ellipse2D.Double(-10, -10, 20, 20)));
     512    }
     513
     514    public static final Symbol NoticeB8 = new Symbol();
     515    static {
     516        NoticeB8.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     517        NoticeB8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     518        NoticeB8.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     519        NoticeB8.add(new Instr(Form.LINE, new Line2D.Double(0, 15, 0, -15)));
     520    }
     521
     522    public static final Symbol NoticeB9a = new Symbol();
     523    static {
     524        NoticeB9a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     525        NoticeB9a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     526        NoticeB9a.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     527        NoticeB9a.add(new Instr(Form.LINE, new Line2D.Double(-21, 0, 21, 0)));
     528        NoticeB9a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     529        NoticeB9a.add(new Instr(Form.LINE, new Line2D.Double(0, 21, 0, 0)));
     530    }
     531
     532    public static final Symbol NoticeB9b = new Symbol();
     533    static {
     534        NoticeB9b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     535        NoticeB9b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     536        NoticeB9b.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     537        NoticeB9b.add(new Instr(Form.LINE, new Line2D.Double(-21, 0, 21, 0)));
     538        NoticeB9b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     539        NoticeB9b.add(new Instr(Form.LINE, new Line2D.Double(0, 21, 0, -21)));
     540    }
     541
     542    public static final Symbol NoticeB11 = new Symbol();
     543    static {
     544        NoticeB11.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     545        NoticeB11.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     546        NoticeB11.add(new Instr(Form.TEXT, new Caption("VHF", new Font("Arial", Font.BOLD, 20), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)))));
     547    }
     548
     549    public static final Symbol NoticeC1 = new Symbol();
     550    static {
     551        NoticeC1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     552        NoticeC1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     553        Path2D.Double p = new Path2D.Double(); p.moveTo(-15, 21); p.lineTo(0, 12); p.lineTo(15, 21); p.closePath();
     554        NoticeC1.add(new Instr(Form.PGON, p));
     555    }
     556
     557    public static final Symbol NoticeC2 = new Symbol();
     558    static {
     559        NoticeC2.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     560        NoticeC2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     561        Path2D.Double p = new Path2D.Double(); p.moveTo(-15, -21); p.lineTo(0, -12); p.lineTo(15, -21); p.closePath();
     562        NoticeC2.add(new Instr(Form.PGON, p));
     563    }
     564
     565    public static final Symbol NoticeC3 = new Symbol();
     566    static {
     567        NoticeC3.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     568        NoticeC3.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     569        Path2D.Double p = new Path2D.Double(); p.moveTo(21, -15); p.lineTo(12, 0); p.lineTo(21, 15); p.closePath();
     570        p.moveTo(-21, -15); p.lineTo(-12, 0); p.lineTo(-21, 15); p.closePath();
     571        NoticeC3.add(new Instr(Form.PGON, p));
     572    }
     573
     574    public static final Symbol NoticeC4 = new Symbol();
     575    static {
     576        NoticeC4.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     577        NoticeC4.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     578    }
     579
     580    public static final Symbol NoticeC5a = new Symbol();
     581    static {
     582        NoticeC5a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     583        NoticeC5a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     584        Path2D.Double p = new Path2D.Double(); p.moveTo(-21, -21); p.lineTo(10, -21); p.lineTo(21, 0); p.lineTo(10, 21); p.lineTo(-21, 21); p.closePath();
     585        NoticeC5a.add(new Instr(Form.PGON, p));
     586    }
     587
     588    public static final Symbol NoticeC5b = new Symbol();
     589    static {
     590        NoticeC5b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     591        NoticeC5b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
     592        Path2D.Double p = new Path2D.Double(); p.moveTo(21, -21); p.lineTo(-10, -21); p.lineTo(-21, 0); p.lineTo(-10, 21); p.lineTo(21, 21); p.closePath();
     593        NoticeC5b.add(new Instr(Form.PGON, p));
     594    }
     595
     596    public static final Symbol NoticeD1a = new Symbol();
     597    static {
     598        NoticeD1a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     599        NoticeD1a.add(new Instr(Form.FILL, Color.yellow));
     600        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(-30, 0); p.lineTo(0, 30); p.lineTo(30, 0); p.closePath();
     601        NoticeD1a.add(new Instr(Form.PGON, p));
     602        NoticeD1a.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     603        NoticeD1a.add(new Instr(Form.FILL, Color.black));
     604        NoticeD1a.add(new Instr(Form.PLIN, p));
     605    }
     606
     607    public static final Symbol NoticeD1b = new Symbol();
     608    static {
     609        NoticeD1b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     610        NoticeD1b.add(new Instr(Form.FILL, Color.yellow));
     611        Path2D.Double p = new Path2D.Double(); p.moveTo(-30, 0); p.lineTo(-15, 25); p.lineTo(15, -25); p.lineTo(30, 0); p.lineTo(15, 25); p.lineTo(-15, -25); p.closePath();
     612        NoticeD1b.add(new Instr(Form.PGON, p));
     613        NoticeD1b.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     614        NoticeD1b.add(new Instr(Form.FILL, Color.black));
     615        NoticeD1b.add(new Instr(Form.PLIN, p));
     616    }
     617
     618    public static final Symbol NoticeD2a = new Symbol();
     619    static {
     620        NoticeD2a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     621        NoticeD2a.add(new Instr(Form.FILL, Color.white));
     622        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(-30, 0); p.lineTo(0, 30); p.closePath();
     623        NoticeD2a.add(new Instr(Form.PGON, p));
     624        NoticeD2a.add(new Instr(Form.FILL, new Color(0x00e800)));
     625        p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(30, 0); p.lineTo(0, 30); p.closePath();
     626        NoticeD2a.add(new Instr(Form.PGON, p));
     627        NoticeD2a.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     628        NoticeD2a.add(new Instr(Form.FILL, Color.black));
     629        p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(-30, 0); p.lineTo(0, 30); p.lineTo(30, 0); p.closePath();
     630        NoticeD2a.add(new Instr(Form.PLIN, p));
     631    }
     632
     633    public static final Symbol NoticeD2b = new Symbol();
     634    static {
     635        NoticeD2b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     636        NoticeD2b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeD2a, 1.0, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(180.0))))));
     637    }
     638
     639    public static final Symbol NoticeD3a = new Symbol();
     640    static {
     641        NoticeD3a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     642        NoticeD3a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     643        Path2D.Double p = new Path2D.Double(); p.moveTo(28, 10); p.lineTo(-10, 10); p.lineTo(-10, 20); p.lineTo(-28, 0);
     644        p.lineTo(-10, -20); p.lineTo(-10, -10); p.lineTo(28, -10); p.closePath();
     645        NoticeD3a.add(new Instr(Form.PGON, p));
     646    }
     647
     648    public static final Symbol NoticeD3b = new Symbol();
     649    static {
     650        NoticeD3b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     651        NoticeD3b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     652        Path2D.Double p = new Path2D.Double(); p.moveTo(-28, 10); p.lineTo(10, 10); p.lineTo(10, 20); p.lineTo(28, 0);
     653        p.lineTo(10, -20); p.lineTo(10, -10); p.lineTo(-28, -10); p.closePath();
     654        NoticeD3b.add(new Instr(Form.PGON, p));
     655    }
     656
     657    public static final Symbol NoticeE1 = new Symbol();
     658    static {
     659        NoticeE1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     660        NoticeE1.add(new Instr(Form.FILL, new Color(0x00e800)));
     661        NoticeE1.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     662        NoticeE1.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     663        NoticeE1.add(new Instr(Form.FILL, Color.white));
     664        NoticeE1.add(new Instr(Form.RSHP, new Rectangle2D.Double(-10, -30, 20, 60)));
     665        NoticeE1.add(new Instr(Form.FILL, Color.black));
     666        NoticeE1.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     667    }
     668
     669    public static final Symbol NoticeE2 = new Symbol();
     670    static {
     671        NoticeE2.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     672        NoticeE2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     673        Path2D.Double p = new Path2D.Double(); p.moveTo(5, -25); p.lineTo(-10, -1); p.lineTo(10, -1); p.lineTo(-10, 20);
     674        p.lineTo(-7, 20); p.lineTo(-12, 25); p.lineTo(-16, 20); p.lineTo(-13, 20); p.lineTo(4, 1); p.lineTo(-14, 1);
     675        p.lineTo(2, -25); p.closePath();
     676        NoticeE2.add(new Instr(Form.PGON, p));
     677    }
     678
     679    public static final Symbol NoticeE3 = new Symbol();
     680    static {
     681        NoticeE3.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     682        NoticeE3.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     683        NoticeE3.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     684        NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(25, -20, 25, 20)));
     685        NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-25, -20, -25, 20)));
     686        NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-15, -15, -15, 20)));
     687        NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-5, -15, -5, 20)));
     688        NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(5, -15, 5, 20)));
     689        NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(15, -15, 15, 20)));
     690        NoticeE3.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     691        NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-26, 18.5, 26, 18.5)));
     692        NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-26, -15, 26, -15)));
     693    }
     694
     695    public static final Symbol NoticeE4a = new Symbol();
     696    static {
     697        NoticeE4a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     698        NoticeE4a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     699        Path2D.Double p = new Path2D.Double(); p.moveTo(-20, -10); p.lineTo(-5, -10); p.lineTo(-5, -20); p.lineTo(5, -20); p.lineTo(5, -10);
     700        p.lineTo(20, -10); p.lineTo(15, 0); p.lineTo(-15, 0); p.closePath();
     701        p.moveTo(-25, 5); p.lineTo(25, 5); p.lineTo(25, 10); p.lineTo(-25, 10); p.closePath();
     702        NoticeE4a.add(new Instr(Form.PGON, p));
     703    }
     704
     705    public static final Symbol NoticeE4b = new Symbol();
     706    static {
     707        NoticeE4b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     708        NoticeE4b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     709        Path2D.Double p = new Path2D.Double(); p.moveTo(-20, 0); p.lineTo(-5, 0); p.lineTo(-5, -10); p.lineTo(5, -10); p.lineTo(5, 0);
     710        p.lineTo(20, 0); p.lineTo(15, 10); p.lineTo(-15, 10); p.closePath();
     711        NoticeE4b.add(new Instr(Form.PGON, p));
     712    }
     713
     714    public static final Symbol NoticeE5 = new Symbol();
     715    static {
     716        NoticeE5.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     717        NoticeE5.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     718        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD); p.moveTo(-5.3, 14.6); p.lineTo(-5.3, 4.0); p.lineTo(0.0, 4.0); p.curveTo(4.2, 4.0, 7.4, 3.5, 9.4, 0.0);
     719        p.curveTo(11.4, -2.8, 11.4, -7.2, 9.4, -10.5); p.curveTo(7.4, -13.6, 4.2, -14.0, 0.0, -14.0); p.lineTo(-11.0, -14.0); p.lineTo(-11.0, 14.6); p.closePath();
     720        p.moveTo(-5.3, -1.0); p.lineTo(0.0, -1.0); p.curveTo(6.5, -1.0, 6.5, -9.0, 0.0, -9.0); p.lineTo(-5.3, -9.0); p.closePath();
     721        NoticeE5.add(new Instr(Form.PGON, p));
     722    }
     723
     724    public static final Symbol NoticeE5_1 = new Symbol();
     725    static {
     726        NoticeE5_1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     727        NoticeE5_1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     728    }
     729
     730    public static final Symbol NoticeE5_2 = new Symbol();
     731    static {
     732        NoticeE5_2.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     733        NoticeE5_2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     734    }
     735
     736    public static final Symbol NoticeE5_3 = new Symbol();
     737    static {
     738        NoticeE5_3.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     739        NoticeE5_3.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     740    }
     741
     742    public static final Symbol NoticeE5_4 = new Symbol();
     743    static {
     744        NoticeE5_4.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     745        NoticeE5_4.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     746        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     747        p.moveTo(-28, 25); p.lineTo(0, -28); p.lineTo(28, 25); p.closePath();
     748        NoticeE5_4.add(new Instr(Form.PGON, p));
     749    }
     750
     751    public static final Symbol NoticeE5_5 = new Symbol();
     752    static {
     753        NoticeE5_5.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     754        NoticeE5_5.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     755        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     756        p.moveTo(-28, 25); p.lineTo(0, -28); p.lineTo(28, 25); p.closePath();
     757        p.moveTo(0, 24); p.lineTo(-15, 2); p.lineTo(15, 2); p.closePath();
     758        NoticeE5_5.add(new Instr(Form.PGON, p));
     759    }
     760
     761    public static final Symbol NoticeE5_6 = new Symbol();
     762    static {
     763        NoticeE5_6.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     764        NoticeE5_6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     765        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     766        p.moveTo(-28, 25); p.lineTo(0, -28); p.lineTo(28, 25); p.closePath();
     767        p.moveTo(0, 7); p.lineTo(-10, -8); p.lineTo(10, -8); p.closePath();
     768        p.moveTo(0, 24); p.lineTo(-10, 9); p.lineTo(10, 9); p.closePath();
     769        NoticeE5_6.add(new Instr(Form.PGON, p));
     770    }
     771
     772    public static final Symbol NoticeE5_7 = new Symbol();
     773    static {
     774        NoticeE5_7.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     775        NoticeE5_7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     776        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     777        p.moveTo(-28, 25); p.lineTo(0, -28); p.lineTo(28, 25); p.closePath();
     778        p.moveTo(0, -1); p.lineTo(-8, -11); p.lineTo(8, -11); p.closePath();
     779        p.moveTo(0, 11); p.lineTo(-8, 1); p.lineTo(8, 1); p.closePath();
     780        p.moveTo(0, 23); p.lineTo(-8, 13); p.lineTo(8, 13); p.closePath();
     781        NoticeE5_7.add(new Instr(Form.PGON, p));
     782    }
     783
     784    public static final Symbol NoticeE5_8 = new Symbol();
     785    static {
     786        NoticeE5_8.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     787        NoticeE5_8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     788        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     789        p.moveTo(-28, -25); p.lineTo(0, 28); p.lineTo(28, -25); p.closePath();
     790        NoticeE5_8.add(new Instr(Form.PGON, p));
     791    }
     792
     793    public static final Symbol NoticeE5_9 = new Symbol();
     794    static {
     795        NoticeE5_9.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     796        NoticeE5_9.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     797        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     798        p.moveTo(-28, -25); p.lineTo(0, 28); p.lineTo(28, -25); p.closePath();
     799        p.moveTo(0, 8); p.lineTo(-15, -14); p.lineTo(15, -14); p.closePath();
     800        NoticeE5_9.add(new Instr(Form.PGON, p));
     801    }
     802
     803    public static final Symbol NoticeE5_10 = new Symbol();
     804    static {
     805        NoticeE5_10.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     806        NoticeE5_10.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     807        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     808        p.moveTo(-28, -25); p.lineTo(0, 28); p.lineTo(28, -25); p.closePath();
     809        p.moveTo(0, -5); p.lineTo(-10, -20); p.lineTo(10, -20); p.closePath();
     810        p.moveTo(0, 15); p.lineTo(-10, 0); p.lineTo(10, 0); p.closePath();
     811        NoticeE5_10.add(new Instr(Form.PGON, p));
     812    }
     813
     814    public static final Symbol NoticeE5_11 = new Symbol();
     815    static {
     816        NoticeE5_11.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     817        NoticeE5_11.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     818        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     819        p.moveTo(-28, -25); p.lineTo(0, 28); p.lineTo(28, -25); p.closePath();
     820        p.moveTo(0, -12); p.lineTo(-8, -22); p.lineTo(8, -22); p.closePath();
     821        p.moveTo(0, 3); p.lineTo(-8, -7); p.lineTo(8, -7); p.closePath();
     822        p.moveTo(0, 18); p.lineTo(-8, 8); p.lineTo(8, 8); p.closePath();
     823        NoticeE5_11.add(new Instr(Form.PGON, p));
     824    }
     825
     826    public static final Symbol NoticeE5_12 = new Symbol();
     827    static {
     828        NoticeE5_12.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     829        NoticeE5_12.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     830        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     831        p.moveTo(-28, 0); p.lineTo(0, 28); p.lineTo(28, 0); p.lineTo(0, -28); p.closePath();
     832        NoticeE5_12.add(new Instr(Form.PGON, p));
     833    }
     834
     835    public static final Symbol NoticeE5_13 = new Symbol();
     836    static {
     837        NoticeE5_13.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     838        NoticeE5_13.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     839        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     840        p.moveTo(-28, 0); p.lineTo(0, 28); p.lineTo(28, 0); p.lineTo(0, -28); p.closePath();
     841        p.moveTo(0, 15); p.lineTo(-15, -7); p.lineTo(15, -7); p.closePath();
     842        NoticeE5_13.add(new Instr(Form.PGON, p));
     843    }
     844
     845    public static final Symbol NoticeE5_14 = new Symbol();
     846    static {
     847        NoticeE5_14.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     848        NoticeE5_14.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     849        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     850        p.moveTo(-28, 0); p.lineTo(0, 28); p.lineTo(28, 0); p.lineTo(0, -28); p.closePath();
     851        p.moveTo(0, 0); p.lineTo(-10, -15); p.lineTo(10, -15); p.closePath();
     852        p.moveTo(0, 20); p.lineTo(-10, 5); p.lineTo(10, 5); p.closePath();
     853        NoticeE5_14.add(new Instr(Form.PGON, p));
     854    }
     855
     856    public static final Symbol NoticeE5_15 = new Symbol();
     857    static {
     858        NoticeE5_15.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     859        NoticeE5_15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     860        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     861        p.moveTo(-28, 0); p.lineTo(0, 28); p.lineTo(28, 0); p.lineTo(0, -28); p.closePath();
     862        p.moveTo(0, -7); p.lineTo(-8, -17); p.lineTo(8, -17); p.closePath();
     863        p.moveTo(0, 8); p.lineTo(-8, -2); p.lineTo(8, -2); p.closePath();
     864        p.moveTo(0, 23); p.lineTo(-8, 13); p.lineTo(8, 13); p.closePath();
     865        NoticeE5_15.add(new Instr(Form.PGON, p));
     866    }
     867
     868    public static final Symbol NoticeE6 = new Symbol();
     869    static {
     870        NoticeE6.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     871        NoticeE6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     872        NoticeE6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, new Scheme(Color.white), null)));
     873    }
     874
     875    public static final Symbol NoticeE7 = new Symbol();
     876    static {
     877        NoticeE7.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     878        NoticeE7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     879        NoticeE7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Bollard, 1.0, 0, 0, new Scheme(Color.white), null)));
     880    }
     881
     882    public static final Symbol NoticeE7_1 = new Symbol();
     883    static {
     884        NoticeE7_1.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     885        NoticeE7_1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     886        NoticeE7_1.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     887        NoticeE7_1.add(new Instr(Form.LINE, new Line2D.Double(20, 25, 20, -10)));
     888        NoticeE7_1.add(new Instr(Form.LINE, new Line2D.Double(22, -8, -15, -20)));
     889        NoticeE7_1.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     890        NoticeE7_1.add(new Instr(Form.LINE, new Line2D.Double(20, 8, 0, -15)));
     891        Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     892        p.moveTo(-17, 2); p.quadTo(-5, 0, 7, 2); p.lineTo(9, 12); p.lineTo(7, 20); p.lineTo(6, 20); p.lineTo(6, 23); p.lineTo(3, 23); p.lineTo(3, 20);
     893        p.quadTo(-5, 22, -13, 20); p.lineTo(-13, 23); p.lineTo(-16, 23); p.lineTo(-16, 20); p.lineTo(-17, 20); p.lineTo(-19, 12); p.closePath();
     894        p.moveTo(-15, 4); p.quadTo(-3, 2, 5, 4); p.lineTo(6, 11); p.quadTo(-5, 9, -16, 11); p.closePath();
     895        NoticeE7_1.add(new Instr(Form.PGON, p));
     896        NoticeE7_1.add(new Instr(Form.FILL, new Color(0x0000a0)));
     897        NoticeE7_1.add(new Instr(Form.RSHP, new Ellipse2D.Double(-16, 13, 4, 4)));
     898        NoticeE7_1.add(new Instr(Form.RSHP, new Ellipse2D.Double(2, 13, 4, 4)));
     899    }
     900
     901    public static final Symbol NoticeE8 = new Symbol();
     902    static {
     903        NoticeE8.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     904        NoticeE8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     905        NoticeE8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Turn, 1.0, 0, 0, new Scheme(Color.white), null)));
     906    }
     907
     908    public static final Symbol NoticeE9a = new Symbol();
     909    static {
     910        NoticeE9a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     911        NoticeE9a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     912        NoticeE9a.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     913        NoticeE9a.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -29)));
     914        NoticeE9a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     915        NoticeE9a.add(new Instr(Form.LINE, new Line2D.Double(-29, 0, 29, 0)));
     916    }
     917
     918    public static final Symbol NoticeE9b = new Symbol();
     919    static {
     920        NoticeE9b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     921        NoticeE9b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     922        NoticeE9b.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     923        NoticeE9b.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -29)));
     924        NoticeE9b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     925        NoticeE9b.add(new Instr(Form.LINE, new Line2D.Double(-2, 0, 29, 0)));
     926    }
     927
     928    public static final Symbol NoticeE9c = new Symbol();
     929    static {
     930        NoticeE9c.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     931        NoticeE9c.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     932        NoticeE9c.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     933        NoticeE9c.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -29)));
     934        NoticeE9c.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     935        NoticeE9c.add(new Instr(Form.LINE, new Line2D.Double(2, 0, -29, 0)));
     936    }
     937
     938    public static final Symbol NoticeE9d = new Symbol();
     939    static {
     940        NoticeE9d.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     941        NoticeE9d.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     942        NoticeE9d.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     943        NoticeE9d.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -4)));
     944        NoticeE9d.add(new Instr(Form.LINE, new Line2D.Double(-4, 0, 29, 0)));
     945        NoticeE9d.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     946        NoticeE9d.add(new Instr(Form.LINE, new Line2D.Double(0, -29, 0, 2)));
     947    }
     948
     949    public static final Symbol NoticeE9e = new Symbol();
     950    static {
     951        NoticeE9e.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     952        NoticeE9e.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     953        NoticeE9e.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     954        NoticeE9e.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -4)));
     955        NoticeE9e.add(new Instr(Form.LINE, new Line2D.Double(4, 0, -29, 0)));
     956        NoticeE9e.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     957        NoticeE9e.add(new Instr(Form.LINE, new Line2D.Double(0, -29, 0, 2)));
     958    }
     959
     960    public static final Symbol NoticeE9f = new Symbol();
     961    static {
     962        NoticeE9f.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     963        NoticeE9f.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     964        NoticeE9f.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     965        NoticeE9f.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -4)));
     966        NoticeE9f.add(new Instr(Form.LINE, new Line2D.Double(-4, 0, 29, 0)));
     967        NoticeE9f.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     968        NoticeE9f.add(new Instr(Form.LINE, new Line2D.Double(2, 0, -29, 0)));
     969    }
     970
     971    public static final Symbol NoticeE9g = new Symbol();
     972    static {
     973        NoticeE9g.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     974        NoticeE9g.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     975        NoticeE9g.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     976        NoticeE9g.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -4)));
     977        NoticeE9g.add(new Instr(Form.LINE, new Line2D.Double(4, 0, -29, 0)));
     978        NoticeE9g.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     979        NoticeE9g.add(new Instr(Form.LINE, new Line2D.Double(-2, 0, 29, 0)));
     980    }
     981
     982    public static final Symbol NoticeE9h = new Symbol();
     983    static {
     984        NoticeE9h.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     985        NoticeE9h.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     986        NoticeE9h.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     987        NoticeE9h.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -4)));
     988        NoticeE9h.add(new Instr(Form.LINE, new Line2D.Double(-4, 0, 29, 0)));
     989        NoticeE9h.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     990        NoticeE9h.add(new Instr(Form.LINE, new Line2D.Double(0, -29, 0, 2)));
     991        NoticeE9h.add(new Instr(Form.LINE, new Line2D.Double(2, 0, -29, 0)));
     992    }
     993
     994    public static final Symbol NoticeE9i = new Symbol();
     995    static {
     996        NoticeE9i.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     997        NoticeE9i.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     998        NoticeE9i.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     999        NoticeE9i.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -4)));
     1000        NoticeE9i.add(new Instr(Form.LINE, new Line2D.Double(4, 0, -29, 0)));
     1001        NoticeE9i.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1002        NoticeE9i.add(new Instr(Form.LINE, new Line2D.Double(0, -29, 0, 2)));
     1003        NoticeE9i.add(new Instr(Form.LINE, new Line2D.Double(-2, 0, 29, 0)));
     1004    }
     1005
     1006    public static final Symbol NoticeE10a = new Symbol();
     1007    static {
     1008        NoticeE10a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1009        NoticeE10a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1010        NoticeE10a.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1011        NoticeE10a.add(new Instr(Form.LINE, new Line2D.Double(-29, 0, 29, 0)));
     1012        NoticeE10a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1013        NoticeE10a.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -29)));
     1014    }
     1015
     1016    public static final Symbol NoticeE10b = new Symbol();
     1017    static {
     1018        NoticeE10b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1019        NoticeE10b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1020        NoticeE10b.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1021        NoticeE10b.add(new Instr(Form.LINE, new Line2D.Double(-29, 0, 29, 0)));
     1022        NoticeE10b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1023        NoticeE10b.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -2)));
     1024    }
     1025
     1026    public static final Symbol NoticeE10c = new Symbol();
     1027    static {
     1028        NoticeE10c.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1029        NoticeE10c.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1030        NoticeE10c.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1031        NoticeE10c.add(new Instr(Form.LINE, new Line2D.Double(0, -29, 0, 4)));
     1032        NoticeE10c.add(new Instr(Form.LINE, new Line2D.Double(-4, 0, 29, 0)));
     1033        NoticeE10c.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1034        NoticeE10c.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -2)));
     1035    }
     1036
     1037    public static final Symbol NoticeE10d = new Symbol();
     1038    static {
     1039        NoticeE10d.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1040        NoticeE10d.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1041        NoticeE10d.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1042        NoticeE10d.add(new Instr(Form.LINE, new Line2D.Double(0, -29, 0, 4)));
     1043        NoticeE10d.add(new Instr(Form.LINE, new Line2D.Double(4, 0, -29, 0)));
     1044        NoticeE10d.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1045        NoticeE10d.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -2)));
     1046    }
     1047
     1048    public static final Symbol NoticeE10e = new Symbol();
     1049    static {
     1050        NoticeE10e.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1051        NoticeE10e.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1052        NoticeE10e.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1053        NoticeE10e.add(new Instr(Form.LINE, new Line2D.Double(0, -29, 0, 4)));
     1054        NoticeE10e.add(new Instr(Form.LINE, new Line2D.Double(-4, 0, 29, 0)));
     1055        NoticeE10e.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1056        NoticeE10e.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -2)));
     1057        NoticeE10e.add(new Instr(Form.LINE, new Line2D.Double(2, 0, -29, 0)));
     1058    }
     1059
     1060    public static final Symbol NoticeE10f = new Symbol();
     1061    static {
     1062        NoticeE10f.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1063        NoticeE10f.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1064        NoticeE10f.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1065        NoticeE10f.add(new Instr(Form.LINE, new Line2D.Double(0, -29, 0, 4)));
     1066        NoticeE10f.add(new Instr(Form.LINE, new Line2D.Double(4, 0, -29, 0)));
     1067        NoticeE10f.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1068        NoticeE10f.add(new Instr(Form.LINE, new Line2D.Double(0, 29, 0, -2)));
     1069        NoticeE10f.add(new Instr(Form.LINE, new Line2D.Double(-2, 0, 29, 0)));
     1070    }
     1071
     1072    public static final Symbol NoticeE11 = new Symbol();
     1073    static {
     1074        NoticeE11.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1075        NoticeE11.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1076        NoticeE11.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
     1077        NoticeE11.add(new Instr(Form.LINE, new Line2D.Double(-27, -27, 27, 27)));
     1078    }
     1079
     1080    public static final Symbol NoticeE13 = new Symbol();
     1081    static {
     1082        NoticeE13.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1083        NoticeE13.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1084        Path2D.Double p = new Path2D.Double(); p.moveTo(-4, -16); p.lineTo(9, -16); p.lineTo(9, -14); p.lineTo(3.5, -14); p.lineTo(3.5, -7); p.lineTo(5, -7);
     1085        p.lineTo(5, 1); p.lineTo(6.5, 1); p.lineTo(6.5, 5); p.lineTo(17.5, 5); p.lineTo(17.5, 1); p.lineTo(19, 1); p.lineTo(19, 15); p.lineTo(17.5, 15);
     1086        p.lineTo(17.5, 10); p.lineTo(17.5, 10); p.lineTo(6.5, 10); p.lineTo(6.5, 13); p.lineTo(-2, 13); p.lineTo(-2, 10); p.lineTo(-9, 10);
     1087        p.quadTo(-13.5, 10, -13.5, 16); p.lineTo(-19, 16); p.quadTo(-19, 5, -9, 5); p.lineTo(-2, 5); p.lineTo(-2, 1); p.lineTo(0, 1); p.lineTo(0, -7);
     1088        p.lineTo(1.5, -7); p.lineTo(1.5, -14); p.lineTo(-4, -14); p.closePath();
     1089        NoticeE13.add(new Instr(Form.PGON, p));
     1090    }
     1091
     1092    public static final Symbol NoticeE14 = new Symbol();
     1093    static {
     1094        NoticeE14.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1095        NoticeE14.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1096        Path2D.Double p = new Path2D.Double(); p.moveTo(-18, -18); p.lineTo(-11, -7); p.lineTo(-9, -10); p.lineTo(-14, -18); p.closePath();
     1097        p.moveTo(9.5, 7); p.lineTo(22.5, 9); p.lineTo(21.5, 5.5); p.lineTo(12, 4); p.closePath();
     1098        p.moveTo(-19, -16.5); p.lineTo(-13, -6.5); p.quadTo(-15.5, -2, -12.5, 0); p.lineTo(4, 11); p.quadTo(7, 13, 10, 9); p.lineTo(21.5, 11);
     1099        p.curveTo(15.5, 23, 1, 18.5, -9, 12); p.curveTo(-18, 6, -28.5, -7, -19, -16.5); p.closePath();
     1100        NoticeE14.add(new Instr(Form.PGON, p));
     1101    }
     1102
     1103    public static final Symbol NoticeE15 = new Symbol();
     1104    static {
     1105        NoticeE15.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1106        NoticeE15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1107        NoticeE15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Motor, 1.0, 0, 0, new Scheme(Color.white), null)));
     1108    }
     1109
     1110    public static final Symbol NoticeE16 = new Symbol();
     1111    static {
     1112        NoticeE16.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1113        NoticeE16.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1114        NoticeE16.add(new Instr(Form.TEXT, new Caption("SPORT", new Font("Arial", Font.BOLD, 15), Color.white, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 5)))));
     1115    }
     1116
     1117    public static final Symbol NoticeE17 = new Symbol();
     1118    static {
     1119        NoticeE17.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1120        NoticeE17.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1121        NoticeE17.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Waterski, 1.0, 0, 0, new Scheme(Color.white), null)));
     1122    }
     1123
     1124    public static final Symbol NoticeE18 = new Symbol();
     1125    static {
     1126        NoticeE18.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1127        NoticeE18.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1128        NoticeE18.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Sailboat, 1.0, 0, 0, new Scheme(Color.white), null)));
     1129    }
     1130
     1131    public static final Symbol NoticeE19 = new Symbol();
     1132    static {
     1133        NoticeE19.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1134        NoticeE19.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1135        NoticeE19.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Rowboat, 1.0, 0, 0, new Scheme(Color.white), null)));
     1136    }
     1137
     1138    public static final Symbol NoticeE20 = new Symbol();
     1139    static {
     1140        NoticeE20.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1141        NoticeE20.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1142        NoticeE20.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Sailboard, 1.0, 0, 0, new Scheme(Color.white), null)));
     1143    }
     1144
     1145    public static final Symbol NoticeE21 = new Symbol();
     1146    static {
     1147        NoticeE21.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1148        NoticeE21.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1149        NoticeE21.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Speedboat, 1.0, 0, 0, new Scheme(Color.white), null)));
     1150    }
     1151
     1152    public static final Symbol NoticeE22 = new Symbol();
     1153    static {
     1154        NoticeE22.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1155        NoticeE22.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1156        NoticeE22.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Slipway, 1.0, 0, 0, new Scheme(Color.white), null)));
     1157    }
     1158
     1159    public static final Symbol NoticeE23 = new Symbol();
     1160    static {
     1161        NoticeE23.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1162        NoticeE23.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1163        NoticeE23.add(new Instr(Form.TEXT, new Caption("VHF", new Font("Arial", Font.BOLD, 20), Color.white, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)))));
     1164    }
     1165
     1166    public static final Symbol NoticeE24 = new Symbol();
     1167    static {
     1168        NoticeE24.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1169        NoticeE24.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
     1170        NoticeE24.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Waterbike, 1.0, 0, 0, new Scheme(Color.white), null)));
     1171    }
     1172
     1173    public static final Symbol NoticeBoard = new Symbol();
     1174    static {
     1175        NoticeBoard.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 30)));
     1176        NoticeBoard.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1177        Path2D.Double p = new Path2D.Double(); p.moveTo(-20, 0); p.lineTo(20, 0); p.lineTo(20, -15); p.lineTo(-20, -15); p.closePath();
     1178        NoticeBoard.add(new Instr(Form.FILL, Color.white));
     1179        NoticeBoard.add(new Instr(Form.PGON, p));
     1180        NoticeBoard.add(new Instr(Form.FILL, Color.black));
     1181        NoticeBoard.add(new Instr(Form.PLIN, p));
     1182    }
     1183
     1184    public static final Symbol NoticeTriangle = new Symbol();
     1185    static {
     1186        NoticeTriangle.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 30)));
     1187        NoticeTriangle.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1188        Path2D.Double p = new Path2D.Double(); p.moveTo(-20, 0); p.lineTo(20, 0); p.lineTo(0, -15); p.closePath();
     1189        NoticeTriangle.add(new Instr(Form.FILL, Color.white));
     1190        NoticeTriangle.add(new Instr(Form.PGON, p));
     1191        NoticeTriangle.add(new Instr(Form.FILL, Color.black));
     1192        NoticeTriangle.add(new Instr(Form.PLIN, p));
     1193    }
     1194
     1195    // CHECKSTYLE.OFF: SingleSpaceSeparator
     1196    public static final EnumMap<CatNMK, Symbol> NmkCevni = new EnumMap<>(CatNMK.class);
     1197    static {
     1198        NmkCevni.put(CatNMK.NMK_UNKN, Notice);      NmkCevni.put(CatNMK.NMK_NENT, NoticeA1);    NmkCevni.put(CatNMK.NMK_CLSA, NoticeA1a);   NmkCevni.put(CatNMK.NMK_NOVK, NoticeA2);
     1199        NmkCevni.put(CatNMK.NMK_NCOV, NoticeA3);    NmkCevni.put(CatNMK.NMK_NPAS, NoticeA4);    NmkCevni.put(CatNMK.NMK_NCPS, NoticeA4_1);  NmkCevni.put(CatNMK.NMK_NBRT, NoticeA5);
     1200        NmkCevni.put(CatNMK.NMK_NBLL, NoticeA5_1);  NmkCevni.put(CatNMK.NMK_NANK, NoticeA6);    NmkCevni.put(CatNMK.NMK_NMOR, NoticeA7);    NmkCevni.put(CatNMK.NMK_NTRN, NoticeA8);
     1201        NmkCevni.put(CatNMK.NMK_NWSH, NoticeA9);    NmkCevni.put(CatNMK.NMK_NPSL, NoticeA10a);  NmkCevni.put(CatNMK.NMK_NPSR, NoticeA10b);  NmkCevni.put(CatNMK.NMK_NMTC, NoticeA12);
     1202        NmkCevni.put(CatNMK.NMK_NSPC, NoticeA13);   NmkCevni.put(CatNMK.NMK_NWSK, NoticeA14);   NmkCevni.put(CatNMK.NMK_NSLC, NoticeA15);   NmkCevni.put(CatNMK.NMK_NUPC, NoticeA16);
     1203        NmkCevni.put(CatNMK.NMK_NSLB, NoticeA17);   NmkCevni.put(CatNMK.NMK_NWBK, NoticeA20);   NmkCevni.put(CatNMK.NMK_NHSC, NoticeA18);   NmkCevni.put(CatNMK.NMK_NLBG, NoticeA19);
     1204        NmkCevni.put(CatNMK.NMK_MVTL, NoticeB1a);   NmkCevni.put(CatNMK.NMK_MVTR, NoticeB1b);   NmkCevni.put(CatNMK.NMK_MVTP, NoticeB2a);   NmkCevni.put(CatNMK.NMK_MVTS, NoticeB2b);
     1205        NmkCevni.put(CatNMK.NMK_KPTP, NoticeB3a);   NmkCevni.put(CatNMK.NMK_KPTS, NoticeB3b);   NmkCevni.put(CatNMK.NMK_CSTP, NoticeB4a);   NmkCevni.put(CatNMK.NMK_CSTS, NoticeB4b);
     1206        NmkCevni.put(CatNMK.NMK_STOP, NoticeB5);    NmkCevni.put(CatNMK.NMK_SPDL, NoticeB6);    NmkCevni.put(CatNMK.NMK_SHRN, NoticeB7);    NmkCevni.put(CatNMK.NMK_KPLO, NoticeB8);
     1207        NmkCevni.put(CatNMK.NMK_GWJN, NoticeB9a);   NmkCevni.put(CatNMK.NMK_GWCS, NoticeB9b);   NmkCevni.put(CatNMK.NMK_MKRC, NoticeB11);
     1208        NmkCevni.put(CatNMK.NMK_LMDP, NoticeC1);    NmkCevni.put(CatNMK.NMK_LMHR, NoticeC2);    NmkCevni.put(CatNMK.NMK_LMWD, NoticeC3);    NmkCevni.put(CatNMK.NMK_NAVR, NoticeC4);
     1209        NmkCevni.put(CatNMK.NMK_CHDL, NoticeC5a);   NmkCevni.put(CatNMK.NMK_CHDR, NoticeC5b);
     1210        NmkCevni.put(CatNMK.NMK_CHTW, NoticeD1a);   NmkCevni.put(CatNMK.NMK_CHOW, NoticeD1b);   NmkCevni.put(CatNMK.NMK_OPTR, NoticeD2a);   NmkCevni.put(CatNMK.NMK_OPTL, NoticeD2b);
     1211        NmkCevni.put(CatNMK.NMK_PRTL, NoticeD3a);   NmkCevni.put(CatNMK.NMK_PRTR, NoticeD3b);
     1212        NmkCevni.put(CatNMK.NMK_ENTP, NoticeE1);    NmkCevni.put(CatNMK.NMK_OVHC, NoticeE2);    NmkCevni.put(CatNMK.NMK_WEIR, NoticeE3);    NmkCevni.put(CatNMK.NMK_FERN, NoticeE4a);
     1213        NmkCevni.put(CatNMK.NMK_FERI, NoticeE4b);   NmkCevni.put(CatNMK.NMK_BRTP, NoticeE5);    NmkCevni.put(CatNMK.NMK_BTLL, NoticeE5_1);  NmkCevni.put(CatNMK.NMK_BTLS, NoticeE5_2);
     1214        NmkCevni.put(CatNMK.NMK_BTRL, NoticeE5_3);  NmkCevni.put(CatNMK.NMK_BTUP, NoticeE5_4);  NmkCevni.put(CatNMK.NMK_BTP1, NoticeE5_5);  NmkCevni.put(CatNMK.NMK_BTP2, NoticeE5_6);
     1215        NmkCevni.put(CatNMK.NMK_BTP3, NoticeE5_7);  NmkCevni.put(CatNMK.NMK_BTUN, NoticeE5_8);  NmkCevni.put(CatNMK.NMK_BTN1, NoticeE5_9);  NmkCevni.put(CatNMK.NMK_BTN2, NoticeE5_10);
     1216        NmkCevni.put(CatNMK.NMK_BTN3, NoticeE5_11); NmkCevni.put(CatNMK.NMK_BTUM, NoticeE5_12); NmkCevni.put(CatNMK.NMK_BTU1, NoticeE5_13); NmkCevni.put(CatNMK.NMK_BTU2, NoticeE5_14);
     1217        NmkCevni.put(CatNMK.NMK_BTU3, NoticeE5_15); NmkCevni.put(CatNMK.NMK_ANKP, NoticeE6);    NmkCevni.put(CatNMK.NMK_MORP, NoticeE7);    NmkCevni.put(CatNMK.NMK_VLBT, NoticeE7_1);
     1218        NmkCevni.put(CatNMK.NMK_TRNA, NoticeE8);    NmkCevni.put(CatNMK.NMK_SWWC, NoticeE9a);   NmkCevni.put(CatNMK.NMK_SWWR, NoticeE9b);   NmkCevni.put(CatNMK.NMK_SWWL, NoticeE9c);
     1219        NmkCevni.put(CatNMK.NMK_WRSA, NoticeE9d);   NmkCevni.put(CatNMK.NMK_WLSA, NoticeE9e);   NmkCevni.put(CatNMK.NMK_WRSL, NoticeE9f);   NmkCevni.put(CatNMK.NMK_WLSR, NoticeE9g);
     1220        NmkCevni.put(CatNMK.NMK_WRAL, NoticeE9h);   NmkCevni.put(CatNMK.NMK_WLAR, NoticeE9i);   NmkCevni.put(CatNMK.NMK_MWWC, NoticeE10a);  NmkCevni.put(CatNMK.NMK_MWWJ, NoticeE10b);
     1221        NmkCevni.put(CatNMK.NMK_MWAR, NoticeE10c);  NmkCevni.put(CatNMK.NMK_MWAL, NoticeE10d);  NmkCevni.put(CatNMK.NMK_WARL, NoticeE10e);  NmkCevni.put(CatNMK.NMK_WALR, NoticeE10f);
     1222        NmkCevni.put(CatNMK.NMK_PEND, NoticeE11);   NmkCevni.put(CatNMK.NMK_DWTR, NoticeE13);   NmkCevni.put(CatNMK.NMK_TELE, NoticeE14);   NmkCevni.put(CatNMK.NMK_MTCP, NoticeE15);
     1223        NmkCevni.put(CatNMK.NMK_SPCP, NoticeE16);   NmkCevni.put(CatNMK.NMK_WSKP, NoticeE17);   NmkCevni.put(CatNMK.NMK_SLCP, NoticeE18);   NmkCevni.put(CatNMK.NMK_UPCP, NoticeE19);
     1224        NmkCevni.put(CatNMK.NMK_SLBP, NoticeE20);   NmkCevni.put(CatNMK.NMK_RADI, NoticeE23);   NmkCevni.put(CatNMK.NMK_WTBP, NoticeE24);   NmkCevni.put(CatNMK.NMK_HSCP, NoticeE21);
     1225        NmkCevni.put(CatNMK.NMK_LBGP, NoticeE22);
     1226    }
     1227    // CHECKSTYLE.ON: SingleSpaceSeparator
     1228
     1229    private static final Symbol NoticeBB = new Symbol();
     1230    static {
     1231        NoticeBB.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1232        NoticeBB.add(new Instr(Form.LINE, new Line2D.Double(-29, -29, -29, 29)));
     1233        NoticeBB.add(new Instr(Form.LINE, new Line2D.Double(29, -29, 29, 29)));
     1234        NoticeBB.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1235        NoticeBB.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1236    }
     1237
     1238    private static final Symbol NoticeBP = new Symbol();
     1239    static {
     1240        NoticeBP.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1241        NoticeBP.add(new Instr(Form.FILL, Color.white));
     1242        NoticeBP.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1243        NoticeBP.add(new Instr(Form.FILL, Color.black));
     1244        NoticeBP.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1245    }
     1246
     1247    private static final Symbol NoticeCR = new Symbol();
     1248    static {
     1249        NoticeCR.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1250        NoticeCR.add(new Instr(Form.FILL, Color.white));
     1251        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(-30, 0); p.lineTo(0, 30); p.lineTo(30, 0); p.closePath();
     1252        NoticeCR.add(new Instr(Form.PGON, p));
     1253        NoticeCR.add(new Instr(Form.FILL, Color.black));
     1254        NoticeCR.add(new Instr(Form.PLIN, p));
     1255    }
     1256
     1257    private static final Symbol NoticeKT = new Symbol();
     1258    static {
     1259        NoticeKT.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1260        NoticeKT.add(new Instr(Form.FILL, Color.white));
     1261        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(-30, 30); p.lineTo(30, 30); p.closePath();
     1262        NoticeKT.add(new Instr(Form.PGON, p));
     1263        NoticeKT.add(new Instr(Form.FILL, Color.black));
     1264        NoticeKT.add(new Instr(Form.PLIN, p));
     1265    }
     1266
     1267    public static final Symbol NoticeBnank = new Symbol();
     1268    static {
     1269        NoticeBnank.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1270        Symbol colours = new Symbol();
     1271        Symbol ss = new Symbol();
     1272        ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1273        colours.add(new Instr(Form.N1, ss));
     1274        ss = new Symbol();
     1275        ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, null, null)));
     1276        ss.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     1277        ss.add(new Instr(Form.LINE, new Line2D.Double(-27, -27, 27, 27)));
     1278        ss.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1279        ss.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1280        colours.add(new Instr(Form.N2, ss));
     1281        NoticeBnank.add(new Instr(Form.COLR, colours));
     1282    }
     1283
     1284    public static final Symbol NoticeBlmhr = new Symbol();
     1285    static {
     1286        NoticeBlmhr.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1287        Symbol colours = new Symbol();
     1288        Symbol ss = new Symbol();
     1289        ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1290        colours.add(new Instr(Form.N1, ss));
     1291        ss = new Symbol();
     1292        ss.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     1293        Path2D.Double p = new Path2D.Double(); p.moveTo(-29, -29); p.lineTo(29, -29); p.lineTo(0, 0); p.closePath();
     1294        ss.add(new Instr(Form.PGON, p));
     1295        ss.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1296        ss.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1297        colours.add(new Instr(Form.N2, ss));
     1298        NoticeBlmhr.add(new Instr(Form.COLR, colours));
     1299    }
     1300
     1301    public static final Symbol NoticeBktpm = new Symbol();
     1302    static {
     1303        NoticeBktpm.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1304        Symbol colours = new Symbol();
     1305        Symbol ss = new Symbol();
     1306        ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1307        colours.add(new Instr(Form.N1, ss));
     1308        ss = new Symbol();
     1309        Path2D.Double p = new Path2D.Double(); p.moveTo(-14, -26); p.lineTo(-20, -12); p.lineTo(-8, -12); p.closePath();
     1310        ss.add(new Instr(Form.PGON, p));
     1311        ss.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1312        ss.add(new Instr(Form.LINE, new Line2D.Double(-14, -16, -14, 25)));
     1313        ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
     1314        colours.add(new Instr(Form.N2, ss));
     1315        NoticeBktpm.add(new Instr(Form.COLR, colours));
     1316    }
     1317
     1318    public static final Symbol NoticeBktsm = new Symbol();
     1319    static {
     1320        NoticeBktsm.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1321        Symbol colours = new Symbol();
     1322        Symbol ss = new Symbol();
     1323        ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1324        colours.add(new Instr(Form.N1, ss));
     1325        ss = new Symbol();
     1326        Path2D.Double p = new Path2D.Double(); p.moveTo(14, -26); p.lineTo(20, -12); p.lineTo(8, -12); p.closePath();
     1327        ss.add(new Instr(Form.PGON, p));
     1328        ss.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1329        ss.add(new Instr(Form.LINE, new Line2D.Double(14, -16, 14, 25)));
     1330        ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
     1331        colours.add(new Instr(Form.N2, ss));
     1332        NoticeBktsm.add(new Instr(Form.COLR, colours));
     1333    }
     1334
     1335    public static final Symbol NoticeBktmr = new Symbol();
     1336    static {
     1337        NoticeBktmr.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1338        Symbol colours = new Symbol();
     1339        Symbol ss = new Symbol();
     1340        ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1341        colours.add(new Instr(Form.N1, ss));
     1342        ss = new Symbol();
     1343        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -26); p.lineTo(-6, -12); p.lineTo(6, -12); p.closePath();
     1344        ss.add(new Instr(Form.PGON, p));
     1345        ss.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1346        ss.add(new Instr(Form.LINE, new Line2D.Double(0, -16, 0, 25)));
     1347        ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
     1348        colours.add(new Instr(Form.N2, ss));
     1349        NoticeBktmr.add(new Instr(Form.COLR, colours));
     1350    }
     1351
     1352    public static final Symbol NoticeBcrtp = new Symbol();
     1353    static {
     1354        NoticeBcrtp.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1355        Symbol colours = new Symbol();
     1356        Symbol ss = new Symbol();
     1357        ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1358        colours.add(new Instr(Form.N1, ss));
     1359        ss = new Symbol();
     1360        Path2D.Double p = new Path2D.Double(); p.moveTo(-14, -26); p.lineTo(-20, -12); p.lineTo(-8, -12); p.closePath();
     1361        ss.add(new Instr(Form.PGON, p));
     1362        ss.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1363        p = new Path2D.Double(); p.moveTo(-14, -16); p.lineTo(-14, 0); p.lineTo(14, 10); p.lineTo(14, 25);
     1364        ss.add(new Instr(Form.PLIN, p));
     1365        ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
     1366        colours.add(new Instr(Form.N2, ss));
     1367        NoticeBcrtp.add(new Instr(Form.COLR, colours));
     1368    }
     1369
     1370    public static final Symbol NoticeBcrts = new Symbol();
     1371    static {
     1372        NoticeBcrts.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1373        Symbol colours = new Symbol();
     1374        Symbol ss = new Symbol();
     1375        ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1376        colours.add(new Instr(Form.N1, ss));
     1377        ss = new Symbol();
     1378        Path2D.Double p = new Path2D.Double(); p.moveTo(14, -26); p.lineTo(20, -12); p.lineTo(8, -12); p.closePath();
     1379        ss.add(new Instr(Form.PGON, p));
     1380        ss.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1381        p = new Path2D.Double(); p.moveTo(14, -16); p.lineTo(14, 0); p.lineTo(-14, 10); p.lineTo(-14, 25);
     1382        ss.add(new Instr(Form.PLIN, p));
     1383        ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
     1384        colours.add(new Instr(Form.N2, ss));
     1385        NoticeBcrts.add(new Instr(Form.COLR, colours));
     1386    }
     1387
     1388    public static final Symbol NoticeBtrbm = new Symbol();
     1389    static {
     1390        NoticeBtrbm.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1391        Symbol colours = new Symbol();
     1392        Symbol ss = new Symbol();
     1393        ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1394        colours.add(new Instr(Form.N1, ss));
     1395        ss = new Symbol();
     1396        ss.add(new Instr(Form.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1397        ss.add(new Instr(Form.LINE, new Line2D.Double(0, -25, 0, 25)));
     1398        ss.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1399        ss.add(new Instr(Form.LINE, new Line2D.Double(-20, 0, 20, 0)));
     1400        ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
     1401        colours.add(new Instr(Form.N2, ss));
     1402        NoticeBtrbm.add(new Instr(Form.COLR, colours));
     1403    }
     1404
     1405    public static final Symbol NoticeBrspd = new Symbol();
     1406    static {
     1407        NoticeBrspd.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1408        Symbol colours = new Symbol();
     1409        Symbol ss = new Symbol();
     1410        ss.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1411        colours.add(new Instr(Form.N1, ss));
     1412        ss = new Symbol();
     1413        ss.add(new Instr(Form.TEXT, new Caption("R", new Font("Arial", Font.BOLD, 60), null, new Delta(Handle.CC, null))));
     1414        ss.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBB, 1.0, 0, 0, null, null)));
     1415        colours.add(new Instr(Form.N2, ss));
     1416        NoticeBrspd.add(new Instr(Form.COLR, colours));
     1417    }
     1418
     1419    static final Symbol NoticePBwral = new Symbol();
     1420    static {
     1421        NoticePBwral.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1422        NoticePBwral.add(new Instr(Form.FILL, new Color(0xffff00)));
     1423        Path2D.Double p = new Path2D.Double(); p.moveTo(-20, -25); p.lineTo(-8, -5); p.lineTo(-8, 25); p.lineTo(8, 25); p.lineTo(8, -5);
     1424        p.lineTo(20, -25); p.lineTo(5, -25); p.lineTo(-5, -10); p.lineTo(-15, -25); p.closePath();
     1425        NoticePBwral.add(new Instr(Form.PGON, p));
     1426    }
     1427
     1428    public static final Symbol NoticeBwral = new Symbol();
     1429    static {
     1430        NoticeBwral.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1431        NoticeBwral.add(new Instr(Form.FILL, Color.black));
     1432        NoticeBwral.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1433        NoticeBwral.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticePBwral, 1.0, 0, 0, null, null)));
     1434    }
     1435
     1436    public static final Symbol NoticeBwlar = new Symbol();
     1437    static {
     1438        NoticeBwlar.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1439        NoticeBwlar.add(new Instr(Form.FILL, Color.black));
     1440        NoticeBwlar.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30, -30, 60, 60, 4, 4)));
     1441        NoticeBwlar.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticePBwral, 1.0, 0, 0, null, new Delta(Handle.CC, AffineTransform.getScaleInstance(-1, 1)))));
     1442    }
     1443
     1444    public static final Symbol NoticeBoptr = new Symbol();
     1445    static {
     1446        NoticeBoptr.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1447        NoticeBoptr.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBP, 1.0, 0, 0, null, null)));
     1448        NoticeBoptr.add(new Instr(Form.FILL, new Color(0x00a000)));
     1449        NoticeBoptr.add(new Instr(Form.RSHP, new Rectangle2D.Double(-20, -20, 40, 40)));
     1450    }
     1451
     1452    public static final Symbol NoticeBoptl = new Symbol();
     1453    static {
     1454        NoticeBoptl.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1455        NoticeBoptl.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBP, 1.0, 0, 0, null, null)));
     1456        NoticeBoptl.add(new Instr(Form.FILL, new Color(0xf00000)));
     1457        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -20); p.lineTo(-20, 20); p.lineTo(20, 20); p.closePath();
     1458        NoticeBoptl.add(new Instr(Form.PGON, p));
     1459    }
     1460
     1461    public static final EnumMap<CatNMK, Symbol> NmkBniwr = new EnumMap<>(CatNMK.class);
     1462    static {
     1463        NmkBniwr.put(CatNMK.NMK_NANK, NoticeBnank); NmkBniwr.put(CatNMK.NMK_LMHR, NoticeBlmhr); NmkBniwr.put(CatNMK.NMK_OPTR, NoticeBoptr); NmkBniwr.put(CatNMK.NMK_OPTL, NoticeBoptl);
     1464        NmkBniwr.put(CatNMK.NMK_WRAL, NoticeBwral); NmkBniwr.put(CatNMK.NMK_WLAR, NoticeBwlar); NmkBniwr.put(CatNMK.NMK_KTPM, NoticeBktpm); NmkBniwr.put(CatNMK.NMK_KTSM, NoticeBktsm);
     1465        NmkBniwr.put(CatNMK.NMK_KTMR, NoticeBktmr); NmkBniwr.put(CatNMK.NMK_CRTP, NoticeBcrtp); NmkBniwr.put(CatNMK.NMK_CRTS, NoticeBcrts); NmkBniwr.put(CatNMK.NMK_TRBM, NoticeBtrbm);
     1466        NmkBniwr.put(CatNMK.NMK_RSPD, NoticeBrspd);
     1467    }
     1468
     1469    public static final Symbol NoticePwralL = new Symbol();
     1470    static {
     1471        NoticePwralL.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1472        NoticePwralL.add(new Instr(Form.FILL, Color.black));
     1473        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(-30, 30); p.lineTo(30, 30); p.closePath();
     1474        NoticePwralL.add(new Instr(Form.PGON, p));
     1475        NoticePwralL.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticePBwral, 1.0, 0, 0, null, new Delta(Handle.TC, AffineTransform.getScaleInstance(0.5, 0.5)))));
     1476    }
     1477
     1478    public static final Symbol NoticePwralR = new Symbol();
     1479    static {
     1480        NoticePwralR.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1481        NoticePwralR.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBwral, 1.0, 0, 0, null, null)));
     1482    }
     1483
     1484    public static final Symbol NoticePwlarL = new Symbol();
     1485    static {
     1486        NoticePwlarL.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1487        NoticePwlarL.add(new Instr(Form.FILL, Color.black));
     1488        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(-30, 30); p.lineTo(30, 30); p.closePath();
     1489        NoticePwlarL.add(new Instr(Form.PGON, p));
     1490        NoticePwlarL.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticePBwral, 1.0, 0, 0, null, new Delta(Handle.TC, AffineTransform.getScaleInstance(-0.5, 0.5)))));
     1491    }
     1492
     1493    public static final Symbol NoticePwlarR = new Symbol();
     1494    static {
     1495        NoticePwlarR.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1496        NoticePwlarR.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBwlar, 1.0, 0, 0, null, null)));
     1497    }
     1498
     1499    public static final Symbol NoticePktmR = new Symbol();
     1500    static {
     1501        NoticePktmR.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1502        NoticePktmR.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBP, 1.0, 0, 0, null, null)));
     1503        NoticePktmR.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1504        NoticePktmR.add(new Instr(Form.FILL, new Color(0x00d400)));
     1505        NoticePktmR.add(new Instr(Form.RECT, new Rectangle2D.Double(-20, -20, 40, 40)));
     1506    }
     1507
     1508    public static final Symbol NoticePktmL = new Symbol();
     1509    static {
     1510        NoticePktmL.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1511        NoticePktmL.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeKT, 1.0, 0, 0, null, null)));
     1512        NoticePktmL.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1513        NoticePktmL.add(new Instr(Form.FILL, new Color(0xd40000)));
     1514        NoticePktmL.add(new Instr(Form.RECT, new Rectangle2D.Double(-12, 2, 24, 24)));
     1515    }
     1516
     1517    public static final Symbol NoticePktmrL = new Symbol();
     1518    static {
     1519        NoticePktmrL.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1520        NoticePktmrL.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeKT, 1.0, 0, 0, null, null)));
     1521        NoticePktmrL.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1522        NoticePktmrL.add(new Instr(Form.FILL, new Color(0xd40000)));
     1523        NoticePktmrL.add(new Instr(Form.LINE, new Line2D.Double(-12, 2, -12, 28)));
     1524        NoticePktmrL.add(new Instr(Form.LINE, new Line2D.Double(12, 2, 12, 28)));
     1525        NoticePktmrL.add(new Instr(Form.LINE, new Line2D.Double(-12, 15, 12, 15)));
     1526    }
     1527
     1528    public static final Symbol NoticePktmrR = new Symbol();
     1529    static {
     1530        NoticePktmrR.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1531        NoticePktmrR.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeBP, 1.0, 0, 0, null, null)));
     1532        NoticePktmrR.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1533        NoticePktmrR.add(new Instr(Form.FILL, new Color(0x00d400)));
     1534        NoticePktmrR.add(new Instr(Form.LINE, new Line2D.Double(-15, -20, -15, 20)));
     1535        NoticePktmrR.add(new Instr(Form.LINE, new Line2D.Double(15, -20, 15, 20)));
     1536        NoticePktmrR.add(new Instr(Form.LINE, new Line2D.Double(-15, 0, 15, 0)));
     1537    }
     1538
     1539    public static final Symbol NoticePcrL = new Symbol();
     1540    static {
     1541        NoticePcrL.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1542        NoticePcrL.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1543        NoticePcrL.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeCR, 1.0, 0, 0, null, null)));
     1544        NoticePcrL.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1545        NoticePcrL.add(new Instr(Form.FILL, new Color(0xd40000)));
     1546        NoticePcrL.add(new Instr(Form.LINE, new Line2D.Double(-12, -12, 12, 12)));
     1547        NoticePcrL.add(new Instr(Form.LINE, new Line2D.Double(-12, 12, 12, -12)));
     1548    }
     1549
     1550    public static final Symbol NoticePcrR = new Symbol();
     1551    static {
     1552        NoticePcrR.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1553        NoticePcrR.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeCR, 1.0, 0, 0, null, null)));
     1554        NoticePcrR.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1555        NoticePcrR.add(new Instr(Form.FILL, new Color(0x00d400)));
     1556        NoticePcrR.add(new Instr(Form.LINE, new Line2D.Double(-12, -12, 12, 12)));
     1557        NoticePcrR.add(new Instr(Form.LINE, new Line2D.Double(-12, 12, 12, -12)));
     1558    }
     1559
     1560    static final Symbol NoticeRphib = new Symbol();
     1561    static {
     1562        NoticeRphib.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1563        NoticeRphib.add(new Instr(Form.FILL, new Color(0xd40000)));
     1564        NoticeRphib.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30, -30, 60, 60)));
     1565        NoticeRphib.add(new Instr(Form.LINE, new Line2D.Double(-20, -20, 20, 20)));
     1566    }
     1567
     1568    static final Symbol NoticeRinfo = new Symbol();
     1569    static {
     1570        NoticeRinfo.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1571        NoticeRinfo.add(new Instr(Form.FILL, new Color(0xd40000)));
     1572        NoticeRinfo.add(new Instr(Form.RECT, new Rectangle2D.Double(-30, -30, 60, 60)));
     1573    }
     1574
     1575    public static final Symbol NoticeRnpas = new Symbol();
     1576    static {
     1577        NoticeRnpas.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1578        NoticeRnpas.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRphib, 1.0, 0, 0, null, null)));
     1579        NoticeRnpas.add(new Instr(Form.FILL, Color.black));
     1580        Path2D.Double p = new Path2D.Double(); p.moveTo(-10, -15); p.lineTo(-10, 8); p.lineTo(-6, 8); p.lineTo(-12.5, 16); p.lineTo(-19, 8); p.lineTo(-15, 8); p.lineTo(-15, -15);
     1581        p.closePath(); p.moveTo(10, 15); p.lineTo(10, -8); p.lineTo(6, -8); p.lineTo(12.5, -16); p.lineTo(19, -8); p.lineTo(15, -8); p.lineTo(15, 15); p.closePath();
     1582        NoticeRnpas.add(new Instr(Form.PGON, p));
     1583    }
     1584
     1585    public static final Symbol NoticeRnank = new Symbol();
     1586    static {
     1587        NoticeRnank.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1588        NoticeRnank.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRphib, 1.0, 0, 0, null, null)));
     1589        NoticeRnank.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, new Scheme(Color.black), null)));
     1590    }
     1591
     1592    public static final Symbol NoticeRnwsh = new Symbol();
     1593    static {
     1594        NoticeRnwsh.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1595        NoticeRnwsh.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRphib, 1.0, 0, 0, null, null)));
     1596        NoticeRnwsh.add(new Instr(Form.FILL, Color.black));
     1597        Path2D.Double p = new Path2D.Double(); p.moveTo(-23, 10); p.curveTo(-11, 10, -12, 4, 0, 4); p.curveTo(12, 4, 11, 10, 23, 10);
     1598        p.moveTo(-23, -3); p.curveTo(-11, -3, -12, -9, 0, -9); p.curveTo(12, -9, 11, -3, 23, -3);
     1599        NoticeRnwsh.add(new Instr(Form.PLIN, p));
     1600    }
     1601
     1602    public static final Symbol NoticeRlmhr = new Symbol();
     1603    static {
     1604        NoticeRlmhr.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1605        NoticeRlmhr.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRinfo, 1.0, 0, 0, null, null)));
     1606        NoticeRlmhr.add(new Instr(Form.FILL, Color.black));
     1607        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -10); p.lineTo(27, -27); p.lineTo(-27, -27); p.closePath();
     1608        NoticeRlmhr.add(new Instr(Form.PGON, p));
     1609    }
     1610
     1611    public static final Symbol NoticeRtrna = new Symbol();
     1612    static {
     1613        NoticeRtrna.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1614        NoticeRtrna.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeCR, 1.0, 0, 0, null, null)));
     1615        NoticeRtrna.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1616        NoticeRtrna.add(new Instr(Form.EARC, new Arc2D.Double(-15.0, -15.0, 30.0, 30.0, 315.0, -280.0, Arc2D.OPEN)));
     1617        Path2D.Double p = new Path2D.Double(); p.moveTo(18.8, -2.0); p.lineTo(15.8, -13.2); p.lineTo(7.5, -5.0); p.closePath();
     1618        NoticeRtrna.add(new Instr(Form.PGON, p));
     1619    }
     1620
     1621    public static final Symbol NoticeRncps = new Symbol();
     1622    static {
     1623        NoticeRncps.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1624        NoticeRncps.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRphib, 1.0, 0, 0, null, null)));
     1625        NoticeRncps.add(new Instr(Form.FILL, Color.black));
     1626        Path2D.Double p = new Path2D.Double(); p.moveTo(-10, 0); p.lineTo(-10, 8); p.lineTo(-6, 8); p.lineTo(-12.5, 16); p.lineTo(-19, 8); p.lineTo(-15, 8); p.lineTo(-15, 0);
     1627        p.closePath(); p.moveTo(10, 0); p.lineTo(10, -8); p.lineTo(6, -8); p.lineTo(12.5, -16); p.lineTo(19, -8); p.lineTo(15, -8); p.lineTo(15, 0); p.closePath();
     1628        NoticeRncps.add(new Instr(Form.PGON, p));
     1629    }
     1630
     1631    public static final Symbol NoticeRnsmc = new Symbol();
     1632    static {
     1633        NoticeRnsmc.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1634        NoticeRnsmc.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRphib, 1.0, 0, 0, null, null)));
     1635        NoticeRnsmc.add(new Instr(Form.FILL, Color.black));
     1636        Path2D.Double p = new Path2D.Double(); p.moveTo(-15, 5); p.lineTo(15, 5); p.lineTo(25, -10); p.lineTo(12, -5); p.lineTo(-18, -1); p.closePath();
     1637        p.moveTo(-23, 2); p.lineTo(-21, 10); p.lineTo(-18, 8); p.lineTo(-20, 0); p.closePath();
     1638        NoticeRnsmc.add(new Instr(Form.PGON, p));
     1639    }
     1640
     1641    public static final Symbol NoticeRattn = new Symbol();
     1642    static {
     1643        NoticeRattn.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1644        NoticeRattn.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRinfo, 1.0, 0, 0, null, null)));
     1645        NoticeRattn.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     1646        NoticeRattn.add(new Instr(Form.FILL, Color.black));
     1647        NoticeRattn.add(new Instr(Form.LINE, new Line2D.Double(0, -20, 0, 10)));
     1648        NoticeRattn.add(new Instr(Form.LINE, new Line2D.Double(0, 15, 0, 20)));
     1649    }
     1650
     1651    public static final Symbol NoticeRfwcr = new Symbol();
     1652    static {
     1653        NoticeRfwcr.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1654        NoticeRfwcr.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeRinfo, 1.0, 0, 0, null, null)));
     1655        NoticeRfwcr.add(new Instr(Form.FILL, Color.black));
     1656        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -25); p.lineTo(-8, -15); p.lineTo(-8, 5); p.lineTo(-20, 5); p.lineTo(-20, 15); p.lineTo(-8, 15); p.lineTo(-8, 25);
     1657        p.lineTo(8, 25); p.lineTo(8, 15); p.lineTo(20, 15); p.lineTo(20, 5); p.lineTo(8, 5); p.lineTo(8, -15); p.closePath();
     1658        NoticeRfwcr.add(new Instr(Form.PGON, p));
     1659    }
     1660
     1661    public static final Symbol NoticeRship = new Symbol();
     1662    static {
     1663        NoticeRship.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -30, 60, 60)));
     1664        NoticeRship.add(new Instr(Form.SYMB, new Symbols.SubSymbol(NoticeCR, 1.0, 0, 0, null, null)));
     1665        NoticeRship.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
     1666        NoticeRship.add(new Instr(Form.FILL, Color.black));
     1667        NoticeRship.add(new Instr(Form.LINE, new Line2D.Double(-12, -12, 10, 10)));
     1668        NoticeRship.add(new Instr(Form.LINE, new Line2D.Double(-12, -8, -8, -12)));
     1669        NoticeRship.add(new Instr(Form.LINE, new Line2D.Double(12, -12, -10, 10)));
     1670        NoticeRship.add(new Instr(Form.LINE, new Line2D.Double(12, -8, 8, -12)));
     1671        NoticeRship.add(new Instr(Form.EARC, new Arc2D.Double(-17, -13, 30, 30, 185, 80, Arc2D.OPEN)));
     1672        NoticeRship.add(new Instr(Form.EARC, new Arc2D.Double(-13, -13, 30, 30, 275, 80, Arc2D.OPEN)));
     1673    }
     1674
     1675    public static final EnumMap<CatNMK, Symbol> NmkPpwbcl = new EnumMap<>(CatNMK.class);
     1676    static {
     1677        NmkPpwbcl.put(CatNMK.NMK_WRAL, NoticePwralL); NmkPpwbcl.put(CatNMK.NMK_WLAR, NoticePwlarL); NmkPpwbcl.put(CatNMK.NMK_KTPM, NoticePktmL); NmkPpwbcl.put(CatNMK.NMK_KTSM, NoticePktmL);
     1678        NmkPpwbcl.put(CatNMK.NMK_KTMR, NoticePktmrL); NmkPpwbcl.put(CatNMK.NMK_CRTP, NoticePcrL); NmkPpwbcl.put(CatNMK.NMK_CRTS, NoticePcrL);
     1679    }
     1680
     1681    public static final EnumMap<CatNMK, Symbol> NmkPpwbcr = new EnumMap<>(CatNMK.class);
     1682    static {
     1683        NmkPpwbcr.put(CatNMK.NMK_WRAL, NoticePwralR); NmkPpwbcr.put(CatNMK.NMK_WLAR, NoticePwlarR); NmkPpwbcr.put(CatNMK.NMK_KTPM, NoticePktmR); NmkPpwbcr.put(CatNMK.NMK_KTSM, NoticePktmR);
     1684        NmkPpwbcr.put(CatNMK.NMK_KTMR, NoticePktmrR); NmkPpwbcr.put(CatNMK.NMK_CRTP, NoticePcrR); NmkPpwbcr.put(CatNMK.NMK_CRTS, NoticePcrR);
     1685    }
     1686
     1687    public static final EnumMap<CatNMK, Symbol> NmkRiwr = new EnumMap<>(CatNMK.class);
     1688    static {
     1689        NmkRiwr.put(CatNMK.NMK_NPAS, NoticeRnpas); NmkRiwr.put(CatNMK.NMK_NANK, NoticeRnank); NmkRiwr.put(CatNMK.NMK_NWSH, NoticeRnwsh); NmkRiwr.put(CatNMK.NMK_LMHR, NoticeRlmhr); NmkRiwr.put(CatNMK.NMK_TRNA, NoticeRtrna);
     1690        NmkRiwr.put(CatNMK.NMK_NCPS, NoticeRncps); NmkRiwr.put(CatNMK.NMK_NSMC, NoticeRnsmc); NmkRiwr.put(CatNMK.NMK_ATTN, NoticeRattn); NmkRiwr.put(CatNMK.NMK_FWCR, NoticeRfwcr); NmkRiwr.put(CatNMK.NMK_SHIP, NoticeRship);
     1691    }
     1692
     1693    public static Scheme getScheme(MarSYS sys, BnkWTW bank) {
     1694        ArrayList<Color> colours = new ArrayList<>();
     1695        Scheme scheme = new Scheme(colours);
     1696        switch (sys) {
     1697        case SYS_BNWR:
     1698        case SYS_BWR2:
     1699            switch (bank) {
     1700            case BWW_LEFT:
     1701                colours.add(Color.white);
     1702                colours.add(new Color(0xf00000));
     1703                break;
     1704            case BWW_RGHT:
     1705                colours.add(Color.white);
     1706                colours.add(new Color(0x00a000));
     1707                break;
     1708            default:
     1709                colours.add(new Color(0xff8040));
     1710                colours.add(Color.black);
     1711                break;
     1712            }
     1713            break;
     1714        default:
     1715            break;
     1716        }
     1717        return scheme;
     1718    }
     1719
     1720    public static Symbol getNotice(CatNMK cat, MarSYS sys, BnkWTW bank) {
     1721        Symbol symbol = null;
     1722        switch (sys) {
     1723        case SYS_CEVN:
     1724            symbol = NmkCevni.get(cat);
     1725            break;
     1726        case SYS_BNWR:
     1727        case SYS_BWR2:
     1728            symbol = NmkBniwr.get(cat);
     1729            break;
     1730        case SYS_PPWB:
     1731            switch (bank) {
     1732            case BWW_LEFT:
     1733                symbol = NmkPpwbcl.get(cat);
     1734                break;
     1735            case BWW_RGHT:
     1736                symbol = NmkPpwbcr.get(cat);
     1737                break;
     1738            default:
     1739                break;
     1740            }
     1741            break;
     1742        case SYS_RIWR:
     1743            symbol = NmkRiwr.get(cat);
     1744            break;
     1745        default:
     1746            break;
     1747        }
     1748        return symbol;
     1749    }
    15791750}
  • applications/editors/josm/plugins/seachart/src/symbols/Symbols.java

    r32393 r32394  
    1515import java.awt.Graphics2D;
    1616import java.awt.font.TextLayout;
    17 import java.awt.geom.*;
     17import java.awt.geom.AffineTransform;
     18import java.awt.geom.Arc2D;
     19import java.awt.geom.Ellipse2D;
     20import java.awt.geom.Line2D;
     21import java.awt.geom.Path2D;
     22import java.awt.geom.Rectangle2D;
     23import java.awt.geom.RectangularShape;
     24import java.awt.geom.RoundRectangle2D;
    1825import java.util.ArrayList;
    1926
    2027public class Symbols {
    21 
    22         public static final Color Yland = new Color(0xedbc0c);
    23 //      public static final Color Bwater = new Color(0x78acd2);
    24         public static final Color Bwater = new Color(0x9bc5e3);
    25         public static final Color Gdries = new Color(0x689868);
    26         public static final Color Mline = new Color(0x9a6078);
    27         public static final Color Msymb = new Color(0xa30075);
    28         public static final Color Mtss = new Color(0xc0c480ff, true);
    29        
    30         public enum Form {
    31                 BBOX, STRK, COLR, FILL, LINE, RECT, RRCT, ELPS, EARC, PLIN, PGON, RSHP, TEXT, SYMB, N1, N2, P1, P2, H2, H3, H4, H5, V2, V3, D2, D3, D4, B1, S2, S3, S4, C2, X2
    32         }
    33 
    34         public enum Patt {
    35                 Z, H, V, D, B, S, C, X
    36         }
    37 
    38         public enum Handle {
    39                 CC, TL, TR, TC, LC, RC, BL, BR, BC
    40         }
    41 
    42         public static class Instr {
    43                 public Form type;
    44                 public Object params;
    45 
    46                 public Instr(Form itype, Object iparams) {
    47                         type = itype;
    48                         params = iparams;
    49                 }
    50         }
    51 
    52         public static class Delta {
    53                 public Handle h;
    54                 public AffineTransform t;
    55 
    56                 public Delta(Handle ih, AffineTransform it) {
    57                         h = ih;
    58                         t = it;
    59                 }
    60                 public Delta(Handle ih) {
    61                         h = ih;
    62                         t = new AffineTransform();
    63                 }
    64         }
    65 
    66         public static class Scheme {
    67                 public ArrayList<Patt> pat;
    68                 public ArrayList<Color> col;
    69 
    70                 public Scheme(ArrayList<Color> icol) {
    71                         pat = new ArrayList<>();
    72                         col = icol;
    73                 }
    74                 public Scheme(ArrayList<Patt> ipat, ArrayList<Color> icol) {
    75                         pat = ipat;
    76                         col = icol;
    77                 }
    78                 public Scheme(Color icol) {
    79                         pat = new ArrayList<>();
    80                         col = new ArrayList<>();
    81                         col.add(icol);
    82                 }
    83                 public Scheme() {
    84                         pat = new ArrayList<>();
    85                         col = new ArrayList<>();
    86                 }
    87         }
    88 
    89         public static class Caption {
    90                 public String string;
    91                 public Font font;
    92                 public Color colour;
    93                 public Delta dd;
    94 
    95                 public Caption(String istr, Font ifont, Color icolour, Delta idd) {
    96                         string = istr;
    97                         font = ifont;
    98                         colour = icolour;
    99                         dd = idd;
    100                 }
    101         }
    102 
    103         public static class LineStyle {
    104                 public Color line;
    105                 public float width;
    106                 public float[] dash;
    107                 public Color fill;
    108 
    109                 public LineStyle(Color ifill) {
    110                         line = null;
    111                         width = 0;
    112                         dash = null;
    113                         fill = ifill;
    114                 }
    115                 public LineStyle(Color iline, float iwidth) {
    116                         line = iline;
    117                         width = iwidth;
    118                         dash = null;
    119                         fill = null;
    120                 }
    121                 public LineStyle(Color iline, float iwidth, float[] idash) {
    122                         line = iline;
    123                         width = iwidth;
    124                         dash = idash;
    125                         fill = null;
    126                 }
    127                 public LineStyle(Color iline, float iwidth, Color ifill) {
    128                         line = iline;
    129                         width = iwidth;
    130                         dash = null;
    131                         fill = ifill;
    132                 }
    133                 public LineStyle(Color iline, float iwidth, float[] idash, Color ifill) {
    134                         line = iline;
    135                         width = iwidth;
    136                         dash = idash;
    137                         fill = ifill;
    138                 }
    139         }
    140 
    141         public static class Symbol extends ArrayList<Instr> {
    142 
    143                 public Symbol() {
    144                         super();
    145                 }
    146         }
    147        
    148         public static class SubSymbol {
    149                 public Symbol instr;
    150                 public double scale;
    151                 public double x;
    152                 public double y;
    153                 public Delta delta;
    154                 public Scheme scheme;
    155 
    156                 public SubSymbol(Symbol iinstr, double iscale, double ix, double iy, Scheme ischeme, Delta idelta) {
    157                         instr = iinstr;
    158                         scale = iscale;
    159                         x = ix;
    160                         y = iy;
    161                         delta = idelta;
    162                         scheme = ischeme;
    163                 }
    164         }
    165 
    166         public static void drawSymbol(Graphics2D g2, Symbol symbol, double scale, double x, double y, Scheme cs, Delta dd) {
    167                 int pn = 0;
    168                 int cn = 0;
    169                 Patt bpat = Patt.Z;
    170                 Color bcol = null;
    171                 g2.setPaint(Color.black);
    172                 if (cs != null) {
    173                         if ((cs.pat.size() > 0) && (cs.col.size() > 0) && (cs.pat.get(0) == Patt.B)) {
    174                                 bpat = (cs.pat.remove(0));
    175                                 bcol = (cs.col.remove(0));
    176                         }
    177                         pn = cs.pat.size();
    178                         cn = cs.col.size() - ((pn != 0) ? pn - 1 : 0);
    179                         if ((pn == 0) && (cs.col.size() == 1)) {
    180                                 g2.setPaint(cs.col.get(0));
    181                         }
    182                 }
    183                 AffineTransform savetr = g2.getTransform();
    184                 g2.translate(x, y);
    185                 g2.scale(scale, scale);
    186                 if (symbol != null) {
    187                         for (Instr item : symbol) {
    188                                 switch (item.type) {
    189                                 case BBOX:
    190                                         Rectangle2D.Double bbox = (Rectangle2D.Double) item.params;
    191                                         double dx = 0.0;
    192                                         double dy = 0.0;
    193                                         if (dd != null) {
    194                                                 g2.transform(dd.t);
    195                                                 switch (dd.h) {
    196                                                 case CC:
    197                                                         dx -= bbox.x + (bbox.width / 2.0);
    198                                                         dy -= bbox.y + (bbox.height / 2.0);
    199                                                         break;
    200                                                 case TL:
    201                                                         dx -= bbox.x;
    202                                                         dy -= bbox.y;
    203                                                         break;
    204                                                 case TR:
    205                                                         dx -= bbox.x + bbox.width;
    206                                                         dy -= bbox.y;
    207                                                         break;
    208                                                 case TC:
    209                                                         dx -= bbox.x + (bbox.width / 2.0);
    210                                                         dy -= bbox.y;
    211                                                         break;
    212                                                 case LC:
    213                                                         dx -= bbox.x;
    214                                                         dy -= bbox.y + (bbox.height / 2.0);
    215                                                         break;
    216                                                 case RC:
    217                                                         dx -= bbox.x + bbox.width;
    218                                                         dy -= bbox.y + (bbox.height / 2.0);
    219                                                         break;
    220                                                 case BL:
    221                                                         dx -= bbox.x;
    222                                                         dy -= bbox.y + bbox.height;
    223                                                         break;
    224                                                 case BR:
    225                                                         dx -= bbox.x + bbox.width;
    226                                                         dy -= bbox.y + bbox.height;
    227                                                         break;
    228                                                 case BC:
    229                                                         dx -= bbox.x + (bbox.width / 2.0);
    230                                                         dy -= bbox.y + bbox.height;
    231                                                         break;
    232                                                 }
    233                                                 g2.translate(dx, dy);
    234                                         }
    235                                         break;
    236                                 case COLR:
    237                                         if ((cs != null) && (cs.col != null)) {
    238                                                 for (Instr patch : (Symbol) item.params) {
    239                                                         switch (patch.type) {
    240                                                         case N1:
    241                                                                 if (cn > 0) {
    242                                                                         Symbol s = (Symbol) patch.params;
    243                                                                         drawSymbol(g2, s, 1.0, 0, 0, new Scheme(cs.col.get(0)), null);
    244                                                                 }
    245                                                                 break;
    246                                                         case N2:
    247                                                                 if (cn > 0) {
    248                                                                         Symbol s = (Symbol) patch.params;
    249                                                                         drawSymbol(g2, s, 1.0, 0, 0, new Scheme((cn > 1) ? cs.col.get(1) : cs.col.get(0)), null);
    250                                                                 }
    251                                                                 break;
    252                                                         case P1:
    253                                                                 if (cn > 0) {
    254                                                                         g2.setPaint(cs.col.get(0));
    255                                                                         g2.fill((Path2D.Double) patch.params);
    256                                                                 }
    257                                                                 break;
    258                                                         case P2:
    259                                                                 if (cn > 0) {
    260                                                                         if (cn > 1) {
    261                                                                                 g2.setPaint(cs.col.get(1));
    262                                                                         } else {
    263                                                                                 g2.setPaint(cs.col.get(0));
    264                                                                         }
    265                                                                         g2.fill((Path2D.Double) patch.params);
    266                                                                 }
    267                                                                 break;
    268                                                         case H2:
    269                                                                 if ((cn > 1) && (pn > 0) && (cs.pat.get(0) == Patt.H)) {
    270                                                                         g2.setPaint(cs.col.get(cs.col.size() - pn));
    271                                                                         g2.fill((Path2D.Double) patch.params);
    272                                                                 }
    273                                                                 break;
    274                                                         case H3:
    275                                                                 if ((cn == 3) && (pn > 0) && (cs.pat.get(0) == Patt.H)) {
    276                                                                         g2.setPaint(cs.col.get(1));
    277                                                                         g2.fill((Path2D.Double) patch.params);
    278                                                                 }
    279                                                                 break;
    280                                                         case H4:
    281                                                                 if ((cn == 4) && (pn > 0) && (cs.pat.get(0) == Patt.H)) {
    282                                                                         g2.setPaint(cs.col.get(1));
    283                                                                         g2.fill((Path2D.Double) patch.params);
    284                                                                 }
    285                                                                 break;
    286                                                         case H5:
    287                                                                 if ((cn == 4) && (pn > 0) && (cs.pat.get(0) == Patt.H)) {
    288                                                                         g2.setPaint(cs.col.get(2));
    289                                                                         g2.fill((Path2D.Double) patch.params);
    290                                                                 }
    291                                                                 break;
    292                                                         case V2:
    293                                                                 if ((cn > 1) && (pn > 0) && (cs.pat.get(0) == Patt.V)) {
    294                                                                         g2.setPaint(cs.col.get(cs.col.size() - pn));
    295                                                                         g2.fill((Path2D.Double) patch.params);
    296                                                                 }
    297                                                                 break;
    298                                                         case V3:
    299                                                                 if ((cn == 3) && (pn > 0) && (cs.pat.get(0) == Patt.V)) {
    300                                                                         g2.setPaint(cs.col.get(1));
    301                                                                         g2.fill((Path2D.Double) patch.params);
    302                                                                 }
    303                                                                 break;
    304                                                         case B1:
    305                                                                 if (bpat == Patt.B) {
    306                                                                         g2.setPaint(bcol);
    307                                                                         g2.fill((Path2D.Double) patch.params);
    308                                                                 }
    309                                                                 break;
    310                                                         case S2:
    311                                                                 if ((cn > 1) && (pn > 0) && (cs.pat.get(0) == Patt.S)) {
    312                                                                         g2.setPaint(cs.col.get(1));
    313                                                                         g2.fill((Path2D.Double) patch.params);
    314                                                                 }
    315                                                                 break;
    316                                                         case S3:
    317                                                                 if ((cn > 2) && (pn > 0) && (cs.pat.get(0) == Patt.S)) {
    318                                                                         g2.setPaint(cs.col.get(2));
    319                                                                         g2.fill((Path2D.Double) patch.params);
    320                                                                 }
    321                                                                 break;
    322                                                         case S4:
    323                                                                 if ((cn == 4) && (pn > 0) && (cs.pat.get(0) == Patt.S)) {
    324                                                                         g2.setPaint(cs.col.get(3));
    325                                                                         g2.fill((Path2D.Double) patch.params);
    326                                                                 }
    327                                                                 break;
    328                                                         default:
    329                                                                 break;
    330                                                         }
    331                                                 }
    332                                         }
    333                                         break;
    334                                 case STRK:
    335                                         g2.setStroke((BasicStroke) item.params);
    336                                         break;
    337                                 case FILL:
    338                                         g2.setPaint((Color) item.params);
    339                                         break;
    340                                 case LINE:
    341                                         g2.draw((Line2D.Double) item.params);
    342                                         break;
    343                                 case RECT:
    344                                         g2.draw((Rectangle2D.Double) item.params);
    345                                         break;
    346                                 case RRCT:
    347                                         g2.draw((RoundRectangle2D.Double) item.params);
    348                                         break;
    349                                 case ELPS:
    350                                         g2.draw((Ellipse2D.Double) item.params);
    351                                         break;
    352                                 case EARC:
    353                                         g2.draw((Arc2D.Double) item.params);
    354                                         break;
    355                                 case PLIN:
    356                                         g2.draw((Path2D.Double) item.params);
    357                                         break;
    358                                 case PGON:
    359                                         g2.fill((Path2D.Double) item.params);
    360                                         break;
    361                                 case RSHP:
    362                                         g2.fill((RectangularShape) item.params);
    363                                         break;
    364                                 case SYMB:
    365                                         SubSymbol s = (SubSymbol) item.params;
    366                                         drawSymbol(g2, s.instr, s.scale, s.x, s.y, (s.scheme != null ? s.scheme : cs), s.delta);
    367                                         break;
    368                                 case TEXT:
    369                                         Caption c = (Caption) item.params;
    370                                         g2.setPaint(c.colour);
    371                                         TextLayout layout = new TextLayout(c.string, c.font, g2.getFontRenderContext());
    372                                         Rectangle2D bb = layout.getBounds();
    373                                         dx = 0;
    374                                         dy = 0;
    375                                         if (c.dd != null) {
    376                                                 if (c.dd.t != null) g2.transform(c.dd.t);
    377                                                 switch (c.dd.h) {
    378                                                 case CC:
    379                                                         dx -= bb.getX() + (bb.getWidth() / 2.0);
    380                                                         dy -= bb.getY() + (bb.getHeight() / 2.0);
    381                                                         break;
    382                                                 case TL:
    383                                                         dx -= bb.getX();
    384                                                         dy -= bb.getY();
    385                                                         break;
    386                                                 case TR:
    387                                                         dx -= bb.getX() + bb.getWidth();
    388                                                         dy -= bb.getY();
    389                                                         break;
    390                                                 case TC:
    391                                                         dx -= bb.getX() + (bb.getWidth() / 2.0);
    392                                                         dy -= bb.getY();
    393                                                         break;
    394                                                 case LC:
    395                                                         dx -= bb.getX();
    396                                                         dy -= bb.getY() + (bb.getHeight() / 2.0);
    397                                                         break;
    398                                                 case RC:
    399                                                         dx -= bb.getX() + bb.getWidth();
    400                                                         dy -= bb.getY() + (bb.getHeight() / 2.0);
    401                                                         break;
    402                                                 case BL:
    403                                                         dx -= bb.getX();
    404                                                         dy -= bb.getY() + bb.getHeight();
    405                                                         break;
    406                                                 case BR:
    407                                                         dx -= bb.getX() + bb.getWidth();
    408                                                         dy -= bb.getY() + bb.getHeight();
    409                                                         break;
    410                                                 case BC:
    411                                                         dx -= bb.getX() + (bb.getWidth() / 2.0);
    412                                                         dy -= bb.getY() + bb.getHeight();
    413                                                         break;
    414                                                 }
    415                                         }
    416                                         layout.draw(g2, (float)dx, (float)dy);
    417                                         break;
    418                                 default:
    419                                         break;
    420                                 }
    421                         }
    422                 }
    423                 g2.setTransform(savetr);
    424         }
     28    // CHECKSTYLE.OFF: LineLength
     29    public static final Color Yland = new Color(0xedbc0c);
     30    //    public static final Color Bwater = new Color(0x78acd2);
     31    public static final Color Bwater = new Color(0x9bc5e3);
     32    public static final Color Gdries = new Color(0x689868);
     33    public static final Color Mline = new Color(0x9a6078);
     34    public static final Color Msymb = new Color(0xa30075);
     35    public static final Color Mtss = new Color(0xc0c480ff, true);
     36
     37    public enum Form {
     38        BBOX, STRK, COLR, FILL, LINE, RECT, RRCT, ELPS, EARC, PLIN, PGON, RSHP, TEXT, SYMB, N1, N2, P1, P2, H2, H3, H4, H5, V2, V3, D2, D3, D4, B1, S2, S3, S4, C2, X2
     39    }
     40
     41    public enum Patt {
     42        Z, H, V, D, B, S, C, X
     43    }
     44
     45    public enum Handle {
     46        CC, TL, TR, TC, LC, RC, BL, BR, BC
     47    }
     48
     49    public static class Instr {
     50        public Form type;
     51        public Object params;
     52
     53        public Instr(Form itype, Object iparams) {
     54            type = itype;
     55            params = iparams;
     56        }
     57    }
     58
     59    public static class Delta {
     60        public Handle h;
     61        public AffineTransform t;
     62
     63        public Delta(Handle ih, AffineTransform it) {
     64            h = ih;
     65            t = it;
     66        }
     67
     68        public Delta(Handle ih) {
     69            h = ih;
     70            t = new AffineTransform();
     71        }
     72    }
     73
     74    public static class Scheme {
     75        public ArrayList<Patt> pat;
     76        public ArrayList<Color> col;
     77
     78        public Scheme(ArrayList<Color> icol) {
     79            pat = new ArrayList<>();
     80            col = icol;
     81        }
     82
     83        public Scheme(ArrayList<Patt> ipat, ArrayList<Color> icol) {
     84            pat = ipat;
     85            col = icol;
     86        }
     87
     88        public Scheme(Color icol) {
     89            pat = new ArrayList<>();
     90            col = new ArrayList<>();
     91            col.add(icol);
     92        }
     93
     94        public Scheme() {
     95            pat = new ArrayList<>();
     96            col = new ArrayList<>();
     97        }
     98    }
     99
     100    public static class Caption {
     101        public String string;
     102        public Font font;
     103        public Color colour;
     104        public Delta dd;
     105
     106        public Caption(String istr, Font ifont, Color icolour, Delta idd) {
     107            string = istr;
     108            font = ifont;
     109            colour = icolour;
     110            dd = idd;
     111        }
     112    }
     113
     114    public static class LineStyle {
     115        public Color line;
     116        public float width;
     117        public float[] dash;
     118        public Color fill;
     119
     120        public LineStyle(Color ifill) {
     121            line = null;
     122            width = 0;
     123            dash = null;
     124            fill = ifill;
     125        }
     126
     127        public LineStyle(Color iline, float iwidth) {
     128            line = iline;
     129            width = iwidth;
     130            dash = null;
     131            fill = null;
     132        }
     133
     134        public LineStyle(Color iline, float iwidth, float[] idash) {
     135            line = iline;
     136            width = iwidth;
     137            dash = idash;
     138            fill = null;
     139        }
     140
     141        public LineStyle(Color iline, float iwidth, Color ifill) {
     142            line = iline;
     143            width = iwidth;
     144            dash = null;
     145            fill = ifill;
     146        }
     147
     148        public LineStyle(Color iline, float iwidth, float[] idash, Color ifill) {
     149            line = iline;
     150            width = iwidth;
     151            dash = idash;
     152            fill = ifill;
     153        }
     154    }
     155
     156    public static class Symbol extends ArrayList<Instr> {
     157
     158        public Symbol() {
     159            super();
     160        }
     161    }
     162
     163    public static class SubSymbol {
     164        public Symbol instr;
     165        public double scale;
     166        public double x;
     167        public double y;
     168        public Delta delta;
     169        public Scheme scheme;
     170
     171        public SubSymbol(Symbol iinstr, double iscale, double ix, double iy, Scheme ischeme, Delta idelta) {
     172            instr = iinstr;
     173            scale = iscale;
     174            x = ix;
     175            y = iy;
     176            delta = idelta;
     177            scheme = ischeme;
     178        }
     179    }
     180
     181    public static void drawSymbol(Graphics2D g2, Symbol symbol, double scale, double x, double y, Scheme cs, Delta dd) {
     182        int pn = 0;
     183        int cn = 0;
     184        Patt bpat = Patt.Z;
     185        Color bcol = null;
     186        g2.setPaint(Color.black);
     187        if (cs != null) {
     188            if ((cs.pat.size() > 0) && (cs.col.size() > 0) && (cs.pat.get(0) == Patt.B)) {
     189                bpat = (cs.pat.remove(0));
     190                bcol = (cs.col.remove(0));
     191            }
     192            pn = cs.pat.size();
     193            cn = cs.col.size() - ((pn != 0) ? pn - 1 : 0);
     194            if ((pn == 0) && (cs.col.size() == 1)) {
     195                g2.setPaint(cs.col.get(0));
     196            }
     197        }
     198        AffineTransform savetr = g2.getTransform();
     199        g2.translate(x, y);
     200        g2.scale(scale, scale);
     201        if (symbol != null) {
     202            for (Instr item : symbol) {
     203                switch (item.type) {
     204                case BBOX:
     205                    Rectangle2D.Double bbox = (Rectangle2D.Double) item.params;
     206                    double dx = 0.0;
     207                    double dy = 0.0;
     208                    if (dd != null) {
     209                        g2.transform(dd.t);
     210                        switch (dd.h) {
     211                        case CC:
     212                            dx -= bbox.x + (bbox.width / 2.0);
     213                            dy -= bbox.y + (bbox.height / 2.0);
     214                            break;
     215                        case TL:
     216                            dx -= bbox.x;
     217                            dy -= bbox.y;
     218                            break;
     219                        case TR:
     220                            dx -= bbox.x + bbox.width;
     221                            dy -= bbox.y;
     222                            break;
     223                        case TC:
     224                            dx -= bbox.x + (bbox.width / 2.0);
     225                            dy -= bbox.y;
     226                            break;
     227                        case LC:
     228                            dx -= bbox.x;
     229                            dy -= bbox.y + (bbox.height / 2.0);
     230                            break;
     231                        case RC:
     232                            dx -= bbox.x + bbox.width;
     233                            dy -= bbox.y + (bbox.height / 2.0);
     234                            break;
     235                        case BL:
     236                            dx -= bbox.x;
     237                            dy -= bbox.y + bbox.height;
     238                            break;
     239                        case BR:
     240                            dx -= bbox.x + bbox.width;
     241                            dy -= bbox.y + bbox.height;
     242                            break;
     243                        case BC:
     244                            dx -= bbox.x + (bbox.width / 2.0);
     245                            dy -= bbox.y + bbox.height;
     246                            break;
     247                        }
     248                        g2.translate(dx, dy);
     249                    }
     250                    break;
     251                case COLR:
     252                    if ((cs != null) && (cs.col != null)) {
     253                        for (Instr patch : (Symbol) item.params) {
     254                            switch (patch.type) {
     255                            case N1:
     256                                if (cn > 0) {
     257                                    Symbol s = (Symbol) patch.params;
     258                                    drawSymbol(g2, s, 1.0, 0, 0, new Scheme(cs.col.get(0)), null);
     259                                }
     260                                break;
     261                            case N2:
     262                                if (cn > 0) {
     263                                    Symbol s = (Symbol) patch.params;
     264                                    drawSymbol(g2, s, 1.0, 0, 0, new Scheme((cn > 1) ? cs.col.get(1) : cs.col.get(0)), null);
     265                                }
     266                                break;
     267                            case P1:
     268                                if (cn > 0) {
     269                                    g2.setPaint(cs.col.get(0));
     270                                    g2.fill((Path2D.Double) patch.params);
     271                                }
     272                                break;
     273                            case P2:
     274                                if (cn > 0) {
     275                                    if (cn > 1) {
     276                                        g2.setPaint(cs.col.get(1));
     277                                    } else {
     278                                        g2.setPaint(cs.col.get(0));
     279                                    }
     280                                    g2.fill((Path2D.Double) patch.params);
     281                                }
     282                                break;
     283                            case H2:
     284                                if ((cn > 1) && (pn > 0) && (cs.pat.get(0) == Patt.H)) {
     285                                    g2.setPaint(cs.col.get(cs.col.size() - pn));
     286                                    g2.fill((Path2D.Double) patch.params);
     287                                }
     288                                break;
     289                            case H3:
     290                                if ((cn == 3) && (pn > 0) && (cs.pat.get(0) == Patt.H)) {
     291                                    g2.setPaint(cs.col.get(1));
     292                                    g2.fill((Path2D.Double) patch.params);
     293                                }
     294                                break;
     295                            case H4:
     296                                if ((cn == 4) && (pn > 0) && (cs.pat.get(0) == Patt.H)) {
     297                                    g2.setPaint(cs.col.get(1));
     298                                    g2.fill((Path2D.Double) patch.params);
     299                                }
     300                                break;
     301                            case H5:
     302                                if ((cn == 4) && (pn > 0) && (cs.pat.get(0) == Patt.H)) {
     303                                    g2.setPaint(cs.col.get(2));
     304                                    g2.fill((Path2D.Double) patch.params);
     305                                }
     306                                break;
     307                            case V2:
     308                                if ((cn > 1) && (pn > 0) && (cs.pat.get(0) == Patt.V)) {
     309                                    g2.setPaint(cs.col.get(cs.col.size() - pn));
     310                                    g2.fill((Path2D.Double) patch.params);
     311                                }
     312                                break;
     313                            case V3:
     314                                if ((cn == 3) && (pn > 0) && (cs.pat.get(0) == Patt.V)) {
     315                                    g2.setPaint(cs.col.get(1));
     316                                    g2.fill((Path2D.Double) patch.params);
     317                                }
     318                                break;
     319                            case B1:
     320                                if (bpat == Patt.B) {
     321                                    g2.setPaint(bcol);
     322                                    g2.fill((Path2D.Double) patch.params);
     323                                }
     324                                break;
     325                            case S2:
     326                                if ((cn > 1) && (pn > 0) && (cs.pat.get(0) == Patt.S)) {
     327                                    g2.setPaint(cs.col.get(1));
     328                                    g2.fill((Path2D.Double) patch.params);
     329                                }
     330                                break;
     331                            case S3:
     332                                if ((cn > 2) && (pn > 0) && (cs.pat.get(0) == Patt.S)) {
     333                                    g2.setPaint(cs.col.get(2));
     334                                    g2.fill((Path2D.Double) patch.params);
     335                                }
     336                                break;
     337                            case S4:
     338                                if ((cn == 4) && (pn > 0) && (cs.pat.get(0) == Patt.S)) {
     339                                    g2.setPaint(cs.col.get(3));
     340                                    g2.fill((Path2D.Double) patch.params);
     341                                }
     342                                break;
     343                            default:
     344                                break;
     345                            }
     346                        }
     347                    }
     348                    break;
     349                case STRK:
     350                    g2.setStroke((BasicStroke) item.params);
     351                    break;
     352                case FILL:
     353                    g2.setPaint((Color) item.params);
     354                    break;
     355                case LINE:
     356                    g2.draw((Line2D.Double) item.params);
     357                    break;
     358                case RECT:
     359                    g2.draw((Rectangle2D.Double) item.params);
     360                    break;
     361                case RRCT:
     362                    g2.draw((RoundRectangle2D.Double) item.params);
     363                    break;
     364                case ELPS:
     365                    g2.draw((Ellipse2D.Double) item.params);
     366                    break;
     367                case EARC:
     368                    g2.draw((Arc2D.Double) item.params);
     369                    break;
     370                case PLIN:
     371                    g2.draw((Path2D.Double) item.params);
     372                    break;
     373                case PGON:
     374                    g2.fill((Path2D.Double) item.params);
     375                    break;
     376                case RSHP:
     377                    g2.fill((RectangularShape) item.params);
     378                    break;
     379                case SYMB:
     380                    SubSymbol s = (SubSymbol) item.params;
     381                    drawSymbol(g2, s.instr, s.scale, s.x, s.y, (s.scheme != null ? s.scheme : cs), s.delta);
     382                    break;
     383                case TEXT:
     384                    Caption c = (Caption) item.params;
     385                    g2.setPaint(c.colour);
     386                    TextLayout layout = new TextLayout(c.string, c.font, g2.getFontRenderContext());
     387                    Rectangle2D bb = layout.getBounds();
     388                    dx = 0;
     389                    dy = 0;
     390                    if (c.dd != null) {
     391                        if (c.dd.t != null) g2.transform(c.dd.t);
     392                        switch (c.dd.h) {
     393                        case CC:
     394                            dx -= bb.getX() + (bb.getWidth() / 2.0);
     395                            dy -= bb.getY() + (bb.getHeight() / 2.0);
     396                            break;
     397                        case TL:
     398                            dx -= bb.getX();
     399                            dy -= bb.getY();
     400                            break;
     401                        case TR:
     402                            dx -= bb.getX() + bb.getWidth();
     403                            dy -= bb.getY();
     404                            break;
     405                        case TC:
     406                            dx -= bb.getX() + (bb.getWidth() / 2.0);
     407                            dy -= bb.getY();
     408                            break;
     409                        case LC:
     410                            dx -= bb.getX();
     411                            dy -= bb.getY() + (bb.getHeight() / 2.0);
     412                            break;
     413                        case RC:
     414                            dx -= bb.getX() + bb.getWidth();
     415                            dy -= bb.getY() + (bb.getHeight() / 2.0);
     416                            break;
     417                        case BL:
     418                            dx -= bb.getX();
     419                            dy -= bb.getY() + bb.getHeight();
     420                            break;
     421                        case BR:
     422                            dx -= bb.getX() + bb.getWidth();
     423                            dy -= bb.getY() + bb.getHeight();
     424                            break;
     425                        case BC:
     426                            dx -= bb.getX() + (bb.getWidth() / 2.0);
     427                            dy -= bb.getY() + bb.getHeight();
     428                            break;
     429                        }
     430                    }
     431                    layout.draw(g2, (float) dx, (float) dy);
     432                    break;
     433                default:
     434                    break;
     435                }
     436            }
     437        }
     438        g2.setTransform(savetr);
     439    }
    425440}
  • applications/editors/josm/plugins/seachart/src/symbols/Topmarks.java

    r32393 r32394  
    1212import java.awt.BasicStroke;
    1313import java.awt.Color;
    14 import java.awt.geom.*;
     14import java.awt.geom.AffineTransform;
     15import java.awt.geom.Ellipse2D;
     16import java.awt.geom.GeneralPath;
     17import java.awt.geom.Line2D;
     18import java.awt.geom.Path2D;
     19import java.awt.geom.Rectangle2D;
    1520import java.util.EnumMap;
    1621
    17 import s57.S57val.*;
    18 import symbols.Symbols.*;
     22import s57.S57val.BoySHP;
     23import s57.S57val.TopSHP;
     24import symbols.Symbols.Delta;
     25import symbols.Symbols.Form;
     26import symbols.Symbols.Handle;
     27import symbols.Symbols.Instr;
     28import symbols.Symbols.Symbol;
    1929
    2030public class Topmarks {
    21        
    22         public static final Symbol RadarReflector = new Symbol();
    23         static {
    24                 RadarReflector.add(new Instr(Form.BBOX, new Rectangle2D.Double(-50,-40,100,40)));
    25                 RadarReflector.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    26                 RadarReflector.add(new Instr(Form.FILL, Color.black));
    27                 Path2D.Double p = new Path2D.Double(); p.moveTo(-30,-3); p.quadTo(0, -40, 30, -3); p.moveTo(0,-20); p.lineTo(0,-37);
    28                 p.moveTo(-30, -3); p.lineTo(-43,-14); p.moveTo(30, -3); p.lineTo(44,-14); p.moveTo(-15, -14); p.lineTo(-25,-30); p.moveTo(15, -14); p.lineTo(25,-30);
    29                 RadarReflector.add(new Instr(Form.PLIN, p));
    30         }
    31         public static final Symbol TopBesom = new Symbol();
    32         static {
    33                 TopBesom.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    34                 TopBesom.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    35                 TopBesom.add(new Instr(Form.FILL, Color.black));
    36                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,0.0); p.lineTo(0.0,-30.0); p.lineTo(15.0,0.0); p.moveTo(0.0,0.0); p.lineTo(0.0,-28.0);
    37                 TopBesom.add(new Instr(Form.PLIN, p));
    38         }
    39         public static final Symbol TopIBesom = new Symbol();
    40         static {
    41                 TopIBesom.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    42                 TopIBesom.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    43                 TopIBesom.add(new Instr(Form.FILL, Color.black));
    44                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,-30.0); p.lineTo(0.0,0.0); p.lineTo(15.0,-30.0);
    45                 TopIBesom.add(new Instr(Form.PLIN, p));
    46         }
    47         public static final Symbol TopBoard = new Symbol();
    48         static {
    49                 TopBoard.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
    50                 Symbol colours = new Symbol();
    51                 Path2D.Double p = new Path2D.Double(); p.moveTo(-29,-1); p.lineTo(-29,-59); p.lineTo(29,-59); p.lineTo(29,-1); p.closePath();
    52                 colours.add(new Instr(Form.P1, p));
    53                 p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    54                 p.moveTo(-29,-1); p.lineTo(-29,-59); p.lineTo(29,-59); p.lineTo(29,-1); p.closePath();
    55                 p.moveTo(-19,-10); p.lineTo(-19,-49); p.lineTo(19,-49); p.lineTo(19,-10); p.closePath();
    56                 colours.add(new Instr(Form.B1, p));
    57                 p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    58                 p.moveTo(-29,-1); p.lineTo(-29,-30); p.lineTo(29,-30); p.lineTo(29,-59); p.lineTo(0,-59); p.lineTo(0,-1); p.closePath();
    59                 colours.add(new Instr(Form.S2, p));
    60                 p = new Path2D.Double(); p.moveTo(-29,-1); p.lineTo(-29,-30); p.lineTo(0,-30); p.lineTo(0,-1); p.closePath();
    61                 colours.add(new Instr(Form.S3, p));
    62                 p = new Path2D.Double(); p.moveTo(0,-1); p.lineTo(0,-30); p.lineTo(29,-30); p.lineTo(29,-1); p.closePath();
    63                 colours.add(new Instr(Form.S4, p));
    64                 TopBoard.add(new Instr(Form.COLR, colours));
    65                 TopBoard.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    66                 TopBoard.add(new Instr(Form.FILL, Color.black));
    67                 p = new Path2D.Double(); p.moveTo(-29,-1); p.lineTo(-29,-59); p.lineTo(29,-59); p.lineTo(29.0,-1); p.closePath();
    68                 TopBoard.add(new Instr(Form.PLIN, p));
    69         }
    70         public static final Symbol TopCan = new Symbol();
    71         static {
    72                 TopCan.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    73                 Symbol colours = new Symbol();
    74                 Path2D.Double p = new Path2D.Double(); p.moveTo(-12.0,-15.0); p.lineTo(-12.0,-48.0); p.lineTo(12.0,-48.0); p.lineTo(12.0,-15.0); p.closePath();
    75                 colours.add(new Instr(Form.P1, p));
    76                 TopCan.add(new Instr(Form.COLR, colours));
    77                 TopCan.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    78                 TopCan.add(new Instr(Form.FILL, Color.black));
    79                 TopCan.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
    80                 p = new Path2D.Double(); p.moveTo(-12.0,-15.0); p.lineTo(-12.0,-48.0); p.lineTo(12.0,-48.0); p.lineTo(12.0,-15.0); p.closePath();
    81                 TopCan.add(new Instr(Form.PLIN, p));
    82         }
    83         public static final Symbol TopCanSphere = new Symbol();
    84         public static final Symbol TopCircle = new Symbol();
    85         public static final Symbol TopCircleTriangle = new Symbol();
    86         public static final Symbol TopCone = new Symbol();
    87         static {
    88                 TopCone.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    89                 Symbol colours = new Symbol();
    90                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,-15.0); p.lineTo(0.0,-45.0); p.lineTo(15.0,-15.0); p.closePath();
    91                 colours.add(new Instr(Form.P1, p));
    92                 TopCone.add(new Instr(Form.COLR, colours));
    93                 TopCone.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    94                 TopCone.add(new Instr(Form.FILL, Color.black));
    95                 TopCone.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
    96                 p = new Path2D.Double(); p.moveTo(-15.0,-15.0); p.lineTo(0.0,-45.0); p.lineTo(15.0,-15.0); p.closePath();
    97                 TopCone.add(new Instr(Form.PLIN, p));
    98         }
    99         public static final Symbol TopConeSphere = new Symbol();
    100         static {
    101                 TopConeSphere.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    102                 Symbol colours = new Symbol();
    103                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,-47.0); p.lineTo(0.0,-77.0); p.lineTo(15.0,-47.0); p.closePath();
    104                 p.moveTo(-14.0,-28.0); p.curveTo(-14.0,-46.7,14.0,-46.7,14.0,-28.0); p.curveTo(14.0,-9.3,-14.0,-9.3,-14.0,-28.0); p.closePath();
    105                 colours.add(new Instr(Form.P1, p));
    106                 TopConeSphere.add(new Instr(Form.COLR, colours));
    107                 TopConeSphere.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    108                 TopConeSphere.add(new Instr(Form.FILL, Color.black));
    109                 TopConeSphere.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
    110                 TopConeSphere.add(new Instr(Form.LINE, new Line2D.Double(0,-42,0,-47)));
    111                 p = new Path2D.Double(); p.moveTo(-15.0,-47.0); p.lineTo(0.0,-77.0); p.lineTo(15.0,-47.0); p.closePath();
    112                 TopConeSphere.add(new Instr(Form.ELPS, new Ellipse2D.Double(-14,-42,28,28)));
    113                 TopConeSphere.add(new Instr(Form.PLIN, p));
    114         }
    115         public static final Symbol TopCross = new Symbol();
    116         static {
    117                 TopCross.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
    118                 Symbol colours = new Symbol();
    119                 Path2D.Double p = new Path2D.Double(); p.moveTo(-5.0,-15.0); p.lineTo(-5.0,-32.5); p.lineTo(-22.5,-32.5);       p.lineTo(-22.5,-42.5); p.lineTo(-5.0,-42.5);
    120                 p.lineTo(-5.0,-60.0); p.lineTo(5.0,-60.0); p.lineTo(5.0,-42.5); p.lineTo(22.5,-42.5);   p.lineTo(22.5,-32.5); p.lineTo(5.0,-32.5); p.lineTo(5.0,-15.0); p.closePath();
    121                 colours.add(new Instr(Form.P1, p));
    122                 TopCross.add(new Instr(Form.COLR, colours));
    123                 TopCross.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    124                 TopCross.add(new Instr(Form.FILL, Color.black));
    125                 TopCross.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
    126                 TopCross.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    127                 p = new Path2D.Double(); p.moveTo(-5.0,-15.0); p.lineTo(-5.0,-32.5); p.lineTo(-22.5,-32.5); p.lineTo(-22.5,-42.5); p.lineTo(-5.0,-42.5); p.lineTo(-5.0,-60.0);
    128                 p.lineTo(5.0,-60.0); p.lineTo(5.0,-42.5); p.lineTo(22.5,-42.5); p.lineTo(22.5,-32.5); p.lineTo(5.0,-32.5); p.lineTo(5.0,-15.0); p.closePath();
    129                 TopCross.add(new Instr(Form.PLIN, p));
    130         }
    131         public static final Symbol TopCrosses = new Symbol();
    132         static {
    133                
    134         }
    135         public static final Symbol TopCrossCircle = new Symbol();
    136         static {
    137                
    138         }
    139         public static final Symbol TopCube = new Symbol();
    140         static {
    141                 TopCube.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    142                 Symbol colours = new Symbol();
    143                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,-48); p.lineTo(-15,-37); p.lineTo(-15,-20); p.lineTo(0,-9); p.lineTo(15,-20); p.lineTo(15,-37); p.closePath();
    144                 colours.add(new Instr(Form.P1, p));
    145                 TopCube.add(new Instr(Form.COLR, colours));
    146                 TopCube.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    147                 TopCube.add(new Instr(Form.FILL, Color.black));
    148                 TopCube.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
    149                 p = new Path2D.Double(); p.moveTo(0,-48); p.lineTo(-14,-37); p.lineTo(0,-26); p.lineTo(14,-37); p.closePath(); p.moveTo(0,-26); p.lineTo(0,0);
    150                 p.moveTo(-15,-37); p.lineTo(-15,-20); p.lineTo(0,-9); p.lineTo(15,-20); p.lineTo(15,-37);
    151                 TopCube.add(new Instr(Form.PLIN, p));
    152         }
    153         public static final Symbol TopEast = new Symbol();
    154         static {
    155                 TopEast.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
    156                 Symbol colours = new Symbol();
    157                 Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-80.0); p.lineTo(-15.0,-47.0); p.lineTo(15.0,-47.0); p.closePath();
    158                 colours.add(new Instr(Form.P1, p));
    159                 p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(-15.0,-43.0); p.lineTo(15.0,-43.0); p.closePath();
    160                 colours.add(new Instr(Form.P2, p));
    161                 TopEast.add(new Instr(Form.COLR, colours));
    162                 TopEast.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    163                 TopEast.add(new Instr(Form.FILL, Color.black));
    164                 TopEast.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-10)));
    165                 TopEast.add(new Instr(Form.LINE, new Line2D.Double(0,-43,0,-47)));
    166                 TopEast.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    167                 p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(-15.0,-43.0); p.lineTo(15.0,-43.0); p.closePath();
    168                 p.moveTo(0.0,-80.0); p.lineTo(-15.0,-47.0);  p.lineTo(15.0,-47.0); p.closePath();
    169                 TopEast.add(new Instr(Form.PLIN, p));
    170         }
    171         public static final Symbol TopFlag = new Symbol();
    172         static {
    173                 TopFlag.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    174                 Symbol colours = new Symbol();
    175                 Path2D.Double p = new Path2D.Double(); p.moveTo(0,-40); p.lineTo(0,-10); p.lineTo(39,-10); p.lineTo(39,-40); p.closePath();
    176                 colours.add(new Instr(Form.P1, p));
    177                 p = new Path2D.Double(); p.moveTo(0,-25); p.lineTo(0,-10); p.lineTo(40,-10); p.lineTo(39,-25); p.closePath();
    178                 colours.add(new Instr(Form.H2, p));
    179                 p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(0,-20); p.lineTo(40,-20); p.lineTo(39,-30); p.closePath();
    180                 colours.add(new Instr(Form.H3, p));
    181                 p = new Path2D.Double(); p.moveTo(19.5,-40); p.lineTo(19.5,-10); p.lineTo(39,-10); p.lineTo(39,-40); p.closePath();
    182                 colours.add(new Instr(Form.V2, p));
    183                 p = new Path2D.Double(); p.moveTo(13,-40); p.lineTo(13,-10); p.lineTo(26,-10); p.lineTo(26,-40); p.closePath();
    184                 colours.add(new Instr(Form.V3, p));
    185                 p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    186                 p.moveTo(0,-40); p.lineTo(0,-10); p.lineTo(39,-10); p.lineTo(39,-40); p.closePath();
    187                 p.moveTo(8,-35); p.lineTo(8,-15); p.lineTo(33,-15); p.lineTo(33,-35); p.closePath();
    188                 colours.add(new Instr(Form.B1, p));
    189                 p = new Path2D.Double(); p.moveTo(0,-25); p.lineTo(0,-10); p.lineTo(20,-10); p.lineTo(20,-40); p.lineTo(39,-40); p.lineTo(39,-25); p.closePath();
    190                 colours.add(new Instr(Form.S2, p));
    191                 p = new Path2D.Double(); p.moveTo(0,-25); p.lineTo(0,-10); p.lineTo(20,-10); p.lineTo(20,-25); p.closePath();
    192                 colours.add(new Instr(Form.S3, p));
    193                 p = new Path2D.Double(); p.moveTo(20,-25); p.lineTo(20,-10); p.lineTo(39,-10); p.lineTo(39,-25); p.closePath();
    194                 colours.add(new Instr(Form.S4, p));
    195                 TopFlag.add(new Instr(Form.COLR, colours));
    196                 TopFlag.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    197                 TopFlag.add(new Instr(Form.FILL, Color.black));
    198                 TopFlag.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-45)));
    199                 TopFlag.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    200                 TopFlag.add(new Instr(Form.RECT, new Rectangle2D.Double(0,-40,39,30)));
    201         }
    202         public static final Symbol TopIcone = new Symbol();
    203         static {
    204                 TopIcone.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    205                 Symbol colours = new Symbol();
    206                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,-45.0); p.lineTo(0.0,-15.0); p.lineTo(15.0,-45.0); p.closePath();
    207                 colours.add(new Instr(Form.P1, p));
    208                 TopIcone.add(new Instr(Form.COLR, colours));
    209                 TopIcone.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    210                 TopIcone.add(new Instr(Form.FILL, Color.black));
    211                 TopIcone.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
    212                 p = new Path2D.Double(); p.moveTo(-15.0,-45.0); p.lineTo(0.0,-15.0); p.lineTo(15.0,-45.0); p.closePath();
    213                 TopIcone.add(new Instr(Form.PLIN, p));
    214         }
    215         public static final Symbol TopIsol = new Symbol();
    216         static {
    217                 TopIsol.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
    218                 Symbol colours = new Symbol();
    219                 Path2D.Double p = new Path2D.Double(); p.moveTo(-13.0,-55.0); p.curveTo(-13.0, -72.3, 13.0, -72.3, 13.0,-55.0); p.curveTo(13.0, -37.7, -13.0, -37.7, -13.0,-55.0); p.closePath();
    220                 colours.add(new Instr(Form.P1, p));
    221                 p = new Path2D.Double(); p.moveTo(-13.0,-28.0); p.curveTo(-13.0, -45.3, 13.0, -45.3, 13.0,-28.0); p.curveTo(13.0, -10.7, -13.0, -10.7, -13.0,-28.0); p.closePath();
    222                 colours.add(new Instr(Form.P2, p));
    223                 TopIsol.add(new Instr(Form.COLR, colours));
    224                 TopIsol.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    225                 TopIsol.add(new Instr(Form.FILL, Color.black));
    226                 TopIsol.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
    227                 TopIsol.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    228                 TopIsol.add(new Instr(Form.ELPS, new Ellipse2D.Double(-13,-41,26,26)));
    229                 TopIsol.add(new Instr(Form.ELPS, new Ellipse2D.Double(-13,-68,26,26)));
    230         }
    231         public static final Symbol TopMooring = new Symbol();
    232         static {
    233                 TopMooring.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
    234                 TopMooring.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    235                 TopMooring.add(new Instr(Form.FILL, Color.black));
    236                 TopMooring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-1.5,-6,3,3)));
    237                 TopMooring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-8.5,-25,17,17)));
    238         }
    239         public static final Symbol TopNorth = new Symbol();
    240         static {
    241                 TopNorth.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
    242                 Symbol colours = new Symbol();
    243                 Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-78.0); p.lineTo(-15.0,-45.0); p.lineTo(15.0,-45.0); p.closePath();
    244                 colours.add(new Instr(Form.P1, p));
    245                 p = new Path2D.Double(); p.moveTo(-15.0,-10.0); p.lineTo(0.0,-43.0); p.lineTo(15.0,-10.0); p.closePath();
    246                 colours.add(new Instr(Form.P2, p));
    247                 TopNorth.add(new Instr(Form.COLR, colours));
    248                 TopNorth.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    249                 TopNorth.add(new Instr(Form.FILL, Color.black));
    250                 TopNorth.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-10)));
    251                 TopNorth.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    252                 p = new Path2D.Double(); p.moveTo(-15.0,-10.0); p.lineTo(0.0,-43.0); p.lineTo(15.0,-10.0); p.closePath();
    253                 p.moveTo(0.0,-78.0); p.lineTo(-15.0,-45.0);  p.lineTo(15.0,-45.0); p.closePath();
    254                 TopNorth.add(new Instr(Form.PLIN, p));
    255         }
    256         public static final Symbol TopSouth = new Symbol();
    257         static {
    258                 TopSouth.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
    259                 Symbol colours = new Symbol();
    260                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,-78.0); p.lineTo(0.0,-45.0);  p.lineTo(15.0,-78.0); p.closePath();
    261                 colours.add(new Instr(Form.P1, p));
    262                 p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(-15.0,-43.0); p.lineTo(15.0,-43.0); p.closePath();
    263                 colours.add(new Instr(Form.P2, p));
    264                 TopSouth.add(new Instr(Form.COLR, colours));
    265                 TopSouth.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    266                 TopSouth.add(new Instr(Form.FILL, Color.black));
    267                 TopSouth.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-10)));
    268                 TopSouth.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    269                 p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(-15.0,-43.0); p.lineTo(15.0,-43.0); p.closePath();
    270                 p.moveTo(-15.0,-78.0); p.lineTo(0.0,-45.0);  p.lineTo(15.0,-78.0); p.closePath();
    271                 TopSouth.add(new Instr(Form.PLIN, p));
    272         }
    273         public static final Symbol TopSphere = new Symbol();
    274         static {
    275                 TopSphere.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
    276                 Symbol colours = new Symbol();
    277                 Path2D.Double p = new Path2D.Double(); p.moveTo(-14.0,-28.0); p.curveTo(-14.0,-46.7,14.0,-46.7,14.0,-28.0); p.curveTo(14.0,-9.3,-14.0,-9.3,-14.0,-28.0); p.closePath();
    278                 colours.add(new Instr(Form.P1, p));
    279                 TopSphere.add(new Instr(Form.COLR, colours));
    280                 TopSphere.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    281                 TopSphere.add(new Instr(Form.FILL, Color.black));
    282                 TopSphere.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
    283                 TopSphere.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    284                 TopSphere.add(new Instr(Form.ELPS, new Ellipse2D.Double(-14,-42,28,28)));
    285         }
    286         public static final Symbol TopSquare = new Symbol();
    287         static {
    288                 TopSquare.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    289                 Symbol colours = new Symbol();
    290                 Path2D.Double p = new Path2D.Double(); p.moveTo(-13.0,-1.0); p.lineTo(-13.0,-27.0); p.lineTo(13.0,-27.0); p.lineTo(13.0,-1.0); p.closePath();
    291                 colours.add(new Instr(Form.P1, p));
    292                 p = new Path2D.Double(); p.moveTo(-13.0,-15.0); p.lineTo(-13.0,-1.0); p.lineTo(13.0,-1.0); p.lineTo(13.0,-15.0); p.closePath();
    293                 colours.add(new Instr(Form.H2, p));
    294                 p = new Path2D.Double(); p.moveTo(-13.0,-19.3); p.lineTo(-13.0,-10.7); p.lineTo(13.0,-10.7); p.lineTo(13.0,-19.3); p.closePath();
    295                 colours.add(new Instr(Form.H3, p));
    296                 p = new Path2D.Double(); p.moveTo(0.0,-1.0); p.lineTo(0.0,-27.0); p.lineTo(13.0,-27.0); p.lineTo(13.0,-1.0); p.closePath();
    297                 colours.add(new Instr(Form.V2, p));
    298                 p = new Path2D.Double(); p.moveTo(-4.3,-1.0); p.lineTo(-4.3,-27.0); p.lineTo(4.3,-27.0); p.lineTo(4.3,-1.0); p.closePath();
    299                 colours.add(new Instr(Form.V3, p));
    300                 p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    301                 p.moveTo(-13.0,-1.0); p.lineTo(-13.0,-27.0); p.lineTo(13.0,-27.0); p.lineTo(13.0,-1.0); p.closePath();
    302                 p.moveTo(-8.0,-6.0); p.lineTo(-8.0,-22.0); p.lineTo(8.0,-22.0); p.lineTo(8.0,-6.0); p.closePath();
    303                 colours.add(new Instr(Form.B1, p));
    304                 TopSquare.add(new Instr(Form.COLR, colours));
    305                 TopSquare.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    306                 TopSquare.add(new Instr(Form.FILL, Color.black));
    307                 p = new Path2D.Double(); p.moveTo(-13.0,-1.0); p.lineTo(-13.0,-27.0); p.lineTo(13.0,-27.0); p.lineTo(13.0,-1.0); p.closePath();
    308                 TopSquare.add(new Instr(Form.PLIN, p));
    309         }
    310         public static final Symbol TopRectangleH = new Symbol();
    311         static {
    312                 TopRectangleH.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    313                 Symbol colours = new Symbol();
    314                 Path2D.Double p = new Path2D.Double(); p.moveTo(-20.0,-1.0); p.lineTo(-20.0,-27.0); p.lineTo(20.0,-27.0); p.lineTo(20.0,-1.0); p.closePath();
    315                 colours.add(new Instr(Form.P1, p));
    316                 TopRectangleH.add(new Instr(Form.COLR, colours));
    317                 TopRectangleH.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    318                 TopRectangleH.add(new Instr(Form.FILL, Color.black));
    319                 p = new Path2D.Double(); p.moveTo(-20.0,-1.0); p.lineTo(-20.0,-27.0); p.lineTo(20.0,-27.0); p.lineTo(20.0,-1.0); p.closePath();
    320                 TopRectangleH.add(new Instr(Form.PLIN, p));
    321         }
    322         public static final Symbol TopRectangleV = new Symbol();
    323         static {
    324                 TopRectangleV.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    325                 Symbol colours = new Symbol();
    326                 Path2D.Double p = new Path2D.Double(); p.moveTo(-13.0,-1.0); p.lineTo(-13.0,-41.0); p.lineTo(13.0,-41.0); p.lineTo(13.0,-1.0); p.closePath();
    327                 colours.add(new Instr(Form.P1, p));
    328                 TopRectangleV.add(new Instr(Form.COLR, colours));
    329                 TopRectangleV.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    330                 TopRectangleV.add(new Instr(Form.FILL, Color.black));
    331                 p = new Path2D.Double(); p.moveTo(-13.0,-1.0); p.lineTo(-13.0,-41.0); p.lineTo(13.0,-41.0); p.lineTo(13.0,-1.0); p.closePath();
    332                 TopRectangleV.add(new Instr(Form.PLIN, p));
    333         }
    334         public static final Symbol TopRhombus = new Symbol();
    335         static {
    336                 TopRhombus.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    337                 Symbol colours = new Symbol();
    338                 Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-29.0); p.lineTo(-15.0,-15.0); p.lineTo(0.0,-1.0); p.lineTo(15.0,-15.0); p.closePath();
    339                 colours.add(new Instr(Form.P1, p));
    340                 p = new Path2D.Double(); p.moveTo(-15.0,-15.0); p.lineTo(0.0,-1.0); p.lineTo(15.0,-15.0); p.closePath();
    341                 colours.add(new Instr(Form.H2, p));
    342                 p = new Path2D.Double(); p.moveTo(-10.0,-19.7); p.lineTo(-15.0,-15.0); p.lineTo(-10.0,-10.3); p.lineTo(10.0,-10.3); p.lineTo(15.0,-15.0); p.lineTo(10.0,-19.7); p.closePath();
    343                 colours.add(new Instr(Form.H3, p));
    344                 p = new Path2D.Double();  p.moveTo(0.0,-29.0); p.lineTo(0.0,-1.0); p.lineTo(15.0,-15.0); p.closePath();
    345                 colours.add(new Instr(Form.V2, p));
    346                 p = new Path2D.Double(); p.moveTo(0.0,-29.0); p.lineTo(-5.0,-24.3); p.lineTo(-5.0,-5.7); p.lineTo(0.0,-1.0); p.lineTo(5.0,-5.7); p.lineTo(5.0,-24.3); p.closePath();
    347                 colours.add(new Instr(Form.V3, p));
    348                 p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    349                 p.moveTo(0.0,-29.0); p.lineTo(-15.0,-15.0); p.lineTo(0.0,-1.0); p.lineTo(15.0,-15.0); p.closePath();
    350                 p.moveTo(0.0,-23.0); p.lineTo(-9.0,-15.0); p.lineTo(0.0,-7.0); p.lineTo(9.0,-15.0); p.closePath();
    351                 colours.add(new Instr(Form.B1, p));
    352                 TopRhombus.add(new Instr(Form.COLR, colours));
    353                 TopRhombus.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    354                 TopRhombus.add(new Instr(Form.FILL, Color.black));
    355                 p = new Path2D.Double(); p.moveTo(0.0,-29.0); p.lineTo(-15.0,-15.0); p.lineTo(0.0,-1.0); p.lineTo(15.0,-15.0); p.closePath();
    356                 TopRhombus.add(new Instr(Form.PLIN, p));
    357         }
    358         public static final Symbol TopRhombusCircle = new Symbol();
    359         static {
    360                
    361         }
    362         public static final Symbol TopSphereRhombus = new Symbol();
    363         static {
    364                 TopSphereRhombus.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
    365                 TopSphereRhombus.add(new Instr(Form.SYMB, new Symbols.SubSymbol(TopRhombus, 1.0, 0, 0, null, null)));
    366                 Symbol colours = new Symbol();
    367                 Path2D.Double p = new Path2D.Double(); p.moveTo(-14.0,-44.0); p.curveTo(-14.0,-62.7,14.0,-62.7,14.0,-44.0); p.curveTo(14.0,-25.3,-14.0,-25.3,-14.0,-44.0); p.closePath();
    368                 colours.add(new Instr(Form.P1, p));
    369                 TopSphereRhombus.add(new Instr(Form.COLR, colours));
    370                 TopSphereRhombus.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    371                 TopSphereRhombus.add(new Instr(Form.FILL, Color.black));
    372                 TopSphereRhombus.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    373                 TopSphereRhombus.add(new Instr(Form.ELPS, new Ellipse2D.Double(-14,-58,28,28)));
    374         }
    375         public static final Symbol TopT = new Symbol();
    376         static {
    377                
    378         }
    379         public static final Symbol TopTrapeziumU = new Symbol();
    380         static {
    381                 TopTrapeziumU.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    382                 Symbol colours = new Symbol();
    383                 Path2D.Double p = new Path2D.Double(); p.moveTo(-20.0,-1.0); p.lineTo(-13.0,-27.0); p.lineTo(13.0,-27.0); p.lineTo(20.0,-1.0); p.closePath();
    384                 colours.add(new Instr(Form.P1, p));
    385                 TopTrapeziumU.add(new Instr(Form.COLR, colours));
    386                 TopTrapeziumU.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    387                 TopTrapeziumU.add(new Instr(Form.FILL, Color.black));
    388                 p = new Path2D.Double(); p.moveTo(-20.0,-1.0); p.lineTo(-13.0,-27.0); p.lineTo(13.0,-27.0); p.lineTo(20.0,-1.0); p.closePath();
    389                 TopTrapeziumU.add(new Instr(Form.PLIN, p));
    390         }
    391         public static final Symbol TopTrapeziumD = new Symbol();
    392         static {
    393                 TopTrapeziumD.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    394                 Symbol colours = new Symbol();
    395                 Path2D.Double p = new Path2D.Double(); p.moveTo(-13.0,-1.0); p.lineTo(-20.0,-27.0); p.lineTo(20.0,-27.0); p.lineTo(13.0,-1.0); p.closePath();
    396                 colours.add(new Instr(Form.P1, p));
    397                 TopTrapeziumD.add(new Instr(Form.COLR, colours));
    398                 TopTrapeziumD.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    399                 TopTrapeziumD.add(new Instr(Form.FILL, Color.black));
    400                 p = new Path2D.Double(); p.moveTo(-13.0,-1.0); p.lineTo(-20.0,-27.0); p.lineTo(20.0,-27.0); p.lineTo(13.0,-1.0); p.closePath();
    401                 TopTrapeziumD.add(new Instr(Form.PLIN, p));
    402         }
    403         public static final Symbol TopTriangle = new Symbol();
    404         static {
    405                 TopTriangle.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    406                 Symbol colours = new Symbol();
    407                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,-1.0); p.lineTo(0.0,-29.0); p.lineTo(15.0,-1.0); p.closePath();
    408                 colours.add(new Instr(Form.P1, p));
    409                 p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    410                 p.moveTo(-15.0,-1.0); p.lineTo(0.0,-29.0); p.lineTo(15.0,-1.0); p.closePath();
    411                 p.moveTo(-10.0,-6.0); p.lineTo(0.0,-24.0); p.lineTo(10.0,-6.0); p.closePath();
    412                 colours.add(new Instr(Form.B1, p));
    413                 TopTriangle.add(new Instr(Form.COLR, colours));
    414                 TopTriangle.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    415                 TopTriangle.add(new Instr(Form.FILL, Color.black));
    416                 p = new Path2D.Double(); p.moveTo(-15.0,-1.0); p.lineTo(0.0,-29.0); p.lineTo(15.0,-1.0); p.closePath();
    417                 TopTriangle.add(new Instr(Form.PLIN, p));
    418         }
    419         public static final Symbol TopItriangle = new Symbol();
    420         static {
    421                 TopItriangle.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
    422                 Symbol colours = new Symbol();
    423                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,-29.0); p.lineTo(0.0,-1.0); p.lineTo(15.0,-29.0); p.closePath();
    424                 colours.add(new Instr(Form.P1, p));
    425                 p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    426                 p.moveTo(-15.0,-29.0); p.lineTo(0.0,-1.0); p.lineTo(15.0,-29.0); p.closePath();
    427                 p.moveTo(-10.0,-24.0); p.lineTo(0.0,-6.0); p.lineTo(10.0,-24.0); p.closePath();
    428                 colours.add(new Instr(Form.B1, p));
    429                 TopItriangle.add(new Instr(Form.COLR, colours));
    430                 TopItriangle.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    431                 TopItriangle.add(new Instr(Form.FILL, Color.black));
    432                 p = new Path2D.Double(); p.moveTo(-15.0,-29.0); p.lineTo(0.0,-1.0); p.lineTo(15.0,-29.0); p.closePath();
    433                 TopItriangle.add(new Instr(Form.PLIN, p));
    434         }
    435         public static final Symbol TopTriangleCircle = new Symbol();
    436         static {
    437                
    438         }
    439         public static final Symbol TopWest = new Symbol();
    440         static {
    441                 TopWest.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
    442                 Symbol colours = new Symbol();
    443                 Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,-78.0); p.lineTo(0.0,-45.0);  p.lineTo(15.0,-78.0); p.closePath();
    444                 colours.add(new Instr(Form.P1, p));
    445                 p = new Path2D.Double(); p.moveTo(-15.0,-10.0); p.lineTo(0.0,-43.0); p.lineTo(15.0,-10.0); p.closePath();
    446                 colours.add(new Instr(Form.P2, p));
    447                 TopWest.add(new Instr(Form.COLR, colours));
    448                 TopWest.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    449                 TopWest.add(new Instr(Form.FILL, Color.black));
    450                 TopWest.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-10)));
    451                 TopWest.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    452                 p = new Path2D.Double(); p.moveTo(-15.0,-10.0); p.lineTo(0.0,-43.0); p.lineTo(15.0,-10.0); p.closePath();
    453                 p.moveTo(-15.0,-78.0); p.lineTo(0.0,-45.0);  p.lineTo(15.0,-78.0); p.closePath();
    454                 TopWest.add(new Instr(Form.PLIN, p));
    455         }
    456         public static final Symbol TopX = new Symbol();
    457         static {
    458                 TopX.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
    459                 Symbol colours = new Symbol();
    460                 Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-27.7); p.lineTo(-12.4,-15.7); p.lineTo(-19.3,-22.6); p.lineTo(-7.3,-35.0); p.lineTo(-19.3,-47.3);
    461                 p.lineTo(-12.4,-54.2); p.lineTo(0.0,-42.4); p.lineTo(12.4,-54.2); p.lineTo(19.3,-47.3); p.lineTo(7.3,-35.0); p.lineTo(19.3,-22.6); p.lineTo(12.4,-15.7); p.closePath();
    462                 colours.add(new Instr(Form.P1, p));
    463                 TopX.add(new Instr(Form.COLR, colours));
    464                 TopX.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    465                 TopX.add(new Instr(Form.FILL, Color.black));
    466                 TopX.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-27)));
    467                 TopX.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
    468                 p = new Path2D.Double(); p.moveTo(0.0,-27.7); p.lineTo(-12.4,-15.7); p.lineTo(-19.3,-22.6); p.lineTo(-7.3,-35.0); p.lineTo(-19.3,-47.3); p.lineTo(-12.4,-54.2); p.lineTo(0.0,-42.4);
    469                 p.lineTo(12.4,-54.2); p.lineTo(19.3,-47.3); p.lineTo(7.3,-35.0); p.lineTo(19.3,-22.6); p.lineTo(12.4,-15.7); p.closePath();
    470                 TopX.add(new Instr(Form.PLIN, p));
    471         }
    472         public static final Symbol TopOther = new Symbol();
    473         static {
    474                
    475         }
    476        
    477         public static final EnumMap<TopSHP, Symbol> Shapes = new EnumMap<>(TopSHP.class);
    478         static {
    479                 Shapes.put(TopSHP.TOP_BESM, TopBesom); Shapes.put(TopSHP.TOP_IBESM, TopIBesom); Shapes.put(TopSHP.TOP_BORD, TopBoard); Shapes.put(TopSHP.TOP_CAN, TopCan);
    480                 Shapes.put(TopSHP.TOP_CONE, TopCone); Shapes.put(TopSHP.TOP_CROS, TopCross); Shapes.put(TopSHP.TOP_EAST, TopEast); Shapes.put(TopSHP.TOP_ICONE, TopIcone);
    481                 Shapes.put(TopSHP.TOP_ISD, TopIsol); Shapes.put(TopSHP.TOP_NORTH, TopNorth); Shapes.put(TopSHP.TOP_SOUTH, TopSouth); Shapes.put(TopSHP.TOP_SPHR, TopSphere);
    482                 Shapes.put(TopSHP.TOP_SQUR, TopSquare); Shapes.put(TopSHP.TOP_TRI, TopTriangle); Shapes.put(TopSHP.TOP_ITRI, TopItriangle); Shapes.put(TopSHP.TOP_WEST, TopWest);
    483                 Shapes.put(TopSHP.TOP_SALT, TopX); Shapes.put(TopSHP.TOP_RHOM, TopRhombus); Shapes.put(TopSHP.TOP_FLAG, TopFlag); Shapes.put(TopSHP.TOP_CUBE, TopCube);
    484                 Shapes.put(TopSHP.TOP_SPRH, TopSphereRhombus); Shapes.put(TopSHP.TOP_HRECT, TopRectangleH); Shapes.put(TopSHP.TOP_VRECT, TopRectangleV);
    485                 Shapes.put(TopSHP.TOP_TRAP, TopTrapeziumU); Shapes.put(TopSHP.TOP_ITRAP, TopTrapeziumD); Shapes.put(TopSHP.TOP_COSP, TopConeSphere);
    486                 Shapes.put(TopSHP.TOP_CIRC, TopCircle); Shapes.put(TopSHP.TOP_CRSS, TopCrosses); Shapes.put(TopSHP.TOP_T, TopT); Shapes.put(TopSHP.TOP_TRCL, TopTriangleCircle);
    487                 Shapes.put(TopSHP.TOP_CRCL, TopCrossCircle); Shapes.put(TopSHP.TOP_RHCL, TopRhombusCircle); Shapes.put(TopSHP.TOP_CLTR, TopCircleTriangle);
    488                 Shapes.put(TopSHP.TOP_CYSP, TopCanSphere); Shapes.put(TopSHP.TOP_OTHR, TopOther);
    489         }
    490 
    491         public static final EnumMap<BoySHP, Delta> BuoyDeltas = new EnumMap<>(BoySHP.class);
    492         static {
    493                 BuoyDeltas.put(BoySHP.BOY_PILR, new Delta(Handle.BC, new AffineTransform(0.948324, 0.317305, -0.3173047, 0.948324, 31.5, -95.0)));
    494                 BuoyDeltas.put(BoySHP.BOY_SPAR, new Delta(Handle.BC, new AffineTransform(0.948324, 0.317305, -0.3173047, 0.948324, 31.5, -95.0)));
    495                 BuoyDeltas.put(BoySHP.BOY_CAN, new Delta(Handle.BC,  new AffineTransform(0.948324, 0.317305, -0.3173047, 0.948324, 12.7, -37.9)));
    496                 BuoyDeltas.put(BoySHP.BOY_CONE, new Delta(Handle.BC, new AffineTransform(0.948324, 0.317305, -0.3173047, 0.948324, 12.7, -37.9)));
    497                 BuoyDeltas.put(BoySHP.BOY_SPHR, new Delta(Handle.BC, new AffineTransform(0.948324, 0.317305, -0.3173047, 0.948324, 12.7, -37.9)));
    498                 BuoyDeltas.put(BoySHP.BOY_BARL, new Delta(Handle.BC, new AffineTransform(0.948324, 0.317305, -0.3173047, 0.948324, 12.7, -37.9)));
    499                 BuoyDeltas.put(BoySHP.BOY_SUPR, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -42.0)));
    500                 BuoyDeltas.put(BoySHP.BOY_ICE, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -25.0)));
    501         }
    502         public static final Delta FloatDelta = new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -42.0));
    503         public static final Delta BeaconDelta = new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -70.0));
    504         public static final Delta LightDelta = new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -20.0));
    505 
     31    // CHECKSTYLE.OFF: LineLength
     32    public static final Symbol RadarReflector = new Symbol();
     33    static {
     34        RadarReflector.add(new Instr(Form.BBOX, new Rectangle2D.Double(-50, -40, 100, 40)));
     35        RadarReflector.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     36        RadarReflector.add(new Instr(Form.FILL, Color.black));
     37        Path2D.Double p = new Path2D.Double(); p.moveTo(-30, -3); p.quadTo(0, -40, 30, -3); p.moveTo(0, -20); p.lineTo(0, -37);
     38        p.moveTo(-30, -3); p.lineTo(-43, -14); p.moveTo(30, -3); p.lineTo(44, -14); p.moveTo(-15, -14); p.lineTo(-25, -30); p.moveTo(15, -14); p.lineTo(25, -30);
     39        RadarReflector.add(new Instr(Form.PLIN, p));
     40    }
     41
     42    public static final Symbol TopBesom = new Symbol();
     43    static {
     44        TopBesom.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     45        TopBesom.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     46        TopBesom.add(new Instr(Form.FILL, Color.black));
     47        Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0, 0.0); p.lineTo(0.0, -30.0); p.lineTo(15.0, 0.0); p.moveTo(0.0, 0.0); p.lineTo(0.0, -28.0);
     48        TopBesom.add(new Instr(Form.PLIN, p));
     49    }
     50
     51    public static final Symbol TopIBesom = new Symbol();
     52    static {
     53        TopIBesom.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     54        TopIBesom.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     55        TopIBesom.add(new Instr(Form.FILL, Color.black));
     56        Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0, -30.0); p.lineTo(0.0, 0.0); p.lineTo(15.0, -30.0);
     57        TopIBesom.add(new Instr(Form.PLIN, p));
     58    }
     59
     60    public static final Symbol TopBoard = new Symbol();
     61    static {
     62        TopBoard.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -60, 60, 60)));
     63        Symbol colours = new Symbol();
     64        Path2D.Double p = new Path2D.Double(); p.moveTo(-29, -1); p.lineTo(-29, -59); p.lineTo(29, -59); p.lineTo(29, -1); p.closePath();
     65        colours.add(new Instr(Form.P1, p));
     66        p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     67        p.moveTo(-29, -1); p.lineTo(-29, -59); p.lineTo(29, -59); p.lineTo(29, -1); p.closePath();
     68        p.moveTo(-19, -10); p.lineTo(-19, -49); p.lineTo(19, -49); p.lineTo(19, -10); p.closePath();
     69        colours.add(new Instr(Form.B1, p));
     70        p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     71        p.moveTo(-29, -1); p.lineTo(-29, -30); p.lineTo(29, -30); p.lineTo(29, -59); p.lineTo(0, -59); p.lineTo(0, -1); p.closePath();
     72        colours.add(new Instr(Form.S2, p));
     73        p = new Path2D.Double(); p.moveTo(-29, -1); p.lineTo(-29, -30); p.lineTo(0, -30); p.lineTo(0, -1); p.closePath();
     74        colours.add(new Instr(Form.S3, p));
     75        p = new Path2D.Double(); p.moveTo(0, -1); p.lineTo(0, -30); p.lineTo(29, -30); p.lineTo(29, -1); p.closePath();
     76        colours.add(new Instr(Form.S4, p));
     77        TopBoard.add(new Instr(Form.COLR, colours));
     78        TopBoard.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     79        TopBoard.add(new Instr(Form.FILL, Color.black));
     80        p = new Path2D.Double(); p.moveTo(-29, -1); p.lineTo(-29, -59); p.lineTo(29, -59); p.lineTo(29.0, -1); p.closePath();
     81        TopBoard.add(new Instr(Form.PLIN, p));
     82    }
     83
     84    public static final Symbol TopCan = new Symbol();
     85    static {
     86        TopCan.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     87        Symbol colours = new Symbol();
     88        Path2D.Double p = new Path2D.Double(); p.moveTo(-12.0, -15.0); p.lineTo(-12.0, -48.0); p.lineTo(12.0, -48.0); p.lineTo(12.0, -15.0); p.closePath();
     89        colours.add(new Instr(Form.P1, p));
     90        TopCan.add(new Instr(Form.COLR, colours));
     91        TopCan.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     92        TopCan.add(new Instr(Form.FILL, Color.black));
     93        TopCan.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -15)));
     94        p = new Path2D.Double(); p.moveTo(-12.0, -15.0); p.lineTo(-12.0, -48.0); p.lineTo(12.0, -48.0); p.lineTo(12.0, -15.0); p.closePath();
     95        TopCan.add(new Instr(Form.PLIN, p));
     96    }
     97
     98    public static final Symbol TopCanSphere = new Symbol();
     99    public static final Symbol TopCircle = new Symbol();
     100    public static final Symbol TopCircleTriangle = new Symbol();
     101    public static final Symbol TopCone = new Symbol();
     102    static {
     103        TopCone.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     104        Symbol colours = new Symbol();
     105        Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0, -15.0); p.lineTo(0.0, -45.0); p.lineTo(15.0, -15.0); p.closePath();
     106        colours.add(new Instr(Form.P1, p));
     107        TopCone.add(new Instr(Form.COLR, colours));
     108        TopCone.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     109        TopCone.add(new Instr(Form.FILL, Color.black));
     110        TopCone.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -15)));
     111        p = new Path2D.Double(); p.moveTo(-15.0, -15.0); p.lineTo(0.0, -45.0); p.lineTo(15.0, -15.0); p.closePath();
     112        TopCone.add(new Instr(Form.PLIN, p));
     113    }
     114
     115    public static final Symbol TopConeSphere = new Symbol();
     116    static {
     117        TopConeSphere.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     118        Symbol colours = new Symbol();
     119        Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0, -47.0); p.lineTo(0.0, -77.0); p.lineTo(15.0, -47.0); p.closePath();
     120        p.moveTo(-14.0, -28.0); p.curveTo(-14.0, -46.7, 14.0, -46.7, 14.0, -28.0); p.curveTo(14.0, -9.3, -14.0, -9.3, -14.0, -28.0); p.closePath();
     121        colours.add(new Instr(Form.P1, p));
     122        TopConeSphere.add(new Instr(Form.COLR, colours));
     123        TopConeSphere.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     124        TopConeSphere.add(new Instr(Form.FILL, Color.black));
     125        TopConeSphere.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -15)));
     126        TopConeSphere.add(new Instr(Form.LINE, new Line2D.Double(0, -42, 0, -47)));
     127        p = new Path2D.Double(); p.moveTo(-15.0, -47.0); p.lineTo(0.0, -77.0); p.lineTo(15.0, -47.0); p.closePath();
     128        TopConeSphere.add(new Instr(Form.ELPS, new Ellipse2D.Double(-14, -42, 28, 28)));
     129        TopConeSphere.add(new Instr(Form.PLIN, p));
     130    }
     131
     132    public static final Symbol TopCross = new Symbol();
     133    static {
     134        TopCross.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -80, 60, 80)));
     135        Symbol colours = new Symbol();
     136        Path2D.Double p = new Path2D.Double(); p.moveTo(-5.0, -15.0); p.lineTo(-5.0, -32.5); p.lineTo(-22.5, -32.5); p.lineTo(-22.5, -42.5); p.lineTo(-5.0, -42.5);
     137        p.lineTo(-5.0, -60.0); p.lineTo(5.0, -60.0); p.lineTo(5.0, -42.5); p.lineTo(22.5, -42.5); p.lineTo(22.5, -32.5); p.lineTo(5.0, -32.5); p.lineTo(5.0, -15.0); p.closePath();
     138        colours.add(new Instr(Form.P1, p));
     139        TopCross.add(new Instr(Form.COLR, colours));
     140        TopCross.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     141        TopCross.add(new Instr(Form.FILL, Color.black));
     142        TopCross.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -15)));
     143        TopCross.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     144        p = new Path2D.Double(); p.moveTo(-5.0, -15.0); p.lineTo(-5.0, -32.5); p.lineTo(-22.5, -32.5); p.lineTo(-22.5, -42.5); p.lineTo(-5.0, -42.5); p.lineTo(-5.0, -60.0);
     145        p.lineTo(5.0, -60.0); p.lineTo(5.0, -42.5); p.lineTo(22.5, -42.5); p.lineTo(22.5, -32.5); p.lineTo(5.0, -32.5); p.lineTo(5.0, -15.0); p.closePath();
     146        TopCross.add(new Instr(Form.PLIN, p));
     147    }
     148
     149    public static final Symbol TopCrosses = new Symbol();
     150
     151    public static final Symbol TopCrossCircle = new Symbol();
     152
     153    public static final Symbol TopCube = new Symbol();
     154    static {
     155        TopCube.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     156        Symbol colours = new Symbol();
     157        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -48); p.lineTo(-15, -37); p.lineTo(-15, -20); p.lineTo(0, -9); p.lineTo(15, -20); p.lineTo(15, -37); p.closePath();
     158        colours.add(new Instr(Form.P1, p));
     159        TopCube.add(new Instr(Form.COLR, colours));
     160        TopCube.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     161        TopCube.add(new Instr(Form.FILL, Color.black));
     162        TopCube.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -15)));
     163        p = new Path2D.Double(); p.moveTo(0, -48); p.lineTo(-14, -37); p.lineTo(0, -26); p.lineTo(14, -37); p.closePath(); p.moveTo(0, -26); p.lineTo(0, 0);
     164        p.moveTo(-15, -37); p.lineTo(-15, -20); p.lineTo(0, -9); p.lineTo(15, -20); p.lineTo(15, -37);
     165        TopCube.add(new Instr(Form.PLIN, p));
     166    }
     167
     168    public static final Symbol TopEast = new Symbol();
     169    static {
     170        TopEast.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -80, 60, 80)));
     171        Symbol colours = new Symbol();
     172        Path2D.Double p = new Path2D.Double(); p.moveTo(0.0, -80.0); p.lineTo(-15.0, -47.0); p.lineTo(15.0, -47.0); p.closePath();
     173        colours.add(new Instr(Form.P1, p));
     174        p = new Path2D.Double(); p.moveTo(0.0, -10.0); p.lineTo(-15.0, -43.0); p.lineTo(15.0, -43.0); p.closePath();
     175        colours.add(new Instr(Form.P2, p));
     176        TopEast.add(new Instr(Form.COLR, colours));
     177        TopEast.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     178        TopEast.add(new Instr(Form.FILL, Color.black));
     179        TopEast.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -10)));
     180        TopEast.add(new Instr(Form.LINE, new Line2D.Double(0, -43, 0, -47)));
     181        TopEast.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     182        p = new Path2D.Double(); p.moveTo(0.0, -10.0); p.lineTo(-15.0, -43.0); p.lineTo(15.0, -43.0); p.closePath();
     183        p.moveTo(0.0, -80.0); p.lineTo(-15.0, -47.0); p.lineTo(15.0, -47.0); p.closePath();
     184        TopEast.add(new Instr(Form.PLIN, p));
     185    }
     186
     187    public static final Symbol TopFlag = new Symbol();
     188    static {
     189        TopFlag.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     190        Symbol colours = new Symbol();
     191        Path2D.Double p = new Path2D.Double(); p.moveTo(0, -40); p.lineTo(0, -10); p.lineTo(39, -10); p.lineTo(39, -40); p.closePath();
     192        colours.add(new Instr(Form.P1, p));
     193        p = new Path2D.Double(); p.moveTo(0, -25); p.lineTo(0, -10); p.lineTo(40, -10); p.lineTo(39, -25); p.closePath();
     194        colours.add(new Instr(Form.H2, p));
     195        p = new Path2D.Double(); p.moveTo(0, -30); p.lineTo(0, -20); p.lineTo(40, -20); p.lineTo(39, -30); p.closePath();
     196        colours.add(new Instr(Form.H3, p));
     197        p = new Path2D.Double(); p.moveTo(19.5, -40); p.lineTo(19.5, -10); p.lineTo(39, -10); p.lineTo(39, -40); p.closePath();
     198        colours.add(new Instr(Form.V2, p));
     199        p = new Path2D.Double(); p.moveTo(13, -40); p.lineTo(13, -10); p.lineTo(26, -10); p.lineTo(26, -40); p.closePath();
     200        colours.add(new Instr(Form.V3, p));
     201        p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     202        p.moveTo(0, -40); p.lineTo(0, -10); p.lineTo(39, -10); p.lineTo(39, -40); p.closePath();
     203        p.moveTo(8, -35); p.lineTo(8, -15); p.lineTo(33, -15); p.lineTo(33, -35); p.closePath();
     204        colours.add(new Instr(Form.B1, p));
     205        p = new Path2D.Double(); p.moveTo(0, -25); p.lineTo(0, -10); p.lineTo(20, -10); p.lineTo(20, -40); p.lineTo(39, -40); p.lineTo(39, -25); p.closePath();
     206        colours.add(new Instr(Form.S2, p));
     207        p = new Path2D.Double(); p.moveTo(0, -25); p.lineTo(0, -10); p.lineTo(20, -10); p.lineTo(20, -25); p.closePath();
     208        colours.add(new Instr(Form.S3, p));
     209        p = new Path2D.Double(); p.moveTo(20, -25); p.lineTo(20, -10); p.lineTo(39, -10); p.lineTo(39, -25); p.closePath();
     210        colours.add(new Instr(Form.S4, p));
     211        TopFlag.add(new Instr(Form.COLR, colours));
     212        TopFlag.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     213        TopFlag.add(new Instr(Form.FILL, Color.black));
     214        TopFlag.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -45)));
     215        TopFlag.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     216        TopFlag.add(new Instr(Form.RECT, new Rectangle2D.Double(0, -40, 39, 30)));
     217    }
     218
     219    public static final Symbol TopIcone = new Symbol();
     220    static {
     221        TopIcone.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     222        Symbol colours = new Symbol();
     223        Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0, -45.0); p.lineTo(0.0, -15.0); p.lineTo(15.0, -45.0); p.closePath();
     224        colours.add(new Instr(Form.P1, p));
     225        TopIcone.add(new Instr(Form.COLR, colours));
     226        TopIcone.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     227        TopIcone.add(new Instr(Form.FILL, Color.black));
     228        TopIcone.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -15)));
     229        p = new Path2D.Double(); p.moveTo(-15.0, -45.0); p.lineTo(0.0, -15.0); p.lineTo(15.0, -45.0); p.closePath();
     230        TopIcone.add(new Instr(Form.PLIN, p));
     231    }
     232
     233    public static final Symbol TopIsol = new Symbol();
     234    static {
     235        TopIsol.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -80, 60, 80)));
     236        Symbol colours = new Symbol();
     237        Path2D.Double p = new Path2D.Double(); p.moveTo(-13.0, -55.0); p.curveTo(-13.0, -72.3, 13.0, -72.3, 13.0, -55.0); p.curveTo(13.0, -37.7, -13.0, -37.7, -13.0, -55.0); p.closePath();
     238        colours.add(new Instr(Form.P1, p));
     239        p = new Path2D.Double(); p.moveTo(-13.0, -28.0); p.curveTo(-13.0, -45.3, 13.0, -45.3, 13.0, -28.0); p.curveTo(13.0, -10.7, -13.0, -10.7, -13.0, -28.0); p.closePath();
     240        colours.add(new Instr(Form.P2, p));
     241        TopIsol.add(new Instr(Form.COLR, colours));
     242        TopIsol.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     243        TopIsol.add(new Instr(Form.FILL, Color.black));
     244        TopIsol.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -15)));
     245        TopIsol.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     246        TopIsol.add(new Instr(Form.ELPS, new Ellipse2D.Double(-13, -41, 26, 26)));
     247        TopIsol.add(new Instr(Form.ELPS, new Ellipse2D.Double(-13, -68, 26, 26)));
     248    }
     249
     250    public static final Symbol TopMooring = new Symbol();
     251    static {
     252        TopMooring.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -80, 60, 80)));
     253        TopMooring.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     254        TopMooring.add(new Instr(Form.FILL, Color.black));
     255        TopMooring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-1.5, -6, 3, 3)));
     256        TopMooring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-8.5, -25, 17, 17)));
     257    }
     258
     259    public static final Symbol TopNorth = new Symbol();
     260    static {
     261        TopNorth.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -80, 60, 80)));
     262        Symbol colours = new Symbol();
     263        Path2D.Double p = new Path2D.Double(); p.moveTo(0.0, -78.0); p.lineTo(-15.0, -45.0); p.lineTo(15.0, -45.0); p.closePath();
     264        colours.add(new Instr(Form.P1, p));
     265        p = new Path2D.Double(); p.moveTo(-15.0, -10.0); p.lineTo(0.0, -43.0); p.lineTo(15.0, -10.0); p.closePath();
     266        colours.add(new Instr(Form.P2, p));
     267        TopNorth.add(new Instr(Form.COLR, colours));
     268        TopNorth.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     269        TopNorth.add(new Instr(Form.FILL, Color.black));
     270        TopNorth.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -10)));
     271        TopNorth.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     272        p = new Path2D.Double(); p.moveTo(-15.0, -10.0); p.lineTo(0.0, -43.0); p.lineTo(15.0, -10.0); p.closePath();
     273        p.moveTo(0.0, -78.0); p.lineTo(-15.0, -45.0); p.lineTo(15.0, -45.0); p.closePath();
     274        TopNorth.add(new Instr(Form.PLIN, p));
     275    }
     276
     277    public static final Symbol TopSouth = new Symbol();
     278    static {
     279        TopSouth.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -80, 60, 80)));
     280        Symbol colours = new Symbol();
     281        Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0, -78.0); p.lineTo(0.0, -45.0); p.lineTo(15.0, -78.0); p.closePath();
     282        colours.add(new Instr(Form.P1, p));
     283        p = new Path2D.Double(); p.moveTo(0.0, -10.0); p.lineTo(-15.0, -43.0); p.lineTo(15.0, -43.0); p.closePath();
     284        colours.add(new Instr(Form.P2, p));
     285        TopSouth.add(new Instr(Form.COLR, colours));
     286        TopSouth.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     287        TopSouth.add(new Instr(Form.FILL, Color.black));
     288        TopSouth.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -10)));
     289        TopSouth.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     290        p = new Path2D.Double(); p.moveTo(0.0, -10.0); p.lineTo(-15.0, -43.0); p.lineTo(15.0, -43.0); p.closePath();
     291        p.moveTo(-15.0, -78.0); p.lineTo(0.0, -45.0); p.lineTo(15.0, -78.0); p.closePath();
     292        TopSouth.add(new Instr(Form.PLIN, p));
     293    }
     294
     295    public static final Symbol TopSphere = new Symbol();
     296    static {
     297        TopSphere.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -80, 60, 80)));
     298        Symbol colours = new Symbol();
     299        Path2D.Double p = new Path2D.Double(); p.moveTo(-14.0, -28.0); p.curveTo(-14.0, -46.7, 14.0, -46.7, 14.0, -28.0); p.curveTo(14.0, -9.3, -14.0, -9.3, -14.0, -28.0); p.closePath();
     300        colours.add(new Instr(Form.P1, p));
     301        TopSphere.add(new Instr(Form.COLR, colours));
     302        TopSphere.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     303        TopSphere.add(new Instr(Form.FILL, Color.black));
     304        TopSphere.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -15)));
     305        TopSphere.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     306        TopSphere.add(new Instr(Form.ELPS, new Ellipse2D.Double(-14, -42, 28, 28)));
     307    }
     308
     309    public static final Symbol TopSquare = new Symbol();
     310    static {
     311        TopSquare.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     312        Symbol colours = new Symbol();
     313        Path2D.Double p = new Path2D.Double(); p.moveTo(-13.0, -1.0); p.lineTo(-13.0, -27.0); p.lineTo(13.0, -27.0); p.lineTo(13.0, -1.0); p.closePath();
     314        colours.add(new Instr(Form.P1, p));
     315        p = new Path2D.Double(); p.moveTo(-13.0, -15.0); p.lineTo(-13.0, -1.0); p.lineTo(13.0, -1.0); p.lineTo(13.0, -15.0); p.closePath();
     316        colours.add(new Instr(Form.H2, p));
     317        p = new Path2D.Double(); p.moveTo(-13.0, -19.3); p.lineTo(-13.0, -10.7); p.lineTo(13.0, -10.7); p.lineTo(13.0, -19.3); p.closePath();
     318        colours.add(new Instr(Form.H3, p));
     319        p = new Path2D.Double(); p.moveTo(0.0, -1.0); p.lineTo(0.0, -27.0); p.lineTo(13.0, -27.0); p.lineTo(13.0, -1.0); p.closePath();
     320        colours.add(new Instr(Form.V2, p));
     321        p = new Path2D.Double(); p.moveTo(-4.3, -1.0); p.lineTo(-4.3, -27.0); p.lineTo(4.3, -27.0); p.lineTo(4.3, -1.0); p.closePath();
     322        colours.add(new Instr(Form.V3, p));
     323        p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     324        p.moveTo(-13.0, -1.0); p.lineTo(-13.0, -27.0); p.lineTo(13.0, -27.0); p.lineTo(13.0, -1.0); p.closePath();
     325        p.moveTo(-8.0, -6.0); p.lineTo(-8.0, -22.0); p.lineTo(8.0, -22.0); p.lineTo(8.0, -6.0); p.closePath();
     326        colours.add(new Instr(Form.B1, p));
     327        TopSquare.add(new Instr(Form.COLR, colours));
     328        TopSquare.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     329        TopSquare.add(new Instr(Form.FILL, Color.black));
     330        p = new Path2D.Double(); p.moveTo(-13.0, -1.0); p.lineTo(-13.0, -27.0); p.lineTo(13.0, -27.0); p.lineTo(13.0, -1.0); p.closePath();
     331        TopSquare.add(new Instr(Form.PLIN, p));
     332    }
     333
     334    public static final Symbol TopRectangleH = new Symbol();
     335    static {
     336        TopRectangleH.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     337        Symbol colours = new Symbol();
     338        Path2D.Double p = new Path2D.Double(); p.moveTo(-20.0, -1.0); p.lineTo(-20.0, -27.0); p.lineTo(20.0, -27.0); p.lineTo(20.0, -1.0); p.closePath();
     339        colours.add(new Instr(Form.P1, p));
     340        TopRectangleH.add(new Instr(Form.COLR, colours));
     341        TopRectangleH.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     342        TopRectangleH.add(new Instr(Form.FILL, Color.black));
     343        p = new Path2D.Double(); p.moveTo(-20.0, -1.0); p.lineTo(-20.0, -27.0); p.lineTo(20.0, -27.0); p.lineTo(20.0, -1.0); p.closePath();
     344        TopRectangleH.add(new Instr(Form.PLIN, p));
     345    }
     346
     347    public static final Symbol TopRectangleV = new Symbol();
     348    static {
     349        TopRectangleV.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     350        Symbol colours = new Symbol();
     351        Path2D.Double p = new Path2D.Double(); p.moveTo(-13.0, -1.0); p.lineTo(-13.0, -41.0); p.lineTo(13.0, -41.0); p.lineTo(13.0, -1.0); p.closePath();
     352        colours.add(new Instr(Form.P1, p));
     353        TopRectangleV.add(new Instr(Form.COLR, colours));
     354        TopRectangleV.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     355        TopRectangleV.add(new Instr(Form.FILL, Color.black));
     356        p = new Path2D.Double(); p.moveTo(-13.0, -1.0); p.lineTo(-13.0, -41.0); p.lineTo(13.0, -41.0); p.lineTo(13.0, -1.0); p.closePath();
     357        TopRectangleV.add(new Instr(Form.PLIN, p));
     358    }
     359
     360    public static final Symbol TopRhombus = new Symbol();
     361    static {
     362        TopRhombus.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     363        Symbol colours = new Symbol();
     364        Path2D.Double p = new Path2D.Double(); p.moveTo(0.0, -29.0); p.lineTo(-15.0, -15.0); p.lineTo(0.0, -1.0); p.lineTo(15.0, -15.0); p.closePath();
     365        colours.add(new Instr(Form.P1, p));
     366        p = new Path2D.Double(); p.moveTo(-15.0, -15.0); p.lineTo(0.0, -1.0); p.lineTo(15.0, -15.0); p.closePath();
     367        colours.add(new Instr(Form.H2, p));
     368        p = new Path2D.Double(); p.moveTo(-10.0, -19.7); p.lineTo(-15.0, -15.0); p.lineTo(-10.0, -10.3); p.lineTo(10.0, -10.3); p.lineTo(15.0, -15.0); p.lineTo(10.0, -19.7); p.closePath();
     369        colours.add(new Instr(Form.H3, p));
     370        p = new Path2D.Double(); p.moveTo(0.0, -29.0); p.lineTo(0.0, -1.0); p.lineTo(15.0, -15.0); p.closePath();
     371        colours.add(new Instr(Form.V2, p));
     372        p = new Path2D.Double(); p.moveTo(0.0, -29.0); p.lineTo(-5.0, -24.3); p.lineTo(-5.0, -5.7); p.lineTo(0.0, -1.0); p.lineTo(5.0, -5.7); p.lineTo(5.0, -24.3); p.closePath();
     373        colours.add(new Instr(Form.V3, p));
     374        p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     375        p.moveTo(0.0, -29.0); p.lineTo(-15.0, -15.0); p.lineTo(0.0, -1.0); p.lineTo(15.0, -15.0); p.closePath();
     376        p.moveTo(0.0, -23.0); p.lineTo(-9.0, -15.0); p.lineTo(0.0, -7.0); p.lineTo(9.0, -15.0); p.closePath();
     377        colours.add(new Instr(Form.B1, p));
     378        TopRhombus.add(new Instr(Form.COLR, colours));
     379        TopRhombus.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     380        TopRhombus.add(new Instr(Form.FILL, Color.black));
     381        p = new Path2D.Double(); p.moveTo(0.0, -29.0); p.lineTo(-15.0, -15.0); p.lineTo(0.0, -1.0); p.lineTo(15.0, -15.0); p.closePath();
     382        TopRhombus.add(new Instr(Form.PLIN, p));
     383    }
     384
     385    public static final Symbol TopRhombusCircle = new Symbol();
     386
     387    public static final Symbol TopSphereRhombus = new Symbol();
     388    static {
     389        TopSphereRhombus.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -80, 60, 80)));
     390        TopSphereRhombus.add(new Instr(Form.SYMB, new Symbols.SubSymbol(TopRhombus, 1.0, 0, 0, null, null)));
     391        Symbol colours = new Symbol();
     392        Path2D.Double p = new Path2D.Double(); p.moveTo(-14.0, -44.0); p.curveTo(-14.0, -62.7, 14.0, -62.7, 14.0, -44.0); p.curveTo(14.0, -25.3, -14.0, -25.3, -14.0, -44.0); p.closePath();
     393        colours.add(new Instr(Form.P1, p));
     394        TopSphereRhombus.add(new Instr(Form.COLR, colours));
     395        TopSphereRhombus.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     396        TopSphereRhombus.add(new Instr(Form.FILL, Color.black));
     397        TopSphereRhombus.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     398        TopSphereRhombus.add(new Instr(Form.ELPS, new Ellipse2D.Double(-14, -58, 28, 28)));
     399    }
     400
     401    public static final Symbol TopT = new Symbol();
     402
     403    public static final Symbol TopTrapeziumU = new Symbol();
     404    static {
     405        TopTrapeziumU.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     406        Symbol colours = new Symbol();
     407        Path2D.Double p = new Path2D.Double(); p.moveTo(-20.0, -1.0); p.lineTo(-13.0, -27.0); p.lineTo(13.0, -27.0); p.lineTo(20.0, -1.0); p.closePath();
     408        colours.add(new Instr(Form.P1, p));
     409        TopTrapeziumU.add(new Instr(Form.COLR, colours));
     410        TopTrapeziumU.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     411        TopTrapeziumU.add(new Instr(Form.FILL, Color.black));
     412        p = new Path2D.Double(); p.moveTo(-20.0, -1.0); p.lineTo(-13.0, -27.0); p.lineTo(13.0, -27.0); p.lineTo(20.0, -1.0); p.closePath();
     413        TopTrapeziumU.add(new Instr(Form.PLIN, p));
     414    }
     415
     416    public static final Symbol TopTrapeziumD = new Symbol();
     417    static {
     418        TopTrapeziumD.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     419        Symbol colours = new Symbol();
     420        Path2D.Double p = new Path2D.Double(); p.moveTo(-13.0, -1.0); p.lineTo(-20.0, -27.0); p.lineTo(20.0, -27.0); p.lineTo(13.0, -1.0); p.closePath();
     421        colours.add(new Instr(Form.P1, p));
     422        TopTrapeziumD.add(new Instr(Form.COLR, colours));
     423        TopTrapeziumD.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     424        TopTrapeziumD.add(new Instr(Form.FILL, Color.black));
     425        p = new Path2D.Double(); p.moveTo(-13.0, -1.0); p.lineTo(-20.0, -27.0); p.lineTo(20.0, -27.0); p.lineTo(13.0, -1.0); p.closePath();
     426        TopTrapeziumD.add(new Instr(Form.PLIN, p));
     427    }
     428
     429    public static final Symbol TopTriangle = new Symbol();
     430    static {
     431        TopTriangle.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     432        Symbol colours = new Symbol();
     433        Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0, -1.0); p.lineTo(0.0, -29.0); p.lineTo(15.0, -1.0); p.closePath();
     434        colours.add(new Instr(Form.P1, p));
     435        p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     436        p.moveTo(-15.0, -1.0); p.lineTo(0.0, -29.0); p.lineTo(15.0, -1.0); p.closePath();
     437        p.moveTo(-10.0, -6.0); p.lineTo(0.0, -24.0); p.lineTo(10.0, -6.0); p.closePath();
     438        colours.add(new Instr(Form.B1, p));
     439        TopTriangle.add(new Instr(Form.COLR, colours));
     440        TopTriangle.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     441        TopTriangle.add(new Instr(Form.FILL, Color.black));
     442        p = new Path2D.Double(); p.moveTo(-15.0, -1.0); p.lineTo(0.0, -29.0); p.lineTo(15.0, -1.0); p.closePath();
     443        TopTriangle.add(new Instr(Form.PLIN, p));
     444    }
     445
     446    public static final Symbol TopItriangle = new Symbol();
     447    static {
     448        TopItriangle.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20, -80, 40, 80)));
     449        Symbol colours = new Symbol();
     450        Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0, -29.0); p.lineTo(0.0, -1.0); p.lineTo(15.0, -29.0); p.closePath();
     451        colours.add(new Instr(Form.P1, p));
     452        p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
     453        p.moveTo(-15.0, -29.0); p.lineTo(0.0, -1.0); p.lineTo(15.0, -29.0); p.closePath();
     454        p.moveTo(-10.0, -24.0); p.lineTo(0.0, -6.0); p.lineTo(10.0, -24.0); p.closePath();
     455        colours.add(new Instr(Form.B1, p));
     456        TopItriangle.add(new Instr(Form.COLR, colours));
     457        TopItriangle.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     458        TopItriangle.add(new Instr(Form.FILL, Color.black));
     459        p = new Path2D.Double(); p.moveTo(-15.0, -29.0); p.lineTo(0.0, -1.0); p.lineTo(15.0, -29.0); p.closePath();
     460        TopItriangle.add(new Instr(Form.PLIN, p));
     461    }
     462
     463    public static final Symbol TopTriangleCircle = new Symbol();
     464
     465    public static final Symbol TopWest = new Symbol();
     466    static {
     467        TopWest.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -80, 60, 80)));
     468        Symbol colours = new Symbol();
     469        Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0, -78.0); p.lineTo(0.0, -45.0); p.lineTo(15.0, -78.0); p.closePath();
     470        colours.add(new Instr(Form.P1, p));
     471        p = new Path2D.Double(); p.moveTo(-15.0, -10.0); p.lineTo(0.0, -43.0); p.lineTo(15.0, -10.0); p.closePath();
     472        colours.add(new Instr(Form.P2, p));
     473        TopWest.add(new Instr(Form.COLR, colours));
     474        TopWest.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     475        TopWest.add(new Instr(Form.FILL, Color.black));
     476        TopWest.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -10)));
     477        TopWest.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     478        p = new Path2D.Double(); p.moveTo(-15.0, -10.0); p.lineTo(0.0, -43.0); p.lineTo(15.0, -10.0); p.closePath();
     479        p.moveTo(-15.0, -78.0); p.lineTo(0.0, -45.0); p.lineTo(15.0, -78.0); p.closePath();
     480        TopWest.add(new Instr(Form.PLIN, p));
     481    }
     482
     483    public static final Symbol TopX = new Symbol();
     484    static {
     485        TopX.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30, -80, 60, 80)));
     486        Symbol colours = new Symbol();
     487        Path2D.Double p = new Path2D.Double(); p.moveTo(0.0, -27.7); p.lineTo(-12.4, -15.7); p.lineTo(-19.3, -22.6); p.lineTo(-7.3, -35.0); p.lineTo(-19.3, -47.3);
     488        p.lineTo(-12.4, -54.2); p.lineTo(0.0, -42.4); p.lineTo(12.4, -54.2); p.lineTo(19.3, -47.3); p.lineTo(7.3, -35.0); p.lineTo(19.3, -22.6); p.lineTo(12.4, -15.7); p.closePath();
     489        colours.add(new Instr(Form.P1, p));
     490        TopX.add(new Instr(Form.COLR, colours));
     491        TopX.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     492        TopX.add(new Instr(Form.FILL, Color.black));
     493        TopX.add(new Instr(Form.LINE, new Line2D.Double(0, 0, 0, -27)));
     494        TopX.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
     495        p = new Path2D.Double(); p.moveTo(0.0, -27.7); p.lineTo(-12.4, -15.7); p.lineTo(-19.3, -22.6); p.lineTo(-7.3, -35.0); p.lineTo(-19.3, -47.3); p.lineTo(-12.4, -54.2); p.lineTo(0.0, -42.4);
     496        p.lineTo(12.4, -54.2); p.lineTo(19.3, -47.3); p.lineTo(7.3, -35.0); p.lineTo(19.3, -22.6); p.lineTo(12.4, -15.7); p.closePath();
     497        TopX.add(new Instr(Form.PLIN, p));
     498    }
     499
     500    public static final Symbol TopOther = new Symbol();
     501
     502    public static final EnumMap<TopSHP, Symbol> Shapes = new EnumMap<>(TopSHP.class);
     503    static {
     504        Shapes.put(TopSHP.TOP_BESM, TopBesom); Shapes.put(TopSHP.TOP_IBESM, TopIBesom); Shapes.put(TopSHP.TOP_BORD, TopBoard); Shapes.put(TopSHP.TOP_CAN, TopCan);
     505        Shapes.put(TopSHP.TOP_CONE, TopCone); Shapes.put(TopSHP.TOP_CROS, TopCross); Shapes.put(TopSHP.TOP_EAST, TopEast); Shapes.put(TopSHP.TOP_ICONE, TopIcone);
     506        Shapes.put(TopSHP.TOP_ISD, TopIsol); Shapes.put(TopSHP.TOP_NORTH, TopNorth); Shapes.put(TopSHP.TOP_SOUTH, TopSouth); Shapes.put(TopSHP.TOP_SPHR, TopSphere);
     507        Shapes.put(TopSHP.TOP_SQUR, TopSquare); Shapes.put(TopSHP.TOP_TRI, TopTriangle); Shapes.put(TopSHP.TOP_ITRI, TopItriangle); Shapes.put(TopSHP.TOP_WEST, TopWest);
     508        Shapes.put(TopSHP.TOP_SALT, TopX); Shapes.put(TopSHP.TOP_RHOM, TopRhombus); Shapes.put(TopSHP.TOP_FLAG, TopFlag); Shapes.put(TopSHP.TOP_CUBE, TopCube);
     509        Shapes.put(TopSHP.TOP_SPRH, TopSphereRhombus); Shapes.put(TopSHP.TOP_HRECT, TopRectangleH); Shapes.put(TopSHP.TOP_VRECT, TopRectangleV);
     510        Shapes.put(TopSHP.TOP_TRAP, TopTrapeziumU); Shapes.put(TopSHP.TOP_ITRAP, TopTrapeziumD); Shapes.put(TopSHP.TOP_COSP, TopConeSphere);
     511        Shapes.put(TopSHP.TOP_CIRC, TopCircle); Shapes.put(TopSHP.TOP_CRSS, TopCrosses); Shapes.put(TopSHP.TOP_T, TopT); Shapes.put(TopSHP.TOP_TRCL, TopTriangleCircle);
     512        Shapes.put(TopSHP.TOP_CRCL, TopCrossCircle); Shapes.put(TopSHP.TOP_RHCL, TopRhombusCircle); Shapes.put(TopSHP.TOP_CLTR, TopCircleTriangle);
     513        Shapes.put(TopSHP.TOP_CYSP, TopCanSphere); Shapes.put(TopSHP.TOP_OTHR, TopOther);
     514    }
     515
     516    // CHECKSTYLE.OFF: SingleSpaceSeparator
     517    public static final EnumMap<BoySHP, Delta> BuoyDeltas = new EnumMap<>(BoySHP.class);
     518    static {
     519        BuoyDeltas.put(BoySHP.BOY_PILR, new Delta(Handle.BC, new AffineTransform(0.948324, 0.317305, -0.3173047, 0.948324, 31.5, -95.0)));
     520        BuoyDeltas.put(BoySHP.BOY_SPAR, new Delta(Handle.BC, new AffineTransform(0.948324, 0.317305, -0.3173047, 0.948324, 31.5, -95.0)));
     521        BuoyDeltas.put(BoySHP.BOY_CAN,  new Delta(Handle.BC, new AffineTransform(0.948324, 0.317305, -0.3173047, 0.948324, 12.7, -37.9)));
     522        BuoyDeltas.put(BoySHP.BOY_CONE, new Delta(Handle.BC, new AffineTransform(0.948324, 0.317305, -0.3173047, 0.948324, 12.7, -37.9)));
     523        BuoyDeltas.put(BoySHP.BOY_SPHR, new Delta(Handle.BC, new AffineTransform(0.948324, 0.317305, -0.3173047, 0.948324, 12.7, -37.9)));
     524        BuoyDeltas.put(BoySHP.BOY_BARL, new Delta(Handle.BC, new AffineTransform(0.948324, 0.317305, -0.3173047, 0.948324, 12.7, -37.9)));
     525        BuoyDeltas.put(BoySHP.BOY_SUPR, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -42.0)));
     526        BuoyDeltas.put(BoySHP.BOY_ICE,  new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -25.0)));
     527    }
     528
     529    public static final Delta FloatDelta  = new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -42.0));
     530    public static final Delta BeaconDelta = new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -70.0));
     531    public static final Delta LightDelta  = new Delta(Handle.BC, AffineTransform.getTranslateInstance(0.0, -20.0));
     532    // CHECKSTYLE.ON: SingleSpaceSeparator
    506533}
Note: See TracChangeset for help on using the changeset viewer.