Exemplo n.º 1
0
 public static void SetEndSocket(this Path path, NodeSocket socket)
 {
     if (path.Tag == null)
     {
         path.Tag = new NodeSocket[2];
     }
     (path.Tag as NodeSocket[])[1] = socket;
 }
Exemplo n.º 2
0
 //Удаление связей между нодами из контекстного меню
 public void NodeConnectorClearCurves(NodeSocket initnode)
 {
     foreach (var curve in initnode.ConnectedCurves)
     {
         var endnode = initnode.SocketType == NodeSocket.SocketTypes.Input ? curve.GetOutputSocket() : curve.GetInputSocket();
         cbWindow.MainPanel.Children.Remove(curve);
         endnode.ConnectedCurves.Remove(curve);
     }
     initnode.ConnectedCurves.Clear();
     cbWindow.UpdateProcess(initnode.ParentNode);
 }
Exemplo n.º 3
0
        public void LoadSocketEvents(NodeSocket nc)
        {
            nc.MouseLeftButtonDown += NodeConnector_MouseDown;
            nc.MouseLeftButtonUp   += NodeConnector_MouseUp;
            nc.MouseEnter          += NodeConnector_MouseEnter;
            nc.MouseLeave          += NodeConnector_MouseLeave;
            nc.ContextMenu          = MainWindow.DeleteContextMenu;
            var nc1 = nc;

            (nc.ContextMenu.Items[0] as MenuItem).Click += (x, y) => { NodeConnectorClearCurves(nc1); };
        }
Exemplo n.º 4
0
 private void NodeConnector_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
 {
     initNode = sender as NodeSocket;
     if (initNode.Passive)
     {
         NConnDrag = true;
     }
     else
     {
         initNode = null;
     }
 }
Exemplo n.º 5
0
        public void DrawPoint(Point point, Brush color)
        {
            NodeSocket nc = new NodeSocket(null, typeof(int));

            nc.SetColorStroke(color);

            MainPanel.Children.Add(nc);
            nc.Loaded += (a, b) =>
            {
                var margin = nc.Margin;
                margin.Left        = point.X - nc.ActualWidth / 2;
                margin.Top         = point.Y - nc.ActualHeight / 2;
                nc.Margin          = margin;
                nc.RenderTransform = new ScaleTransform(0.5, 0.5, nc.ActualWidth / 2, nc.ActualHeight / 2);
            };
        }
Exemplo n.º 6
0
        //Сброс состояний активации создания соединения и перетаскивания\динамическое создание нода по типу исходящего
        private void Window_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            if (NConnDrag && Drawed != null)
            {
                var dcm   = new ContextMenu();
                var brush = new SolidColorBrush(new Color()
                {
                    R = 30, G = 30, B = 30, A = 255
                });
                dcm.Background = brush;

                List <NodeControl> list = new List <NodeControl>();
                foreach (var node in NodeLibrary.Nodes)
                {
                    if (initNode.SocketType == NodeSocket.SocketTypes.Input)
                    {
                        var outpTyped = node.GetOutputConnectorList().Where(x => (x.DataType == initNode.DataType || (x.DataType.IsIConvertible() && initNode.DataType.IsIConvertible())) && x.Passive);
                        if (outpTyped.Count() == 0)
                        {
                            continue;
                        }
                        list.Add(node);
                    }
                    else
                    {
                        var inpTyped = node.GetInputConnectorList().Where(x => (((x.DataType == initNode.DataType) && x.Passive) || (x.DataType.IsIConvertible() && initNode.DataType.IsIConvertible())) && x.Passive);
                        if (inpTyped.Count() == 0)
                        {
                            continue;
                        }
                        list.Add(node);
                    }
                }

                var CheckList = new Queue <TreeViewItem>();
                var FList     = new List <MenuItem>();
                var AList     = new List <MenuItem>();

                foreach (var node in NodesPanel.Items.OfType <TreeViewItem>())
                {
                    CheckList.Enqueue(node);
                    var mi = new MenuItem()
                    {
                        Background = brush, Foreground = Brushes.White, Margin = new Thickness(-3, 0, 0, 0), Header = node.Header, Tag = node.Tag
                    };
                    AList.Add(mi);
                    FList.Add(mi);
                }

                while (CheckList.Count != 0)
                {
                    var node = CheckList.Dequeue();
                    if (node.HasItems)
                    {
                        foreach (var inNode in node.Items.OfType <TreeViewItem>())
                        {
                            CheckList.Enqueue(inNode);
                            var mi = new MenuItem()
                            {
                                Background = brush, Foreground = Brushes.White, Margin = new Thickness(-3, 0, 0, 0), Header = inNode.Header, Tag = inNode.Tag
                            };
                            var res = AList.Find(x => x.Header == node.Header);
                            res.Items.Add(mi);
                            AList.Add(mi);
                        }
                        foreach (var lb in node.Items.OfType <Label>())
                        {
                            var mi = new MenuItem()
                            {
                                Background = brush, Foreground = Brushes.White, Margin = new Thickness(-3, 0, 0, 0), Header = lb.Content, Tag = lb.Tag
                            };
                            var res = AList.Find(x => x.Header == node.Header);
                            res.Items.Add(mi);
                            AList.Add(mi);
                        }
                    }
                }



                //foreach (var i in FList) dcm.Items.Add(i);

                foreach (var nc in list)
                {
                    var mi = new MenuItem()
                    {
                        Background = brush, Foreground = Brushes.White, Margin = new Thickness(-3, 0, 0, 0), Header = nc.NCName, Tag = nc
                    };
                    mi.Click += (x, y) =>
                    {
                        var nconn = nc.GetConnectorList().Where(a => a.SocketType != initNode.SocketType && (a.DataType == initNode.DataType || a.DataType.IsIConvertible() && initNode.DataType.IsIConvertible())).First();
                        if (nconn.SocketType == NodeSocket.SocketTypes.Input && nconn.ConnectedCurves.Count > 0)
                        {
                            MessageBox.Show("There are existing connections left");
                            Window_MouseLeftButtonDown(sender, e);
                            return;
                        }
                        if (initNode.SocketType == NodeSocket.SocketTypes.Input && initNode.ConnectedCurves.Count > 0)
                        {
                            MessageBox.Show("There are existing connections left");
                            Window_MouseLeftButtonDown(sender, e);
                            return;
                        }
                        var created = AddNC(mi.Header.ToString());

                        var margin = created.Margin;
                        var mx     = Mouse.GetPosition(MainPanel).X;
                        var my     = Mouse.GetPosition(MainPanel).Y;
                        margin.Top     = my;
                        margin.Left    = mx;
                        created.Margin = margin;

                        created.Loaded += (q, w) =>
                        {
                            var readyConn = created.GetConnectorList().First(a => a.SocketType != initNode.SocketType && (a.DataType == initNode.DataType || a.DataType.IsIConvertible() && initNode.DataType.IsIConvertible()));
                            NodeConnector_MouseLeftButtonUp(readyConn, e);
                            var red = readyConn.GetCenter(MainPanel);
                            var gr  = new Vector(margin.Left, margin.Top);

                            var diff = red - gr;
                            margin         = created.Margin;
                            margin.Top    -= diff.Y;
                            margin.Left   -= diff.X;
                            created.Margin = margin;

                            UpdateCurves(created, diff);
                        };
                    };
                    dcm.Items.Add(mi);
                }
                Drawed.ContextMenu = dcm;
                dcm.IsOpen         = true;
                return;
            }



            NConnDrag  = false;
            NNodeDrag  = false;
            DraggingNC = null;

            if (initNode != null)
            {
                initNode.SetBaseColor();
            }
            initNode = null;

            if (Drawed == null)
            {
                return;
            }
            MainPanel.Children.Remove(Drawed);
            Drawed = null;
        }
