Рассыпать многолистовой чертёж на отдельные листы

Автор polisher, 01.08.17, 11:46:34

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

polisher

Всем доброго времени суток!
Имеется многолистовой чертёж (основной комплект рабочих чертежей). Задача - сохранить каждый лист в отдельный файл, естественно с сохранением основной надписи и пр.
Руками для каждого листа №n делается по следующей схеме:
1) Создаём новый документ.
2) Оформляем его как лист n.
3) Копируем рамкой из исходного чертежа всё, что попадает в границы листа n.
4) Вставляем скопированное в новый документ.
5) Сдвигаем вставленное, чтобы попало внутрь оформления.
6) Сохраняем новый документ.

Хотелось бы то же самое проделать автоматически, с перебором каждого листа.
Перебрать листы не проблема: через ISheelLayouts. А вот как выделить рамкой найти не могу! Есть ExecuteKompasCommand (ksCMSelectGroup), но там непонятно, как координаты рамки задать. Есть ISelectionManager, есть ICopyObjectParams...

Может, найдётся добрый человек и подскажет, как программно выделяются объекты рамкой. Если всё получится, я бы ему исходники решённой задачи сбросил  ;)


polisher

Спасибо огромное! Попробую копать в этом направлении. Придётся с координатами повозиться, потому как не нашёл у ISheetLayout никаких координат местонахождения на "многолистовом листе". Придётся в цикле считать и накапливать


polisher

Так точно. На них и буду ориентироваться.

Повозившись некоторое время понял, что тактически грамотно будет немного изменить алгоритм. Для каждого листа (получаем по SheetLayouts.Count) выполняем следующее:
1) Копируем файл (к имени прибавляем номер листа).
2) Грузим новый файл.
3) Удаляем все оформления, кроме нашего. Оно сдвинется на 0.0 стандартного вида.
4) Вычисляем координаты.
5) Копируем исключающей рамкой и удаляем всё ненужное.
6) Ещё раз копируем нужные остатки и сдвигаем к началу координат.

Так мы избавимся от муторного переноса содержимого основной надписи, техтребований и пр.