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

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

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

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

Topomatic.Cad.Foundation.dll - базовые математические типы и операции

Topomatic.Cad.View.dll - видовой экран

Topomatic.Dtm - цифровая модель местности

Topomatic.Dwg - чертёж

Topomatic.Planchet.Runtime - формирование планшета

Topomatic.Visualization - сводная модель

Topomatic.Visualization.Runtime - формирование сводной модели

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

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

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

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

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

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

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

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

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

Свойство GeneratePlanchetEventArgs.Layer возвращает текущий экспортируемый слой типа CadViewLayer. С помощью этого свойства Убедимся, что слой является слоем нашей модели.

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

//функция срабатывающая при обявлении бродкаста "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»

"broadcasts": { "generate_planchet": "tutorial_generate_planchet" }

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

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

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

Создание команды добавления элементов ИМ в сводную ИМ

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

Создание команды добавления ИМ в сводную ИМ

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

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

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