@snaptrude/plugin-core 0.3.0 → 0.6.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/AGENTS.md +130 -48
- package/CHANGELOG.md +163 -0
- package/api-manifest.full.json +5600 -0
- package/api-manifest.json +5502 -0
- package/dist/api/analysis/heatmaps.d.ts +234 -0
- package/dist/api/analysis/heatmaps.d.ts.map +1 -0
- package/dist/api/analysis/illuminance.d.ts +145 -0
- package/dist/api/analysis/illuminance.d.ts.map +1 -0
- package/dist/api/analysis/index.d.ts +44 -0
- package/dist/api/analysis/index.d.ts.map +1 -0
- package/dist/api/analysis/shadows.d.ts +165 -0
- package/dist/api/analysis/shadows.d.ts.map +1 -0
- package/dist/api/analysis/sunlightHours.d.ts +208 -0
- package/dist/api/analysis/sunlightHours.d.ts.map +1 -0
- package/dist/api/analysis/sunpath.d.ts +80 -0
- package/dist/api/analysis/sunpath.d.ts.map +1 -0
- package/dist/api/core/buildings.d.ts +427 -0
- package/dist/api/core/buildings.d.ts.map +1 -0
- package/dist/api/core/comment/index.d.ts +230 -0
- package/dist/api/core/comment/index.d.ts.map +1 -0
- package/dist/api/core/geom/create/index.d.ts +247 -0
- package/dist/api/core/geom/create/index.d.ts.map +1 -0
- package/dist/api/core/geom/delete/index.d.ts +72 -0
- package/dist/api/core/geom/delete/index.d.ts.map +1 -0
- package/dist/api/core/geom/index.d.ts +24 -23
- package/dist/api/core/geom/index.d.ts.map +1 -1
- package/dist/api/core/geom/query/arc.d.ts +169 -0
- package/dist/api/core/geom/query/arc.d.ts.map +1 -0
- package/dist/api/core/geom/query/brep.d.ts +402 -0
- package/dist/api/core/geom/query/brep.d.ts.map +1 -0
- package/dist/api/core/geom/query/circle.d.ts +378 -0
- package/dist/api/core/geom/query/circle.d.ts.map +1 -0
- package/dist/api/core/geom/query/contour.d.ts +450 -0
- package/dist/api/core/geom/query/contour.d.ts.map +1 -0
- package/dist/api/core/geom/query/curve.d.ts +918 -0
- package/dist/api/core/geom/query/curve.d.ts.map +1 -0
- package/dist/api/core/geom/query/edge.d.ts +128 -0
- package/dist/api/core/geom/query/edge.d.ts.map +1 -0
- package/dist/api/core/geom/query/face.d.ts +363 -0
- package/dist/api/core/geom/query/face.d.ts.map +1 -0
- package/dist/api/core/geom/query/halfedge.d.ts +206 -0
- package/dist/api/core/geom/query/halfedge.d.ts.map +1 -0
- package/dist/api/core/geom/query/index.d.ts +61 -0
- package/dist/api/core/geom/query/index.d.ts.map +1 -0
- package/dist/api/core/geom/query/profile.d.ts +410 -0
- package/dist/api/core/geom/query/profile.d.ts.map +1 -0
- package/dist/api/core/geom/query/vertex.d.ts +187 -0
- package/dist/api/core/geom/query/vertex.d.ts.map +1 -0
- package/dist/api/core/geom/update/contour.d.ts +272 -0
- package/dist/api/core/geom/update/contour.d.ts.map +1 -0
- package/dist/api/core/geom/update/curve.d.ts +180 -0
- package/dist/api/core/geom/update/curve.d.ts.map +1 -0
- package/dist/api/core/geom/update/index.d.ts +27 -0
- package/dist/api/core/geom/update/index.d.ts.map +1 -0
- package/dist/api/core/geom/update/profile.d.ts +329 -0
- package/dist/api/core/geom/update/profile.d.ts.map +1 -0
- package/dist/api/core/groups.d.ts +485 -0
- package/dist/api/core/groups.d.ts.map +1 -0
- package/dist/api/core/history/index.d.ts +78 -0
- package/dist/api/core/history/index.d.ts.map +1 -0
- package/dist/api/core/index.d.ts +51 -1
- package/dist/api/core/index.d.ts.map +1 -1
- package/dist/api/core/io/import/index.d.ts +392 -0
- package/dist/api/core/io/import/index.d.ts.map +1 -0
- package/dist/api/core/io/index.d.ts +35 -0
- package/dist/api/core/io/index.d.ts.map +1 -0
- package/dist/api/core/io/job/index.d.ts +139 -0
- package/dist/api/core/io/job/index.d.ts.map +1 -0
- package/dist/api/core/io/query/index.d.ts +74 -0
- package/dist/api/core/io/query/index.d.ts.map +1 -0
- package/dist/api/core/io/terrain/index.d.ts +206 -0
- package/dist/api/core/io/terrain/index.d.ts.map +1 -0
- package/dist/api/core/io/underlay/index.d.ts +286 -0
- package/dist/api/core/io/underlay/index.d.ts.map +1 -0
- package/dist/api/core/layers.d.ts +402 -0
- package/dist/api/core/layers.d.ts.map +1 -0
- package/dist/api/core/math/quat.d.ts +111 -128
- package/dist/api/core/math/quat.d.ts.map +1 -1
- package/dist/api/core/math/vec3.d.ts +120 -102
- package/dist/api/core/math/vec3.d.ts.map +1 -1
- package/dist/api/core/project/index.d.ts +399 -0
- package/dist/api/core/project/index.d.ts.map +1 -0
- package/dist/api/core/tags.d.ts +755 -0
- package/dist/api/core/tags.d.ts.map +1 -0
- package/dist/api/core/units/index.d.ts +175 -0
- package/dist/api/core/units/index.d.ts.map +1 -0
- package/dist/api/core/zoom/index.d.ts +45 -0
- package/dist/api/core/zoom/index.d.ts.map +1 -0
- package/dist/api/design/boolean/index.d.ts +168 -0
- package/dist/api/design/boolean/index.d.ts.map +1 -0
- package/dist/api/design/create/index.d.ts +837 -0
- package/dist/api/design/create/index.d.ts.map +1 -0
- package/dist/api/design/delete/index.d.ts +63 -0
- package/dist/api/design/delete/index.d.ts.map +1 -0
- package/dist/api/design/doors/index.d.ts +268 -0
- package/dist/api/design/doors/index.d.ts.map +1 -0
- package/dist/api/design/edit/index.d.ts +49 -0
- package/dist/api/design/edit/index.d.ts.map +1 -0
- package/dist/api/design/erase/index.d.ts +160 -0
- package/dist/api/design/erase/index.d.ts.map +1 -0
- package/dist/api/design/furniture/index.d.ts +123 -0
- package/dist/api/design/furniture/index.d.ts.map +1 -0
- package/dist/api/design/index.d.ts +153 -0
- package/dist/api/design/index.d.ts.map +1 -0
- package/dist/api/design/lock.d.ts +41 -0
- package/dist/api/design/lock.d.ts.map +1 -0
- package/dist/api/design/materials/index.d.ts +297 -0
- package/dist/api/design/materials/index.d.ts.map +1 -0
- package/dist/api/design/query/geometry/index.d.ts +140 -0
- package/dist/api/design/query/geometry/index.d.ts.map +1 -0
- package/dist/api/design/query/index.d.ts +1011 -0
- package/dist/api/design/query/index.d.ts.map +1 -0
- package/dist/api/design/query/spaces.d.ts +221 -0
- package/dist/api/design/query/spaces.d.ts.map +1 -0
- package/dist/api/design/selection/index.d.ts +282 -0
- package/dist/api/design/selection/index.d.ts.map +1 -0
- package/dist/api/design/shared.d.ts +38 -0
- package/dist/api/design/shared.d.ts.map +1 -0
- package/dist/api/design/transform/index.d.ts +87 -0
- package/dist/api/design/transform/index.d.ts.map +1 -0
- package/dist/api/design/update/index.d.ts +178 -0
- package/dist/api/design/update/index.d.ts.map +1 -0
- package/dist/api/design/windows/index.d.ts +189 -0
- package/dist/api/design/windows/index.d.ts.map +1 -0
- package/dist/api/entity/buildableEnvelope.d.ts +261 -0
- package/dist/api/entity/buildableEnvelope.d.ts.map +1 -0
- package/dist/api/entity/department.d.ts +0 -98
- package/dist/api/entity/department.d.ts.map +1 -1
- package/dist/api/entity/index.d.ts +9 -9
- package/dist/api/entity/index.d.ts.map +1 -1
- package/dist/api/entity/referenceLine.d.ts +49 -106
- package/dist/api/entity/referenceLine.d.ts.map +1 -1
- package/dist/api/entity/space.d.ts +484 -251
- package/dist/api/entity/space.d.ts.map +1 -1
- package/dist/api/entity/story.d.ts +49 -39
- package/dist/api/entity/story.d.ts.map +1 -1
- package/dist/api/index.d.ts +22 -12
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/presentation/aiInspiration.d.ts +440 -0
- package/dist/api/presentation/aiInspiration.d.ts.map +1 -0
- package/dist/api/presentation/diagrams.d.ts +81 -0
- package/dist/api/presentation/diagrams.d.ts.map +1 -0
- package/dist/api/presentation/import.d.ts +113 -0
- package/dist/api/presentation/import.d.ts.map +1 -0
- package/dist/api/presentation/index.d.ts +46 -0
- package/dist/api/presentation/index.d.ts.map +1 -0
- package/dist/api/presentation/sheets.d.ts +176 -0
- package/dist/api/presentation/sheets.d.ts.map +1 -0
- package/dist/api/presentation/views.d.ts +296 -0
- package/dist/api/presentation/views.d.ts.map +1 -0
- package/dist/api/program/adjacency.d.ts +155 -0
- package/dist/api/program/adjacency.d.ts.map +1 -0
- package/dist/api/program/areas.d.ts +360 -0
- package/dist/api/program/areas.d.ts.map +1 -0
- package/dist/api/program/classification.d.ts +135 -0
- package/dist/api/program/classification.d.ts.map +1 -0
- package/dist/api/program/cores.d.ts +174 -0
- package/dist/api/program/cores.d.ts.map +1 -0
- package/dist/api/program/departments.d.ts +431 -0
- package/dist/api/program/departments.d.ts.map +1 -0
- package/dist/api/program/index.d.ts +69 -0
- package/dist/api/program/index.d.ts.map +1 -0
- package/dist/api/program/layout.d.ts +63 -0
- package/dist/api/program/layout.d.ts.map +1 -0
- package/dist/api/program/metrics.d.ts +108 -0
- package/dist/api/program/metrics.d.ts.map +1 -0
- package/dist/api/program/site.d.ts +451 -0
- package/dist/api/program/site.d.ts.map +1 -0
- package/dist/api/program/spreadsheet.d.ts +2041 -0
- package/dist/api/program/spreadsheet.d.ts.map +1 -0
- package/dist/handles.d.ts +171 -0
- package/dist/handles.d.ts.map +1 -0
- package/dist/host-utils.d.ts +7 -5
- package/dist/host-utils.d.ts.map +1 -1
- package/dist/index.cjs +4344 -899
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3682 -865
- package/dist/index.js.map +1 -1
- package/package.json +6 -2
- package/scripts/generate-manifest.mjs +193 -0
- package/scripts/generate-manifest.test.mjs +215 -0
- package/src/api/analysis/heatmaps.ts +256 -0
- package/src/api/analysis/illuminance.ts +155 -0
- package/src/api/analysis/index.ts +46 -0
- package/src/api/analysis/shadows.ts +183 -0
- package/src/api/analysis/sunlightHours.ts +211 -0
- package/src/api/analysis/sunpath.ts +83 -0
- package/src/api/core/buildings.ts +485 -0
- package/src/api/core/comment/index.ts +258 -0
- package/src/api/core/geom/create/index.ts +293 -0
- package/src/api/core/geom/delete/index.ts +78 -0
- package/src/api/core/geom/index.ts +24 -23
- package/src/api/core/geom/query/arc.ts +169 -0
- package/src/api/core/geom/query/brep.ts +444 -0
- package/src/api/core/geom/query/circle.ts +404 -0
- package/src/api/core/geom/query/contour.ts +540 -0
- package/src/api/core/geom/query/curve.ts +1078 -0
- package/src/api/core/geom/query/edge.ts +130 -0
- package/src/api/core/geom/query/face.ts +403 -0
- package/src/api/core/geom/query/halfedge.ts +210 -0
- package/src/api/core/geom/query/index.ts +63 -0
- package/src/api/core/geom/query/profile.ts +473 -0
- package/src/api/core/geom/query/vertex.ts +205 -0
- package/src/api/core/geom/update/contour.ts +315 -0
- package/src/api/core/geom/update/curve.ts +209 -0
- package/src/api/core/geom/update/index.ts +29 -0
- package/src/api/core/geom/update/profile.ts +377 -0
- package/src/api/core/groups.ts +521 -0
- package/src/api/core/history/index.ts +84 -0
- package/src/api/core/index.ts +51 -1
- package/src/api/core/io/import/index.ts +432 -0
- package/src/api/core/io/index.ts +37 -0
- package/src/api/core/io/job/index.ts +140 -0
- package/src/api/core/io/query/index.ts +71 -0
- package/src/api/core/io/terrain/index.ts +214 -0
- package/src/api/core/io/underlay/index.ts +295 -0
- package/src/api/core/layers.ts +333 -0
- package/src/api/core/math/quat.ts +112 -235
- package/src/api/core/math/vec3.ts +124 -159
- package/src/api/core/project/index.ts +418 -0
- package/src/api/core/tags.ts +808 -0
- package/src/api/core/units/index.ts +164 -0
- package/src/api/core/zoom/index.ts +47 -0
- package/src/api/design/boolean/index.ts +179 -0
- package/src/api/design/create/index.ts +895 -0
- package/src/api/design/delete/index.ts +67 -0
- package/src/api/design/doors/index.ts +285 -0
- package/src/api/design/edit/index.ts +54 -0
- package/src/api/design/erase/index.ts +151 -0
- package/src/api/design/furniture/index.ts +130 -0
- package/src/api/design/index.ts +162 -0
- package/src/api/design/lock.ts +42 -0
- package/src/api/design/materials/index.ts +301 -0
- package/src/api/design/query/geometry/index.ts +166 -0
- package/src/api/design/query/index.ts +937 -0
- package/src/api/design/query/spaces.ts +132 -0
- package/src/api/design/selection/index.ts +273 -0
- package/src/api/design/shared.ts +40 -0
- package/src/api/design/transform/index.ts +93 -0
- package/src/api/design/update/index.ts +117 -0
- package/src/api/design/windows/index.ts +207 -0
- package/src/api/entity/buildableEnvelope.ts +318 -0
- package/src/api/entity/department.ts +0 -113
- package/src/api/entity/index.ts +9 -9
- package/src/api/entity/referenceLine.ts +50 -38
- package/src/api/entity/space.ts +285 -226
- package/src/api/entity/story.ts +53 -42
- package/src/api/index.ts +22 -12
- package/src/api/presentation/aiInspiration.ts +362 -0
- package/src/api/presentation/diagrams.ts +84 -0
- package/src/api/presentation/import.ts +112 -0
- package/src/api/presentation/index.ts +48 -0
- package/src/api/presentation/sheets.ts +198 -0
- package/src/api/presentation/views.ts +303 -0
- package/src/api/program/adjacency.ts +164 -0
- package/src/api/program/areas.ts +335 -0
- package/src/api/program/classification.ts +138 -0
- package/src/api/program/cores.ts +171 -0
- package/src/api/program/departments.ts +465 -0
- package/src/api/program/index.ts +71 -0
- package/src/api/program/layout.ts +68 -0
- package/src/api/program/metrics.ts +120 -0
- package/src/api/program/site.ts +419 -0
- package/src/api/program/spreadsheet.ts +2075 -0
- package/src/handles.ts +194 -0
- package/src/host-utils.ts +10 -6
- package/src/index.ts +1 -0
- package/dist/api/core/geom/arc.d.ts +0 -81
- package/dist/api/core/geom/arc.d.ts.map +0 -1
- package/dist/api/core/geom/curve.d.ts +0 -70
- package/dist/api/core/geom/curve.d.ts.map +0 -1
- package/dist/api/core/geom/line.d.ts +0 -56
- package/dist/api/core/geom/line.d.ts.map +0 -1
- package/dist/api/core/geom/profile.d.ts +0 -121
- package/dist/api/core/geom/profile.d.ts.map +0 -1
- package/dist/api/tools/copy.d.ts +0 -59
- package/dist/api/tools/copy.d.ts.map +0 -1
- package/dist/api/tools/index.d.ts +0 -33
- package/dist/api/tools/index.d.ts.map +0 -1
- package/dist/api/tools/material.d.ts +0 -51
- package/dist/api/tools/material.d.ts.map +0 -1
- package/dist/api/tools/offset.d.ts +0 -43
- package/dist/api/tools/offset.d.ts.map +0 -1
- package/dist/api/tools/selection.d.ts +0 -48
- package/dist/api/tools/selection.d.ts.map +0 -1
- package/dist/api/tools/transform.d.ts +0 -114
- package/dist/api/tools/transform.d.ts.map +0 -1
- package/dist/api/units/index.d.ts +0 -163
- package/dist/api/units/index.d.ts.map +0 -1
- package/src/api/core/geom/arc.ts +0 -70
- package/src/api/core/geom/curve.ts +0 -41
- package/src/api/core/geom/line.ts +0 -53
- package/src/api/core/geom/profile.ts +0 -94
- package/src/api/tools/copy.ts +0 -55
- package/src/api/tools/index.ts +0 -39
- package/src/api/tools/material.ts +0 -49
- package/src/api/tools/offset.ts +0 -43
- package/src/api/tools/selection.ts +0 -51
- package/src/api/tools/transform.ts +0 -117
- package/src/api/units/index.ts +0 -163
package/src/api/entity/space.ts
CHANGED
|
@@ -1,214 +1,27 @@
|
|
|
1
|
+
// Space value types + schemas. The `entity.space.*` API was removed and its
|
|
2
|
+
// operations migrated to `design.create.spaces` / `design.update.*` /
|
|
3
|
+
// `design.query.*` / `design.delete.entities`. These shared space types survive
|
|
4
|
+
// here because `design.create` / `design.query` / `design.update` import them.
|
|
1
5
|
import * as z from "zod"
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
+
import {
|
|
7
|
+
ProfileHandle,
|
|
8
|
+
Vec3Handle,
|
|
9
|
+
Vec3Components,
|
|
10
|
+
QuatComponents,
|
|
11
|
+
CurveHandle,
|
|
12
|
+
} from "../../handles"
|
|
6
13
|
|
|
7
|
-
/**
|
|
8
|
-
* Space (room/mass) management — create, query, and delete spaces.
|
|
9
|
-
*
|
|
10
|
-
* A **space** is a 3D volume representing a room or mass in the
|
|
11
|
-
* Snaptrude scene. Spaces live on a particular story and carry
|
|
12
|
-
* properties such as name, area, department, and room type.
|
|
13
|
-
*
|
|
14
|
-
* All methods are **host API calls** that return Promises and support
|
|
15
|
-
* undo/redo via Snaptrude's command system.
|
|
16
|
-
*
|
|
17
|
-
* Accessed via `snaptrude.entity.space`.
|
|
18
|
-
*/
|
|
19
|
-
export abstract class PluginSpaceApi {
|
|
20
|
-
constructor() {}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Create a rectangular (box) space.
|
|
24
|
-
*
|
|
25
|
-
* Generates an axis-aligned box with the given dimensions at the
|
|
26
|
-
* specified position. The created space is automatically assigned
|
|
27
|
-
* to the active story and a default department.
|
|
28
|
-
*
|
|
29
|
-
* @param args - An object containing:
|
|
30
|
-
* - {@linkcode PluginSpaceCreateRectangularArgs.position args.position} — Origin
|
|
31
|
-
* position as a {@linkcode PVec3} in Babylon units
|
|
32
|
-
* - {@linkcode PluginSpaceCreateRectangularArgs.dimensions args.dimensions} — Box
|
|
33
|
-
* dimensions `{ width, height, depth }` in Babylon units
|
|
34
|
-
* @returns A {@linkcode PluginSpaceCreateRectangularResult} with the `spaceId`
|
|
35
|
-
* of the created space
|
|
36
|
-
* @throws If space creation fails
|
|
37
|
-
*
|
|
38
|
-
* # Example
|
|
39
|
-
* ```ts
|
|
40
|
-
* const { vec3 } = snaptrude.core.math
|
|
41
|
-
*
|
|
42
|
-
* const { spaceId } = await snaptrude.entity.space.createRectangular({
|
|
43
|
-
* position: vec3.new(0, 0, 0),
|
|
44
|
-
* dimensions: { width: 5, height: 3, depth: 4 },
|
|
45
|
-
* })
|
|
46
|
-
* ```
|
|
47
|
-
*/
|
|
48
|
-
public abstract createRectangular({
|
|
49
|
-
position,
|
|
50
|
-
dimensions,
|
|
51
|
-
}: PluginSpaceCreateRectangularArgs): PluginApiReturn<PluginSpaceCreateRectangularResult>
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Create a space by extruding a 2D profile.
|
|
55
|
-
*
|
|
56
|
-
* The {@linkcode PluginSpaceCreateFromProfileArgs.profile profile} is extruded
|
|
57
|
-
* upward (along the Y axis) by {@linkcode PluginSpaceCreateFromProfileArgs.extrudeHeight
|
|
58
|
-
* extrudeHeight}, then offset by {@linkcode PluginSpaceCreateFromProfileArgs.position
|
|
59
|
-
* position}. The created space is automatically assigned to the active story
|
|
60
|
-
* and a default department.
|
|
61
|
-
*
|
|
62
|
-
* Use {@linkcode PluginProfileApi.fromLinePoints} to quickly build a profile
|
|
63
|
-
* from a list of points.
|
|
64
|
-
*
|
|
65
|
-
* @param args - An object containing:
|
|
66
|
-
* - {@linkcode PluginSpaceCreateFromProfileArgs.profile args.profile} — A closed
|
|
67
|
-
* {@linkcode PProfile} defining the floor shape
|
|
68
|
-
* - {@linkcode PluginSpaceCreateFromProfileArgs.extrudeHeight args.extrudeHeight} —
|
|
69
|
-
* Extrusion height in Babylon units
|
|
70
|
-
* - {@linkcode PluginSpaceCreateFromProfileArgs.position args.position} — Offset
|
|
71
|
-
* position as a {@linkcode PVec3} in Babylon units
|
|
72
|
-
* @returns A {@linkcode PluginSpaceCreateFromProfileResult} with the `spaceId`
|
|
73
|
-
* of the created space
|
|
74
|
-
* @throws If the profile is invalid or mesh creation fails
|
|
75
|
-
*
|
|
76
|
-
* # Example
|
|
77
|
-
* ```ts
|
|
78
|
-
* const { vec3 } = snaptrude.core.math
|
|
79
|
-
*
|
|
80
|
-
* const profile = await snaptrude.core.geom.profile.fromLinePoints({
|
|
81
|
-
* points: [
|
|
82
|
-
* vec3.new(0, 0, 0),
|
|
83
|
-
* vec3.new(10, 0, 0),
|
|
84
|
-
* vec3.new(10, 0, 8),
|
|
85
|
-
* vec3.new(0, 0, 8),
|
|
86
|
-
* ],
|
|
87
|
-
* })
|
|
88
|
-
*
|
|
89
|
-
* const { spaceId } = await snaptrude.entity.space.createFromProfile({
|
|
90
|
-
* profile,
|
|
91
|
-
* extrudeHeight: 3,
|
|
92
|
-
* position: vec3.new(0, 0, 0),
|
|
93
|
-
* })
|
|
94
|
-
* ```
|
|
95
|
-
*/
|
|
96
|
-
public abstract createFromProfile({
|
|
97
|
-
profile,
|
|
98
|
-
extrudeHeight,
|
|
99
|
-
position,
|
|
100
|
-
}: PluginSpaceCreateFromProfileArgs): PluginApiReturn<PluginSpaceCreateFromProfileResult>
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Get the IDs of all spaces in the current project.
|
|
104
|
-
*
|
|
105
|
-
* Returns every space (mass that is not a building) across all stories.
|
|
106
|
-
* Use the returned IDs with {@linkcode PluginSpaceApi.get} to query
|
|
107
|
-
* individual space properties.
|
|
108
|
-
*
|
|
109
|
-
* @returns A {@linkcode PluginSpaceGetAllResult} with a `spacesIds` array
|
|
110
|
-
*
|
|
111
|
-
* # Example
|
|
112
|
-
* ```ts
|
|
113
|
-
* const { spacesIds } = await snaptrude.entity.space.getAll()
|
|
114
|
-
* console.log(`Project has ${spacesIds.length} spaces`)
|
|
115
|
-
* ```
|
|
116
|
-
*/
|
|
117
|
-
public abstract getAll(): PluginApiReturn<PluginSpaceGetAllResult>
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Get properties of a space by its ID.
|
|
121
|
-
*
|
|
122
|
-
* Only the properties listed in {@linkcode PluginSpaceGetArgs.properties
|
|
123
|
-
* args.properties} are returned — unlisted properties will be `undefined`
|
|
124
|
-
* in the result.
|
|
125
|
-
*
|
|
126
|
-
* @param args - An object containing:
|
|
127
|
-
* - {@linkcode PluginSpaceGetArgs.spaceId args.spaceId} — The unique space ID
|
|
128
|
-
* (as returned by creation methods or {@linkcode PluginSpaceApi.getAll})
|
|
129
|
-
* - {@linkcode PluginSpaceGetArgs.properties args.properties} — Array of property
|
|
130
|
-
* names to retrieve. See {@linkcode PluginSpaceGetProperty} for available values.
|
|
131
|
-
* @returns A partial {@linkcode PluginSpaceGetResult} containing only the requested
|
|
132
|
-
* properties
|
|
133
|
-
* @throws If the space does not exist or the component is not a space/mass
|
|
134
|
-
*
|
|
135
|
-
* # Example
|
|
136
|
-
* ```ts
|
|
137
|
-
* const info = await snaptrude.entity.space.get({
|
|
138
|
-
* spaceId: "some-space-id",
|
|
139
|
-
* properties: ["name", "area", "position"],
|
|
140
|
-
* })
|
|
141
|
-
* console.log(info.name, info.area, info.position)
|
|
142
|
-
* ```
|
|
143
|
-
*/
|
|
144
|
-
public abstract get({
|
|
145
|
-
spaceId,
|
|
146
|
-
properties,
|
|
147
|
-
}: PluginSpaceGetArgs): PluginApiReturn<PluginSpaceGetResult>
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Delete a space by its ID.
|
|
151
|
-
*
|
|
152
|
-
* Permanently removes the space and its associated mesh from the scene.
|
|
153
|
-
* This operation is undoable via Snaptrude's command system.
|
|
154
|
-
*
|
|
155
|
-
* @param args - An object containing:
|
|
156
|
-
* - {@linkcode PluginSpaceDeleteArgs.spaceId args.spaceId} — The unique space ID
|
|
157
|
-
* to delete
|
|
158
|
-
* @throws If the space does not exist or the component is not a space/mass
|
|
159
|
-
*
|
|
160
|
-
* # Example
|
|
161
|
-
* ```ts
|
|
162
|
-
* await snaptrude.entity.space.delete({ spaceId: "some-space-id" })
|
|
163
|
-
* ```
|
|
164
|
-
*/
|
|
165
|
-
public abstract delete({
|
|
166
|
-
spaceId,
|
|
167
|
-
}: PluginSpaceDeleteArgs): PluginApiReturn<PluginSpaceDeleteResult>
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Update properties of a space by its ID.
|
|
171
|
-
*
|
|
172
|
-
* Only the properties provided in {@linkcode PluginSpaceUpdateArgs.properties
|
|
173
|
-
* args.properties} will be updated — omitted properties remain unchanged.
|
|
174
|
-
* This operation is undoable via Snaptrude's command system.
|
|
175
|
-
*
|
|
176
|
-
* @param args - An object containing:
|
|
177
|
-
* - {@linkcode PluginSpaceUpdateArgs.spaceId args.spaceId} — The unique space ID
|
|
178
|
-
* to update
|
|
179
|
-
* - {@linkcode PluginSpaceUpdateArgs.properties args.properties} — Key/value pairs
|
|
180
|
-
* of properties to update. See {@linkcode PluginSpaceUpdateArgs} for supported fields.
|
|
181
|
-
* @returns A {@linkcode PluginSpaceUpdateResult} echoing back the `spaceId` and
|
|
182
|
-
* the updated property values
|
|
183
|
-
* @throws If the space does not exist or the component is not a space/mass
|
|
184
|
-
*
|
|
185
|
-
* # Example
|
|
186
|
-
* ```ts
|
|
187
|
-
* const result = await snaptrude.entity.space.update({
|
|
188
|
-
* spaceId: "some-space-id",
|
|
189
|
-
* properties: {
|
|
190
|
-
* room_type: "Kitchen",
|
|
191
|
-
* massType: "Room",
|
|
192
|
-
* departmentId: "CORE",
|
|
193
|
-
* },
|
|
194
|
-
* })
|
|
195
|
-
* ```
|
|
196
|
-
*/
|
|
197
|
-
public abstract update(
|
|
198
|
-
args: PluginSpaceUpdateArgs
|
|
199
|
-
): PluginApiReturn<PluginSpaceUpdateResult>
|
|
200
|
-
}
|
|
201
14
|
|
|
202
15
|
/**
|
|
203
|
-
* Arguments for
|
|
16
|
+
* Arguments for `createRectangular`.
|
|
204
17
|
*
|
|
205
18
|
* | Property | Type | Description |
|
|
206
19
|
* |---|---|---|
|
|
207
|
-
* | `position` | {@linkcode
|
|
20
|
+
* | `position` | {@linkcode Vec3Handle} | Origin position in Babylon units |
|
|
208
21
|
* | `dimensions` | `{ width, height, depth }` | Box dimensions in Babylon units |
|
|
209
22
|
*/
|
|
210
23
|
export const PluginSpaceCreateRectangularArgs = z.object({
|
|
211
|
-
position:
|
|
24
|
+
position: Vec3Handle,
|
|
212
25
|
dimensions: z.object({
|
|
213
26
|
width: z.number(),
|
|
214
27
|
height: z.number(),
|
|
@@ -221,7 +34,7 @@ export type PluginSpaceCreateRectangularArgs = z.infer<
|
|
|
221
34
|
>
|
|
222
35
|
|
|
223
36
|
/**
|
|
224
|
-
* Result of
|
|
37
|
+
* Result of `createRectangular`.
|
|
225
38
|
*
|
|
226
39
|
* | Property | Type | Description |
|
|
227
40
|
* |---|---|---|
|
|
@@ -236,18 +49,20 @@ export type PluginSpaceCreateRectangularResult = z.infer<
|
|
|
236
49
|
>
|
|
237
50
|
|
|
238
51
|
/**
|
|
239
|
-
* Arguments for
|
|
52
|
+
* Arguments for `createFromProfile`.
|
|
240
53
|
*
|
|
241
54
|
* | Property | Type | Description |
|
|
242
55
|
* |---|---|---|
|
|
243
|
-
* | `profile` | {@linkcode
|
|
56
|
+
* | `profile` | {@linkcode ProfileHandle} | Handle to a closed 2D profile (the outer floor shape) |
|
|
57
|
+
* | `innerProfiles` | {@linkcode ProfileHandle}`[]` | Optional profile handles to subtract as holes |
|
|
244
58
|
* | `extrudeHeight` | `number` | Extrusion height in Babylon units |
|
|
245
|
-
* | `position` | {@linkcode
|
|
59
|
+
* | `position` | {@linkcode Vec3Handle} | Offset position in Babylon units |
|
|
246
60
|
*/
|
|
247
61
|
export const PluginSpaceCreateFromProfileArgs = z.object({
|
|
248
|
-
profile:
|
|
62
|
+
profile: ProfileHandle,
|
|
63
|
+
innerProfiles: z.array(ProfileHandle).optional(),
|
|
249
64
|
extrudeHeight: z.number(),
|
|
250
|
-
position:
|
|
65
|
+
position: Vec3Handle,
|
|
251
66
|
})
|
|
252
67
|
|
|
253
68
|
export type PluginSpaceCreateFromProfileArgs = z.infer<
|
|
@@ -255,7 +70,7 @@ export type PluginSpaceCreateFromProfileArgs = z.infer<
|
|
|
255
70
|
>
|
|
256
71
|
|
|
257
72
|
/**
|
|
258
|
-
* Result of
|
|
73
|
+
* Result of `createFromProfile`.
|
|
259
74
|
*
|
|
260
75
|
* | Property | Type | Description |
|
|
261
76
|
* |---|---|---|
|
|
@@ -269,6 +84,40 @@ export type PluginSpaceCreateFromProfileResult = z.infer<
|
|
|
269
84
|
typeof PluginSpaceCreateFromProfileResult
|
|
270
85
|
>
|
|
271
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Arguments for `updateGeometryFromProfile`.
|
|
89
|
+
*
|
|
90
|
+
* | Property | Type | Description |
|
|
91
|
+
* |---|---|---|
|
|
92
|
+
* | `spaceId` | `string` | Space to update |
|
|
93
|
+
* | `profile` | {@linkcode ProfileHandle} | Handle to the closed 2D profile defining the new floor shape |
|
|
94
|
+
* | `extrudeHeight` | `number` | New extrusion height in Babylon units |
|
|
95
|
+
*/
|
|
96
|
+
export const PluginSpaceUpdateGeometryFromProfileArgs = z.object({
|
|
97
|
+
spaceId: z.string(),
|
|
98
|
+
profile: ProfileHandle,
|
|
99
|
+
extrudeHeight: z.number(),
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
export type PluginSpaceUpdateGeometryFromProfileArgs = z.infer<
|
|
103
|
+
typeof PluginSpaceUpdateGeometryFromProfileArgs
|
|
104
|
+
>
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Result of `updateGeometryFromProfile`.
|
|
108
|
+
*
|
|
109
|
+
* | Property | Type | Description |
|
|
110
|
+
* |---|---|---|
|
|
111
|
+
* | `spaceId` | `string` | Unique ID of the updated space |
|
|
112
|
+
*/
|
|
113
|
+
export const PluginSpaceUpdateGeometryFromProfileResult = z.object({
|
|
114
|
+
spaceId: z.string(),
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
export type PluginSpaceUpdateGeometryFromProfileResult = z.infer<
|
|
118
|
+
typeof PluginSpaceUpdateGeometryFromProfileResult
|
|
119
|
+
>
|
|
120
|
+
|
|
272
121
|
/**
|
|
273
122
|
* Available properties that can be queried on a space.
|
|
274
123
|
*
|
|
@@ -297,15 +146,23 @@ export type PluginSpaceCreateFromProfileResult = z.infer<
|
|
|
297
146
|
* **Derived from mesh:**
|
|
298
147
|
* | Value | Return Type | Description |
|
|
299
148
|
* |---|---|---|
|
|
300
|
-
* | `"position"` | {@linkcode
|
|
301
|
-
* | `"absolutePosition"` | {@linkcode
|
|
302
|
-
* | `"rotation"` | {@linkcode
|
|
303
|
-
* | `"rotationQuaternion"` | {@linkcode
|
|
149
|
+
* | `"position"` | {@linkcode Vec3Components} | Local position relative to parent |
|
|
150
|
+
* | `"absolutePosition"` | {@linkcode Vec3Components} | Absolute position in the scene |
|
|
151
|
+
* | `"rotation"` | {@linkcode Vec3Components} | Euler rotation angles (radians) |
|
|
152
|
+
* | `"rotationQuaternion"` | {@linkcode QuatComponents} \| `null` | Quaternion rotation, or `null` if unset |
|
|
304
153
|
*
|
|
305
154
|
* **Derived from brep:**
|
|
306
155
|
* | Value | Return Type | Description |
|
|
307
156
|
* |---|---|---|
|
|
308
|
-
* | `"planPoints"` | {@linkcode
|
|
157
|
+
* | `"planPoints"` | {@linkcode Vec3Components}`[]` | Bottom outer profile points in world space with `y = 0` (2D plan). No closing duplicate point. |
|
|
158
|
+
* | `"profile"` | {@linkcode CurveHandle}`[]` | Bottom outer profile curves in world space, as opaque curve handles. Read coordinates via the `core.geom.curve` read API. |
|
|
159
|
+
* | `"innerProfiles"` | {@linkcode CurveHandle}`[][]` | Inner (hole) profile curve loops in world space — one loop per hole, `[]` when the space has none. Each curve is an opaque handle. |
|
|
160
|
+
* | `"innerPlanPoints"` | {@linkcode Vec3Components}`[][]` | Inner (hole) profile points in world space with `y = 0` — one loop per hole, no closing duplicate, `[]` when none. |
|
|
161
|
+
*
|
|
162
|
+
* **Derived from adjacency manager:**
|
|
163
|
+
* | Value | Return Type | Description |
|
|
164
|
+
* |---|---|---|
|
|
165
|
+
* | `"adjacency"` | `{ spaceId: string; value: number }[]` | Adjacency relationships to other spaces. `value`: `2` = Direct (required), `1` = Indirect or physical contact, `-1` = Restricted; `0` (no relationship) entries are filtered out. Empty when adjacency has never been computed — see `program.adjacency.compute`. |
|
|
309
166
|
*/
|
|
310
167
|
export const PluginSpaceGetProperty = z.enum([
|
|
311
168
|
// Basic
|
|
@@ -320,6 +177,7 @@ export const PluginSpaceGetProperty = z.enum([
|
|
|
320
177
|
"height",
|
|
321
178
|
"massType",
|
|
322
179
|
"spaceType",
|
|
180
|
+
"areaClass",
|
|
323
181
|
"storey",
|
|
324
182
|
"departmentId",
|
|
325
183
|
"departmentName",
|
|
@@ -331,10 +189,15 @@ export const PluginSpaceGetProperty = z.enum([
|
|
|
331
189
|
"rotationQuaternion",
|
|
332
190
|
// Derived from brep
|
|
333
191
|
"planPoints",
|
|
192
|
+
"profile",
|
|
193
|
+
"innerProfiles",
|
|
194
|
+
"innerPlanPoints",
|
|
195
|
+
// Derived from adjacency manager
|
|
196
|
+
"adjacency",
|
|
334
197
|
])
|
|
335
198
|
|
|
336
199
|
/**
|
|
337
|
-
* Arguments for
|
|
200
|
+
* Arguments for `get`.
|
|
338
201
|
*
|
|
339
202
|
* | Property | Type | Description |
|
|
340
203
|
* |---|---|---|
|
|
@@ -376,11 +239,24 @@ export const PluginSpaceType = z.enum([
|
|
|
376
239
|
"Pool",
|
|
377
240
|
"Walkway",
|
|
378
241
|
"Envelope",
|
|
379
|
-
"Parking"
|
|
242
|
+
"Parking",
|
|
380
243
|
])
|
|
244
|
+
/** The space-type value union (same-name type alias for positional signatures). */
|
|
245
|
+
export type PluginSpaceType = z.infer<typeof PluginSpaceType>
|
|
381
246
|
|
|
382
247
|
/**
|
|
383
|
-
*
|
|
248
|
+
* Area-class classification of a space (mirrors the internal `AreaClass` enum).
|
|
249
|
+
*
|
|
250
|
+
* | Value | Description |
|
|
251
|
+
* |---|---|
|
|
252
|
+
* | `"NET"` | Net (usable) area |
|
|
253
|
+
* | `"GROSS"` | Gross area |
|
|
254
|
+
* | `"EXCLUDED"` | Excluded from area totals |
|
|
255
|
+
*/
|
|
256
|
+
export const PluginAreaClass = z.enum(["NET", "GROSS", "EXCLUDED"])
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Result of `get`.
|
|
384
260
|
*
|
|
385
261
|
* A partial object — only the properties that were requested in
|
|
386
262
|
* {@linkcode PluginSpaceGetArgs.properties} will be present.
|
|
@@ -399,24 +275,36 @@ export const PluginSpaceGetResult = z
|
|
|
399
275
|
height: z.number(),
|
|
400
276
|
massType: z.string().nullable(),
|
|
401
277
|
spaceType: PluginSpaceType.nullable(),
|
|
278
|
+
areaClass: PluginAreaClass,
|
|
402
279
|
storey: z.number().nullable(),
|
|
403
280
|
departmentId: z.string().nullable(),
|
|
404
281
|
departmentName: z.string(),
|
|
405
282
|
departmentColor: z.string(),
|
|
406
283
|
// Derived from mesh
|
|
407
|
-
position:
|
|
408
|
-
absolutePosition:
|
|
409
|
-
rotation:
|
|
410
|
-
rotationQuaternion:
|
|
284
|
+
position: Vec3Components,
|
|
285
|
+
absolutePosition: Vec3Components,
|
|
286
|
+
rotation: Vec3Components,
|
|
287
|
+
rotationQuaternion: QuatComponents.nullable(),
|
|
411
288
|
// Derived from brep
|
|
412
|
-
planPoints: z.array(
|
|
289
|
+
planPoints: z.array(Vec3Components),
|
|
290
|
+
profile: z.array(CurveHandle),
|
|
291
|
+
innerProfiles: z.array(z.array(CurveHandle)),
|
|
292
|
+
innerPlanPoints: z.array(z.array(Vec3Components)),
|
|
293
|
+
// Derived from adjacency manager.
|
|
294
|
+
// value: 2 = Direct (required), 1 = Indirect or physical contact, -1 = Restricted;
|
|
295
|
+
// 0 (no relationship) entries are filtered out. Empty array when adjacency has
|
|
296
|
+
// never been computed — run program.adjacency.compute() first for fresh data.
|
|
297
|
+
adjacency: z.array(z.object({
|
|
298
|
+
spaceId: z.string(),
|
|
299
|
+
value: z.number(),
|
|
300
|
+
})),
|
|
413
301
|
})
|
|
414
302
|
.partial()
|
|
415
303
|
|
|
416
304
|
export type PluginSpaceGetResult = z.infer<typeof PluginSpaceGetResult>
|
|
417
305
|
|
|
418
306
|
/**
|
|
419
|
-
* Result of
|
|
307
|
+
* Result of `getAll`.
|
|
420
308
|
*
|
|
421
309
|
* | Property | Type | Description |
|
|
422
310
|
* |---|---|---|
|
|
@@ -429,7 +317,7 @@ export const PluginSpaceGetAllResult = z.object({
|
|
|
429
317
|
export type PluginSpaceGetAllResult = z.infer<typeof PluginSpaceGetAllResult>
|
|
430
318
|
|
|
431
319
|
/**
|
|
432
|
-
* Arguments for
|
|
320
|
+
* Arguments for `delete`.
|
|
433
321
|
*
|
|
434
322
|
* | Property | Type | Description |
|
|
435
323
|
* |---|---|---|
|
|
@@ -441,7 +329,7 @@ export const PluginSpaceDeleteArgs = z.object({
|
|
|
441
329
|
|
|
442
330
|
export type PluginSpaceDeleteArgs = z.infer<typeof PluginSpaceDeleteArgs>
|
|
443
331
|
|
|
444
|
-
/** Result type for
|
|
332
|
+
/** Result type for `delete` — returns nothing on success. */
|
|
445
333
|
export type PluginSpaceDeleteResult = void
|
|
446
334
|
|
|
447
335
|
/**
|
|
@@ -478,6 +366,8 @@ export const PluginMassType = z.enum([
|
|
|
478
366
|
"Mass",
|
|
479
367
|
"Site",
|
|
480
368
|
])
|
|
369
|
+
/** The mass-type value union (same-name type alias for positional signatures). */
|
|
370
|
+
export type PluginMassType = z.infer<typeof PluginMassType>
|
|
481
371
|
|
|
482
372
|
/**
|
|
483
373
|
* Well-known (built-in) department IDs.
|
|
@@ -504,9 +394,11 @@ export const PluginDepartmentId = z.union([
|
|
|
504
394
|
PluginWellKnownDepartmentId,
|
|
505
395
|
z.uuid(),
|
|
506
396
|
])
|
|
397
|
+
/** The department-id value union (same-name type alias for positional signatures). */
|
|
398
|
+
export type PluginDepartmentId = z.infer<typeof PluginDepartmentId>
|
|
507
399
|
|
|
508
400
|
/**
|
|
509
|
-
* Arguments for
|
|
401
|
+
* Arguments for `update`.
|
|
510
402
|
*
|
|
511
403
|
* | Property | Type | Description |
|
|
512
404
|
* |---|---|---|
|
|
@@ -522,6 +414,7 @@ export const PluginSpaceUpdateArgs = z.object({
|
|
|
522
414
|
room_type: z.string().optional(),
|
|
523
415
|
massType: PluginMassType.optional(),
|
|
524
416
|
spaceType: PluginSpaceType.optional(),
|
|
417
|
+
areaClass: PluginAreaClass.optional(),
|
|
525
418
|
departmentId: PluginDepartmentId.optional(),
|
|
526
419
|
}),
|
|
527
420
|
})
|
|
@@ -529,7 +422,7 @@ export const PluginSpaceUpdateArgs = z.object({
|
|
|
529
422
|
export type PluginSpaceUpdateArgs = z.infer<typeof PluginSpaceUpdateArgs>
|
|
530
423
|
|
|
531
424
|
/**
|
|
532
|
-
* Result of
|
|
425
|
+
* Result of `update`.
|
|
533
426
|
*
|
|
534
427
|
* Echoes back the `spaceId` and the values of properties that were updated.
|
|
535
428
|
* Properties that were not included in the update request will be `undefined`.
|
|
@@ -547,7 +440,173 @@ export const PluginSpaceUpdateResult = z.object({
|
|
|
547
440
|
room_type: z.string().optional(),
|
|
548
441
|
massType: z.string().optional(),
|
|
549
442
|
spaceType: z.string().optional(),
|
|
443
|
+
areaClass: PluginAreaClass.optional(),
|
|
550
444
|
departmentId: z.string().nullable().optional(),
|
|
551
445
|
})
|
|
552
446
|
|
|
553
447
|
export type PluginSpaceUpdateResult = z.infer<typeof PluginSpaceUpdateResult>
|
|
448
|
+
|
|
449
|
+
// ---------------------------------------------------------------------------
|
|
450
|
+
// Bulk operations
|
|
451
|
+
// ---------------------------------------------------------------------------
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* A single item for `bulkCreate`.
|
|
455
|
+
*
|
|
456
|
+
* Discriminated on `kind`:
|
|
457
|
+
* - `"rectangular"` — a box defined by `position` + `dimensions` (mirrors
|
|
458
|
+
* {@linkcode PluginSpaceCreateRectangularArgs})
|
|
459
|
+
* - `"profile"` — an extruded `profile` (with optional `innerProfiles`) by
|
|
460
|
+
* `extrudeHeight` at `position` (mirrors {@linkcode PluginSpaceCreateFromProfileArgs})
|
|
461
|
+
*
|
|
462
|
+
* Every item may optionally set `room_type`, `spaceType`, `massType`, and
|
|
463
|
+
* `departmentId`; these are applied within the same single undo step as the
|
|
464
|
+
* creation.
|
|
465
|
+
*/
|
|
466
|
+
export const PluginSpaceBulkCreateItem = z.discriminatedUnion("kind", [
|
|
467
|
+
z.object({
|
|
468
|
+
kind: z.literal("rectangular"),
|
|
469
|
+
position: Vec3Handle,
|
|
470
|
+
dimensions: z.object({
|
|
471
|
+
width: z.number(),
|
|
472
|
+
height: z.number(),
|
|
473
|
+
depth: z.number(),
|
|
474
|
+
}),
|
|
475
|
+
room_type: z.string().optional(),
|
|
476
|
+
spaceType: PluginSpaceType.optional(),
|
|
477
|
+
massType: PluginMassType.optional(),
|
|
478
|
+
departmentId: PluginDepartmentId.optional(),
|
|
479
|
+
}),
|
|
480
|
+
z.object({
|
|
481
|
+
kind: z.literal("profile"),
|
|
482
|
+
profile: ProfileHandle,
|
|
483
|
+
innerProfiles: z.array(ProfileHandle).optional(),
|
|
484
|
+
extrudeHeight: z.number(),
|
|
485
|
+
position: Vec3Handle,
|
|
486
|
+
room_type: z.string().optional(),
|
|
487
|
+
spaceType: PluginSpaceType.optional(),
|
|
488
|
+
massType: PluginMassType.optional(),
|
|
489
|
+
departmentId: PluginDepartmentId.optional(),
|
|
490
|
+
}),
|
|
491
|
+
])
|
|
492
|
+
|
|
493
|
+
export type PluginSpaceBulkCreateItem = z.infer<typeof PluginSpaceBulkCreateItem>
|
|
494
|
+
|
|
495
|
+
/**
|
|
496
|
+
* Arguments for `bulkCreate`.
|
|
497
|
+
*
|
|
498
|
+
* | Property | Type | Description |
|
|
499
|
+
* |---|---|---|
|
|
500
|
+
* | `items` | {@linkcode PluginSpaceBulkCreateItem}`[]` | Spaces to create |
|
|
501
|
+
*/
|
|
502
|
+
export const PluginSpaceBulkCreateArgs = z.object({
|
|
503
|
+
items: z.array(PluginSpaceBulkCreateItem),
|
|
504
|
+
})
|
|
505
|
+
|
|
506
|
+
export type PluginSpaceBulkCreateArgs = z.infer<typeof PluginSpaceBulkCreateArgs>
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Result of `bulkCreate`.
|
|
510
|
+
*
|
|
511
|
+
* | Property | Type | Description |
|
|
512
|
+
* |---|---|---|
|
|
513
|
+
* | `spaceIds` | `string[]` | IDs of the created spaces, in input order |
|
|
514
|
+
*/
|
|
515
|
+
export const PluginSpaceBulkCreateResult = z.object({
|
|
516
|
+
spaceIds: z.array(z.string()),
|
|
517
|
+
})
|
|
518
|
+
|
|
519
|
+
export type PluginSpaceBulkCreateResult = z.infer<
|
|
520
|
+
typeof PluginSpaceBulkCreateResult
|
|
521
|
+
>
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* A single item for `bulkUpdate`.
|
|
525
|
+
*
|
|
526
|
+
* Targets an existing space by `spaceId`. Geometry fields `profile` and
|
|
527
|
+
* `extrudeHeight` must be supplied **together** (mirrors
|
|
528
|
+
* {@linkcode PluginSpaceUpdateGeometryFromProfileArgs}). Property changes are
|
|
529
|
+
* nested under `properties`, mirroring {@linkcode PluginSpaceUpdateArgs}.
|
|
530
|
+
*
|
|
531
|
+
* | Property | Type | Description |
|
|
532
|
+
* |---|---|---|
|
|
533
|
+
* | `spaceId` | `string` | The space to update |
|
|
534
|
+
* | `profile` | {@linkcode ProfileHandle}`?` | New floor shape handle (requires `extrudeHeight`) |
|
|
535
|
+
* | `extrudeHeight` | `number?` | New extrusion height (requires `profile`) |
|
|
536
|
+
* | `properties` | `object?` | Property changes (same shape as {@linkcode PluginSpaceUpdateArgs.properties}) |
|
|
537
|
+
*/
|
|
538
|
+
export const PluginSpaceBulkUpdateItem = z.object({
|
|
539
|
+
spaceId: z.string(),
|
|
540
|
+
profile: ProfileHandle.optional(),
|
|
541
|
+
extrudeHeight: z.number().optional(),
|
|
542
|
+
properties: z
|
|
543
|
+
.object({
|
|
544
|
+
room_type: z.string().optional(),
|
|
545
|
+
massType: PluginMassType.optional(),
|
|
546
|
+
spaceType: PluginSpaceType.optional(),
|
|
547
|
+
areaClass: PluginAreaClass.optional(),
|
|
548
|
+
departmentId: PluginDepartmentId.optional(),
|
|
549
|
+
})
|
|
550
|
+
.optional(),
|
|
551
|
+
})
|
|
552
|
+
|
|
553
|
+
export type PluginSpaceBulkUpdateItem = z.infer<typeof PluginSpaceBulkUpdateItem>
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* Arguments for `bulkUpdate`.
|
|
557
|
+
*
|
|
558
|
+
* | Property | Type | Description |
|
|
559
|
+
* |---|---|---|
|
|
560
|
+
* | `items` | {@linkcode PluginSpaceBulkUpdateItem}`[]` | Spaces to update |
|
|
561
|
+
*/
|
|
562
|
+
export const PluginSpaceBulkUpdateArgs = z.object({
|
|
563
|
+
items: z.array(PluginSpaceBulkUpdateItem),
|
|
564
|
+
})
|
|
565
|
+
|
|
566
|
+
export type PluginSpaceBulkUpdateArgs = z.infer<typeof PluginSpaceBulkUpdateArgs>
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* Result of `bulkUpdate`.
|
|
570
|
+
*
|
|
571
|
+
* Echoes one {@linkcode PluginSpaceUpdateResult} per item, in input order —
|
|
572
|
+
* the same per-space shape returned by `update`.
|
|
573
|
+
*
|
|
574
|
+
* | Property | Type | Description |
|
|
575
|
+
* |---|---|---|
|
|
576
|
+
* | `spaces` | {@linkcode PluginSpaceUpdateResult}`[]` | Per-item updated values, in input order |
|
|
577
|
+
*/
|
|
578
|
+
export const PluginSpaceBulkUpdateResult = z.object({
|
|
579
|
+
spaces: z.array(PluginSpaceUpdateResult),
|
|
580
|
+
})
|
|
581
|
+
|
|
582
|
+
export type PluginSpaceBulkUpdateResult = z.infer<
|
|
583
|
+
typeof PluginSpaceBulkUpdateResult
|
|
584
|
+
>
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* Arguments for `bulkDelete`.
|
|
588
|
+
*
|
|
589
|
+
* | Property | Type | Description |
|
|
590
|
+
* |---|---|---|
|
|
591
|
+
* | `spaceIds` | `string[]` | The space IDs to delete |
|
|
592
|
+
*/
|
|
593
|
+
export const PluginSpaceBulkDeleteArgs = z.object({
|
|
594
|
+
spaceIds: z.array(z.string()),
|
|
595
|
+
})
|
|
596
|
+
|
|
597
|
+
export type PluginSpaceBulkDeleteArgs = z.infer<typeof PluginSpaceBulkDeleteArgs>
|
|
598
|
+
|
|
599
|
+
/**
|
|
600
|
+
* Result of `bulkDelete`.
|
|
601
|
+
*
|
|
602
|
+
* | Property | Type | Description |
|
|
603
|
+
* |---|---|---|
|
|
604
|
+
* | `deletedSpaceIds` | `string[]` | The space IDs that were removed |
|
|
605
|
+
*/
|
|
606
|
+
export const PluginSpaceBulkDeleteResult = z.object({
|
|
607
|
+
deletedSpaceIds: z.array(z.string()),
|
|
608
|
+
})
|
|
609
|
+
|
|
610
|
+
export type PluginSpaceBulkDeleteResult = z.infer<
|
|
611
|
+
typeof PluginSpaceBulkDeleteResult
|
|
612
|
+
>
|