Files
houseplan-card/docs/specs/052-view-dimensions.md
T

68 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ТЗ #52 — Размеры стен и площади в View
> **Закрыто 2026-09-07 решением владельца, объединено с #53.** Слой размеров
> в режиме просмотра не делается. Раздел «Площади» остаётся действующим
> контрактом и переиспользуется опцией «Отображать размеры» экспорта PDF
> (#53). Раздел «Длины» (осевые пролёты стен) на бумаге НЕ применяется:
> ТЗ #53 §7.3 печатает внутренние размеры каждой комнаты грань-в-грань и
> внешние размеры наружных граней. «Настройка» и «Collision/zoom» к экрану
> больше не относятся.
- Issue: https://github.com/Matysh/houseplan-card/issues/52 (закрыт, см. #53)
- Приоритет: P3
- Статус ТЗ: контракт измерений для #53
## Цель
Добавить read-only architectural annotation layer на основе существующей
геометрии и `cell_cm`, не создавая второй системы измерений.
## Настройка
Per-space `settings.dimensions: 'off' | 'areas' | 'full'`, default `off`.
Отдельный card/kiosk default: kiosk всегда скрывает dimensions, пока будущая
явная card option не разрешит их. Editor preview использует effective setting.
## Площади
- `areas` и `full` показывают значение чистого пола через тот же
clean-floor/`geometryArea` resolver, что tooltip #28.
- Единицы/округление — существующий `formatArea`; metric m², imperial ft².
- Label anchor — сохранённый room label position либо interior visual point;
annotation не перемещает пользовательское room name.
- Очень малая/узкая room скрывает annotation при отсутствии безопасного места,
tooltip/card всё равно содержит площадь.
## Длины
- `full` аннотирует unique physical wall centreline spans из текущей
normalized wall model. Общая стена рисуется один раз.
- Virtual/open boundary не получает physical length annotation.
- Doors/windows/gates не вычитаются из общей длины span; это размер стены по
оси, а не чистая кладка.
- Partitions и physical segments сохранённых room drafts входят; columns не
имеют линейного размера. Толщина не меняет длину оси.
- Collinear мусорные fragments сначала проходят существующую compaction;
annotation не объединяет через угол/разрыв.
Label расположен параллельно span, читаемый текст никогда не upside-down;
offset выбирается со стороны вне clean floor при возможности. Значение
использует `segmentCm`/`formatLength` и space grid scale.
## Collision/zoom
Projection вычисляет candidates и детерминированно скрывает labels, чьи screen
bbox пересекаются с более приоритетными (selected room, outer wall, longer
span). Ни один label не становится меньше доступного font minimum. На малом
zoom слой постепенно скрывает wall dimensions, затем areas; stored setting не
меняется. `pointer-events:none`.
## Проверки и приёмка
- rectangles, diagonal/L/nested/shared/thick/open walls, partitions/drafts;
- metric/imperial, different cell_cm, resize and optimize;
- deterministic collision at several viewports/zooms;
- View/kiosk/editor visibility and print-friendly golden;
- area совпадает с room card, length с live ruler для того же span;
- никакой config mutation от отображения слоя.