Как добавить библиотеку в coreldraw
Для программистов – с 2002 года работаю препресс инженером в типографии. Для меня программирование это хобби: и код, и описание не идеальны. Поэтому буду рад корректуре и критике.
Для полиграфистов – понимаю, что спуски собирают в специализированных программах, но в реалиях моего города это не целесообразно. Тиражи небольшие, а количество макетов наоборот велико и 95% процентов макетов сделано в CorelDraw.
Что понадобится, чтобы магия заработала:
Начальные знания WPF
Для удобства написания воспользуемся дополнениями для Visual Studio от “bonus360”:
Запустим студию от имени администратора, чтобы при компилировании копировать файлы в системные папки. Создаем новый проект, выбрав в качестве шаблона – “CorelDRAW Docker Addon”. Присваиваем имя, например “MagicUtilites”.
В появившемся окошке присваиваем имя докеру, например также “MagicUtilites”, и выбираем те версии CorelDraw, под которые будем разрабатывать. Жмем “Done” и наблюдаем как рутина выполняется сама.
Небольшое отступление. Если при первом запуске возникла ошибка, проверьте объявление пространства имен в файле Extensions.cs, оно должно совпадать с названием проекта.
На этом этапе можно нажать F5 и найти в меню CorelDraw - Window - Dockers ваш докер. Сейчас он пустой и ничего не делает, но мы это исправим.
Открываем файл DockerUI.xaml в конструкторе XAML и добавляем кнопку на докер.
В этот раз сделаем не следуя шаблону MVVM (именно им надо пользоваться разрабатывая на платформе WPF), а разместим код в обработчике события нажатия на кнопку. Но больше такого не повторится, обещаю.
Открываем файл DockerUI.xaml.cs
Класс corel.Application представляет приложение, в котором выполняется код докера. Значение полю присваивается в конструкторе.
Отредактируем метод Button_Click .
В начале метода добавим проверку, что в CorelDraw есть открытый файл. И если открытого файла нет, прекращаем выполнение.
Свойство ActiveDocument типа corel.Application возвращает ссылку на активный документ.
Добавим быстродействия программе.
Остальной код должен быть между этими строками. Метод расширения BeginDraw() отключает перерисовку экрана, вызов событий и выделение corel объектов во время выполнения. Метод расширения EndDraw() восстанавливает настройки.
В активном документе выполним перебор всех страниц. На каждой странице выполним перебор всех corel объектов для поиска текстовых объектов.
При нахождении текстовых объектов, вызывается метод ConvertToCurves() , который переводит этот corel объект в кривые.
Запустим выполнение. Для проверки кнопки “Text Convert to Curves” нужен открытый документ и текст в нем. Реализованный код работает с любыми текстовыми corel объектами, но если этот объект находится в группе объектов или в PowerClip преобразования в кривые не произойдет.
Для решения этой проблемы, разберем как Corel Draw представляет объекты в коде.
Класс corel.Shape содержит свойства и методы для взаимодействия с corel объектами. Свойство Type возвращает именованную константу которая определяет тип corel объекта. Если corel.Shape представляет группу corel объектов, свойство Type вернёт константу cdrGroupShape . Тогда обратившись к свойству Shapes , получим коллекцию corel объектов из группы.
Также с другими типами corel объектов. Если свойство Type возвращает cdrBitmapShape , то свойство Bitmap возвращает ссылку на картинку. Если свойство Type возвращает cdrGuidelineShape , свойство Guide возвращает ссылку на направляющую.
Узнать что corel объект – PowerClip так не получится. Чтобы проверить является ли corel объект PowerClip-ом, проверьте свойство PowerClip на null.
Вернемся к коду.
Выделим перебор corel объектов в два отдельных метода.
Метод MakeToAllPages перебирает все страницы документа.
Метод MakeToShapeRange рекурсивно перебирает переданную коллекцию corel объектов.
В первом условии проверяем является ли corel объект группой и если да, запускаем проверку corel объектов в группе. Во втором проверяем является ли corel объект PowerClip-ом и если да, запускаем проверку corel объектов которые он содержит. В третьем условии проверяем является ли corel объект текстом и если да, переводим его в кривые.
В методе Button_Click остается только вызов метода MakeToAllPages .
Запустим выполнение. Теперь текст обрабатывается в группах и PowerClip.
Но докер с одной кнопкой, это не интересно, добавим больше кнопок.
Добавим обработчики нажатия для этих кнопок.
Сейчас вся работа с corel объектом происходит в методе MakeToShapeRange . Но теперь нам надо находить не только текст, но и картинки и определять есть ли заливка или обводка у corel объекта. Чтобы много раз не копировать код метода MakeToShapeRange , воспользуемся делегатами.
Изменим сигнатуру метода MakeToAllPages() на MakeToAllPages(Action<corel.Shape> action) . Так как вся работа происходит в методе MakeToShapeRange изменим и его сигнатуру. А в методе MakeToAllPages изменим его вызов.
Не забываем изменить аргументы в рекурсивном вызове метода.
Теперь в методах обработчиках нажатия можно воспользоваться вызовом метода MakeToAllPages с анонимным делегатом в качестве аргумента.
Далее уточнения будут в комментариях кода.
На этом сеанс практической магии на сегодня закончен.
В следующей статье хочу описать создание докера для автоматического рисования меток реза на спуске.
Пользуясь случаем, рекомендую очень классные и бесплатные интерактивные онлайн-курсы по программированию от фирмы Контур. Так же рекомендую канал Павла Шмачилина по WPF, это лучшее что я видел на YouTube по этой теме.
До появления в составе CorelDRAW версии 11 символов все вновь созданные объекты, включая копии ранее созданных, сохранялись в файле изображения. Для изображений, включающих в себя многочисленные копии объектов, это приводило к неоправданному раздуванию файлов. Отчасти проблему помогали решить клоны, однако в клоне все элементы должны быть одного размера, да вдобавок элементы неравноправны: удаление мастера клона приводит к «гибели» всех его элементов.
В CorelDRAW 11 в каждом файле изображения (CDR) может сохраняться собственная библиотека символов. Символы, сохраненные в библиотеке символов одного файла, можно перенести в библиотеку другого файла через системный буфер обмена.
Символом называется объект или группа объектов CorelDRAW, внесенная в библиотеку символов под определенным именем для последующего многократного использования в графическом документе.
Экземпляром символа называется копия внесенного в библиотеку символа, использованная при построении изображения. Экземпляр символа представляет собой не полноценный объект CorelDRAW, а ссылку на хранящиеся в библиотеке описание и совокупность управляющих параметров, определяющих преобразования, выполненные именно над этим экземпляром символа. Основным средством для работы с символами в CorelDRAW И является пристыковываемое окно Library (Библиотека). Это окно, открываемое командой Edit > Symbol > Library (Правка > Символ > Библиотека), представлено на рис. 13.4.
Рис. 13.4. Пристыковываемое окно библиотеки символов
В верхней части пристыковываемого окна Library (Библиотека) расположена область предварительного просмотра выделенного символа и некоторые сведения о его описании и использовании в изображении.
В нижней части окна расположен список символов, описания которых внесены в библиотеку.
Чтобы внести выделенный объект или группу объектов в библиотеку в качестве символа, достаточно перетащить мышью этот объект в область списка символов пристыковываемого окна. Для нового символа будет создана строка в списке символов. Остается только отредактировать имя символа, выполнив двойной щелчок мышью на поле строки, расположенном справа от значка нового символа, введя имя и нажав клавишу Enter. Выделенный в документе объект (группа объектов) образует первый экземпляр нового символа.
После этого новый символ готов к вставке в графический документ. Чтобы добавить новый экземпляр, достаточно перетащить мышью строку желаемого символа библиотеки на то или иное место страницы.
На рис. 13.5 представлены три экземпляра символа с именем Банан.
Рис. 13.5. Экземпляры символа
В верхней части рисунка приведены фрагменты изображения, соответствующие экземплярам символа. Видно, что для каждого экземпляра можно задавать индивидуальное имя (см. в окне менеджера объектов, показанном в нижней части рисунка), а также собственные параметры преобразований. В частности, для экземпляра символа можно задать:
Чтобы изменить описание символа, сохраненное в библиотеке, следует щелкнуть на любом экземпляре этого символа правой кнопкой мыши и выбрать в контекстном меню команду Edit Symbol (Редактировать символ) или щелкнуть на одноименной кнопке в пристыковываемом окне Library (Библиотека). По завершении редактирования следует выбрать команду Finish Editing Symbol (Завершить редактирование символа) в контекстном меню, появляющемся после щелчка правой кнопкой мыши на любом из элементов символа.
Экземпляры символов не могут иметь различную заливку и параметры контурных линий. Для смены любого из этих параметров предварительно приходится входить в режим редактирования символов, а по выходе из этого режима заливка и параметры обводки будут изменены как во всех экземплярах символа, так и в описании символа, хранящемся в библиотеке.
Читайте также: