

The prism is an object generated specifying one or more twodimensional, closed curves in the xz
plane and sweeping them along y axis. These curves are defined by a set of points which are connected by linear,
quadratic, cubic or bezier splines. The syntax for the prism is:
PRISM:
prism
{
[PRISM_ITEMS...] Height_1, Height_2, Number_Of_Points,
<Point_1>, <Point_2>, ... <Point_n>
[ open ] [PRISM_MODIFIERS...]
}
PRISM_ITEM:
linear_spline  quadratic_spline  cubic_spline 
bezier_spline  linear_sweep  conic_sweep
PRISM_MODIFIER:
sturm  OBJECT_MODIFIER
Prism default values:
SPLINE_TYPE : linear_spline
SWEEP_TYPE : linear_sweep
sturm : off
The first items specify the spline type and sweep type. The defaults if none is specified is linear_spline
and linear_sweep . This is followed by two float values Height_1 and Height_2
which are the y coordinates of the top and bottom of the prism. This is followed by a float value specifying the
number of 2D points you will use to define the prism. (This includes all control points needed for quadratic, cubic
and bezier splines). This is followed by the specified number of 2D vectors which define the shape in the xz plane.
The interpretation of the points depends on the spline type. The prism object allows you to use any number of
subprisms inside one prism statement (they are of the same spline and sweep type). Wherever an even number of
subprisms overlaps a hole appears.
Note: you need not have multiple subprisms and they need not overlap as these
examples do.
In the linear_spline the first point specified is the start of the first subprism. The following
points are connected by straight lines. If you specify a value identical to the first point, this closes the subprism
and next point starts a new one. When you specify the value of that subprism's start, then it is closed. Each of the
subprisms has to be closed by repeating the first point of a subprism at the end of the subprism's point sequence.
In this example, there are two rectangular subprisms nested inside each other to create a frame.
prism {
linear_spline
0, 1, 10,
<0,0>, <6,0>, <6,8>, <0,8>, <0,0>, //outer rim
<1,1>, <5,1>, <5,7>, <1,7>, <1,1> //inner rim
}
The last subprism of a linear spline prism is automatically closed  just like the last subpolygon in the polygon
statement  if the first and last point of the subpolygon's point sequence are not the same. This make it very easy
to convert between polygons and prisms. Quadratic, cubic and bezier splines are never automatically closed.
In the quadratic_spline , each subprism needs an additional control point at the beginning of each
subprisms' point sequence to determine the slope at the start of the curve. The first point specified is the control
point which is not actually part of the spline. The second point is the start of the spline. The subprism ends when
this second point is duplicated. The next point is the control point of the next subprism. The point after that is
the first point of the second subprism. Here is an example:
prism {
quadratic_spline
0, 1, 12,
<1,1>, <0,0>, <6,0>, //outer rim; <1,1> is control point and
<6,8>, <0,8>, <0,0>, //<0,0> is first & last point
<2,0>, <1,1>, <5,1>, //inner rim; <2,0> is control point and
<5,7>, <1,7>, <1,1> //<1,1> is first & last point
}
In the cubic_spline , each subprism needs two additional control points  one at the beginning of
each subprisms' point sequence to determine the slope at the start of the curve and one at the end. The first point
specified is the control point which is not actually part of the spline. The second point is the start of the spline.
The subprism ends when this second point is duplicated. The next point is the control point of the end of the first
subprism. Next is the beginning control point of the next subprism. The point after that is the first point of the
second subprism.
Here is an example:
prism {
cubic_spline
0, 1, 14,
<1,1>, <0,0>, <6,0>, //outer rim; First control is <1,1> and
<6,8>, <0,8>, <0,0>, //<0,0> is first & last point.
<1,1>, //Last control of first spline is <1,1>
<2,0>, <1,1>, <5,1>, //inner rim; First control is <2,0> and
<5,7>, <1,7>, <1,1>, //<1,1> is first & last point
<0,2> //Last control of first spline is <0,2>
}
The bezier_spline is an alternate kind of cubic spline. Points 1 and 4 specify the end points of a
segment and points 2 and 3 are control points which specify the slope at the endpoints. Points 2 and 3 do not actually
lie on the spline. They adjust the slope of the spline. If you draw an imaginary line between point 1 and 2, it
represents the slope at point 1. It is a line tangent to the curve at point 1. The greater the distance between 1 and
2, the flatter the curve. With a short tangent the spline can bend more. The same holds true for control point 3 and
endpoint 4. If you want the spline to be smooth between segments, point 3 and 4 on one segment and point 1 and 2 on
the next segment must form a straight line and point 4 of one segment must be the same as point one on the next
segment.
By default linear sweeping is used to create the prism, i.e. the prism's walls are perpendicular to the xzplane
(the size of the curve does not change during the sweep). You can also use conic_sweep that leads to a
prism with conelike walls by scaling the curve down during the sweep.
Like cylinders the prism is normally closed. You can remove the caps on the prism by using the open
keyword. If you do so you should not use it with CSG because the results may get wrong.
For an explanation of the spline concept read the description of the "Lathe"
object. Also see the tutorials on "Lathe Object" and "Prism Object".
The sturm keyword specifies the slower but more accurate Sturmian root solver which may be used with
the cubic or bezier spline prisms if the shape does not render properly. The linear and quadratic spline prisms do not
need the Sturmian root solver.

