fix: keep wall-hosted passages open in static view

Issue: #282
User-Visible: yes
This commit is contained in:
Matysh
2026-08-26 02:53:19 +03:00
parent fb6cc3ca2d
commit f37efdad8a
7 changed files with 26 additions and 19 deletions
File diff suppressed because one or more lines are too long
+6 -1
View File
@@ -160,7 +160,12 @@ const out = await page.evaluate(async () => {
await staticCard.updateComplete;
await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve)));
const staticRoot = staticCard.shadowRoot || staticCard.renderRoot;
result.staticCutsAndFillsPassage = !!staticRoot.querySelector('.wallbodies')
const staticWallBodyPaths = [...staticRoot.querySelectorAll('.wallbodies path')];
const passagePoint = new DOMPoint(500, 450);
const solidWallPoint = new DOMPoint(500, 260);
result.staticCutsAndFillsPassage = staticWallBodyPaths.length > 0
&& staticWallBodyPaths.every((path) => !path.isPointInFill(passagePoint))
&& staticWallBodyPaths.some((path) => path.isPointInFill(solidWallPoint))
&& !!staticRoot.querySelector('.static-opening-tunnels [data-kind="passage"]');
result.staticDoesNotInventPassageSymbol = staticRoot.querySelectorAll('[data-hp="opening"]').length === 0;
staticCard.remove();
+2 -2
View File
File diff suppressed because one or more lines are too long
+2 -1
View File
@@ -25,7 +25,8 @@
An invalid open passage also retains its specific actionable error instead
of being masked by the generic wall-model migration blocker. The compact
space card keeps wall-hosted doors, windows, gates and passages visible after
the migration as well. Wall-hosted windows keep casting sunlight after an
the migration as well, including the physical gap in masonry for a passage.
Wall-hosted windows keep casting sunlight after an
edit, partial open boundaries remain writable on migrated plans, and clearing
wall thickness no longer restores its previous value.
Ambiguous legacy geometry is
+2 -1
View File
@@ -29,7 +29,8 @@
частичный результат и не показывает ложное сообщение об успехе. Невалидный
открытый проход по-прежнему получает своё точное сообщение об ошибке, а не
общий блокер миграции стен. Компактная карточка пространства также не теряет
после миграции двери, окна, ворота и проходы, привязанные к стенам.
после миграции двери, окна, ворота и проходы, привязанные к стенам, включая
физический разрыв кладки в месте прохода.
Окна на стенах продолжают пропускать солнечные лучи после правки, частичные
открытые границы сохраняются и на уже мигрированных планах, а удалённая
толщина стены больше не восстанавливается в прежнее значение.
+11 -11
View File
@@ -2,7 +2,7 @@
"version": 1,
"fixture": "synthetic-only",
"chromium": "151.0.7922.34",
"sourceFingerprint": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818",
"sourceFingerprint": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"captureScriptSha256": "ce2e9542fed9dade3085be87d16f69adb2ac8262893ad78ad966b1b9673f2983",
"command": "npm run build && node demo/docs/capture.mjs",
"scenarios": {
@@ -14,7 +14,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818",
"sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "36223106c073f07d8cc3ecf8eaab37192ebb2687daba65c5c21047d0b7890de0"
},
"view-touch": {
@@ -25,7 +25,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818",
"sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "41e3ba67f8db0e98f26f484293af83ef937c369ca5ca6a59a3350d8954c906f4"
},
"space-create": {
@@ -36,7 +36,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818",
"sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "c33a7279165a4cec6fa6fadb6fd08cd967e082a17fe101ef442d27d36ae59b6b"
},
"room-contour-close": {
@@ -47,7 +47,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818",
"sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "b4777162eae89e0d95801721330bcd74ba761624b82b3362069d7e2d38317e08"
},
"plan-context-tray": {
@@ -58,7 +58,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818",
"sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "c0e28edf82f45ccc6df568d3023b681e9e4394262ad34c1605fe9eacdb57a390"
},
"device-editor": {
@@ -69,7 +69,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818",
"sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "d0ffd31ce80bfde21ab75da356a5fc1af38246f2b301030880320620c228d89d"
},
"device-display-preview": {
@@ -80,7 +80,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818",
"sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "2cdabae1f89c3286e4fac0ce30f757ee1690b707ab8a5488748b7cd420626160"
},
"background-editor": {
@@ -91,7 +91,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818",
"sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "30147bb00a90eea7136b4cee30995f6e6a9217b5132f3e8d3ad7471413b1af8a"
},
"room-card": {
@@ -102,7 +102,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818",
"sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "029a3e69ec647a8a370d99e6bb7f9225833c526739076022f6b52ba54bff30ea"
},
"device-info": {
@@ -113,7 +113,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818",
"sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "dd492f53150b7149085daada5cce9eeae9bde9e7ea1d86679a54b3041f72f517"
}
}
+1 -1
View File
@@ -434,7 +434,7 @@ export function renderSpaceStatic(o: StaticRenderOpts): TemplateResult | null {
const canonicalWallGeometry = needsCanonicalWallGeometry
? cachedStaticWallGeometry(o.cfg, space.id, wallGeometryFingerprint, () => wallBodiesUnionPath(
space.rooms, walls, [], [
...staticPassages.filter((opening) => !opening.host).map((opening) => ({
...staticPassages.filter((opening) => opening.host?.kind !== 'partition').map((opening) => ({
x: opening.rx, y: opening.ry, angle: opening.angle, length: opening.rlen,
})),
...hostedCompositeOpenings,