G3dBasic.mesa
Copyright Ó 1984, 1992 by Xerox Corporation.  All rights reserved.
Bloomenthal, July 14, 1992 1:49 pm PDT
Glassner, July 5, 1989 7:03:05 pm PDT
DIRECTORY G2dBasic, G2dMatrix, IO, Rope, Vector2;
 
Basic Types
ROPE:      TYPE ~ Rope.ROPE;
STREAM:    
 TYPE ~ 
IO.
STREAM;
 
Pair:      TYPE ~ G2dBasic.Pair;     -- RECORD [x, y: REAL ¬ 0.0]
Triple:     
TYPE ~ G2dBasic.Triple;    
-- 
RECORD [x, y, z: 
REAL ¬
 0.0];
NatPair:     TYPE ~ G2dBasic.NatPair;    -- RECORD [x, y: NAT ¬ 0];
IntPair:     TYPE ~ G2dBasic.IntPair;    -- RECORD [x, y: INT ¬ 0];
IntegerPair:    
TYPE ~ G2dBasic.IntegerPair;   
-- 
RECORD [x, y: 
INTEGER ¬
 0];
Quad:      TYPE ~ RECORD [x, y, z, w: REAL ¬ 0.0];
 
Miscellaneous Types
Sign:      TYPE ~ G2dBasic.Sign;     -- {positive, negative}
Border:     TYPE ~ G2dBasic.Border;    -- {inside, outside, edge}
Box:      
TYPE ~ 
RECORD [min, max: Triple]; 
-- 3d bounding box
Hull:      
TYPE ~ 
RECORD [      
-- elaborate bounding box
center:       Triple ¬ origin,     -- center of hull
pMin, pMax:      Triple ¬ origin,     -- min and max points
rMin, rMax:      REAL ¬ 0.0      -- min and max radii
];
Segment:     TYPE ~ RECORD [p0, p1: Triple];  -- 3d line segment
Screen:   
  TYPE ~ 
RECORD [
quad:        Quad ¬ [],     -- homogeneous location
pos:        Pair ¬ [0, 0],     -- screen space position
intPos:       IntegerPair ¬ [0, 0],   -- screen space position in integers
visible:       BOOL ¬ TRUE,    -- 3d point in viewing frustum?
l, r, b, t, n, f:     BOOL ¬ FALSE,    -- l, r, b. t, n, f clip?
fwdFacing:      BOOL ¬ TRUE    -- if vertex normal forward facing
];
Surface:     
TYPE ~ 
RECORD [      
--
 descriptor
 of
 polygon/patch
clientData:      REF ANY ¬ NIL,     -- surface's private data
vertices:       NatSequence ¬ NIL    -- vertex indices in shape
]; 
Ray:      
TYPE ~ 
RECORD [base, axis: Triple];
Circle:     
TYPE ~ 
RECORD [      
-- 3d circle
center, normal:     Triple ¬ origin,
radius:       REAL ¬ 0.0
];
Sphere:     
TYPE ~ 
RECORD [center: Triple, radius: 
REAL ¬ 0.0];
Triad:      
TYPE ~ 
RECORD [
v, n, b:       Triple ¬ origin    -- vector, principal normal, binormal
];         
-- see 
Computational Geometry for Design and Manufacture
Frame:    
 TYPE ~ 
RECORD [
position:      Triple ¬ origin,    -- position on curve
triad:       Triad ¬ [origin,origin,origin] -- triad (right-handed)
];
Intersection:    
TYPE ~ 
RECORD [
point:        Triple ¬ origin,
doesIntersect:      BOOL ¬ TRUE
];
 
Sequences
NatSequence:    TYPE ~ G2dBasic.NatSequence;
NatSequenceRep:   TYPE ~ G2dBasic.NatSequenceRep;
IntegerSequence:   TYPE ~ G2dBasic.IntegerSequence;
IntegerSequenceRep:  
TYPE ~ G2dBasic.IntegerSequenceRep;
IntSequence:    TYPE ~ G2dBasic.IntSequence;
IntSequenceRep:   
TYPE ~ G2dBasic.IntSequenceRep;
RealSequence:   TYPE ~ G2dBasic.RealSequence;
RealSequenceRep:  
TYPE ~ G2dBasic.RealSequenceRep;
PairSequence:   TYPE ~ G2dBasic.PairSequence;
PairSequenceRep:  TYPE ~ G2dBasic.PairSequenceRep;
NatPairSequence:  TYPE ~ G2dBasic.NatPairSequence;
NatPairSequenceRep: TYPE ~ G2dBasic.NatPairSequenceRep;
IntegerPairSequence: TYPE ~ G2dBasic.IntegerPairSequence;
IntegerPairSequenceRep: TYPE ~ G2dBasic.IntegerPairSequenceRep;
IntPairSequence:   TYPE ~ G2dBasic.IntPairSequence;
IntPairSequenceRep:  TYPE ~ G2dBasic.IntPairSequenceRep;
BoolSequence:   TYPE ~ REF BoolSequenceRep;
BoolSequenceRep:  
TYPE ~ 
RECORD [
length:       CARDINAL ¬ 0,
element:       SEQUENCE maxLength: CARDINAL OF BOOL
];
NatTable:     TYPE ~ REF NatTableRep;
NatTableRep: 
   TYPE ~ 
