@snaptrude/plugin-core 0.7.1 → 0.9.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.
Files changed (193) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/api-manifest.full.json +7703 -0
  3. package/api-manifest.json +2946 -259
  4. package/dist/api/analysis/daylight.d.ts +603 -0
  5. package/dist/api/analysis/daylight.d.ts.map +1 -0
  6. package/dist/api/analysis/heatmaps.d.ts +438 -14
  7. package/dist/api/analysis/heatmaps.d.ts.map +1 -1
  8. package/dist/api/analysis/index.d.ts +15 -0
  9. package/dist/api/analysis/index.d.ts.map +1 -1
  10. package/dist/api/analysis/solar.d.ts +249 -0
  11. package/dist/api/analysis/solar.d.ts.map +1 -0
  12. package/dist/api/analysis/weather.d.ts +193 -0
  13. package/dist/api/analysis/weather.d.ts.map +1 -0
  14. package/dist/api/core/camera/index.d.ts +245 -0
  15. package/dist/api/core/camera/index.d.ts.map +1 -0
  16. package/dist/api/core/comment/index.d.ts +105 -2
  17. package/dist/api/core/comment/index.d.ts.map +1 -1
  18. package/dist/api/core/geom/create/index.d.ts +331 -14
  19. package/dist/api/core/geom/create/index.d.ts.map +1 -1
  20. package/dist/api/core/geom/delete/index.d.ts +8 -2
  21. package/dist/api/core/geom/delete/index.d.ts.map +1 -1
  22. package/dist/api/core/geom/query/arc.d.ts +5 -5
  23. package/dist/api/core/geom/query/brep.d.ts +18 -18
  24. package/dist/api/core/geom/query/circle.d.ts +18 -18
  25. package/dist/api/core/geom/query/contour.d.ts +20 -20
  26. package/dist/api/core/geom/query/curve.d.ts +49 -49
  27. package/dist/api/core/geom/query/edge.d.ts +5 -5
  28. package/dist/api/core/geom/query/face.d.ts +16 -16
  29. package/dist/api/core/geom/query/halfedge.d.ts +8 -8
  30. package/dist/api/core/geom/query/profile.d.ts +19 -19
  31. package/dist/api/core/geom/query/vertex.d.ts +8 -8
  32. package/dist/api/core/geom/update/contour.d.ts +14 -14
  33. package/dist/api/core/geom/update/curve.d.ts +7 -7
  34. package/dist/api/core/geom/update/profile.d.ts +16 -16
  35. package/dist/api/core/handles/index.d.ts +210 -0
  36. package/dist/api/core/handles/index.d.ts.map +1 -0
  37. package/dist/api/core/index.d.ts +24 -0
  38. package/dist/api/core/index.d.ts.map +1 -1
  39. package/dist/api/core/io/export/index.d.ts +134 -0
  40. package/dist/api/core/io/export/index.d.ts.map +1 -0
  41. package/dist/api/core/io/import/index.d.ts +62 -1
  42. package/dist/api/core/io/import/index.d.ts.map +1 -1
  43. package/dist/api/core/io/index.d.ts +5 -0
  44. package/dist/api/core/io/index.d.ts.map +1 -1
  45. package/dist/api/core/layers.d.ts +7 -7
  46. package/dist/api/core/mode/index.d.ts +99 -0
  47. package/dist/api/core/mode/index.d.ts.map +1 -0
  48. package/dist/api/core/proposals/index.d.ts +65 -9
  49. package/dist/api/core/proposals/index.d.ts.map +1 -1
  50. package/dist/api/core/storeys/index.d.ts +251 -0
  51. package/dist/api/core/storeys/index.d.ts.map +1 -0
  52. package/dist/api/core/tags.d.ts +24 -0
  53. package/dist/api/core/tags.d.ts.map +1 -1
  54. package/dist/api/core/user.d.ts +44 -0
  55. package/dist/api/core/user.d.ts.map +1 -0
  56. package/dist/api/core/zoom/index.d.ts +4 -0
  57. package/dist/api/core/zoom/index.d.ts.map +1 -1
  58. package/dist/api/design/boolean/index.d.ts +4 -4
  59. package/dist/api/design/create/index.d.ts +253 -47
  60. package/dist/api/design/create/index.d.ts.map +1 -1
  61. package/dist/api/design/delete/index.d.ts +3 -0
  62. package/dist/api/design/delete/index.d.ts.map +1 -1
  63. package/dist/api/design/doors/index.d.ts +36 -0
  64. package/dist/api/design/doors/index.d.ts.map +1 -1
  65. package/dist/api/design/edit/index.d.ts +1 -1
  66. package/dist/api/design/erase/index.d.ts +2 -2
  67. package/dist/api/design/furniture/index.d.ts +114 -3
  68. package/dist/api/design/furniture/index.d.ts.map +1 -1
  69. package/dist/api/design/index.d.ts +10 -0
  70. package/dist/api/design/index.d.ts.map +1 -1
  71. package/dist/api/design/materials/index.d.ts +111 -14
  72. package/dist/api/design/materials/index.d.ts.map +1 -1
  73. package/dist/api/design/query/geometry/index.d.ts +112 -0
  74. package/dist/api/design/query/geometry/index.d.ts.map +1 -1
  75. package/dist/api/design/query/index.d.ts +35 -1
  76. package/dist/api/design/query/index.d.ts.map +1 -1
  77. package/dist/api/design/query/referenceLines.d.ts +45 -0
  78. package/dist/api/design/query/referenceLines.d.ts.map +1 -0
  79. package/dist/api/design/query/spaces.d.ts +178 -5
  80. package/dist/api/design/query/spaces.d.ts.map +1 -1
  81. package/dist/api/design/transform/index.d.ts +95 -14
  82. package/dist/api/design/transform/index.d.ts.map +1 -1
  83. package/dist/api/design/types/index.d.ts +181 -0
  84. package/dist/api/design/types/index.d.ts.map +1 -0
  85. package/dist/api/design/update/index.d.ts +385 -2
  86. package/dist/api/design/update/index.d.ts.map +1 -1
  87. package/dist/api/design/visibility.d.ts +98 -0
  88. package/dist/api/design/visibility.d.ts.map +1 -0
  89. package/dist/api/entity/buildableEnvelope.d.ts +4 -0
  90. package/dist/api/entity/buildableEnvelope.d.ts.map +1 -1
  91. package/dist/api/entity/referenceLine.d.ts +10 -2
  92. package/dist/api/entity/referenceLine.d.ts.map +1 -1
  93. package/dist/api/entity/space.d.ts +19 -19
  94. package/dist/api/entity/story.d.ts +148 -15
  95. package/dist/api/entity/story.d.ts.map +1 -1
  96. package/dist/api/index.d.ts +5 -0
  97. package/dist/api/index.d.ts.map +1 -1
  98. package/dist/api/presentation/annotate.d.ts +448 -0
  99. package/dist/api/presentation/annotate.d.ts.map +1 -0
  100. package/dist/api/presentation/diagrams.d.ts +49 -8
  101. package/dist/api/presentation/diagrams.d.ts.map +1 -1
  102. package/dist/api/presentation/export.d.ts +108 -0
  103. package/dist/api/presentation/export.d.ts.map +1 -0
  104. package/dist/api/presentation/import.d.ts +6 -0
  105. package/dist/api/presentation/import.d.ts.map +1 -1
  106. package/dist/api/presentation/index.d.ts +47 -0
  107. package/dist/api/presentation/index.d.ts.map +1 -1
  108. package/dist/api/presentation/placedViews.d.ts +370 -0
  109. package/dist/api/presentation/placedViews.d.ts.map +1 -0
  110. package/dist/api/presentation/shapes.d.ts +481 -0
  111. package/dist/api/presentation/shapes.d.ts.map +1 -0
  112. package/dist/api/presentation/sheets.d.ts +410 -13
  113. package/dist/api/presentation/sheets.d.ts.map +1 -1
  114. package/dist/api/presentation/views.d.ts +165 -10
  115. package/dist/api/presentation/views.d.ts.map +1 -1
  116. package/dist/api/program/areas.d.ts +63 -3
  117. package/dist/api/program/areas.d.ts.map +1 -1
  118. package/dist/api/program/cores.d.ts +3 -99
  119. package/dist/api/program/cores.d.ts.map +1 -1
  120. package/dist/api/program/index.d.ts +2 -2
  121. package/dist/api/program/index.d.ts.map +1 -1
  122. package/dist/api/program/layout.d.ts +172 -12
  123. package/dist/api/program/layout.d.ts.map +1 -1
  124. package/dist/api/program/site.d.ts +105 -8
  125. package/dist/api/program/site.d.ts.map +1 -1
  126. package/dist/api/program/spreadsheet.d.ts +365 -41
  127. package/dist/api/program/spreadsheet.d.ts.map +1 -1
  128. package/dist/api/workspace/index.d.ts +460 -0
  129. package/dist/api/workspace/index.d.ts.map +1 -0
  130. package/dist/handles.d.ts +64 -25
  131. package/dist/handles.d.ts.map +1 -1
  132. package/dist/index.cjs +3210 -1671
  133. package/dist/index.cjs.map +1 -1
  134. package/dist/index.js +3008 -1666
  135. package/dist/index.js.map +1 -1
  136. package/package.json +3 -2
  137. package/scripts/generate-manifest.mjs +45 -0
  138. package/src/api/analysis/daylight.ts +470 -0
  139. package/src/api/analysis/heatmaps.ts +444 -17
  140. package/src/api/analysis/index.ts +15 -0
  141. package/src/api/analysis/solar.ts +237 -0
  142. package/src/api/analysis/weather.ts +179 -0
  143. package/src/api/core/camera/index.ts +251 -0
  144. package/src/api/core/comment/index.ts +120 -2
  145. package/src/api/core/geom/create/index.ts +344 -1
  146. package/src/api/core/geom/delete/index.ts +6 -0
  147. package/src/api/core/handles/index.ts +233 -0
  148. package/src/api/core/index.ts +24 -0
  149. package/src/api/core/io/export/index.ts +126 -0
  150. package/src/api/core/io/import/index.ts +64 -0
  151. package/src/api/core/io/index.ts +5 -0
  152. package/src/api/core/mode/index.ts +96 -0
  153. package/src/api/core/proposals/index.ts +71 -11
  154. package/src/api/core/storeys/index.ts +279 -0
  155. package/src/api/core/tags.ts +27 -0
  156. package/src/api/core/user.ts +46 -0
  157. package/src/api/core/zoom/index.ts +4 -0
  158. package/src/api/design/create/index.ts +303 -36
  159. package/src/api/design/delete/index.ts +3 -0
  160. package/src/api/design/doors/index.ts +40 -0
  161. package/src/api/design/furniture/index.ts +127 -3
  162. package/src/api/design/index.ts +10 -0
  163. package/src/api/design/materials/index.ts +157 -30
  164. package/src/api/design/query/geometry/index.ts +125 -3
  165. package/src/api/design/query/index.ts +37 -7
  166. package/src/api/design/query/referenceLines.ts +52 -0
  167. package/src/api/design/query/spaces.ts +143 -0
  168. package/src/api/design/transform/index.ts +101 -12
  169. package/src/api/design/types/index.ts +156 -0
  170. package/src/api/design/update/index.ts +467 -6
  171. package/src/api/design/visibility.ts +109 -0
  172. package/src/api/entity/buildableEnvelope.ts +4 -0
  173. package/src/api/entity/referenceLine.ts +8 -0
  174. package/src/api/entity/story.ts +161 -15
  175. package/src/api/index.ts +5 -0
  176. package/src/api/presentation/annotate.ts +360 -0
  177. package/src/api/presentation/diagrams.ts +53 -8
  178. package/src/api/presentation/export.ts +108 -0
  179. package/src/api/presentation/import.ts +6 -0
  180. package/src/api/presentation/index.ts +55 -0
  181. package/src/api/presentation/placedViews.ts +363 -0
  182. package/src/api/presentation/shapes.ts +274 -0
  183. package/src/api/presentation/sheets.ts +346 -13
  184. package/src/api/presentation/views.ts +164 -12
  185. package/src/api/program/areas.ts +57 -6
  186. package/src/api/program/cores.ts +3 -91
  187. package/src/api/program/index.ts +2 -2
  188. package/src/api/program/layout.ts +182 -12
  189. package/src/api/program/site.ts +106 -8
  190. package/src/api/program/spreadsheet.ts +376 -35
  191. package/src/api/workspace/index.ts +516 -0
  192. package/src/handles.ts +77 -13
  193. package/tsconfig.json +7 -2
