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 staticCard.updateComplete;
await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve))); await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve)));
const staticRoot = staticCard.shadowRoot || staticCard.renderRoot; 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"]'); && !!staticRoot.querySelector('.static-opening-tunnels [data-kind="passage"]');
result.staticDoesNotInventPassageSymbol = staticRoot.querySelectorAll('[data-hp="opening"]').length === 0; result.staticDoesNotInventPassageSymbol = staticRoot.querySelectorAll('[data-hp="opening"]').length === 0;
staticCard.remove(); 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 An invalid open passage also retains its specific actionable error instead
of being masked by the generic wall-model migration blocker. The compact of being masked by the generic wall-model migration blocker. The compact
space card keeps wall-hosted doors, windows, gates and passages visible after 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 edit, partial open boundaries remain writable on migrated plans, and clearing
wall thickness no longer restores its previous value. wall thickness no longer restores its previous value.
Ambiguous legacy geometry is Ambiguous legacy geometry is
+2 -1
View File
@@ -29,7 +29,8 @@
частичный результат и не показывает ложное сообщение об успехе. Невалидный частичный результат и не показывает ложное сообщение об успехе. Невалидный
открытый проход по-прежнему получает своё точное сообщение об ошибке, а не открытый проход по-прежнему получает своё точное сообщение об ошибке, а не
общий блокер миграции стен. Компактная карточка пространства также не теряет общий блокер миграции стен. Компактная карточка пространства также не теряет
после миграции двери, окна, ворота и проходы, привязанные к стенам. после миграции двери, окна, ворота и проходы, привязанные к стенам, включая
физический разрыв кладки в месте прохода.
Окна на стенах продолжают пропускать солнечные лучи после правки, частичные Окна на стенах продолжают пропускать солнечные лучи после правки, частичные
открытые границы сохраняются и на уже мигрированных планах, а удалённая открытые границы сохраняются и на уже мигрированных планах, а удалённая
толщина стены больше не восстанавливается в прежнее значение. толщина стены больше не восстанавливается в прежнее значение.
+11 -11
View File
@@ -2,7 +2,7 @@
"version": 1, "version": 1,
"fixture": "synthetic-only", "fixture": "synthetic-only",
"chromium": "151.0.7922.34", "chromium": "151.0.7922.34",
"sourceFingerprint": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818", "sourceFingerprint": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"captureScriptSha256": "ce2e9542fed9dade3085be87d16f69adb2ac8262893ad78ad966b1b9673f2983", "captureScriptSha256": "ce2e9542fed9dade3085be87d16f69adb2ac8262893ad78ad966b1b9673f2983",
"command": "npm run build && node demo/docs/capture.mjs", "command": "npm run build && node demo/docs/capture.mjs",
"scenarios": { "scenarios": {
@@ -14,7 +14,7 @@
}, },
"theme": "dark", "theme": "dark",
"language": "en", "language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818", "sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "36223106c073f07d8cc3ecf8eaab37192ebb2687daba65c5c21047d0b7890de0" "imageSha256": "36223106c073f07d8cc3ecf8eaab37192ebb2687daba65c5c21047d0b7890de0"
}, },
"view-touch": { "view-touch": {
@@ -25,7 +25,7 @@
}, },
"theme": "dark", "theme": "dark",
"language": "en", "language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818", "sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "41e3ba67f8db0e98f26f484293af83ef937c369ca5ca6a59a3350d8954c906f4" "imageSha256": "41e3ba67f8db0e98f26f484293af83ef937c369ca5ca6a59a3350d8954c906f4"
}, },
"space-create": { "space-create": {
@@ -36,7 +36,7 @@
}, },
"theme": "dark", "theme": "dark",
"language": "en", "language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818", "sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "c33a7279165a4cec6fa6fadb6fd08cd967e082a17fe101ef442d27d36ae59b6b" "imageSha256": "c33a7279165a4cec6fa6fadb6fd08cd967e082a17fe101ef442d27d36ae59b6b"
}, },
"room-contour-close": { "room-contour-close": {
@@ -47,7 +47,7 @@
}, },
"theme": "dark", "theme": "dark",
"language": "en", "language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818", "sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "b4777162eae89e0d95801721330bcd74ba761624b82b3362069d7e2d38317e08" "imageSha256": "b4777162eae89e0d95801721330bcd74ba761624b82b3362069d7e2d38317e08"
}, },
"plan-context-tray": { "plan-context-tray": {
@@ -58,7 +58,7 @@
}, },
"theme": "dark", "theme": "dark",
"language": "en", "language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818", "sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "c0e28edf82f45ccc6df568d3023b681e9e4394262ad34c1605fe9eacdb57a390" "imageSha256": "c0e28edf82f45ccc6df568d3023b681e9e4394262ad34c1605fe9eacdb57a390"
}, },
"device-editor": { "device-editor": {
@@ -69,7 +69,7 @@
}, },
"theme": "dark", "theme": "dark",
"language": "en", "language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818", "sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "d0ffd31ce80bfde21ab75da356a5fc1af38246f2b301030880320620c228d89d" "imageSha256": "d0ffd31ce80bfde21ab75da356a5fc1af38246f2b301030880320620c228d89d"
}, },
"device-display-preview": { "device-display-preview": {
@@ -80,7 +80,7 @@
}, },
"theme": "dark", "theme": "dark",
"language": "en", "language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818", "sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "2cdabae1f89c3286e4fac0ce30f757ee1690b707ab8a5488748b7cd420626160" "imageSha256": "2cdabae1f89c3286e4fac0ce30f757ee1690b707ab8a5488748b7cd420626160"
}, },
"background-editor": { "background-editor": {
@@ -91,7 +91,7 @@
}, },
"theme": "dark", "theme": "dark",
"language": "en", "language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818", "sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "30147bb00a90eea7136b4cee30995f6e6a9217b5132f3e8d3ad7471413b1af8a" "imageSha256": "30147bb00a90eea7136b4cee30995f6e6a9217b5132f3e8d3ad7471413b1af8a"
}, },
"room-card": { "room-card": {
@@ -102,7 +102,7 @@
}, },
"theme": "dark", "theme": "dark",
"language": "en", "language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818", "sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "029a3e69ec647a8a370d99e6bb7f9225833c526739076022f6b52ba54bff30ea" "imageSha256": "029a3e69ec647a8a370d99e6bb7f9225833c526739076022f6b52ba54bff30ea"
}, },
"device-info": { "device-info": {
@@ -113,7 +113,7 @@
}, },
"theme": "dark", "theme": "dark",
"language": "en", "language": "en",
"sourceSha256": "a3ac1e8df9e4563f16295cbd4ca9cbbdc643839622c3b92effbc346c6fcec818", "sourceSha256": "eb044c22b9a5d03dd9c66c1bc8ace5e8a2637da2b0078ba5782eb0e056a8cc23",
"imageSha256": "dd492f53150b7149085daada5cce9eeae9bde9e7ea1d86679a54b3041f72f517" "imageSha256": "dd492f53150b7149085daada5cce9eeae9bde9e7ea1d86679a54b3041f72f517"
} }
} }
+1 -1
View File
@@ -434,7 +434,7 @@ export function renderSpaceStatic(o: StaticRenderOpts): TemplateResult | null {
const canonicalWallGeometry = needsCanonicalWallGeometry const canonicalWallGeometry = needsCanonicalWallGeometry
? cachedStaticWallGeometry(o.cfg, space.id, wallGeometryFingerprint, () => wallBodiesUnionPath( ? cachedStaticWallGeometry(o.cfg, space.id, wallGeometryFingerprint, () => wallBodiesUnionPath(
space.rooms, walls, [], [ 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, x: opening.rx, y: opening.ry, angle: opening.angle, length: opening.rlen,
})), })),
...hostedCompositeOpenings, ...hostedCompositeOpenings,