@pascal-app/core 1.0.0-beta.3 → 1.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +12 -0
  2. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  3. package/dist/hooks/spatial-grid/spatial-grid-manager.js +39 -1
  4. package/dist/index.d.ts +2 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +2 -1
  7. package/dist/lib/room-topology-index.d.ts +50 -0
  8. package/dist/lib/room-topology-index.d.ts.map +1 -0
  9. package/dist/lib/room-topology-index.js +237 -0
  10. package/dist/lib/space-detection.d.ts +29 -3
  11. package/dist/lib/space-detection.d.ts.map +1 -1
  12. package/dist/lib/space-detection.js +858 -242
  13. package/dist/registry/index.d.ts +3 -2
  14. package/dist/registry/index.d.ts.map +1 -1
  15. package/dist/registry/index.js +2 -1
  16. package/dist/registry/registry.d.ts +17 -1
  17. package/dist/registry/registry.d.ts.map +1 -1
  18. package/dist/registry/registry.js +74 -0
  19. package/dist/registry/types.d.ts +35 -0
  20. package/dist/registry/types.d.ts.map +1 -1
  21. package/dist/registry/use-registry-version.d.ts +11 -0
  22. package/dist/registry/use-registry-version.d.ts.map +1 -0
  23. package/dist/registry/use-registry-version.js +15 -0
  24. package/dist/schema/index.d.ts +1 -0
  25. package/dist/schema/index.d.ts.map +1 -1
  26. package/dist/schema/index.js +2 -0
  27. package/dist/schema/nodes/level.d.ts +3 -0
  28. package/dist/schema/nodes/level.d.ts.map +1 -1
  29. package/dist/schema/nodes/level.js +9 -0
  30. package/dist/schema/types.d.ts +1 -0
  31. package/dist/schema/types.d.ts.map +1 -1
  32. package/dist/services/index.d.ts +1 -1
  33. package/dist/services/index.d.ts.map +1 -1
  34. package/dist/services/index.js +1 -1
  35. package/dist/services/storey.d.ts +3 -10
  36. package/dist/services/storey.d.ts.map +1 -1
  37. package/dist/services/storey.js +45 -15
  38. package/dist/store/actions/node-actions.d.ts +8 -4
  39. package/dist/store/actions/node-actions.d.ts.map +1 -1
  40. package/dist/store/actions/node-actions.js +31 -4
  41. package/dist/store/history-control.d.ts +5 -0
  42. package/dist/store/history-control.d.ts.map +1 -1
  43. package/dist/store/history-control.js +68 -6
  44. package/dist/store/use-scene.d.ts.map +1 -1
  45. package/dist/store/use-scene.js +86 -172
  46. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  47. package/dist/systems/elevator/elevator-service.js +16 -11
  48. package/dist/systems/slab/slab-support.d.ts +0 -31
  49. package/dist/systems/slab/slab-support.d.ts.map +1 -1
  50. package/dist/systems/slab/slab-support.js +26 -4
  51. package/dist/systems/stair/stair-opening-preview.d.ts +1 -0
  52. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  53. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  54. package/dist/systems/stair/stair-rise.js +4 -2
  55. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  56. package/dist/systems/wall/wall-mitering.js +88 -9
  57. package/dist/systems/wall/wall-topology.d.ts +53 -0
  58. package/dist/systems/wall/wall-topology.d.ts.map +1 -0
  59. package/dist/systems/wall/wall-topology.js +414 -0
  60. package/dist/utils/clone-scene-graph.d.ts +2 -0
  61. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  62. package/dist/utils/clone-scene-graph.js +13 -2
  63. package/dist/utils/heal-scene-graph.d.ts +5 -0
  64. package/dist/utils/heal-scene-graph.d.ts.map +1 -1
  65. package/dist/utils/heal-scene-graph.js +46 -1
  66. package/dist/utils/scene-migrations.d.ts +4 -0
  67. package/dist/utils/scene-migrations.d.ts.map +1 -0
  68. package/dist/utils/scene-migrations.js +7 -0
  69. package/dist/utils/vertical-scene-migration.d.ts +13 -0
  70. package/dist/utils/vertical-scene-migration.d.ts.map +1 -0
  71. package/dist/utils/vertical-scene-migration.js +179 -0
  72. package/package.json +4 -4
