GBX — это универсальный модульный генератор. Каждый генератор в нём представляет собой отдельный
JS-файл. Такой файл автоматически считывается докером и добавляется в список доступных генераторов.
Главный плюс GBX в том, что вам не нужно разбираться, как всё работает на самом низком уровне. По несложным правилам вы описываете интерфейс:
А дальше используете уже упрощённый способ создания объектов CorelDRAW и работы с ними.
Все функции и полное описание находятся в файле gbx_readme.txt.
Если вы совсем не знакомы с программированием, самый простой способ работы — через нейросеть.
Можно показать ей файл gbx_readme.txt и обычными словами описать, какой макрос вам нужен.
По этому описанию нейросеть сможет помочь собрать готовый GBX-модуль.
Но всё равно полезно понимать хотя бы базовую структуру. Так будет проще проверять результат, исправлять мелочи и не бояться кода. Поэтому давайте сделаем простой пример.
Внутри папки GBX есть папки с генераторами. Можно использовать любую существующую папку или создать свою.
Внутри выбранной папки создаём обычный файл с расширением .js.
Например:
ramka.js
Для начала нам нужно описать элементы интерфейса: поля, галочки, кнопки и другие настройки.
Это делается в самой первой строке файла через //params:.
Когда пользователь выбирает объекты в 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.Это самый простой уровень, но именно с таких примеров лучше всего начинать. Когда эта логика станет понятной, можно переходить к более сложным генераторам: коробкам, пазам, шипам, кнопкам и сборке деталей.
mrWoodman © 2026