Esempio n. 1
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);
                    }
                }
            }
        }
Esempio n. 2
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);
        }
Esempio n. 3
0
 public override void GetUIComponents(MarkupCrosswalk crosswalk, List <EditorItem> components, UIComponent parent, bool isTemplate = false)
 {
     GetBaseUIComponents(crosswalk, components, parent, isTemplate);
     components.Add(AddDashLengthProperty(this, parent));
     components.Add(AddSpaceLengthProperty(this, parent));
     components.Add(AddParallelProperty(this, parent));
 }
Esempio n. 4
0
        public override void GetUIComponents(MarkupCrosswalk crosswalk, List <EditorItem> components, UIComponent parent, bool isTemplate = false)
        {
            base.GetUIComponents(crosswalk, components, parent, isTemplate);

            var useSecondColor = AddUseSecondColorProperty(parent);
            var secondColor    = AddSecondColorProperty(parent);

            components.Add(useSecondColor);
            components.Add(secondColor);
            useSecondColor.OnSelectObjectChanged += ChangeSecondColorVisible;
            ChangeSecondColorVisible(useSecondColor.SelectedObject);

            components.Add(AddDashLengthProperty(this, parent));
            components.Add(AddSpaceLengthProperty(this, parent));

            var useGap    = AddUseGapProperty(parent);
            var gapLength = AddGapLengthProperty(parent);
            var gapPeriod = AddGapPeriodProperty(parent);

            components.Add(useGap);
            components.Add(gapLength);
            components.Add(gapPeriod);
            useGap.OnSelectObjectChanged += ChangeGapVisible;
            ChangeGapVisible(useGap.SelectedObject);

            components.Add(AddParallelProperty(this, parent));

            void ChangeSecondColorVisible(bool useSecondColor) => secondColor.isVisible = useSecondColor;

            void ChangeGapVisible(bool useGap)
            {
                gapLength.isVisible = useGap;
                gapPeriod.isVisible = useGap;
            }
        }
Esempio n. 5
0
 public void Update(MarkupCrosswalk crosswalk, bool recalculate = false)
 {
     crosswalk.Line.Update();
     if (recalculate)
     {
         RecalculateDashes();
     }
 }
Esempio n. 6
0
 public override void GetUIComponents(MarkupCrosswalk crosswalk, List <EditorItem> components, UIComponent parent, bool isTemplate = false)
 {
     base.GetUIComponents(crosswalk, components, parent, isTemplate);
     components.Add(AddSquareSideProperty(parent));
     components.Add(AddLineCountProperty(parent));
     if (!isTemplate)
     {
         components.Add(AddInvertProperty(this, parent));
     }
 }
Esempio n. 7
0
        public override void GetUIComponents(MarkupCrosswalk crosswalk, List <EditorItem> components, UIComponent parent, bool isTemplate = false)
        {
            base.GetUIComponents(crosswalk, components, parent, isTemplate);
            var offsetBetween = AddOffsetBetweenProperty(this, parent);

            if (parent.Find(nameof(OffsetBefore)) is UIComponent offsetBefore)
            {
                offsetBetween.zOrder = offsetBefore.zOrder + 1;
            }
            components.Add(offsetBetween);
        }
Esempio n. 8
0
        public override IEnumerable <MarkupStylePart> Calculate(MarkupCrosswalk crosswalk, MarkupLOD lod)
        {
            StyleHelper.GetParts(Width, 0, lod, out int count, out float partWidth);
            var partOffset  = GetVisibleWidth(crosswalk) / count;
            var startOffset = partOffset / 2;

            for (var i = 0; i < count; i += 1)
            {
                var trajectory = crosswalk.GetTrajectory(startOffset + partOffset * i + OffsetBefore);
                yield return(new MarkupStylePart(trajectory.StartPosition, trajectory.EndPosition, trajectory.Direction, partWidth, Color));
            }
        }
Esempio n. 9
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);
                        }
                    }
                }
            }
        }
Esempio n. 10
0
        protected bool Cut(MarkupCrosswalk crosswalk, ITrajectory trajectory, float width, out ITrajectory cutTrajectory)
        {
            var delta = width / Mathf.Tan(crosswalk.CornerAndNormalAngle) / 2;

            if (2 * delta >= trajectory.Magnitude)
            {
                cutTrajectory = default;
                return(false);
            }
            else
            {
                var startCut = trajectory.Travel(0, delta);
                var endCut   = trajectory.Invert().Travel(0, delta);
                cutTrajectory = trajectory.Cut(startCut, 1 - endCut);
                return(true);
            }
        }
Esempio n. 11
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);
        }