RECORD [
 length:       CARDINAL ¬ 0,
 element:       SEQUENCE maxLength: CARDINAL OF NatSequence
TripleSequence:   TYPE ~ G2dBasic.TripleSequence;
TripleSequenceRep:  
TYPE ~ G2dBasic.TripleSequenceRep;
QuadSequence:   TYPE ~ REF QuadSequenceRep;
QuadSequenceRep:  
TYPE ~ 
RECORD [
length:       CARDINAL ¬ 0,
element:       SEQUENCE maxLength: CARDINAL OF Quad
SegmentSequence:  TYPE ~ REF SegmentSequenceRep;
SegmentSequenceRep: 
TYPE ~ 
RECORD [
length:       CARDINAL ¬ 0,
element:       SEQUENCE maxLength: CARDINAL OF Segment
];
SurfaceSequence:  TYPE ~ REF SurfaceSequenceRep;
SurfaceSequenceRep: 
TYPE ~ 
RECORD [
length:       CARDINAL ¬ 0,
element:       SEQUENCE maxLength: CARDINAL OF Surface
];
RefSequence:    TYPE ~ REF RefSequenceRep;
RefSequenceRep:   
TYPE ~ 
RECORD [
length:       CARDINAL ¬ 0,
element:       SEQUENCE maxLength: CARDINAL OF REF
];
 
Sequence Operations
Additional Sequences Operations: see G2dVector, G3dMatrix, and G3dSpline
Miscellany
TripleSequenceFromList: 
PROC [
LIST 
OF Triple] 
RETURNS [TripleSequence];
Return a sequence given a list.
 
Copying
CopyBoolSequence: 
PROC [bools: BoolSequence] 
RETURNS [BoolSequence];
Return a copy of the input BoolSequence.
 
CopyNatTable: 
PROC [nats: NatTable] 
RETURNS [NatTable];
Return a copy of the input NatTable.
 
 
CopyTripleSequence: 
PROC [triples: TripleSequence] 
RETURNS [TripleSequence];
Return a copy of the input sequence of triples.
 
 
CopyQuadSequence: 
PROC [quads: QuadSequence] 
RETURNS [QuadSequence];
Return a copy of the input sequence of quads.
 
 
CopySegmentSequence: 
PROC [segments: SegmentSequence]
 RETURNS [SegmentSequence];
Return a copy of the input sequence of segments.
 
CopySurfaceSequence: 
PROC [surfaces: SurfaceSequence]
 RETURNS [SurfaceSequence];
Return a copy of the input sequence of surfaces.
 
CopyRefSequence: 
PROC [refs: RefSequence] 
RETURNS [RefSequence];
Return a copy of the input sequence of REFs.
 
Adding To
AddToBoolSequence:
 PROC
 [bools:
 BoolSequence,
 bool:
 BOOL]
 RETURNS
 [BoolSequence];
Add bool to the sequence.
 
AddToNatTable: 
PROC [nats: NatTable, natSequence: NatSequence]
 RETURNS [NatTable];
Add natSequence to the sequence.
 
 
AddToTripleSequence: 
PROC [triples: TripleSequence, triple: Triple]
RETURNS [TripleSequence];
Add triple to the sequence.
 
 
AddToQuadSequence: 
PROC [quads: QuadSequence, quad: Quad]
 RETURNS [QuadSequence];
Add quad to the sequence.
 
 
AddToSegmentSequence: 
PROC [segments: SegmentSequence, segment: Segment]
RETURNS [SegmentSequence];
Add segment to the sequence.
 
AddToSurfaceSequence: 
PROC [surfaces: SurfaceSequence, surface: Surface]
RETURNS [SurfaceSequence];
Add surface to the sequence.
 
AddToRefSequence: 
PROC [refs: RefSequence, ref: 
REF]
 RETURNS [RefSequence];
Add refAny to the sequence.
 
Lengthening
LengthenBoolSequence: 
PROC [bools: BoolSequence, amount: 
REAL ¬ 1.3]
RETURNS [BoolSequence];
Return a copy of the input sequence whose maxLength is amount*input.maxLength.
 
LengthenNatTable:
 PROC [nats: NatTable, amount: 
REAL ¬ 1.3]
 RETURNS [NatTable];
Return a copy of the input sequence whose maxLength is amount*input.maxLength.
 
 
LengthenTripleSequence: 
PROC [triples: TripleSequence, amount: 
REAL ¬ 1.3]
RETURNS [TripleSequence];
Return a copy of the input sequence whose maxLength is amount*input.maxLength.
 
 
LengthenQuadSequence: 
PROC [quads: QuadSequence, amount: 
REAL ¬ 1.3]
RETURNS [QuadSequence];
Return a copy of the input sequence whose maxLength is amount*input.maxLength.
 
 
LengthenSegmentSequence: 
PROC [segments: SegmentSequence, amount: 
REAL ¬ 1.3]
RETURNS [SegmentSequence];
Return a copy of the input sequence whose maxLength is amount*input.maxLength.
 
LengthenSurfaceSequence: 
PROC [surfaces: SurfaceSequence, amount: 
REAL ¬ 1.3]
RETURNS [SurfaceSequence];
Return a copy of the input sequence whose maxLength is amount*input.maxLength.
 
LengthenRefSequence: 
PROC [refs: RefSequence, amount: 
REAL ¬ 1.3]
RETURNS [RefSequence];
Return a copy of the input sequence whose maxLength is amount*input.maxLength.