PEConstructSplineImpl:
CEDAR PROGRAM
IMPORTS PERefresh, PETrajectoryOps
EXPORTS PEConstructSpline =
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];
};
};