BoundBox: TYPE = SVBasicTypes.BoundBox;
BoundSphere: TYPE = SVBasicTypes.BoundSphere;
BoundHedron: TYPE = SVBasicTypes.BoundHedron;
TrigLineSeg: TYPE = SV2d.TrigLineSeg;
Vector3d: TYPE = SV3d.Vector3d;
The cone described here is revolute around the y-axis. Otherwise it is very general, allowing for an arbitrary apex point (on the y-axis) and an arbitrary spread ratio.
Cone: TYPE = REF ConeObj;
ConeObj:
TYPE =
RECORD [
h: REAL,-- y at the apex
M: REAL,-- r/|y-h|
yHi, yLo: REAL,
normalPointsOut: BOOL,
noseIsUp: BOOL,
boundHedron: BoundHedron,
boundBox: BoundBox,
boundSphere: BoundSphere];
The disk ring described here is revolute around the y-axis. Otherwise it is very general. It may be in an arbitrary horizontal plane (y = yPlane), may have any two radii, rIn and rOut subject to rIn, rOut >= 0 AND rOut > rIn, and may have an upward or downward pointing normal.
DiskRing: TYPE = REF DiskRingObj;
DiskRingObj:
TYPE =
RECORD [
yPlane: REAL,
normal: Vector3d,
rInSquared, rOutSquared: REAL,
boundHedron: BoundHedron,
boundBox: BoundBox,
boundSphere: BoundSphere];
The cylinder described here is revolute around the y-axis. Otherwise it is very general. It may have its top and bottom in arbitrary horizontal planes (y = yHigh and y = yLow) subject to yHigh > yLow and may have an arbitrary radius r.
Cylinder:
TYPE =
REF CylinderObj;
CylinderObj: TYPE = RECORD [
yHi, yLo: REAL,
r: REAL,
rSquared: REAL,
normalPointsOut: BOOL,
boundHedron: BoundHedron,
boundBox: BoundBox,
boundSphere: BoundSphere];
The edge on rectangle has a surface normal parallel to the xy plane. That is, it is edge on when viewed from the z direction.
EdgeOnRect: TYPE = REF EdgeOnRectObj;
EdgeOnRectObj:
TYPE =
RECORD [
frontZ, backZ: REAL,
A, B, D: REAL,-- plane equation Ax + By + D = 0.
normal: Vector3d,
valHi, valLo: REAL,
valIsY: BOOL, -- valHi and valLo will be y values if the edge on rectangle is more closely verical than horizontal and x values otherwise
boundHedron: BoundHedron,
boundBox: BoundBox,
boundSphere: BoundSphere
];