<> <> <> <<>> <> <> 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] = { <> 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. <<>>