Данная статья открывает цикл статей про возможности и особенности API для работы с таблицами в MultiCAD.NET.
Как известно, практически ни один чертеж не обходится без табличного оформления: таблицы применяются для создания объектов, содержащих количественную информацию о конструкции, ведомостей элементов, спецификаций и др. Типичной задачей, с которой сталкиваются проектировщики, является формирование табличного отчета по выбранным объектам чертежа. Автоматизация этой задачи позволит избавить пользователя от рутинной работы, тем самым сократив затраченное время и количество ошибок.
В качестве примера рассмотрим формирование итоговой ведомости электроприборов по плану расположения оборудования (или, проще говоря, по чертежу, иллюстрирующему распределение электрических розеток по помещениям).
Каждая розетка отмечена многоуровневой выноской, которая содержит следующую информацию:
- тип розетки,
- артикул/производитель,
- номер помещения для установки.
Процесс решения поставленной задачи может быть разбит на три этапа:
- создание собственного шаблона таблицы для отчета,
- загрузка шаблона и последовательное заполнение таблицы данными,
- разбивка и постраничная вставка таблицы.
Создание шаблона таблицы
Табличные отчеты обычно формируются на базе стандартных шаблонов, для создания которых чаще используется табличный UI. Однако, в целях демонстрации мы создадим свой собственный шаблон программными средствами MultiCAD.NET. Общий вид итоговой таблицы будет выглядеть следующим образом:
Значения ячеек соответствуют количеству установленных электрических розеток конкретной модели в конкретном помещении. Таблица также будет содержать два верхних колонтитула: обычный колонтитул, который в случае разбивки таблицы будет добавляться к каждой странице отчета, кроме первой, и колонтитул первой страницы.
Ниже представлен пример метода, который создает такой шаблон и сохраняет его в файл с указанным именем.
bool CreateTemplate(string FileName) { McTable temp = new McTable(); temp.DefaultCell.HorizontalTextAlign = HorizTextAlign.Center; temp.DefaultCell.VerticalTextAlign = VertTextAlign.Center; temp.Columns.AddRange(0, 2); temp.Columns[0].Width = 55; temp.Columns[1].Width = 10; // Добавляем секцию верхнего колонтитула первой страницы temp.Rows.InsertSection(SectionTypeEnum.HeaderFirst, 0, 2); System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, 1, 0); temp.Merge(rect); temp[0, 0].TextHeight = 3.5; temp.Rows[0].Height = 10; temp[0, 0].Value = "Ведомость электрических розеток по номеру помещения"; foreach (var cell in temp.Rows[0].Cells) cell.SetBorderLineweight(BorderTypesEnum.ButBottom, -9); temp.Rows[1].Height = 8; foreach (var cell in temp.Rows[1].Cells) { cell.TextHeight = 2.5; } temp[1, 0].Value = "Артикул изделия"; temp[1, 1].Value = "#room"; // Добавляем секцию верхнего колонтитула temp.Rows.InsertSection(SectionTypeEnum.Header, 2); temp.Rows[3].Height = 8; foreach (var cell in temp.Rows[3].Cells) { cell.TextHeight = 2.5; } temp[3, 0].Value = "Артикул изделия"; temp[3, 1].Value = "#room"; // Добавляем секцию данных temp.Rows.InsertSection(SectionTypeEnum.None, 4); temp.Rows[5].Height = 6; temp[5, 0].Value = "#code"; // Сохраняем таблицу во внешний файл if (!temp.SaveToFile(FileName)) { return false; } return true; }
Предлагаемая структура таблицы и формат ячеек могут быть изменены в шаблоне в соответствии с предпочтениями пользователя с помощью редактора таблиц.
В данной реализации ячейки шаблона содержат специальные строки-идентификаторы "#code" и "#room", которые в ходе заполнения таблицы позволят определить какие данные должны быть записаны в конкретную ячейку. Это обеспечит корректное наполнение таблицы даже при возможном изменении количества строк и столбцов в шаблоне.
Формирование отчета
Алгоритм построения таблицы отчета можно разделить на следующие шаги:
- регистрация команды создания отчета,
- выбор на чертеже всех выносок, содержащих описание электрических розеток,
- загрузка шаблона, запуск табличного редактора для возможного изменения шаблона,
- структурирование данных выбранных объектов для последующей записи в таблицу,
- заполнение колонтитулов таблицы (название таблицы, названия столбцов по числу помещений),
- заполнение строк таблицы.
Полный код приложения доступен по этой ссылке, а мы остановимся на некоторых ключевых моментах.
Регистрация команды создания отчета
Добавим «главный» метод приложения, который является обработчиком команды smpl_CreateTableReport и будет содержать реализацию алгоритма:
[CommandMethod("smpl_CreateTableReport", CommandFlags.NoCheck | CommandFlags.NoPrefix)] public void smpl_CreateTableReport() { }
ссылка на оригинал статьи http://habrahabr.ru/company/nanosoft/blog/197682/
Добавить комментарий