Canvas Work I

Here’s an outline on the project I’ve been working on lately. What goes under the work name of Canvas Program is a sort of minimal drawing software, that uses a pre-defined set of geometric basics. The approach is somewhat informed by the shape grammars, although no such functionality is yet implemented.

The program has it’s core functionality more or less in place, but should not be regarded as finished. Actually, the question of it being finished is strictly not important, since it is more of a modifiable toolbox likely to change considerably further on. The program is created in Processing / Java with the Geomerative library, using the neat NetBeans IDE.

What does it do, then? It reads a short text file that stores the instructions for drawing shapes to the canvas. These shapes can then be manipulated by clicking to select them. All functions work both for single and groups of shapes. Multiple shapes can be selected by shift-clicking or by catching them with a “marquee”.


Selected shapes can be dragged around the canvas, rotated and resized. Pressing backspace deletes the selected shape. The hue value and brightness values can also be cycled. If the user right-clicks the canvas while shapes are selected, the shapes are copied at the position of the cursor.

Two or more shapes can be grouped, which means they behave as a single object. A group can consist of other groups, and it can be disbanded or “ungrouped”.


Rotating a group of objects in a satisfactory manner is still an unsolved issue. Grouped objects behave correctly, but when a rotated group is disbanded the group rotation is not retained and the shapes snap back to the unrotated position. Likewise, a specific resizing behaviour for groups is not yet implemented.

Canvas states can be saved and loaded, but these functions are as of yet rather unreliable. A more fundamental limitation is that the currently used format for storing the canvas state doesn’t support groups at all, so grouped configurations cannot be saved or loaded at all.

I am the first to admit that the program is rather trivial, but this is a first step, and most importantly a learning exercise. It is easily modifiable, so it will be useful for
trying out different explorative byroads. As of now, there isn’t any generative component in it’s functionality, but most of the work on the current program has gone into the interface and the visual front-end.

Some things to experiment with further on would be different file systems and different ways of constraining the interaction. Now the placement of shapes is governed by a grid, but this could be avoided by enabling a shape to be “aware” of proximity to other shapes. The placing of shapes could also be more Tangram-like, by disallowing overlapping shapes. I also have an notion of combining it with sound analyzer input and adding keyboard commands, which could be a way to create a tool for live visualisations.



Post a Comment

Required fields are marked *

%d bloggers like this: