-- CGOutlines.mesa
-- Written by Doug Wyatt, Nov-81 9:35:18
-- Last Modified by J Warnock June 28, 1982 9:04 am
--Maureen Stone January 31, 1984 4:26:45 pm PST
DIRECTORY
CGCubic USING [Bezier],
GraphicsBasic USING [Vec];
CGOutlines: CEDAR DEFINITIONS = {
OPEN GraphicsBasic,CGCubic;
Ref: TYPE = REF Rep;
Rep: TYPE = RECORD[
size: NAT, -- current size
data: Data, -- the list of nodes
fpi: NAT, -- index of first point of current trajectory
fp:Vec, -- first point of traj.
lp:Vec, --last position of current trajectory
sum:REAL -- sum of arc lengths to current position
];
Data: TYPE = REF DataRep;
DataRep: TYPE = RECORD[SEQUENCE space: NAT OF Node];
Node: TYPE = REF NodeRep;
NodeRep:TYPE=RECORD[line:BOOLEAN,a1,a2,l1,l2:REAL,bz:Bezier];
Error: ERROR[type: ErrorType];
ErrorType: TYPE = {
wrongSequence, -- an operation was called in the wrong sequence
bug -- an internal consistency check failed
};
New: PROC[size: NAT ← 0] RETURNS[Ref];
-- create a new path object with given initial size
Reset: PROC[self: Ref] = INLINE { self.size ← 0 };
-- empty the path
MoveTo: PROC[self: Ref, p: Vec] ;
LineTo: PROC[self: Ref, p: Vec];
CurveTo: PROC[self: Ref, b1,b2,b3: Vec];
Close: PROC[self: Ref];
GetMappedVec:PROC[self:Ref,v:Vec] RETURNS [Vec];
GetLinkCount:PUBLIC PROC[self:Ref] RETURNS [c:NAT];
GetLinkLength:PUBLIC PROC[self:Ref,i:NAT] RETURNS [l:REAL];
Copy: PROC[self: Ref] RETURNS[Ref];
-- make a copy of the path
Assign: PROC[self: Ref, copy: Ref];
-- restore the path from another path
}.