Scene Graphs and Piccolo
SMD158 Interactive Systems Spring 2005
Overview
- Zoomable user interfaces (ZUI’s)
- Scene graphs
- Piccolo
Scene Graphs and Piccolo SMD158 Interactive Systems Spring 2005 - - PDF document
Scene Graphs and Piccolo SMD158 Interactive Systems Spring 2005 Overview Zoomable user interfaces (ZUIs) Scene graphs Piccolo Zoomable User Interfaces User Interface Development In the early days, user interfaces were
Setup info: http://www.cs.umd.edu/hcil/piccolo/learn/get-started.shtml
public class PiccoloExample extends PFrame { public void initialize() { PNode aNode = new PText("Hello World!"); aNode.translate(100, 100); aNode.rotate(3.14); getCanvas().getLayer().addChild(aNode); } public static void main(String[] args) { new PiccoloExample(); } }
public class LayoutNode extends PNode { public void layoutChildren() { double xOffset = 0; double yOffset = 0; Iterator i = getChildrenIterator(); while (i.hasNext()) { PNode each = (PNode) i.next(); each.setOffset(xOffset - each.getX(), yOffset); xOffset += each.getFullBoundsReference().getWidth(); } } }
public class NodeListenerExample extends PFrame { public void initialize() { // Create first rectangle node PNode node1 = PPath.createRectangle(0, 0, 100, 100); PNode text1 = new PText("Text"); PNode text2 = new PText("More text"); text1.translate(5, 0); text2.translate(5, 20); node1.addChild(text1); node1.addChild(text2); node1.setChildrenPickable(false);
// Create 3 more identical nodes PNode node2 = (PNode) node1.clone(); PNode node3 = (PNode) node1.clone(); PNode node4 = (PNode) node1.clone(); // Attach event handlers directly to the nodes node1.addInputEventListener(new Handler(Color.BLUE)); node2.addInputEventListener(new Handler(Color.GREEN)); node3.addInputEventListener(new Handler(Color.YELLOW)); node4.addInputEventListener(new Handler(Color.RED)); // Give the nodes positions on the canvas node1.translate(50, 50); node2.translate(200,50); node3.translate(50, 200); node4.translate(200, 200); // Add the nodes to the canvas getCanvas().getLayer().addChild(node1); getCanvas().getLayer().addChild(node2); getCanvas().getLayer().addChild(node3); getCanvas().getLayer().addChild(node4); } public static void main(String[] args) { new NodeListenerExample(); } } class Handler extends PBasicInputEventHandler { Color color; public Handler(Color c) { color = c; } public void mousePressed(PInputEvent event) { event.getPickedNode().setPaint(color); event.getInputManager().setKeyboardFocus(event.getPath()); event.setHandled(true); }
public void mouseDragged(PInputEvent event) { PNode aNode = event.getPickedNode(); PDimension delta = event.getDeltaRelativeTo(aNode); aNode.translate(delta.width, delta.height); event.setHandled(true); } public void mouseReleased(PInputEvent event) { event.getPickedNode().setPaint(Color.WHITE); event.setHandled(true); }
public void keyPressed(PInputEvent event) { PNode node = event.getPickedNode(); switch (event.getKeyCode()) { case KeyEvent.VK_UP: node.translate(0, -10f); break; case KeyEvent.VK_DOWN: node.translate(0, 10f); break; case KeyEvent.VK_LEFT: node.translate(-10f, 0); break; case KeyEvent.VK_RIGHT: node.translate(10f, 0); break; } } }