edu.uci.ics.jung.visualization3d.EdgeGroup Maven / Gradle / Ivy
/*
* 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.Node;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.AxisAngle4f;
import javax.vecmath.Point3f;
import javax.vecmath.Vector3d;
import javax.vecmath.Vector3f;
/**
*
* @author Tom Nelson - [email protected]
*
*/public class EdgeGroup extends TransformGroup {
E edge;
Node shape;
public EdgeGroup(E edge, Node shape) {
this.edge = edge;
this.shape = shape;
setCapability(TransformGroup.ENABLE_PICK_REPORTING);
// Cylinder cylinder = new Cylinder(radius, 1,
// Cylinder.GENERATE_NORMALS |
// Cylinder.GENERATE_TEXTURE_COORDS |
// Cylinder.ENABLE_GEOMETRY_PICKING,
// 26, 26, look);
Transform3D t = new Transform3D();
t.setTranslation(new Vector3f(0.f, .5f, 0.f));
TransformGroup group = new TransformGroup(t);
group.addChild(shape);
addChild(group);
}
public String toString() { return edge.toString(); }
public void setEndpoints(Point3f p0, Point3f p1) {
// calculate length
float length = p0.distance(p1);
// transform to accumulate values
Transform3D tx = new Transform3D();
// translate so end is at p0
Transform3D p0tx = new Transform3D();
p0tx.setTranslation(new Vector3f(p0.getX(),p0.getY(),p0.getZ()));
// scale so length is dist p0,p1
Transform3D scaletx = new Transform3D();
scaletx.setScale(new Vector3d(1,length,1));
Vector3f yunit = new Vector3f(0,1,0);
Vector3f v = new Vector3f(p1.getX()-p0.getX(), p1.getY()-p0.getY(), p1.getZ()-p0.getZ());
Vector3f cross = new Vector3f();
cross.cross(yunit, v);
// cross is the vector to rotate about
float angle = yunit.angle(v);
Transform3D rot = new Transform3D();
rot.setRotation(new AxisAngle4f(cross.getX(),cross.getY(),cross.getZ(),angle));
tx.mul(rot);
tx.mul(scaletx);
tx.setTranslation(new Vector3f(p0.getX(),p0.getY(),p0.getZ()));
try {
setTransform(tx);
} catch(Exception ex) {
System.err.println("tx = \n"+tx);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy