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

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


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

developers:tutorial:modelviewexport

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


Экспорт чертежа и элементов информационной модели

Программный комплекс Топоматик Робур предоставляет пользователю возможность экспортировать плоские чертежи, а также генерировать сводную информационную модель (ИМ).

Экспорт элементов информационной модели в сводную ИМ

Для экспорта элементов пользовательской модели в сводную ИМ необходимы следующий действия:

  1. Создание команды добавления элементов ИМ в сводную ИМ
  2. Подписаться на бродкаст «generate_visualization_map» в plugin-файле с помощью команды из пункта 1

Подготовка модуля

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

  • Topomatic.Cad.Foundation.dll - базовые математические типы и операции
  • Topomatic.Cad.View.dll - видовой экран
  • Topomatic.Dtm - цифровая модель местности
  • Topomatic.Dwg - чертёж
  • Topomatic.Planchet.Runtime - формирование планшета
  • Topomatic.Visualization - сводная модель
  • Topomatic.Visualization.Runtime - формирование сводной модели

Подготовка проекта

Добавим элементы нашей модели на план. В нашем случае это будет выглядеть так:

Экспорт элементов модели в плоский чертёж

Для экспорта элементов пользовательской модели в плоский чертёж необходимы следующий действия:

  1. Создание команды добавления примитивов на чертёж
  2. Подписаться на бродкаст «generate_planchet» в plugin-файле с помощью команды из пункта 1

Создание команды добавления примитивов на чертёж

Команда должна вызвать метод принимающий в качестве аргумента объект типа GeneratePlanchetEventArgs. Свойство GeneratePlanchetEventArgs.Model возвращает корневую область модели чертежа типа DwgBlock, в которую следует добавить необходимые примитивы (подклассы DwgEntity).

Модель чертежа можно получить с помощью свойства DwgBlock.Drawing. Прежде чем вносить изменения в чертёж мы зафиксируем его настройки методом Drawing.PushState() и выполним их сброс до состояния по умолчанию методом Drawing.ResetStateDefault(). Далее в блоке try внесём необходимые изменения в чертёж и в блоке finally вернём настройки чертежа в прежнее состояние методом Drawing.PopState().

В теле программного модуля объявите команду, и декорируйте её атрибутом «cmd».

Model.cs
//функция срабатывающая при обявлении бродкаста "generate_planchet"
//подписка на бродкаст осудествляется в plugin-файле в разделе "broadcasts"
[cmd("tutorial_generate_planchet")]
private void GeneratePlanchet(GeneratePlanchetEventArgs e)
{
    // проверяем принадлежит ли слой нашей модели
    if (e.Layer is ModelLayer)
    {
        // отрисовываем примитивы
        GenerateModelPlanchet(e);
        e.Handled = true;
    }
}
 
/// <summary>
/// Формирование примитивов на основе данных полученных из модели
/// и добавление примитивов в чертёж
/// </summary>
/// <param name="e"></param>
private void GenerateModelPlanchet(GeneratePlanchetEventArgs e)
{
    if (e.Layer is ModelLayer layer)
    {
        // определяем префикс имени слоя
        var path = e.Path;
        if (e.SaveFullPath)
        {
            path += ".";
        }
        else
        {
            path = string.Empty;
        }
 
        // если слой включен и относится к нашему типу модели
        // делаем активным необходимый слой чертежа и добавляем примитивы в чертёж
        if (layer.Visible && layer.Model is Model model)
        {
            var modelSpace = e.Model;
            var drawing = modelSpace.Drawing;
 
            // запоминаем настройки чертежа и сбрасываем к значениям по умолчанию
            drawing.PushState();
            try
            {
                drawing.ResetStateDefault();
 
                var layerName = path + layer.Name;
                var dwgLayer = drawing.Layers[layerName] ?? drawing.Layers.Add(layerName);
                drawing.ActiveLayer = dwgLayer;
 
                for (int i = 0; i < model.Count; i++)
                {
                    var points = model[i];
                    var vertices = new List<Vector2D>();
 
                    for (int j = 0; j < points.Count; j++)
                    {
                        var point = points[j];
                        var text = modelSpace.AddText(j.ToString(), point, 2, 1, 0, 0);
                        text.Color = new CadColor(Color.Orange);
                        vertices.Add(point);
                    }
 
                    var pline = modelSpace.AddPolyline(vertices);
                    pline.Color = CadColor.Yellow;
                }
            }
            finally
            {
                // восстанавливаем предыдущие настройки чертежа
                drawing.PopState();
            }
        }
    }
}

Команда «tutorial_generate_planchet» должна выполняться в момент создания планшета или экспорта ситуации. Для этого добавим соответствующую запись в plugin-файл в секции «broadcast»

tut_export_model_views.plugin
"broadcasts": {
  "generate_planchet": "tutorial_generate_planchet"
}

В результате работы команды «tutorial_generate_planchet» в экспортированном файле плоского чертежа появятся примитивы нашей модели.

developers/tutorial/modelviewexport.1670932469.txt.gz · Последние изменения: 2022/12/13 11:54 — proxor