RU
EN

Справка GBX для Woodman Docker

Справка GBX: параметры, интерфейс и функции

Этот раздел собран как рабочая шпаргалка по файлу генератора GBX: как описывать первую строку //params:, какие элементы интерфейса доступны, какие переменные подготавливает докер и какие функции можно использовать для создания объектов CorelDRAW.

Оглавление

Формат первой строки должно начинаться с "//params: " пробел в конце обязательно далее через запятую описываем поля по шаблону имя поля только латиницей т.к. это будет переменной для вставки в код имя поля = значение по умолчанию.

//params: [имя_поля]=[значение_по_умолчанию], ...

📝 Основные типы значений и их назначение

  • true или false — формируют чекбокс (переключатель включено/выключено).
  • : Значения, разделённые двоеточием : — формируют группу radiobutton (переключателей с выбором одного варианта).
  • text — задаёт простой текстовый заголовок.
  • block — начало раздела интерфейса: заголовок со стрелкой плюс сворачиваемое тело.
  • div — то же тело раздела, но БЕЗ заголовка и без сворачивания. Нужен, когда группу полей надо просто показывать и прятать из кода.

Раздел закрывается параметром endblock, началом следующего блока или концом строки.

Начальным состоянием и переключением раздела управляет действие showblock — у него три формы, см. ⚙️ Специальные символы и действия.

  • list — создаёт выпадающий список. Имена и значения полей описываются ниже с помощью строки
//list:имя_списка имя_поля=значение, имя_поля=значение, имя_поля=значение

текстовые подписи для элементов прописываются по аналогии в `//lang:`

пример material=list|show##g/cm3

//list:material g375=11.55, g500=12.7, g585=13.6
//lang: material_g375=Золото 375 проба (9К)
//lang: material_g500=Золото 500 проба (12К)
//lang: material_g585=Золото 585-200 проба (14К)
  • btn — создаёт кнопку, код которой должен лежать в одноименной папке скрипта с именем параметра

пример: параметр my_btn=btn у генератора myscript.js ищет код в gbx/myscript/my_btn.js

для маленького кода код кнопки можно вставить в основной скрипт.

проверка нажатия через условие if (btn=='my_btn')

Сравнение совпадает потому, что имя параметра подставляется и в литерал, и в id кнопки. С кнопкой, которой нет в //params: (например, добавленной через addbtns), так не выйдет — в btn придёт её настоящий id.

//params: knopka1=btn, knopla_sdelaj_ohuenno=btn,sklejka=btn|wide, hideall;

if (btn=="sklejka"){ //это код для иммитации кнопки "собрать"
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/** КРАЙНЕ НЕ РЕКОМЕНДУЮ СБОРКУ ДЕЛАТЬ ТАКИМ СПОСБОМ. используйте стандартные кнопки. **/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
sstop=true; // останавливаем цикл чтобы он не обрабатывал каждый объект а сделал только один раз.
ch_kbx_compens.checked = false; // отключить создание компенсации.
glue_kbx(); // собственно и запускаем функцию сборки
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
}else if(btn=="knopka1"){
// тут код внутри скобок
}else if(btn=="knopla_sdelaj_ohuenno"){
// тут код внутри скобок
}else{
// тут весь остальной код внутри скобок
}

Так же можно задать значение текстового поля через val_имя_поля.

Пример. для поля paz_gap=6 можно поменять значение на 4 через val_paz_gap=4.

  • range — создаёт кнопки вниз - вверх и между ними текстовое поле со значением.

параметры задаются в формате |min#4:

  • min — стартовое (минимальное значение)
  • max — предельное значение
  • step — шаг увеличения кнопками
  • def — значение по умолчанию (при первом запуске)
dot_size=range|min#1|max#10|def#4|step#2,
  • folder — создаёт текстовое поле и кнопку для выбора папки

dxf_folder=folder

  • file — создаёт текстовое поле и кнопку для выбора файла

параметр filter задаёт фильтрацию файлов по типу

dxf_file=file|filter#*.dxf#*.cdr

⚙️ Специальные символы и действия

Вертикальная черта | разделяет альтернативные действия или состояния параметра.

Всё, что идёт после `|`, приводится к НИЖНЕМУ регистру — вместе с аргументами через #. Значит в active#, deactive#, showblock# и filter# можно ссылаться только на параметры, чьи имена целиком строчные: SM=true|deactive#Gor#Vert ищет поля val_gbx_gor и val_gbx_vert, которых нет, и молча ничего не делает. Исключения — btntitle#кнопка#ключ и флаги первой строки вроде useNodes|pFlip: они разбираются из сырой строки и регистр сохраняют.

Специальные действия, которые могут идти через |:

  • glue — склейка текущего элемента в одну строку с предыдущим.
  • active — активация связанных элементов или параметров по их ID.
  • deactive — деактивация связанных элементов или параметров по их ID.
  • even — проверка значения на чётность.
  • odd — проверка значения на нечётность.
  • mm — отменяет проверку чётности, если установлен чекбокс mm.
  • noscale — не переводить значение из миллиметров в единицы документа. Числовое поле по умолчанию считается через vall(), а тот делит введённое на масштаб документа (WorldScale): поле заполняют в миллиметрах, а генератору нужны единицы. Размерам это и нужно, а количествам, углам, процентам и составляющим цвета — нет: в чертеже с масштабом 1:10 «20 зубьев» превратились бы в 2. Ставится только числовым полям (см. Числа, строки и ловушка нуля), у строковых масштаба нет вовсе. Пример: teeth1=20|noscale, hangle=45|noscale, clapan_angle=45|noscale limit=65 — перед limit=, а не после.
  • un — очень узкий (5%)
  • narrow — узкий (12%)
  • wide — широкий стиль полю ввода (35%)
  • uwide — очень широкая (65%)
  • wide10, wide25, wide30, wide40, wide45, wide50, wide75, wide90 — ширина в процентах прямо в имени
  • mid — средняя ширина (25%)
  • free — без стиля.
  • center — выравнивание по центру
  • left — выравнивание по левому краю
  • bold — жирное начертание текста
  • italic — курсивное начертание текста
  • notitle — убирает заголовок у элемента
  • read — делает поле ввода только для чтения
  • show — действие для списка - показывает значение в специальном поле.

формат |show#prefix#postfix |show## |show##postfix |show#prefix#

  • check — добавляет чекбокс активности поля. Снятая галочка ГАСИТ поле, и переменная получает false, а не значение. Отсюда три способа спросить:
if (!size)            // выключено ИЛИ введён ноль
if (size === false)   // именно выключено, ноль сюда не попадёт
if (!ch_gbx_size)     // сама галочка, у неё своё имя: ch_gbx_<имя_поля>

Ноль от снятой галочки отличается только третьей и второй формой: false в арифметике ведёт себя как ноль (false*2, false+5, false>0 — всё как с нулём), поэтому старые генераторы от этого не ломаются. А вот parseFloat(size) даст NaN вместо нуля, и склейка "H" + size даст "Hfalse" вместо "H0" — если поле идёт в строку или в parse*, пишите (size || 0).

Значение читает getValGBX() — это getVal() плюс проверка на погашенность. Сам getVal() в такой ситуации отдаёт 0, и «галочка снята» неотличимо от «введён ноль»; в остальной панели это не мешает, там галочки проверяют напрямую, поэтому getVal оставлен как был.

  • showblock — связывает раздел (block/div) с галочкой или радиокнопкой. Форма зависит от того, на чём стоит:

