Exemplo n.º 1
0
        public void DrawArc(INodeDrawInfo from, INodeDrawInfo to, bool isSelected, bool isTwoDirectional = false)
        {
            var toNodeDrawInfo = to as NodeDrawInfo;

            DrawUtilities.DrawDirectionalLine(DrawingContext.Current.ApplyScroll(from.Position),
                                              DrawingContext.Current.ApplyScroll(to.Position), toNodeDrawInfo.Radius, GetArcColor(isSelected), DrawingContext.Current.Zoom, isTwoDirectional);
        }
Exemplo n.º 2
0
        public bool TryExecute()
        {
            var drawingContext    = DrawingContext.Current;
            var graphDrawerSystem = GraphContext.Current.GraphDrawerSystem;
            var evt = Event.current;

            if (evt.shift)
            {
                if (evt.type == EventType.mouseDown)
                {
                    INodeDrawInfo nodeDrawInfo;
                    if (graphDrawerSystem.GetNodeDrawInfoByPosition(drawingContext.GetMousePosition(), out nodeDrawInfo))
                    {
                        _creatingArc = true;
                        _nodeFrom    = nodeDrawInfo;
                        return(true);
                    }
                }

                if (evt.type == EventType.MouseUp && _creatingArc)
                {
                    TryCreateArc(graphDrawerSystem, drawingContext);
                    _creatingArc = false;
                    return(true);
                }

                if (_creatingArc)
                {
                    INodeDrawInfo nodeDrawInfo;
                    if (graphDrawerSystem.GetNodeDrawInfoByPosition(drawingContext.GetMousePosition(), out nodeDrawInfo))
                    {
                        if (nodeDrawInfo == _nodeFrom)
                        {
                            graphDrawerSystem.DrawLoop(_nodeFrom, false);
                            GraphEditorWindow.NeedHandlesRepaint = true;
                            return(true);
                        }
                    }

                    graphDrawerSystem.DrawArc(_nodeFrom, evt.mousePosition, false);
                    GraphEditorWindow.NeedHandlesRepaint = true;
                    return(true);
                }
            }
            else
            {
                if (_creatingArc)
                {
                    TryCreateArc(graphDrawerSystem, drawingContext);
                    _creatingArc = false;
                    return(true);
                }
            }

            _creatingArc = false;
            return(false);
        }
Exemplo n.º 3
0
 //TODO Optimize search
 public bool GetNodeDrawInfoByPosition(Vector2 position, out INodeDrawInfo drawInfo)
 {
     foreach (var nodeDrawInfo in _nodeDrawInfos.Values)
     {
         if (Vector2.Distance(nodeDrawInfo.Position, position) <= nodeDrawInfo.Radius)
         {
             drawInfo = nodeDrawInfo;
             return(true);
         }
     }
     drawInfo = default(NodeDrawInfo);
     return(false);
 }
Exemplo n.º 4
0
        private bool CheckDistanceFromPointToLoop(Vector2 p, INodeDrawInfo nodeDrawInfo)
        {
            var drawInfo = nodeDrawInfo as NodeDrawInfo;

            Vector3 fromDirection = Vector3.down;
            Vector3 toDirection   = Vector3.right;;

            var from = (Vector3)nodeDrawInfo.Position + fromDirection * drawInfo.Radius;
            var to   = (Vector3)nodeDrawInfo.Position + toDirection * drawInfo.Radius;

            var tangentDistance = drawInfo.Radius * 4;

            var startTangent = from + fromDirection * tangentDistance;
            var endTangent   = from + toDirection * tangentDistance;

            return(HandleUtility.DistancePointBezier(p, from, to, startTangent, endTangent) < SelectionArcDistanceThreshold * DrawingContext.Current.Zoom);
        }
Exemplo n.º 5
0
 //TODO Optimize
 public Node GetNode(INodeDrawInfo nodeDrawInfo)
 {
     return(_nodeDrawInfos.FirstOrDefault(n => n.Value == nodeDrawInfo).Key);
 }
Exemplo n.º 6
0
        public void DrawLoop(INodeDrawInfo node, bool isSelected)
        {
            var drawInfo = node as NodeDrawInfo;

            DrawUtilities.DrawLoop(DrawingContext.Current.ApplyScroll(node.Position), drawInfo.Radius, GetArcColor(isSelected), DrawingContext.Current.Zoom);
        }
Exemplo n.º 7
0
 public void Deselect(INodeDrawInfo node)
 {
     SelectedNodes.Remove(node);
 }
Exemplo n.º 8
0
 public void Select(INodeDrawInfo node)
 {
     SelectedNodes.Add(node);
     DeselectArc();
 }