Spaces:
Sleeping
Sleeping
File size: 2,346 Bytes
ce82348 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | # src/layout_generator/base.py
"""
Базовые структуры данных и абстрактные классы для пайплайна генерации.
Определяет контекст состояния (LayoutContext) и интерфейс шагов (BaseStep).
"""
from abc import ABC, abstractmethod
from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional
import trimesh
from omegaconf import DictConfig
from utils.logger import CollisionTracker
from dsynth.scene_gen.utils import RectFixture
@dataclass
class LayoutContext:
"""Объект состояния, передаваемый между шагами генерации."""
project_dir: str = ""
size_n: int = 10
size_m: int = 10
# Главный источник истины от LLM
layout_graph: Optional[Dict[str, Any]] = None
cfg: Optional[DictConfig] = None
tracker: Optional[CollisionTracker] = None
# Кэш 3D-моделей в ОЗУ
product_assets_lib: Dict[str, Any] = field(default_factory=dict)
# Данные из шага 2 (Планограмма)
fixed_zones: Any = None
product_filling: Dict[str, Any] = field(default_factory=dict)
nodes_dict: Dict[str, RectFixture] = field(default_factory=dict)
# Метрики для экспортера
report_matrix: Dict[str, Any] = field(default_factory=dict)
total_shelves: int = 0
# Данные из шага 3 и 4 (Топология и Сборка)
is_gen: bool = False
placed_fixtures: List[RectFixture] = field(default_factory=list)
current_seed: int = 0
final_scene: Optional[trimesh.Scene] = None
actual_shelf_idx: int = 0
output_filename: str = ""
class BaseStep(ABC):
"""Абстрактный класс шага пайплайна."""
@abstractmethod
def process(self, context: LayoutContext) -> LayoutContext:
"""
Выполняет изолированную логику шага.
Args:
context (LayoutContext): Текущее состояние генерации.
Returns:
LayoutContext: Обновленное состояние.
"""
pass |