имя_блока=block|showblock#поле — начальное состояние раздела при загрузке берётся из сохранённого значения поле; для радиокнопки вариант уточняется третьим ключом: showblock#поле#вариант.

галочка=false|showblock#имя_блока — галочка разворачивает и сворачивает раздел имя_блока.

выбор=вариант1|showblock#имя_блока:вариант2 — то же у радиокнопки, признак ставится на КАЖДЫЙ вариант. По умолчанию раздел открыт на своём варианте, другое условие задаётся третьим ключом: showblock#имя_блока#вариант.

  • btntitle#кнопка#ключ — только для галочки: пока она стоит, кнопка называется по второму ключу словаря, иначе по своему. Имена берутся как написаны, с регистром. Пример: pQtySplit=false|btntitle#pSplit#pSplitQty — кнопка pSplit покажет lang['gbx_pSplitQty']

limit и IF — ограничение значений

`limit=` в строке `//params:` — потолок числового поля. Пишется через ПРОБЕЛ после значения по умолчанию, а само выражение вычисляется уже во время работы генератора, поэтому в нём можно пользоваться предварительными переменными:

//params: side_glue_size=30 limit=W/4, clapan_angle=45 limit=65

Ввели больше — значение обрежется, поле в интерфейсе перепишется и сохранится. Работает только для числовых полей (см. Числа, строки и ловушка нуля).

`(выражение limit=выражение)` в теле генератора — то же самое, но разово, прямо в формуле. Разворачивается в ((A > B) ? B : A):

var rtop = Y + H*1.5 + HI + TH*3.5 + (HI limit=H-fixround);

Скобки обязательны, и внутри них не должно быть других скобок: замена идёт регуляркой по самому внутреннему уровню.

`IF(условие, да, нет)` — тернарник без вопросительного знака, если так читается легче:

var w = IF(W>100, 100, W);

Условие — одно сравнение (<, >, =, ==, !=, <=, >=), запятых внутри аргументов быть не должно.

📌 Прочие особенности

  • Параметры могут быть пустыми — служат для визуального или логического разделения.

Специальные параметры:

  • br — разрыв строки (перенос).
  • hr — горизонтальная линия.
  • endblock (необязательно) — закрывает раздел. Раздел также закрывается началом следующего блока или в конце строки.
  • hidethhi — для скрытия полей толщина и высота
  • hideshippaz — для скрытия кнопок с цветом шипов/пазов
  • hidebtns — для скрытия нижних кнопок "создать" и "склеить"
  • hidetools — для скрытия нижних инструментов перегородки, шипы и гибкий рез
  • hideall — для скрытия всех этих блоков
  • addbtns=btn1|btn2 — Можно добавить кнопки из интерфейса. Пример: addbtns=btn_cmnborder|btn_monoline_font
*** служебные параметры
  • maxLimit=X — Задаёт лимит на предупреждении о выборе большого числа объектов. По умолчанию значение 5. maxLimit=666
  • noduplicateS — параметр который не создает копию объекта S = s.Duplicate() а использует оригинальный объект
  • noMove — предотвращает перемещение исходного объекта вверх
  • showLen — включает площади и длины: A и LE у текущего объекта, allA и allLE по всей выборке. Без флага этих переменных НЕТ вообще: обращение к ним даст ошибку с номером строки, а не тихий NaN в геометрии. Дело в цене — площадь разбирает КАЖДЫЙ подпуть объекта (габариты, площадь, стартовый узел), а потом сверяет вложенность каждого подпути с каждым; длина читает DisplayCurve.Length. На выборке в несколько десятков объектов это сотни обращений к Corel на каждое нажатие кнопки, а нужны они единицам генераторов. allA и allLE считаются до перебора, поэтому работают и вместе с noOS.
  • useNodes или useNodes|кнопка — генератор работает с выбранными узлами. Даёт сразу три вещи:

1. до тела генератора собирается массив selNodes — выбранные узлы объекта, и selSP — подпуть, в котором они нашлись (null, если выбранных узлов нет). Массив тот же, что отдаёт getSelNodes: с единицы, каждый элемент [x, y, номер узла в подпути], в порядке от начала куска и с учётом перехода через точку старта в замкнутом контуре

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

3. перебор объектов останавливается на первом (sstop): выбранные узлы бывают только у одного объекта

Плюс не вызывается CreateSelection: объектное выделение не пересоздаётся, и Corel не выходит из режима правки узлов

Если указано имя кнопки (useNodes|pFlip), всё перечисленное включается ТОЛЬКО при нажатии этой кнопки, остальные кнопки генератора работают как обычно. Без имени флаг действует на весь генератор — и остановка перебора тоже, о чём легко забыть: соседняя кнопка, которой нужны все выбранные объекты, обработает только первый

  • noOS — убирает перебор объектов. все переменные объекта не доступны. Доступны:

HI, TH, shft, btn, sr, join, copy, last, color_paz, color_ship, color_vstr, color_grav, color_3mm, color_cut, OScnt, OSstart, toDel, delMe

Плюс allA и allLE, если стоит showLen.

  • hidebtns и hideall заодно снимают галочку компенсации, и toDel в таком генераторе всегда false — исходник придётся удалять руками.

ID параметров используются для связи и взаимного включения/выключения через active и deactive.

пример (все должно быть в 1 строку)

//params: name=korobka, mm=false|glue, paz_wi=7|odd|mm, paz_le=5|odd|mm, paz_hi=5|odd|mm, paz_gap=6, close_dno=open:dno:side, close_side=open|active#make_shoes_cover:close|deactive#make_shoes_cover:vstr|deactive#make_shoes_cover, cover_box=false|deactive#make_shoes_bot_holes#make_shoes_cover, slide_box=false|deactive#make_shoes_bot_holes#make_shoes_cover, round_corners=true, circle_vstr=false,covertext=block, make_shoes_cover=false|active#cover_gap#cover_height#make_shoes_holes|deactive#cover_box#slide_box, cover_gap=1, cover_height=15, endblock,text_shoe_holes=text, make_shoes_holes=true, make_shoes_bot_holes=true|glue, make_shoe_holes_four=false;

Параметры и правила:

самая первая строчка, обязательно начало с "`//params:` ":

  • name=korobka — имя модели
  • mm=false|glue — чекбокс mm, действие glue (склейка с предыдущим)
  • paz_wi=7|odd|mm — числовое значение, проверка на нечетность, mm отменяет проверку
  • paz_le=5|odd|mm — длина паза, с теми же проверками
  • paz_hi=5|odd|mm — высота паза, с теми же проверками
  • paz_gap=6 — числовое значение, шаг между пазами
  • close_dno=open:dno:side — radiobutton с тремя вариантами

close_side=open|active#make_shoes_cover:close|deactive#make_shoes_cover:vstr|deactive#make_shoes_cover — radiobutton с активацией/деактивацией элементов

  • cover_box=false|deactive#make_shoes_bot_holes#make_shoes_cover — чекбокс с деактивацией связанных элементов
  • slide_box=false|deactive#make_shoes_bot_holes#make_shoes_cover — чекбокс с деактивацией связанных элементов
  • round_corners=true — чекбокс
  • circle_vstr=false — чекбокс
  • covertext=block — начало раздела интерфейса

make_shoes_cover=false|active#cover_gap#cover_height#make_shoes_holes|deactive#cover_box#slide_box — чекбокс с активацией/деактивацией связанных элементов

  • cover_gap=1 — числовое значение
  • cover_height=15 — числовое значение
  • endblock — закрытие раздела
  • text_shoe_holes=text — текстовый заголовок
  • make_shoes_holes=true — чекбокс
  • make_shoes_bot_holes=true|glue — чекбокс с действием glue
  • make_shoe_holes_four=false — чекбокс

