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