packing-mvp — Windows desktop-приложение для укладки грузовых мест, заданных STEP-файлами, в кузов грузовика.
Текущий продуктовый сценарий:
- пользователь загружает один или несколько
.step/.stp - каждый STEP трактуется как один тип грузового места
- приложение автоматически определяет общие габариты
Д x Ш x В - при необходимости пользователь вручную исправляет размеры и количество
- выполняется практическая MVP-укладка в кузов
- результат показывается в GUI, сохраняется в
result.jsonи может экспортироваться в STEP
README описывает именно этот V2 workflow. Старые экспериментальные режимы исследований по жёстким сборкам не являются рекомендуемым сценарием для текущего продукта.
- загрузка STEP AP203 / AP214
- автоматическое извлечение общих габаритов из STEP
- ручная корректировка размеров
- количество для каждого типа грузового места
- удаление позиции из проекта
- физическое удаление STEP-файла с диска с подтверждением
- настройка кузова:
- длина
- ширина
- высота
- зазор между соседними местами
- упаковка нескольких типов одновременно
- отчёт о неразмещённых местах, если всё не помещается
- 2D-превью и 3D-предпросмотр
- экспорт результата в STEP
- сохранение / загрузка проекта
.packproj - фоновый расчёт и журнал сообщений
- один STEP-файл = один тип грузового места
- упаковщик работает по общим габаритам, а не по разбору модели на дочерние тела
- допустимы только две ориентации для каждого типа:
- исходная
Д, Ш, В - поворот вокруг вертикальной оси на 90°:
Ш, Д, В
- исходная
- наклоны по
X/Yне допускаются - место должно оставаться стоящим на основании
- зазор применяется по длине и ширине
- пересечения между местами запрещены
- выход за габариты кузова запрещён
- если всё не помещается, результат обязан содержать список неразмещённых мест
Алгоритм упаковки в MVP жадный, а не оптимальный. Цель — надёжный и понятный практический результат, а не математически точный глобальный оптимум.
- длина:
13400мм - ширина:
2350мм - высота:
2400мм - зазор:
50мм
- Windows 10 / 11
- Python 3.10+
cd C:\path\to\packing-mvp
py -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e .Пакет устанавливает основные зависимости для работы с STEP и визуализацией:
gmshcadquery-ocp/OCPnumpymatplotlibpillowwindnd
python -m packing_mvp.guiили:
packing-gui- Нажмите
Загрузить STEP-файлы. - Проверьте автоматически определённые размеры в каталоге.
- При необходимости отредактируйте
Длина,Ширина,Высота,Количество. - Уточните параметры кузова.
- Нажмите
Рассчитать укладку. - После расчёта используйте:
Открыть результатВид сверхуВид сбоку3D-предпросмотр
- Сохраните проект через
.packproj, если нужно вернуться к нему позже.
CLI полезен для пакетного запуска и smoke-test сценариев.
python -m packing_mvp.cli `
--input "crate_a.step" "crate_b.step" `
--quantity 2 3 `
--out outpython -m packing_mvp.cli `
--input "crate_a.step" "crate_b.step" `
--quantity 2 3 `
--out out `
--maxL 13400 `
--maxW 2350 `
--maxH 2400 `
--gap 50python -m packing_mvp.cli --project ".\demo.packproj" --out out--input— один или несколько STEP-файлов--project— загрузка.packprojвместо сырых STEP-файлов--quantity— количество для каждого файла из--input--out— папка результата--maxL,--maxW,--maxH— габариты кузова в мм--gap— зазор в мм--scale— ручной множитель масштаба импорта STEP--seed— зарезервированный deterministic seed
После успешного или частично успешного расчёта приложение создаёт папку результата с артефактами:
result.jsonplacements.csvarranged.steppreview_top.pngpreview_side.pngpreview.gifpacking.log
result.json используется как машинно-читаемый статус расчёта. В нём сохраняются:
- габариты кузова
- зазор
- каталог загруженных типов
- список размещённых мест
- список неразмещённых мест
- использованные габариты
- коэффициент заполнения
- признак успеха / неуспеха
- режим упаковки
truck_loading_v2
Если всё помещается:
success = truestatus = "ok"
Если не всё помещается:
success = falsestatus = "failed"- в
unplaced_itemsбудет явный список того, что не удалось разместить
Файл проекта .packproj хранит:
- список загруженных STEP-типов
- определённые или вручную исправленные размеры
- количество
- параметры кузова
- результат последнего расчёта, если он уже есть
Формат проекта JSON-совместимый, но с пользовательским расширением .packproj.
arranged.step строится в соответствии с рассчитанными размещениями.
Предпочтительный путь MVP:
- экспорт преобразованных исходных моделей STEP
Резервный путь MVP:
- экспорт box-proxy представлений, если конкретный источник не удалось корректно перенести как исходную геометрию
Это поведение сделано намеренно: экспорт должен быть согласован с раскладкой, показанной пользователю.
3D-предпросмотр показывает:
- каркас кузова
- размещённые грузовые места
- номера размещений
- вращение / панорамирование / масштабирование камеры
Для MVP визуализация box-based: пользователь видит раскладку по габаритам, а не полный CAD-рендер каждого объекта.
- упаковка основана на общих габаритах, а не на точной проверке CAD-коллизий по сложной геометрии
- алгоритм жадный, а не оптимальный
- нет произвольного поиска углов
- нет наклонов по
X/Y - один STEP трактуется как один тип грузового места
- sample STEP-файлы можно использовать для smoke-тестов, но логика не завязана на имена файлов
cd C:\path\to\packing-mvp
python -m pytest -qКлючевые тестовые сценарии покрывают:
- извлечение размеров и ручной override
- разворачивание количества в отдельные экземпляры
- допустимые ориентации только по
Z - базовое размещение в кузове
- корректный отчёт по неразмещённым местам
- сохранение / загрузку
.packproj
Основные модули текущего продукта:
src/packing_mvp/step_extract.py— извлечение габаритов из STEPsrc/packing_mvp/catalog.py— каталог типов грузовых мест и настройки кузоваsrc/packing_mvp/packer.py— MVP-укладка в кузовsrc/packing_mvp/project_io.py—.packprojsrc/packing_mvp/gui.py— русский desktop GUIsrc/packing_mvp/visualization.py— 3D-предпросмотрsrc/packing_mvp/step_export.py— экспорт STEP-сценыsrc/packing_mvp/export.py—result.jsonиplacements.csv