[Openmcl-devel] Core Animation demo

Raffael Cavallaro raffaelcavallaro at mac.com
Wed Jul 8 06:30:26 PDT 2009

On Jul 8, 2009, at 1:58 AM, Neil Baylis wrote:

> My project involves managing a large number of layers, and my intent  
> was to define a CLOS layer class to manage them. Each sprite needs  
> to have a unique name so that they can be referred to by constraints  
> for positioning them relative to each other. I haven't decided  
> whether to use the layer container provided by NSView, or to use a  
> separate lisp collection.
> I'm attaching an image of the kind of thing I want to create. I made  
> this image using Inkscape, but I find that rather clumsy to use, and  
> prone to cumulative errors on a large drawing. This is a  
> reproduction of a tiling pattern I saw at a house in Australia  
> recently.

The image you've attached (which is quite striking by the way) seems  
to me to cry out for NSBezierPath.  If you mean to use Core Animation,  
you could have a tile class and a path class. Many tile instances  
could share the same path instance since it is the layer of each tile  
that would be scaled, rotated, transformed, etc. not the bezier path  
itself (if I'm understanding the Apple docs correctly). Ordinarily,  
rotations and other path transforms mutate the NSBezierPath itself,  
but I think Core animation layers are themselves transformed and leave  
the underlying NSBezierPath unchanged. What's really going on is that  
the layer is rendered unmodified and this rendering is used as an  
OpenGL texture which is mapped to an appropriately scaled, rotated,  
and translated polygon. Fill and stroke don't affect the path itself  
of course, only how it is drawn, so each tile sharing the same path  
could also have a different fill and/or stroke color.

Of course you could simply use NSBezier Path alone, just be aware that  
each transform mutates the path itself - for example,  
transformUsingAffineTransform: returns (void) - i.e., it mutates it's  
argument (aka, "the receiver") rather than returning a new,  
transformed path.

warmest regards,


Raffael Cavallaro
raffaelcavallaro at me.com

More information about the Openmcl-devel mailing list