Компас API для получения всех 2D примитивов рисования

Автор GkmSoft, 11.06.13, 11:57:37

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

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

GkmSoft

Сохранение 2D документа
Необходимо сохранять чертежи (и остальные 2D документы) в формте PDF при минимально возможном взаимодействии с пользователем (в идеале — выбором формата в диалоге сохранения файла). Так же желательно что бы все объекты были полноценно векторными.
Возник вопрос о том как получить для каждой страницы её содержимое — один из листов оформления вместе с рамкой (формат PDF позволяет для каждой страницы задать произвольный размер), в виде графических примитивов, пригодных для рисования в PDF: линии, арки, окружности, кривые безье, текст.
Были рассмотрены следующие подходы:
1. PDF принтер, например включеный в проставку  Adobe Acrobat;
2. Проход по всем объектам документа и их сохранение непосредственно в PDF;
3. Сохранение в другой формат (dxf, dwf, emf...) и его преобразование в PDF:
4. Вызов ksDrawKompasDocument и перехват функций GDI.
Проблемы при использовании каждого подхода:
1. Обязательно указывается путь к выходнуму файлу у самого принтера; ко всем листам применяются одни и те же настройки формата; при задании через IPrintJob_PrinterSettings настроики формата не применяются; IPrintJob::Execute( OutputFileName ) задает  OutputFileName как порт вывода и принтер сохраняет по данному пути PostScript файл, что приводит нас к ситуации 3.
2. Для рамки нашли только как получить библиотеку оформлений, номер оформления в ней и текст в ячейках. Производные IDrawingObject являются не графическими примитивами, а элементами чертежа и требуют определенной обработки перед записью в PDF. Чертеж представляет собой единый лист перекрывающийся листами оформления из-за чего требуется отдельно определять какие из объектов должны быть отображены на каждом из листов выходного файла.
3. Задача приводиться к разбору промежуточного файла стороннего формата со своими особенностями.
4. Этот вариант не хотелось бы использовать вообще.

chelkar

Посмотрите функцию DecomposeObj .
Она позволяет привести составные объекты к простым геометрическим примитивам.
+ Благодарностей: 1

GkmSoft


Лучше использовать IDrawingObject в связке с ksDestroyObjects, можно сделать временный клон документа, чтобы не восстанавливать его в исходное состояние, разрушить все сложные объекты на примитивы, в том числе и оформление с помощью функции ksDestroyObjects, работает на порядок быстрее DecomposeObj.