Unidraw
Unidraw is a general C++ framework written by John Vlissides for creating custom
graphical editing applications. It was implemented using the InterViews library. John Vlissides' thesis
Generalized Graphical Object Editing (technical report
CSL-TR-90-427, Stanford University, send e-mail request to
schulman@shasta.stanford.edu ) describes the basic ideas behind
Unidraw; if you are interested look at chapters 1, 3 (skip 3.3), 4 (skip 4.6,
4.7) and 5.1 as an introduction to Unidraw concepts. The InterViews
idraw program is a basic figure
drawing application that shows many of the capabilities of the Unidraw
library. John Vlissides has authored many books on Design
Patterns, and used Unidraw for a lot of the examples. He
periodically writes about Unidraw-derived patterns in his C++ Report Pattern Hatching column.
Vlissides and Linton published a paper in ACM Transactions on Information
Systems called Unidraw: a
framework for building domain-specific graphical editors
online copies:
unidraw.ps,
.gz or
ftp://interviews.stanford.edu/pub/papers/unidraw.ps.Z
Unidraw class man pages
Unidraw auf Deutsch.
HotDraw is a similar environment written in Smalltalk.
Pattern Hatching, a book by John Vlissides on usage of design patterns compiled from his column.
A chapter in this book
is written by Vlissides about Unidraw.
Basic abstractions:
- Components and ComponentViews represent domain-specific
data objects and their corresponding graphical views
- Commands define operations on components and other objects
- Tools support direct manipulation of component views
with the mouse
- External representations provide for save and restore of
components, PostScript rendering, etc.
Structure of a Unidraw application: (thesis page 29)
Unidraw
: top level object
Editor
: contains tools, commands, viewers
Viewer
: displays tree of graphical views
ComponentView
: graphical view of a data object
Component
: wrapper around primitive data object
Catalog
: manage external representations
Other features:
- multiple views/viewers
- command history undo/redo
- tool manipulators and rubberbanding
- selection
- viewer zoom/pan
Within ivtools and
vhclmaps
there are several other libraries (and sample programs) layered on
top of the basic Unidraw (and idraw) capabilities. Other uses of Unidraw here
ivtools layers
vhclmaps layers for building
back to ivtools technical info