@@ -179,6 +179,18 @@ export declare class SpatialGridManager {
179
179
  */
180
180
  getSlabElevationForWall(levelId: string, start: [number, number], end: [number, number], curveOffset?: number, thickness?: number, preferredSlabId?: string | null): number;
181
181
  getSlabSupportForWall(levelId: string, start: [number, number], end: [number, number], curveOffset?: number, thickness?: number, preferredSlabId?: string | null, maxElevation?: number | null, supportOffset?: number): WallSlabSupport;
182
+ /**
183
+ * Effective slab and wall records for a level, held BY IDENTITY. A single
184
+ * viewer pass queries support once per wall, and each query used to derive
185
+ * both arrays afresh — mapping every wall on the level through
186
+ * `getEffectiveNode` — which also defeated the rendered-polygon memo
187
+ * downstream in `computeWallSlabSupport`. Rebuilt only when the scene
188
+ * nodes, either live-preview store, or the manager's own slab/wall
189
+ * bookkeeping changes.
190
+ */
191
+ private supportInputsRevision;
192
+ private readonly supportInputs;
193
+ private getSupportInputs;
182
194
  /**
183
195
  * Walls on a level, resolved fresh from the scene store (the manager's
184
196
  * own wall map is only maintained on create/delete, not on updates).
@@ -1 +1 @@
1
- {"version":3,"file":"spatial-grid-manager.d.ts","sourceRoot":"","sources":["../../../src/hooks/spatial-grid/spatial-grid-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spatial-grid-manager.d.ts","sourceRoot":"","sources":["../../../src/hooks/spatial-grid/spatial-grid-manager.ts"],"names":[],"mappings":"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"}
@@ -259,6 +259,7 @@ export class SpatialGridManager {
259
259
  */
260
260
  renderedSlabPolygons = new Map();
261
261
  invalidateRenderedSlabPolygons(levelId) {
262
+ this.supportInputsRevision += 1;
262
263
  const slabMap = this.slabsByLevel.get(levelId);
263
264
  if (!slabMap)
264
265
  return;
@@ -822,7 +823,8 @@ export class SpatialGridManager {
822
823
  baseSegments: [{ start: 0, end: 1, elevation }],
823
824
  };
824
825
  }
825
- const support = computeWallSlabSupport({ start, end, curveOffset, thickness }, [...slabMap.values()].map((slab) => this.effectiveSlabRecord(slab)), this.getLevelWallNodes(levelId).map((wall) => getEffectiveNode(wall)), preferredSlabId, maxElevation, levelBase);
826
+ const inputs = this.getSupportInputs(levelId, slabMap);
827
+ const support = computeWallSlabSupport({ start, end, curveOffset, thickness }, inputs.slabs, inputs.walls, preferredSlabId, maxElevation, levelBase);
826
828
  if (supportOffset === 0)
827
829
  return support;
828
830
  return {
@@ -835,6 +837,40 @@ export class SpatialGridManager {
835
837
  })),
836
838
  };
837
839
  }
