Пример #1
0
        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);
        }
Пример #2
0
        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);
                    }
                }
            }
        }
Пример #3
0
        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);
                        }
                    }
                }
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }