Расчёт развёртки картонной коробки по FEFCO
библиотека на C++ и калькулятор для производителя картонной упаковки
Библиотека на C++17 для производителя картонной упаковки: по внутренним размерам коробки и толщине картона считает размер заготовки для FEFCO 0200, 0201 и 0203, объёмы и раскладку заготовок на листе гофрокартона.
Задача
Производитель картонной упаковки получает заказ в виде внутренних размеров коробки: длина, ширина, высота. Чтобы вырезать заготовку, нужны размеры плоской развёртки с учётом толщины картона, клапана склейки и припусков на сгибы. Чтобы посчитать расход материала, нужно знать, сколько таких заготовок выйдет с одного листа гофрокартона.
Развёртка (заготовка) — плоский лист, из которого после резки и биговки складывается коробка. Биговка — продавленная линия сгиба. Гофрокартон — многослойный картон с волнистым слоем внутри. FEFCO — европейский каталог типовых конструкций коробок, где у каждого стиля есть код: 0201, 0203 и так далее.
Расчёт в таблицах давал ошибки: толщину картона легко не учесть, у каждого стиля своя формула, а раскладку на лист прикидывали на глаз. Ошибка обнаруживалась уже на резке. Нужно было ядро, которое считает по правилам каталога и которое можно встроить в программное обеспечение производства.
Решение
Библиотека packaging на C++17 и консольный калькулятор packaging_calc к ней. Что реализовано:
- Три стиля коробок FEFCO: 0200 (клапаны только сверху), 0201 (стандартный ящик, клапаны встык с зазором), 0203 (полное перекрытие клапанов).
- Размеры заготовки: длина как 2L + 2W + клапан склейки + припуски на биговку, ширина как высота + клапаны + припуски, высота клапана.
- Наружные габариты и два объёма: внутренний и габаритный.
- Раскладка заготовок на листе картона с учётом поворота на 90° и долей использованной площади.
- Проверка входных данных: положительные размеры, толщина картона в диапазоне до 20 мм, корректный зазор клапанов. Ошибка даёт сообщение и код возврата 1.
- Тесты формул, раскладки, валидации и разбора кода стиля, подключены через CTest.
- Внешних зависимостей нет: только компилятор C++17 и CMake 3.14 и новее. Собирается на Linux, macOS и Windows.
Как это устроено
Развёртка FEFCO 0201: формула заготовки
Программа заполняет структуру BoxSpec (внутренние размеры, толщина, клапан склейки, зазор) и вызывает calculate() с кодом стиля. В ответ приходит заготовка: длина, ширина, высота клапана и площадь. Для 0201 ширина заготовки считается по зазору между клапанами, а не по фиксированной ширине коробки, как было в прототипе. Контрольный пример из README: коробка 300×200×150 мм, картон 3 мм, стиль 0201 — заготовка 1047,0×356,0 мм, клапан 98,5 мм, площадь 372 732 мм².
Припуск на биговку и толщина картона
Толщина картона участвует в расчёте дважды: как припуск на каждую линию сгиба и как добавка к наружным габаритам. Та же коробка снаружи получается 306×206×156 мм, внутренний объём 9,00 л, габаритный объём считается отдельно по наружным размерам. Припуск на биговку принят равным толщине картона: это приближение, и у конкретного производителя он может отличаться, поэтому формулы требуют сверки с оснасткой предприятия.
Раскладка заготовок на листе гофрокартона
Функция nest_on_sheet() принимает заготовку и размер листа, пробует сеточное размещение в исходной ориентации и с поворотом на 90° и возвращает число заготовок и долю использованной площади. На листе 2000×1200 мм контрольная заготовка укладывается 5 раз с поворотом, использование около 77,7 %. Раскладка сеточная, ширина ножа пока не учитывается.
Библиотека и консольный калькулятор
Расчёт подключается к другому проекту как обычная CMake-библиотека: подключить заголовок packaging/box.hpp, заполнить BoxSpec, вызвать calculate() и при необходимости nest_on_sheet(). Для ручной проверки есть утилита packaging_calc с параметрами стиля, размеров, толщины, клапана склейки, зазора и листа; справка по --help. Тесты запускаются командой ctest.
Результат
- Три стиля FEFCO считаются по одному описанию конструкции, а не по отдельным таблицам.
- Заготовка, наружные габариты и объёмы для контрольной коробки сходятся с ожидаемыми значениями из README; проверено сборкой и тестами.
- Раскладка на лист даёт число заготовок и долю использованной площади: для листа 2000×1200 мм — 5 штук и около 77,7 %.
- Ошибочные данные отклоняются с понятным сообщением, а не дают неверный чертёж.
- Библиотека без внешних зависимостей встраивается в программное обеспечение производства.
Технологии: что и зачем
- C++17 — быстрые вычисления и возможность встроить код в софт линии или отдельный сервис.
- CMake — сборка библиотеки, утилиты и тестов одной командой на любой платформе.
- CTest — запуск тестов формул, раскладки и валидации.
- FEFCO — общий язык описания конструкций коробок между заказчиком и программой.
Статус
Версия 0.2.0 от 30.09.2026. Из прототипа на одном файле (0.1.0, февраль 2026) проект вырос в библиотеку, утилиту и тесты; толщина картона теперь реально участвует в расчёте, а ширина заготовки 0201 считается по зазору клапанов.
Что дальше по плану README: остальные типы FEFCO, включая 0427 и самосборные коробки; профили гофрокартона и направление гофры при раскладке; учёт ширины ножа; вывод развёртки в DXF или SVG; расчёт стоимости. Другие детали заказчика не раскрываются.
Вопросы по проекту
Как рассчитать размер заготовки по внутренним размерам коробки?
Какие стили FEFCO поддерживаются?
Сколько коробок выйдет с одного листа гофрокартона?
Как учитывается толщина картона?
Нужен ли для расчёта сервер или таблицы?
Как проверить, что расчёт верный?
Ещё по этому направлению
Telegram-бот слотов приёмки Wildberries для поставщика
заказ поставщика на Wildberries: слоты на отгрузку без ручных проверок
Автоматизация заявок на n8n: Telegram, CRM и Google Таблицы
для малого бизнеса: заявка из бота сама попадает в Bitrix24 и таблицу
Обследование ЛВС и видеонаблюдения музейного комплекса
для музейного комплекса в Москве: комплект документов и КП по этапам
Нужно похожее?
Расскажите о задаче — покажем, как решали такое, и прикинем объём работ.