mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-30 11:49:16 +00:00
68 lines
4.2 KiB
Markdown
68 lines
4.2 KiB
Markdown
# ТЗ #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 от отображения слоя.
|