-
Notifications
You must be signed in to change notification settings - Fork 12
Home
Плагины --- это просто проекты, использующие https://github.com/yurii-litvinov/REAL.NET/tree/master/src/EditorPluginInterfaces (например, https://github.com/yurii-litvinov/REAL.NET/tree/master/src/plugins/SamplePlugin). При запуске REAL.NET бежит по всем .dll-кам в рабочей папке и пытается их загрузить и проверить на наличие реализаций IPlugin. Если такая реализация находится, у неё вызывается https://github.com/yurii-litvinov/REAL.NET/blob/master/src/plugins/SamplePlugin/SamplePlugin.cs#L41. Туда передаётся https://github.com/yurii-litvinov/REAL.NET/blob/master/src/EditorPluginInterfaces/PluginConfig.cs, который по идее представляет собой "справочник" всех составных частей системы. Плагин может получить доступ к модели через https://github.com/yurii-litvinov/REAL.NET/blob/master/src/EditorPluginInterfaces/PluginConfig.cs#L27, попросив у IModel ссылку на Repo (https://github.com/yurii-litvinov/REAL.NET/blob/master/src/EditorPluginInterfaces/IModel.cs#L37). Ещё плагин может добавить кнопку на тулбар вызовом https://github.com/yurii-litvinov/REAL.NET/blob/master/src/EditorPluginInterfaces/Toolbar/IToolbar.cs#L19 и выводить результаты своей работы в консоль внутри среды через https://github.com/yurii-litvinov/REAL.NET/blob/master/src/EditorPluginInterfaces/IConsole.cs#L26
Собственно модель хранится в репозитории и доступ к ней выполняется через https://github.com/yurii-litvinov/REAL.NET/blob/master/src/Repo/FacadeLayer.fs. Спрашиваем у репозитория нужную модель, передавая её имя в https://github.com/yurii-litvinov/REAL.NET/blob/master/src/Repo/FacadeLayer.fs#L184 (по идее, имя текущей открытой модели должно быть можно получить из IModel, по что-то пошло не так --- сейчас имя тестовой модели можно просто захардкодить). У модели можно получить узлы: https://github.com/yurii-litvinov/REAL.NET/blob/master/src/Repo/FacadeLayer.fs#L151 и связи: https://github.com/yurii-litvinov/REAL.NET/blob/master/src/Repo/FacadeLayer.fs#L154, у них есть атрибуты: https://github.com/yurii-litvinov/REAL.NET/blob/master/src/Repo/FacadeLayer.fs#L94, у них есть значения: https://github.com/yurii-litvinov/REAL.NET/blob/master/src/Repo/FacadeLayer.fs#L77 (которые всегда хранятся как строки, но рядом ещё хранится их тип: https://github.com/yurii-litvinov/REAL.NET/blob/master/src/Repo/FacadeLayer.fs#L62. О связях между элементами знают только Edge-ы почему-то, https://github.com/yurii-litvinov/REAL.NET/blob/master/src/Repo/FacadeLayer.fs#L132 и https://github.com/yurii-litvinov/REAL.NET/blob/master/src/Repo/FacadeLayer.fs#L135, но зная нужный узел можно фильтрануть список всех Edge-й по From или To.