feat(ptica): 3D building-massing module (Three.js) [PR#5] #1835

Merged
lekss361 merged 1 commit from feat/ptica-cockpit-pr5-3d into main 2026-06-20 12:33:51 +00:00
Collaborator

Стэкнут на #1834 (база feat/ptica-cockpit-pr4-drawers) — финальный инкремент порта.

3D-масса застройки (Three.js)

Порт прототипного massing.js в client-only React (MassingScene) за dynamic(ssr:false)-обёрткой (MassingViewer), в drawer'ах future3d + insolation (заменил «СКОРО»).

  • Генеративная масса: площадь участка (реальная geometry_suitability.area_ha) × КСИТ-цель 3.5 (помечена «регламент-дефолт · НСПД» — честно, реального max_far нет в /analyze);
  • OrbitControls (вращение/зум/автоповорот), солнце с тенями по слайдеру времени суток (= превью инсоляции);
  • живые метрики: этажи/высота/пятно/GFA/КСИТ-факт (зелёный ≤3.5 / янтарь при превышении);
  • слайдеры Этажность/Секций/Время суток + Автоповорот — study-инпуты, GFA/КСИТ-факт считаются (честная песочница).

Прод-безопасность

  • lockfile в синхроне: three@0.184.0 + @types/three@0.184.1 в package.json И package-lock.json, версии совпадают (риск деплой-аборта #344 снят);
  • SSR-изоляция airtight: three импортится только в MassingScene, drawer тянет MassingViewer (dynamic ssr:false) — window/WebGL не доходят до сервера;
  • полный dispose рендерера/сцены/RAF при закрытии drawer'а (нет утечки WebGL-контекста между открытиями); graceful-fallback если WebGL недоступен.
  • TS strict без any, тема scoped. tsc/lint/prettier . code-reviewer APPROVE (адверсариальный по lockfile + WebGL-dispose — оба чисты).

Готов весь стек порта

PR#1 cockpit shell+hero+scan (#1831) → PR#2 Сценарии (#1832) → PR#3 Отчёты+Сравнение (#1833) → PR#4 16 drawer'ов (#1834) → PR#5 3D-масса. Прототип ptica-redesign/ полностью перенесён в боевой фронт на реальных данных (/analyze+forecast) с честными заглушками.

Post-deploy: qa-tester — open/close 3D-drawer'ов + проверка WebGL-контекста (rule 7).

**Стэкнут на #1834** (база `feat/ptica-cockpit-pr4-drawers`) — финальный инкремент порта. ## 3D-масса застройки (Three.js) Порт прототипного `massing.js` в client-only React (`MassingScene`) за `dynamic(ssr:false)`-обёрткой (`MassingViewer`), в drawer'ах **future3d + insolation** (заменил «СКОРО»). - Генеративная масса: площадь участка (реальная `geometry_suitability.area_ha`) × **КСИТ-цель 3.5** (помечена «регламент-дефолт · НСПД» — честно, реального max_far нет в /analyze); - OrbitControls (вращение/зум/автоповорот), **солнце с тенями** по слайдеру времени суток (= превью инсоляции); - живые метрики: этажи/высота/пятно/GFA/**КСИТ-факт** (зелёный ≤3.5 / янтарь при превышении); - слайдеры Этажность/Секций/Время суток + Автоповорот — study-инпуты, GFA/КСИТ-факт считаются (честная песочница). ## Прод-безопасность - **lockfile в синхроне**: `three`@0.184.0 + `@types/three`@0.184.1 в package.json И package-lock.json, версии совпадают (риск деплой-аборта #344 снят); - **SSR-изоляция airtight**: `three` импортится только в `MassingScene`, drawer тянет `MassingViewer` (dynamic ssr:false) — window/WebGL не доходят до сервера; - **полный dispose** рендерера/сцены/RAF при закрытии drawer'а (нет утечки WebGL-контекста между открытиями); graceful-fallback если WebGL недоступен. - TS strict без `any`, тема scoped. tsc/lint/prettier ✅. **code-reviewer ✅ APPROVE** (адверсариальный по lockfile + WebGL-dispose — оба чисты). ## Готов весь стек порта PR#1 cockpit shell+hero+scan (#1831) → PR#2 Сценарии (#1832) → PR#3 Отчёты+Сравнение (#1833) → PR#4 16 drawer'ов (#1834) → **PR#5 3D-масса**. Прототип `ptica-redesign/` полностью перенесён в боевой фронт на реальных данных (`/analyze`+forecast) с честными заглушками. Post-deploy: qa-tester — open/close 3D-drawer'ов + проверка WebGL-контекста (rule 7).
bot-backend added 1 commit 2026-06-20 11:27:40 +00:00
Port the prototype massing.js to a client-only React component (MassingScene)
behind a dynamic(ssr:false) wrapper (MassingViewer), wired into the future3d +
insolation drawers, replacing the СКОРО SoonCards.

Generative mass from parcel area (real geometry_suitability.area_ha) × КСИТ-цель
3.5 (labelled regulation-default · НСПД — honest, real max_far not in /analyze),
OrbitControls (orbit/zoom/auto-rotate), time-of-day sun with shadows (insolation
preview), live GFA/КСИТ-факт metrics (green ≤3.5 / amber over). Full renderer/
scene/RAF dispose on drawer close; graceful WebGL-unavailable fallback.

Adds three@0.184.0 + @types/three (package.json + package-lock.json in sync).
SSR-isolated (three imported only in MassingScene). TS strict, no any.
lekss361 changed target branch from feat/ptica-cockpit-pr4-drawers to main 2026-06-20 12:33:39 +00:00
lekss361 merged commit cf032182ed into main 2026-06-20 12:33:51 +00:00
lekss361 deleted branch feat/ptica-cockpit-pr5-3d 2026-06-20 12:33:51 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1835
No description provided.