@@ -1,7 +1,8 @@
1
1
  import * as z from "zod";
2
2
  import { PluginApiReturn } from "../../../types";
3
- import { ComponentHandle, ContourHandle, ProfileHandle, Vec3Handle } from "../../../handles";
3
+ import { BrepHandle, ComponentHandle, ContourHandle, ProfileHandle, Vec3Handle } from "../../../handles";
4
4
  import { PluginSpaceType, PluginMassType, PluginDepartmentId } from "../../entity/space";
5
+ import { PluginBuildableEnvelopePolygonVertex, PluginBuildableEnvelopeSetbackTier, PluginBuildableEnvelopeVerticalCap, PluginBuildableEnvelopeCreateResult } from "../../entity/buildableEnvelope";
5
6
  /**
6
7
  * `design.create.*` — author new scene-committed BIM entities.
7
8
  *
@@ -39,14 +40,25 @@ export declare abstract class PluginDesignCreateApi {
39
40
  * @param spaceType - Space-type classification (default `Room`)
40
41
  * @param massType - Mass-type classification (default `Room`)
41
42
  * @param departmentId - Department assignment (default department)
43
+ * @param storey - Target storey number to place the space on — the same integer
44
+ * `entity.story` uses (`1` ground, `2` first floor, `-1` basement). Default:
45
+ * the active storey. Folds a `core.storeys.setActive` call into the create,
46
+ * placing the space at that storey's floor elevation (any `position` offset is
47
+ * applied on top). Throws if no storey has that value.
42
48
  * @returns the {@linkcode ComponentHandle} of the created space
43
- * @throws if the contour is invalid or the height is not positive
49
+ * @throws if the contour is invalid, the height is not positive, or the target
50
+ * storey does not exist
44
51
  *
45
52
  * @examplePrompt Create a room called Living Room that's 3m tall from this outline
46
53
  * @examplePrompt Add a new space on the current storey using this footprint
47
54
  * @examplePrompt Make a bedroom here and assign it to the Residential department
48
55
  * @examplePrompt Extrude this closed outline into a 10 foot high room
49
56
  * @examplePrompt Can you create a Kitchen space from the sketch I just drew?
57
+ * @examplePrompt Create a bedroom on the second floor from this outline
58
+ *
59
+ * @performance For MORE THAN ONE space, call `design.create.spaces(items[])` — the whole
60
+ * batch is one host round-trip. Looping this single-space creator is N round-trips (slow,
61
+ * and a large loop can trip the plugin rate limit).
50
62
  *
51
63
  * # Example
52
64
  * ```ts
@@ -59,9 +71,13 @@ export declare abstract class PluginDesignCreateApi {
59
71
  * ])
60
72
  * const contour = await snaptrude.core.geom.create.contourFromProfile(outer)
61
73
  * const space = await snaptrude.design.create.space(contour, 3, "Living")
74
+ * // …place one directly on the second floor (no setActive dance):
75
+ * const upstairs = await snaptrude.design.create.space(
76
+ * contour, 3, "Bedroom", undefined, undefined, undefined, undefined, 2,
77
+ * )
62
78
  * ```
63
79
  */
