public override IEnumerable <MarkupStylePart> Calculate(MarkupCrosswalk crosswalk, MarkupLOD lod) { var middleOffset = GetVisibleWidth(crosswalk) / 2 + OffsetBefore; var deltaOffset = GetLengthCoef((Width + Offset) / 2, crosswalk); var firstOffset = -crosswalk.NormalDir * (middleOffset - deltaOffset); var secondOffset = -crosswalk.NormalDir * (middleOffset + deltaOffset); var coef = Mathf.Sin(crosswalk.CornerAndNormalAngle); var dashLength = Parallel ? DashLength / coef : DashLength; var spaceLength = Parallel ? SpaceLength / coef : SpaceLength; var direction = Parallel ? crosswalk.NormalDir : crosswalk.CornerDir.Turn90(true); var borders = crosswalk.BorderTrajectories; var trajectoryFirst = crosswalk.GetFullTrajectory(middleOffset - deltaOffset, direction); var trajectorySecond = crosswalk.GetFullTrajectory(middleOffset + deltaOffset, direction); foreach (var dash in StyleHelper.CalculateDashed(trajectoryFirst, dashLength, spaceLength, CalculateDashes)) { yield return(dash); } foreach (var dash in StyleHelper.CalculateDashed(trajectorySecond, dashLength, spaceLength, CalculateDashes)) { yield return(dash); } IEnumerable <MarkupStylePart> CalculateDashes(ITrajectory crosswalkTrajectory, float startT, float endT) => CalculateCroswalkPart(crosswalkTrajectory, startT, endT, direction, borders, Width, DashLength); }
public override IEnumerable <MarkupStylePart> Calculate(MarkupCrosswalk crosswalk, MarkupLOD lod) { var deltaOffset = GetLengthCoef(SquareSide, crosswalk); var startOffset = deltaOffset / 2 + OffsetBefore; var direction = crosswalk.CornerDir; var normalDirection = direction.Turn90(true); var borders = crosswalk.BorderTrajectories; for (var i = 0; i < LineCount; i += 1) { var trajectory = crosswalk.GetFullTrajectory(startOffset + deltaOffset * i, normalDirection); var trajectoryLength = trajectory.Length; var count = (int)(trajectoryLength / SquareSide); var squareT = SquareSide / trajectoryLength; var startT = (trajectoryLength - SquareSide * count) / trajectoryLength; for (var j = (Invert ? i + 1 : i) % 2; j < count; j += 2) { foreach (var dash in CalculateCroswalkPart(trajectory, startT + squareT * (j - 1), startT + squareT * j, direction, borders, SquareSide, SquareSide, Color)) { yield return(dash); } } } }
public override IEnumerable <MarkupStylePart> Calculate(MarkupCrosswalk crosswalk, MarkupLOD lod) { var offset = GetVisibleWidth(crosswalk) / 2 + OffsetBefore; var coef = Mathf.Sin(crosswalk.CornerAndNormalAngle); var borders = crosswalk.BorderTrajectories; var index = 0; var direction = Parallel ? crosswalk.NormalDir : crosswalk.CornerDir.Turn90(true); var trajectory = crosswalk.GetFullTrajectory(offset, direction); if (!UseGap) { var dashLength = Parallel ? DashLength / coef : DashLength; var spaceLength = Parallel ? SpaceLength / coef : SpaceLength; return(StyleHelper.CalculateDashed(trajectory, dashLength, spaceLength, CalculateDashes)); IEnumerable <MarkupStylePart> CalculateDashes(ITrajectory crosswalkTrajectory, float startT, float endT) { index += 1; foreach (var part in CalculateCroswalkPart(crosswalkTrajectory, startT, endT, direction, borders, Width, DashLength, GetColor(index))) { yield return(part); } } } else { var groupLength = (DashLength * GapPeriod + SpaceLength * (GapPeriod - 1)); var dashT = DashLength / groupLength; var spaceT = SpaceLength / groupLength; groupLength /= (Parallel ? coef : 1f); var gapLength = GapLength / (Parallel ? coef : 1f); return(StyleHelper.CalculateDashed(trajectory, groupLength, gapLength, CalculateDashes)); IEnumerable <MarkupStylePart> CalculateDashes(ITrajectory crosswalkTrajectory, float startT, float endT) { index += 1; for (var i = 0; i < GapPeriod; i += 1) { var partStartT = startT + (endT - startT) * (dashT + spaceT) * i; var partEndT = partStartT + (endT - startT) * dashT; foreach (var part in CalculateCroswalkPart(crosswalkTrajectory, partStartT, partEndT, direction, borders, Width, DashLength, GetColor(index))) { yield return(part); } } } } }
public override IEnumerable <MarkupStylePart> Calculate(MarkupCrosswalk crosswalk, MarkupLOD lod) { var offset = GetVisibleWidth(crosswalk) / 2 + OffsetBefore; var coef = Mathf.Sin(crosswalk.CornerAndNormalAngle); var dashLength = Parallel ? DashLength / coef : DashLength; var spaceLength = Parallel ? SpaceLength / coef : SpaceLength; var direction = Parallel ? crosswalk.NormalDir : crosswalk.CornerDir.Turn90(true); var borders = crosswalk.BorderTrajectories; var trajectory = crosswalk.GetFullTrajectory(offset, direction); return(StyleHelper.CalculateDashed(trajectory, dashLength, spaceLength, CalculateDashes)); IEnumerable <MarkupStylePart> CalculateDashes(ITrajectory crosswalkTrajectory, float startT, float endT) => CalculateCroswalkPart(crosswalkTrajectory, startT, endT, direction, borders, Width, DashLength); }
public override IEnumerable <MarkupStylePart> Calculate(MarkupCrosswalk crosswalk, MarkupLOD lod) { foreach (var dash in base.Calculate(crosswalk, lod)) { yield return(dash); } var offset = GetVisibleWidth(crosswalk) / 2 + OffsetBefore; var direction = crosswalk.CornerDir.Turn90(true); var borders = crosswalk.BorderTrajectories; var width = Width - 2 * LineWidth; var trajectory = crosswalk.GetFullTrajectory(offset, direction); foreach (var dash in StyleHelper.CalculateDashed(trajectory, DashLength, SpaceLength, CalculateDashes)) { yield return(dash); } IEnumerable <MarkupStylePart> CalculateDashes(ITrajectory crosswalkTrajectory, float startT, float endT) => CalculateCroswalkPart(crosswalkTrajectory, startT, endT, direction, borders, Width, DashLength, Color); }