public static bool CalculateSolidPart(LineBorders borders, ITrajectory trajectory, float offset, float width, Color32 color, out MarkupStylePart part) { part = CalculateSolidPart(trajectory, offset, width, color); if (borders.IsEmpty) { return(true); } var vertex = borders.GetVertex(part); var from = 0f; var to = 1f; foreach (var border in borders) { for (var i = 0; i < vertex.Length; i += 2) { var start = Intersection.CalculateSingle(border, vertex[i]); var end = Intersection.CalculateSingle(border, vertex[i + 1]); if (start.IsIntersect && end.IsIntersect) { return(false); } if (!start.IsIntersect && !end.IsIntersect) { continue; } var intersect = Intersection.CalculateSingle(border, new StraightTrajectory(vertex[i].EndPosition, vertex[i + 1].EndPosition)); if (intersect.IsIntersect) { if (start.IsIntersect) { from = Mathf.Max(from, intersect.SecondT); } else if (end.IsIntersect) { to = Mathf.Min(to, intersect.SecondT); } } } } if (from != 0f || to != 1f) { var dir = part.Angle.Direction(); var line = new StraightTrajectory(part.Position + dir * (part.Length / 2), part.Position - dir * (part.Length / 2)).Cut(from, to); part = new MarkupStylePart(line.StartPosition, line.EndPosition, line.Direction, part.Width, part.Color); } return(true); }
public static bool CalculateDashedParts(LineBorders borders, ITrajectory trajectory, float startT, float endT, float dashLength, float offset, float width, Color32 color, out MarkupStylePart part) { part = CalculateDashedPart(trajectory, startT, endT, dashLength, offset, width, color); if (borders.IsEmpty) { return(true); } var vertex = borders.GetVertex(part); return(!borders.Any(c => vertex.Any(v => Intersection.CalculateSingle(c, v).IsIntersect))); }
protected override IEnumerable <MarkupStylePart> CalculateDashes(ITrajectory trajectory, LineBorders borders) { var firstOffset = Alignment.Value switch { Manager.Alignment.Left => 2 * Offset, Manager.Alignment.Centre => Offset, Manager.Alignment.Right => 0, _ => 0, }; var secondOffset = Alignment.Value switch { Manager.Alignment.Left => 0, Manager.Alignment.Centre => - Offset, Manager.Alignment.Right => - 2 * Offset, _ => 0, }; if (StyleHelper.CalculateSolidPart(borders, trajectory, firstOffset, Width, Color, out MarkupStylePart firstDash)) { yield return(firstDash); } if (StyleHelper.CalculateSolidPart(borders, trajectory, secondOffset, Width, Color, out MarkupStylePart secondDash)) { yield return(secondDash); } }
protected virtual IEnumerable <MarkupStylePart> CalculateDashes(ITrajectory trajectory, LineBorders borders) { if (StyleHelper.CalculateSolidPart(borders, trajectory, 0f, Width, Color, out MarkupStylePart dash)) { yield return(dash); } }
protected virtual IEnumerable <MarkupStylePart> CalculateDashes(ITrajectory trajectory, float startT, float endT, LineBorders borders) { if (StyleHelper.CalculateDashedParts(borders, trajectory, startT, endT, DashLength, 0, Width, Color, out MarkupStylePart dash)) { yield return(dash); } }