public void CheckPlan()
        {
            for (int i = 0; i < GivenGraph.EdgesCount; ++i)
            {
                for (int j = 0; j < GivenGraph.EdgesCount; ++j)
                {
                    var V1 = VertVisCol.Single(v => v.Name == GivenGraph.Edges[i].Vertex1.Name);
                    var V2 = VertVisCol.Single(v => v.Name == GivenGraph.Edges[i].Vertex2.Name);
                    var V3 = VertVisCol.Single(v => v.Name == GivenGraph.Edges[j].Vertex1.Name);
                    var V4 = VertVisCol.Single(v => v.Name == GivenGraph.Edges[j].Vertex2.Name);

                    if (HaveCollision(V1, V2, V3, V4))
                    {
                        MessageBox.Show("Проверка графа завершена!\n" + "Граф не плоский");
                        UserActionsManager.RegisterMistake("Ошибка!", 10);
                        return;
                    }
                }
            }
            MessageBox.Show("Проверка графа завершена!\n" + "Граф плоский! Поздравляем!");
        }
        //добавление-удаление
        /// <summary> Инициализация </summary>
        protected override void OnInitialized()
        {
            base.OnInitialized();

            InitToolBarCommands();

            OnLoadedCmd = new DelegateCommand(
                o =>
            {
                VariantProvider.DownloadVariantAsync();
                ToolBarCommands.ForEach(c => c.RefreshState());
            }, o => true);
            var outV = new Vertex("a");

            VertexClickCmd = new DelegateCommand(
                o =>
            {
                if (_state == State.AddEdge1)
                {
                    outV = GivenGraph.Vertices.Single(v => v.Name == ((IVertex)o).Name) as Vertex;
                    VertVisCol.Single(v => v.Name == outV.Name).Radius     = 23;
                    VertVisCol.Single(v => v.Name == outV.Name).Background = new SolidColorBrush(Colors.Magenta);
                    UserActionsManager.RegisterInfo(string.Format("Выходная вершина - [{0}]. Выберите входную вершину.", ((IVertex)o).Name));
                    _state = State.AddEdge2;
                    return;
                }
                if (_state == State.AddEdge2)
                {
                    var inV = GivenGraph.Vertices.Single(v => v.Name == ((IVertex)o).Name) as Vertex;
                    UserActionsManager.RegisterInfo(string.Format("Входная вершина - [{0}]. Добавьте другое ребро или выйдете из режима добавления ребер", ((IVertex)o).Name));
                    var newEdge = new DirectedEdge(outV, inV);
                    if (GivenGraph.Edges.Any(newEdge.Equals))
                    {
                        ReportMistake("Указанная дуга уже существует.");
                        return;
                    }
                    VertVisCol.Single(v => v.Name == outV.Name).Radius     = 20;
                    VertVisCol.Single(v => v.Name == outV.Name).Background = new SolidColorBrush(Colors.LightGray);

                    GivenGraph.AddEdge(newEdge);
                    _state = State.AddEdge1;
                }
                if (_state == State.RemoveVertex)
                {
                    GivenGraph.RemoveVertex(GivenGraph.Vertices.Single(v => v.Name == ((IVertex)o).Name));
                    UserActionsManager.RegisterInfo(string.Format("Вершина [{0}] удалена со всеми связями", ((IVertex)o).Name));
                }
            },
                o => true);
            VisualizerClickCmd = new DelegateCommand(
                o =>
            {
                if (_state == State.AddVertex)
                {
                    UserActionsManager.RegisterInfo((string.Format("Вершина добавлена")));
                    var vertex  = (Graphs.UIComponents.Visualization.Vertex)o;
                    vertex.Name = (GivenGraph.VerticesCount).ToString();
                    int i       = 0;
                    while (GivenGraph.Vertices.Any(vertex.Equals))
                    {
                        i           = i + 1;
                        vertex.Name = (i).ToString();
                    }
                }
            },
                o => true);
        }