840
+ /**
841
+ * Effective slab and wall records for a level, held BY IDENTITY. A single
842
+ * viewer pass queries support once per wall, and each query used to derive
843
+ * both arrays afresh — mapping every wall on the level through
844
+ * `getEffectiveNode` — which also defeated the rendered-polygon memo
845
+ * downstream in `computeWallSlabSupport`. Rebuilt only when the scene
846
+ * nodes, either live-preview store, or the manager's own slab/wall
847
+ * bookkeeping changes.
848
+ */
849
+ supportInputsRevision = 0;
850
+ supportInputs = new Map();
851
+ getSupportInputs(levelId, slabMap) {
852
+ const nodes = useScene.getState().nodes;
853
+ const overrides = useLiveNodeOverrides.getState().overrides;
854
+ const transforms = useLiveTransforms.getState().transforms;
855
+ const cached = this.supportInputs.get(levelId);
856
+ if (cached &&
857
+ cached.revision === this.supportInputsRevision &&
858
+ cached.nodes === nodes &&
859
+ cached.overrides === overrides &&
860
+ cached.transforms === transforms) {
861
+ return cached;
862
+ }
863
+ const next = {
864
+ revision: this.supportInputsRevision,
865
+ nodes,
866
+ overrides,
867
+ transforms,
868
+ slabs: [...slabMap.values()].map((slab) => this.effectiveSlabRecord(slab)),
869
+ walls: this.getLevelWallNodes(levelId).map((wall) => getEffectiveNode(wall)),
870
+ };
871
+ this.supportInputs.set(levelId, next);
872
+ return next;
873
+ }
838
874
  /**
839
875
  * Walls on a level, resolved fresh from the scene store (the manager's
840
876
  * own wall map is only maintained on create/delete, not on updates).
@@ -942,6 +978,8 @@ export class SpatialGridManager {
942
978
  this.ceilings.clear();
943
979
  this.itemCeilingMap.clear();
944
980
  this.renderedSlabPolygons.clear();
981
+ this.supportInputs.clear();
982
+ this.supportInputsRevision += 1;
945
983
  }
946
984
  }
947
985
  // Singleton instance
package/dist/index.d.ts CHANGED
@@ -30,7 +30,7 @@ export * from './registry';
30
30
  export * from './schema';
31
31
  export * from './services';
32
32
  export { isMovable, movePlanToward, moveToward, resolveMovable } from './services/movement';
33
- export { getSceneHistoryPauseDepth, pauseSceneHistory, resetSceneHistoryPauseDepth, resumeSceneHistory, runAsSingleSceneHistoryStep, type SceneCommit, type SceneCommitListener, type SceneCommitOrigin, type SceneSnapshot, subscribeSceneCommits, } from './store/history-control';
33
+ export { acquireSceneHistoryPause, getSceneHistoryPauseDepth, pauseSceneHistory, resetSceneHistoryPauseDepth, resumeSceneHistory, runAsSingleSceneHistoryStep, type SceneCommit, type SceneCommitListener, type SceneCommitOrigin, type SceneSnapshot, subscribeSceneCommits, } from './store/history-control';
34
34
  export { type ControlValue, type DoorAnimationState, type DoorInteractiveState, type ElevatorInteractiveState, type ElevatorPhase, type ItemInteractiveState, type SkylightAnimationState, type SkylightInteractiveState, useInteractive, type WindowAnimationState, type WindowInteractiveState, } from './store/use-interactive';
35
35
  export { default as useLiveNodeOverrides, getEffectiveNode, type LiveNodeOverrides, } from './store/use-live-node-overrides';
36
36
  export { default as useLiveTerrain, type LiveTerrainStroke, } from './store/use-live-terrain';
@@ -57,6 +57,7 @@ export { DEFAULT_WALL_HEIGHT, DEFAULT_WALL_THICKNESS, getWallPlanFootprint, getW
57
57
  export { calculateLevelMiters, getAdjacentWallIds, getWallMiterBoundaryPoints, type Point2D, pointToKey, type WallMiterBoundaryPoints, type WallMiterData, } from './systems/wall/wall-mitering';
58
58
  export { constrainWallMoveDeltaToAxis, getLinkedWallUpdates, getPerpendicularWallMoveAxis, getPlannedLinkedWallUpdates, planWallMoveJunctions, type WallMoveAxis, type WallMoveBridgePlan, type WallMoveJunctionPlan, type WallMoveLinkedWallTargetPlan, type WallPlanPoint, } from './systems/wall/wall-move';
59
59
  export { MIN_WALL_HEIGHT, resolveWallEffectiveHeight, resolveWallTop, } from './systems/wall/wall-top';
60
+ export { planWallInsertion, planWallSplitAtPoint, } from './systems/wall/wall-topology';
60
61
  export type { SceneGraph } from './utils/clone-scene-graph';
61
62
  export { cloneLevelSubtree, cloneSceneGraph, forkSceneGraph } from './utils/clone-scene-graph';
62
63
  export { isObject } from './utils/types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -28,7 +28,7 @@ export * from './registry';
28
28
  export * from './schema';
29
29
  export * from './services';
30
30
  export { isMovable, movePlanToward, moveToward, resolveMovable } from './services/movement';
31
- export { getSceneHistoryPauseDepth, pauseSceneHistory, resetSceneHistoryPauseDepth, resumeSceneHistory, runAsSingleSceneHistoryStep, subscribeSceneCommits, } from './store/history-control';
31
+ export { acquireSceneHistoryPause, getSceneHistoryPauseDepth, pauseSceneHistory, resetSceneHistoryPauseDepth, resumeSceneHistory, runAsSingleSceneHistoryStep, subscribeSceneCommits, } from './store/history-control';
32
32
  export { useInteractive, } from './store/use-interactive';
33
33
  export { default as useLiveNodeOverrides, getEffectiveNode, } from './store/use-live-node-overrides';
34
34
  export { default as useLiveTerrain, } from './store/use-live-terrain';
@@ -55,6 +55,7 @@ export { DEFAULT_WALL_HEIGHT, DEFAULT_WALL_THICKNESS, getWallPlanFootprint, getW
55
55
  export { calculateLevelMiters, getAdjacentWallIds, getWallMiterBoundaryPoints, pointToKey, } from './systems/wall/wall-mitering';
56
56
  export { constrainWallMoveDeltaToAxis, getLinkedWallUpdates, getPerpendicularWallMoveAxis, getPlannedLinkedWallUpdates, planWallMoveJunctions, } from './systems/wall/wall-move';
57
57
  export { MIN_WALL_HEIGHT, resolveWallEffectiveHeight, resolveWallTop, } from './systems/wall/wall-top';
58
+ export { planWallInsertion, planWallSplitAtPoint, } from './systems/wall/wall-topology';
58
59
  export { cloneLevelSubtree, cloneSceneGraph, forkSceneGraph } from './utils/clone-scene-graph';
59
60
  export { isObject } from './utils/types';
60
61
  export { validateBuildJson, } from './validation/validate-build-json';
@@ -0,0 +1,50 @@
1
+ import type { WallNode } from '../schema';
2
+ type SceneNodes = Record<string, any>;
3
+ type Point = [number, number];
4
+ type IndexedRoom = {
5
+ boundaryFaces: Array<{
6
+ wallId: WallNode['id'];
7
+ }>;
8
+ };
9
+ type IndexedLevelTopology<TRoom extends IndexedRoom> = {
10
+ walls: Map<string, WallNode>;
11
+ rooms: TRoom[];
12
+ wallIdsByCell: Map<string, Set<string>>;
13
+ cellKeysByWallId: Map<string, string[]>;
14
+ };
15
+ export type IndexedTopologyDelta<TRoom extends IndexedRoom> = {
16
+ strategy: 'indexed' | 'fallback';
17
+ beforeRooms: TRoom[];
18
+ currentRooms: TRoom[];
19
+ allCurrentRooms: TRoom[];
20
+ previousWalls: WallNode[];
21
+ currentWalls: WallNode[];
22
+ examinedWallIds: string[];
23
+ };
24
+ type RoomTopologyIndexOptions<TRoom extends IndexedRoom> = {
25
+ detectRooms: (walls: WallNode[]) => TRoom[];
26
+ sampleWall: (wall: WallNode) => Point[];
27
+ junctionTolerance: number;
28
+ };
29
+ export declare function distanceToSegment(point: Point, segStart: Point, segEnd: Point): number;
30
+ export declare class RoomTopologyIndex<TRoom extends IndexedRoom> {
31
+ private readonly options;
32
+ private readonly levels;
33
+ private readonly queryMargin;
34
+ constructor(options: RoomTopologyIndexOptions<TRoom>);
35
+ rebuild(nodes: SceneNodes): void;
36
+ rebuildLevel(levelId: string, nodes: SceneNodes): IndexedLevelTopology<TRoom>;
37
+ applyWallDelta(levelId: string, changedWallIds: ReadonlySet<string>, beforeNodes: SceneNodes, currentNodes: SceneNodes): IndexedTopologyDelta<TRoom>;
38
+ private wallsForLevel;
39
+ private wallsFromNodes;
40
+ private createLevel;
41
+ private wallBbox;
42
+ private cellKeysForWall;
43
+ private removeWall;
44
+ private setWall;
45
+ private queryWalls;
46
+ private wallsTouch;
47
+ private connectedWallIds;
48
+ }
49
+ export {};
50
+ //# sourceMappingURL=room-topology-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-topology-index.d.ts","sourceRoot":"","sources":["../../src/lib/room-topology-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAGzC,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AACrC,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE7B,KAAK,WAAW,GAAG;IACjB,aAAa,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC,CAAA;CACjD,CAAA;AAED,KAAK,oBAAoB,CAAC,KAAK,SAAS,WAAW,IAAI;IACrD,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC5B,KAAK,EAAE,KAAK,EAAE,CAAA;IACd,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACvC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,oBAAoB,CAAC,KAAK,SAAS,WAAW,IAAI;IAC5D,QAAQ,EAAE,SAAS,GAAG,UAAU,CAAA;IAChC,WAAW,EAAE,KAAK,EAAE,CAAA;IACpB,YAAY,EAAE,KAAK,EAAE,CAAA;IACrB,eAAe,EAAE,KAAK,EAAE,CAAA;IACxB,aAAa,EAAE,QAAQ,EAAE,CAAA;IACzB,YAAY,EAAE,QAAQ,EAAE,CAAA;IACxB,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B,CAAA;AAED,KAAK,wBAAwB,CAAC,KAAK,SAAS,WAAW,IAAI;IACzD,WAAW,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,KAAK,EAAE,CAAA;IAC3C,UAAU,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,KAAK,EAAE,CAAA;IACvC,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAqCD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,UAY7E;AAkBD,qBAAa,iBAAiB,CAAC,KAAK,SAAS,WAAW;IAI1C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiD;IACxE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;gBAEP,OAAO,EAAE,wBAAwB,CAAC,KAAK,CAAC;IAIrE,OAAO,CAAC,KAAK,EAAE,UAAU;IAczB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU;IAM/C,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,EACnC,WAAW,EAAE,UAAU,EACvB,YAAY,EAAE,UAAU,GACvB,oBAAoB,CAAC,KAAK,CAAC;IAuD9B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,gBAAgB;CAiBzB"}
@@ -0,0 +1,237 @@
1
+ import { getClampedWallCurveOffset } from '../systems/wall/wall-curve';
2
+ const CELL_SIZE = 2;
3
+ function bboxOf(points) {
4
+ let minX = Number.POSITIVE_INFINITY;
5
+ let minY = Number.POSITIVE_INFINITY;
6
+ let maxX = Number.NEGATIVE_INFINITY;
7
+ let maxY = Number.NEGATIVE_INFINITY;
8
+ for (const [x, y] of points) {
9
+ minX = Math.min(minX, x);
10
+ minY = Math.min(minY, y);
11
+ maxX = Math.max(maxX, x);
12
+ maxY = Math.max(maxY, y);
13
+ }
14
+ return { minX, minY, maxX, maxY };
15
+ }
16
+ function expandedBbox(box, margin) {
17
+ return {
18
+ minX: box.minX - margin,
19
+ minY: box.minY - margin,
20
+ maxX: box.maxX + margin,
21
+ maxY: box.maxY + margin,
22
+ };
23
+ }
24
+ function cellKeysForBbox(box) {
25
+ const keys = [];
26
+ for (let x = Math.floor(box.minX / CELL_SIZE); x <= Math.floor(box.maxX / CELL_SIZE); x += 1) {
27
+ for (let y = Math.floor(box.minY / CELL_SIZE); y <= Math.floor(box.maxY / CELL_SIZE); y += 1) {
28
+ keys.push(`${x},${y}`);
29
+ }
30
+ }
31
+ return keys;
32
+ }
33
+ export function distanceToSegment(point, segStart, segEnd) {
34
+ const [px, py] = point;
35
+ const [x1, y1] = segStart;
36
+ const [x2, y2] = segEnd;
37
+ const dx = x2 - x1;
38
+ const dy = y2 - y1;
39
+ const lenSq = dx * dx + dy * dy;
40
+ if (lenSq < 0.0001)
41
+ return Math.hypot(px - x1, py - y1);
42
+ const t = Math.max(0, Math.min(1, ((px - x1) * dx + (py - y1) * dy) / lenSq));
43
+ return Math.hypot(px - (x1 + t * dx), py - (y1 + t * dy));
44
+ }
45
+ function roomUsesAnyWall(room, wallIds) {
46
+ return room.boundaryFaces.some((boundary) => wallIds.has(boundary.wallId));
47
+ }
48
+ function sameIndexedWall(left, right) {
49
+ if (!(left && right))
50
+ return left === right;
51
+ return (left.parentId === right.parentId &&
52
+ left.start[0] === right.start[0] &&
53
+ left.start[1] === right.start[1] &&
54
+ left.end[0] === right.end[0] &&
55
+ left.end[1] === right.end[1] &&
56
+ getClampedWallCurveOffset(left) === getClampedWallCurveOffset(right));
57
+ }
58
+ export class RoomTopologyIndex {
59
+ options;
60
+ levels = new Map();
61
+ queryMargin;
62
+ constructor(options) {
63
+ this.options = options;
64
+ this.queryMargin = options.junctionTolerance + 0.02;
65
+ }
66
+ rebuild(nodes) {
67
+ this.levels.clear();
68
+ const wallsByLevel = new Map();
69
+ for (const node of Object.values(nodes)) {
70
+ if (node?.type !== 'wall' || !node.parentId)
71
+ continue;
72
+ const walls = wallsByLevel.get(node.parentId) ?? [];
73
+ walls.push(node);
74
+ wallsByLevel.set(node.parentId, walls);
75
+ }
76
+ for (const [levelId, walls] of wallsByLevel) {
77
+ this.levels.set(levelId, this.createLevel(walls));
78
+ }
79
+ }
80
+ rebuildLevel(levelId, nodes) {
81
+ const level = this.createLevel(this.wallsForLevel(nodes, levelId));
82
+ this.levels.set(levelId, level);
83
+ return level;
84
+ }
85
+ applyWallDelta(levelId, changedWallIds, beforeNodes, currentNodes) {
86
+ let strategy = 'indexed';
87
+ let level = this.levels.get(levelId);
88
+ if (!level) {
89
+ level = this.rebuildLevel(levelId, beforeNodes);
90
+ strategy = 'fallback';
91
+ }
92
+ for (const wallId of changedWallIds) {
93
+ const cached = level.walls.get(wallId);
94
+ const previous = beforeNodes[wallId];
95
+ const previousWall = previous?.type === 'wall' && previous.parentId === levelId ? previous : undefined;
96
+ if (!sameIndexedWall(cached, previousWall)) {
97
+ level = this.rebuildLevel(levelId, beforeNodes);
98
+ strategy = 'fallback';
99
+ break;
100
+ }
101
+ }
102
+ const beforeComponentIds = this.connectedWallIds(level, changedWallIds);
103
+ for (const wallId of changedWallIds) {
104
+ const current = currentNodes[wallId];
105
+ if (current?.type === 'wall' && current.parentId === levelId) {
106
+ this.setWall(level, current);
107
+ }
108
+ else {
109
+ this.removeWall(level, wallId);
110
+ }
111
+ }
112
+ const currentSeedIds = new Set(changedWallIds);
113
+ for (const wallId of beforeComponentIds) {
114
+ if (level.walls.has(wallId))
115
+ currentSeedIds.add(wallId);
116
+ }
117
+ const currentComponentIds = this.connectedWallIds(level, currentSeedIds);
118
+ const examinedIds = new Set([...changedWallIds, ...beforeComponentIds, ...currentComponentIds]);
119
+ const beforeRooms = level.rooms.filter((room) => roomUsesAnyWall(room, examinedIds));
120
+ const previousWalls = this.wallsFromNodes(beforeNodes, levelId, examinedIds);
121
+ const currentWalls = this.wallsFromNodes(currentNodes, levelId, examinedIds);
122
+ const currentRooms = this.options.detectRooms(currentWalls);
123
+ const allCurrentRooms = [
124
+ ...level.rooms.filter((room) => !roomUsesAnyWall(room, examinedIds)),
125
+ ...currentRooms,
126
+ ];
127
+ level.rooms = allCurrentRooms;
128
+ return {
129
+ strategy,
130
+ beforeRooms,
131
+ currentRooms,
132
+ allCurrentRooms,
133
+ previousWalls,
134
+ currentWalls,
135
+ examinedWallIds: [...examinedIds].sort(),
136
+ };
137
+ }
138
+ wallsForLevel(nodes, levelId) {
139
+ const level = nodes[levelId];
140
+ if (level?.type !== 'level')
141
+ return [];
142
+ return level.children.flatMap((id) => {
143
+ const node = nodes[id];
144
+ return node?.type === 'wall' && node.parentId === levelId ? [node] : [];
145
+ });
146
+ }
147
+ wallsFromNodes(nodes, levelId, ids) {
148
+ return [...ids].flatMap((wallId) => {
149
+ const node = nodes[wallId];
150
+ return node?.type === 'wall' && node.parentId === levelId ? [node] : [];
151
+ });
152
+ }
153
+ createLevel(walls) {
154
+ const level = {
155
+ walls: new Map(),
156
+ rooms: this.options.detectRooms(walls),
157
+ wallIdsByCell: new Map(),
158
+ cellKeysByWallId: new Map(),
159
+ };
160
+ for (const wall of walls)
161
+ this.setWall(level, wall);
162
+ return level;
163
+ }
164
+ wallBbox(wall) {
165
+ return bboxOf(this.options.sampleWall(wall));
166
+ }
167
+ cellKeysForWall(wall) {
168
+ return cellKeysForBbox(expandedBbox(this.wallBbox(wall), this.queryMargin));
169
+ }
170
+ removeWall(level, wallId) {
171
+ for (const key of level.cellKeysByWallId.get(wallId) ?? []) {
172
+ const ids = level.wallIdsByCell.get(key);
173
+ ids?.delete(wallId);
174
+ if (ids?.size === 0)
175
+ level.wallIdsByCell.delete(key);
176
+ }
177
+ level.cellKeysByWallId.delete(wallId);
178
+ level.walls.delete(wallId);
179
+ }
180
+ setWall(level, wall) {
181
+ this.removeWall(level, wall.id);
182
+ level.walls.set(wall.id, wall);
183
+ const keys = this.cellKeysForWall(wall);
184
+ level.cellKeysByWallId.set(wall.id, keys);
185
+ for (const key of keys) {
186
+ const ids = level.wallIdsByCell.get(key) ?? new Set();
187
+ ids.add(wall.id);
188
+ level.wallIdsByCell.set(key, ids);
189
+ }
190
+ }
191
+ queryWalls(level, wall) {
192
+ const ids = new Set();
193
+ for (const key of this.cellKeysForWall(wall)) {
194
+ for (const id of level.wallIdsByCell.get(key) ?? [])
195
+ ids.add(id);
196
+ }
197
+ return ids;
198
+ }
199
+ wallsTouch(left, right) {
200
+ const leftPoints = this.options.sampleWall(left);
201
+ const rightPoints = this.options.sampleWall(right);
202
+ const touchesPolyline = (points, other) => {
203
+ const endpoints = [points[0], points.at(-1)].filter((point) => Boolean(point));
204
+ for (const endpoint of endpoints) {
205
+ for (let index = 0; index < other.length - 1; index += 1) {
206
+ if (distanceToSegment(endpoint, other[index], other[index + 1]) <=
207
+ this.options.junctionTolerance) {
208
+ return true;
209
+ }
210
+ }
211
+ }
212
+ return false;
213
+ };
214
+ return touchesPolyline(leftPoints, rightPoints) || touchesPolyline(rightPoints, leftPoints);
215
+ }
216
+ connectedWallIds(level, seedIds) {
217
+ const connected = new Set();
218
+ const queue = [...seedIds];
219
+ while (queue.length > 0) {
220
+ const wallId = queue.pop();
221
+ if (connected.has(wallId))
222
+ continue;
223
+ const wall = level.walls.get(wallId);
224
+ if (!wall)
225
+ continue;
226
+ connected.add(wallId);
227
+ for (const neighborId of this.queryWalls(level, wall)) {
228
+ if (connected.has(neighborId))
229
+ continue;
230
+ const neighbor = level.walls.get(neighborId);
231
+ if (neighbor && this.wallsTouch(wall, neighbor))
232
+ queue.push(neighborId);
233
+ }
234
+ }
235
+ return connected;
236
+ }
237
+ }
@@ -16,6 +16,20 @@ export type Space = {
16
16
  boundaryFaces: SpaceBoundaryFace[];
17
17
  isExterior: boolean;
18
18
  };
19
+ export type SpaceTopologyReconcileEvent = {
20
+ levelId: string;
21
+ strategy: 'indexed' | 'fallback';
22
+ examinedWallIds: string[];
23
+ affectedBeforeRoomCount: number;
24
+ affectedCurrentRoomCount: number;
25
+ };
26
+ export type SpaceDetectionSyncOptions = {
27
+ onTopologyReconcile?: (event: SpaceTopologyReconcileEvent) => void;
28
+ };
29
+ type ExtractedRoom = {
30
+ polygon: Point2D[];
31
+ boundaryFaces: SpaceBoundaryFace[];
32
+ };
19
33
  type WallSideUpdate = {
20
34
  wallId: string;
21
35
  frontSide: 'interior' | 'exterior' | 'unknown';
@@ -31,6 +45,7 @@ export type AutoSlabSyncPlan = {
31
45
  };
32
46
  export type AutoSlabPlanningContext = {
33
47
  elevationForRoom?: (polygon: Array<[number, number]>) => number | undefined;
48
+ previousElevationForRoom?: (polygon: Array<[number, number]>) => number | undefined;
34
49
  };
35
50
  export type AutoCeilingSyncPlan = {
36
51
  create: CeilingNodeType[];
@@ -39,6 +54,10 @@ export type AutoCeilingSyncPlan = {
39
54
  data: Partial<CeilingNodeType>;
40
55
  }>;
41
56
  delete: Array<CeilingNodeType['id']>;
57
+ reparent: Array<{
58
+ id: AnyNodeId;
59
+ parentId: CeilingNodeType['id'];
60
+ }>;
42
61
  };
43
62
  export type AutoZoneSyncPlan = {
44
63
  update: Array<{
@@ -58,6 +77,8 @@ export type AutoCeilingPlanningContext = {
58
77
  */
