// An example of Force Directed Graphing using OO parent/child relationships // by Nathan Ramella (nar@hush.com) // // Original source used from GraphToy2 found at http://www.cricketschirping.com/weblog/?p=966 // by banksean import controlP5.*; Graph g; Node root; Smoother3D centroid; ControlP5 controlP5; int button = 0; void setup() { size(800,600); controlP5 = new ControlP5(this); controlP5.addButton("Click Me",0,20,20,100,20).setId(1); g = new Graph(); fill(0); smooth(); frameRate(30); Node root = (Node) g.getRoot(); root.setPosition((float)width/2, (float)height/2, 0.0); root.addChild("blah"); root.addChild("faaaaa"); root.growRandom(2); root.growRandom(1); growRandom(3); } void controlEvent(ControlEvent theEvent) { growRandom(3); } void growRandom(int generations) { ArrayList nodes = new ArrayList(); nodes.addAll(g.getAllNodes(g.root)); for (int i = 0; i < generations; i++) { Collections.shuffle(nodes, new Random()); Node n = (Node) nodes.get(0); if (n != null) { n.growRandom(3); } } } void draw() { g.tick(); background(0); g.draw(); } int mx() { return mouseX; } int my() { return mouseY; } public Node getSelectedNode() { return g.selectedNode; } public Node getHoverNode() { return g.hoverNode; } public void setDragNode(Node n) { if (g.dragNode != null) { g.dragNode.setDragging(false); } g.dragNode = n; if (n != null) n.setDragging(true); } public Node getDragNode() { return g.dragNode; } public ArrayList getNodes() { return g.getAllNodes(root); } /* public void setHoverNode(Node n) { if (g.hoverNode != null) { g.hoverNode.setHovering(false); } g.hoverNode = n; if (n != null) { n.setHovering(true); } } */ public void setSelectedNode(Node n) { if (g.selectedNode != null) { g.selectedNode.setSelected(false); } g.selectedNode = n; if (n != null) n.setSelected(true); } void mousePressed() { ArrayList nodes = new ArrayList(); nodes.addAll(g.getAllNodes(g.root)); if (mouseButton == LEFT) { for (Iterator it=nodes.iterator(); it.hasNext(); ) { Node n = (Node) it.next(); if (n.containsPoint(mx(), my())) { setSelectedNode(n); setDragNode(n); return; } } } if (mouseButton == RIGHT) { for (Iterator it=nodes.iterator(); it.hasNext(); ) { Node n = (Node) it.next(); if (n.containsPoint(mx(), my())) { n.flip(); for (Iterator subit=n.getChildren().iterator(); subit.hasNext(); ) { Node m = (Node) subit.next(); //println(m.getLabel()); m.flip(); } } } } } void mouseMoved() { if (g.getDragNode() == null) { g.unsetHoverNode(); for(int i=0; i