/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package automenta.spacenet.run.old;
import automenta.spacenet.run.DemoDefaults;
import automenta.spacenet.var.graph.map.ScalarGraphMap;
import automenta.spacenet.space.geom.graph.arrange.forcedirect.ForceDirectedParametersEditWindow;
import automenta.spacenet.space.Space;
import automenta.spacenet.space.geom.Box;
import automenta.spacenet.space.geom.Line3D;
import automenta.spacenet.space.geom.Rect;
import automenta.spacenet.space.geom.Rect.RectShape;
import automenta.spacenet.space.geom.graph.GraphBox;
import automenta.spacenet.space.geom.graph.GraphBoxBuilder;
import automenta.spacenet.space.geom.graph.arrange.forcedirect.ForceDirecting;
import automenta.spacenet.space.geom.graph.arrange.forcedirect.ForceDirecting.ForceDirectedParameters;
import automenta.spacenet.space.widget.PanningDragRect;
import automenta.spacenet.var.vector.V3;
import automenta.spacenet.var.graph.MemGraph;
import com.ardor3d.math.Vector3;
/**
* displays a 2D graph layout in a panel with controls
*/
public class GraphRect extends Rect {
private final ScalarGraphMap nodeAttention;
private final ForceDirectedParameters params;
public GraphRect(final MemGraph graph, double bias, double size) {
super(RectShape.Empty);
V3 boundsMax = new V3(size, size, 0.05);
params = new ForceDirectedParameters(boundsMax, 0.03, 0.001, 0.25);
double updatePeriod = 0.15;
double interpPeriod = 0.0;
double interpSpeed = 0.25;
int substeps = 8;
nodeAttention = new ScalarGraphMap(graph, bias);
GraphBoxBuilder builder = new DefaultGraphBuilder();
ForceDirecting arranger = new ForceDirecting(params, updatePeriod, substeps, interpSpeed) {
@Override
protected void updateEdge(Object e, Space s) {
super.updateEdge(e, s);
Object fromNode = graph.getIncidentVertices(e).get(0);
Object toNode = graph.getIncidentVertices(e).get(1);
double rad = (nodeAttention.value(fromNode) + nodeAttention.value(toNode)) / 2.0;
rad *= 0.1;
Line3D l = (Line3D) s;
l.getRadius().set(rad);
}
@Override
protected void updateNode(Object n, Box nBox, Vector3 nextSize) {
super.updateNode(n, nBox, nextSize);
double x = nodeAttention.value(n);
double y = x;
double z = x;
nextSize.set(x, y, z);
}
};
GraphBox gb = add(new GraphBox(graph, builder, arranger));
gb.moveDZ(0.1);
add(new PanningDragRect().scale(size, size).moveDZ(-0.1));
add(new ForceDirectedParametersEditWindow(params, DemoDefaults.font)).move(-1, 0, 0);
}
public ScalarGraphMap getNodeAttention() {
return nodeAttention;
}
}