RU
EN
AR

Woodman Docker для CorelDraw от Деревяшкина

Создание простого GBX-модуля

Макросы в CorelDRAW с помощью докера и нейросетей, изображение №1

GBX — это универсальный модульный генератор. Каждый генератор в нём представляет собой отдельный JS-файл. Такой файл автоматически считывается докером и добавляется в список доступных генераторов.

Главный плюс GBX в том, что вам не нужно разбираться, как всё работает на самом низком уровне. По несложным правилам вы описываете интерфейс:

  • поля ввода;
  • галочки;
  • кнопки;
  • параметры генератора.

А дальше используете уже упрощённый способ создания объектов CorelDRAW и работы с ними. Все функции и полное описание находятся в файле gbx_readme.txt.

Если вы совсем не знакомы с программированием, самый простой способ работы — через нейросеть. Можно показать ей файл gbx_readme.txt и обычными словами описать, какой макрос вам нужен. По этому описанию нейросеть сможет помочь собрать готовый GBX-модуль.

Но всё равно полезно понимать хотя бы базовую структуру. Так будет проще проверять результат, исправлять мелочи и не бояться кода. Поэтому давайте сделаем простой пример.

Создаём файл генератора

Внутри папки GBX есть папки с генераторами. Можно использовать любую существующую папку или создать свою.

Внутри выбранной папки создаём обычный файл с расширением .js. Например:

ramka.js

Для начала нам нужно описать элементы интерфейса: поля, галочки, кнопки и другие настройки. Это делается в самой первой строке файла через //params:.

Как выполняется GBX-модуль

Когда пользователь выбирает объекты в CorelDRAW и нажимает кнопку запуска, докер перебирает выбранные объекты. Мы пишем действие, которое будет происходить с каждым объектом по отдельности.

Для простой работы уже подготовлен объект S — это текущий выбранный объект. Также заранее подготовлены короткие переменные с его основными свойствами:

  • W — ширина объекта;
  • H — высота объекта;
  • L — левая координата;
  • R — правая координата;
  • T — верхняя координата;
  • B — нижняя координата;
  • X — центр по горизонтали;
  • Y — центр по вертикали.

Есть и другие переменные, но к ним мы вернёмся позже. Для первого примера нам уже достаточно этих.

Первый пример: рамка вокруг объекта

Допустим, нам нужно нарисовать прямоугольник вокруг выбранного объекта с заданным отступом.

Назовём этот отступ rGap. Чтобы в интерфейсе появилось поле с таким параметром, в первой строке файла напишем:

//params: rGap=4

Здесь rGap — имя параметра, а 4 — значение по умолчанию. Потом пользователь сможет изменить это значение в интерфейсе, и оно сохранится.

Рисуем прямоугольник

Для создания прямоугольника используем функцию rectangle. Она создаёт прямоугольник по левому нижнему углу, ширине и высоте.

Самый простой вариант выглядит так:

rectangle(L, B, W, H);

Но такой прямоугольник будет точно по размеру выбранного объекта. А нам нужна рамка с отступом. Поэтому изменим строку:

rectangle(L-rGap, B-rGap, W+rGap*2, H+rGap*2);

Почему здесь минус? Потому что нам нужно начать рисовать левее и ниже объекта. Значит, от координат L и B мы отнимаем размер отступа.

А почему отступ умножается на два? Потому что мы добавляем его с двух сторон: слева и справа для ширины, снизу и сверху для высоты.

Получается, наш первый макрос состоит всего из двух строк:

//params: rGap=4

rectangle(L-rGap, B-rGap, W+rGap*2, H+rGap*2);

Это уже рабочий пример. Он берёт выбранный объект и строит вокруг него прямоугольник с заданным отступом.

Добавляем разные отступы

Теперь немного усложним задачу. Сделаем отдельный отступ по горизонтали и отдельный по вертикали.

Вместо одного параметра rGap добавим два:

  • xGap — отступ слева и справа;
  • yGap — отступ сверху и снизу.

Строка параметров теперь будет такой:

//params: xGap=4, yGap=6

А создание прямоугольника будет выглядеть так:

rectangle(L-xGap, B-yGap, W+xGap*2, H+yGap*2);

Логика та же самая. Только теперь по горизонтали используется xGap, а по вертикали — yGap.

Добавляем галочку двойного отступа

Теперь добавим галочку: если она включена, отступ будет увеличиваться в два раза.

Для галочки используется значение true или false. Если написать true, галочка по умолчанию будет включена. Если написать false, она будет выключена.

Добавим параметр rDblGap:

//params: xGap=4, yGap=6, rDblGap=true

