package org.infoobject.magicmap.visualization.layout; import edu.uci.ics.jung.visualization.MagicSpringLayout; import edu.uci.ics.jung.graph.Graph; import edu.uci.ics.jung.graph.Vertex; import edu.uci.ics.jung.graph.Edge; import net.sf.magicmap.client.model.location.jung.MagicRepulsionFunction; import net.sf.magicmap.client.model.location.jung.JungNodePlacer; import net.sf.magicmap.client.model.node.Node; import java.util.Set; /** * <p> * Springlayout.... * </p> * <p> * DETAILS * </p> * * @author Jan Friderici * Date: 09.03.2008 * Time: 10:34:23 */ public class AssociationSpringLayout extends MagicSpringLayout { /** * Constructor for a SpringLayout for a raw graph with associated * dimension--the input knows how big the graph is. Defaults to the unit * length function. * @param g he graph */ public AssociationSpringLayout(Graph g) { this(g,UNITLENGTHFUNCTION, new MagicRepulsionFunction()); } /** * Constructor for a SpringLayout for a raw graph with associated component. * * @param g the input Graph * @param f the length function * @param r the repulsion function */ public AssociationSpringLayout(Graph g, LengthFunction f, RepulsionFunction r) { super(g, f, r); } // TH: /** * Returns the x coordinate of the vertex from the Coordiantes object. * * @see edu.uci.ics.jung.visualization.Layout#getX(edu.uci.ics.jung.graph.Vertex) */ @Override public void setX(Vertex v, double x) { super.setX(v, x); //To change body of overridden methods use File | PluginSettings | File Templates. //final Node node = (Node) v.getUserDatum(JungNodePlacer.NODE_KEY); //node.setInformation((int)x,node.getY(), node.getZ()); } /** * Returns the y coordinate of the vertex from the Coordiantes object. * * @see edu.uci.ics.jung.visualization.Layout#getX(edu.uci.ics.jung.graph.Vertex) */ @Override public void setY(Vertex v, double y) { super.setY(v, y); //To change body of overridden methods use File | PluginSettings | File Templates. //final Node node = (Node) v.getUserDatum(JungNodePlacer.NODE_KEY); //node.setInformation(node.getX(), (int)y, node.getZ()); } @SuppressWarnings({"unchecked"}) @Override public Set<Edge> getVisibleEdges() { return super.getVisibleEdges(); } @SuppressWarnings({"unchecked"}) @Override public Set<Vertex> getVisibleVertices() { return super.getVisibleVertices(); } @SuppressWarnings({"unchecked"}) protected void moveNodes() { super.moveNodes(); synchronized (getCurrentSize()) { Set<Vertex> vs = getVisibleVertices(); Vertex[] vertieces = vs.toArray(new Vertex[vs.size()]); for (Vertex v:vertieces) { if (isNotCalculatedVertx(v)) { continue; } Node n = (Node) v.getUserDatum(JungNodePlacer.NODE_KEY); if (!dontMove(v)) { n.setPositionSilent((int) getX(v), (int) getY(v), n.getZ()); } else { super.setX(v, n.getX()); super.setY(v, n.getY()); } } } } }