public static List <MarkupIntersect> Calculate(BezierTrajectory bezier1, BezierTrajectory bezier2) { var intersects = new List <MarkupIntersect>(); Intersect(intersects, bezier1, bezier2); return(intersects); }
public override void RenderOverlay(RenderManager.CameraInfo cameraInfo) { var width = Radius * 2; if (!IsSelectedSegmentEnd) { Tool.Data.MainBezier.Render(new OverlayData(cameraInfo) { Width = width, Color = Colors.Yellow }); foreach (var segmentData in Tool.Data.SegmentEndDatas) { segmentData.RenderOutterCircle(new OverlayData(cameraInfo) { Color = segmentData.OverlayColor }); } foreach (var segmentData in Tool.Data.MainSegmentEndDatas) { segmentData.Position.RenderCircle(new OverlayData(cameraInfo) { Color = segmentData == HoverSegmentEnd ? Color.white : Colors.Yellow }, width, 0f); } } else { var middlePos = Tool.Data.MainBezier.Position(0.5f); var middleDir = Tool.Data.MainBezier.Tangent(0.5f); var plane = new Plane(middlePos, middlePos + middleDir, middlePos + middleDir.MakeFlat().Turn90(true)); plane.Raycast(Tool.MouseRay, out var t); var endPosition = Tool.MouseRay.origin + Tool.MouseRay.direction * t; if (IsHoverSegmentEnd) { var bezier = new BezierTrajectory(SelectedSegmentEnd.Position, -SelectedSegmentEnd.Direction, HoverSegmentEnd.Position, -HoverSegmentEnd.Direction); bezier.Render(new OverlayData(cameraInfo) { Width = width, Color = Colors.Yellow }); } else { var bezier = new BezierTrajectory(SelectedSegmentEnd.Position, -SelectedSegmentEnd.Direction, endPosition); bezier.Render(new OverlayData(cameraInfo) { Width = width, Color = Colors.Yellow }); } foreach (var segmentData in Tool.Data.SegmentEndDatas) { if (segmentData != SelectedSegmentEnd) { segmentData.RenderOutterCircle(new OverlayData(cameraInfo) { Color = segmentData == HoverSegmentEnd ? Color.white : segmentData.OverlayColor }); } } SelectedSegmentEnd.Position.RenderCircle(new OverlayData(cameraInfo) { Color = Colors.Yellow }, width, 0f); if (IsHoverSegmentEnd) { HoverSegmentEnd.Position.RenderCircle(new OverlayData(cameraInfo) { Color = Colors.Yellow }, width, 0f); } else { endPosition.RenderCircle(new OverlayData(cameraInfo) { Color = Colors.Yellow }, width, 0f); } } }