Artwork.tioga
Picture making systems
Illustrator: related to drawing; making shapes
Compostion: related to formating; combining shapes to make pages
Artwork operations
TiogaArtwork
Tioga artwork is a tree structure of nodes. Each level in the tree has a transformation associated with it. The leaves of the tree are: paths, images and arbitrary JaM programs. Each node has a format which encodes the style. The style properties for paths are:
filled, outlined or both
linewidth
line color
area color
Text is represented as a regular Tioga node. However, the style properties for text have been extended to include:
centered, left-flush, right-flush with respect to a point
top-aligned, base-line-aligned, or bottom-aligned
rotated
You can change the style, change the nesting, or edit the text. You can include arbitrary pictures through the JaM program facility. (Note that JaM programs can call Cedar programs. ie. the parametric mapping stuff).
Graphical Style
I want to use the Tioga mechanism, so Artwork nodes will have format names.
Besides the existing line parameters we could consider:
arrowheads
dash patterns
Interpress end conditions
general mapped patterns
...
Besides the existing area parameters we could consider:
shaded colors
computed textures
sampled textures
...
The existing text styles barely work. Besides making them more robust we could consider:
condensed
expanded
backslant
oblique
circular? curves?
...
There are currently no image styles. We could consider:
screens
tints (duotones)
Miscellaneous
drop shadows
offset shadows
Composition
Composition operations are Move, Copy, Delete, Crop, Scale. These simple names hide a number of more complicated issues.
Delete: Selection, objects and instances.
Move and Copy: Positioning, coordinate systems, semantics such as "center, left edge, etc."
Crop: Clipping region. Rectangles only? How big is the graphics "frame". If you change the frame size, what moves?
Scale: Optical or geometric (ie, do the line width scale). What moves?
Artwork structure
Tioga Nodes and Items
A place in a document where pictures occure is called a graphics frame. The first node in the frame is a box item node with a $Graphics ItemClass. Such and item node has the following structure:
item.next --Ref to next node at this level. Probably the following paragraph
item.date --frame related data
item.contents --Ref to objects in the frame. Usually basic nodes. May be items or branches.
Item Data
The data for a graphics frame includes: frame size, clipping region (if other than frame size). Other global information.
Contents
The contents field of a graphics frame points to a tree of nodes. Basic nodes are graphics objects such as paths, images, and clipping regions. Basic nodes may be nested. Basic nodes have the following structure:
basic.next --Ref to next node at this level. Another object in the frame
basic.contents --Ref to "children" of this basic node, if any
basic.data --actual representation for the graphics
The basic.data for all objects includes a bounding box and a transformation. All objects are defined relative to their bounding box.
I can think of the following basic classes. This will undoubtedly expand as I work on this project
Simple objects: paths, images, and clipping regions. Data is primitive types, contents is NIL.
Symbols: nested objects. Data is list of instances, contents is objects in the symbol
Symbol instances: Contents is NIL. Data is a ref to a symbol
The contents of a graphics frame may include text items. I assume that text may include branches, so I should deal with that as well.
Artwork representation
To solve the problem of laying out arbitrary graphics in a tioga document, an interpreted text representation is probably the way to go. JaMGraphics is one such representation, and I'm inclined to start with it. It has all the advantages mentioned above in the TiogaArtwork section.
I would use GraphicsLists as accelerators for the display of interpreted objects. A GraphicsList is a list of encoded calls to Graphics. It is optimised for fast refresh. It is now easy to generate a GraphicsList from JaMGraphics.
Interpress is another interpreted representation. It can be either text or encoded. An Interpress master is a sequence of bodies. A body is a list of operators. All the style properties are bound. Since there are operators for linear transformations in Interpress, it would be possible to use the Artwork structure to provide an interactive "InterpressEdit" facility. There is no clipping defined in the current version of Interpress, so cropping is a problem. It may be possible to break out the common operators, such as MASKSTROKE, MASKFILL and SHOW, as objects so it would be possible to manipulate pieces of the picture. Interpress also has a symbol facility.
Illustrators
Path editor
SIL
Star Graphics
Griffin