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

3.4 KiB
Raw Blame History

ТЗ #52 — Размеры стен и площади в View

Цель

Добавить 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 от отображения слоя.