Числа, строки и ловушка нуля

Поле превращается в переменную по одному из двух правил, и решает это ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ из //params:, а не то, что пользователь потом введёт:

  • умолчание — число, и первый символ НЕ 0: переменная считается через vall(), то есть поле понимает запятую и выражения («2+2», «W/3»), и к нему применяются odd, even и limit;
  • всё остальное, включая 0, 0.5 и 01: переменная получает СЫРУЮ СТРОКУ из поля. Ни vall(), ни odd/even/limit не работают.

То есть gap=0 даёт строку, а gap=1 — число. Нужен ноль по умолчанию — ставьте умолчанием ненулевое число, а в коде приводите сами: var g = vall(gap);

Число проходит ещё и через масштаб документа: vall() делит введённое на WorldScale, потому что поле заполняют в миллиметрах, а код работает в единицах документа. Размерам это и нужно, а количествам, углам, процентам и составляющим цвета — нет, им ставьте `noscale`. У строковых полей (тех самых, с нулём в умолчании) масштаба нет вовсе — там noscale ни на что не влияет.

Галочка от check в саму переменную не входит, но снятая галочка ГАСИТ поле, и переменная получает false — см. `check`. То же самое с полем, погашенным чужим deactive#. if (!foo) работает как раньше, foo === false отличает выключенное поле от введённого нуля, а parseFloat(foo) на выключенном даст NaN.

Имя параметра занимает всё имя в файле

Панель не «передаёт» параметры в код — она текстом заменяет их имена по всему файлу генератора: paz_wi становится gbx_paz_wi везде, где встретится отдельным словом. Отсюда правила:

  • имя параметра нельзя использовать как имя переменной, аргумента функции или ключа объекта — подстановка не разбирает, где что;
  • после точки замена не идёт, поэтому kb.gap безопасно всегда;
  • строковые литералы тоже переписываются. Именно поэтому сравнение if (btn=="my_btn") совпадает: обе стороны стали gbx_my_btn. Но литерал имени, которого НЕТ в //params:, не перепишется, и такое сравнение не сработает никогда.

//script: — код после сборки интерфейса

Строка //script: кладёт JS, который выполняется ОДИН РАЗ сразу после того, как панель построила поля генератора. Строк может быть сколько угодно, они склеиваются по порядку и запускаются одной анонимной функцией.

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

//script: var el=document.getElementById('val_gbx_marks_out'); if(el){el.style.margin='4px 6px';}
//script: populateList("val_gbx_ppal", PalList);

Тело генератора к этому моменту ещё не выполнялось: ни s, ни W, ни переменных параметров нет. Подстановка имён на эти строки НЕ распространяется — к полям обращаться по полному id val_gbx_<имя>.

🌐 Подписи и локализация

Подпись поля панель берёт из lang['gbx_<имя параметра>'], подсказку — из hint['gbx_<имя>']. У радиокнопок ключ длиннее: gbx_<имя>_<вариант>, у пунктов списка — gbx_<имя списка>_<ключ пункта>. Нет ключа — подписью становится само имя параметра.

Релизные генераторы — только langs\ru.js

У генераторов из подпапок gbx\ строк //lang: больше нет: все подписи лежат в wpanel\langs\ru.js ключами gbx_*, а остальные 26 языков из него генерирует wpl.py. Строка //lang: работает ТОЛЬКО для русского, поэтому в релизном генераторе она означает, что весь остальной мир увидит русский текст.

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

Сам генератор в списке описывается там же, ключ — путь к файлу без расширения:

lang["gbx_file_aGBX/abox segments"] = "Сегментные (ломаные)";
hint["gbx_file_aGBX/abox segments"] = "Создаёт из сложного периметра стенки.";
desc["gbx_file_aGBX/abox segments"] = "Что нарисовать и что нажать — развёрнутая справка.";
utub["gbx_file_aGBX/abox segments"] = "https://youtu.be/e0FVWmTgQlg";

utub и vkvi дают значок ролика слева от списка генераторов; какой из двух показать, решает настройка докера.

Предупреждение над полями генератора — ключ gbx_warning_<путь к файлу>. Безымянный gbx_warning одноразовый: он гасится сразу после показа, и его ставит строка //lang: warning= внутри самого файла.

//lang: — подписи внутри файла генератора

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

//lang:  — строка для добавления локализованных подписей и описаний если их не существует в языковом пакете самого докера
  • должна начинаться с "//lang: " с пробелом в конце
  • далее идёт имя_переменной, опционально через | указывается язык (например, en, ru)
  • после знака = краткий текс и (подпись), через | можно добавить подробное описание

Цифровые значения

Shift = 1, Ctrl = 2, Alt = 4;
  • если язык ru, его можно не указывать (по умолчанию русский)
  • подробное описание не обязательно, можно указать только краткий текст

Примеры

//lang: title1=Настройка пазов|Тут можно настроить пазы по количеству.
//lang: title2=Вводятся только нечетные значения|Нечетные значения потому что так получается красивая симметрия.
//lang: round_corners=Скругление углов|Скругление углов коробки
//lang: round_corners|en=Round corners

🧩 Свои файлы у генератора

Для кнопок создать и собрать можно добавить свои действия на функциональные кнопки Ctrl+Alt+Shift+...

Учтите, что кнопка собрать сначала выполняет основную сборку шип/пазов, а затем выполняет функциональные кнопки.

Дополнительные файлы генератора myscript.js лежат в ПАПКЕ РЯДОМ С НИМ — gbx/myscript/, а не в js/:

  • gbx/myscript/make.js — кнопка Создать с любым модификатором;
  • gbx/myscript/glue.js — кнопка Собрать с Ctrl и старше, уже ПОСЛЕ основной сборки шипов и пазов;
  • gbx/myscript/<имя кнопки>.js — код кнопки <имя кнопки>=btn. Нет такого файла — нажатие уходит в основной файл генератора, и разбирать его надо по переменной btn.

У каждого такого файла своя первая строка //params: (её служебные флаги действуют на этот запуск), но интерфейс панель строит только по основному файлу.

этот скрипт выполняется для каждого выбранного объекта.

Если вам не нужно выполнять много раз в конце кода последней строчкой пишем

        break;

Описывать в начале файла так же как язык.

Сейчас это не работает: чтение номерных подписей из make.js/glue.js в панели отключено, и подписи кнопок Создать/Собрать берутся только из словаря панели. Сами файлы вызываются как прежде — переименовывается только кнопка.

    //lang: — строка для добавления функциональных кнопок
  • должна начинаться с "//lang: " с пробелом в конце
  • далее идёт номер кнопки и опционально через | указывается язык (например, en, es)

Цифровые значения кнопок Shift = 1, Ctrl = 2, Alt = 4;

Все комбинации это просто сумма цифровых значений

Примеры

            //lang: 5=Собрать со сдвигом|Собрать коробку со сдвигом элементов вправо
            //lang: 5|en=Make with shift|Make with shift elements to the right

5 - это сумма 4+1 те. кнопки Shift и Alt

Справочник по конструктору SHAPE и функциям

пример:

var rect = rectangle(50,50,200,100,5);

создаст прямоугольник левый нижний угол координата 50,50 шириной 200 и высотой 100мм

