fix(led): сгладить торцы поля свечения (#786)

Issue: #786
User-Visible: yes
This commit is contained in:
Matysh
2026-10-03 16:41:10 +03:00
parent aa1105468b
commit 9598768167
7 changed files with 78 additions and 19 deletions
+4
View File
@@ -2,6 +2,10 @@
## Unreleased
- Fixed LED-strip Glow end caps so free ends stay smoothly round at high zoom
instead of exposing polygon facets depending on nearby walls
([#786](https://github.com/Matysh/houseplan-card/issues/786)).
## v1.79.0-beta.5 — 2026-10-03
- Fixed Glow for LED strips with mixed geometry: long free segments no longer
+5
View File
@@ -8,6 +8,11 @@
## Не выпущено
- Исправлены торцы Glow у LED-лент: свободные концы остаются
плавно круглыми при сильном приближении и больше не показывают грани
многоугольника в зависимости от соседних стен
([#786](https://github.com/Matysh/houseplan-card/issues/786)).
## v1.79.0-beta.5 — 2026-10-03
- Исправлено свечение LED-лент со смешанной геометрией: длинные свободные
+4 -2
View File
@@ -429,8 +429,10 @@ only the geometry differs:
radius; each piece is clipped to the visibility fans of its own emitters
(the shared `visibilityPolygon` over the same barrier scene as pools; the
fans are separate paths of one clipPath, no boolean pass per piece), and the
whole field layer is clipped once to the floor. A piece with no occluder
within the radius needs no fan at all. Windows, columns,
whole field layer is clipped once to the floor. An unobstructed emitter uses
an exact SVG disc; a blocked fan keeps hard obstacle edges and exact circular
arcs between them, so free ends cannot expose angular-sweep facets. Windows,
columns,
thick walls and Solid zero walls block; doors/gates pass by their actual
opening; Dashed zero walls are transparent. Emitters on a thick face sit
`epsilonGeom` (0.001 cm) outward into free floor; a part buried in a body
+1 -1
View File
@@ -43,7 +43,7 @@ behaviours, not of positions.
| On with Glow: white core + coloured field; without Glow: core in the source colour, no field | `ledStripView` + `resolveGlowAppearance` | smoke `smoke_led_strip_glow.mjs` |
| Glow is the space/room switch, independent of `fill_mode` | `glowFor(room)` | `lighting-led-strip-glow-dark` uses `fill_mode: none` |
| Per-piece offset: t/2 on a thick face into free floor, 0 on free floor and zero walls; continuous transition | `visibleStripPath` | unit `test/led-strip-geometry.test.mjs` (AC8) |
| Field 30 cm by default, own `glow_radius_cm` wins; round free ends; no seams, bands, missing free runs or doubled brightness at corners/closure | `ledFrame`, one continuous path through the filled visibility fans in `led-strip-field` | unit `test/led-strip-runtime.test.mjs`; golden `led-strip-long-zigzag-glow-light`; reference pair |
| Field 30 cm by default, own `glow_radius_cm` wins; round free ends; no seams, bands, missing free runs or doubled brightness at corners/closure | `ledFrame`, one continuous path through exact circular free fans and obstacle-clipped visibility fans in `led-strip-field` | unit `test/led-strip-runtime.test.mjs`; golden `led-strip-long-zigzag-glow-light`, `led-strip-endcaps-zoom-light`; reference pair |
| Shared `glowAlpha` / `GLOW_FALLOFF` / `GLOW_FADE_MS` | field bands from `falloffAt` | unit `test/led-strip-runtime.test.mjs` |
| Field under icons, badges and labels; icons not tinted | glow layer below the device layer | reference pair (designer tinting deliberately not reproduced) |