@snaptrude/plugin-core 0.11.0-rc.1 → 1.0.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 (226) hide show
  1. package/AGENTS.md +4 -0
  2. package/CHANGELOG.md +176 -14
  3. package/api-manifest.json +872 -49
  4. package/dist/api/analysis/daylight.d.ts +5 -5
  5. package/dist/api/analysis/solar.d.ts +2 -2
  6. package/dist/api/core/camera/index.d.ts +447 -0
  7. package/dist/api/core/camera/index.d.ts.map +1 -1
  8. package/dist/api/core/geom/create/index.d.ts +942 -101
  9. package/dist/api/core/geom/create/index.d.ts.map +1 -1
  10. package/dist/api/core/geom/query/brep.d.ts +59 -2
  11. package/dist/api/core/geom/query/brep.d.ts.map +1 -1
  12. package/dist/api/core/geom/query/curve.d.ts +59 -35
  13. package/dist/api/core/geom/query/curve.d.ts.map +1 -1
  14. package/dist/api/core/geom/query/edge.d.ts +2 -2
  15. package/dist/api/core/geom/query/face.d.ts +105 -0
  16. package/dist/api/core/geom/query/face.d.ts.map +1 -1
  17. package/dist/api/core/geom/update/contour.d.ts +10 -2
  18. package/dist/api/core/geom/update/contour.d.ts.map +1 -1
  19. package/dist/api/core/geom/update/curve.d.ts +5 -5
  20. package/dist/api/core/geom/update/profile.d.ts +3 -1
  21. package/dist/api/core/geom/update/profile.d.ts.map +1 -1
  22. package/dist/api/core/handles/index.d.ts +4 -2
  23. package/dist/api/core/handles/index.d.ts.map +1 -1
  24. package/dist/api/core/index.d.ts +4 -4
  25. package/dist/api/core/index.d.ts.map +1 -1
  26. package/dist/api/core/io/import/index.d.ts +3 -1
  27. package/dist/api/core/io/import/index.d.ts.map +1 -1
  28. package/dist/api/core/layers.d.ts +377 -255
  29. package/dist/api/core/layers.d.ts.map +1 -1
  30. package/dist/api/core/mode/index.d.ts +19 -7
  31. package/dist/api/core/mode/index.d.ts.map +1 -1
  32. package/dist/api/core/proposals/index.d.ts +4 -3
  33. package/dist/api/core/proposals/index.d.ts.map +1 -1
  34. package/dist/api/core/storeys/index.d.ts +17 -2
  35. package/dist/api/core/storeys/index.d.ts.map +1 -1
  36. package/dist/api/core/storeys/layers.d.ts +408 -0
  37. package/dist/api/core/storeys/layers.d.ts.map +1 -0
  38. package/dist/api/core/tags.d.ts +84 -3
  39. package/dist/api/core/tags.d.ts.map +1 -1
  40. package/dist/api/core/zoom/index.d.ts +13 -0
  41. package/dist/api/core/zoom/index.d.ts.map +1 -1
  42. package/dist/api/design/bim.d.ts +299 -0
  43. package/dist/api/design/bim.d.ts.map +1 -0
  44. package/dist/api/design/boolean/index.d.ts +2 -0
  45. package/dist/api/design/boolean/index.d.ts.map +1 -1
  46. package/dist/api/design/catalog.d.ts +320 -0
  47. package/dist/api/design/catalog.d.ts.map +1 -0
  48. package/dist/api/design/create/bulk-items.d.ts +269 -0
  49. package/dist/api/design/create/bulk-items.d.ts.map +1 -0
  50. package/dist/api/design/create/grids.d.ts +132 -0
  51. package/dist/api/design/create/grids.d.ts.map +1 -0
  52. package/dist/api/design/create/index.d.ts +753 -102
  53. package/dist/api/design/create/index.d.ts.map +1 -1
  54. package/dist/api/design/create/opening-fields.d.ts +38 -0
  55. package/dist/api/design/create/opening-fields.d.ts.map +1 -0
  56. package/dist/api/design/delete/index.d.ts +7 -20
  57. package/dist/api/design/delete/index.d.ts.map +1 -1
  58. package/dist/api/design/dimensions.d.ts +427 -0
  59. package/dist/api/design/dimensions.d.ts.map +1 -0
  60. package/dist/api/design/doors/index.d.ts +24 -23
  61. package/dist/api/design/doors/index.d.ts.map +1 -1
  62. package/dist/api/design/family.d.ts +1446 -0
  63. package/dist/api/design/family.d.ts.map +1 -0
  64. package/dist/api/design/grids.d.ts +237 -0
  65. package/dist/api/design/grids.d.ts.map +1 -0
  66. package/dist/api/design/index.d.ts +30 -0
  67. package/dist/api/design/index.d.ts.map +1 -1
  68. package/dist/api/design/networks.d.ts +1703 -0
  69. package/dist/api/design/networks.d.ts.map +1 -0
  70. package/dist/api/design/query/geometry/index.d.ts +33 -5
  71. package/dist/api/design/query/geometry/index.d.ts.map +1 -1
  72. package/dist/api/design/query/grids.d.ts +287 -0
  73. package/dist/api/design/query/grids.d.ts.map +1 -0
  74. package/dist/api/design/query/index.d.ts +143 -36
  75. package/dist/api/design/query/index.d.ts.map +1 -1
  76. package/dist/api/design/query/spaces.d.ts +5 -66
  77. package/dist/api/design/query/spaces.d.ts.map +1 -1
  78. package/dist/api/design/selection/index.d.ts +12 -12
  79. package/dist/api/design/types/index.d.ts +40 -24
  80. package/dist/api/design/types/index.d.ts.map +1 -1
  81. package/dist/api/design/update/index.d.ts +412 -8
  82. package/dist/api/design/update/index.d.ts.map +1 -1
  83. package/dist/api/design/windows/index.d.ts +8 -8
  84. package/dist/api/design/windows/index.d.ts.map +1 -1
  85. package/dist/api/entity/buildableEnvelope.d.ts +84 -2
  86. package/dist/api/entity/buildableEnvelope.d.ts.map +1 -1
  87. package/dist/api/entity/referenceLine.d.ts +13 -1
  88. package/dist/api/entity/referenceLine.d.ts.map +1 -1
  89. package/dist/api/entity/space.d.ts +12 -15
  90. package/dist/api/entity/space.d.ts.map +1 -1
  91. package/dist/api/entity/story.d.ts +4 -4
  92. package/dist/api/presentation/aiInspiration.d.ts +24 -24
  93. package/dist/api/presentation/annotate.d.ts +38 -22
  94. package/dist/api/presentation/annotate.d.ts.map +1 -1
  95. package/dist/api/presentation/camera.d.ts +265 -0
  96. package/dist/api/presentation/camera.d.ts.map +1 -0
  97. package/dist/api/presentation/drawingContract.d.ts +32 -0
  98. package/dist/api/presentation/drawingContract.d.ts.map +1 -0
  99. package/dist/api/presentation/drawings.d.ts +3523 -0
  100. package/dist/api/presentation/drawings.d.ts.map +1 -0
  101. package/dist/api/presentation/export.d.ts +23 -5
  102. package/dist/api/presentation/export.d.ts.map +1 -1
  103. package/dist/api/presentation/graphics.d.ts +419 -0
  104. package/dist/api/presentation/graphics.d.ts.map +1 -0
  105. package/dist/api/presentation/index.d.ts +66 -12
  106. package/dist/api/presentation/index.d.ts.map +1 -1
  107. package/dist/api/presentation/placedViews.d.ts +117 -51
  108. package/dist/api/presentation/placedViews.d.ts.map +1 -1
  109. package/dist/api/presentation/sections.d.ts +461 -0
  110. package/dist/api/presentation/sections.d.ts.map +1 -0
  111. package/dist/api/presentation/shapes.d.ts +2 -2
  112. package/dist/api/presentation/sheets.d.ts +175 -37
  113. package/dist/api/presentation/sheets.d.ts.map +1 -1
  114. package/dist/api/presentation/standards.d.ts +590 -0
  115. package/dist/api/presentation/standards.d.ts.map +1 -0
  116. package/dist/api/presentation/viewPresets.d.ts +222 -0
  117. package/dist/api/presentation/viewPresets.d.ts.map +1 -0
  118. package/dist/api/presentation/views.d.ts +144 -9
  119. package/dist/api/presentation/views.d.ts.map +1 -1
  120. package/dist/api/presentation/walkthroughs.d.ts +1350 -0
  121. package/dist/api/presentation/walkthroughs.d.ts.map +1 -0
  122. package/dist/api/program/departments.d.ts +58 -2
  123. package/dist/api/program/departments.d.ts.map +1 -1
  124. package/dist/api/program/index.d.ts +16 -6
  125. package/dist/api/program/index.d.ts.map +1 -1
  126. package/dist/api/program/labels.d.ts +355 -0
  127. package/dist/api/program/labels.d.ts.map +1 -0
  128. package/dist/api/program/metadata.d.ts +328 -0
  129. package/dist/api/program/metadata.d.ts.map +1 -0
  130. package/dist/api/program/site.d.ts +4 -4
  131. package/dist/api/program/spreadsheet.d.ts +267 -4
  132. package/dist/api/program/spreadsheet.d.ts.map +1 -1
  133. package/dist/api/workspace/index.d.ts +49 -2
  134. package/dist/api/workspace/index.d.ts.map +1 -1
  135. package/dist/errors/codes.d.ts +5 -8
  136. package/dist/errors/codes.d.ts.map +1 -1
  137. package/dist/handles.d.ts +32 -3
  138. package/dist/handles.d.ts.map +1 -1
  139. package/dist/index.cjs +6534 -2865
  140. package/dist/index.cjs.map +1 -1
  141. package/dist/index.d.ts +2 -0
  142. package/dist/index.d.ts.map +1 -1
  143. package/dist/index.js +6118 -2857
  144. package/dist/index.js.map +1 -1
  145. package/dist/massParameters.d.ts +287 -0
  146. package/dist/massParameters.d.ts.map +1 -0
  147. package/dist/massParameters.ops.d.ts +138 -0
  148. package/dist/massParameters.ops.d.ts.map +1 -0
  149. package/package.json +2 -1
  150. package/scripts/check-dist-fresh.mjs +22 -0
  151. package/scripts/generate-manifest.mjs +5 -0
  152. package/scripts/generate-manifest.test.mjs +14 -3
  153. package/src/api/core/camera/index.ts +429 -1
  154. package/src/api/core/geom/create/index.ts +1037 -102
  155. package/src/api/core/geom/query/brep.ts +60 -2
  156. package/src/api/core/geom/query/curve.ts +26 -2
  157. package/src/api/core/geom/query/edge.ts +2 -2
  158. package/src/api/core/geom/query/face.ts +109 -4
  159. package/src/api/core/geom/update/contour.ts +10 -2
  160. package/src/api/core/geom/update/profile.ts +2 -0
  161. package/src/api/core/handles/index.ts +3 -2
  162. package/src/api/core/index.ts +4 -4
  163. package/src/api/core/io/import/index.ts +11 -3
  164. package/src/api/core/layers.ts +380 -173
  165. package/src/api/core/mode/index.ts +19 -7
  166. package/src/api/core/proposals/index.ts +4 -3
  167. package/src/api/core/storeys/index.ts +19 -2
  168. package/src/api/core/storeys/layers.ts +339 -0
  169. package/src/api/core/tags.ts +76 -0
  170. package/src/api/core/zoom/index.ts +13 -0
  171. package/src/api/design/bim.ts +210 -0
  172. package/src/api/design/boolean/index.ts +2 -0
  173. package/src/api/design/catalog.ts +203 -0
  174. package/src/api/design/create/bulk-items.ts +294 -0
  175. package/src/api/design/create/grids.ts +137 -0
  176. package/src/api/design/create/index.ts +824 -141
  177. package/src/api/design/create/opening-fields.ts +40 -0
  178. package/src/api/design/delete/index.ts +6 -20
  179. package/src/api/design/dimensions.ts +453 -0
  180. package/src/api/design/doors/index.ts +64 -41
  181. package/src/api/design/family.ts +1342 -0
  182. package/src/api/design/grids.ts +237 -0
  183. package/src/api/design/index.ts +49 -4
  184. package/src/api/design/networks.ts +607 -0
  185. package/src/api/design/query/geometry/index.ts +35 -4
  186. package/src/api/design/query/grids.ts +197 -0
  187. package/src/api/design/query/index.ts +105 -5
  188. package/src/api/design/query/spaces.ts +0 -68
  189. package/src/api/design/types/index.ts +31 -24
  190. package/src/api/design/update/index.ts +398 -4
  191. package/src/api/design/windows/index.ts +40 -22
  192. package/src/api/entity/buildableEnvelope.ts +77 -2
  193. package/src/api/entity/referenceLine.ts +25 -12
  194. package/src/api/entity/space.ts +0 -2
  195. package/src/api/presentation/annotate.ts +90 -58
  196. package/src/api/presentation/camera.ts +289 -0
  197. package/src/api/presentation/drawingContract.ts +70 -0
  198. package/src/api/presentation/drawings.ts +1179 -0
  199. package/src/api/presentation/export.ts +32 -6
  200. package/src/api/presentation/graphics.ts +324 -0
  201. package/src/api/presentation/index.ts +73 -14
  202. package/src/api/presentation/placedViews.ts +120 -57
  203. package/src/api/presentation/sections.ts +420 -0
  204. package/src/api/presentation/sheets.ts +182 -37
  205. package/src/api/presentation/standards.ts +445 -0
  206. package/src/api/presentation/viewPresets.ts +241 -0
  207. package/src/api/presentation/views.ts +81 -10
  208. package/src/api/presentation/walkthroughs.ts +1201 -0
  209. package/src/api/program/departments.ts +54 -2
  210. package/src/api/program/index.ts +16 -6
  211. package/src/api/program/labels.ts +332 -0
  212. package/src/api/program/metadata.ts +364 -0
  213. package/src/api/program/spreadsheet.ts +282 -0
  214. package/src/api/workspace/index.ts +51 -2
  215. package/src/errors/codes.ts +9 -30
  216. package/src/handles.ts +42 -3
  217. package/src/index.ts +2 -0
  218. package/src/massParameters.ops.ts +246 -0
  219. package/src/massParameters.ts +427 -0
  220. package/test/drawingContract.test.mjs +288 -0
  221. package/test/errors.test.mjs +1 -4
  222. package/test/massParameters.test.mjs +952 -0
  223. package/test/paperPensContract.test.mjs +75 -0
  224. package/test/presentationViewSettings.test.mjs +85 -0
  225. package/api-manifest.full.json +0 -6928
  226. package/snaptrude-plugin-core-0.11.0.tgz +0 -0