64
- abstract space(contour: ContourHandle, height: number, label?: string, position?: Vec3Handle, spaceType?: PluginSpaceType, massType?: PluginMassType, departmentId?: PluginDepartmentId): PluginApiReturn<ComponentHandle>;
80
+ abstract space(contour: ContourHandle, height: number, label?: string, position?: Vec3Handle, spaceType?: PluginSpaceType, massType?: PluginMassType, departmentId?: PluginDepartmentId, storey?: number): PluginApiReturn<ComponentHandle>;
65
81
  /**
66
82
  * Create a **mass** — a generic extruded prism (default `massType` "Generic mass").
67
83
  * Same footprint-extrude path as {@linkcode PluginDesignCreateApi.space}.
@@ -87,6 +103,47 @@ export declare abstract class PluginDesignCreateApi {
87
103
  * ```
88
104
  */
89
105
  abstract mass(contour: ContourHandle, height: number, label?: string, position?: Vec3Handle, massType?: PluginMassType): PluginApiReturn<ComponentHandle>;
106
+ /**
107
+ * Create a **mass** from a custom solid built with a `core.geom.create` brep
108
+ * constructor (`brepFromFaces`, `brepFromExtrusion`, `brepFromLoft`,
109
+ * `brepFromMesh`, or a brep boolean) — the free-form counterpart of
110
+ * {@linkcode PluginDesignCreateApi.mass}, for solids that are not simple
111
+ * footprint extrusions (pyramids, wedges, faceted volumes).
112
+ *
113
+ * Only accepts breps **minted by a `core.geom.create` brep constructor** —
114
+ * scene-derived breps from `design.query.geometry.getBrep` are read-only and
115
+ * throw. The mass is created as a generic mass (`massType` "Generic mass") at
116
+ * the exact coordinates the solid was authored in, committed as a single
117
+ * undo step, and synced to collaborators like any other creator.
118
+ *
119
+ * @param brep - A solid from a `core.geom.create` brep constructor
120
+ * @param label - Label (maps to `room_type`)
121
+ * @returns the {@linkcode ComponentHandle} of the created mass
122
+ * @throws if the brep handle is invalid, or the brep was not created by a
123
+ * `core.geom.create` brep constructor
124
+ *
125
+ * @examplePrompt Create a mass from these faces
126
+ * @examplePrompt Turn this custom brep into a scene mass
127
+ * @examplePrompt Add a pyramid-shaped mass to the model
128
+ *
129
+ * # Example
130
+ * ```ts
131
+ * const apex = { x: 0, y: 4, z: 0 }
132
+ * const a = { x: -2, y: 0, z: -2 }
133
+ * const b = { x: 2, y: 0, z: -2 }
134
+ * const c = { x: 2, y: 0, z: 2 }
135
+ * const d = { x: -2, y: 0, z: 2 }
136
+ * const brep = await snaptrude.core.geom.create.brepFromFaces([
137
+ * [a, d, c, b],
138
+ * [a, b, apex],
139
+ * [b, c, apex],
140
+ * [c, d, apex],
141
+ * [d, a, apex],
142
+ * ])
143
+ * const pyramid = await snaptrude.design.create.massFromBrep(brep, "Pavilion")
144
+ * ```
145
+ */
146
+ abstract massFromBrep(brep: BrepHandle, label?: string): PluginApiReturn<ComponentHandle>;
90
147
  /**
91
148
  * Create a **slab** by extruding a footprint contour by `thickness`
92
149
  * (default direction: down).
@@ -182,14 +239,17 @@ export declare abstract class PluginDesignCreateApi {
182
239
  abstract ceiling(contour: ContourHandle, thickness: number, heightFromFloor?: number): PluginApiReturn<ComponentHandle>;
183
240
  /**
184
241
  * Create a **column** by extruding a cross-section contour upward by `height`
185
- * from a base `position`.
242
+ * from a base `position`. The column is built to EXACTLY `height` — unlike
243
+ * the interactive draw tool, no slab-thickness deduction is applied.
186
244
  *
187
245
  * @param position - Base point
188
246
  * @param crossSection - Column cross-section footprint
189
- * @param height - Column height (> 0)
190
- * @param directionUp - Up axis (default world up)
247
+ * @param height - Column height (> 0), built exactly
248
+ * @param directionUp - Up axis (default world up); normalized by the host, so
249
+ * magnitude does not scale the height
191
250
  * @returns the {@linkcode ComponentHandle} of the created column
192
- * @throws if the cross-section is invalid or the height is not positive
251
+ * @throws if the cross-section is invalid, the height is not positive, or the
252
+ * direction is zero / lies in the cross-section plane (degenerate extrusion)
193
253
  *
194
254
  * @examplePrompt Add a 3m tall column at this point
195
255
  * @examplePrompt Place a column at the grid intersection
@@ -207,13 +267,30 @@ export declare abstract class PluginDesignCreateApi {
207
267
  abstract column(position: Vec3Handle, crossSection: ContourHandle, height: number, directionUp?: Vec3Handle): PluginApiReturn<ComponentHandle>;
208
268
  /**
209
269
  * Create a **beam** by extruding a cross-section contour along `direction` by
210
- * `length`.
270
+ * `length`. Matches the Snaptrude beam tool's semantics: the beam body hangs
271
+ * BELOW the plane the section is authored on.
272
+ *
273
+ * For a **horizontal** `direction` (the common spanning beam), author the
274
+ * section as an axis-aligned plan rectangle: its X extent is the beam's
275
+ * width, its Z extent is the beam's depth (the vertical drop). The beam runs
276
+ * `length` along `direction` starting at the section's centre, hanging below
277
+ * the authoring plane by its depth — exactly like an interactively drawn
278
+ * beam. Only axis-aligned rectangular sections are supported horizontally.
211
279
  *
212
- * @param section - Beam cross-section footprint
213
- * @param length - Beam length along `direction` (> 0)
214
- * @param direction - Extrusion axis (default world up)
280
+ * For a **vertical** `direction` (the default), the section itself is
281
+ * extruded by `length`, again hanging below the authoring plane. Diagonal
282
+ * directions are rejected.
283
+ *
284
+ * @param section - Beam cross-section, an axis-aligned rectangle in plan
285
+ * (X extent = width, Z extent = depth)
286
+ * @param length - Beam length along `direction` (> 0); direction is
287
+ * normalized by the host, so magnitude does not scale the length
288
+ * @param direction - Beam axis: horizontal for a spanning beam, or vertical
289
+ * (default world up). Diagonal directions throw.
215
290
  * @returns the {@linkcode ComponentHandle} of the created beam
216
- * @throws if the section is invalid or the length is not positive
291
+ * @throws if the section is invalid (horizontal beams: not an axis-aligned
292
+ * plan rectangle), the length is not positive, or the direction is zero or
293
+ * diagonal
217
294
  *
218
295
  * @examplePrompt Add a beam spanning 6 metres between the columns
219
296
  * @examplePrompt Create a horizontal beam along the X axis
@@ -235,15 +312,25 @@ export declare abstract class PluginDesignCreateApi {
235
312
  *
236
313
  * @param profile - Ordered curve chain (wall centerlines)
237
314
  * @param height - Wall height (default engine default)
238
- * @param thickness - Wall thickness (default engine default)
315
+ * @param thickness - Wall thickness (default: the `wallType`'s total layer
316
+ * thickness when `wallType` is given, else the engine default)
317
+ * @param wallType - Wall type to build with — the same searchable list the
318
+ * Draw tab's Wall Type dropdown offers. Pass a name from
319
+ * `design.types.list("wall")` (the summary's `label`, or its `"wall:…"` id).
320
+ * Drives the wall's construction layers and default material, and — when
321
+ * `thickness` is omitted — its total layer thickness. Default: the engine's
322
+ * generic wall.
239
323
  * @returns a {@linkcode ComponentHandle}`[]` (one per wall), in profile order
240
- * @throws if the profile is empty or wall creation fails
324
+ * @throws if the profile is empty, `wallType` names no wall type in the
325
+ * project, or wall creation fails
241
326
  *
242
327
  * @examplePrompt Draw walls along this centerline
243
328
  * @examplePrompt Create 3m high, 200mm thick walls from these points
244
329
  * @examplePrompt Build a wall run around the room outline
245
330
  * @examplePrompt Turn this polyline sketch into walls
246
331
  * @examplePrompt Add walls with mitred corners along the path
332
+ * @examplePrompt Draw brick walls with plaster along this outline
333
+ * @examplePrompt Build the perimeter in exposed concrete walls
247
334
  *
248
335
  * # Example
249
336
  * ```ts
@@ -254,9 +341,14 @@ export declare abstract class PluginDesignCreateApi {
254
341
  * await v.new(8, 0, 6),
255
342
  * ])
256
343
  * const walls = await snaptrude.design.create.walls(centerlines, 3, 0.2)
344
+ * // …built as a specific wall type (layers/material/thickness from the type):
345
+ * const [brick] = await snaptrude.design.types.list("wall")
346
+ * const brickWalls = await snaptrude.design.create.walls(
347
+ * centerlines, 3, undefined, brick.label,
348
+ * )
257
349
  * ```
258
350
  */
