Piccolo.NET: A Scalable Structured Graphics Toolkit Ben Bederson University of Maryland Human-Computer Interaction Lab Computer Science Department Piccolo.NET: What is it? Toolkit that supports: structured canvas of graphical objects hierarchical scenegraph model creation of “controls” for use within Windows Forms Supports 2D object-oriented graphics hierarchies (transformation, transparency, etc.) animation, event handling cameras, layers, views efficiency mechanisms Missing structure that relies on underlying renderer GDI+, Direct3D, OpenGL, Java2D, etc. => Open, Extensible and Efficient University of Maryland Piccolo.NET Human-Computer Interaction Lab What Is It Good For? => Structured graphics Custom interaction Zoomable User Interfaces Gentleware.com - Poseidon Demo PaperLens – Microsoft Research University of Maryland Piccolo.NET Human-Computer Interaction Lab What Is It Good For? Structured graphics => Custom interaction Zoomable User Interfaces Demo International Children’s Digital Library www.icdlbooks.org This Presentation Tool University of Maryland Range Slider Piccolo.NET Human-Computer Interaction Lab What Is It Good For? Structured graphics Custom interaction => Zoomable User Interfaces U. Victoria – Ontology Visualization Demo PhotoMesa www.photomesa.com University of Maryland Piccolo.NET Human-Computer Interaction Lab Where Does It Run? Almost everywhere Piccolo.NET PocketPiccolo.NET (C#) .NET for Windows (C#) Compact Framework for Pocket PC Piccolo.Java (Java) for everywhere else University of Maryland Piccolo.NET Human-Computer Interaction Lab How Does It Work? “Monolithic” design Simple class hierarchy Simple runtime structure Utilities for easy startup piccolo piccolo.nodes PText PNode PRoot PLayer PPath PCamera 1.n PImage using UMD.HCIL.Piccolo; using UMD.HCIL.Piccolo.Nodes; using UMD.HCIL.PiccoloX; Class Hierarchy PRoot public class PHelloWorld : PForm { public override void Initialize() { PText text = new PText("Hello World!"); Canvas.Layer.AddChild(text); } static void Main() { Code new PHelloWorld(); } } University of Maryland Piccolo.NET PLayer PNode PText PCamera PImage PPath Typical run-time structure Human-Computer Interaction Lab What Does It Do? Let’s look at the “Feature” demos: Demo University of Maryland Piccolo.NET Human-Computer Interaction Lab Bigger Example: GraphEditor Nodes and Edges Highlightable Draggable Approach: PRoot Structure of objects Relate nodes & edges Event handlers Code University of Maryland Piccolo.NET PLayer PNode PCamera PNode Edges Nodes PPath PPath PPath PPath PPath PPath PPath PPath PPath PPath Human-Computer Interaction Lab This Presentation Tool Similar structure to GraphEditor: Scenegraph Event handlers But this time: Hierarchical transforms Animation PRoot PLayer PCamera Slide Bar PNode Slides Current Slide Indicator PMultiSizeImage PMultiSizeImage PMultiSizeImage PMultiSizeImage PMultiSizeImage University of Maryland Piccolo.NET PImage Human-Computer Interaction Lab PocketPiccolo.NET Same great taste – less filling! Essentially identical except for: Lower quality rendering No graphical paths or transparency No rotation Poorer performance Still all the cool stuff: Hierarchical, transformable objects Animation Event handling Efficiency mechanisms University of Maryland Piccolo.NET Demo Human-Computer Interaction Lab History Lesson – ZUI Toolkits Spatial Data Management System (SDMS): Donelson, MIT 1978 – SDMS Tour de force Ubiquitous computing ZUIs Novel input devices Totally specialized system University of Maryland Piccolo.NET Human-Computer Interaction Lab History Lesson – ZUI Toolkits Pad: Perlin, NYU 1993 – Pad Ran on Sun 2 Written in C X Graphics Jump-zoom, B&W Impressively fast Moderately extensible University of Maryland Piccolo.NET Human-Computer Interaction Lab History Lesson – ZUI Toolkits Pad++: Bederson, UNM 1994 – Pad++ Designed for prototyping Used C++ and Tcl/Tk and X or OpenGL graphics Smooth zooming Full color Bitmaps and vector objects Didn’t scale up well The API was defined in Tcl and the C++ code was efficient, but messy… [Bederson & Meyer - SPE 1998] University of Maryland Piccolo.NET Human-Computer Interaction Lab History Lesson – ZUI Toolkits Jazz: Bederson, UMD 1998 – Jazz Wanted ability to build “serious” applications Moved to Java and object-oriented design Inspired by 3D graphics: We built “polylithic” scenegraph Different than “monolithic” GUI toolkits Polylithic Monolithic Node Node Rectangle Fade Rectangle Polylithic Monolithic Root Root FadeRectangle Fade Rectangle University of Maryland Fade ... Fade Rectangle ... Rectangle Piccolo.NET FadeRectangle FadeRectangle ... FadeRectangle Human-Computer Interaction Lab Polylithic Potential Simpler objects, easier to maintain Decoupled objects, easier to extend More run-time control Could better support design environments But … More objects to manage Introduced “editor” to manage object chains Still not good enough for app programmers University of Maryland Piccolo.NET Human-Computer Interaction Lab History Lesson – ZUI Toolkits Piccolo: Bederson, UMD 2003 – Piccolo Decided app builder more important than toolkit builder Added support for C# and Pocket PC Went back to “monolithic”, but OO design Finally happy This is our “last” toolkit Now have commercial apps being built using Piccolo University of Maryland Piccolo.NET Human-Computer Interaction Lab How Do Toolkits Compare? Tough comparison – many design differences aside from polylithic / monolithic architectures Did case studies and a performance analysis DateLens www.datelens.com DateLens Mockup Piccolo.dll [120 kb] PiccoloX.dll [68 kb] University of Maryland Custom Scene render time 1.5 msec Lines of Code 272 lines Class file size 10.4 kbytes Memory usage 7.5 k (484k) our code (full application) Piccolo.NET Piccolo 2.1 msec 171 lines 10.4 kbytes 8.0 k (516k) Jazz 2.2 msec 219 lines 13.2 kbytes 10.2 k (535k) Human-Computer Interaction Lab Performance Analysis Task Custom Scene graph Jazz Scene graph Overhead Overhead 10,000 rectangles 265.0 msec 270.3 msec 2 % 282.8 msec 7 % 1,000 groups of 273.4 msec 3 % 281.2 msec 6 % 10 rectangles 100 groups of 267.2 msec 1 % 281.3 msec 6 % 10 groups of 10 rectangles Scenegraph 10 groups of 270.4 msec 2 % 278.1 msec 5 % 10 groups of manipulation speed 10 groups of 10 rectangles Task Piccolo Jazz 10,000 rectangles Rendering Speed Build 10,000 nodes 16.0 msec 219.0 msec Translate 10,000 nodes 0.4 msec 23.5 msec Remove 10,000 nodes 5.3 msec 5.3 msec 1,000 x 10 rects Build 10,000 nodes 16.0 msec 218.0 msec Translate 10,000 nodes 0.4 msec 50.8 msec Remove 10,000 nodes 5.3 msec 5.3 msec 100 x 10 x 10 rects Build 10,000 nodes 15.0 msec 226.5 msec Translate 10,000 nodes 0.4 msec 62.5 msec [Bederson, Grosjean, Meyer - TSE 2004] Remove 10,000 nodes 5.0 msec 10.6 msec 10 x 10 x 10 x 10 rects Build 10,000 nodes 16.0 msec 226.5 msec Translate 10,000 nodes 0.4 msec 82.3 msec Remove 10,000 nodes 5.0 msec 10.3 msec University of Maryland Piccolo Piccolo.NET Human-Computer Interaction Lab Architectural Reflections Toolkits are usually worth their weight Polylithic and Monolithic each have merits Similar performance and code sizes Base arch. on expected life cycle More programmer oriented => monolithic More design program oriented => polylithic University of Maryland Piccolo.NET Human-Computer Interaction Lab Language Reflections: Java vs. C# Languages C# “usability” advances important for us: properties, events, indexers, foreach, using, attributes Libraries Similar, but multiplatform has significant cost Platform-specific feature use common Demo Java tortured its APIs with backwards compatibility IDEs Eclipse: Free, refactoring support, pluggable, rapid changes VS.NET: Expensive, but fast, form designer, integrated device emulator, and cheap for academics Platforms Multiplatform required for UMD’s required CS courses But C# is used in some senior/grad courses University of Maryland Piccolo.NET Human-Computer Interaction Lab Conclusions / Directions Are toolkits beneficial? => Clearly yes (sometimes) Does zooming work? Is animation helpful? Good small representations needed Animation helps maintain object constancy Understand domain and users Funded by: Microsoft Initially by: DARPA NSF Piccolo’s Future: Finish website, tutorials, etc. Hook up to other renderers (Direct3D, OpenGL) Build more apps! www.cs.umd.edu/hcil/piccolo University of Maryland Piccolo.NET Human-Computer Interaction Lab