@@ -2,7 +2,7 @@ import * as z from "zod"
2
2
  import { PluginApiReturn } from "../../types"
3
3
 
4
4
  /**
5
- * Presentation views — read the saved 2D/3D views used to prepare presentations.
5
+ * Presentation views — read the saved plan, 3D, and elevation views used to prepare presentations.
6
6
  *
7
7
  * A **view** is a saved camera/plan: a sheet-ready 2D plan or a saved 3D view.
8
8
  * A plugin can list and read views, capture them to images, activate one (move
@@ -24,10 +24,10 @@ export abstract class PluginPresentationViewsApi {
24
24
  * List the saved views in the active project.
25
25
  *
26
26
  * @returns A {@linkcode PluginPresentationViewsListResult} with a `views` array
27
- * of 2D and 3D views (empty when the project has none).
27
+ * of plan, 3D, and elevation views (empty when the project has none).
28
28
  *
29
29
  * @examplePrompt List all the saved views
30
- * @examplePrompt What 2D and 3D views are in this project?
30
+ * @examplePrompt What plan, 3D, and elevation views are in this project?
31
31
  * @examplePrompt Which view is currently active?
32
32
  * @examplePrompt Get the names of every presentation view
33
33
  * @examplePrompt Show me the 3D views I can put on a sheet
@@ -83,7 +83,9 @@ export abstract class PluginPresentationViewsApi {
83
83
  *
84
84
  * Captures the **current** viewport by default; pass `viewId` to capture a
85
85
  * specific saved view (which briefly applies that view to the scene). Use
86
- * `format`/`resolution` to control the output.
86
+ * `format`/`resolution` to control the output. This shoots the Design (3D)
87
+ * canvas; to screenshot the Present canvas use
88
+ * {@linkcode PluginPresentationCameraApi.capture}.
87
89
  *
88
90
  * @param options - All optional: `viewId` (capture this saved view; omit for the
89
91
  * current viewport), `format` (default `"png"`), `resolution` (e.g. `"1280x720"`).
@@ -113,6 +115,10 @@ export abstract class PluginPresentationViewsApi {
113
115
  * Applies the view's camera, visibility, and storey state to the live scene.
114
116
  * Paired with {@linkcode PluginPresentationViewsApi.getActive}.
115
117
  *
118
+ * While Present is open this sets the Design frame a view saved in Present
119
+ * is taken from; it never moves the Present sheet canvas; use
120
+ * `presentation.camera` for that.
121
+ *
116
122
  * @param viewId - The id of the view to activate.
117
123
  * @returns The id of the now-active view.
118
124
  * @throws If no view has the given id.
@@ -136,6 +142,15 @@ export abstract class PluginPresentationViewsApi {
136
142
  *
137
143
  * Creates a camera bookmark (not geometry) from where the camera is now.
138
144
  *
145
+ * Works while Present mode is open. Present draws its drawings on the same
146
+ * 3D scene, so a view saved in Present takes its framing (camera, 2D or 3D
147
+ * mode, projection, storey, building) from the Design frame instead: the one
148
+ * the user had when Present opened, or one a plugin set since with
149
+ * `setActive`, `updateSettings({ viewMode })`, `core.camera`, `core.zoom`,
150
+ * `core.storeys.setActive`, `core.storeys.layers.setActive` or
151
+ * `core.buildings.setActive`. It never moves the Present sheet canvas; use
152
+ * `presentation.camera` for that.
153
+ *
139
154
  * @param name - Name for the new view (a default is used when omitted).
140
155
  * @param options - Optional `kind` (what kind of view to save, default
141
156
  * `"view"`) and `storey` (save the view on a specific storey — the storey is
@@ -169,12 +184,16 @@ export abstract class PluginPresentationViewsApi {
169
184
  *
170
185
  * @param viewId - The id of the view to read settings for.
171
186
  * @returns The view's {@linkcode PluginPresentationViewSettings}, or `null` if
172
- * no view has that id.
187
+ * no view has that id. A plan view also reports its `cutPlaneHeight`,
188
+ * `viewDepthStorey` and `showOverheadObjects` (saved values, or the product
189
+ * defaults for a plan saved before cut ranges existed); other views omit them.
173
190
  *
174
191
  * @examplePrompt What color mode is the Ground Floor view using?
175
192
  * @examplePrompt Get the display settings for this view
176
193
  * @examplePrompt Does the site plan view show axes and labels?
177
194
  * @examplePrompt Read the background color of the active view
195
+ * @examplePrompt What is the cut height of this plan?
196
+ * @examplePrompt How deep does this plan look below the cut?
178
197
  *
179
198
  * # Example
180
199
  * ```ts
@@ -224,14 +243,24 @@ export abstract class PluginPresentationViewsApi {
224
243
  * toggle the view-settings modal runs); on other views the mode is applied
225
244
  * the next time the view is activated.
226
245
  *
246
+ * `cutPlaneHeight`, `viewDepthStorey` and `showOverheadObjects` set the plan's
247
+ * cut range and apply to **plan views only** (patching them on a 3D, elevation
248
+ * or site-plan view is rejected). `cutPlaneHeight` is in engine units, the same
249
+ * unit as `story.height`, and must be greater than 0 and less than the plan
250
+ * storey's height. `viewDepthStorey` must be an existing storey at or below the
251
+ * plan's storey. A sparse patch leaves the other two range fields as they
252
+ * were; on the active plan the canvas redraws live.
253
+ *
227
254
  * @param viewId - The id of the view to update.
228
255
  * @param settings - A partial {@linkcode PluginPresentationViewSettings}; any
229
256
  * omitted field is left unchanged.
230
257
  * @returns The updated view's `id`.
231
258
  * @throws If writes are disabled, no view has the given id, the patch is
232
259
  * contradictory (`showLabels: false` with a non-empty `labels`, or
233
- * `showLabels: true` with an explicitly empty `labels` list), or
234
- * `viewMode: "perspective"` is patched on a 2D plan view.
260
+ * `showLabels: true` with an explicitly empty `labels` list),
261
+ * `viewMode: "perspective"` is patched on a 2D plan view, a plan-range
262
+ * field is patched on a view that is not a plan, or the cut height / depth
263
+ * is out of range.
235
264
  *
236
265
  * @examplePrompt Switch this view to monochrome color mode
237
266
  * @examplePrompt Turn off the axis in the Ground Floor view
@@ -239,6 +268,9 @@ export abstract class PluginPresentationViewsApi {
239
268
  * @examplePrompt Show area labels on this view
240
269
  * @examplePrompt Enable hidden-line mode for the section view
241
270
  * @examplePrompt Make the 3D view orthographic instead of perspective
271
+ * @examplePrompt Raise the cut plane of the Ground Floor plan to 1.8 m
272
+ * @examplePrompt Show the basement below in this plan
273
+ * @examplePrompt Hide the overhead objects in this plan
242
274
  *
243
275
  * # Example
244
276
  * ```ts
@@ -250,6 +282,12 @@ export abstract class PluginPresentationViewsApi {
250
282
  * await snaptrude.presentation.views.updateSettings("view_123", {
251
283
  * viewMode: "isometric",
252
284
  * })
285
+ * // set a plan's range: cut 1.2 m up, show the basement below, no overhead
286
+ * await snaptrude.presentation.views.updateSettings("plan_1", {
287
+ * cutPlaneHeight: 4.72,
288
+ * viewDepthStorey: -1,
289
+ * showOverheadObjects: false,
290
+ * })
253
291
  * ```
254
292
  */
