Przewodnik Budowania Szafek (Smart Volume 2.0)
Ten dokument opisuje techniczne aspekty dzielenia przestrzeni, dodawania frontów, półek oraz szuflad w systemie Smart Volume 2.0.
1. Zarządzanie Przestrzenią (VolumeManager)
Każda szafka zaczyna się od obiektu VolumeManager, który reprezentuje wolne wnętrze szkieletu (Carcass). Uzyskujesz go za pomocą:
$mainSpace = $builder->getInteriorVolume();
Specjalne Typy Wieńców (CarcassBuilder)
CarcassBuilder obsługuje zaawansowane typy wieńców:
setTopType('overlay' | 'inset' | 'double_inset_h' | 'double_inset_v'): Określa rodzaj wieńca górnego.setBottomType('overlay' | 'inset'): Określa rodzaj wieńca dolnego.setStretcherDepth(int $depth): Określa głębokość poprzeczek dla typówdouble_inset.- Równy podział:
$mainSpace->splitVertical(2);(Wstawi 2 przegrody, tworząc 3 równe wnęki). - Podział asymetryczny:
$mainSpace->splitVertical([300, 500]);(Pierwsza wnęka 300mm, druga 500mm, trzecia zajmuje resztę). - Ważne: System sam dba o grubość płyt przegród. Zwracane są nowe obiekty
VolumeManagerdla każdej wnęki. - Równy podział:
$mainSpace->splitHorizontal(1);(Wstawi 1 przegrodę, tworząc 2 równe poziomy). - Podział asymetryczny:
$mainSpace->splitHorizontal([200]);(Dolna wnęka 200mm, górna to reszta). - ID Prefixes: Zawsze używaj unikalnych prefiksów przy wielokrotnym dzieleniu, aby uniknąć kolizji nazw:
$space->splitHorizontal(1, "DIV_H_CUSTOM_");
- Ważne: Jeśli ustawiony jest cokół (setPlinth > 0), dół szafki jest zawsze wymuszany jako inset (wpuszczany), aby boki stanowiły stabilną konstrukcję dla cokołu.
Dzielenie Pionowe (Przegrody pionowe)
Metoda splitVertical() tnie przestrzeń od lewej do prawej.
Dzielenie Poziome (Przegrody poziome / Półki stałe)
Metoda splitHorizontal() tnie przestrzeń od dołu do góry.
---
2. Dodawanie Frontów
Do wstawienia drzwi używamy metody addFront().
$space->addFront('overlay', 'left', 'ID_FRONTU', $coverage);
Parametry:
1. Typ: 'overlay' (nakładany) lub 'inside' (wpuszczany).
2. Kierunek: 'left' lub 'right' (decyduje o stronie zawiasów).
3. ID: Unikalna nazwa formatki.
4. Coverage (tylko dla overlay):
- 'full': Front zakrywa całą grubość boku/wieńca (domyślne).
- 'half': Front zakrywa połowę grubości płyty (używane na wspólnych przegrodach).
- 'none': Front nie nachodzi na daną krawędź.
- Można przekazać tablicę: ['left' => 'full', 'right' => 'half', 'top' => 'none', 'bottom' => 'full'].
---
3. Dodawanie Półek (Ruchomych)
Półki różnią się od przegród poziomych tym, że są "luźne" i oparte na podpórkach.
$space->addShelves(int $count, ShelfSystem $system, string $idPrefix);
Systemy Półek (ShelfSystem Enum):
FIXED_1: Jedna stała pozycja (środek).ADJUSTABLE_3: Trzy otwory (regulacja +/- 32mm).FULL_GRID_32: Rząd otworów co 32mm na całej wysokości.SYMMETRIC_32: Symetryczny rozkład otworów w systemie 32mm.Zasada Bezpieczeństwa: Półki automatycznie omijają zawiasy frontów (bufor 32mm). Jeśli półka koliduje z zawiasem, jej nawierty zostaną usunięte przez system "Lustrzanej Blokady", a jeśli straci wszystkie podpórki - sama półka zostanie usunięta z modelu 3D.
---
4. Dodawanie Szuflad (DrawerHelper)
Szuflady są modułami zagnieżdżonymi. Do ich masowego dodawania służy DrawerHelper.
$drawerPanels = DrawerHelper::addDrawersToSpace($space, $count, $prefix, $config);
Kluczowe ustawienia w $config:
'frontType': 'overlay' lub 'inside'.'depth': Musisz podać głębokość dostępną ($space->depth). System sam skróci szufladę tak, by nie uderzyła w plecy.'isLeftEdge' / 'isRightEdge': Flagi logiczne (boolean) informujące, czy szuflada dotyka zewnętrznego boku szafki (wpływa na wielkość frontu).---
5. Przykładowy Przepis (Szafka Mieszana)
// 1. Dzielimy szafkę pionowo na dwie części
[$lewa, $prawa] = $mainSpace->splitVertical(1);
// 2. W lewej dajemy 2 szuflady
$szuflady = DrawerHelper::addDrawersToSpace($lewa, 2, 'SZ', $config);
// 3. W prawej dajemy 3 ruchome półki
$lewa->addShelves(3, ShelfSystem::SYMMETRIC_32, 'POLKA_');
// 4. Do prawej dodajemy drzwi
$prawa->addFront('overlay', 'right', 'DRZWI_P');
Zawsze pamiętaj o scalaniu formatek na końcu metody build():
return [
'panels' => array_merge($builder->getAllPanels(), $mainSpace->getPanels(), $szuflady),
'params' => $params
];