Java tutorial
/* * 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.visualization3d; import javax.media.j3d.Appearance; import javax.media.j3d.LineArray; import javax.media.j3d.Material; import javax.media.j3d.Node; import javax.media.j3d.Shape3D; import javax.vecmath.Color3f; import javax.vecmath.Point3f; import org.apache.commons.collections15.Transformer; import org.apache.commons.collections15.functors.ConstantTransformer; import com.sun.j3d.utils.geometry.Box; import com.sun.j3d.utils.geometry.Cylinder; import com.sun.j3d.utils.geometry.Sphere; import edu.uci.ics.jung.graph.Graph; import edu.uci.ics.jung.graph.util.Context; import edu.uci.ics.jung.visualization.picking.PickedState; /** */ @SuppressWarnings("unchecked") public class PluggableRenderContext<V, E> implements RenderContext<V, E> { protected Transformer<E, Appearance> edgeAppearanceTransformer; protected Transformer<Context<Graph<V, E>, E>, Node> edgeShapeTransformer; protected PickedState<E> pickedEdgeState; protected PickedState<V> pickedVertexState; protected Transformer<V, Appearance> vertexAppearanceTransformer; protected Transformer<V, String> vertexStringer = new ConstantTransformer(null); protected Transformer<V, Node> vertexShapeTransformer; public PluggableRenderContext() { super(); Color3f lightGray = new Color3f(0.7f, 0.7f, 0.7f); Color3f black = new Color3f(0, 0, 0); Color3f white = new Color3f(1, 1, 1); Color3f gray = new Color3f(.2f, .2f, .2f); Color3f red = new Color3f(1, 0, 0); Color3f yellow = new Color3f(0, 1, 1); Material lightGrayMaterial = new Material(lightGray, black, lightGray, white, 100.0f); Material blackMaterial = new Material(lightGray, black, black, lightGray, 10.0f); Material whiteMaterial = new Material(white, white, white, white, 100.0f); Material grayMaterial = new Material(gray, black, gray, gray, 100.0f); Material redMaterial = new Material(red, black, red, red, 100.0f); Material yellowMaterial = new Material(yellow, black, yellow, yellow, 100.0f); final Appearance lightGrayLook = new Appearance(); lightGrayLook.setMaterial(lightGrayMaterial); Appearance blackLook = new Appearance(); blackLook.setMaterial(blackMaterial); Appearance whiteLook = new Appearance(); whiteLook.setMaterial(whiteMaterial); Appearance grayLook = new Appearance(); grayLook.setMaterial(grayMaterial); // grayLook.setCapability(Appearance.ALLOW_MATERIAL_READ); // grayLook.setCapability(Appearance.ALLOW_MATERIAL_WRITE); final Appearance redLook = new Appearance(); redLook.setMaterial(redMaterial); final Appearance yellowLook = new Appearance(); yellowLook.setMaterial(yellowMaterial); final Cylinder cylinder = new Cylinder(1, 1, Cylinder.GENERATE_NORMALS | Cylinder.ENABLE_GEOMETRY_PICKING, 26, 26, lightGrayLook); final Sphere sphere = new Sphere(10, Sphere.GENERATE_NORMALS | Sphere.ENABLE_GEOMETRY_PICKING, redLook); final Box box = new Box(10, 10, 10, Box.GENERATE_NORMALS | Box.ENABLE_GEOMETRY_PICKING, redLook); this.edgeAppearanceTransformer = new ConstantTransformer(lightGrayLook); this.edgeShapeTransformer = new Transformer<Context<Graph<V, E>, E>, Node>() { public Node transform(Context<Graph<V, E>, E> ec) { LineArray lineArray = new LineArray(2, LineArray.COORDINATES | LineArray.COLOR_3); lineArray.setCoordinates(0, new Point3f[] { new Point3f(0, -.5f, 0), new Point3f(0, .5f, 0) }); lineArray.setColor(0, new Color3f(1, 1, 1)); lineArray.setColor(1, new Color3f(1, 1, 1)); Shape3D shape = new Shape3D(); shape.setGeometry(lineArray); return shape; // return new Cylinder(1, 1, // Cylinder.GENERATE_NORMALS | // Cylinder.ENABLE_GEOMETRY_PICKING, // 26, 26, lightGrayLook); } }; this.vertexAppearanceTransformer = new ConstantTransformer(redLook); this.vertexShapeTransformer = new Transformer<V, Node>() { public Node transform(V arg0) { return new Sphere(10, Sphere.GENERATE_NORMALS | Sphere.ENABLE_GEOMETRY_PICKING | Sphere.ENABLE_APPEARANCE_MODIFY, redLook); } }; } public Transformer<E, Appearance> getEdgeAppearanceTransformer() { return edgeAppearanceTransformer; } public Transformer<Context<Graph<V, E>, E>, Node> getEdgeShapeTransformer() { return edgeShapeTransformer; } public PickedState<E> getPickedEdgeState() { return pickedEdgeState; } public PickedState<V> getPickedVertexState() { return pickedVertexState; } public Transformer<V, Appearance> getVertexAppearanceTransformer() { return vertexAppearanceTransformer; } public Transformer<V, Node> getVertexShapeTransformer() { return vertexShapeTransformer; } public Transformer<V, String> getVertexStringer() { return vertexStringer; } public void setEdgeAppearanceTransformer(Transformer<E, Appearance> edgeAppearanceTransformer) { this.edgeAppearanceTransformer = edgeAppearanceTransformer; } public void setEdgeShapeTransformer(Transformer<Context<Graph<V, E>, E>, Node> edgeShapeTransformer) { this.edgeShapeTransformer = edgeShapeTransformer; } public void setPickedEdgeState(PickedState<E> pickedEdgeState) { this.pickedEdgeState = pickedEdgeState; } public void setPickedVertexState(PickedState<V> pickedVertexState) { this.pickedVertexState = pickedVertexState; } public void setVertexAppearanceTransformer(Transformer<V, Appearance> vertexAppearanceTransformer) { this.vertexAppearanceTransformer = vertexAppearanceTransformer; } public void setVertexShapeTransformer(Transformer<V, Node> vertexShapeTransformer) { this.vertexShapeTransformer = vertexShapeTransformer; } public void setVertexStringer(Transformer<V, String> vertexStringer) { this.vertexStringer = vertexStringer; } }