Java2DUtils.java Source code

Java tutorial

Introduction

Here is the source code for Java2DUtils.java

Source

/*
 * Java2DUtils.java
 * 
 * Created on Aug 30, 2007, 11:40:18 AM
 * 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

//Revised from jaspersoft ireport designer

import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.geom.AffineTransform;
import java.util.Stack;

/**
 *
 * @author gtoffoli
 */
public class Java2DUtils {

    /**
     * This function provides a way to cancel the effects of the zoom on a particular Stroke.
     * All the stroke values (as line width, dashes, etc...) are divided by the zoom factor.
     * This allow to have essentially a fixed Stroke independent by the zoom.
     * The returned Stroke is a copy.
     * Remember to restore the right stroke in the graphics when done.
     * 
     * It works only with instances of BasicStroke
     * 
     * zoom is the zoom factor.
     */
    public static Stroke getInvertedZoomedStroke(Stroke stroke, double zoom) {
        if (stroke == null || !(stroke instanceof BasicStroke))
            return stroke;

        BasicStroke bs = (BasicStroke) stroke;
        float[] dashArray = bs.getDashArray();

        float[] newDashArray = null;
        if (dashArray != null) {
            newDashArray = new float[dashArray.length];
            for (int i = 0; i < newDashArray.length; ++i) {
                newDashArray[i] = (float) (dashArray[i] / zoom);
            }
        }

        BasicStroke newStroke = new BasicStroke((float) (bs.getLineWidth() / zoom), bs.getEndCap(),
                bs.getLineJoin(), bs.getMiterLimit(),
                //(float)(bs.getMiterLimit() / zoom),
                newDashArray, (float) (bs.getDashPhase() / zoom));
        return newStroke;
    }
}