@pascal-app/core 0.6.0 → 0.8.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 +45 -6
- 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/index.d.ts +8 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -14
- 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.map +1 -1
- 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.map +1 -1
- package/dist/lib/space-detection.js +10 -8
- package/dist/material-library.d.ts +5 -3
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +28 -32
- 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 +134 -0
- package/dist/schema/index.d.ts +7 -5
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +5 -3
- package/dist/schema/material.d.ts +1 -0
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +13 -11
- 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 +72 -0
- 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 +1 -1
- package/dist/schema/nodes/fence.js +2 -2
- 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 +20 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +30 -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 +2 -2
- package/dist/schema/nodes/roof.d.ts +2 -2
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +5 -5
- 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 +7 -0
- package/dist/schema/nodes/site.d.ts.map +1 -1
- 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.d.ts +6 -6
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +9 -7
- package/dist/schema/nodes/window.d.ts +55 -0
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +29 -0
- package/dist/schema/types.d.ts +320 -5
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +4 -0
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +13 -10
- 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 +69 -5
- package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-sync.js +41 -7
- 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 +63 -0
- package/dist/systems/wall/wall-curve.d.ts +1 -1
- package/dist/systems/wall/wall-curve.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.js +1 -1
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +2 -6
- package/package.json +34 -5
- package/dist/materials.d.ts +0 -10
- package/dist/materials.d.ts.map +0 -1
- package/dist/materials.js +0 -22
- package/dist/systems/ceiling/ceiling-system.d.ts +0 -8
- package/dist/systems/ceiling/ceiling-system.d.ts.map +0 -1
- package/dist/systems/ceiling/ceiling-system.js +0 -92
- package/dist/systems/door/door-system.d.ts +0 -2
- package/dist/systems/door/door-system.d.ts.map +0 -1
- package/dist/systems/door/door-system.js +0 -195
- package/dist/systems/fence/fence-system.d.ts +0 -2
- package/dist/systems/fence/fence-system.d.ts.map +0 -1
- package/dist/systems/fence/fence-system.js +0 -187
- package/dist/systems/item/item-system.d.ts +0 -2
- package/dist/systems/item/item-system.d.ts.map +0 -1
- package/dist/systems/item/item-system.js +0 -48
- package/dist/systems/roof/roof-system.d.ts +0 -16
- package/dist/systems/roof/roof-system.d.ts.map +0 -1
- package/dist/systems/roof/roof-system.js +0 -797
- package/dist/systems/slab/slab-system.d.ts +0 -8
- package/dist/systems/slab/slab-system.d.ts.map +0 -1
- package/dist/systems/slab/slab-system.js +0 -214
- package/dist/systems/stair/stair-system.d.ts +0 -2
- package/dist/systems/stair/stair-system.d.ts.map +0 -1
- package/dist/systems/stair/stair-system.js +0 -776
- package/dist/systems/wall/wall-system.d.ts +0 -12
- package/dist/systems/wall/wall-system.d.ts.map +0 -1
- package/dist/systems/wall/wall-system.js +0 -455
- package/dist/systems/window/window-system.d.ts +0 -2
- package/dist/systems/window/window-system.d.ts.map +0 -1
- package/dist/systems/window/window-system.js +0 -131
|
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkCf,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,22 @@ 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
|
+
// Where the item came from in the catalog. Used by the editor's items
|
|
65
|
+
// panel to filter Library / Community / Mine. The server populates it
|
|
66
|
+
// from `items.userId`: null → 'library', current user → 'mine',
|
|
67
|
+
// other user → 'community'. Defaults to 'library' when absent (e.g.
|
|
68
|
+
// the seeded built-in catalog).
|
|
69
|
+
source: z.enum(['library', 'community', 'mine']).default('library'),
|
|
70
|
+
// True when the item belongs to the caller and is still in draft status.
|
|
71
|
+
// The catalog only loads my drafts (other users' drafts are never
|
|
72
|
+
// published to the catalog). Used so the Community filter can include
|
|
73
|
+
// *my* published items alongside other users', while leaving drafts
|
|
74
|
+
// visible only under Mine.
|
|
75
|
+
isDraft: z.boolean().optional(),
|
|
76
|
+
src: AssetUrl,
|
|
61
77
|
dimensions: z.tuple([z.number(), z.number(), z.number()]).default([1, 1, 1]), // [w, h, d]
|
|
62
78
|
attachTo: z.enum(['wall', 'wall-side', 'ceiling']).optional(),
|
|
63
79
|
tags: z.array(z.string()).optional(),
|
|
@@ -99,6 +115,19 @@ export const ItemNode = BaseNode.extend({
|
|
|
99
115
|
- scale: corrective scale for the model
|
|
100
116
|
- tags: tags associated with the item
|
|
101
117
|
`);
|
|
118
|
+
export const LOW_PROFILE_ITEM_SURFACE_MAX_HEIGHT = 0.1;
|
|
119
|
+
/**
|
|
120
|
+
* Low, floor-resting items like rugs and parking mats can receive items visually,
|
|
121
|
+
* but should not become item parents or block normal floor placement.
|
|
122
|
+
*/
|
|
123
|
+
export function isLowProfileItemSurface(item) {
|
|
124
|
+
if (item.asset.attachTo)
|
|
125
|
+
return false;
|
|
126
|
+
const surfaceHeight = item.asset.surface
|
|
127
|
+
? item.asset.surface.height * item.scale[1]
|
|
128
|
+
: getScaledDimensions(item)[1];
|
|
129
|
+
return surfaceHeight <= LOW_PROFILE_ITEM_SURFACE_MAX_HEIGHT;
|
|
130
|
+
}
|
|
102
131
|
/**
|
|
103
132
|
* Returns the effective world-space dimensions of an item after applying its scale.
|
|
104
133
|
* 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
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const RoofType: z.ZodEnum<{
|
|
3
|
+
flat: "flat";
|
|
3
4
|
hip: "hip";
|
|
4
5
|
gable: "gable";
|
|
5
6
|
shed: "shed";
|
|
6
7
|
gambrel: "gambrel";
|
|
7
8
|
dutch: "dutch";
|
|
8
9
|
mansard: "mansard";
|
|
9
|
-
flat: "flat";
|
|
10
10
|
}>;
|
|
11
11
|
export type RoofType = z.infer<typeof RoofType>;
|
|
12
12
|
export declare const RoofSegmentNode: z.ZodObject<{
|
|
@@ -63,13 +63,13 @@ export declare const RoofSegmentNode: z.ZodObject<{
|
|
|
63
63
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
64
64
|
rotation: z.ZodDefault<z.ZodNumber>;
|
|
65
65
|
roofType: z.ZodDefault<z.ZodEnum<{
|
|
66
|
+
flat: "flat";
|
|
66
67
|
hip: "hip";
|
|
67
68
|
gable: "gable";
|
|
68
69
|
shed: "shed";
|
|
69
70
|
gambrel: "gambrel";
|
|
70
71
|
dutch: "dutch";
|
|
71
72
|
mansard: "mansard";
|
|
72
|
-
flat: "flat";
|
|
73
73
|
}>>;
|
|
74
74
|
width: z.ZodDefault<z.ZodNumber>;
|
|
75
75
|
depth: z.ZodDefault<z.ZodNumber>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import type { MaterialSchema as MaterialSchemaType } from '../material';
|
|
3
3
|
export type RoofSurfaceMaterialRole = 'top' | 'edge' | 'wall';
|
|
4
4
|
export type RoofSurfaceMaterialSpec = {
|
|
5
|
-
material?:
|
|
5
|
+
material?: MaterialSchemaType;
|
|
6
6
|
materialPreset?: string;
|
|
7
7
|
};
|
|
8
8
|
export declare const RoofNode: z.ZodObject<{
|
|
@@ -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;AAEvB,OAAO,EAAE,
|
|
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,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIvE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAC7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,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,CAoDzB"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import dedent from 'dedent';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
|
-
import { MaterialSchema
|
|
4
|
+
import { MaterialSchema } 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: MaterialSchema.optional(),
|
|
10
10
|
materialPreset: z.string().optional(),
|
|
11
|
-
topMaterial:
|
|
11
|
+
topMaterial: MaterialSchema.optional(),
|
|
12
12
|
topMaterialPreset: z.string().optional(),
|
|
13
|
-
edgeMaterial:
|
|
13
|
+
edgeMaterial: MaterialSchema.optional(),
|
|
14
14
|
edgeMaterialPreset: z.string().optional(),
|
|
15
|
-
wallMaterial:
|
|
15
|
+
wallMaterial: MaterialSchema.optional(),
|
|
16
16
|
wallMaterialPreset: z.string().optional(),
|
|
17
17
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
18
18
|
// Rotation around Y axis in radians
|
|
@@ -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,6 +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>;
|
|
80
|
+
source: z.ZodDefault<z.ZodEnum<{
|
|
81
|
+
library: "library";
|
|
82
|
+
community: "community";
|
|
83
|
+
mine: "mine";
|
|
84
|
+
}>>;
|
|
85
|
+
isDraft: z.ZodOptional<z.ZodBoolean>;
|
|
79
86
|
src: z.ZodString;
|
|
80
87
|
dimensions: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
81
88
|
attachTo: z.ZodOptional<z.ZodEnum<{
|
|
@@ -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"}
|
|
@@ -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
|
+
});
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import type { MaterialSchema as MaterialSchemaType } from '../material';
|
|
3
3
|
export declare const StairRailingMode: z.ZodEnum<{
|
|
4
|
+
none: "none";
|
|
4
5
|
left: "left";
|
|
5
6
|
right: "right";
|
|
6
|
-
none: "none";
|
|
7
7
|
both: "both";
|
|
8
8
|
}>;
|
|
9
9
|
export declare const StairType: z.ZodEnum<{
|
|
10
10
|
straight: "straight";
|
|
11
|
-
curved: "curved";
|
|
12
11
|
spiral: "spiral";
|
|
12
|
+
curved: "curved";
|
|
13
13
|
}>;
|
|
14
14
|
export declare const StairTopLandingMode: z.ZodEnum<{
|
|
15
15
|
none: "none";
|
|
@@ -25,7 +25,7 @@ export type StairTopLandingMode = z.infer<typeof StairTopLandingMode>;
|
|
|
25
25
|
export type StairSlabOpeningMode = z.infer<typeof StairSlabOpeningMode>;
|
|
26
26
|
export type StairSurfaceMaterialRole = 'railing' | 'tread' | 'side';
|
|
27
27
|
export type StairSurfaceMaterialSpec = {
|
|
28
|
-
material?:
|
|
28
|
+
material?: MaterialSchemaType;
|
|
29
29
|
materialPreset?: string;
|
|
30
30
|
};
|
|
31
31
|
export declare const StairNode: z.ZodObject<{
|
|
@@ -182,8 +182,8 @@ export declare const StairNode: z.ZodObject<{
|
|
|
182
182
|
rotation: z.ZodDefault<z.ZodNumber>;
|
|
183
183
|
stairType: z.ZodDefault<z.ZodEnum<{
|
|
184
184
|
straight: "straight";
|
|
185
|
-
curved: "curved";
|
|
186
185
|
spiral: "spiral";
|
|
186
|
+
curved: "curved";
|
|
187
187
|
}>>;
|
|
188
188
|
fromLevelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
189
189
|
toLevelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
@@ -207,9 +207,9 @@ export declare const StairNode: z.ZodObject<{
|
|
|
207
207
|
showCenterColumn: z.ZodDefault<z.ZodBoolean>;
|
|
208
208
|
showStepSupports: z.ZodDefault<z.ZodBoolean>;
|
|
209
209
|
railingMode: z.ZodDefault<z.ZodEnum<{
|
|
210
|
+
none: "none";
|
|
210
211
|
left: "left";
|
|
211
212
|
right: "right";
|
|
212
|
-
none: "none";
|
|
213
213
|
both: "both";
|
|
214
214
|
}>>;
|
|
215
215
|
railingHeight: z.ZodDefault<z.ZodNumber>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stair.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/stair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"stair.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/stair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIvE,eAAO,MAAM,gBAAgB;;;;;EAA4C,CAAA;AACzE,eAAO,MAAM,SAAS;;;;EAA2C,CAAA;AACjE,eAAO,MAAM,mBAAmB;;;EAAiC,CAAA;AACjE,eAAO,MAAM,oBAAoB;;;EAAkC,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AACjD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;AACnE,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4DrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AASjD,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,wBAAwB,GAC7B,wBAAwB,CAmE1B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import dedent from 'dedent';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
|
-
import { MaterialSchema
|
|
4
|
+
import { MaterialSchema } from '../material';
|
|
5
5
|
import { StairSegmentNode } from './stair-segment';
|
|
6
6
|
export const StairRailingMode = z.enum(['none', 'left', 'right', 'both']);
|
|
7
7
|
export const StairType = z.enum(['straight', 'curved', 'spiral']);
|
|
@@ -10,13 +10,13 @@ export const StairSlabOpeningMode = z.enum(['none', 'destination']);
|
|
|
10
10
|
export const StairNode = BaseNode.extend({
|
|
11
11
|
id: objectId('stair'),
|
|
12
12
|
type: nodeType('stair'),
|
|
13
|
-
material:
|
|
13
|
+
material: MaterialSchema.optional(),
|
|
14
14
|
materialPreset: z.string().optional(),
|
|
15
|
-
railingMaterial:
|
|
15
|
+
railingMaterial: MaterialSchema.optional(),
|
|
16
16
|
railingMaterialPreset: z.string().optional(),
|
|
17
|
-
treadMaterial:
|
|
17
|
+
treadMaterial: MaterialSchema.optional(),
|
|
18
18
|
treadMaterialPreset: z.string().optional(),
|
|
19
|
-
sideMaterial:
|
|
19
|
+
sideMaterial: MaterialSchema.optional(),
|
|
20
20
|
sideMaterialPreset: z.string().optional(),
|
|
21
21
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
22
22
|
// Rotation around Y axis in radians
|
|
@@ -105,10 +105,12 @@ export function getEffectiveStairSurfaceMaterial(node, role) {
|
|
|
105
105
|
material: node.sideMaterial,
|
|
106
106
|
materialPreset: typeof node.sideMaterialPreset === 'string' ? node.sideMaterialPreset : undefined,
|
|
107
107
|
};
|
|
108
|
-
if (role === 'tread' &&
|
|
108
|
+
if (role === 'tread' &&
|
|
109
|
+
(sideFallback.material !== undefined || sideFallback.materialPreset !== undefined)) {
|
|
109
110
|
return sideFallback;
|
|
110
111
|
}
|
|
111
|
-
if (role === 'side' &&
|
|
112
|
+
if (role === 'side' &&
|
|
113
|
+
(treadFallback.material !== undefined || treadFallback.materialPreset !== undefined)) {
|
|
112
114
|
return treadFallback;
|
|
113
115
|
}
|
|
114
116
|
if (role === 'railing') {
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
export declare const WindowType: z.ZodEnum<{
|
|
3
|
+
sliding: "sliding";
|
|
4
|
+
fixed: "fixed";
|
|
5
|
+
casement: "casement";
|
|
6
|
+
awning: "awning";
|
|
7
|
+
hopper: "hopper";
|
|
8
|
+
"single-hung": "single-hung";
|
|
9
|
+
"double-hung": "double-hung";
|
|
10
|
+
bay: "bay";
|
|
11
|
+
bow: "bow";
|
|
12
|
+
louvered: "louvered";
|
|
13
|
+
}>;
|
|
14
|
+
export type WindowType = z.infer<typeof WindowType>;
|
|
2
15
|
export declare const WindowNode: z.ZodObject<{
|
|
3
16
|
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
4
17
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -58,6 +71,48 @@ export declare const WindowNode: z.ZodObject<{
|
|
|
58
71
|
wallId: z.ZodOptional<z.ZodString>;
|
|
59
72
|
width: z.ZodDefault<z.ZodNumber>;
|
|
60
73
|
height: z.ZodDefault<z.ZodNumber>;
|
|
74
|
+
openingKind: z.ZodDefault<z.ZodEnum<{
|
|
75
|
+
window: "window";
|
|
76
|
+
opening: "opening";
|
|
77
|
+
}>>;
|
|
78
|
+
windowType: z.ZodDefault<z.ZodEnum<{
|
|
79
|
+
sliding: "sliding";
|
|
80
|
+
fixed: "fixed";
|
|
81
|
+
casement: "casement";
|
|
82
|
+
awning: "awning";
|
|
83
|
+
hopper: "hopper";
|
|
84
|
+
"single-hung": "single-hung";
|
|
85
|
+
"double-hung": "double-hung";
|
|
86
|
+
bay: "bay";
|
|
87
|
+
bow: "bow";
|
|
88
|
+
louvered: "louvered";
|
|
89
|
+
}>>;
|
|
90
|
+
operationState: z.ZodDefault<z.ZodNumber>;
|
|
91
|
+
awningDirection: z.ZodDefault<z.ZodEnum<{
|
|
92
|
+
up: "up";
|
|
93
|
+
down: "down";
|
|
94
|
+
}>>;
|
|
95
|
+
casementStyle: z.ZodDefault<z.ZodEnum<{
|
|
96
|
+
french: "french";
|
|
97
|
+
single: "single";
|
|
98
|
+
}>>;
|
|
99
|
+
hingesSide: z.ZodDefault<z.ZodEnum<{
|
|
100
|
+
left: "left";
|
|
101
|
+
right: "right";
|
|
102
|
+
}>>;
|
|
103
|
+
openingShape: z.ZodDefault<z.ZodEnum<{
|
|
104
|
+
rectangle: "rectangle";
|
|
105
|
+
rounded: "rounded";
|
|
106
|
+
arch: "arch";
|
|
107
|
+
}>>;
|
|
108
|
+
openingRadiusMode: z.ZodDefault<z.ZodEnum<{
|
|
109
|
+
all: "all";
|
|
110
|
+
individual: "individual";
|
|
111
|
+
}>>;
|
|
112
|
+
openingCornerRadii: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
113
|
+
cornerRadius: z.ZodDefault<z.ZodNumber>;
|
|
114
|
+
archHeight: z.ZodDefault<z.ZodNumber>;
|
|
115
|
+
openingRevealRadius: z.ZodDefault<z.ZodNumber>;
|
|
61
116
|
frameThickness: z.ZodDefault<z.ZodNumber>;
|
|
62
117
|
frameDepth: z.ZodDefault<z.ZodNumber>;
|
|
63
118
|
columnRatios: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;;;;;;;EAWrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAEnD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2DrB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA"}
|
|
@@ -2,6 +2,18 @@ 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
|
+
export const WindowType = z.enum([
|
|
6
|
+
'fixed',
|
|
7
|
+
'sliding',
|
|
8
|
+
'casement',
|
|
9
|
+
'awning',
|
|
10
|
+
'hopper',
|
|
11
|
+
'single-hung',
|
|
12
|
+
'double-hung',
|
|
13
|
+
'bay',
|
|
14
|
+
'bow',
|
|
15
|
+
'louvered',
|
|
16
|
+
]);
|
|
5
17
|
export const WindowNode = BaseNode.extend({
|
|
6
18
|
id: objectId('window'),
|
|
7
19
|
type: nodeType('window'),
|
|
@@ -14,6 +26,22 @@ export const WindowNode = BaseNode.extend({
|
|
|
14
26
|
// Overall dimensions
|
|
15
27
|
width: z.number().default(1.5),
|
|
16
28
|
height: z.number().default(1.5),
|
|
29
|
+
// Opening mode - when set to "opening", the window is only a shaped cutout
|
|
30
|
+
openingKind: z.enum(['window', 'opening']).default('window'),
|
|
31
|
+
// Window family
|
|
32
|
+
windowType: WindowType.default('fixed'),
|
|
33
|
+
operationState: z.number().min(0).max(1).default(0),
|
|
34
|
+
awningDirection: z.enum(['up', 'down']).default('up'),
|
|
35
|
+
casementStyle: z.enum(['single', 'french']).default('single'),
|
|
36
|
+
hingesSide: z.enum(['left', 'right']).default('left'),
|
|
37
|
+
openingShape: z.enum(['rectangle', 'rounded', 'arch']).default('rectangle'),
|
|
38
|
+
openingRadiusMode: z.enum(['all', 'individual']).default('all'),
|
|
39
|
+
openingCornerRadii: z
|
|
40
|
+
.tuple([z.number(), z.number(), z.number(), z.number()])
|
|
41
|
+
.default([0.15, 0.15, 0.15, 0.15]),
|
|
42
|
+
cornerRadius: z.number().default(0.15),
|
|
43
|
+
archHeight: z.number().default(0.35),
|
|
44
|
+
openingRevealRadius: z.number().default(0.025),
|
|
17
45
|
// Frame
|
|
18
46
|
frameThickness: z.number().default(0.05),
|
|
19
47
|
frameDepth: z.number().default(0.07),
|
|
@@ -32,6 +60,7 @@ export const WindowNode = BaseNode.extend({
|
|
|
32
60
|
}).describe(dedent `Window node - a parametric window placed on a wall
|
|
33
61
|
- position: center of the window in wall-local coordinate system
|
|
34
62
|
- width/height: overall outer dimensions
|
|
63
|
+
- windowType: explicit window family, defaulting old windows to fixed
|
|
35
64
|
- frameThickness: width of the frame members
|
|
36
65
|
- frameDepth: how deep the frame sits within the wall
|
|
37
66
|
- columnRatios/rowRatios: pane division ratios
|