Esempio n. 12
0
        public void FromXml(Version version, XElement config, Dictionary <ObjectId, ObjectId> map = null)
        {
            if (version < new Version("1.2"))
            {
                map = VersionMigration.Befor1_2(this, map);
            }

            foreach (var pointConfig in config.Elements(MarkupPoint.XmlName))
            {
                MarkupPoint.FromXml(pointConfig, this, map);
            }

            var toInit = new Dictionary <MarkupLine, XElement>();

            foreach (var lineConfig in config.Elements(MarkupLine.XmlName))
            {
                if (MarkupLine.FromXml(lineConfig, this, map, out MarkupLine line))
                {
                    LinesDictionary[line.Id] = line;
                    toInit[line]             = lineConfig;
                }
            }

            foreach (var pair in toInit)
            {
                pair.Key.FromXml(pair.Value, map);
            }

            foreach (var fillerConfig in config.Elements(MarkupFiller.XmlName))
            {
                if (MarkupFiller.FromXml(fillerConfig, this, map, out MarkupFiller filler))
                {
                    FillersList.Add(filler);
                }
            }
            foreach (var crosswalkConfig in config.Elements(MarkupCrosswalk.XmlName))
            {
                if (MarkupCrosswalk.FromXml(crosswalkConfig, this, map, out MarkupCrosswalk crosswalk))
                {
                    CrosswalksDictionary[crosswalk.Line] = crosswalk;
                }
            }

            Update();
        }
Esempio n. 13
0
        public override IEnumerable <MarkupStylePart> Calculate(MarkupCrosswalk crosswalk, MarkupLOD lod)
        {
            var middleOffset     = GetVisibleWidth(crosswalk) / 2 + OffsetBefore;
            var deltaOffset      = (Width - LineWidth) / 2 / Mathf.Sin(crosswalk.CornerAndNormalAngle);
            var firstTrajectory  = crosswalk.GetTrajectory(middleOffset - deltaOffset);
            var secondTrajectory = crosswalk.GetTrajectory(middleOffset + deltaOffset);

            foreach (var dash in StyleHelper.CalculateSolid(firstTrajectory, lod, CalculateDashes))
            {
                yield return(dash);
            }

            foreach (var dash in StyleHelper.CalculateSolid(secondTrajectory, lod, CalculateDashes))
            {
                yield return(dash);
            }

            MarkupStylePart CalculateDashes(ITrajectory dashTrajectory) => StyleHelper.CalculateSolidPart(dashTrajectory, 0, LineWidth, Color);
        }
Esempio n. 14
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);
        }
Esempio n. 15
0
 public abstract IEnumerable <MarkupStylePart> Calculate(MarkupCrosswalk crosswalk, MarkupLOD lod);
Esempio n. 16
0
 public override IEnumerable <MarkupStyleDash> Calculate(MarkupCrosswalk crosswalk) => new MarkupStyleDash[0];
Esempio n. 17
0
 public virtual void GetUIComponents(MarkupCrosswalk crosswalk, List <EditorItem> components, UIComponent parent, bool isTemplate = false)
 {
 }
Esempio n. 18
0
 public void AddCrosswalk(MarkupCrosswalk crosswalk)
 {
     CrosswalksDictionary[crosswalk.Line] = crosswalk;
     crosswalk.RecalculateDashes();
     NeedRecalculateBatches = true;
 }
Esempio n. 19
0
 public void RemoveCrosswalk(MarkupCrosswalk crosswalk) => RemoveConnect(crosswalk.Line);
Esempio n. 20
0
 public override IEnumerable <MarkupStylePart> Calculate(MarkupCrosswalk crosswalk, MarkupLOD lod) => new MarkupStylePart[0];
Esempio n. 21
0
 public override float GetTotalWidth(MarkupCrosswalk crosswalk) => Width;
Esempio n. 22
0
 protected override float GetVisibleWidth(MarkupCrosswalk crosswalk) => GetLengthCoef(SquareSide * LineCount, crosswalk);
Esempio n. 23
0
 protected float GetLengthCoef(float length, MarkupCrosswalk crosswalk) => length / Mathf.Sin(crosswalk.CornerAndNormalAngle);
Esempio n. 24
0
 protected override float GetVisibleWidth(MarkupCrosswalk crosswalk) => GetLengthCoef(Width * 2 + Offset, crosswalk);
Esempio n. 25
0
 public override void GetUIComponents(MarkupCrosswalk crosswalk, List <EditorItem> components, UIComponent parent, bool isTemplate = false)
 {
     base.GetUIComponents(crosswalk, components, parent, isTemplate);
     components.Add(AddOffsetBeforeProperty(this, parent));
     components.Add(AddOffsetAfterProperty(this, parent));
 }
Esempio n. 26
0
 public override float GetTotalWidth(MarkupCrosswalk crosswalk) => OffsetBefore + GetVisibleWidth(crosswalk) + OffsetAfter;
Esempio n. 27
0
 protected abstract float GetVisibleWidth(MarkupCrosswalk crosswalk);
 public abstract float GetTotalWidth(MarkupCrosswalk crosswalk);
 public abstract IEnumerable <MarkupStyleDash> Calculate(MarkupCrosswalk crosswalk);
Esempio n. 30
0
 protected override float GetVisibleWidth(MarkupCrosswalk crosswalk) => Width / Mathf.Sin(crosswalk.CornerAndNormalAngle);