PerspectiveTransformer.java :  » Science » jung-2-2_0_1 » edu » uci » ics » jung » visualization » jai » Java Open Source

Java Open Source » Science » jung 2 2_0_1 
jung 2 2_0_1 » edu » uci » ics » jung » visualization » jai » PerspectiveTransformer.java
/*
 * Copyright (c) 2003, the JUNG Project and the Regents of the University of
 * California All rights reserved.
 * 
 * This software is open-source under the BSD license; see either "license.txt"
 * or http://jung.sourceforge.net/license.txt for a description.
 * 
 */
package edu.uci.ics.jung.visualization.jai;

import java.awt.geom.NoninvertibleTransformException;
import java.awt.geom.Point2D;

import javax.media.jai.PerspectiveTransform;

import edu.uci.ics.jung.visualization.transform.MutableAffineTransformer;
import edu.uci.ics.jung.visualization.transform.MutableTransformer;
import edu.uci.ics.jung.visualization.transform.MutableTransformerDecorator;

/**
 * PerspectiveTransformer wraps a MutableAffineTransformer and modifies
 * the transform and inverseTransform methods so that they create a
 * perspective projection of the graph points.
 * 
 * @author Tom Nelson
 *
 */
public class PerspectiveTransformer extends MutableTransformerDecorator implements MutableTransformer {

    protected PerspectiveTransform perspectiveTransform;
    /**
     * create an instance, setting values from the passed component
     * and registering to listen for size changes on the component
     * @param component
     */
    public PerspectiveTransformer(PerspectiveTransform perspectiveTransform) {
        this(perspectiveTransform, new MutableAffineTransformer());
    }
    /**
     * create an instance with a possibly shared transform
     * @param component
     * @param delegate
     */
    public PerspectiveTransformer(PerspectiveTransform perspectiveTransform, MutableTransformer delegate) {
        super(delegate);
        this.perspectiveTransform = perspectiveTransform;
   }
    
    @Override
    public void setToIdentity() {
        this.perspectiveTransform.setToIdentity();
    }
    
    public PerspectiveTransform createInverse() {
        try {
            return perspectiveTransform.createInverse();
        } catch (NoninvertibleTransformException e) {
            e.printStackTrace();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * override base class transform to project the perspective effect
     */
    @Override
    public Point2D transform(Point2D graphPoint) {
        if(graphPoint == null) return null;
        Point2D p2 = super.transform(graphPoint);
        return perspectiveTransform.transform(p2, null);
    }
    
    /**
     * override base class to un-project the perspective effect
     */
    @Override
    public Point2D inverseTransform(Point2D viewPoint) {
        Point2D p2 = createInverse().transform(viewPoint, null);
        return super.inverseTransform(p2);

    }
    public Point2D perspectiveTransform(Point2D graphPoint) {
        if(graphPoint == null) return null;
        return perspectiveTransform.transform(graphPoint, null);
    }
    
    /**
     * override base class to un-project the perspective effect
     */
    public Point2D inversePerspectiveTransform(Point2D viewPoint) {
        return createInverse().transform(viewPoint, null);
    }

    public PerspectiveTransform getPerspectiveTransform() {
        return perspectiveTransform;
    }
    public void setPerspectiveTransform(PerspectiveTransform perspectiveTransform) {
        this.perspectiveTransform = perspectiveTransform;
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.