105 lines
5.4 KiB
Python
105 lines
5.4 KiB
Python
# -*- 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) Правило сопровождения:
|
||
# - Любое изменение сценария должно сопровождаться обновлением этого блока с сохранением фактического порядка вызовов.
|
||
# - При добавлении метода указывать его место в цепочке сценария (запуск, основной шаг, завершение, вспомогательная логика).
|