259
- abstract walls(profile: ProfileHandle, height?: number, thickness?: number): PluginApiReturn<ComponentHandle[]>;
351
+ abstract walls(profile: ProfileHandle, height?: number, thickness?: number, wallType?: string): PluginApiReturn<ComponentHandle[]>;
260
352
  /**
261
353
  * Create a **staircase** from a parametric preset, placed at a point.
262
354
  *
@@ -331,14 +423,19 @@ export declare abstract class PluginDesignCreateApi {
331
423
  * with {@linkcode PluginDesignFurnitureApi.listCatalog}. Placement is asynchronous
332
424
  * (the source mesh is fetched if not cached) and creates one undo entry.
333
425
  *
334
- * Placed at the item's default rotation; rotate afterward via `design.transform.rotate`
335
- * on the returned handle (planned namespace).
426
+ * Placed at the item's default rotation unless `angleInDegrees` is given, which
427
+ * rotates it about the vertical axis at creation time (baked into the same undo
428
+ * entry). To rotate an existing instance instead, use `design.transform.rotate`.
336
429
  *
337
430
  * @param catalogId - Library id: team `_id` or general `fullName`
338
431
  * @param position - Absolute world placement point
339
432
  * @param options - Optional placement options: `label` — instance name
340
433
  * (default auto `${name}Ins${n}`); `createNewSourceMesh` — emit a
341
434
  * source-mesh creation command (default `true`)
435
+ * @param angleInDegrees - Optional signed rotation about the vertical axis, in
436
+ * degrees (same convention as {@linkcode PluginDesignTransformApi.rotate}).
437
+ * Applied at creation time so it is part of the placement's single undo entry.
438
+ * Default: the item's own (unrotated) orientation.
342
439
  * @returns the {@linkcode ComponentHandle} of the placed furniture instance
343
440
  * @throws if the catalog id is unknown, the source mesh fails to load, or placement fails
344
441
  *
@@ -347,6 +444,7 @@ export declare abstract class PluginDesignCreateApi {
347
444
  * @examplePrompt Drop a desk into the scene at 3, 0, 5
348
445
  * @examplePrompt Insert the uploaded bed model in the bedroom
349
446
  * @examplePrompt Put a table from my project library here and name it Table-01
447
+ * @examplePrompt Place a chair here rotated 90 degrees
350
448
  *
351
449
  * # Example
352
450
  * ```ts
@@ -355,12 +453,19 @@ export declare abstract class PluginDesignCreateApi {
355
453
  * await snaptrude.core.math.vec3.new(3, 0, 5),
356
454
  * { label: "Chair-01" },
357
455
  * )
456
+ * // …placed already turned 90° about the vertical axis:
457
+ * const turned = await snaptrude.design.create.furniture(
458
+ * "6620f1a…",
459
+ * await snaptrude.core.math.vec3.new(3, 0, 5),
460
+ * undefined,
461
+ * 90,
462
+ * )
358
463
  * ```
359
464
  */
