Esempio n. 1
0
        public static List <MarkupIntersect> Calculate(BezierTrajectory bezier1, BezierTrajectory bezier2)
        {
            var intersects = new List <MarkupIntersect>();

            Intersect(intersects, bezier1, bezier2);
            return(intersects);
        }
Esempio n. 2
0
        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);
                }
            }
        }