PEConstructSplineImpl.mesa
Copyright (C) 1984 by Xerox Corporation. All rights reserved.
Written by Pauline Ts'o on July 14, 1984 10:58:57 am PDT
Routines provided for Path Editor routines to create Beta-spline trajectories.
Last Edited by: Tso, July 14, 1984 10:59:09 am PDT
DIRECTORY
PEConstructSpline,
PERefresh USING [DisableTrajectoryRefresh],
PETrajectoryOps,
PETypes;
PEConstructSplineImpl: CEDAR PROGRAM
IMPORTS PERefresh, PETrajectoryOps
EXPORTS PEConstructSpline =
BEGIN
LinkBetaSplineSegments: PUBLIC PROCEDURE [changedSegList: PETypes.SegmentList, segment: PETypes.SegmentNodeRec] RETURNS [newSegmentList: PETypes.SegmentList] = {
This routine inserts a vertex at the head of a vertex list, inserts the vertex list into a segment node, and inserts the segment at the head of a segment list which it returns.
changedVertexList: PETypes.VertexList;
newSegment: PETypes.Segment;
newVertex: PETypes.Vertex;
newVertexList: PETypes.VertexList;
newVertex ← NEW[PETypes.VertexRec ← [point: segment.first.vertices.first.point, bias: segment.first.vertices.first.bias, tension: segment.first.vertices.first.tension]];
newVertexList ← NEW[PETypes.VertexNodeRec];
newVertexList ← NIL;
[changedVertexList, ] ← PETrajectoryOps.InsertVertex[newVertexList, newVertex, NIL];
newSegment ← NEW[PETypes.SegmentRec ← [type: segment.first.type, fp: segment.first.fp, vertices: changedVertexList]];
[newSegmentList, ] ← PETrajectoryOps.InsertSegment[changedSegList, newSegment, NIL];
};
BuildBetaSplineTrajectory: PUBLIC PROCEDURE [segmentList: PETypes.SegmentList] RETURNS [splineTrajectory: PETypes.Trajectory] = {
splineTrajectory ← NIL;
IF segmentList # NIL THEN {
splineTrajectory ← NEW[PETypes.TrajectoryRec ← [segments: segmentList]];
PERefresh.DisableTrajectoryRefresh[splineTrajectory];
};
};
END.