🧱 Примитивы (более подробное описание в самом низу)

  • line(...)
  • Создаёт линию или кривую. Поддерживает массивы и Bezier-сегменты.
  • rectangle(x, y, w, h[, r1[, r2, r3, r4]])
  • Создаёт прямоугольник по левому нижнему углу и ширине и высоте. Радиусы углов опциональны.
  • rectangleXY(x1, y1, x2, y2 [, r1[, r2, r3, r4]])
  • Создаёт прямоугольник по левому нижнему углу и правому верхнему. Радиусы углов опциональны.
  • circle(x, y, r[, r2])
  • Создаёт окружность или эллипс.
  • poly([x1,y1, x2,y2, ...], closed)
  • Создаёт многоугольник из массива точек. Принимает и массив объектов [{x,y}, ...].
  • polyCurve(points, closed, smooth, reduce, corelShape)
  • То же, но с кривыми: каждая точка может нести управляющие координаты.
  • text(X, Y, text, size, font, params)
  • Создаёт и размещает текстовую надпись в документе.
shipy(shape, side, ...) или shipy(x1, y1, x2, y2, ...)
  • Создаёт пользовательскую кривую на стороне shape или по координатам.

Поддерживает инверсию сторон с префиксом "-".

  • line_teeth(x1, y1, x2, y2, nums, th, direction, shift)
  • Создает прямоугольные шипы вдоль линии. Шипы имеют небольшое сужение для лучшей посадки.
  • line_slots(x1, y1, x2, y2, nums, th, direction, shift)
  • Создает прямоугольные пазы для сопряжения с шипами. Каждый паз создается как отдельный прямоугольный объект.
  • perf(obj, dash, gap)
  • Создаёт перфорацию
  • function makeGlueFlap(points, height, slopeAngle, join)
  • Создаёт вдоль линии клапан для склепки Point - массив из 2х точек [x1,y1, x2,y2].
  • pointOnCircle(cx, cy, r, angleDegrees, r2)
  • Возвращает координаты точки на окружности под углом angleDegrees. Если задан r2, то возвращает координаты двух точек.

📦 Предварительные переменные

Перед созданием объекта SHAPE, автоматически подготавливаются переменные для упрощённой работы:

!регистр переменных очень важен!

  • s — Исходный объект (кореловский). (s маленькое)
  • S — Копия исходного объекта (карабокса). Для него применимы все методы (функции) описанные ниже
  • W — Ширина объекта (s.SizeWidth).
  • H — Высота объекта (s.SizeHeight).
  • A — Площадь текущего объекта. Только с флагом `showLen`.
  • allA — Площадь всех объектов. Только с флагом `showLen`.
  • LE — Длина всех кривых текущего объекта. Только с флагом `showLen`.
  • allLE — Длина всех кривых всех объектов. Только с флагом `showLen`.
  • L — Левая координата (s.LeftX).
  • R — Правая координата (s.RightX).
  • T — Верхняя координата (s.Topy).
  • B — Нижняя координата (s.Bottomy).
  • HI — Значение из поля ввода высота коробки
  • TH — Значение из поля ввода толщина
  • X — Центр X: либо CenterX
  • Y — Центр Y: либо CenterY
  • join — Строка "join", используется как флаг режима.
  • copy — Строка "copy", используется как флаг режима.
  • last — Строка "last", заменяет последнюю использованную координату.
  • color_paz — Цвет для пазов.
  • color_ship — Цвет для шипов.
  • color_vstr — Цвет для встречных пазов.
  • color_grav — Цвет для гравировки.
  • color_3mm — Цвет для 3мм.
  • color_cut — Цвет для реза.
  • rnd_num — Случайный номер для идентификации объектов
  • sNum — Номер объекта если случайный номер был присвоен объекту. genNum(s.name)
  • addShape — Признак добавления объекта s в выделение. Если false, то объект s не добавляется в выделение.
  • lastnum — Признак последнего использованного номера. Можно использовать для идентификации объектов в цикле.
  • toDel — Флаг чекбокса удалять исходный объект или нет.
  • compensation — Размер компенсации или ноль если чекбокс не стоит.
  • sfirst и slast — флаги проверка первый это объект или последний.
  • sindex — порядковый номер текущего объекта в OS.Shapes()
  • sstop — флаг для прерывания обхода всех объектов.
  • OScnt — общее количество объектов в OS.Shapes()
  • delMe — если эту переменную присвоить объекту, то при сборке он удалится. S.name(delMe);
  • sLast — Последний объект в выборке
  • sFirst — Первый объект в выборке
  • btn — id нажатой кнопки. Для кнопок из //params: сравнивается прямо с именем параметра: if (btn=='my_btn').
  • shft — модификаторы, с которыми нажали кнопку. Shift = 1, Ctrl = 2, Alt = 4, комбинации складываются.
  • sr — ShapeRange, который генератор вернёт наружу. Объекты в него панель добавляет сама, но можно класть и свои: krug.add(sr).
  • sstring — слепок текущего объекта строкой. Нужен, чтобы отличить исходный объект от результата операции, когда Corel подменил ссылку.
  • OSstart — сколько объектов было в выборке до начала перебора. OScnt генератор может поменять сам, OSstart остаётся исходным.

reinit() — пересчёт предварительных переменных

Переменные выше считаются один раз, до начала кода генератора. Если объект после этого подвинуть или изменить его размер, они останутся со старыми значениями:

s.SizeWidth = W * 2;
// W, R, X здесь ещё старые!

reinit() перечитывает их заново:

s.SizeWidth = W * 2;
reinit();          // W, H, L, R, T, B, X, Y, HI, TH снова верные (с showLen ещё A и LE)
  • reinit() — без аргумента считает по текущему s.
  • reinit(obj) — считает по указанному объекту. Принимает и кореловский объект, и SHAPE (reinit(S)).

Саму переменную s при этом не подменяет — меняются только производные значения.

  • Возвращает false, если объекта уже нет (удалён), и ничего не трогает.

HI и TH пересчитываются с учётом объекта, поэтому выражения вида w/2 или *0.3 в полях ввода дадут новое значение от нового размера.

Не пересчитываются: rnd_num (он случайный, и должен остаться прежним), sNum, allA, allLE (они про всю выборку, а не про текущий объект). A и LE без флага showLen не считаются вовсе, и reinit() их тоже не трогает.

Ошибки в коде генератора

Панель собирает из файла генератора функцию и компилирует её. Номера строк в сообщениях об ошибках — это номера строк вашего файла, считая с первой строки //params:.

  • Ошибка при работе (обращение к тому, чего нет, отказ Corel и т.п.) уходит в отладку

с именем файла и номером строки.

  • Ошибка синтаксиса ловится ещё до запуска: генератор просто не выполнится, а в панели

появится красное сообщение с диапазоном строк. Лишняя открывающая скобка называется точно — с номером строки, где её открыли.

Строка указывается по последнему пройденному оператору. Если оператор растянут на несколько строк, будет названа та, с которой он начинается.

для того чтобы выполнить только 1 раз для любого количества выбранных объектов есть 2 способа

  • 1) в конце кода добавить sstop = true; тогда код выполнится только с первым объектом и завершится.
  • 2) использовать проверку if (slast) тогда код выполнится только с последним объектом.

🔧 Конструктор SHAPE(corelShape, type)

Оборачивает объект CorelDRAW (Shape) в удобный интерфейс для манипуляций.

