Unidraw
Unidraw is a general C++ framework for creating custom
graphical editing applications, implemented on top of the InterViews library. John Vlissides' thesis
Generalized Graphical Object Editing (technical report
CSL-TR-90-427, Stanford University, send e-mail to
schulman@shasta.stanford.edu ) describes the basic ideas behind
Unidraw; we recommend reading 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 co-authored two 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