360
465
  abstract furniture(catalogId: string, position: Vec3Handle, options?: {
361
466
  label?: string;
362
467
  createNewSourceMesh?: boolean;
363
- }): PluginApiReturn<ComponentHandle>;
468
+ }, angleInDegrees?: number): PluginApiReturn<ComponentHandle>;
364
469
  /**
365
470
  * Place a **door** from the catalog into a host wall.
366
471
  *
@@ -375,6 +480,11 @@ export declare abstract class PluginDesignCreateApi {
375
480
  * @param hostWall - The wall to host the door
376
481
  * @param position - World point projected onto the wall to locate the opening
377
482
  * @param options - Optional placement options: `label` — instance name
483
+ * @param facing - World point selecting which side of the wall the door faces
484
+ * (the room it opens into) — the same convention as approaching the wall
485
+ * from that side with the cursor in the interactive tool. Any point clearly
486
+ * on that side works (e.g. the room's center). Default: the engine picks a
487
+ * side (nondeterministic when `position` sits on the wall centerline).
378
488
  * @returns the {@linkcode ComponentHandle} of the placed door
379
489
  * @throws if the catalog id is unknown, the host is not a wall, the source
380
490
  * mesh fails to load, or the projected point falls **outside** the host wall
@@ -384,6 +494,7 @@ export declare abstract class PluginDesignCreateApi {
384
494
  * @examplePrompt Put a door from the catalog at this point on the wall
385
495
  * @examplePrompt Insert the entrance door into this wall
386
496
  * @examplePrompt Add a door to the wall and call it Entry-01
497
+ * @examplePrompt Add a door that opens into the living room
387
498
  *
388
499
  * # Example
389
500
  * ```ts
@@ -395,11 +506,19 @@ export declare abstract class PluginDesignCreateApi {
395
506
  * await snaptrude.core.math.vec3.new(3, 0, 5),
396
507
  * { label: "Entry-01" },
397
508
  * )
509
+ * // …facing a specific side of the wall (pass a point inside that room):
510
+ * const intoKitchen = await snaptrude.design.create.door(
511
+ * entry.id,
512
+ * wall,
513
+ * await snaptrude.core.math.vec3.new(3, 0, 5),
514
+ * undefined,
515
+ * await snaptrude.core.math.vec3.new(3, 0, 9),
516
+ * )
398
517
  * ```
399
518
  */
400
519
  abstract door(catalogId: string, hostWall: ComponentHandle, position: Vec3Handle, options?: {
401
520
  label?: string;
402
- }): PluginApiReturn<ComponentHandle>;
521
+ }, facing?: Vec3Handle): PluginApiReturn<ComponentHandle>;
403
522
  /**
404
523
  * Place a **window** from the catalog into a host wall.
405
524
  *
@@ -414,6 +533,10 @@ export declare abstract class PluginDesignCreateApi {
414
533
  * @param hostWall - The wall to host the window
415
534
  * @param position - World point projected onto the wall to locate the opening
416
535
  * @param options - Optional placement options: `label` — instance name
536
+ * @param facing - World point selecting which side of the wall the window
537
+ * faces (matters for asymmetric windows, e.g. casement swing) — same
538
+ * convention as {@linkcode PluginDesignCreateApi.door}. Default: the engine
539
+ * picks a side (nondeterministic when `position` sits on the centerline).
417
540
  * @returns the {@linkcode ComponentHandle} of the placed window
418
541
  * @throws if the catalog id is unknown, the host is not a wall, the source
419
542
  * mesh fails to load, or the projected point falls **outside** the host wall
@@ -423,6 +546,7 @@ export declare abstract class PluginDesignCreateApi {
423
546
  * @examplePrompt Put a window from the catalog at this point on the wall
424
547
  * @examplePrompt Insert a window into the living room wall
425
548
  * @examplePrompt Add a window to the wall and name it Win-01
549
+ * @examplePrompt Add a casement window opening toward the garden side
426
550
  *
427
551
  * # Example
428
552
  * ```ts
@@ -438,7 +562,7 @@ export declare abstract class PluginDesignCreateApi {
438
562
  */