📏 Геометрия и позиционирование

  • W(val) — Ширина. Получить или установить ширину.
  • H(val) — Высота. Получить или установить высоту.
  • L(val) — Левая граница (LeftX).
  • R(val) — Правая граница (RightX).
  • T(val) — Верхняя координата (TopY).
  • B(val) — Нижняя координата (BottomY).
  • X(val) — Центр по оси X. Учитывает флажок ch_sett_center.
  • Y(val) — Центр по оси Y. Учитывает флажок ch_sett_center.
  • LE() — Длина всех кривых объекта. Только чтение.
  • setCenter(x, y) — Задать центр вращения. Без аргументов — геометрический центр, setCenter("R") или setCenter(true) — точка вращения самого объекта. Заданный центр дальше используют rotate, flip, moveTo и copyTo.
  • syncName() — Перечитать имя объекта из Corel и обновить по нему числовой код (.code). Нужно, если имя поменяли мимо name().

🎨 Цвет и заливка

  • setColor([R,G,B]) — Устанавливает цвет обводки в RGB.
  • setColor([C,M,Y,K]) — Устанавливает цвет обводки в CMYK.
  • setFill([R,G,B]) — Устанавливает цвет заливки в RGB.
  • setFill([C,M,Y,K]) — Устанавливает цвет заливки в CMYK.
  • если передать false — то уберется абрис или заливка.
  • copyFill — Копирует заливку объекта
  • copyOutline — Копирует абрис объекта
  • copyColor — Копирует и заливку и абрис.
  • setFont(font, size) — Задать шрифт и/или размер если это Текст.

✂️ Операции с формами

  • name(val) — Получает или устанавливает имя объекта.
  • cut(shape, leavesrc, leavetarget) — Обрезает текущую форму по другой (shape). leavesrc=true — текущий объект не подменять результатом (результат только в возвращаемом SHAPE), leavetarget=true — сохранить и сам резак. Возвращает НОВЫЙ SHAPE с результатом.
  • weld(shape, leavesrc, leavetarget) — Объединяет текущую форму с другой. Флаги те же.
  • intersect(shape, leavesrc, leavetarget) — Создаёт пересечение двух объектов. Флаги те же.
  • join(shape, reduce, dist) — Объединяет и соединяет кривые. reduce — сокращать узлы, dist — дистанция поиска соединения (по умолчанию 0.1).
  • del() — Удаляет текущую форму.
  • copy(x, y) — Копирует объект и смещает на (x, y).
  • copyTo(x, y) — Копирует объект и переносит его центр в (x, y).
  • move(x, y) — Перемещает объект на (x, y).
  • moveTo(x, y) — Перемещает центр объекта в точку (x, y).
  • resize(w, h, aspect) — Изменяет размер формы, добавляя к текущим размерам.
  • setSize(w, h, aspect, dir) — Устанавливает точный размер формы, с учётом пропорций.
  • tosize(w, h, dir) — То же, что setSize, но без пропорций: w и h абсолютные, якорь dir обязателен по смыслу. Ноль и любой минус значат «этот размер не трогать».
  • repeat(dx, dy, hCnt, vCnt, glue) — Строит массив из объектов. При glue=true весь массив сразу сливается в один объект (Combine).
  • group(arr) — Группирует текущий объект с массивом других SHAPE и делает группу текущей.
  • findbyName(name, OS, ingroup) — Ищет объект по имени. Возвращает первую найденную форму (SHAPE) или false. За нестрогим поиском и прочими режимами — прямо в getbyName(name, OS, ingroup, strong, invert, type, query).
  • removeHoles() — Удаляет все отверстия в объекте.
  • breakNodes(nodes, split2) — Разрывает указанные узлы (массив номеров узлов)

если split2=true то разваливает деталь и возвращает массив об\ектов (кусков)

  • add(sr, name) — Добавляет объект в выделение (если sr) либо в любой другой ShapeRange, попутно может дать ему имя. krug.add(sr);
  • range.getShape(i) — если range коллекция - взять i-тый объект. Вместо номера можно передать ИМЯ: range.getShape("dno").
  • createRange() — Создавать коллекцию var range = createRange();

Про `dir` у setSize и tosize. Это якорь: какой край останется на месте. Одна буква — T, B, L, R; две — угол, сначала вертикаль: TL, TR, BL, BR. По умолчанию CC — тянется от центра.

🔄 Трансформации

  • flipX(x, mode) — Отражение по оси X. mode: "copy", "join", undefined.
  • flipY(y, mode) — Отражение по оси Y. mode: "copy", "join", undefined.
  • flip([x1,y1,x2,y2], mode) — Отражение относительно произвольной линии.
  • rotate(angle, centerX, centerY, copies, join, reduce) — Поворот на угол вокруг точки. При copies>0 строит круговой массив копий; если при этом angle=0 или 360, шаг считается сам (360/copies). join=true — сразу сваривает копии с оригиналом, reduce передаётся в join.
  • angle() — Получает текущий угол.
  • angle(val) — Устанавливает абсолютный угол.
  • resize(W, H, aspect) — Увеличивает размер на W и H. При aspect=true сохраняет пропорции.
  • setSize(W, H, aspect) — Устанавливает абсолютные размеры. Если aspect=true и один из параметров 0, сохраняет пропорции.
  • scale(k) — Масштабирует форму пропорционально по обоим осям.
  • fitScale(W, H) — Масштабирует форму пропорционально так, чтобы она вписалась в прямоугольник W×H.
* Все методы трансформации можно применять как к конкретному объекту, так и к последнему.

📌 Глобальные функции

«Последний объект» — это тот, который был создан последним любым из примитивов. Имена функций пишутся С ЗАГЛАВНОЙ буквой после last, JS к регистру придирчив.

  • lastColor(arr) — Установить цвет обводки.
  • lastFill(arr) — Установить цвет заливки.
  • lastMove(x, y) — Сместить на (x, y).
  • lastCopy(x, y) — Копия со смещением на (x, y).
  • lastWeld(obj) — Объединить с другим объектом.
  • lastIntersect(obj) — Пересечь с другим объектом.
  • lastDel() — Удалить последний объект; lastDel(obj) — удалить переданный.
  • lastFlipX(x, mode) — Отразить объект по вертикальной оси X с координатой x (если не задана — по центру объекта).

Режимы:

  • undefined — изменить текущий объект;
  • "copy" — вернуть отражённую копию;
  • "join" — объединить с отражённой копией.
  • lastFlipY(y, mode) — Отразить объект по горизонтальной оси Y с координатой y (если не задана — по центру объекта).

Режимы аналогичны flipX.

  • lastFlip([x1,y1,x2,y2], mode) — Отразить объект относительно произвольной линии, заданной двумя точками.

Режимы те же: изменить текущий, вернуть копию или объединить с копией.

  • lastJoin(obj) — Объединить с другим объектом.
  • lastRotate(angle[, cx, cy, copies, join]) — Повернуть на угол (в градусах) относительно точки (cx, cy).
  • Если точки не заданы — вокруг центра объекта.
  • lastAngle() — Получить текущий угол поворота объекта.
  • lastAngle(val) — Установить абсолютный угол поворота объекта (в градусах).
  • FillXY(X, Y) — Создаёт объект используя интерактивную заливку.
  • contur(shape, gap, dir, split, todel, round, reduce, cut) — Создаёт внутренний (dir=0 или "in") или внешний (dir=1 или другое) контур объекта. Дальше всё необязательное: split — отделять контур от объекта (по умолчанию true), todel — удалить исходник, round — округлять углы, reduce — сокращать узлы, cut — вырезать контур.
  • raspred(shape, line, gap, mode, even)
  • Распределяет объекты вдоль линии.

mode: "qty" — по количеству, "dist" — по расстоянию, "qty_by_gap" — количество по шагу.

even — равномерное распределение (по умолчанию true).

  • genNum(txt) — Извлекает номер из имени объекта (например: rect_123 → 123).
