protected override IStyleData Calculate(MarkupStopLine stopLine, ITrajectory trajectory, MarkupLOD lod) { if (!CheckDashedLod(lod, Base, Height)) { return(new MarkupStyleParts()); } var styleData = new MarkupStyleParts(StyleHelper.CalculateDashed(trajectory, Base, Space, CalculateDashes)); foreach (var dash in styleData) { dash.MaterialType = MaterialType.Triangle; } return(styleData); }
protected override IStyleData Calculate(MarkupStopLine stopLine, ITrajectory trajectory, MarkupLOD lod) { if (!CheckDashedLod(lod, Width, DashLength)) { return(new MarkupStyleParts()); } var offset = ((stopLine.Start.Direction + stopLine.End.Direction) / -2).normalized * (Width / 2); return(new MarkupStyleParts(StyleHelper.CalculateDashed(trajectory, DashLength, SpaceLength, CalculateDashes))); IEnumerable <MarkupStylePart> CalculateDashes(ITrajectory dashTrajectory, float startT, float endT) { yield return(StyleHelper.CalculateDashedPart(dashTrajectory, startT, endT, DashLength, offset, offset, Width, Color)); } }
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) { 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); }
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 index = 0; 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); } index = 0; foreach (var dash in StyleHelper.CalculateDashed(trajectorySecond, dashLength, spaceLength, CalculateDashes)) { yield return(dash); } 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); } } }
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); }
protected override IStyleData Calculate(MarkupStopLine stopLine, ITrajectory trajectory, MarkupLOD lod) { var offsetNormal = ((stopLine.Start.Direction + stopLine.End.Direction) / -2).normalized; var solidOffset = offsetNormal * (Width / 2); var dashedOffset = offsetNormal * (Width / 2 + 2 * Offset); var dashes = new List <MarkupStylePart>(); dashes.AddRange(StyleHelper.CalculateSolid(trajectory, lod, CalculateSolidDash)); if (CheckDashedLod(lod, Width, DashLength)) { dashes.AddRange(StyleHelper.CalculateDashed(trajectory, DashLength, SpaceLength, CalculateDashedDash)); } return(new MarkupStyleParts(dashes)); MarkupStylePart CalculateSolidDash(ITrajectory lineTrajectory) => StyleHelper.CalculateSolidPart(lineTrajectory, solidOffset, solidOffset, Width, Color); IEnumerable <MarkupStylePart> CalculateDashedDash(ITrajectory lineTrajectory, float startT, float endT) { yield return(StyleHelper.CalculateDashedPart(lineTrajectory, startT, endT, DashLength, dashedOffset, dashedOffset, Width, Color)); } }
public override IStyleData Calculate(MarkupFiller filler, MarkupLOD lod) { var contour = filler.IsMedian ? SetMedianOffset(filler) : filler.Contour.Trajectories.ToArray(); if (NeedReverse(contour)) { contour = contour.Select(t => t.Invert()).Reverse().ToArray(); } var parts = contour.Select(t => StyleHelper.CalculateSolid(t, lod, (tr) => tr, MinAngle, MinLength, MaxLength)).ToArray(); for (var i = 0; i < parts.Length; i += 1) { var partI = parts[i]; var partJ = parts[(i + 1) % parts.Length]; if (!FindIntersects(partI, partJ, false)) { FindIntersects(partJ, partI, true); } } var points = parts.SelectMany(p => p).Select(t => t.StartPosition).ToArray(); if (points.Length < 3) { return(null); } var polygon = new Polygon(points.Select(p => new PolygonPoint(p.x, p.z))); P2T.Triangulate(polygon); var triangles = polygon.Triangles.SelectMany(t => t.Points.Select(p => polygon.IndexOf(p))).ToArray(); return(new MarkupStylePolygonMesh(filler.Markup.Height, Elevation, parts.Select(g => g.Count).ToArray(), points, triangles, MaterialType)); }
protected virtual IEnumerable <MarkupStyleDash> CalculateDashes(ILineTrajectory trajectory) { yield return(StyleHelper.CalculateSolidDash(trajectory, 0f, Width, Color)); }
public override IEnumerable <MarkupStyleDash> Calculate(MarkupLine line, ILineTrajectory trajectory) => StyleHelper.CalculateSolid(trajectory, CalculateDashes);
private IEnumerable <MarkupStylePart> CalculateDashes(ITrajectory lineTrajectory, float startT, float endT) { yield return(StyleHelper.CalculateDashedPart(lineTrajectory, startT, endT, Base, Height / -2, Height, Color)); }
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 direction = Parallel ? crosswalk.NormalDir : crosswalk.CornerDir.Turn90(true); var borders = crosswalk.BorderTrajectories; var index = 0; var trajectoryFirst = crosswalk.GetFullTrajectory(middleOffset - deltaOffset, direction); var trajectorySecond = crosswalk.GetFullTrajectory(middleOffset + deltaOffset, direction); if (!UseGap) { var dashLength = Parallel ? DashLength / coef : DashLength; var spaceLength = Parallel ? SpaceLength / coef : SpaceLength; foreach (var dash in StyleHelper.CalculateDashed(trajectoryFirst, dashLength, spaceLength, CalculateDashes)) { yield return(dash); } index = 0; foreach (var dash in StyleHelper.CalculateDashed(trajectorySecond, dashLength, spaceLength, CalculateDashes)) { yield return(dash); } 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); foreach (var dash in StyleHelper.CalculateDashed(trajectoryFirst, groupLength, gapLength, CalculateDashes)) { yield return(dash); } index = 0; foreach (var dash in StyleHelper.CalculateDashed(trajectorySecond, groupLength, gapLength, CalculateDashes)) { yield return(dash); } 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); } } } } }