439
563
  abstract window(catalogId: string, hostWall: ComponentHandle, position: Vec3Handle, options?: {
440
564
  label?: string;
441
- }): PluginApiReturn<ComponentHandle>;
565
+ }, facing?: Vec3Handle): PluginApiReturn<ComponentHandle>;
442
566
  /**
443
567
  * Place a **smart layout** — clone an in-scene template cluster (walls,
444
568
  * furniture, doors, windows, floors) into one or more target ROOM/DEPARTMENT
@@ -512,6 +636,11 @@ export declare abstract class PluginDesignCreateApi {
512
636
  * @examplePrompt Array these walls with a 3m offset
513
637
  * @examplePrompt Clone the desk as a unique copy, not an instance
514
638
  *
639
+ * @performance To place N repeats of the same geometry, bulk-create the seed(s) once then
640
+ * call this ONCE with `{ count: N - 1 }` — one host round-trip for all copies. Never
641
+ * reproduce geometry by looping `design.create.*` N times. Copy only after the create
642
+ * that mints the seed ids.
643
+ *
515
644
  * # Example
516
645
  * ```ts
517
646
  * const { vec3 } = snaptrude.core.math
@@ -527,15 +656,24 @@ export declare abstract class PluginDesignCreateApi {
527
656
  * Migrated from the removed `entity.space.bulkCreate`. Each item extrudes a contour
528
657
  * footprint up `height`. Validate-all-or-throw; one command. For a rectangular
529
658
  * (box) space, build the footprint with `core.geom.create.profileRect` →
530
- * `contourFromProfile`, then pass it as an item.
659
+ * `contourFromProfile`, then pass it as an item. Each item may carry its own
660
+ * `storey` (see {@linkcode PluginCreateSpaceItem}) so a single call can populate
661
+ * several floors at once.
531
662
  *
532
663
  * @param items - One {@linkcode PluginCreateSpaceItem} per space to create (≥1)
533
664
  * @returns the created spaces as {@linkcode ComponentHandle}`[]`, in input order
665
+ * @throws if any item's contour is invalid, its height is not positive, or its
666
+ * target `storey` does not exist (all-or-nothing — nothing is created)
534
667
  *
535
668
  * @examplePrompt Create several rooms at once from these footprints
536
669
  * @examplePrompt Generate all the bedrooms in one operation
537
670
  * @examplePrompt Bulk create the spaces for this floor plan
538
671
  * @examplePrompt Add three rooms with different heights in a single undo step
672
+ * @examplePrompt Create one room on the ground floor and one on the first floor
673
+ *
674
+ * @performance Bulk creator — the whole batch is ONE host round-trip. Always prefer this
675
+ * over calling `design.create.space` in a loop: build the full `items[]` array first
676
+ * (all per-item math and geometry up front), then make one call.
539
677
  *
540
678
  * # Example
541
679
  * ```ts
@@ -548,6 +686,49 @@ export declare abstract class PluginDesignCreateApi {
548
686
  * ```
549
687
  */
550
688
  abstract spaces(items: PluginCreateSpaceItem[]): PluginApiReturn<ComponentHandle[]>;
689
+ /**
690
+ * Create a new parametric buildable envelope — the zoning-regulated volume a
691
+ * building may occupy — generated from a site polygon, tiered setbacks, a
692
+ * height or floor-count cap, and optional FAR and lot-coverage limits. The host
693
+ * mints the envelope id and returns it. Canonical home of the create formerly
694
+ * at `entity.buildableEnvelope.create` (now deprecated).
695
+ *
696
+ * @param sitePolygon - Site polygon vertices in `lengthUnit`; minimum 3 vertices.
697
+ * @param lengthUnit - Unit used by all length fields (`"ft" | "m"`).
698
+ * @param setbacks - Setback profile, ground tier first; minimum 1 tier.
699
+ * @param verticalCap - Maximum height or floor count.
700
+ * @param floorToFloor - Required floor-to-floor height in `lengthUnit`.
701
+ * @param farRatio - Optional FAR value, positive when provided.
702
+ * @param lotCoverageMaxPct - Optional lot coverage cap, `0..100`.
703
+ * @returns A {@linkcode PluginBuildableEnvelopeCreateResult} with the
704
+ * `buildableEnvelopeId` of the created envelope.
705
+ * @throws If validation fails or generation produces no renderable geometry.
706
+ *
707
+ * @examplePrompt Create a buildable envelope for my site
708
+ * @examplePrompt Generate the zoning envelope with 10ft front setbacks
709
+ * @examplePrompt Show the maximum buildable volume with a 150ft height limit
710
+ * @examplePrompt Create a zoning envelope capped at 12 floors with FAR 3
711
+ *
712
+ * # Example
713
+ * ```ts
714
+ * const { buildableEnvelopeId } = await snaptrude.design.create.buildableEnvelope(
715
+ * [
716
+ * { x: 0, z: 0 },
717
+ * { x: 100, z: 0 },
718
+ * { x: 100, z: 80 },
719
+ * { x: 0, z: 80 },
720
+ * ],
721
+ * "ft",
722
+ * [
723
+ * { aboveHeight: 0, front: 10, side: 5, rear: 10 },
724
+ * { aboveHeight: 100, front: 20, side: 10, rear: 20 },
725
+ * ],
726
+ * { kind: "max_height", maxHeight: 150 },
727
+ * 12,
728
+ * )
729
+ * ```
730
+ */
731
+ abstract buildableEnvelope(sitePolygon: PluginBuildableEnvelopePolygonVertex[], lengthUnit: "ft" | "m", setbacks: PluginBuildableEnvelopeSetbackTier[], verticalCap: PluginBuildableEnvelopeVerticalCap, floorToFloor: number, farRatio?: number, lotCoverageMaxPct?: number): PluginApiReturn<PluginBuildableEnvelopeCreateResult>;
551
732
  }
552
733
  /**
553
734
  * Line style of a reference line (mirrors the engine `ReferenceLineMode` verbatim).
@@ -617,12 +798,13 @@ export type PluginStaircasePreset = z.infer<typeof PluginStaircasePreset>;
617
798
  * | `spaceType` | {@linkcode PluginSpaceType}? | Space-type classification (default `Room`) |
618
799
  * | `massType` | {@linkcode PluginMassType}? | Mass-type classification (default `Room`) |
619
800
  * | `departmentId` | {@linkcode PluginDepartmentId}? | Department assignment (default department) |
801
+ * | `storey` | `number`? (int) | Target storey number (default active storey) |
620
802
  */
621
803
  export declare const PluginDesignCreateSpaceArgs: z.ZodObject<{
622
- contour: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
804
+ contour: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
623
805
  height: z.ZodNumber;
624
806
  label: z.ZodOptional<z.ZodString>;
625
- position: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
807
+ position: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
626
808
  spaceType: z.ZodOptional<z.ZodEnum<{
627
809
  Room: "Room";
628
810
  "Program Block": "Program Block";
@@ -655,6 +837,7 @@ export declare const PluginDesignCreateSpaceArgs: z.ZodObject<{
655
837
  ENVELOPE: "ENVELOPE";
656
838
  CORE: "CORE";
657
839
  }>, z.ZodUUID]>>;
840
+ storey: z.ZodOptional<z.ZodNumber>;
658
841
  }, z.core.$strip>;
659
842
  export type PluginDesignCreateSpaceArgs = z.infer<typeof PluginDesignCreateSpaceArgs>;
660
843
  /**
@@ -669,10 +852,10 @@ export type PluginDesignCreateSpaceArgs = z.infer<typeof PluginDesignCreateSpace
669
852
  * | `massType` | {@linkcode PluginMassType}? | Mass type (default `Generic mass`) |
670
853
  */
