ShapeTwiddle.mesa
Last Edited by: Crow, March 6, 1986 3:24:32 pm PST
DIRECTORY
Rope     USING [ ROPE ],
ThreeDScenes  USING [ Context, ShapeInstance ];
ShapeTwiddle: CEDAR DEFINITIONS
~ BEGIN
Types
Context: TYPE ~ ThreeDScenes.Context;
ShapeTwiddleError: SIGNAL [reason: ATOM];
NatPair: TYPE ~ RECORD [x, y: NAT];
Shape Manipulations
WriteOutShape: PROCEDURE [context: REF Context, name, ext: Rope.ROPENIL];
Write shape to "name.ext". Transform vertices to current position before writing
ScaleShape: PROCEDURE [context: REF Context, name: Rope.ROPE, scale: REAL,
  xRatio, yRatio, zRatio: REAL ← 1.0];
Scale vertices, global scale is scaled by ratio for each axis. Transform vertices to current
position before scaling. New vertices will be the transformed and scaled result. Position transform is reset to identity.
CleanUp: PROC [context: REF Context, name: Rope.ROPE,
 deSeam: BOOLEANFALSE, tolerance: REAL ← 0.0];
Throw out unused vertices. If deseaming, then coalesce vertices no more than "tolerance" apart. If deseaming polygons, eliminate redundant vertex pointers.
CopyShape: PROC [context: REF Context, dstName, srcName: Rope.ROPE]
RETURNS[REF ThreeDScenes.ShapeInstance];
Copy shape so that the copy may be abused by the other routines herein whil maintaining the original intact.
Combine: PROC [context: REF Context, dstName, src1, src2: Rope.ROPE]
RETURNS[REF ThreeDScenes.ShapeInstance];
Combine two objects, producing a new object with all the vertices and patches of both.
DeletePatches: PROC [context: REF Context, dstName, srcName: Rope.ROPE,
  patchList: LIST OF NatPair]
RETURNS[REF ThreeDScenes.ShapeInstance];
Produce a new object without the listed intervals of patches. Good for disassembling objects. Use "CleanUp" afterwards, since all vertices are copied to the new object.
Bounds: PROC [context: REF Context, name: Rope.ROPE]
RETURNS
[xMin, xMax, yMin, yMax, zMin, zMax: REAL];
Find the bounding box of the vertices after applying the position transform.
END.