255
293
  public abstract updateSettings(
@@ -313,13 +351,36 @@ export abstract class PluginPresentationViewsApi {
313
351
  }
314
352
 
315
353
  /**
316
- * The kind of a saved view: a 2D plan view or a 3D view.
354
+ * The rendering category of a saved view. Existing plan/3D values are preserved;
355
+ * elevations are identified independently of their orthographic 3D camera.
317
356
  */
318
- export const PluginPresentationViewType = z.enum(["2d", "3d"])
357
+ export const PluginPresentationViewType = z.enum(["2d", "3d", "elevation"])
319
358
  export type PluginPresentationViewType = z.infer<
320
359
  typeof PluginPresentationViewType
321
360
  >
322
361
 
362
+ /** The native semantic kind persisted for a saved view. */
363
+ export const PluginPresentationViewKind = z.enum([
364
+ "plan",
365
+ "sitePlan",
366
+ "threeD",
367
+ "elevation",
368
+ ])
369
+ export type PluginPresentationViewKind = z.infer<
370
+ typeof PluginPresentationViewKind
371
+ >
372
+
373
+ /** Cardinal direction for an elevation; non-elevation views return `null`. */
374
+ export const PluginPresentationElevationDirection = z.enum([
375
+ "north",
376
+ "east",
377
+ "south",
378
+ "west",
379
+ ])
380
+ export type PluginPresentationElevationDirection = z.infer<
381
+ typeof PluginPresentationElevationDirection
382
+ >
383
+
323
384
  /**
324
385
  * A saved presentation view.
325
386
  *
@@ -327,7 +388,9 @@ export type PluginPresentationViewType = z.infer<
327
388
  * |---|---|---|
328
389
  * | `id` | `string` | Unique view id |
329
390
  * | `name` | `string` | Display name |
330
- * | `type` | `"2d" \| "3d"` | Whether this is a 2D plan view or a 3D view |
391
+ * | `type` | `"2d" \| "3d" \| "elevation"` | Rendering category; elevations are distinct from ordinary 3D views |
392
+ * | `kind` | {@linkcode PluginPresentationViewKind} | Native semantic view kind |
393
+ * | `direction` | {@linkcode PluginPresentationElevationDirection}` \| null` | Cardinal direction for elevations; otherwise `null` |
331
394
  * | `isActive` | `boolean` | Whether this view is the currently active view |
332
395
  * | `storey` | `number \| null` | The storey this view was saved on (`null` on older views saved without one) |
333
396
  */
@@ -335,6 +398,8 @@ export const PluginPresentationView = z.object({
335
398
  id: z.string(),
336
399
  name: z.string(),
337
400
  type: PluginPresentationViewType,
401
+ kind: PluginPresentationViewKind,
402
+ direction: PluginPresentationElevationDirection.nullable(),
338
403
  isActive: z.boolean(),
339
404
  storey: z.number().nullable(),
340
405
  })
@@ -531,6 +596,9 @@ export type PluginPresentationViewMode = z.infer<
531
596
  * | `showEdges` | `boolean` | Whether edges are shown; `false` = hidden-line rendering |
532
597
  * | `showLabels` | `boolean` | Master label switch — whether on-canvas labels are shown at all. `true` always pairs with a non-empty `labels` selection (labels render only while the selection is non-empty; there is no labels-on-with-empty-selection state) |
533
598
  * | `labels` | {@linkcode PluginPresentationViewLabel}`[]` | Which label categories are selected. When `showLabels` is `false` the view stores no selection and this reads `[]` |
599
+ * | `cutPlaneHeight` | `number`? | **Plan views only.** Height of the plan's cut plane above its storey base, in engine units (the unit `story.height` uses). Absent on 3D and elevation views |
600
+ * | `viewDepthStorey` | `number`? | **Plan views only.** The lowest storey the plan shows below the cut; defaults to the plan's own storey. Absent on 3D and elevation views |
601
+ * | `showOverheadObjects` | `boolean`? | **Plan views only.** Whether objects above the cut are drawn as dashed overhead linework. Absent on 3D and elevation views |
534
602
  */
535
603
  export const PluginPresentationViewSettings = z.object({
536
604
  backgroundColor: z.string(),
@@ -540,6 +608,9 @@ export const PluginPresentationViewSettings = z.object({
540
608
  showEdges: z.boolean(),
541
609
  showLabels: z.boolean(),
542
610
  labels: z.array(PluginPresentationViewLabel),
611
+ cutPlaneHeight: z.number().finite().positive().optional(),
612
+ viewDepthStorey: z.number().int().optional(),
613
+ showOverheadObjects: z.boolean().optional(),
543
614
  })
544
615
  export type PluginPresentationViewSettings = z.infer<
545
616
  typeof PluginPresentationViewSettings