Changeset 30316 in osm for applications/editors


Ignore:
Timestamp:
2014-03-02T22:07:07+01:00 (11 years ago)
Author:
malcolmh
Message:

save

File:
1 edited

Legend:

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

    r30315 r30316  
    492492
    493493        public static void lineText(Feature feature, String str, Font font, Color colour, double offset, double dy) {
    494 //              Rectangle prect = symbolSize(prisymb);
    495494                if (!str.isEmpty()) {
    496495                        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    497496            FontRenderContext frc = g2.getFontRenderContext();
    498             GlyphVector gv = font.deriveFont((float)(font.getSize()*sScale)).createGlyphVector(frc, str);
    499 //                      double psize = Math.abs(prect.getX());
     497            GlyphVector gv = font.deriveFont((float)(font.getSize())).createGlyphVector(frc, (" " + str));
    500498                        Point2D prev = new Point2D.Double();
    501499                        Point2D next = new Point2D.Double();
     
    503501                        Point2D succ = new Point2D.Double();
    504502                        boolean piv = false;
    505                         double len = 0;
    506503                        double angle = 0;
     504                        int index = 0;
     505                        double gwidth = offset * (feature.geom.length * context.mile(feature) - (gv.getLogicalBounds().getWidth() * sScale));
    507506                        GeomIterator git = map.new GeomIterator(feature.geom);
    508507                        while (git.hasComp()) {
     
    518517                                                if (first) {
    519518                                                        curr = succ = next;
    520                                                         // len = psize;
    521519                                                        first = false;
    522520                                                } else {
    523                                                         while (curr.distance(next) >= len) {
     521                                                        while (curr.distance(next) >= gwidth) {
    524522                                                                if (piv) {
    525                                                                         double rem = len;
     523                                                                        double rem = gwidth;
    526524                                                                        double s = prev.distance(next);
    527525                                                                        double p = curr.distance(prev);
     
    529527                                                                                double n = curr.distance(next);
    530528                                                                                double theta = Math.acos((s * s + p * p - n * n) / 2 / s / p);
    531                                                                                 double phi = Math.asin(p / len * Math.sin(theta));
    532                                                                                 rem = len * Math.sin(Math.PI - theta - phi) / Math.sin(theta);
     529                                                                                double phi = Math.asin(p / gwidth * Math.sin(theta));
     530                                                                                rem = gwidth * Math.sin(Math.PI - theta - phi) / Math.sin(theta);
    533531                                                                        }
    534532                                                                        succ = new Point2D.Double(prev.getX() + (rem * Math.cos(angle)), prev.getY() + (rem * Math.sin(angle)));
    535533                                                                        piv = false;
    536534                                                                } else {
    537                                                                         succ = new Point2D.Double(curr.getX() + (len * Math.cos(angle)), curr.getY() + (len * Math.sin(angle)));
     535                                                                        succ = new Point2D.Double(curr.getX() + (gwidth * Math.cos(angle)), curr.getY() + (gwidth * Math.sin(angle)));
    538536                                                                }
    539                                                                 // Symbols.drawSymbol(g2, symbol, sScale, curr.getX(), curr.getY(), new Delta(Handle.BC, AffineTransform.getRotateInstance(Math.atan2((succ.getY() - curr.getY()), (succ.getX() - curr.getX())) + Math.toRadians(90))), null);
     537                                                                Symbol symbol = new Symbol();
     538                                                                Shape shape = gv.getGlyphOutline(index);
     539                                                                Rectangle2D bounds = shape.getBounds2D();
     540                                                                symbol.add(new Instr(Form.BBOX, new Rectangle2D.Double(bounds.getX(), (bounds.getY() - dy), bounds.getWidth(), bounds.getHeight())));
     541                                                                symbol.add(new Instr(Form.PGON, new Path2D.Double(shape)));
     542                                                                Symbols.drawSymbol(g2, symbol, sScale, curr.getX(), curr.getY(), new Scheme(colour),
     543                                                                                new Delta((dy < 0) ? Handle.BL : Handle.TL, AffineTransform.getRotateInstance(Math.atan2((succ.getY() - curr.getY()), (succ.getX() - curr.getX())))));
    540544                                                                curr = succ;
    541                                                                 // len = psize;
     545                                                                if (++index < gv.getNumGlyphs()) {
     546                                                                        gwidth = gv.getGlyphMetrics(index).getAdvance() * sScale;
     547                                                                } else {
     548                                                                        return;
     549                                                                }
    542550                                                        }
    543551                                                }
Note: See TracChangeset for help on using the changeset viewer.