@pascal-app/core 1.1.1 → 1.1.2
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.
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +13453 -13453
- package/dist/agent-operations/batch.d.ts +4 -8
- package/dist/agent-operations/batch.d.ts.map +1 -1
- package/dist/agent-operations/batch.js +7 -19
- package/dist/agent-operations/circulation-spaces.d.ts +3431 -3431
- package/dist/agent-operations/index.d.ts +5715 -9
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +16 -5
- package/dist/agent-operations/scene-queries.d.ts +2610 -2610
- package/dist/agent-operations/types.d.ts +7 -0
- package/dist/agent-operations/types.d.ts.map +1 -1
- package/dist/agent-operations/usage-checks.js +2 -2
- package/dist/agent-operations/verify-scene.d.ts +7 -3
- package/dist/agent-operations/verify-scene.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.js +15 -7
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +238 -238
- package/dist/building/level-duplication.d.ts +1274 -1274
- package/dist/commands/structure/zone-wall-merge.d.ts +568 -568
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2610 -2610
- package/dist/lib/__fixtures__/mezzanine.d.ts +10874 -10874
- package/dist/lib/absorb-wall-separators.d.ts +635 -635
- package/dist/lib/steps.d.ts +8 -0
- package/dist/lib/steps.d.ts.map +1 -0
- package/dist/lib/steps.js +7 -0
- package/dist/spatial/usage-field/findings.d.ts +3 -0
- package/dist/spatial/usage-field/findings.d.ts.map +1 -1
- package/dist/spatial/usage-field/findings.js +17 -5
- package/dist/spatial/usage-field/measure.d.ts +3 -1
- package/dist/spatial/usage-field/measure.d.ts.map +1 -1
- package/dist/spatial/usage-field/measure.js +7 -2
- package/dist/store/actions/node-actions.d.ts +3431 -3431
- package/dist/store/scene-annotations.d.ts +1193 -1193
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +3431 -3431
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +2610 -2610
- package/dist/systems/stair/stair-opening-preview.d.ts +2610 -2610
- package/dist/utils/ensure-scene-openings.d.ts +6215 -6215
- package/dist/utils/floor-plate-migration.d.ts +635 -635
- package/dist/utils/owned-floor-opening-migration.d.ts +635 -635
- package/dist/utils/reconcile-structure-on-load.d.ts +3431 -3431
- package/package.json +1 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work in steps: each resume runs the next piece, and the last returns the result. A long
|
|
3
|
+
* computation written this way can be resumed one piece at a time by a caller that lets other work
|
|
4
|
+
* run in between; `inOneGo` runs it through.
|
|
5
|
+
*/
|
|
6
|
+
export type Steps<Result> = Generator<void, Result, void>;
|
|
7
|
+
export declare function inOneGo<Result>(steps: Steps<Result>): Result;
|
|
8
|
+
//# sourceMappingURL=steps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/lib/steps.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;AAEzD,wBAAgB,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAK5D"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type CodeProfileId, type ThresholdSource } from '../../building/code-profile.js';
|
|
2
|
+
import { type Steps } from '../../lib/steps.js';
|
|
2
3
|
import { type MeasureOptions } from './measure.js';
|
|
3
4
|
import type { Nodes } from './walls.js';
|
|
4
5
|
/** Clear width of a path in a house: 0,90 m, the arrêté du 24 décembre 2015 art. 11 II (36 in is the IRC hall). */
|
|
@@ -79,4 +80,6 @@ export type UsageOptions = MeasureOptions & {
|
|
|
79
80
|
* not a compliance check.
|
|
80
81
|
*/
|
|
81
82
|
export declare function usageIssues(nodes: Nodes, options?: UsageOptions): UsageIssue[];
|
|
83
|
+
/** `usageIssues`, a step for each measurement and for each floor of the circulation one. */
|
|
84
|
+
export declare function usageIssueSteps(nodes: Nodes, options?: UsageOptions): Steps<UsageIssue[]>;
|
|
82
85
|
//# sourceMappingURL=findings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/findings.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EAErB,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/findings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { USAGE_INDICATORS, } from '../../building/code-profile.js';
|
|
2
|
+
import { inOneGo } from '../../lib/steps.js';
|
|
2
3
|
import { bedIssues } from './beds.js';
|
|
3
4
|
import { blockedOpeningIssues } from './blocked.js';
|
|
4
5
|
import { clashIssues } from './clash.js';
|
|
@@ -6,7 +7,7 @@ import { doorOverStairIssues } from './door-stairs.js';
|
|
|
6
7
|
import { entryIssues } from './entry-way.js';
|
|
7
8
|
import { fixtureClearanceIssues } from './fixtures.js';
|
|
8
9
|
import { m, nameOf, quote, unique } from './labels.js';
|
|
9
|
-
import {
|
|
10
|
+
import { measureUsageSteps, } from './measure.js';
|
|
10
11
|
import { usageShapes } from './shapes.js';
|
|
11
12
|
import { doorSwingIssues } from './swings.js';
|
|
12
13
|
/** Clear width of a path in a house: 0,90 m, the arrêté du 24 décembre 2015 art. 11 II (36 in is the IRC hall). */
|
|
@@ -203,8 +204,8 @@ function pocketIssue(nodes, room, from) {
|
|
|
203
204
|
};
|
|
204
205
|
}
|
|
205
206
|
/** The passages, turning circles and pockets of every group of rooms, measured on one clearance field. */
|
|
206
|
-
function circulationIssues(nodes, shapes, options) {
|
|
207
|
-
const measure =
|
|
207
|
+
function* circulationIssues(nodes, shapes, options) {
|
|
208
|
+
const measure = yield* measureUsageSteps(nodes, shapes, options);
|
|
208
209
|
const issues = [];
|
|
209
210
|
for (const group of measure.groups) {
|
|
210
211
|
const from = group.source.kind === 'door' ? 'the entrance' : 'the stair arrival';
|
|
@@ -245,7 +246,8 @@ function circulationIssues(nodes, shapes, options) {
|
|
|
245
246
|
/**
|
|
246
247
|
* Each measurement with the finding types it gives, in the order their findings are listed. On a
|
|
247
248
|
* building of a few hundred rooms the circulation measurement takes seconds and the others a
|
|
248
|
-
* fraction of one, so a question about some types takes the measurements that give them alone
|
|
249
|
+
* fraction of one, so a question about some types takes the measurements that give them alone,
|
|
250
|
+
* and the circulation measurement is taken in steps.
|
|
249
251
|
*/
|
|
250
252
|
const MEASUREMENTS = [
|
|
251
253
|
{
|
|
@@ -273,6 +275,10 @@ export const USAGE_TYPES = new Set(MEASUREMENTS.flatMap((measurement) => measure
|
|
|
273
275
|
* not a compliance check.
|
|
274
276
|
*/
|
|
275
277
|
export function usageIssues(nodes, options = {}) {
|
|
278
|
+
return inOneGo(usageIssueSteps(nodes, options));
|
|
279
|
+
}
|
|
280
|
+
/** `usageIssues`, a step for each measurement and for each floor of the circulation one. */
|
|
281
|
+
export function* usageIssueSteps(nodes, options = {}) {
|
|
276
282
|
const { types, ...measure } = options;
|
|
277
283
|
const asked = types
|
|
278
284
|
? MEASUREMENTS.filter((measurement) => measurement.types.some((type) => types.has(type)))
|
|
@@ -280,5 +286,11 @@ export function usageIssues(nodes, options = {}) {
|
|
|
280
286
|
if (asked.length === 0)
|
|
281
287
|
return [];
|
|
282
288
|
const shapes = usageShapes(nodes);
|
|
283
|
-
|
|
289
|
+
const issues = [];
|
|
290
|
+
for (const measurement of asked) {
|
|
291
|
+
const found = measurement.run(nodes, shapes, measure);
|
|
292
|
+
issues.push(...(Array.isArray(found) ? found : yield* found));
|
|
293
|
+
yield;
|
|
294
|
+
}
|
|
295
|
+
return issues;
|
|
284
296
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Steps } from '../../lib/steps.js';
|
|
1
2
|
import { type Grid } from './field.js';
|
|
2
3
|
import { type FloorGroup } from './level-field.js';
|
|
3
4
|
import type { Prism, Ring, UsageShapes } from './types.js';
|
|
@@ -318,7 +319,8 @@ export declare function prepareGroup(nodes: Nodes, shapes: UsageShapes, group: F
|
|
|
318
319
|
* shapes `usageShapes` read. The floor is a cell grid of the clearance to the nearest obstacle in a
|
|
319
320
|
* band a body stands in; a passage is the widest path from the entrance to the room, its pinch
|
|
320
321
|
* re-solved on a finer grid to the millimetre; a pocket is floor where a 0.60 m unit fits but
|
|
321
|
-
* cannot get out.
|
|
322
|
+
* cannot get out. One floor a step: a building of many floors takes seconds.
|
|
322
323
|
*/
|
|
324
|
+
export declare function measureUsageSteps(nodes: Nodes, shapes: UsageShapes, options?: MeasureOptions): Steps<UsageMeasure>;
|
|
323
325
|
export declare function measureUsage(nodes: Nodes, shapes: UsageShapes, options?: MeasureOptions): UsageMeasure;
|
|
324
326
|
//# sourceMappingURL=measure.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/measure.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/measure.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { floorsOf } from '../../agent-operations/circulation-spaces.js';
|
|
|
3
3
|
import { isFloorUnderlay } from '../../agent-operations/furniture-kind.js';
|
|
4
4
|
import { area, difference, union } from '../../lib/polygon-boolean.js';
|
|
5
5
|
import { polygonInteriorPoint } from '../../lib/polygon-label.js';
|
|
6
|
+
import { inOneGo } from '../../lib/steps.js';
|
|
6
7
|
import { resolveStairWalkingSurfaces } from '../../systems/stair/stair-clearance.js';
|
|
7
8
|
import { cellX, cellZ } from './field.js';
|
|
8
9
|
import { BODY_BAND, buildField, FEET_BAND, floorGroups, inRegion, maskOf, } from './level-field.js';
|
|
@@ -248,9 +249,9 @@ export function prepareGroup(nodes, shapes, group, cell, underlay) {
|
|
|
248
249
|
* shapes `usageShapes` read. The floor is a cell grid of the clearance to the nearest obstacle in a
|
|
249
250
|
* band a body stands in; a passage is the widest path from the entrance to the room, its pinch
|
|
250
251
|
* re-solved on a finer grid to the millimetre; a pocket is floor where a 0.60 m unit fits but
|
|
251
|
-
* cannot get out.
|
|
252
|
+
* cannot get out. One floor a step: a building of many floors takes seconds.
|
|
252
253
|
*/
|
|
253
|
-
export function
|
|
254
|
+
export function* measureUsageSteps(nodes, shapes, options = {}) {
|
|
254
255
|
const cell = options.cell ?? 0.02;
|
|
255
256
|
const floors = floorsOf(nodes).floors;
|
|
256
257
|
const exterior = exteriorDoors(nodes);
|
|
@@ -453,6 +454,10 @@ export function measureUsage(nodes, shapes, options = {}) {
|
|
|
453
454
|
};
|
|
454
455
|
});
|
|
455
456
|
groups.push({ levelId: group.levelId, y: group.y, source, rooms });
|
|
457
|
+
yield;
|
|
456
458
|
}
|
|
457
459
|
return { groups, entranceDoorId: entrance };
|
|
458
460
|
}
|
|
461
|
+
export function measureUsage(nodes, shapes, options = {}) {
|
|
462
|
+
return inOneGo(measureUsageSteps(nodes, shapes, options));
|
|
463
|
+
}
|