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
firstname.lastname@example.org ) 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
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
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.
- 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
- multiple views/viewers
- command history undo/redo
- tool manipulators and rubberbanding
- viewer zoom/pan
Within ivtools and
there are several other libraries (and sample programs) layered on
top of the basic Unidraw (and idraw) capabilities. Other uses of Unidraw here
vhclmaps layers for building
back to ivtools technical info