Hi,
the attached sample app uses Java2D dash pattern to try to create a
railway pattern, but the result isn't very good.

The code is specifying the dash array as { 4.0f, 4.0f } but I'm seeing
variable results:
  o  on the top line it seems more like {5, 3}
  o  on the left line seems more like { 6, 2, 5, 3 } and
  o  on the bottom line does not look dashed at all

Is it something I'm doing wrong in my code, or known problem?

-- Russell

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".
/*
 * Copyright (C) 1999 - 2006 by Environmental Systems Research Institute Inc.
 * All Rights Reserved.
 *
 *  N O T I C E
 *
 *  THIS MATERIAL IS CONSIDERED A TRADE SECRET BY ESRI.
 *  UNAUTHORIZED ACCESS IS PROHIBITED.
 *
 * $Workfile:$  $Revision:$
 */

package com.esri.mc.app;

import javax.swing.*;
import java.awt.*;
import java.awt.geom.GeneralPath;

/**
 * dash lines look wrong
 */
public class RailwayLines extends JFrame {

    public static void main(String[] args) {
        new RailwayLines().setVisible(true);
    }

    public RailwayLines() {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBounds(200, 200, 500, 300);
        String text = System.getProperty("java.vm.version");
        this.setTitle(text);
        MyCanvas canvas = new MyCanvas();
        this.getContentPane().add(canvas);
    }
}

final class MyCanvas extends JComponent {
    private Stroke topStroke, backStroke;
    private Color topColor, backColor;
    private GeneralPath path;

    MyCanvas() {
        topStroke = constructTopStroke();
        backStroke = constructBackStroke();
        topColor = Color.WHITE;
        backColor = new Color(102, 102, 102);
        path = constructPath();
    }

    private GeneralPath constructPath() {
        GeneralPath path = new GeneralPath();
        path.moveTo(100.0f, 100.0f);
        path.lineTo(200.0f, 200.0f);
        path.lineTo(400.0f, 200.0f);
        path.lineTo(400.0f, 100.0f);
        path.closePath();
        return path;
    }

    private Stroke constructBackStroke() {
        float width = 4.0f;
        int cap = BasicStroke.CAP_ROUND;
        int join = BasicStroke.JOIN_ROUND;
        return new BasicStroke(width, cap, join);
    }

    private Stroke constructTopStroke() {
        float width = 2.0f;
        int cap = BasicStroke.CAP_ROUND;
        int join = BasicStroke.JOIN_ROUND;
        float miterLimit = 10.f;
        float[] dash = { 4.0f, 4.0f };
        float dashPhase = 0.0f;
        return new BasicStroke(width, cap, join, miterLimit, dash, dashPhase);
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.setColor(backColor);
        g2.setStroke(backStroke);
        g2.draw(path);
        g2.setColor(topColor);
        g2.setStroke(topStroke);
        g2.draw(path);
    }
}

Reply via email to