package graphics.graph;
import cutils.putils.ClassPathUtils;
import java.io.File;
import java.util.Vector;
public class Nodes {
private Vector nodeVector = new Vector();
public Node getRandomNode() {
Node n = getNode(getRandomNodeNumber());
return n;
}
private int getRandomNodeNumber() {
return (int) (Math.random() * getNumberOfNodes());
}
public Node getNode(int i) {
return (Node) nodeVector.elementAt(i);
}
int addNode(String lbl) {
Class c = null;
try {
c = Class.forName(lbl);
} catch (ClassNotFoundException cnfe) {
return addNodeModified(lbl);
}
Node n = new Node(lbl, c);
n.setX(50 + 380 * Math.random());
n.setY(50 + 380 * Math.random());
nodeVector.addElement(n);
return nodeVector.size() - 1;
}
int addNodeModified(String lbl) {
Class c = null;
String className = ClassPathUtils.classFileToClassName(new File(lbl));
try {
c = Class.forName(className);
} catch (ClassNotFoundException cnfe) {
System.out.println(
"graphics.graph.Nodes.addNodeModified; can't find class:" + lbl);
}
Node n = new Node(lbl, c);
n.setX(50 + 380 * Math.random());
n.setY(50 + 380 * Math.random());
nodeVector.addElement(n);
return nodeVector.size() - 1;
}
public int getNumberOfNodes() {
return nodeVector.size();
}
public void preturbJRelativetoI(int i, Node n1) {
double dx = 0;
double dy = 0;
for (int j = 0; j < getNumberOfNodes(); j++) {
if (i == j) continue;
Node n2 = getNode(j);
double vx = n1.getX() - n2.getX();
double vy = n1.getY() - n2.getY();
double len = vx * vx + vy * vy;
if (len < 100 * 100) {
dx += vx / len;
dy += vy / len;
}
}
double dlen = dx * dx + dy * dy;
int interNodePixelSpread = 10; if (dlen > 0) {
dlen = Math.sqrt(dlen) / interNodePixelSpread;
n1.setDx(n1.getDx() + dx / dlen);
n1.setDy(n1.getDy() + dy / dlen);
}
}
public Node[] getFixedNodes() {
Vector v = new Vector();
for (int i = 0; i < getNumberOfNodes(); i++)
if (getNode(i).isFixed())
v.addElement(getNode(i));
Node na[] = new Node[v.size()];
v.copyInto(na);
return na;
}
int findNode(String lbl) {
for (int i = 0; i < getNumberOfNodes(); i++) {
if (getNode(i).getLbl().equals(lbl))
return i;
}
return addNode(lbl);
}
}