Exemplo n.º 7
0
 public static void SetSockets(this Path path, NodeSocket init, NodeSocket end)
 {
     path.Tag = new NodeSocket[] { init, end };
 }
Exemplo n.º 8
0
        public NodeControl(MethodInfo m)
            : this()
        {
            NFuncAttribute att = m.GetCustomAttribute <NFuncAttribute>();

            ParameterInfo[] param = m.GetParameters();

            NCName   = att.Name;
            Category = att.Category;
            Input    = param.Select(x => x.ParameterType).ToArray();
            if (att.OutputTypes == null)
            {
                Output = m.ReturnType == typeof(void) ? new Type[] { } : new Type[] { m.ReturnType };
            }
            else
            {
                Output = att.OutputTypes;
            }

            Method = m;


            foreach (var t in param)
            {
                bool isOut = t.IsOut;

                if (!isOut)
                {
                    NodeSocket nc = new NodeSocket(this, t);
                    LeftPanel.Children.Add(nc);
                    continue;
                }
                if (isOut)
                {
                    if (t.ParameterType.GetElementType() == typeof(string))
                    {
                        var lb = new Label()
                        {
                            MinWidth = 25, MinHeight = 25, Foreground = Brushes.White
                        };
                        MiddlePanel.Children.Add(lb);
                        continue;
                    }
                    if (t.ParameterType.GetElementType() == typeof(BitmapImage))
                    {
                        var img = new Image()
                        {
                            Stretch = Stretch.Fill, MaxHeight = 500, MaxWidth = 800
                        };
                        MiddlePanel.Children.Add(img);

                        var dcm   = new ContextMenu();
                        var brush = new SolidColorBrush(new Color()
                        {
                            R = 30, G = 30, B = 30, A = 255
                        });
                        dcm.Background = brush;
                        var mi = new MenuItem()
                        {
                            Header = "Open full size", Background = brush, Foreground = Brushes.White, Margin = new Thickness(-3, 0, 0, 0)
                        };
                        mi.Click += (x, y) =>
                        {
                            if (img.Source != null)
                            {
                                var bmp = NodeLibrary.BI2B(img.Source as BitmapImage);
                                Emgu.CV.Image <Emgu.CV.Structure.Bgr, byte> imge = new Emgu.CV.Image <Emgu.CV.Structure.Bgr, byte>(bmp);
                                imge.Save("temp.png");
                                Process.Start("temp.png");
                            }
                        };
                        dcm.Items.Add(mi);

                        img.ContextMenu = dcm;
                        continue;
                    }
                    var aasdqw = t.ParameterType.GetElementType();

                    if (t.ParameterType.GetElementType().BaseType == typeof(Array) || t.ParameterType.GetElementType() == typeof(Array))
                    {
                        var arr = new TableControl();

                        MiddlePanel.Children.Add(arr);


                        continue;
                    }
                }
            }

            if (att.OutputTypes == null && Output.Length != 0)
            {
                NodeSocket ndc = new NodeSocket(this, Output[0]);
                RightPanel.Children.Add(ndc);
            }
            else
            {
                foreach (var t in Output)
                {
                    NodeSocket ndc = new NodeSocket(this, t);
                    RightPanel.Children.Add(ndc);
                }
            }

            InputSockets  = LeftPanel.Children.OfType <NodeSocket>().ToList();
            OutputSockets = RightPanel.Children.OfType <NodeSocket>().ToList();

            if (RightPanel.Children.Count == 0)
            {
                RPBorder.Visibility = System.Windows.Visibility.Hidden;
            }
        }
Exemplo n.º 9
0
 public void AddConnection(NodeSocket thisNc, NodeSocket extNc)
 {
 }