/
anton.bessolitsyn
/
GraphTool
Обзор
Документация
Войти
/
anton.bessolitsyn
/
GraphTool
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
GraphToolWPF/ViewModel/GraphToolViewModel.cs
89 строк
3 KB
Anton Bessolitsyn
in progress
22 окт 2025, 10:25
22 окт 2025, 10:25
8675066
Код
Авторство
О чём код?
using GraphToolWPF.Customs; using GraphToolWPF.Model; using GraphToolWPF.Service; using Mapiwpf; using Multicad.AplicationServices; using Multicad.Wpf; using Multicad.Wpf.Extensions; using Multicad.Wpf.ViewModels.Commands; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Threading; using System.Xml.Linq; using static Multicad.Wpf.Extensions.WindowExtensions; using static Multicad.Wpf.ViewModels.Commands.CommandItem; namespace GraphToolWPF.ViewModel { internal class GraphToolViewModel { private readonly IGraphInteractor _ginteractor; private readonly IGraphContext _graph; private readonly IntPtr _MainWindowHandle; private readonly GraphToolWindow _gtWnd; public GraphToolViewModel() { } public GraphToolViewModel(IGraphInteractor ginteractor, IGraphContext graph, GraphToolWindow wnd) { _ginteractor = ginteractor; _gtWnd = wnd; _graph = graph; //var d = new CommandItem.ExecuteDelegate(VertexEntity.CreateEntity) NewVertex = new CommandItem("Добавить вершину") { ExecuteEvent = (param) => { NewVertexExec(); } }; NewEdge = new CommandItem("Добавить ребро") { ExecuteEvent = (param) => { NewEdgeExec(); } }; FindPath = new CommandItem("Найти кратчайший путь") { ExecuteEvent = (param) => { FindPathExec(); } }; _MainWindowHandle = McContext.MainWindowHandle; } public ICommandItem NewVertex { get; private set; } public ICommandItem NewEdge { get; private set; } public ICommandItem FindPath { get; private set; } public void NewVertexExec() { //var pos = _gtWnd.PointToScreen(new Point(0, 0)); _gtWnd.Close(); var vertex = VertexEntity.CreateEntity(); _ginteractor.SubscribeOnVertexEvents(vertex); _graph.Add(vertex); } public void NewEdgeExec() { _gtWnd.Close(); var edge = EdgeEntity.CreateEntity(out var vertex1, out var vertex2); if (edge != null && vertex1 != null && vertex2 != null) { _ginteractor.SubscribeOnEdgeEvents(edge); //TO DO подписывать только не существующие Vertex в IGraphContext if (vertex1 != null) _ginteractor.SubscribeOnVertexEvents(vertex1); if (vertex2 != null) _ginteractor.SubscribeOnVertexEvents(vertex2); _graph.Add(edge, vertex1, vertex2); } } public void FindPathExec() { _gtWnd.Close(); ((GraphInteractorImp)_ginteractor).FindShortestPath(); } } }