do_flex( OS, opts, mode)	- создаёт гибкий рез из объекта. Задавать можно только нужные параметры. Остальные подтянутся из интерфейса.

OS = ActiveShapeRange // активный диапазон выбора объектов или объект

var opts = {
// --- базовые параметры ---
shft: 2, 		                         // нажатые клавиши-модификаторы
thickness: 3,                            // толщина линии/реза (по умолчанию из интерфейса val_gbx_th)
height: 50,                              // высота реза/перемычки (по умолчанию val_gbx_hi)
gap: 30,                                 // зазор между элементами (10 * thickness)
deleteSource: false,                     // удалить исходный объект после операции (true/false)
step: 3,                                 // интервал реза (по умолчанию val_kbx_flex_step)
qty: 5,                                  // количество перемычек (по умолчанию val_kbx_flex_qty)
perSize: 2,                              // размер перемычки (по умолчанию val_kbx_flex_per_size)
makeContour: false,                      // создавать контур в полтолщины (true/false)
makeSlots: false,                         // добавлять шипы (true/false)
pazQty: 5,                               // количество шипов (по умолчанию val_flex_sh_qty)

mmMode: false // режим мм вместо количества шипов (true/false)

};
mode = "flex";  		// "startpoint", "restore", "perimetr", "flex"

Пример: do_flex(s); //создать гибкий рез из объекта s по параметрам гибкого реза в докере.

  • calcAngleJoint(t1, t2, origangle, mode)
// Расчет соединения деталей под углом
// t1 - толщина шипа (вставляемой детали)
// t2 - толщина детали куда вставляется
// angle - угол наклона (90° = вертикально, 0° = горизонтально)
// mode - режим расчета (0 - close, 1 - open, 2 - full)

Результат (возвращаемый объект)

Функция возвращает объект с основными параметрами соединения:

  • tennon — длина шипа (рассчитанная длина выступающей части).
  • slot — ширина паза (рассчитанная ширина отверстия для шипа).
  • cut1 — дополнительная длина/глубина с одной стороны соединения (зависит от режима и угла).
  • cut2 — дополнительная длина/глубина с другой стороны соединения.
  • add1 — вспомогательный параметр: tennon - cut1.
  • add2 — вспомогательный параметр: slot - cut2.
  • debug — объект с отладочной информацией (промежуточные значения для проверки формул).
var result = calcAngleJoint(10, 12, 90, 0);
// Результат:
{
tennon: 10,
slot: 12,
cut1: 0,
cut2: 0,
add1: 10,
add2: 12,
debug: {...}
}

📝 Примечание

  • Если метод вызывается без аргумента, он возвращает значение.
  • Если метод вызывается с аргументом, он устанавливает новое значение.
  • Если объект не указан, используется последний (lastObject).

Подробное описание функций создания примитивов (объектов в кореле)

🧱 Примитивы

line(...)

  • Создаёт линию или кривую. Поддерживает массивы и Bezier-сегменты.

Примеры

просто 4 координаты для единичного отрезка.

  • line(x1, y1, x2, y2)

Первая линия массив из 4х элементов. далее один массив с вложенным массивом кажой последующей точки.

  • line([x1, y1, x2, y2][[addx1,addy1],[addx2,addy2],...])

Функция: line(a, b, c, d, e, f, g, h)

Назначение:

Создаёт отрезок или кривую линии с возможностью добавления дополнительных сегментов.

Может использоваться для построения как простой прямой, так и сложной кривой с несколькими сегментами.

Форматы вызова

Функция поддерживает несколько форматов вызова с разным количеством и типом аргументов:

  • 1. line([x1, y1, x2, y2])
  • создаёт прямую от (x1, y1) до (x2, y2).
  • 2. line([x1, y1, x2, y2, cx1, cy1, cx2, cy2])
  • создаёт кривую Безье от (x1, y1) до (x2, y2) с управляющими точками (cx1, cy1) и (cx2, cy2).
  • 3. line([[x1, y1, x2, y2], [[x3, y3], [x4, y4, R], [cx1, cy1, cx2, cy2, x5, y5]]])
  • создаёт базовую линию, к которой добавляются дополнительные сегменты (прямые, дуги или кривые).

Параметры

  • a–h (Number | Array) — координаты начальных и конечных точек, управляющих точек, или массивы координат.

Варианты аргументов

  • 1. Если передан один аргумент и это массив из 4-х или 8-ми элементов — он используется как startLine.
  • 2. Если передано два массива:
  • первый — startLine (4 или 8 координат),
  • второй — addLines, массив сегментов, где каждый сегмент:
  • [x, y] — прямая линия до точки (x, y),
  • [x, y, R] — прямая линия с фаской (fillet) радиуса R в точке,
  • [cx1, cy1, cx2, cy2, x, y] — кривая Безье,
  • [cx1, cy1, cx2, cy2, x, y, R] — кривая с фаской в конце.
  • 3. Если передано 4 отдельных числа (x1, y1, x2, y2) — используется как простая прямая линия.
  • 4. Если передано 8 отдельных чисел — создаётся кривая.

Особенности

  • Дополнительные сегменты добавляются к последнему пути (SubPath) основной линии.
  • Если сегмент содержит параметр R, применяется фаска (Fillet) к предыдущей вершине.
  • Возвращаемое значение — объект Shape, обёрнутый с помощью createShape.

Пример использования

// Простая линия
line(10, 10, 100, 10);

// Кривая с управляющими точками
line(10, 10, 100, 100, 30, 30, 70, 70);

// С дополнительными сегментами
line([10, 10, 100, 10], [

[150, 20], // Прямая

[200, 40, 5], // Прямая с фаской 5

[250, 60, 270, 70, 300, 90], // Кривая

[350, 100, 370, 110, 400, 130, 4] // Кривая с фаской 4

]);

rectangle(x, y, w, h[, r1[, r2, r3, r4]])

  • Создаёт прямоугольник. Радиусы углов опциональны.

Функция: rectangle(x1, y1, wi, hi, r1, r2, r3, r4)

Назначение:

Создаёт прямоугольник с возможностью задания радиусов скругления углов.

Параметры

  • x1 (Number) — координата X левого угла прямоугольника.
  • y1 (Number) — координата Y нижнего угла прямоугольника.
  • wi (Number) — ширина прямоугольника.
  • hi (Number) — высота прямоугольника.
  • r1 (Number, необязательный) — радиус скругления всех углов, если указан только он.
  • r2 (Number, необязательный) — радиус скругления правого верхнего угла.
  • r3 (Number, необязательный) — радиус скругления правого нижнего угла.
  • r4 (Number, необязательный) — радиус скругления левого нижнего угла.

Описание работы

  • Если переданы только 4 параметра (x1, y1, wi, hi), создаётся прямоугольник без скруглений.
  • Если передано 5 параметров, то пятый параметр используется как радиус скругления для всех четырёх углов.
  • Если передано 8 параметров, то последние четыре задают радиус скругления для каждого угла отдельно (в порядке: левый верхний, правый верхний, правый нижний, левый нижний).

Возвращаемое значение

  • Объект Shape, созданный на основе прямоугольника с указанными параметрами, обёрнутый функцией createShape.

Пример использования

// Прямоугольник 100x50 без скруглений, с левым верхним углом (10,10)
rectangle(10, 10, 100, 50);

// Прямоугольник 100x50 с радиусом скругления 10 для всех углов
rectangle(10, 10, 100, 50, 10);

// Прямоугольник 100x50 с разными радиусами для каждого угла
rectangle(10, 10, 100, 50, 5, 10, 15, 20);