Теперь нужно объяснить макросу: если галочка включена, использовать множитель 2, иначе использовать множитель 1.

Что такое переменная

Для этого создадим переменную N. Переменная — это просто маленькая ячейка памяти, в которую можно положить значение и потом использовать его в расчётах.

Сначала можно сделать так:

N = 1;

if(rDblGap){
    N = 2;
}

Здесь мы сначала говорим: пусть N будет равна 1. А потом проверяем галочку. Если rDblGap включена, меняем N на 2.

Есть и другой вариант — через конструкцию “если / иначе”:

if(rDblGap){
    N = 2;
}else{
    N = 1;
}

Читается это почти обычным языком:

если галочка включена — берём 2, иначе берём 1.

Используем множитель в прямоугольнике

Теперь добавим наш множитель N в расчёт рамки:

rectangle(L-xGap*N, B-yGap*N, W+xGap*2*N, H+yGap*2*N);

Если галочка выключена, N будет равна 1, и отступ останется обычным. Если галочка включена, N будет равна 2, и отступ станет двойным.

Полный код теперь выглядит так:

//params: xGap=4, yGap=6, rDblGap=true

if(rDblGap){
    N = 2;
}else{
    N = 1;
}

rectangle(L-xGap*N, B-yGap*N, W+xGap*2*N, H+yGap*2*N);

Добавляем включение и выключение полей

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

Для этого к параметру нужно добавить |check.

Добавим такую возможность к обоим отступам:

//params: xGap=4|check, yGap=6|check, rDblGap=true

Сам код при этом менять не нужно. Итоговый макрос будет таким:

//params: xGap=4|check, yGap=6|check, rDblGap=true

if(rDblGap){
    N = 2;
}else{
    N = 1;
}

rectangle(L-xGap*N, B-yGap*N, W+xGap*2*N, H+yGap*2*N);

Делаем понятные подписи в интерфейсе

Сейчас наш макрос уже работает, но интерфейс выглядит не очень красиво. Пользователь видит имена параметров такими, как мы написали их в коде: xGap, yGap, rDblGap.

Для нас это удобно, а вот обычному человеку лучше показать нормальные подписи: “Отступ по ширине”, “Отступ по высоте”, “Двойной отступ”.

Для этого в GBX есть специальные строки //lang:. Их можно писать после первой строки //params:.

//params: xGap=4|check, yGap=6|check, rDblGap=true
//lang: xGap=Отступ по ширине
//lang: yGap=Отступ по высоте
//lang: rDblGap=Двойной отступ

Теперь в интерфейсе вместо технических названий будут показаны понятные подписи.

Ещё можно добавить подсказку. Для этого после названия ставим символ | и пишем пояснение:

//lang: xGap=Отступ по ширине|Добавляет место слева и справа от объекта
//lang: yGap=Отступ по высоте|Добавляет место сверху и снизу от объекта
//lang: rDblGap=Двойной отступ|Если включено, отступ будет увеличен в два раза

Часть до | — это короткая подпись. Часть после | — это более подробная подсказка.

В итоге наш макрос станет не только рабочим, но и более понятным:

//params: xGap=4|check, yGap=6|check, rDblGap=true
//lang: xGap=Отступ по ширине|Добавляет место слева и справа от объекта
//lang: yGap=Отступ по высоте|Добавляет место сверху и снизу от объекта
//lang: rDblGap=Двойной отступ|Если включено, отступ будет увеличен в два раза

if(rDblGap){
    N = 2;
}else{
    N = 1;
}

rectangle(L-xGap*N, B-yGap*N, W+xGap*2*N, H+yGap*2*N);

Так уже гораздо приятнее: в коде остаются короткие имена параметров, а в интерфейсе человек видит нормальные человеческие подписи.

Итог

Как видите, создать свой первый GBX-модуль не так уж сложно. Мы написали совсем немного кода, но уже получили полезный макрос: он берёт выбранный объект и строит вокруг него рамку с настраиваемыми отступами.

В этом примере мы познакомились с самыми базовыми вещами:

  • как создать файл генератора;
  • как добавить параметры через //params:;
  • как использовать готовые переменные объекта;
  • как создать прямоугольник;
  • как добавить галочку;
  • как использовать простое условие if / else;
  • как включать и отключать отдельные поля через |check.

Это самый простой уровень, но именно с таких примеров лучше всего начинать. Когда эта логика станет понятной, можно переходить к более сложным генераторам: коробкам, пазам, шипам, кнопкам и сборке деталей.

Поддержи проект Деревяшкина и получи эксклюзивную панель макросов!
Статистика
с 23.04.2022
Пользователей
11 051
Активных
2 379
Нажатий
5 063 285

mrWoodman © 2026