Cancel the effects of the zoom on a particular Stroke
/*
* 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;
}
}
Related examples in the same category