circle(x, y, r[, r2])

  • Создаёт окружность или эллипс.

Функция: circle(x, y, r1, r2)

Назначение:

Создаёт окружность или эллипс с заданными параметрами центра и радиусов.

Параметры

  • x (Number) — координата X центра окружности/эллипса.
  • y (Number) — координата Y центра окружности/эллипса.
  • r1 (Number) — радиус окружности или первый радиус эллипса (горизонтальный).
  • r2 (Number, необязательный) — второй радиус эллипса (вертикальный). Если не указан, создаётся окружность.
  • startAngle, endAngle (Number, необязательные) — дуга. Углы обычные, против часовой от трёх часов; по умолчанию оба 90, то есть полная окружность.
  • pie (Boolean, необязательный) — при true дуга замыкается в сектор («пирог»), при false остаётся открытой дугой.

Описание работы

  • Если переданы 3 параметра (x, y, r1), создаётся окружность с центром в (x, y) и радиусом r1.
  • Если переданы 4 параметра (x, y, r1, r2), создаётся эллипс с центром в (x, y) и радиусами r1 (горизонтальный) и r2 (вертикальный).
  • Первым аргументом можно передать объект: circle({x:10, y:20, r:5}) или с r2.

Возвращаемое значение

  • Объект Shape, созданный на основе окружности или эллипса, обёрнутый функцией createShape.

Пример использования

// Создать окружность с центром (50,50) и радиусом 20
circle(50, 50, 20);

// Создать эллипс с центром (50,50), горизонтальным радиусом 40 и вертикальным радиусом 20
circle(50, 50, 40, 20);

poly([x1,y1, x2,y2, ...])

  • Создаёт многоугольник из массива точек.

Пример: poly([x1, y1, x2, y2, x3, y3])

Функция: poly(points)

Назначение:

Создаёт многоугольник (полигон) из последовательности точек.

Параметры

  • points (Array of Numbers) — массив чисел, представляющий координаты точек в формате [x1, y1, x2, y2, x3, y3, ...]. Принимается и массив объектов [{x:.., y:..}, ...].
  • closed (Boolean, необязательный) — замкнуть контур: первая точка дописывается в конец, и подпути свариваются (JoinTouchingSubpaths).

Минимум должен содержать координаты двух точек (4 числа).

Описание работы

  • Проверяет, что массив points содержит минимум 4 элемента (минимум две точки).
  • Создаёт первую линию между первой и второй точками (points[0], points[1]) и (points[2], points[3]).
  • Получает подмаршрут (SubPath) последнего сегмента.
  • Для каждой последующей пары координат (x, y) добавляет линейный сегмент к подмаршруту.
  • Возвращает объект Shape, обёрнутый функцией createShape с типом "poly".

Возвращаемое значение

  • Объект Shape — многоугольник, построенный из переданных точек.
  • Если параметр points невалиден (меньше 4 чисел), возвращается null.

Пример использования

// Создать многоугольник из 4 точек
poly([10, 10, 100, 10, 100, 50, 10, 50]);

shipy(sx, sy, stx, sty, qty_or_len, ph, clo, sgap, lgap, rgap, bylen, colr)

или

shipy(shape, side, qty_or_len, ph, clo, sgap, lgap, rgap, bylen, colr) или
  • Создаёт пользовательскую кривую на стороне shape или по координатам.

Поддерживает инверсию сторон с префиксом "-".

либо указываем 4 координаты линии вдоль которой надо рисовать шипы.

Пример 1: shipy(x1, y1, x2, y2, ..., options)

если в первый переметр передать объект, то он рисует шипы вдоль указанной грани (второй параметр T,B,L,R)

Пример 2: shipy(shape, "T", qty, thikness, ...)

Назначение:

Создаёт серию прямоугольных пазов вдоль заданной линии между точками (sx, sy) и (stx, sty).

Пазы чередуются с пропусками и могут быть смещены, повернуты и раскрашены.

Параметры

  • sx, sy (Number) — координаты начальной точки линии.
  • stx, sty (Number) — координаты конечной точки линии.
  • qty_or_len (Number) — количество пазов (если bylen = false) или длина одного паза (если bylen = true).
  • ph (Number) — высота (глубина) паза, перпендикулярно линии.
  • clo (Boolean) — режим чередования. true — начинается с пропуска, false — с паза. По умолчанию: true.
  • sgap (Number) — смещение пазов вверх или вниз относительно линии (по нормали). По умолчанию: 0.
  • lgap (Number или [Number, Number]) — левый отступ. Если передан массив, то:
  • первый элемент — увеличивает или уменьшает длину распределения с этой стороны,
  • второй элемент — увеличивает или уменьшает первый шип с этой стороны.
  • rgap (Number или [Number, Number]) — правый отступ. Если передан массив, то:
  • первый элемент — увеличивает или уменьшает длину распределения с этой стороны,
  • второй элемент — увеличивает или уменьшает первый шип с этой стороны.
  • bylen (Boolean) — если true, qty_or_len интерпретируется как длина паза, иначе — как количество. По умолчанию: false.
  • colr (Array или false) — цвет заливки пазов. Передаётся в виде массива (например, [255, 0, 0]) или кореловского объекта color. Если false — заливка не применяется.

Особенности

  • Если задано чётное количество пазов — оно автоматически уменьшается на 1.
  • Минимальное количество пазов — 3.
  • Пазы создаются как прямоугольники, повернутые вдоль исходной линии.
  • Вспомогательная линия для выравнивания создаётся временно и удаляется по завершении.

Пример:

shipy(0, 0, 100, 0, 5, 10, true, 0, [5, 10], [5, 10], false, [255, 0, 0]);
  • создаёт 5 пазов по горизонтали, высотой 10, с началом отступа,
  • с отступами по краям (первый/последний — 10), и красной заливкой.

Шиповые соединения для картонных коробок

Функции для создания шипов и пазов для картонных коробок

line_teeth(x1, y1, x2, y2, nums, th, direction, shift)

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

Параметры

  • x1, y1 - координаты начала линии
  • x2, y2 - координаты конца линии
  • nums - количество шипов
  • th - высота шипов
  • direction - направление выступа шипов:
  • "left" или "up" - шипы слева/сверху от линии
  • "right" или "down" - шипы справа/снизу от линии
  • shift - смещение шипов вдоль линии (опционально):
  • числовое значение - смещение на заданное расстояние
  • "half" - смещение на половину шага
  • "-half" - смещение на половину шага в обратную сторону
  • максимальное смещение ограничено длиной одного сегмента

line_slots(x1, y1, x2, y2, nums, th, direction, shift)

Создает прямоугольные пазы для сопряжения с шипами. Каждый паз создается как отдельный прямоугольный объект.

Параметры идентичны функции line_teeth:

  • x1, y1 - координаты начала линии
  • x2, y2 - координаты конца линии
  • nums - количество пазов (должно совпадать с количеством шипов)
  • th - глубина пазов (должна совпадать с высотой шипов)
  • direction - направление углубления пазов (противоположное шипам):
  • "left" или "up" - пазы слева/сверху от линии
  • "right" или "down" - пазы справа/снизу от линии
  • shift - смещение пазов вдоль линии (должно совпадать со смещением шипов)

Использование

Для создания сопрягаемых деталей:

  • 1. Используйте одинаковые значения nums и th для шипов и пазов
  • 2. Направление (direction) для пазов должно быть противоположным шипам
  • 3. Для смещения используйте одинаковые значения shift

Пример:

