|
|
5339aeb72e
|
feat(concept): 3D-масса корпусов на карте с тенями (§7) (#1953)
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 1m1s
CI / openapi-codegen-check (pull_request) Successful in 1m52s
Anton: «куда делась 3D? хочу подробную 3D-модель, крутится на карте (карта как
подставка-земля), видеть тень». Вернул 3D — но привязанный к ЕДИНОЙ программе.
- Massing3DScene (three, ssr:false): рисует РОВНО размещённые корпуса из
variant.buildings_geojson (высота = floors × высота этажа), на ground-плоскости
с растровым OSM-тайлом участка («карта как земля»), солнце по времени суток
отбрасывает тени (slider «Время суток»), OrbitControls + автоповорот.
- geo-local.ts: WGS84→локальные метры (equirectangular о центроиде) + slippy-tile
математика (выбор зума ≤2×2, geo-pin плоскости теми же углами тайл-блока) — 11
vitest. Без новых зависимостей (three+leaflet уже есть).
- Вкладка 2D/3D в «Размещение застройки»: «План (2D)» = существующая Leaflet-карта,
«Объём (3D)» = новый вьюер. Десктоп — 3D по умолчанию, моб (<768) — 2D + 3D по тапу.
- sun.ts / three-utils.ts: sunFromHour + disposeObject вынесены из MassingScene
(verbatim), кокпит репойнтнут на них (без изменения поведения).
- Полный teardown (RAF/RO/dispose geom+mat+CanvasTexture+renderer), WebGL-guard,
fallback на плоскую плашку+grid при сбое тайла/таймауте 6с, честный caption
(высота этажа норматив движка; подложка © OpenStreetMap).
Отложено (follow-up): live-ползунок высоты этажа (Phase 2); полноценный 3D-рельеф
местности (нужны DEM/elevation-тайлы — отдельный эпик).
|
2026-06-30 16:55:06 +05:00 |
|