/
anton.bessolitsyn
/
GraphTool
Обзор
Документация
Войти
/
anton.bessolitsyn
/
GraphTool
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
GraphToolWPF/GraphTool.cs
134 строки
5 KB
Anton Bessolitsyn
in progress
22 окт 2025, 10:25
22 окт 2025, 10:25
8675066
Код
Авторство
О чём код?
using GraphToolWPF.Customs; using GraphToolWPF.Model; using GraphToolWPF.Service; using GraphToolWPF.View; using GraphToolWPF.ViewModel; using Multicad; using Multicad.AplicationServices; using Multicad.DatabaseServices; using Multicad.DatabaseServices.StandardObjects; using Multicad.Geometry; using Multicad.Runtime; using Multicad.Symbols; using Multicad.Wpf; using Multicad.Wpf.Controls.McGanttChart; using Multicad.Wpf.Extensions; using System.Windows; //[assembly: CommandClass(typeof(GraphToolWPF.GraphTool))] namespace GraphToolWPF { [ContainsCommands] public class GraphTool : IExtensionApplication { private readonly GraphContext _gContext; private readonly GraphInteractorImp _gInteractor; public GraphTool() { _gContext = new GraphContext(); _gInteractor = new GraphInteractorImp(_gContext); GlobalEvents.DocumentOpened += GlobalEvents_DocumentOpened; } private void GlobalEvents_DocumentOpened(object? sender, DocumentEventArgs e) { // в отдельный слой желательно ObjectFilter fltr = new ObjectFilter(true); fltr.Reset(); fltr.AddType(VertexEntity.TypeID); McObjectId[] idSelecteds = McObjectManager.SelectObjects(fltr).ToArray(); if (idSelecteds == null || idSelecteds.Length == 0) return; foreach (var item in idSelecteds) { var v = item.GetObjectOfType<VertexEntity>(); _gInteractor.SubscribeOnVertexEvents(v); _gContext.Add(v); } fltr.Reset(); fltr.AddType(EdgeEntity.TypeID); idSelecteds = McObjectManager.SelectObjects(fltr).ToArray(); if (idSelecteds == null || idSelecteds.Length == 0) return; foreach (var item in idSelecteds) { var v = item.GetObjectOfType<EdgeEntity>(); _gInteractor.SubscribeOnEdgeEvents(v); _gContext.Add(v); } } public void Initialize() { // Показываем сообщение при загрузке MessageBox.Show("Initialize GraphTool", "NanoCAD Plugin"); Show(); } [CommandMethod("gt_Info", CommandFlags.NoCheck | CommandFlags.NoPrefix)] public void Show() { //Переделать что бы форму показывать, а не создавать каждый раз заново типа синглтона var gWnd = new GraphToolWindow(); var gViewModel = new GraphToolViewModel(_gInteractor, _gContext, gWnd); gWnd.DataContext = gViewModel; gWnd.ShowDialog(McContext.MainWindowHandle); } [CommandMethod("gt_Vertex", CommandFlags.NoCheck | CommandFlags.NoPrefix | CommandFlags.Redraw)] public void CreateVertextCmd() { // в отдельный слой желательно var vertex = VertexEntity.CreateEntity(); _gInteractor.SubscribeOnVertexEvents(vertex); _gContext.Add(vertex); } [CommandMethod("gt_Edge", CommandFlags.NoCheck | CommandFlags.NoPrefix | CommandFlags.Modal)] public void CreateEdgeCmd() { // в отдельный слой желательно 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); _gContext.Add(edge, vertex1, vertex2); } } [CommandMethod("gt_ShortPath", CommandFlags.NoCheck | CommandFlags.NoPrefix | CommandFlags.Modal)] public void ShortPath() { _gInteractor.FindShortestPath(); } [CommandMethod("gt_CleanShortPath", CommandFlags.NoCheck | CommandFlags.NoPrefix | CommandFlags.Modal)] public void CleanShortPath() { _gInteractor.UnHighlightGraph(); } public void Terminate() { } } }