Add Dispatch_V0.1.1

This commit is contained in:
2026-04-29 08:18:54 +04:00
commit a7ede6ded4
404 changed files with 39167 additions and 0 deletions

View File

@@ -0,0 +1,104 @@
# -*- coding: utf-8 -*-
# gui/components/model_view/_mv_racks.py
"""Логика работы с размещением стеллажей и связанными визуальными состояниями.
Этот модуль компонует полный ``RackPlacementMixin`` из набора
мелких подмиксинов, каждый из которых отвечает за отдельную область
логики размещения стеллажей. Также здесь хранятся константы уровня
класса, общие для всех подмиксинов.
"""
from __future__ import annotations
from gui.components.model_view._mv_racks_projection import RackPlacementProjectionMixin
from gui.components.model_view._mv_racks_visual import RackPlacementVisualMixin
from gui.components.model_view._mv_racks_lifecycle import RackLifecycleMixin
from gui.components.model_view._mv_racks_crud import RackCrudMixin
from gui.components.model_view._mv_racks_camera import RackCameraMixin
from gui.components.model_view._mv_racks_shelf import RackShelfMixin
from gui.components.model_view._mv_racks_selection import RackSelectionMixin
from gui.components.model_view._mv_racks_move import RackMoveMixin
from gui.components.model_view._mv_racks_picking import RackPickingMixin
from gui.components.model_view._mv_racks_shelf_render import RackShelfRenderMixin
from gui.components.model_view._mv_racks_hover import RackHoverMixin
from gui.components.model_view._mv_racks_preview import RackPreviewMixin
from gui.components.model_view._mv_racks_codes import RackCodesMixin
from gui.components.model_view._mv_racks_collision import RackCollisionMixin
from gui.components.model_view._mv_racks_mezzanine import RackMezzanineMixin
class RackPlacementMixin(
RackLifecycleMixin,
RackCrudMixin,
RackCameraMixin,
RackShelfMixin,
RackSelectionMixin,
RackMoveMixin,
RackPickingMixin,
RackShelfRenderMixin,
RackHoverMixin,
RackPreviewMixin,
RackCodesMixin,
RackCollisionMixin,
RackMezzanineMixin,
RackPlacementProjectionMixin,
RackPlacementVisualMixin,
):
"""Миксин с логикой размещения стеллажей внутри зоны."""
_PALLET_CENTER_SPAN_MM = 3706
_PALLET_FOOTPRINT_WIDTH_SINGLE_MM = 3796
_PALLET_DEPTH_MM = 1100
_PALLET_HEIGHT_MM = 2505
_PALLET_BUFFER_MM = 100
_RACK_COLLISION_BUFFER_MM = 100
_MAX_BUFFER_OVERLAP_MM = 100
_MEZZANINE_CONTAINMENT_MARGIN_MM = 100
_SHELF_NORMS = {
"A": {
"base_surface_offset_from_bbox_top_mm": 0.0,
"min_base_height_mm": 80.0,
"min_useful_height_mm": 16.0,
"min_inter_shelf_mm": 53.0,
"shelf_height_mm": 37.0,
"step_mm": 53.0,
},
"B": {
"base_surface_offset_from_bbox_top_mm": 15.0,
"min_base_height_mm": 130.0,
"min_useful_height_mm": 68.0,
"min_inter_shelf_mm": 113.0,
"shelf_height_mm": 45.0,
"step_mm": 37.5,
},
"PALLET": {
"base_surface_offset_from_bbox_top_mm": 55.0,
"min_base_height_mm": 252.0,
"min_useful_height_mm": 112.0,
"min_inter_shelf_mm": 250.0,
"shelf_height_mm": 250.0,
"step_mm": 50.0,
},
}
# ---------------------------------------------------------------------------
# Module workflow notes
# ---------------------------------------------------------------------------
# 1) Задача модуля:
# Композиционный фасад подсистемы стеллажей.
#
# 2) Последовательность действий и вызовов:
# A. Композиционный класс RackPlacementMixin:
# Назначение: объединяет поведение через RackLifecycleMixin, RackCrudMixin, RackCameraMixin, RackShelfMixin, RackSelectionMixin, RackMoveMixin, RackPickingMixin, RackShelfRenderMixin, RackHoverMixin, RackPreviewMixin, RackCodesMixin, RackCollisionMixin, RackMezzanineMixin, RackPlacementProjectionMixin, RackPlacementVisualMixin.
# Собственная вычислительная логика отсутствует; маршрутизация идёт в родительские миксины.
#
# 3) Важные ограничения и инварианты:
# - Модуль выполняется в составе ModelViewWidget и использует согласованные поля состояния self._... .
# - Межмодульная связность: только через фасад model_view; прямые обращения между zone, rack, shelf, cell запрещены.
# - Очистка состояния должна быть идемпотентной: повторный вызов не меняет корректное состояние в ошибочное.
#
# 4) Правило сопровождения:
# - Любое изменение сценария должно сопровождаться обновлением этого блока с сохранением фактического порядка вызовов.
# - При добавлении метода указывать его место в цепочке сценария (запуск, основной шаг, завершение, вспомогательная логика).