671
854
  export declare const PluginDesignCreateMassArgs: z.ZodObject<{
672
- contour: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
855
+ contour: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
673
856
  height: z.ZodNumber;
674
857
  label: z.ZodOptional<z.ZodString>;
675
- position: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
858
+ position: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
676
859
  massType: z.ZodOptional<z.ZodEnum<{
677
860
  Room: "Room";
678
861
  Plinth: "Plinth";
@@ -689,6 +872,19 @@ export declare const PluginDesignCreateMassArgs: z.ZodObject<{
689
872
  }>>;
690
873
  }, z.core.$strip>;
691
874
  export type PluginDesignCreateMassArgs = z.infer<typeof PluginDesignCreateMassArgs>;
875
+ /**
876
+ * Arguments for {@linkcode PluginDesignCreateApi.massFromBrep}.
877
+ *
878
+ * | Property | Type | Description |
879
+ * |---|---|---|
880
+ * | `brep` | {@linkcode BrepHandle} | A solid from a `core.geom.create` brep constructor |
881
+ * | `label` | `string`? | Label (maps to `room_type`) |
882
+ */
883
+ export declare const PluginDesignCreateMassFromBrepArgs: z.ZodObject<{
884
+ brep: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"brep">, string>>;
885
+ label: z.ZodOptional<z.ZodString>;
886
+ }, z.core.$strip>;
887
+ export type PluginDesignCreateMassFromBrepArgs = z.infer<typeof PluginDesignCreateMassFromBrepArgs>;
692
888
  /**
693
889
  * Arguments for {@linkcode PluginDesignCreateApi.slab}.
694
890
  *
@@ -700,7 +896,7 @@ export type PluginDesignCreateMassArgs = z.infer<typeof PluginDesignCreateMassAr
700
896
  * | `slabType` | {@linkcode PluginSlabType}? | Slab-type classification |
701
897
  */
702
898
  export declare const PluginDesignCreateSlabArgs: z.ZodObject<{
703
- contour: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
899
+ contour: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
704
900
  thickness: z.ZodNumber;
705
901
  direction: z.ZodOptional<z.ZodEnum<{
706
902
  up: "up";
@@ -724,9 +920,9 @@ export type PluginDesignCreateSlabArgs = z.infer<typeof PluginDesignCreateSlabAr
724
920
  * | `position` | {@linkcode Vec3Handle}? | Offset from origin |
725
921
  */
726
922
  export declare const PluginDesignCreateFloorArgs: z.ZodObject<{
727
- contour: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
923
+ contour: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
728
924
  thickness: z.ZodNumber;
729
- position: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
925
+ position: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
730
926
  }, z.core.$strip>;
731
927
  export type PluginDesignCreateFloorArgs = z.infer<typeof PluginDesignCreateFloorArgs>;
732
928
  /**
@@ -738,7 +934,7 @@ export type PluginDesignCreateFloorArgs = z.infer<typeof PluginDesignCreateFloor
738
934
  * | `thickness` | `number` | Roof-slab thickness (> 0) |
739
935
  */
740
936
  export declare const PluginDesignCreateRoofArgs: z.ZodObject<{
741
- contour: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
937
+ contour: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
742
938
  thickness: z.ZodNumber;
743
939
  }, z.core.$strip>;
744
940
  export type PluginDesignCreateRoofArgs = z.infer<typeof PluginDesignCreateRoofArgs>;
@@ -752,7 +948,7 @@ export type PluginDesignCreateRoofArgs = z.infer<typeof PluginDesignCreateRoofAr
752
948
  * | `heightFromFloor` | `number`? | Lift above the floor (default 0) |
753
949
  */
754
950
  export declare const PluginDesignCreateCeilingArgs: z.ZodObject<{
755
- contour: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
951
+ contour: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
756
952
  thickness: z.ZodNumber;
757
953
  heightFromFloor: z.ZodOptional<z.ZodNumber>;
758
954
  }, z.core.$strip>;
@@ -768,10 +964,10 @@ export type PluginDesignCreateCeilingArgs = z.infer<typeof PluginDesignCreateCei
768
964
  * | `directionUp` | {@linkcode Vec3Handle}? | Up axis (default world up) |
769
965
  */
770
966
  export declare const PluginDesignCreateColumnArgs: z.ZodObject<{
771
- position: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
772
- crossSection: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
967
+ position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
968
+ crossSection: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
773
969
  height: z.ZodNumber;
774
- directionUp: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
970
+ directionUp: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
775
971
  }, z.core.$strip>;
776
972
  export type PluginDesignCreateColumnArgs = z.infer<typeof PluginDesignCreateColumnArgs>;
777
973
  /**
@@ -784,9 +980,9 @@ export type PluginDesignCreateColumnArgs = z.infer<typeof PluginDesignCreateColu
784
980
  * | `direction` | {@linkcode Vec3Handle}? | Extrusion axis (default world up) |
785
981
  */
786
982
  export declare const PluginDesignCreateBeamArgs: z.ZodObject<{
787
- section: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
983
+ section: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
788
984
  length: z.ZodNumber;
789
- direction: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
985
+ direction: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
790
986
  }, z.core.$strip>;
791
987
  export type PluginDesignCreateBeamArgs = z.infer<typeof PluginDesignCreateBeamArgs>;
792
988
  /**
@@ -796,12 +992,14 @@ export type PluginDesignCreateBeamArgs = z.infer<typeof PluginDesignCreateBeamAr
796
992
  * |---|---|---|
797
993
  * | `profile` | {@linkcode ProfileHandle} | Ordered curve chain (wall centerlines) |
798
994
  * | `height` | `number`? | Wall height (default engine default) |
799
- * | `thickness` | `number`? | Wall thickness (default engine default) |
995
+ * | `thickness` | `number`? | Wall thickness (default: `wallType`'s total layer thickness when given, else engine default) |
996
+ * | `wallType` | `string`? | Wall type name from `design.types.list("wall")` — layers/material/thickness defaults (default generic) |
800
997
  */
801
998
  export declare const PluginDesignCreateWallsArgs: z.ZodObject<{
802
- profile: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"profile">, string>>;
999
+ profile: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"profile">, string>>;
803
1000
  height: z.ZodOptional<z.ZodNumber>;
804
1001
  thickness: z.ZodOptional<z.ZodNumber>;
1002
+ wallType: z.ZodOptional<z.ZodString>;
805
1003
  }, z.core.$strip>;
806
1004
  export type PluginDesignCreateWallsArgs = z.infer<typeof PluginDesignCreateWallsArgs>;
807
1005
  /**
@@ -834,7 +1032,7 @@ export declare const PluginDesignCreateStaircaseArgs: z.ZodObject<{
834
1032
  mezzanineFloorDogLegged: "mezzanineFloorDogLegged";
835
1033
  mezzanineFloorLShaped: "mezzanineFloorLShaped";
836
1034
  }>;
837
- position: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
1035
+ position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
838
1036
  label: z.ZodOptional<z.ZodString>;
839
1037
  structureId: z.ZodOptional<z.ZodString>;
840
1038
  level: z.ZodOptional<z.ZodString>;
@@ -849,12 +1047,14 @@ export type PluginDesignCreateStaircaseArgs = z.infer<typeof PluginDesignCreateS
849
1047
  * | `position` | {@linkcode Vec3Handle} | Absolute world placement point |
850
1048
  * | `label` | `string`? | Instance name (default auto `${name}Ins${n}`) |
851
1049
  * | `createNewSourceMesh` | `boolean`? | Emit a source-mesh creation command (default `true`) |
1050
+ * | `angleInDegrees` | `number`? | Rotation about the vertical axis, in degrees (default unrotated) |
852
1051
  */
853
1052
  export declare const PluginDesignCreateFurnitureArgs: z.ZodObject<{
854
1053
  catalogId: z.ZodString;
855
- position: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
1054
+ position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
856
1055
  label: z.ZodOptional<z.ZodString>;
857
1056
  createNewSourceMesh: z.ZodOptional<z.ZodBoolean>;
1057
+ angleInDegrees: z.ZodOptional<z.ZodNumber>;
858
1058
  }, z.core.$strip>;
859
1059
  export type PluginDesignCreateFurnitureArgs = z.infer<typeof PluginDesignCreateFurnitureArgs>;
860
1060
  /**
@@ -866,12 +1066,14 @@ export type PluginDesignCreateFurnitureArgs = z.infer<typeof PluginDesignCreateF
866
1066
  * | `hostWall` | {@linkcode ComponentHandle} | The wall to host the door |
867
1067
  * | `position` | {@linkcode Vec3Handle} | World point projected onto the wall |
868
1068
  * | `label` | `string`? | Instance name (optional) |
1069
+ * | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the door faces (default engine-chosen) |
869
1070
  */
870
1071
  export declare const PluginDesignCreateDoorArgs: z.ZodObject<{
871
1072
  catalogId: z.ZodString;
872
1073
  hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
873
- position: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
1074
+ position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
874
1075
  label: z.ZodOptional<z.ZodString>;
1076
+ facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
875
1077
  }, z.core.$strip>;
876
1078
  export type PluginDesignCreateDoorArgs = z.infer<typeof PluginDesignCreateDoorArgs>;
877
1079
  /**
@@ -883,12 +1085,14 @@ export type PluginDesignCreateDoorArgs = z.infer<typeof PluginDesignCreateDoorAr
883
1085
  * | `hostWall` | {@linkcode ComponentHandle} | The wall to host the window |
884
1086
  * | `position` | {@linkcode Vec3Handle} | World point projected onto the wall |
885
1087
  * | `label` | `string`? | Instance name (optional) |
1088
+ * | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the window faces (default engine-chosen) |
886
1089
  */
887
1090
  export declare const PluginDesignCreateWindowArgs: z.ZodObject<{
888
1091
  catalogId: z.ZodString;
889
1092
  hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
890
- position: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
1093
+ position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
891
1094
  label: z.ZodOptional<z.ZodString>;
1095
+ facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
892
1096
  }, z.core.$strip>;
893
1097
  export type PluginDesignCreateWindowArgs = z.infer<typeof PluginDesignCreateWindowArgs>;
894
1098
  /**
@@ -946,7 +1150,7 @@ export type PluginSmartLayoutResult = z.infer<typeof PluginSmartLayoutResult>;
946
1150
  * | `gridTag` | `string`? | Grid tag label (default `"A"`) |
947
1151
  */
948
1152
  export declare const PluginDesignCreateReferenceLinesArgs: z.ZodObject<{
949
- profile: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"profile">, string>>;
1153
+ profile: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"profile">, string>>;
950
1154
  color: z.ZodOptional<z.ZodString>;
951
1155
  thickness: z.ZodOptional<z.ZodNumber>;
952
1156
  style: z.ZodOptional<z.ZodEnum<{
@@ -966,8 +1170,8 @@ export type PluginDesignCreateReferenceLinesArgs = z.infer<typeof PluginDesignCr
966
1170
  * | `"unique"` | Independent geometry copies |
967
1171
  */
968
1172
  export declare const PluginCopyMode: z.ZodEnum<{
969
- instance: "instance";
970
1173
  unique: "unique";
1174
+ instance: "instance";
971
1175
  }>;
972
1176
  export type PluginCopyMode = z.infer<typeof PluginCopyMode>;
973
1177
  /**
@@ -982,11 +1186,11 @@ export type PluginCopyMode = z.infer<typeof PluginCopyMode>;
982
1186
  */
983
1187
  export declare const PluginDesignCreateCopyArgs: z.ZodObject<{
984
1188
  components: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>>;
985
- displacement: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
1189
+ displacement: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
986
1190
  count: z.ZodOptional<z.ZodNumber>;
987
1191
  mode: z.ZodOptional<z.ZodEnum<{
988
- instance: "instance";
989
1192
  unique: "unique";
1193
+ instance: "instance";
990
1194
  }>>;
991
1195
  }, z.core.$strip>;
992
1196
  export type PluginDesignCreateCopyArgs = z.infer<typeof PluginDesignCreateCopyArgs>;
@@ -1003,12 +1207,13 @@ export type PluginDesignCreateCopyArgs = z.infer<typeof PluginDesignCreateCopyAr
1003
1207
  * | `spaceType` | `PluginSpaceType`? | Space type |
1004
1208
  * | `massType` | `PluginMassType`? | Mass type |
1005
1209
  * | `departmentId` | `PluginDepartmentId`? | Department |
1210
+ * | `storey` | `number`? (int) | Target storey number (default active storey) |
1006
1211
  */
1007
1212
  export declare const PluginCreateSpaceItem: z.ZodObject<{
1008
- contour: z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
1213
+ contour: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"contour">, string>>;
1009
1214
  height: z.ZodNumber;
1010
1215
  label: z.ZodOptional<z.ZodString>;
1011
- position: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
1216
+ position: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
1012
1217
  spaceType: z.ZodOptional<z.ZodEnum<{
1013
1218
  Room: "Room";
1014
1219
  "Program Block": "Program Block";
@@ -1041,6 +1246,7 @@ export declare const PluginCreateSpaceItem: z.ZodObject<{
1041
1246
  ENVELOPE: "ENVELOPE";
1042
1247
  CORE: "CORE";
1043
1248
  }>, z.ZodUUID]>>;
1249
+ storey: z.ZodOptional<z.ZodNumber>;
1044
1250
  }, z.core.$strip>;
1045
1251
  export type PluginCreateSpaceItem = z.infer<typeof PluginCreateSpaceItem>;
1046
1252
  //# sourceMappingURL=index.d.ts.map