private void ComputeOffsetCurve(Coordinate[] inputPts, Boolean isRightSide, OffsetSegmentGenerator segGen) { var distTol = SimplifyTolerance(_distance); if (isRightSide) { //---------- compute points for right side of line // Simplify the appropriate side of the line before generating var simp2 = BufferInputLineSimplifier.Simplify(inputPts, -distTol); // MD - used for testing only (to eliminate simplification) // Coordinate[] simp2 = inputPts; var n2 = simp2.Length - 1; // since we are traversing line in opposite order, offset position is still LEFT segGen.InitSideSegments(simp2[n2], simp2[n2 - 1], Positions.Left); segGen.AddFirstSegment(); for (var i = n2 - 2; i >= 0; i--) { segGen.AddNextSegment(simp2[i], true); } } else { //--------- compute points for left side of line // Simplify the appropriate side of the line before generating var simp1 = BufferInputLineSimplifier.Simplify(inputPts, distTol); // MD - used for testing only (to eliminate simplification) // Coordinate[] simp1 = inputPts; var n1 = simp1.Length - 1; segGen.InitSideSegments(simp1[0], simp1[1], Positions.Left); segGen.AddFirstSegment(); for (var i = 2; i <= n1; i++) { segGen.AddNextSegment(simp1[i], true); } } segGen.AddLastSegment(); }
private void ComputeRingBufferCurve(Coordinate[] inputPts, Positions side, OffsetSegmentGenerator segGen) { // simplify input line to improve performance var distTol = SimplifyTolerance(_distance); // ensure that correct side is simplified if (side == Positions.Right) { distTol = -distTol; } var simp = BufferInputLineSimplifier.Simplify(inputPts, distTol); // MD - used for testing only (to eliminate simplification) // Coordinate[] simp = inputPts; var n = simp.Length - 1; segGen.InitSideSegments(simp[n - 1], simp[0], side); for (var i = 1; i <= n; i++) { var addStartPoint = i != 1; segGen.AddNextSegment(simp[i], addStartPoint); } segGen.CloseRing(); }