Files
houseplan-card/docs/specs/052-view-dimensions.md
T
Matysh 112c260314
Validate / hacs (push) Failing after 12s
Validate / hassfest (push) Failing after 13s
Validate / frontend (push) Successful in 3m2s
Validate / golden (push) Failing after 51s
Validate / backend (push) Failing after 6m50s
Validate / smoke (push) Failing after 13m44s
Validate / performance (push) Failing after 24m13s
Release v1.61.0-beta.1
2026-08-09 21:51:33 +03:00

61 lines
3.4 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
- Issue: https://github.com/Matysh/houseplan-card/issues/52
- Приоритет: P2
- Статус ТЗ: ready for review
- Зависимость для будущего PDF export
## Цель
Добавить 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 от отображения слоя.