@pascal-app/core 0.5.1 → 0.7.0
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/events/bus.d.ts +74 -4
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/events/bus.js +1 -1
- package/dist/hooks/scene-registry/scene-registry.d.ts +2 -0
- package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
- package/dist/hooks/scene-registry/scene-registry.js +2 -0
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +164 -6
- package/dist/hooks/spatial-grid/spatial-grid.d.ts +2 -0
- package/dist/hooks/spatial-grid/spatial-grid.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid.js +43 -20
- package/dist/index.d.ts +9 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -11
- package/dist/lib/door-operation.d.ts +7 -0
- package/dist/lib/door-operation.d.ts.map +1 -0
- package/dist/lib/door-operation.js +25 -0
- package/dist/lib/polygon-geometry.d.ts +3 -0
- package/dist/lib/polygon-geometry.d.ts.map +1 -0
- package/dist/lib/polygon-geometry.js +90 -0
- package/dist/lib/slab-polygon.d.ts +3 -0
- package/dist/lib/slab-polygon.d.ts.map +1 -0
- package/dist/lib/slab-polygon.js +58 -0
- package/dist/lib/space-detection.d.ts +10 -17
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +666 -453
- package/dist/material-library.d.ts +20 -0
- package/dist/material-library.d.ts.map +1 -0
- package/dist/material-library.js +580 -0
- package/dist/schema/asset-url.d.ts +34 -0
- package/dist/schema/asset-url.d.ts.map +1 -0
- package/dist/schema/asset-url.js +79 -0
- package/dist/schema/asset-url.test.d.ts +2 -0
- package/dist/schema/asset-url.test.d.ts.map +1 -0
- package/dist/schema/asset-url.test.js +138 -0
- package/dist/schema/index.d.ts +14 -7
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +10 -7
- package/dist/schema/material.d.ts +112 -2
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +55 -1
- package/dist/schema/nodes/ceiling.d.ts +11 -1
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +6 -0
- package/dist/schema/nodes/column.d.ts +520 -0
- package/dist/schema/nodes/column.d.ts.map +1 -0
- package/dist/schema/nodes/column.js +385 -0
- package/dist/schema/nodes/door.d.ts +74 -1
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +39 -2
- package/dist/schema/nodes/fence.d.ts +34 -0
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/fence.js +5 -0
- package/dist/schema/nodes/guide.d.ts +17 -0
- package/dist/schema/nodes/guide.d.ts.map +1 -1
- package/dist/schema/nodes/guide.js +11 -1
- package/dist/schema/nodes/item.d.ts +10 -2
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +18 -1
- package/dist/schema/nodes/level.d.ts +1 -1
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/level.js +6 -0
- package/dist/schema/nodes/roof-segment.d.ts +3 -1
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +1 -0
- package/dist/schema/nodes/roof.d.ts +108 -0
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +58 -2
- package/dist/schema/nodes/scan.d.ts.map +1 -1
- package/dist/schema/nodes/scan.js +2 -1
- package/dist/schema/nodes/site.d.ts +2 -1
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/slab.d.ts +11 -1
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +7 -0
- package/dist/schema/nodes/spawn.d.ts +24 -0
- package/dist/schema/nodes/spawn.d.ts.map +1 -0
- package/dist/schema/nodes/spawn.js +8 -0
- package/dist/schema/nodes/stair-segment.d.ts +3 -1
- package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
- package/dist/schema/nodes/stair-segment.js +1 -0
- package/dist/schema/nodes/stair.d.ts +122 -2
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +72 -2
- package/dist/schema/nodes/surface-hole-metadata.d.ts +10 -0
- package/dist/schema/nodes/surface-hole-metadata.d.ts.map +1 -0
- package/dist/schema/nodes/surface-hole-metadata.js +5 -0
- package/dist/schema/nodes/wall.d.ts +87 -1
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +45 -4
- package/dist/schema/nodes/window.d.ts +57 -1
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +29 -0
- package/dist/schema/types.d.ts +653 -12
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +4 -0
- package/dist/store/actions/node-actions.d.ts +1 -1
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +181 -5
- package/dist/store/history-control.d.ts +14 -0
- package/dist/store/history-control.d.ts.map +1 -0
- package/dist/store/history-control.js +22 -0
- package/dist/store/use-interactive.d.ts +43 -0
- package/dist/store/use-interactive.d.ts.map +1 -1
- package/dist/store/use-interactive.js +66 -0
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +307 -3
- package/dist/systems/ceiling/ceiling-system.d.ts.map +1 -1
- package/dist/systems/ceiling/ceiling-system.js +7 -0
- package/dist/systems/fence/fence-system.d.ts.map +1 -1
- package/dist/systems/fence/fence-system.js +106 -39
- package/dist/systems/roof/roof-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-system.js +31 -1
- package/dist/systems/slab/slab-system.d.ts.map +1 -1
- package/dist/systems/slab/slab-system.js +45 -8
- package/dist/systems/stair/stair-opening-sync.d.ts +6 -0
- package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -0
- package/dist/systems/stair/stair-opening-sync.js +576 -0
- package/dist/systems/stair/stair-opening-sync.test.d.ts +2 -0
- package/dist/systems/stair/stair-opening-sync.test.d.ts.map +1 -0
- package/dist/systems/stair/stair-opening-sync.test.js +65 -0
- package/dist/systems/stair/stair-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-system.js +119 -2
- package/dist/systems/wall/wall-curve.d.ts +43 -0
- package/dist/systems/wall/wall-curve.d.ts.map +1 -0
- package/dist/systems/wall/wall-curve.js +176 -0
- package/dist/systems/wall/wall-footprint.d.ts.map +1 -1
- package/dist/systems/wall/wall-footprint.js +16 -2
- package/dist/systems/wall/wall-mitering.d.ts +7 -0
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +76 -3
- package/dist/systems/wall/wall-system.d.ts.map +1 -1
- package/dist/systems/wall/wall-system.js +202 -2
- package/package.json +33 -5
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { AssetUrl } from '../asset-url';
|
|
2
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
|
+
export const GuideScaleReference = z.object({
|
|
5
|
+
start: z.tuple([z.number(), z.number()]),
|
|
6
|
+
end: z.tuple([z.number(), z.number()]),
|
|
7
|
+
realLengthMeters: z.number().positive(),
|
|
8
|
+
measuredLengthUnits: z.number().positive(),
|
|
9
|
+
metersPerUnit: z.number().positive(),
|
|
10
|
+
label: z.string(),
|
|
11
|
+
});
|
|
3
12
|
export const GuideNode = BaseNode.extend({
|
|
4
13
|
id: objectId('guide'),
|
|
5
14
|
type: nodeType('guide'),
|
|
6
|
-
url:
|
|
15
|
+
url: AssetUrl,
|
|
7
16
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
8
17
|
rotation: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
9
18
|
scale: z.number().default(1),
|
|
10
19
|
opacity: z.number().min(0).max(100).default(50),
|
|
20
|
+
scaleReference: GuideScaleReference.nullable().default(null),
|
|
11
21
|
});
|
|
@@ -143,12 +143,13 @@ declare const assetSchema: z.ZodObject<{
|
|
|
143
143
|
category: z.ZodString;
|
|
144
144
|
name: z.ZodString;
|
|
145
145
|
thumbnail: z.ZodString;
|
|
146
|
+
floorPlanUrl: z.ZodOptional<z.ZodString>;
|
|
146
147
|
src: z.ZodString;
|
|
147
148
|
dimensions: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
148
149
|
attachTo: z.ZodOptional<z.ZodEnum<{
|
|
149
150
|
wall: "wall";
|
|
150
|
-
"wall-side": "wall-side";
|
|
151
151
|
ceiling: "ceiling";
|
|
152
|
+
"wall-side": "wall-side";
|
|
152
153
|
}>>;
|
|
153
154
|
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
154
155
|
offset: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
@@ -238,12 +239,13 @@ export declare const ItemNode: z.ZodObject<{
|
|
|
238
239
|
category: z.ZodString;
|
|
239
240
|
name: z.ZodString;
|
|
240
241
|
thumbnail: z.ZodString;
|
|
242
|
+
floorPlanUrl: z.ZodOptional<z.ZodString>;
|
|
241
243
|
src: z.ZodString;
|
|
242
244
|
dimensions: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
243
245
|
attachTo: z.ZodOptional<z.ZodEnum<{
|
|
244
246
|
wall: "wall";
|
|
245
|
-
"wall-side": "wall-side";
|
|
246
247
|
ceiling: "ceiling";
|
|
248
|
+
"wall-side": "wall-side";
|
|
247
249
|
}>>;
|
|
248
250
|
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
249
251
|
offset: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
@@ -299,6 +301,12 @@ export declare const ItemNode: z.ZodObject<{
|
|
|
299
301
|
}, z.core.$strip>;
|
|
300
302
|
}, z.core.$strip>;
|
|
301
303
|
export type ItemNode = z.infer<typeof ItemNode>;
|
|
304
|
+
export declare const LOW_PROFILE_ITEM_SURFACE_MAX_HEIGHT = 0.1;
|
|
305
|
+
/**
|
|
306
|
+
* Low, floor-resting items like rugs and parking mats can receive items visually,
|
|
307
|
+
* but should not become item parents or block normal floor placement.
|
|
308
|
+
*/
|
|
309
|
+
export declare function isLowProfileItemSurface(item: ItemNode): boolean;
|
|
302
310
|
/**
|
|
303
311
|
* Returns the effective world-space dimensions of an item after applying its scale.
|
|
304
312
|
* Use this everywhere item.asset.dimensions is used for spatial calculations.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB,QAAA,MAAM,mBAAmB;;;;iBAIvB,CAAA;AAEF,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;iBASvB,CAAA;AAEF,QAAA,MAAM,wBAAwB;;;;;;;;;;iBAO5B,CAAA;AAEF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAIjB,CAAA;AAIF,QAAA,MAAM,qBAAqB;;;;;;;iBAOzB,CAAA;AAEF,QAAA,MAAM,iBAAiB;;;;;;iBAMrB,CAAA;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;2BAA2E,CAAA;AAI7F,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGrB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AACjD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsBf,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AACpD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAE/C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6BnB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE/C,eAAO,MAAM,mCAAmC,MAAM,CAAA;AAEtD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAM/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAI5E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import dedent from 'dedent';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
+
import { AssetUrl } from '../asset-url';
|
|
3
4
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
5
|
// --- Control descriptors ---
|
|
5
6
|
const toggleControlSchema = z.object({
|
|
@@ -57,7 +58,10 @@ const assetSchema = z.object({
|
|
|
57
58
|
category: z.string(),
|
|
58
59
|
name: z.string(),
|
|
59
60
|
thumbnail: z.string(),
|
|
60
|
-
|
|
61
|
+
// Optional top-down 2D image shown inside the item's footprint on the
|
|
62
|
+
// floor plan. When present, replaces the default diagonal-cross marker.
|
|
63
|
+
floorPlanUrl: z.string().optional(),
|
|
64
|
+
src: AssetUrl,
|
|
61
65
|
dimensions: z.tuple([z.number(), z.number(), z.number()]).default([1, 1, 1]), // [w, h, d]
|
|
62
66
|
attachTo: z.enum(['wall', 'wall-side', 'ceiling']).optional(),
|
|
63
67
|
tags: z.array(z.string()).optional(),
|
|
@@ -99,6 +103,19 @@ export const ItemNode = BaseNode.extend({
|
|
|
99
103
|
- scale: corrective scale for the model
|
|
100
104
|
- tags: tags associated with the item
|
|
101
105
|
`);
|
|
106
|
+
export const LOW_PROFILE_ITEM_SURFACE_MAX_HEIGHT = 0.1;
|
|
107
|
+
/**
|
|
108
|
+
* Low, floor-resting items like rugs and parking mats can receive items visually,
|
|
109
|
+
* but should not become item parents or block normal floor placement.
|
|
110
|
+
*/
|
|
111
|
+
export function isLowProfileItemSurface(item) {
|
|
112
|
+
if (item.asset.attachTo)
|
|
113
|
+
return false;
|
|
114
|
+
const surfaceHeight = item.asset.surface
|
|
115
|
+
? item.asset.surface.height * item.scale[1]
|
|
116
|
+
: getScaledDimensions(item)[1];
|
|
117
|
+
return surfaceHeight <= LOW_PROFILE_ITEM_SURFACE_MAX_HEIGHT;
|
|
118
|
+
}
|
|
102
119
|
/**
|
|
103
120
|
* Returns the effective world-space dimensions of an item after applying its scale.
|
|
104
121
|
* Use this everywhere item.asset.dimensions is used for spatial calculations.
|
|
@@ -17,7 +17,7 @@ export declare const LevelNode: z.ZodObject<{
|
|
|
17
17
|
metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
|
|
18
18
|
id: z.ZodDefault<z.ZodTemplateLiteral<`level_${string}`>>;
|
|
19
19
|
type: z.ZodDefault<z.ZodLiteral<"level">>;
|
|
20
|
-
children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`wall_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`fence_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`zone_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`slab_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`ceiling_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`roof_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`stair_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`scan_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`guide_${string}`>>]>>>;
|
|
20
|
+
children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`wall_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`fence_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`column_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`zone_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`slab_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`ceiling_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`roof_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`stair_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`scan_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`guide_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`spawn_${string}`>>]>>>;
|
|
21
21
|
level: z.ZodDefault<z.ZodNumber>;
|
|
22
22
|
}, z.core.$strip>;
|
|
23
23
|
export type LevelNode = z.infer<typeof LevelNode>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/level.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/level.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAevB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;iBA6BrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
|
|
@@ -2,11 +2,14 @@ import dedent from 'dedent';
|
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
4
|
import { CeilingNode } from './ceiling';
|
|
5
|
+
import { ColumnNode } from './column';
|
|
5
6
|
import { FenceNode } from './fence';
|
|
6
7
|
import { GuideNode } from './guide';
|
|
8
|
+
import { ItemNode } from './item';
|
|
7
9
|
import { RoofNode } from './roof';
|
|
8
10
|
import { ScanNode } from './scan';
|
|
9
11
|
import { SlabNode } from './slab';
|
|
12
|
+
import { SpawnNode } from './spawn';
|
|
10
13
|
import { StairNode } from './stair';
|
|
11
14
|
import { WallNode } from './wall';
|
|
12
15
|
import { ZoneNode } from './zone';
|
|
@@ -17,6 +20,8 @@ export const LevelNode = BaseNode.extend({
|
|
|
17
20
|
.array(z.union([
|
|
18
21
|
WallNode.shape.id,
|
|
19
22
|
FenceNode.shape.id,
|
|
23
|
+
ColumnNode.shape.id,
|
|
24
|
+
ItemNode.shape.id,
|
|
20
25
|
ZoneNode.shape.id,
|
|
21
26
|
SlabNode.shape.id,
|
|
22
27
|
CeilingNode.shape.id,
|
|
@@ -24,6 +29,7 @@ export const LevelNode = BaseNode.extend({
|
|
|
24
29
|
StairNode.shape.id,
|
|
25
30
|
ScanNode.shape.id,
|
|
26
31
|
GuideNode.shape.id,
|
|
32
|
+
SpawnNode.shape.id,
|
|
27
33
|
]))
|
|
28
34
|
.default([]),
|
|
29
35
|
// Specific props
|
|
@@ -28,8 +28,8 @@ export declare const RoofSegmentNode: z.ZodObject<{
|
|
|
28
28
|
id: z.ZodDefault<z.ZodTemplateLiteral<`rseg_${string}`>>;
|
|
29
29
|
type: z.ZodDefault<z.ZodLiteral<"roof-segment">>;
|
|
30
30
|
material: z.ZodOptional<z.ZodObject<{
|
|
31
|
+
id: z.ZodOptional<z.ZodString>;
|
|
31
32
|
preset: z.ZodOptional<z.ZodEnum<{
|
|
32
|
-
custom: "custom";
|
|
33
33
|
white: "white";
|
|
34
34
|
brick: "brick";
|
|
35
35
|
concrete: "concrete";
|
|
@@ -39,6 +39,7 @@ export declare const RoofSegmentNode: z.ZodObject<{
|
|
|
39
39
|
plaster: "plaster";
|
|
40
40
|
tile: "tile";
|
|
41
41
|
marble: "marble";
|
|
42
|
+
custom: "custom";
|
|
42
43
|
}>>;
|
|
43
44
|
properties: z.ZodOptional<z.ZodObject<{
|
|
44
45
|
color: z.ZodDefault<z.ZodString>;
|
|
@@ -58,6 +59,7 @@ export declare const RoofSegmentNode: z.ZodObject<{
|
|
|
58
59
|
scale: z.ZodOptional<z.ZodNumber>;
|
|
59
60
|
}, z.core.$strip>>;
|
|
60
61
|
}, z.core.$strip>>;
|
|
62
|
+
materialPreset: z.ZodOptional<z.ZodString>;
|
|
61
63
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
62
64
|
rotation: z.ZodDefault<z.ZodNumber>;
|
|
63
65
|
roofType: z.ZodDefault<z.ZodEnum<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roof-segment.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof-segment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,QAAQ;;;;;;;;EAA0E,CAAA;AAE/F,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE/C,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"roof-segment.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof-segment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,QAAQ;;;;;;;;EAA0E,CAAA;AAE/F,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE/C,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkC3B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA"}
|
|
@@ -7,6 +7,7 @@ export const RoofSegmentNode = BaseNode.extend({
|
|
|
7
7
|
id: objectId('rseg'),
|
|
8
8
|
type: nodeType('roof-segment'),
|
|
9
9
|
material: MaterialSchema.optional(),
|
|
10
|
+
materialPreset: z.string().optional(),
|
|
10
11
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
11
12
|
// Rotation around Y axis in radians
|
|
12
13
|
rotation: z.number().default(0),
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { type MaterialSchema } from '../material';
|
|
3
|
+
export type RoofSurfaceMaterialRole = 'top' | 'edge' | 'wall';
|
|
4
|
+
export type RoofSurfaceMaterialSpec = {
|
|
5
|
+
material?: MaterialSchema;
|
|
6
|
+
materialPreset?: string;
|
|
7
|
+
};
|
|
2
8
|
export declare const RoofNode: z.ZodObject<{
|
|
3
9
|
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
4
10
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -18,8 +24,107 @@ export declare const RoofNode: z.ZodObject<{
|
|
|
18
24
|
id: z.ZodDefault<z.ZodTemplateLiteral<`roof_${string}`>>;
|
|
19
25
|
type: z.ZodDefault<z.ZodLiteral<"roof">>;
|
|
20
26
|
material: z.ZodOptional<z.ZodObject<{
|
|
27
|
+
id: z.ZodOptional<z.ZodString>;
|
|
21
28
|
preset: z.ZodOptional<z.ZodEnum<{
|
|
29
|
+
white: "white";
|
|
30
|
+
brick: "brick";
|
|
31
|
+
concrete: "concrete";
|
|
32
|
+
wood: "wood";
|
|
33
|
+
glass: "glass";
|
|
34
|
+
metal: "metal";
|
|
35
|
+
plaster: "plaster";
|
|
36
|
+
tile: "tile";
|
|
37
|
+
marble: "marble";
|
|
38
|
+
custom: "custom";
|
|
39
|
+
}>>;
|
|
40
|
+
properties: z.ZodOptional<z.ZodObject<{
|
|
41
|
+
color: z.ZodDefault<z.ZodString>;
|
|
42
|
+
roughness: z.ZodDefault<z.ZodNumber>;
|
|
43
|
+
metalness: z.ZodDefault<z.ZodNumber>;
|
|
44
|
+
opacity: z.ZodDefault<z.ZodNumber>;
|
|
45
|
+
transparent: z.ZodDefault<z.ZodBoolean>;
|
|
46
|
+
side: z.ZodDefault<z.ZodEnum<{
|
|
47
|
+
front: "front";
|
|
48
|
+
back: "back";
|
|
49
|
+
double: "double";
|
|
50
|
+
}>>;
|
|
51
|
+
}, z.core.$strip>>;
|
|
52
|
+
texture: z.ZodOptional<z.ZodObject<{
|
|
53
|
+
url: z.ZodString;
|
|
54
|
+
repeat: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
55
|
+
scale: z.ZodOptional<z.ZodNumber>;
|
|
56
|
+
}, z.core.$strip>>;
|
|
57
|
+
}, z.core.$strip>>;
|
|
58
|
+
materialPreset: z.ZodOptional<z.ZodString>;
|
|
59
|
+
topMaterial: z.ZodOptional<z.ZodObject<{
|
|
60
|
+
id: z.ZodOptional<z.ZodString>;
|
|
61
|
+
preset: z.ZodOptional<z.ZodEnum<{
|
|
62
|
+
white: "white";
|
|
63
|
+
brick: "brick";
|
|
64
|
+
concrete: "concrete";
|
|
65
|
+
wood: "wood";
|
|
66
|
+
glass: "glass";
|
|
67
|
+
metal: "metal";
|
|
68
|
+
plaster: "plaster";
|
|
69
|
+
tile: "tile";
|
|
70
|
+
marble: "marble";
|
|
71
|
+
custom: "custom";
|
|
72
|
+
}>>;
|
|
73
|
+
properties: z.ZodOptional<z.ZodObject<{
|
|
74
|
+
color: z.ZodDefault<z.ZodString>;
|
|
75
|
+
roughness: z.ZodDefault<z.ZodNumber>;
|
|
76
|
+
metalness: z.ZodDefault<z.ZodNumber>;
|
|
77
|
+
opacity: z.ZodDefault<z.ZodNumber>;
|
|
78
|
+
transparent: z.ZodDefault<z.ZodBoolean>;
|
|
79
|
+
side: z.ZodDefault<z.ZodEnum<{
|
|
80
|
+
front: "front";
|
|
81
|
+
back: "back";
|
|
82
|
+
double: "double";
|
|
83
|
+
}>>;
|
|
84
|
+
}, z.core.$strip>>;
|
|
85
|
+
texture: z.ZodOptional<z.ZodObject<{
|
|
86
|
+
url: z.ZodString;
|
|
87
|
+
repeat: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
88
|
+
scale: z.ZodOptional<z.ZodNumber>;
|
|
89
|
+
}, z.core.$strip>>;
|
|
90
|
+
}, z.core.$strip>>;
|
|
91
|
+
topMaterialPreset: z.ZodOptional<z.ZodString>;
|
|
92
|
+
edgeMaterial: z.ZodOptional<z.ZodObject<{
|
|
93
|
+
id: z.ZodOptional<z.ZodString>;
|
|
94
|
+
preset: z.ZodOptional<z.ZodEnum<{
|
|
95
|
+
white: "white";
|
|
96
|
+
brick: "brick";
|
|
97
|
+
concrete: "concrete";
|
|
98
|
+
wood: "wood";
|
|
99
|
+
glass: "glass";
|
|
100
|
+
metal: "metal";
|
|
101
|
+
plaster: "plaster";
|
|
102
|
+
tile: "tile";
|
|
103
|
+
marble: "marble";
|
|
22
104
|
custom: "custom";
|
|
105
|
+
}>>;
|
|
106
|
+
properties: z.ZodOptional<z.ZodObject<{
|
|
107
|
+
color: z.ZodDefault<z.ZodString>;
|
|
108
|
+
roughness: z.ZodDefault<z.ZodNumber>;
|
|
109
|
+
metalness: z.ZodDefault<z.ZodNumber>;
|
|
110
|
+
opacity: z.ZodDefault<z.ZodNumber>;
|
|
111
|
+
transparent: z.ZodDefault<z.ZodBoolean>;
|
|
112
|
+
side: z.ZodDefault<z.ZodEnum<{
|
|
113
|
+
front: "front";
|
|
114
|
+
back: "back";
|
|
115
|
+
double: "double";
|
|
116
|
+
}>>;
|
|
117
|
+
}, z.core.$strip>>;
|
|
118
|
+
texture: z.ZodOptional<z.ZodObject<{
|
|
119
|
+
url: z.ZodString;
|
|
120
|
+
repeat: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
121
|
+
scale: z.ZodOptional<z.ZodNumber>;
|
|
122
|
+
}, z.core.$strip>>;
|
|
123
|
+
}, z.core.$strip>>;
|
|
124
|
+
edgeMaterialPreset: z.ZodOptional<z.ZodString>;
|
|
125
|
+
wallMaterial: z.ZodOptional<z.ZodObject<{
|
|
126
|
+
id: z.ZodOptional<z.ZodString>;
|
|
127
|
+
preset: z.ZodOptional<z.ZodEnum<{
|
|
23
128
|
white: "white";
|
|
24
129
|
brick: "brick";
|
|
25
130
|
concrete: "concrete";
|
|
@@ -29,6 +134,7 @@ export declare const RoofNode: z.ZodObject<{
|
|
|
29
134
|
plaster: "plaster";
|
|
30
135
|
tile: "tile";
|
|
31
136
|
marble: "marble";
|
|
137
|
+
custom: "custom";
|
|
32
138
|
}>>;
|
|
33
139
|
properties: z.ZodOptional<z.ZodObject<{
|
|
34
140
|
color: z.ZodDefault<z.ZodString>;
|
|
@@ -48,9 +154,11 @@ export declare const RoofNode: z.ZodObject<{
|
|
|
48
154
|
scale: z.ZodOptional<z.ZodNumber>;
|
|
49
155
|
}, z.core.$strip>>;
|
|
50
156
|
}, z.core.$strip>>;
|
|
157
|
+
wallMaterialPreset: z.ZodOptional<z.ZodString>;
|
|
51
158
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
52
159
|
rotation: z.ZodDefault<z.ZodNumber>;
|
|
53
160
|
children: z.ZodDefault<z.ZodArray<z.ZodDefault<z.ZodTemplateLiteral<`rseg_${string}`>>>>;
|
|
54
161
|
}, z.core.$strip>;
|
|
55
162
|
export type RoofNode = z.infer<typeof RoofNode>;
|
|
163
|
+
export declare function getEffectiveRoofSurfaceMaterial(node: RoofNode, role: RoofSurfaceMaterialRole): RoofSurfaceMaterialSpec;
|
|
56
164
|
//# sourceMappingURL=roof.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roof.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"roof.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,KAAK,cAAc,EAA0C,MAAM,aAAa,CAAA;AAGzF,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAC7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAS/C,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,uBAAuB,GAC5B,uBAAuB,CAmDzB"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import dedent from 'dedent';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
|
-
import { MaterialSchema } from '../material';
|
|
4
|
+
import { MaterialSchema as MaterialSchemaSchema } from '../material';
|
|
5
5
|
import { RoofSegmentNode } from './roof-segment';
|
|
6
6
|
export const RoofNode = BaseNode.extend({
|
|
7
7
|
id: objectId('roof'),
|
|
8
8
|
type: nodeType('roof'),
|
|
9
|
-
material:
|
|
9
|
+
material: MaterialSchemaSchema.optional(),
|
|
10
|
+
materialPreset: z.string().optional(),
|
|
11
|
+
topMaterial: MaterialSchemaSchema.optional(),
|
|
12
|
+
topMaterialPreset: z.string().optional(),
|
|
13
|
+
edgeMaterial: MaterialSchemaSchema.optional(),
|
|
14
|
+
edgeMaterialPreset: z.string().optional(),
|
|
15
|
+
wallMaterial: MaterialSchemaSchema.optional(),
|
|
16
|
+
wallMaterialPreset: z.string().optional(),
|
|
10
17
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
11
18
|
// Rotation around Y axis in radians
|
|
12
19
|
rotation: z.number().default(0),
|
|
@@ -20,3 +27,52 @@ export const RoofNode = BaseNode.extend({
|
|
|
20
27
|
- rotation: rotation around Y axis
|
|
21
28
|
- children: array of RoofSegmentNode IDs
|
|
22
29
|
`);
|
|
30
|
+
function getLegacyRoofSurfaceMaterial(node) {
|
|
31
|
+
return {
|
|
32
|
+
material: node.material,
|
|
33
|
+
materialPreset: node.materialPreset,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function getEffectiveRoofSurfaceMaterial(node, role) {
|
|
37
|
+
if (role === 'top') {
|
|
38
|
+
if (node.topMaterial !== undefined || typeof node.topMaterialPreset === 'string') {
|
|
39
|
+
return {
|
|
40
|
+
material: node.topMaterial,
|
|
41
|
+
materialPreset: typeof node.topMaterialPreset === 'string' ? node.topMaterialPreset : undefined,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (role === 'edge') {
|
|
46
|
+
if (node.edgeMaterial !== undefined || typeof node.edgeMaterialPreset === 'string') {
|
|
47
|
+
return {
|
|
48
|
+
material: node.edgeMaterial,
|
|
49
|
+
materialPreset: typeof node.edgeMaterialPreset === 'string' ? node.edgeMaterialPreset : undefined,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (role === 'wall') {
|
|
54
|
+
if (node.wallMaterial !== undefined || typeof node.wallMaterialPreset === 'string') {
|
|
55
|
+
return {
|
|
56
|
+
material: node.wallMaterial,
|
|
57
|
+
materialPreset: typeof node.wallMaterialPreset === 'string' ? node.wallMaterialPreset : undefined,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (role === 'edge') {
|
|
62
|
+
if (node.wallMaterial !== undefined || typeof node.wallMaterialPreset === 'string') {
|
|
63
|
+
return {
|
|
64
|
+
material: node.wallMaterial,
|
|
65
|
+
materialPreset: typeof node.wallMaterialPreset === 'string' ? node.wallMaterialPreset : undefined,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (role === 'wall') {
|
|
70
|
+
if (node.edgeMaterial !== undefined || typeof node.edgeMaterialPreset === 'string') {
|
|
71
|
+
return {
|
|
72
|
+
material: node.edgeMaterial,
|
|
73
|
+
materialPreset: typeof node.edgeMaterialPreset === 'string' ? node.edgeMaterialPreset : undefined,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return getLegacyRoofSurfaceMaterial(node);
|
|
78
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;iBAQnB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { AssetUrl } from '../asset-url';
|
|
2
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
3
4
|
export const ScanNode = BaseNode.extend({
|
|
4
5
|
id: objectId('scan'),
|
|
5
6
|
type: nodeType('scan'),
|
|
6
|
-
url:
|
|
7
|
+
url: AssetUrl,
|
|
7
8
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
8
9
|
rotation: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
9
10
|
scale: z.number().default(1),
|
|
@@ -76,12 +76,13 @@ export declare const SiteNode: z.ZodObject<{
|
|
|
76
76
|
category: z.ZodString;
|
|
77
77
|
name: z.ZodString;
|
|
78
78
|
thumbnail: z.ZodString;
|
|
79
|
+
floorPlanUrl: z.ZodOptional<z.ZodString>;
|
|
79
80
|
src: z.ZodString;
|
|
80
81
|
dimensions: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
81
82
|
attachTo: z.ZodOptional<z.ZodEnum<{
|
|
82
83
|
wall: "wall";
|
|
83
|
-
"wall-side": "wall-side";
|
|
84
84
|
ceiling: "ceiling";
|
|
85
|
+
"wall-side": "wall-side";
|
|
85
86
|
}>>;
|
|
86
87
|
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
87
88
|
offset: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/site.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAiBvB,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/site.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAiBvB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwBpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
|
|
@@ -18,8 +18,8 @@ export declare const SlabNode: z.ZodObject<{
|
|
|
18
18
|
id: z.ZodDefault<z.ZodTemplateLiteral<`slab_${string}`>>;
|
|
19
19
|
type: z.ZodDefault<z.ZodLiteral<"slab">>;
|
|
20
20
|
material: z.ZodOptional<z.ZodObject<{
|
|
21
|
+
id: z.ZodOptional<z.ZodString>;
|
|
21
22
|
preset: z.ZodOptional<z.ZodEnum<{
|
|
22
|
-
custom: "custom";
|
|
23
23
|
white: "white";
|
|
24
24
|
brick: "brick";
|
|
25
25
|
concrete: "concrete";
|
|
@@ -29,6 +29,7 @@ export declare const SlabNode: z.ZodObject<{
|
|
|
29
29
|
plaster: "plaster";
|
|
30
30
|
tile: "tile";
|
|
31
31
|
marble: "marble";
|
|
32
|
+
custom: "custom";
|
|
32
33
|
}>>;
|
|
33
34
|
properties: z.ZodOptional<z.ZodObject<{
|
|
34
35
|
color: z.ZodDefault<z.ZodString>;
|
|
@@ -48,9 +49,18 @@ export declare const SlabNode: z.ZodObject<{
|
|
|
48
49
|
scale: z.ZodOptional<z.ZodNumber>;
|
|
49
50
|
}, z.core.$strip>>;
|
|
50
51
|
}, z.core.$strip>>;
|
|
52
|
+
materialPreset: z.ZodOptional<z.ZodString>;
|
|
51
53
|
polygon: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
52
54
|
holes: z.ZodDefault<z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>>;
|
|
55
|
+
holeMetadata: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
56
|
+
source: z.ZodDefault<z.ZodEnum<{
|
|
57
|
+
stair: "stair";
|
|
58
|
+
manual: "manual";
|
|
59
|
+
}>>;
|
|
60
|
+
stairId: z.ZodOptional<z.ZodString>;
|
|
61
|
+
}, z.core.$strip>>>;
|
|
53
62
|
elevation: z.ZodDefault<z.ZodNumber>;
|
|
63
|
+
autoFromWalls: z.ZodDefault<z.ZodBoolean>;
|
|
54
64
|
}, z.core.$strip>;
|
|
55
65
|
export type SlabNode = z.infer<typeof SlabNode>;
|
|
56
66
|
//# sourceMappingURL=slab.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slab.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/slab.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"slab.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/slab.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
|
|
@@ -2,15 +2,22 @@ import dedent from 'dedent';
|
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
4
|
import { MaterialSchema } from '../material';
|
|
5
|
+
import { SurfaceHoleMetadata } from './surface-hole-metadata';
|
|
5
6
|
export const SlabNode = BaseNode.extend({
|
|
6
7
|
id: objectId('slab'),
|
|
7
8
|
type: nodeType('slab'),
|
|
8
9
|
material: MaterialSchema.optional(),
|
|
10
|
+
materialPreset: z.string().optional(),
|
|
9
11
|
polygon: z.array(z.tuple([z.number(), z.number()])),
|
|
10
12
|
holes: z.array(z.array(z.tuple([z.number(), z.number()]))).default([]),
|
|
13
|
+
holeMetadata: z.array(SurfaceHoleMetadata).default([]),
|
|
11
14
|
elevation: z.number().default(0.05), // Elevation in meters
|
|
15
|
+
autoFromWalls: z.boolean().default(false),
|
|
12
16
|
}).describe(dedent `
|
|
13
17
|
Slab node - used to represent a slab/floor in the building
|
|
14
18
|
- polygon: array of [x, z] points defining the slab boundary
|
|
19
|
+
- holes: array of [x, z] polygons representing cutouts in the slab
|
|
20
|
+
- holeMetadata: metadata parallel to holes, used to preserve manual and stair-managed cutouts
|
|
15
21
|
- elevation: elevation in meters
|
|
22
|
+
- autoFromWalls: whether the slab is automatically generated from a closed wall loop
|
|
16
23
|
`);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const SpawnNode: z.ZodObject<{
|
|
3
|
+
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
4
|
+
name: z.ZodOptional<z.ZodString>;
|
|
5
|
+
parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
6
|
+
visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
7
|
+
camera: z.ZodOptional<z.ZodObject<{
|
|
8
|
+
position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
9
|
+
target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
10
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
11
|
+
perspective: "perspective";
|
|
12
|
+
orthographic: "orthographic";
|
|
13
|
+
}>>;
|
|
14
|
+
fov: z.ZodOptional<z.ZodNumber>;
|
|
15
|
+
zoom: z.ZodOptional<z.ZodNumber>;
|
|
16
|
+
}, z.core.$strip>>;
|
|
17
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
|
|
18
|
+
id: z.ZodDefault<z.ZodTemplateLiteral<`spawn_${string}`>>;
|
|
19
|
+
type: z.ZodDefault<z.ZodLiteral<"spawn">>;
|
|
20
|
+
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
21
|
+
rotation: z.ZodDefault<z.ZodNumber>;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
export type SpawnNode = z.infer<typeof SpawnNode>;
|
|
24
|
+
//# sourceMappingURL=spawn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;iBAKpB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { BaseNode, nodeType, objectId } from '../base';
|
|
3
|
+
export const SpawnNode = BaseNode.extend({
|
|
4
|
+
id: objectId('spawn'),
|
|
5
|
+
type: nodeType('spawn'),
|
|
6
|
+
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
7
|
+
rotation: z.number().default(0),
|
|
8
|
+
});
|
|
@@ -29,8 +29,8 @@ export declare const StairSegmentNode: z.ZodObject<{
|
|
|
29
29
|
id: z.ZodDefault<z.ZodTemplateLiteral<`sseg_${string}`>>;
|
|
30
30
|
type: z.ZodDefault<z.ZodLiteral<"stair-segment">>;
|
|
31
31
|
material: z.ZodOptional<z.ZodObject<{
|
|
32
|
+
id: z.ZodOptional<z.ZodString>;
|
|
32
33
|
preset: z.ZodOptional<z.ZodEnum<{
|
|
33
|
-
custom: "custom";
|
|
34
34
|
white: "white";
|
|
35
35
|
brick: "brick";
|
|
36
36
|
concrete: "concrete";
|
|
@@ -40,6 +40,7 @@ export declare const StairSegmentNode: z.ZodObject<{
|
|
|
40
40
|
plaster: "plaster";
|
|
41
41
|
tile: "tile";
|
|
42
42
|
marble: "marble";
|
|
43
|
+
custom: "custom";
|
|
43
44
|
}>>;
|
|
44
45
|
properties: z.ZodOptional<z.ZodObject<{
|
|
45
46
|
color: z.ZodDefault<z.ZodString>;
|
|
@@ -59,6 +60,7 @@ export declare const StairSegmentNode: z.ZodObject<{
|
|
|
59
60
|
scale: z.ZodOptional<z.ZodNumber>;
|
|
60
61
|
}, z.core.$strip>>;
|
|
61
62
|
}, z.core.$strip>>;
|
|
63
|
+
materialPreset: z.ZodOptional<z.ZodString>;
|
|
62
64
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
63
65
|
rotation: z.ZodDefault<z.ZodNumber>;
|
|
64
66
|
segmentType: z.ZodDefault<z.ZodEnum<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stair-segment.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/stair-segment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,gBAAgB;;;EAA+B,CAAA;AAE5D,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D,eAAO,MAAM,cAAc;;;;EAAqC,CAAA;AAEhE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"stair-segment.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/stair-segment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,gBAAgB;;;EAA+B,CAAA;AAE5D,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D,eAAO,MAAM,cAAc;;;;EAAqC,CAAA;AAEhE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsC5B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA"}
|
|
@@ -8,6 +8,7 @@ export const StairSegmentNode = BaseNode.extend({
|
|
|
8
8
|
id: objectId('sseg'),
|
|
9
9
|
type: nodeType('stair-segment'),
|
|
10
10
|
material: MaterialSchema.optional(),
|
|
11
|
+
materialPreset: z.string().optional(),
|
|
11
12
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
12
13
|
// Rotation around Y axis in radians
|
|
13
14
|
rotation: z.number().default(0),
|