mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-01 20:29:00 +00:00
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
61 lines
3.4 KiB
Markdown
61 lines
3.4 KiB
Markdown
# ТЗ #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 от отображения слоя.
|