示例#1
0
        public Connection PickConnectionWithText(float x, float y)
        {
            var pickedNode = Graph.PickNode(x, y);

            if (pickedNode == null)
            {
                return(null);
            }

            foreach (var output in pickedNode.Outputs)
            {
                var s     = NvgHelper.MeasureString(output.Text);
                var bound = output.GetBounds();
                var r     = bound.Radius;
                var twor  = 2 * r;

                var outputRect = new Rectangle(bound.X - twor - s.Width, bound.Y - r, s.Width, s.Height);
                if (!outputRect.Pick(x, y))
                {
                    continue;
                }

                return(output);
            }

            return(null);
        }
示例#2
0
        private bool ScreenContains(Node node)
        {
            var nodeRect       = node.GetBounds();
            var nodeRectOthers = node.Outputs.Select(connection => connection?.ConnectedNode?.ParentNode?.GetBounds())
                                 .Where(rectangle => rectangle != null);

            var screenTopLeft  = _window.ScreenToCanvasSpace(Vector2.Zero);
            var screenBotRight = _window.ScreenToCanvasSpace(new Vector2(_window.Width, _window.Height));
            var screen         = new Rectangle(screenTopLeft.X, screenTopLeft.Y,
                                               screenBotRight.X - screenTopLeft.X, screenBotRight.Y - screenTopLeft.Y);

            return(nodeRect.Intersects(screen) || nodeRectOthers.Any(node1 => node1.Intersects(screen)));
        }