Safe Haskell  None 

Parser for body definitions.
Body definition contains a number of solid definitions and ends with the top level object definition. RHS of solid equations may reference other solids to compose into complex bodies.
Multiplebody compositions are rightassociative.
# comment # define few primitives solid b1 = sphere (0, 0, 0; 5); solid p1 = plane (0, 0, 0; 1, 0, 0); # define a composition solid body = b1 and p1; # assign it to be the top level object tlo body;
Statements must end with a semicolon (newlines are optional). Excessive spaces are ignored.
Toplevel object line must reference a previously defined solid.
Syntax for primitives follows the signatures of Traceables
constructors for plane
and sphere
, but differs for cylinder
and cone, as this module provides access only to frustums
(cylinderFrustum
and coneFrustum
).
 Halfspace

plane (px, py, pz; nx, ny, nz)
, where(px, py, pz)
is a point on a plane which defines the halfspace and(nx, ny, nz)
is a normal to the plane (outward to the halfspace), not necessarily a unit vector.  Sphere

sphere (cx, cy, cz; r)
, where(cx, cy, cz)
is a central point of a sphere andr
is radius.  Right circular cylinder

cylinder (p1x, p1y, p1z; p2x, p2y, p2z; r)
where(p1x, p1y, p1z)
and(p2x, p2y, p2z)
are bottom and top points on axis andr
is radius.  Right circular conical frustum

cone (p1x, p1y, p1z; r1; p2x, p2y, p2z; r2)
where(p1x, p1y, p1z)
and(p2x, p2y, p2z)
are bottom and top points on cone axis andr1
,r2
are the corresponding radii.