// Создание шипов
line_teeth(0, 0, 100, 0, 5, 10, "up", "half");

// Создание ответных пазов
line_slots(0, 50, 100, 50, 5, 10, "down", "half");

perf(s, dash, gap)

Функция perf предназначена для создания пунктирного контура объекта и имеет следующие характеристики:

Параметры функции

  • s — входной объект (может быть типа SHAPE или другого типа)
  • punkt_dash — длина штриха пунктира
  • punkt_gap — длина промежутка между штрихами

text(X, Y, text, size, font, params)

Создаёт и размещает текстовую надпись в документе.

Параметры

X (число) — координата X точки привязки текста.

Y (число) — координата Y точки привязки текста.

text (строка) — содержимое текстовой надписи.

size (число) — размер шрифта в единицах документа или в миллиметрах (если указан параметр mm).

font (строка) — имя шрифта.

params (массив строк) — набор дополнительных опций для форматирования и выравнивания текста.

Поддерживаемые значения в params:

Размер и позиционирование

"mm" — размер шрифта задаётся в миллиметрах.

"wide", "width" — задаёт ширину текста по size.

"top" — позиционирование по верхней границе (TopY = Y).

"right" — позиционирование по правой границе (RightX = X).

"center" — центр текста ставится в точку (X, Y). Применяется последним, поверх top и right.

Выравнивание

"l", "textleft" — выравнивание по левому краю.

"r", "textright" — выравнивание по правому краю.

"c", "textcenter" — выравнивание по центру.

Начертание

"b", "bold" — полужирный шрифт.

"i", "italic", "cursive" — курсивное начертание.

"u", "under", "underline" — подчёркнутый текст.

Возвращает:

Объект, содержащий созданную текстовую фигуру (txt).

Особенности работы:

Если указан mm или wide, размер текста подгоняется в миллиметрах.

Если используется wide, ширина текста регулируется по высоте size.

При отсутствии top и right текст привязывается по левому нижнему углу в точке (X, Y).

Метод возвращает объект с текстовой фигурой, созданной на активном слое.

Примеры:

    text(50, 100, "Hello World", 12, "Arial");

Создаёт текст Hello World размером 12 пунктов шрифтом Arial с привязкой по левому нижнему углу в точке (50, 100).

    text(200, 150, "Label", 10, "Times New Roman", ["mm", "bold", "italic", "right"]);

Создаёт текст Label шрифтом Times New Roman размером 10 мм, полужирным курсивом, с привязкой по правому краю в точке (200, 150).

    text(100, 50, "Centered Text", 20, "Verdana", ["wide", "c"]);

Создаёт центрированный текст Centered Text шрифтом Verdana с высотой 20 мм и подгонкой ширины текста к размеру 12mm.

Профили полей

Значения всех полей, которые породила строка //params:, панель хранит per-генератор и умеет складывать в именованные профили — файл на генератор в %APPDATA%\wpanel\GBX\. Автору генератора тут делать нечего, но знать полезно: у пользователя поле почти всегда придёт не с тем значением, что стоит умолчанием в //params:. Умолчание срабатывает ровно один раз, при самом первом показе поля.

Цвета и состояние свёрнутых блоков в профиль не входят.

🔞 Справочник геометрических функций (math.js)

Координаты и преобразования

  • normalizeCoordinates(coords) — Нормализует координаты в объект {x, y} из массива [x, y] или объекта
  • distXY(x1, y1, x2, y2) — Вычисляет расстояние между двумя точками
  • getEndXY(X, Y, L, ANG) — Находит конечную точку отрезка заданной длины и угла от начальной точки
  • rotatePoint(x, y, angle, xR, yR) — Поворачивает точку на заданный угол вокруг центра вращения
  • getMidPoint(x1, y1, x2, y2) — Находит середину отрезка между двумя точками
  • getTriangleArea(x1, y1, x2, y2, x3, y3) — Вычисляет площадь треугольника по трем точкам
  • isPointOnLine(px, py, x1, y1, x2, y2, tolerance) — Проверяет, лежит ли точка на отрезке с заданной точностью
  • polarToCartesian(r, angle) — Преобразует полярные координаты в декартовы
  • cartesianToPolar(x, y) — Преобразует декартовы координаты в полярные

Углы и тригонометрия

  • normalizeAngle(angle) — Нормализует угол в диапазон 0-360 градусов
  • getAngleDifference(angle1, angle2) — Вычисляет минимальную разность между двумя углами
  • toRad(degrees) — Преобразует градусы в радианы
  • toDeg(radians) — Преобразует радианы в градусы
  • getLineAngle(x1, y1, x2, y2, inDegrees) — Вычисляет угол наклона линии между двумя точками
  • getAngleByTwoCatets(a, b) — Вычисляет угол по противолежащему и прилежащему катетам (atan)
  • getAngleByTwoCatetsAtan2(a, b) — Вычисляет угол по катетам с использованием atan2
  • getOppositeKatetbyAdjacentKatetandAngle(adjKatet, angle) — Находит противолежащий катет по прилежащему и углу
  • getAdjacentKatetbyOppositeKatetandAngle(oppKatet, angle) — Находит прилежащий катет по противолежащему и углу
  • getHypotenuseByCatets(adjKatet, oppKatet) — Вычисляет гипотенузу по двум катетам
  • getOppositeKatetbyHypotenuseandAngle(hypotenuse, angle) — Находит противолежащий катет по гипотенузе и углу
  • getAdjacentKatetbyHypotenuseandAngle(hypotenuse, angle) — Находит прилежащий катет по гипотенузе и углу

Сложные геометрические вычисления

  • HypotenuseEndPoint(startPoint, adjacentEndPoint, angleInDegrees) — Вычисляет конечную точку гипотенузы по начальной точке, конечной точке прилежащего катета и углу между гипотенузой и прилежащим катетом. Возвращает объект с координатами и длинами сторон.

префиксы для файлов от пользователей начинаются на x

  • xa — GROSSLASER

Color utils — краткая справка (func.js)

  • function getColor(color) — Приводит входные данные к объекту Color из любого вида: [R,G,B], [C,M,Y,K] или #hex цвета.
  • getSColor(s, byFill, strict) — взять цвет объекта возвращает кореловский Color

getbyName(name, OS, ingroup, strong) -> ShapeRange : взять объекты по имени

getByFill(color, os) -> ShapeRange : фигуры с заливкой color

getByOutline(color, os) -> ShapeRange : фигуры с обводкой color

getByColor(color, byFill, os) -> ShapeRange : поиск по цвету (fill/outline по приоритету)

copyFill(trgt, src) : копирует заливку

copyOutline(trgt, src) : копирует обводку

copyColor(trgt, src) : копирует заливку и обводку

setFill(S, color) : устанавливает заливку

setColor(S, color, mode) : устанавливает цвет (outline|fill|both)

getColor(color) -> Color : преобразует вход к Color (RGB/CMYK/hex/id/obj)

Поддержи проект Деревяшкина и получи эксклюзивную панель макросов!
Дополнительные макросы для CorelDraw от других авторов:

Инструменты, генераторы для докера и отдельные макросы.

  • G-code генератор фрезер/плазма для корела
  • YouTube: Часть 1 Часть 2 Часть 3 VK Video: Часть 1 Часть 2 Часть 3
  • Расчет неоновых вывесок
  • Генераторы картонных коробок
  • Открываем файл из буфера
  • Макрос "Наводим порядок в макетах"
Статистика
с 23.04.2022
Пользователей
11 625
Активных
892
Нажатий
5 530 569
Подтверждение
Подтвердите значение: