Ignore:
Timestamp:
2016-02-29T11:29:17+01:00 (9 years ago)
Author:
malcolmh
Message:

[Seachart] Publish new release

Location:
applications/editors/josm/plugins/seachart/src/render
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/seachart/src/render/Renderer.java

    r32084 r32088  
    548548        }
    549549       
    550         public static void lightSector(Feature feature, Color col1, Color col2, double radius, double s1, double s2, boolean dir, String str) {
     550        public static void lightSector(Feature feature, Color col1, Color col2, double radius, double s1, double s2, Double dir, String str) {
    551551                if ((zoom >= 16) && (radius > 0.2)) {
    552                         radius = 0.2 / (Math.pow(2, zoom-16));
     552                        radius /= (Math.pow(2, zoom-15));
    553553                }
    554554                double mid = (((s1 + s2)  / 2) + (s1 > s2 ? 180 : 0)) % 360;
     
    557557                Point2D.Double centre = (Point2D.Double) context.getPoint(feature.geom.centre);
    558558                double radial = radius * context.mile(feature);
    559                 if (dir) {
    560                         g2.draw(new Line2D.Double(centre.x, centre.y, centre.x - radial * Math.sin(Math.toRadians(mid)), centre.y + radial * Math.cos(Math.toRadians(mid))));
     559                if (dir != null) {
     560                        g2.draw(new Line2D.Double(centre.x, centre.y, centre.x - radial * Math.sin(Math.toRadians(dir)), centre.y + radial * Math.cos(Math.toRadians(dir))));
    561561                } else {
    562562                        if ((s1 != 0.0) || (s2 != 360.0)) {
     
    574574                }
    575575                if ((str != null) && (!str.isEmpty())) {
    576                         g2.setPaint(Color.black);
    577                         g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    578             FontRenderContext frc = g2.getFontRenderContext();
    579             Font font = new Font("Arial", Font.PLAIN, 40);
    580             GeneralPath path = new GeneralPath();
    581             GlyphVector gv = font.deriveFont(font.getSize2D() * (float)sScale).createGlyphVector(frc, (" " + str));
    582                         double gwidth = gv.getLogicalBounds().getWidth();
    583                         boolean hand = false;
    584             double offset = 0;
    585             Point2D origin;
    586                         if (dir) {
    587                                 radial += 10 * sScale;
    588                                 if (mid < 180) {
    589                                         radial += gwidth;
    590                                         hand = true;
    591                                 }
    592                                 origin = new Point2D.Double(centre.x - radial * Math.sin(Math.toRadians(mid)), centre.y + radial * Math.cos(Math.toRadians(mid)));
    593                     int length = gv.getNumGlyphs();
    594                     for (int i = 0; i < length; i++) {
    595                                         Shape shape = gv.getGlyphOutline(i);
    596                                         Point2D point = gv.getGlyphPosition(i);
    597                                         AffineTransform at = AffineTransform.getTranslateInstance(origin.getX(), origin.getY());
    598                                         at.rotate(Math.toRadians(mid + (hand ? -90 : 90)));
    599                                         at.translate(-point.getX() + offset, -point.getY() + (15 * sScale));
    600                                         path.append(at.createTransformedShape(shape), false);
    601                                         offset += gv.getGlyphMetrics(i).getAdvance();
    602                                         g2.fill(path);
    603                     }
    604                         } else {
    605                                 double arc = (s2 > s1) ? (s2 - s1) : (s2 - s1 + 360);
    606                                 double awidth = (Math.toRadians(arc) * radial);
    607                                 if (gwidth < awidth) {
    608                                         offset = 0;
    609                                         double phi = 0;
    610                                         if ((mid > 270) || (mid < 90)) {
    611                                                 hand = true;
    612                                                 phi = Math.toRadians(s2) - ((awidth - gwidth) / 2) /radial;
    613                                                 radial -= 20 * sScale;
    614                                         } else {
    615                                                 phi = Math.toRadians(s1) + (((awidth - gwidth) / 2)) /radial;
    616                                                 radial += 20 * sScale;
    617                                         }
    618                                         origin = new Point2D.Double(centre.x - radial * Math.sin(phi), centre.y + radial * Math.cos(phi));
    619                             int length = gv.getNumGlyphs();
    620                             for (int i = 0; i < length; i++) {
    621                                                 Shape shape = gv.getGlyphOutline(i);
    622                                                 Point2D point = gv.getGlyphPosition(i);
    623                                                 AffineTransform at = AffineTransform.getTranslateInstance(origin.getX(), origin.getY());
    624                                                 at.rotate(phi + (hand ? 0 : Math.toRadians(180)));
    625                                                 at.translate(-point.getX() + offset, -point.getY());
    626                                                 path.append(at.createTransformedShape(shape), false);
    627                                                 double advance = gv.getGlyphMetrics(i).getAdvance();
    628                                                 offset += advance;
    629                                                 phi += (hand ? -0.5 : +0.5) * advance / radial;
    630                                                 g2.fill(path);
    631                             }
    632                                 }
     576                        FontRenderContext frc = g2.getFontRenderContext();
     577                        Font font = new Font("Arial", Font.PLAIN, 40);
     578                        GlyphVector gv = font.deriveFont(font.getSize2D() * (float)sScale).createGlyphVector(frc, str);
     579                        double arc = (s2 > s1) ? (s2 - s1) : (s2 - s1 + 360);
     580                        double awidth = (Math.toRadians(arc) * radial);
     581                        boolean hand = ((mid > 270) || (mid < 90));
     582                        double phi = Math.toRadians(mid);
     583                        radial += 30 * sScale;
     584                        AffineTransform at = AffineTransform.getTranslateInstance(-radial * Math.sin(phi) / sScale, radial * Math.cos(phi) / sScale);
     585                        if (gv.getLogicalBounds().getWidth() < awidth) {
     586                                at.rotate(Math.toRadians(mid + (hand ? 0 : 180)));
     587                                Renderer.labelText(feature, str, font, Color.black, new Delta(Handle.CC, at));
     588                        } else if (gv.getLogicalBounds().getHeight() < awidth) {
     589                                hand = (mid < 180);
     590                                at.rotate(Math.toRadians(mid + (hand ? -90 : 90)));
     591                                Renderer.labelText(feature, str, font, Color.black, hand ? new Delta(Handle.RC, at) : new Delta(Handle.LC, at));
     592                        }
     593                        if (dir != null) {
     594                                font = new Font("Arial", Font.PLAIN, 30);
     595                                str = dir + "°";
     596                                hand = (dir > 180);
     597                                phi = Math.toRadians(dir + (hand ? -0.5 : 0.5));
     598                                radial -= 70 * sScale;
     599                                at = AffineTransform.getTranslateInstance(-radial * Math.sin(phi) / sScale, radial * Math.cos(phi) / sScale);
     600                                at.rotate(Math.toRadians(dir + (hand ? 90 : -90)));
     601                                Renderer.labelText(feature, str, font, Color.black, hand ? new Delta(Handle.BR, at) : new Delta(Handle.BL, at));
    633602                        }
    634603                }
  • applications/editors/josm/plugins/seachart/src/render/Signals.java

    r32084 r32088  
    329329                                        Enum<ColCOL> col2 = null;
    330330                                        double radius = 0.2;
    331                                         double s1 = 0;
    332                                         double s2 = 0;
    333                                         boolean dir = false;
     331                                        double s1 = 361;
     332                                        double s2 = 361;
     333                                        Double dir = null;
    334334                                        if (atts.containsKey(Att.COLOUR)) {
    335335                                                ArrayList<Enum<ColCOL>> cols = (ArrayList<Enum<ColCOL>>) atts.get(Att.COLOUR).val;
     
    343343                                                radius = (Double) atts.get(Att.LITRAD).val;
    344344                                        }
    345                                         if (atts.containsKey(Att.SECTR1)) {
    346                                                 s1 = (Double) atts.get(Att.SECTR1).val;
    347                                         } else {
    348                                                 continue;
    349                                         }
    350                                         if (atts.containsKey(Att.SECTR2)) {
    351                                                 s2 = (Double) atts.get(Att.SECTR2).val;
    352                                         } else {
    353                                                 continue;
    354                                         }
    355345                                        if (atts.containsKey(Att.CATLIT)) {
    356346                                                ArrayList<CatLIT> cats = (ArrayList<CatLIT>) atts.get(Att.CATLIT).val;
    357347                                                if (cats.contains(CatLIT.LIT_DIR)) {
    358                                                         dir = true;
    359                                                 }
     348                                                        if (atts.containsKey(Att.ORIENT)) {
     349                                                                dir = (Double) atts.get(Att.ORIENT).val;
     350                                                                s1 = ((dir - 4) + 360) % 360;
     351                                                                s2 = (dir + 4) % 360;
     352                                                                for (AttMap satts : lights.values()) {
     353                                                                        double srad = 0.2;
     354                                                                        double ss1 = 361;
     355                                                                        double ss2 = 361;
     356                                                                        Double sdir = null;
     357                                                                        if (satts == atts) continue;
     358                                                                        if (satts.containsKey(Att.LITRAD)) {
     359                                                                                srad = (Double) satts.get(Att.LITRAD).val;
     360                                                                        }
     361                                                                        if (srad == radius) {
     362                                                                                ArrayList<CatLIT> scats = (satts.containsKey(Att.CATLIT)) ? (ArrayList<CatLIT>) satts.get(Att.CATLIT).val : new ArrayList<CatLIT>();
     363                                                                                if (scats.contains(CatLIT.LIT_DIR)) {
     364                                                                                        if (satts.containsKey(Att.ORIENT)) {
     365                                                                                                sdir = (Double) satts.get(Att.ORIENT).val;
     366                                                                                                ss1 = sdir;
     367                                                                                                ss2 = sdir;
     368                                                                                        }
     369                                                                                } else {
     370                                                                                        if (satts.containsKey(Att.SECTR1)) {
     371                                                                                                ss1 = (Double) satts.get(Att.SECTR1).val;
     372                                                                                        }
     373                                                                                        if (satts.containsKey(Att.SECTR2)) {
     374                                                                                                ss2 = (Double) satts.get(Att.SECTR2).val;
     375                                                                                        }
     376                                                                                }
     377                                                                                if ((ss1 > 360) || (ss2 > 360)) continue;
     378                                                                                if (sdir != null) {
     379                                                                                        if (((dir - sdir + 360) % 360) < 8) {
     380                                                                                                s1 = ((((sdir > dir) ? 360 : 0) + sdir + dir) / 2) % 360;
     381                                                                                        }
     382                                                                                        if (((sdir - dir + 360) % 360) < 8) {
     383                                                                                                s2 = ((((dir > sdir) ? 360 : 0) + sdir + dir) / 2) % 360;
     384                                                                                        }
     385                                                                                } else {
     386                                                                                        if (((dir - ss2 + 360) % 360) < 4) {
     387                                                                                                s1 = ss2;
     388                                                                                        }
     389                                                                                        if (((ss1 - dir + 360) % 360) < 4) {
     390                                                                                                s2 = ss1;
     391                                                                                        }
     392                                                                                }
     393                                                                        }
     394                                                                }
     395                                                        }
     396                                                }
     397                                        }
     398                                        if ((s1 > 360) && atts.containsKey(Att.SECTR1)) {
     399                                                s1 = (Double) atts.get(Att.SECTR1).val;
     400                                        } else if (dir == null) {
     401                                                continue;
     402                                        }
     403                                        if ((s2 > 360) && atts.containsKey(Att.SECTR2)) {
     404                                                s2 = (Double) atts.get(Att.SECTR2).val;
     405                                        } else if (dir == null) {
     406                                                continue;
    360407                                        }
    361408                                        str = "";
     
    377424                                                str += "." + df.format(atts.get(Att.SIGPER).val) + "s";
    378425                                        }
    379                                         if (dir && atts.containsKey(Att.ORIENT)) {
    380                                                 double orient = (Double) atts.get(Att.ORIENT).val;
    381                                                 str += " " + orient + "°";
    382                                                 s1 = (orient - 4 + 360) % 360;
    383                                                 s2 = (orient + 4) % 360;
    384                                                 double n1 = 360;
    385                                                 double n2 = 360;
    386                                                 for (AttMap sect : lights.values()) {
    387                                                         if (sect != atts) {
    388 
    389                                                         }
    390                                                 }
    391                                         }
    392                                         Renderer.lightSector(feature, LightColours.get(col1), LightColours.get(col2), radius, s1, s2, dir, (Renderer.zoom >= 15) ? str : "");
     426                                        if ((s1 <= 360) && (s2 <= 360) && (s1 != s2))
     427                                                Renderer.lightSector(feature, LightColours.get(col1), LightColours.get(col2), radius, s1, s2, dir, (Renderer.zoom >= 15) ? str : "");
    393428                                }
    394429                        if (Renderer.zoom >= 15) {
     
    403438                                        double hgt;
    404439                                }
    405                                 str = "";
    406440                                ArrayList<LitSect> litatts = new ArrayList<>();
    407441                                for (AttMap atts : lights.values()) {
    408442                                        LitSect sect = new LitSect();
    409                                         sect.dir = (atts.containsKey(Att.CATLIT)) && (atts.get(Att.CATLIT).val == CatLIT.LIT_DIR);
     443                                        sect.dir = (atts.containsKey(Att.CATLIT) && ((ArrayList<CatLIT>)atts.get(Att.CATLIT).val).contains(CatLIT.LIT_DIR));
    410444                                        sect.chr = atts.containsKey(Att.LITCHR) ? ((ArrayList<LitCHR>) atts.get(Att.LITCHR).val).get(0) : LitCHR.CHR_UNKN;
    411445                                        switch (sect.chr) {
     
    501535                                        }
    502536                                        LitSect tmp = group.get(0);
    503                                         if (tmp.dir)
    504                                                 str += "Dir";
     537                                        str = (tmp.dir) ? "Dir" : "";
    505538                                        str += LightCharacters.get(tmp.chr);
    506539                                        if (!tmp.grp.isEmpty())
     
    531564                                        cats = (ArrayList<CatLIT>) atts.get(Att.CATLIT).val;
    532565                                }
    533                                 str += (cats.contains(CatLIT.LIT_DIR)) ? "Dir" : "";
     566                                str = (cats.contains(CatLIT.LIT_DIR)) ? "Dir" : "";
    534567                                str += (atts.containsKey(Att.MLTYLT)) ? atts.get(Att.MLTYLT).val : "";
    535568                                if (atts.containsKey(Att.LITCHR)) {
Note: See TracChangeset for help on using the changeset viewer.