/// <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)); }
/// <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); } }
/// <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); } } } }