All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.uci.ics.jung.visualization.jai.PerspectiveImageLensSupport Maven / Gradle / Ivy

Go to download

Jung2 rendering project that uses Java Advanced Imaging (JAI) for non-affine transforms

The newest version!
/*
 * Copyright (c) 2005, 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.
 *
 * Created on Jul 21, 2005
 */

package edu.uci.ics.jung.visualization.jai;

import javax.media.jai.PerspectiveTransform;

import edu.uci.ics.jung.algorithms.layout.GraphElementAccessor;
import edu.uci.ics.jung.visualization.Layer;
import edu.uci.ics.jung.visualization.RenderContext;
import edu.uci.ics.jung.visualization.VisualizationViewer;
import edu.uci.ics.jung.visualization.picking.ViewLensShapePickSupport;
import edu.uci.ics.jung.visualization.renderers.BasicRenderer;
import edu.uci.ics.jung.visualization.renderers.Renderer;
import edu.uci.ics.jung.visualization.transform.shape.GraphicsDecorator;
import edu.uci.ics.jung.visualization.transform.shape.TransformingGraphics;
/**
 * A class to make it easy to add a Perspective projection
 * to a jung graph application. See PerspectiveTransformerDemo
 * for an example of how to use it.
 * 
 * @author Tom Nelson
 */
public class PerspectiveImageLensSupport extends AbstractPerspectiveTransformSupport {
    
    protected RenderContext renderContext;
    protected GraphicsDecorator lensGraphicsDecorator;
    protected GraphicsDecorator savedGraphicsDecorator;
    protected Renderer renderer;
    protected Renderer transformingRenderer;
	protected GraphElementAccessor pickSupport;
    
    static final String instructions = "";
    
    /**
     * @param vv the VisualizationViewer to work on
     */
    public PerspectiveImageLensSupport(VisualizationViewer vv) {
        super(vv);
        this.renderContext = vv.getRenderContext();
        this.pickSupport = renderContext.getPickSupport();
        this.renderer = vv.getRenderer();
        this.transformingRenderer = new BasicRenderer();
        this.perspectiveTransformer = 
            new PerspectiveShapeTransformer(new PerspectiveTransform(), vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW));
        this.transformingRenderer.setVertexRenderer(new TransformingImageVertexIconRenderer());
        this.lensGraphicsDecorator = new TransformingGraphics(perspectiveTransformer);
        this.savedGraphicsDecorator = renderContext.getGraphicsContext();

        this.renderer = vv.getRenderer();
    }
    
    public void activate() {
        lens = new Lens(perspectiveTransformer, vv.getSize());
        renderContext.setPickSupport(new ViewLensShapePickSupport(vv));
        vv.getRenderContext().getMultiLayerTransformer().setTransformer(Layer.VIEW, perspectiveTransformer);
        vv.getRenderContext().setGraphicsContext(lensGraphicsDecorator);
        vv.setRenderer(transformingRenderer);
        vv.addPreRenderPaintable(lens);
        vv.setToolTipText(instructions);
        vv.repaint();
    }
    
    public void deactivate() {
    	renderContext.setPickSupport(pickSupport);
        vv.getRenderContext().getMultiLayerTransformer().setTransformer(Layer.VIEW, perspectiveTransformer.getDelegate());
        vv.removePreRenderPaintable(lens);
        vv.getRenderContext().setGraphicsContext(savedGraphicsDecorator);
        vv.setRenderer(renderer);
        vv.setToolTipText(defaultToolTipText);
        vv.repaint();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy