Esempio n. 1
0
        private async void UpdateLine(Line line, Ellipse el)
        {
            Point mp = Mouse.GetPosition(this);

            line.X1 = mp.X;
            line.Y1 = mp.Y;
            line.X2 = mp.X;
            line.Y2 = mp.Y;

            while (Mouse.LeftButton == MouseButtonState.Pressed) //Пока нажата ЛКМ, конец линии будет иметь координаты курсора мыши
            {
                await Task.Delay(5);

                Point p = Mouse.GetPosition(this);
                line.X2 = p.X;
                line.Y2 = p.Y;

                if (Mouse.LeftButton == MouseButtonState.Released) //Когда ЛКМ отпущена и курсор находится над эллипсом, создается ребро. В противном случае линия будет удалена.
                {
                    foreach (Ellipse elem in ellist)
                    {
                        if (p.X >= elem.Margin.Left && p.X <= elem.Margin.Left + elw && p.Y >= elem.Margin.Top && p.Y <= elem.Margin.Top + elh)
                        {
                            if (elem == el)
                            {
                                break;
                            }

                            try
                            {
                                Weight wg = new Weight();
                                wg.Show();
                                await WaitWhileActive(wg);

                                string    txt  = wg.wght.Text;
                                Edge      edge = new Edge(list[ellist.IndexOf(el)], list[ellist.IndexOf(elem)], int.Parse(txt), line);
                                TextBlock tb   = new TextBlock();
                                tb.Text                = txt;
                                tb.FontSize            = 16;
                                tb.TextAlignment       = TextAlignment.Center;
                                tb.Width               = 40;
                                tb.Height              = 20;
                                tb.HorizontalAlignment = HorizontalAlignment.Left;
                                tb.VerticalAlignment   = VerticalAlignment.Top;
                                tb.Margin              = new Thickness(line.X2 - (line.X2 - line.X1) / 2, line.Y2 - (line.Y2 - line.Y1) / 2 - 10, 0, 0);
                                edge.TB                = tb;
                                grid.Children.Add(tb);
                                graph.Edges.Add(edge);
                                edges.Add(edge);
                            }
                            catch
                            {
                                grid.Children.Remove(line);
                                return;
                            }

                            graph.Add(list[ellist.IndexOf(el)], list[ellist.IndexOf(elem)]);
                            return;
                        }
                    }

                    grid.Children.Remove(line);
                }
            }
        }