59
78
  ceilingClampBound?: (polygon: Array<[number, number]>) => number;
60
79
  heightForRoom?: (polygon: Array<[number, number]>) => number | undefined;
80
+ previousHeightForRoom?: (polygon: Array<[number, number]>) => number | undefined;
81
+ childPosition?: (childId: AnyNodeId) => [number, number] | undefined;
61
82
  };
62
83
  /**
63
84
  * True when `wall` lies on the boundary of a room enclosed by `walls`, using the
@@ -71,9 +92,14 @@ export declare function wallClosesRoom(walls: WallNode[], wall: WallNode): boole
71
92
  export declare function resolveWallSurfaceSides(wall: Pick<WallNode, 'start' | 'end' | 'thickness' | 'frontSide' | 'backSide'>, roomPolygons: Point2D[][]): Pick<WallSideUpdate, 'frontSide' | 'backSide'>;
72
93
  export declare function planAutoZonesForLevel(spaces: readonly Space[], existingZones: readonly ZoneNodeType[]): AutoZoneSyncPlan;
73
94
  export declare function resolveAutoZonePolygon(zone: Pick<ZoneNodeType, 'autoFromWalls' | 'boundaryWallIds' | 'polygon'>, resolve: (id: AnyNodeId) => unknown): ZoneNodeType['polygon'];
74
- export declare function planAutoSlabsForLevel(roomPolygons: Point2D[][], existingSlabs: SlabNodeType[], context?: AutoSlabPlanningContext): AutoSlabSyncPlan;
75
- export declare function planAutoCeilingsForLevel(roomPolygons: Point2D[][], existingCeilings: CeilingNodeType[], context?: AutoCeilingPlanningContext): AutoCeilingSyncPlan;
95
+ export declare function planAutoSlabsForLevel(roomPolygons: Point2D[][], existingSlabs: SlabNodeType[], context?: AutoSlabPlanningContext, namingSlabs?: Array<{
96
+ name?: string;
97
+ }>): AutoSlabSyncPlan;
98
+ export declare function planAutoCeilingsForLevel(roomPolygons: Point2D[][], existingCeilings: CeilingNodeType[], context?: AutoCeilingPlanningContext, namingCeilings?: Array<{
99
+ name?: string;
100
+ }>): AutoCeilingSyncPlan;
76
101
  export declare function detectSpacesForLevel(levelId: string, walls: WallNode[]): {
102
+ rooms: ExtractedRoom[];
77
103
  roomPolygons: Point2D[][];
78
104
  spaces: Space[];
79
105
  wallUpdates: WallSideUpdate[];
@@ -84,7 +110,7 @@ export declare function pauseSpaceDetection(): void;
84
110
  export declare function resumeSpaceDetection(): void;
85
111
  /** True iff the wall-driven auto slab/ceiling sync is currently paused. */
86
112
  export declare function isSpaceDetectionPaused(): boolean;
87
- export declare function initSpaceDetectionSync(sceneStore: any, editorStore: any): () => void;
113
+ export declare function initSpaceDetectionSync(sceneStore: any, editorStore: any, options?: SpaceDetectionSyncOptions): () => void;
88
114
  export declare function wallTouchesOthers(wall: WallNode, otherWalls: WallNode[]): boolean;
89
115
  export {};
90
116
  //# sourceMappingURL=space-detection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"space-detection.d.ts","sourceRoot":"","sources":["../../src/lib/space-detection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"space-detection.d.ts","sourceRoot":"","sources":["../../src/lib/space-detection.ts"],"names":[],"mappings":"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"}