Пример #1
0
        /// <summary>
        /// Получниение Id выделенного элемента
        /// </summary>
        /// <returns></returns>
        public static string GetIdElementSource()
        {
            ElementControl el        = Elements.FirstOrDefault(c => c.IsSelected);
            InOutControl   inControl = InOutControls.FirstOrDefault(c => c.IsSelected);

            return(el != null?el.Element.Id.ToString() : (inControl != null ? inControl.Element.Id.ToString() : null));
        }
Пример #2
0
        /// <summary>
        /// Получить координату конечной точки связи в зависимости от колличества входов и их занятости
        /// </summary>
        /// <param name="element"></param>
        /// <param name="numConnection"></param>
        /// <returns></returns>
        static Point GetFinishPoint(ElementClass element, int numConnection)
        {
            ElementControl control = new ElementControl();
            var            dCon    = control.Height / element.InCount / 2;

            Point point = new Point(element.Location.X + Math.Truncate(control.Width / 2),
                                    element.Location.Y + dCon);

            if (numConnection > 0)
            {
                if (numConnection > 1)
                {
                    point.Y += dCon * numConnection;
                }
            }
            else
            {
                for (int i = 1; i < element.InElements.Count; i++)
                {
                    point.Y += dCon * 2;
                }
            }


            return(point);
        }
        private void AddElementMenuItem_OnClick(object sender, RoutedEventArgs e)
        {
            ElementClass element = new ElementClass {
                Location = _mousePoint
            };
            ElementControl el = GraphClass.CreateElementControl(element, ConntectionMenuItem_Click);

            el.PreviewMouseMove += El_PreviewMouseMove;
            SaverClass.Elements.Add(element);
            EditorCanvas.Children.Add(el);
            new ElementProperty(el).ShowDialog();
        }
        private void El_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            ElementControl element = sender as ElementControl;

            if (!(sender is ElementControl) || !element.IsSelected || !element.IsDrag)
            {
                return;
            }
            element.SetLocation(e.GetPosition(EditorCanvas));
            foreach (Connection connection in GraphClass.Connections
                     .Where(c => c.Start.Id == element.Element.Id || c.Finish.Id == element.Element.Id).ToList())
            {
                connection.CalculatePoints();
            }
        }
 private void EditorCanvas_OnPreviewKeyUp(object sender, KeyEventArgs e)
 {
     if (e.Key == Key.Delete)
     {
         ElementControl el = GraphClass.Elements.FirstOrDefault(c => c.IsSelected);
         if (el == null)
         {
             return;
         }
         if (MessageBox.Show("Вы действительно хотите удалить элемент?", "", MessageBoxButton.YesNo) !=
             MessageBoxResult.Yes)
         {
             return;
         }
         RemoveElement(el.Element.Id);
     }
 }
Пример #6
0
        /// <summary>
        /// Создание нового элемента
        /// </summary>
        /// <returns></returns>
        public static ElementControl CreateElementControl(ElementClass element, RoutedEventHandler menuHandler)
        {
            ElementControl el = new ElementControl();

            Panel.SetZIndex(el, ElementZIndex++);
            el.Element = element;
            el.UpdateView();
            el.SetLocation(element.Location);
            MenuItem connectionMenuItem = new MenuItem()
            {
                Header = "_Соединить элемент"
            };

            connectionMenuItem.Click += menuHandler;
            el.MainGrid.ContextMenu?.Items.Insert(2, connectionMenuItem);
            Elements.Add(el);
            return(el);
        }
        /// <summary>
        /// Загрузка схемы
        /// </summary>
        void OpenSchema()
        {
            OpenFileDialog ofd = new OpenFileDialog()
            {
                Title = "Выберите файл", Filter = "json files (*.json)|*.json"
            };

            if (ofd.ShowDialog() == true)
            {
                EditorCanvas.Children.Clear();
                GraphClass.Connections.Clear();
                SaverClass.LoadData(ofd.FileName);
                GraphClass.ElementZIndex    = 10000;
                GraphClass.ConnectionZIndex = 0;
                foreach (ElementClass element in SaverClass.Elements)
                {
                    switch (element.Type)
                    {
                    case 10:
                    {
                        InOutControl inControl = GraphClass.CreateInControl(element);
                        inControl.MainGrid.ContextMenu = new ContextMenu();
                        inControl.MainGrid.ContextMenu.Items.Add(new MenuItem()
                            {
                                Header = "_Соединить вход"
                            });
                        (inControl.MainGrid.ContextMenu.Items[0] as MenuItem).Click += ConntectionMenuItem_Click;
                        EditorCanvas.Children.Add(inControl);
                        continue;
                    }

                    case 11:
                    {
                        EditorCanvas.Children.Add(GraphClass.CreateOutControl(element));
                        foreach (Guid id in element.InElements)
                        {
                            Connection connection = new Connection()
                            {
                                Start  = SaverClass.Elements.First(c => c.Id == id),
                                Finish = element
                            };
                            connection.CalculatePoints();
                            Panel.SetZIndex(connection.Line, GraphClass.ConnectionZIndex++);
                            GraphClass.Connections.Add(connection);
                            EditorCanvas.Children.Add(connection.Line);
                        }
                        continue;
                    }
                    }

                    ElementControl el = GraphClass.CreateElementControl(element, ConntectionMenuItem_Click);
                    el.PreviewMouseMove += El_PreviewMouseMove;
                    EditorCanvas.Children.Add(el);
                    foreach (Guid id in element.InElements)
                    {
                        Connection connection = new Connection()
                        {
                            Start  = SaverClass.Elements.First(c => c.Id == id),
                            Finish = element
                        };
                        connection.CalculatePoints();
                        Panel.SetZIndex(connection.Line, GraphClass.ConnectionZIndex++);
                        GraphClass.Connections.Add(connection);
                        EditorCanvas.Children.Add(connection.Line);
                    }
                }
            }
        }