A Shape is a geometrical mesh consisting of vertices that are rendered using a single Shader. It specifies several types of properties:

For example:

+Shape
	render?: []
		shader: @'selflit.acn'
	draw: 'Polygon'
	positions: +Xyzs"
		0.0,  1.0, -1.0,
		1.0,  0.0, -1.0,
		0.0, -1.0, -1.0,
		-1.0,  0.0, -3.0"
	colors: +Colors"
		1.0,  0.0,  0.0, 1.0,
		0.0,  1.0,  0.0, 1.0,
		0.0,  0.0,  1.0, 1.0,
		1.0,  1.0,  1.0, 1.0"

To reuse a shape, subtype it.

Methods

New
Create a new Shape

Instance Properties (see Region)

A shape must specify all vertex attribute properties required by the rendering shader and may also specify its required uniform properties. See Shader for more details.

boundary
TBD - the bounding box, sphere or cylinder for clipping and other purposes
colors
A Colors collection holding the r,g,b,a values of the shape's vertices.
draw
A symbol specifying the graphical primitive to use when rendering the vertices. If not specified, the default is 'Triangles'.
Points
Individual points
Lines
Line segments from vertex pairs
LineStrip
Series of connected line segments
LineLoop
Series of connected line segments, plus one connecting last vertex to first
Triangles
Triangles from vertex triples
TriangleStrip
Connected triangles: 0,1,2 2,1,3 2,3,4 ...
TriangleFan
Connected triangles: 0,1,2 0,2,3 0,3,4 ...
LinesAdjacency
Adjacent line segments for a Geometry Shader
LineStripAdjacency
Adjacent line strips for a Geometry Shader
TrianglesAdjacency
Adjacent triangles for a Geometry Shader
TriangleStripAdjacency
Adjacent triangle strips for a Geometry Shader
Patches
Vertices used in a Tessalation Shader
indices
Integers that hold index values indicating the order to draw the vertices using the 'draw' primitive. Each index value maps to a vertex whose attributes are stored at that position in the vertex properties. This is economical when the shape's vertices are used by multiple faces. If not specified, the vertices are drawn in the order specified in the vertex properties.
normals
An Xyzs collection holding the x,y,z normals for the shape's vertices.
orientation
A Quat specifying the rotation used to orient the shape in its parent's coordinate system. If not specified, no rotation takes place.
origin
The location of this shape's 0,0,0 position in the shape's parent's coordinate system. This can be used to specify where to render this shape within its parent group's space. If not specified, +Xyz(0,0,0) is assumed.
positions
An Xyzs collection holding the x,y,z positions of the shape's vertices.
render?
The method that is performed before rendering the shape. The method should return 'false' if the shape is not to be rendered. This method will have the render context as 'self', enabling the shape to make use of shared uniforms (minimize use of '+' new here).
scale
An Xyz vector specifying how much to re-size the shape's vertices when rendering in the parent group, The default is no scaling: +Xyz(1.,1.,1.)
shader
The shader used when rendering this shape.
transparent
If true, the shape uses translucent colors (their alpha is less than 1). Specifying this is necessary to proper rendering.
uvs
A Uvs collection holding the u,v texture coordinates for the shape's vertices.