Release 1.0  No Copyright 1992 by David Stes, No Rights Reserved
You Can Contact Me At : david stes, hoge meerheuvel 5, 2960 brecht BELGIUM  (stes@cage.rug.ac.be)
Please Do Not Make Serious Use Of This Object

CubeCell

INHERITS FROM	ActionCell:Cell:Object

DECLARED IN	"CubeCell.h"

CLASS DESCRIPTION

CubeCells do the necessary drawing and mouse-tracking to implement Cube Controls.

INSTANCE VARIABLES

Inherited from Object	Class	isa;

Inherited from Cell	char	*contents;
id	support;
struct _cFlags1	cFlags1;
struct _cFlags2	cFlags2;

Inherited from ActionCell	int	tag;
id	target;
SEL	action;

Declared in CubeCell	float	mat[3][3];

mat 	The current transformation matrix for the cube
	(this is a matrix with determinant +1)

METHOD TYPES

Initializing a new CubeCell	- init

Setting CubeCell Value	- reset
- setmatrix:
- getmatrix:
- rotate::

Displaying	± calcCellSize:inRect:
	± drawcube
- drawInside:inView: 

Tracking the Mouse	- continueTracking:at:inView:
- startTrackingAt:inView: 

Archiving	- read: 
- write:

CLASS METHODS

(none)

INSTANCE METHODS

calcCellSize:inRect:
- calcCellSize:(NXSize *)theSize
inRect:(const NXRect *)aRect

Returns aRect->size by reference.

continueTracking:at:inView:
- (BOOL)continueTracking:(const NXPoint *)lastPoint
at:(const NXPoint *)currentPoint
inView:controlView

Continues tracking by moving the cube to currentPoint.

drawcube
- drawcube

Actual drawing method.

drawInside:inView:
- drawInside:(const NXRect *)cellframe inView:controlView

This method overrides the inherited drawInside method.  It simply invokes drawcube.

init
- init

Initalize and reset.

getmatrix:
- getmatrix:(float *)get

Copy the transformation matrix of the cube into the get matrix.

read:
- read:(NXTypedStream *)stream

Reads the CubeCell from the typed stream stream.  Returns self.

reset
- reset

Set the transformation matrix to the identity matrix.

rotate
- rotate:(float)ph : (float)th

Multiply the transformation matrix to the left with the matrix

	{cos(th)*cos(ph),-sin(th)*cos(ph),-sin(ph)}
	{sin(th)                  , cos(th)                 ,            0}
	{cos(th)*sin(ph) ,-sin(th)*sin(ph)  ,cos(ph)}
	
,ie. rotate by these amounts.  ph and th should be in ]-p,+p[ and [0,2p[ respectively.

setmatrix:
- setmatrix:(float *)set

Copy the set matrix into the transformation matrix of the cube.

startTrackingAt:inView:
- (BOOL)startTrackingAt:(const NXPoint *)startPoint inView:controlView

Begins a tracking session.  Always returns YES.

write:
- write:(NXTypedStream *)stream

Writes the receiving CubeCell to the typed stream stream and returns self.