Инструменты пользователя

Инструменты сайта


Боковая панель

developers:tutorial:createmodel

Это старая версия документа.


Создание и сохранение модели

Каждая модель данных в комплексе Топоматик Робур располагается в рамках отдельного файла, включенного в состав проекта. С программной точки зрения модель представляет собой экземпляр класса, реализующий интерфейс IProjectModel. Основные методы этого интерфейса это:

  • LockWrite() - блокирует модель для начала редактирования данных
  • UnockWrite() - разблокирует модель после окончания редактирования данных
  • LockRead() - возвращает экземпляр класса, реализующий структуру данных конкретной модели

Для чтения данных из модели используется метод LockRead(). Если данные модели необходимо изменить, то перед вызовом LockRead() необходимо вызвать LockWrite(), а после UnockWrite().

После вызова метода LockWrite() файл модели становится недоступным для редактирования другими пользователями до того момента, пока не будет вызван метод UnockWrite().

Для подключения собственной модели к комплексу, необходимо выполнить следующие действия:

  • Создать класс редактора модели, наследник от ModelEditor, предназначенный для реализации загрузки, сохранения и открытия модели
  • Написать метод, который возвращает экземпляр наследника от ModelEditor и декорировать его атрибутом «cmd»
  • В классе, наследнике от PluginInitializator необходимо перекрыть метод Initialize и зарегестрировать модель, используя метод RegisterModelEditor класса PluginFactory
  • В файле *.plugin в секции cores описать вид модели в структуре проекта, а в секции coreitems включить модель в состав стандартного проекта.

Для реализации сохранения и загрузки в программном комплексе Топоматик Робур используется сборка Topomatic.Stg.dll. За сохранение отвечает интерфейс IStgSerializable, который состоит из двух методов - LoadFromStg для загрузки и SaveToStg для сохранения. Оба метода в качестве параметра принимают экземпляр класса StgNode. Методы этого класса позволяют сохранить в узел и загрузить из узла все базовые типы данных, а также дополнительные узлы StgNode и массивы элементов, используя именованные элементы. Кроме того у каждого метода есть перекрытое значение, со значением по умолчанию. Значение по умолчанию будет использовано в том случае, если в загружаемом файле нет такого именованного элемента. Например:

{
    ....
    private double m_Value1 = 0.0;
 
    private string m_Value2 = 0.0;
 
    void LoadFromStg(StgNode node)
    {
         //Если в сохраненном файле нет значения с ключом Value1 будет брошено исключение
         m_Value1 = node.GetDouble("Value1");
         //Если в сохраненном файле нет значения с ключом Value2, 
         //то переменной m_Value2 будет присвоено значение "defaultValue"
         m_Value2 = node.GetString("Value2", "defaultValue");
    }
    ...
}

Использование именованных элементов позволяет легко расширять и дополнять функции загрузки и сохранения по мере расширения модели данных.

Если в сохраненном файле отсутствует вложенный узел StgNode или массив, то функции GetNode и GetArray вернут пустые элементы. Проверить наличие именованного значения внутри узла позволяет метод IsExists

Создайте и настройте новый модуль для подключения к программному комплексу Топоматик Робур.

С помощью диалогового окна Менеджер ссылок добавьте ссылки на следующие библиотеки:

developers/tutorial/createmodel.1550348719.txt.gz · Последние изменения: 2021/07/22 14:28 (внешнее изменение)