@snaptrude/plugin-core 0.9.17 → 0.9.18-voids-20261016.1
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/api-manifest.full.json +10406 -0
- package/api-manifest.json +737 -54
- package/dist/api/analysis/daylight.d.ts +5 -5
- package/dist/api/analysis/solar.d.ts +2 -2
- package/dist/api/core/camera/index.d.ts +29 -0
- package/dist/api/core/camera/index.d.ts.map +1 -1
- package/dist/api/core/geom/create/index.d.ts +7 -1
- package/dist/api/core/geom/create/index.d.ts.map +1 -1
- package/dist/api/core/geom/update/contour.d.ts +8 -2
- package/dist/api/core/geom/update/contour.d.ts.map +1 -1
- package/dist/api/core/zoom/index.d.ts +13 -0
- package/dist/api/core/zoom/index.d.ts.map +1 -1
- package/dist/api/design/bim.d.ts +209 -0
- package/dist/api/design/bim.d.ts.map +1 -0
- package/dist/api/design/boolean/index.d.ts +2 -0
- package/dist/api/design/boolean/index.d.ts.map +1 -1
- package/dist/api/design/catalog.d.ts +320 -0
- package/dist/api/design/catalog.d.ts.map +1 -0
- package/dist/api/design/create/bulk-items.d.ts +65 -25
- package/dist/api/design/create/bulk-items.d.ts.map +1 -1
- package/dist/api/design/create/index.d.ts +272 -99
- package/dist/api/design/create/index.d.ts.map +1 -1
- package/dist/api/design/create/opening-fields.d.ts +13 -12
- package/dist/api/design/create/opening-fields.d.ts.map +1 -1
- package/dist/api/design/delete/index.d.ts +1 -0
- package/dist/api/design/delete/index.d.ts.map +1 -1
- package/dist/api/design/doors/index.d.ts +18 -24
- package/dist/api/design/doors/index.d.ts.map +1 -1
- package/dist/api/design/family.d.ts +797 -27
- package/dist/api/design/family.d.ts.map +1 -1
- package/dist/api/design/index.d.ts +16 -0
- package/dist/api/design/index.d.ts.map +1 -1
- package/dist/api/design/networks.d.ts +1703 -0
- package/dist/api/design/networks.d.ts.map +1 -0
- package/dist/api/design/query/index.d.ts +42 -32
- package/dist/api/design/query/index.d.ts.map +1 -1
- package/dist/api/design/selection/index.d.ts +10 -10
- package/dist/api/design/types/index.d.ts +40 -24
- package/dist/api/design/types/index.d.ts.map +1 -1
- package/dist/api/design/update/index.d.ts +43 -3
- package/dist/api/design/update/index.d.ts.map +1 -1
- package/dist/api/design/windows/index.d.ts +8 -8
- package/dist/api/design/windows/index.d.ts.map +1 -1
- package/dist/api/presentation/aiInspiration.d.ts +10 -10
- package/dist/api/presentation/annotate.d.ts +38 -22
- package/dist/api/presentation/annotate.d.ts.map +1 -1
- package/dist/api/presentation/drawingContract.d.ts +32 -0
- package/dist/api/presentation/drawingContract.d.ts.map +1 -0
- package/dist/api/presentation/drawings.d.ts +3523 -0
- package/dist/api/presentation/drawings.d.ts.map +1 -0
- package/dist/api/presentation/export.d.ts +23 -5
- package/dist/api/presentation/export.d.ts.map +1 -1
- package/dist/api/presentation/index.d.ts +32 -12
- package/dist/api/presentation/index.d.ts.map +1 -1
- package/dist/api/presentation/placedViews.d.ts +106 -6
- package/dist/api/presentation/placedViews.d.ts.map +1 -1
- package/dist/api/presentation/shapes.d.ts +2 -2
- package/dist/api/presentation/sheets.d.ts +175 -19
- package/dist/api/presentation/sheets.d.ts.map +1 -1
- package/dist/api/presentation/viewPresets.d.ts +222 -0
- package/dist/api/presentation/viewPresets.d.ts.map +1 -0
- package/dist/api/presentation/views.d.ts +103 -5
- package/dist/api/presentation/views.d.ts.map +1 -1
- package/dist/api/presentation/walkthroughs.d.ts +6 -6
- package/dist/errors/codes.d.ts +3 -1
- package/dist/errors/codes.d.ts.map +1 -1
- package/dist/index.cjs +3693 -2383
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3573 -2383
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/scripts/generate-manifest.mjs +5 -0
- package/src/api/core/camera/index.ts +29 -0
- package/src/api/core/geom/create/index.ts +7 -1
- package/src/api/core/geom/update/contour.ts +8 -2
- package/src/api/core/zoom/index.ts +13 -0
- package/src/api/design/bim.ts +121 -0
- package/src/api/design/boolean/index.ts +2 -0
- package/src/api/design/catalog.ts +203 -0
- package/src/api/design/create/bulk-items.ts +57 -17
- package/src/api/design/create/index.ts +288 -120
- package/src/api/design/create/opening-fields.ts +15 -12
- package/src/api/design/delete/index.ts +1 -0
- package/src/api/design/doors/index.ts +58 -42
- package/src/api/design/family.ts +662 -32
- package/src/api/design/index.ts +34 -4
- package/src/api/design/networks.ts +607 -0
- package/src/api/design/query/index.ts +12 -2
- package/src/api/design/types/index.ts +31 -24
- package/src/api/design/update/index.ts +44 -3
- package/src/api/design/windows/index.ts +40 -22
- package/src/api/presentation/annotate.ts +90 -58
- package/src/api/presentation/drawingContract.ts +70 -0
- package/src/api/presentation/drawings.ts +1179 -0
- package/src/api/presentation/export.ts +32 -6
- package/src/api/presentation/index.ts +39 -14
- package/src/api/presentation/placedViews.ts +119 -28
- package/src/api/presentation/sheets.ts +181 -20
- package/src/api/presentation/viewPresets.ts +241 -0
- package/src/api/presentation/views.ts +46 -6
- package/src/errors/codes.ts +7 -0
- package/test/drawingContract.test.mjs +288 -0
- package/test/errors.test.mjs +1 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import * as z from "zod";
|
|
2
2
|
import { PluginApiReturn } from "../../../types";
|
|
3
|
-
import { BrepHandle, ComponentHandle, ContourHandle, CurveHandle, ProfileHandle, Vec3Handle } from "../../../handles";
|
|
3
|
+
import { BrepHandle, ComponentHandle, ContourHandle, LineHandle, CurveHandle, ProfileHandle, Vec3Handle } from "../../../handles";
|
|
4
4
|
import { PluginGridStyleOptions } from "./grids";
|
|
5
5
|
import { PluginSpaceType, PluginMassType, PluginDepartmentId } from "../../entity/space";
|
|
6
6
|
import { PluginBuildableEnvelopePolygonVertex, PluginBuildableEnvelopeSetbackTier, PluginBuildableEnvelopeVerticalCap, PluginBuildableEnvelopeCreateResult } from "../../entity/buildableEnvelope";
|
|
7
|
-
import type { PluginCreateDoorItem, PluginCreateFloorItem, PluginCreateFurnitureItem, PluginCreateWallRunItem, PluginCreateWindowItem } from "./bulk-items";
|
|
7
|
+
import type { PluginCreateDoorItem, PluginCreateFloorItem, PluginCreateFurnitureItem, PluginCreateVoidItem, PluginCreateWallRunItem, PluginCreateWindowItem } from "./bulk-items";
|
|
8
8
|
import { PluginWallTopProfile } from "./bulk-items";
|
|
9
|
+
import { PluginWallType } from "../types";
|
|
10
|
+
import { PluginFamilyPlacement, PluginFamilyFloorOptions, PluginFamilySlabOptions, PluginFamilyCeilingOptions, PluginFamilyValues } from "../catalog";
|
|
9
11
|
/**
|
|
10
12
|
* `design.create.*` — author new scene-committed BIM entities.
|
|
11
13
|
*
|
|
@@ -19,9 +21,17 @@ import { PluginWallTopProfile } from "./bulk-items";
|
|
|
19
21
|
* Footprint objects take a {@linkcode ContourHandle} (outer profile + holes);
|
|
20
22
|
* build one with `snaptrude.core.geom.create.contourFromProfile(s)`.
|
|
21
23
|
*
|
|
22
|
-
*
|
|
24
|
+
* Family overloads take `{ type, values? }` from `design.catalog`. The family supplies
|
|
25
|
+
* construction; the contour or axis supplies instance geometry. Geometry uses SU,
|
|
26
|
+
* while family length overrides use mm and angles use degrees. Omitted parameters
|
|
27
|
+
* retain family defaults; shared/type, formula and geometry-bound overrides are refused.
|
|
28
|
+
* Placement never publishes a definition. Unsupported references or geometry fail before mutation.
|
|
29
|
+
*
|
|
30
|
+
* `door`/`window` place a parametric family into a host wall (the world point is
|
|
23
31
|
* projected onto the wall face to locate the opening; the wall is re-cut in one
|
|
24
|
-
* undo entry) and throw if the point projects outside the wall.
|
|
32
|
+
* undo entry) and throw if the point projects outside the wall. Voids
|
|
33
|
+
* (`void`/`voids`) are the third hosted child: holes through slabs, floors,
|
|
34
|
+
* roofs and ceilings. `smartLayout` is
|
|
25
35
|
* the one creator returning a grouped {@linkcode PluginSmartLayoutResult} rather
|
|
26
36
|
* than a handle — it clones an in-scene template into one or more target spaces,
|
|
27
37
|
* merging every target into a single undo batch (see its JSDoc).
|
|
@@ -152,6 +162,9 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
152
162
|
* Create a **slab** by extruding a footprint contour by `thickness`
|
|
153
163
|
* (default direction: down).
|
|
154
164
|
*
|
|
165
|
+
* To cut a hole in an EXISTING one, use `design.create.void`; a contour hole
|
|
166
|
+
* here is baked into the footprint.
|
|
167
|
+
*
|
|
155
168
|
* @param contour - Footprint (outer + holes)
|
|
156
169
|
* @param thickness - Slab thickness (> 0)
|
|
157
170
|
* @param direction - Extrusion direction (default `"down"`)
|
|
@@ -172,15 +185,28 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
172
185
|
* const slab = await snaptrude.design.create.slab(contour, 0.15, "down", "Plinth")
|
|
173
186
|
* ```
|
|
174
187
|
*/
|
|
175
|
-
abstract slab(
|
|
188
|
+
abstract slab(...args: [
|
|
189
|
+
contour: ContourHandle,
|
|
190
|
+
thickness: number,
|
|
191
|
+
direction?: "up" | "down",
|
|
192
|
+
slabType?: PluginSlabType
|
|
193
|
+
] | [contour: ContourHandle, options: PluginFamilySlabOptions]): PluginApiReturn<ComponentHandle>;
|
|
176
194
|
/**
|
|
177
195
|
* Create a **floor** by extruding a footprint contour by `thickness`
|
|
178
196
|
* (extruded upward).
|
|
179
197
|
*
|
|
198
|
+
* The native family overload takes `{ type, values?, position? }`. Contour
|
|
199
|
+
* geometry uses SU; family values use mm. The family supplies layer thickness.
|
|
200
|
+
* PG2 can split or merge the footprint, so both overloads return an array.
|
|
201
|
+
* A merge into an existing floor can return no newly created handles.
|
|
202
|
+
*
|
|
203
|
+
* To cut a hole in an EXISTING one, use `design.create.void`; a contour hole
|
|
204
|
+
* here is baked into the footprint.
|
|
205
|
+
*
|
|
180
206
|
* @param contour - Footprint (outer + holes)
|
|
181
207
|
* @param thickness - Floor thickness (> 0)
|
|
182
208
|
* @param position - Offset from origin
|
|
183
|
-
* @returns
|
|
209
|
+
* @returns Newly created {@linkcode ComponentHandle}s; an empty array after a merge
|
|
184
210
|
* @throws if the contour is invalid or the thickness is not positive
|
|
185
211
|
*
|
|
186
212
|
* @examplePrompt Create a floor from this room outline
|
|
@@ -195,11 +221,11 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
195
221
|
* const floor = await snaptrude.design.create.floor(contour, 0.1)
|
|
196
222
|
* ```
|
|
197
223
|
*
|
|
198
|
-
* @performance For
|
|
199
|
-
* host round-trip and
|
|
200
|
-
*
|
|
224
|
+
* @performance For dimensional floors, `design.create.floors(items[])` uses one
|
|
225
|
+
* host round-trip and one undo entry. That bulk method does not accept native
|
|
226
|
+
* family options; use this method for a family-backed floor.
|
|
201
227
|
*/
|
|
202
|
-
abstract floor(contour: ContourHandle, thickness: number, position?: Vec3Handle): PluginApiReturn<ComponentHandle>;
|
|
228
|
+
abstract floor(...args: [contour: ContourHandle, thickness: number, position?: Vec3Handle] | [contour: ContourHandle, options: PluginFamilyFloorOptions]): PluginApiReturn<ComponentHandle[]>;
|
|
203
229
|
/**
|
|
204
230
|
* Create **many floors** in one undoable operation (bulk plural of
|
|
205
231
|
* {@linkcode floor}). Each item extrudes its own footprint contour (outer
|
|
@@ -241,6 +267,9 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
241
267
|
* Create a **roof** by extruding a footprint contour by `thickness`. Created
|
|
242
268
|
* flat (extruded downward); pitch/slope is a separate post-creation edit.
|
|
243
269
|
*
|
|
270
|
+
* To cut a hole in an EXISTING one, use `design.create.void`; a contour hole
|
|
271
|
+
* here is baked into the footprint.
|
|
272
|
+
*
|
|
244
273
|
* @param contour - Footprint (outer + holes)
|
|
245
274
|
* @param thickness - Roof-slab thickness (> 0)
|
|
246
275
|
* @returns the {@linkcode ComponentHandle} of the created roof
|
|
@@ -258,11 +287,14 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
258
287
|
* const roof = await snaptrude.design.create.roof(contour, 0.2)
|
|
259
288
|
* ```
|
|
260
289
|
*/
|
|
261
|
-
abstract roof(contour: ContourHandle, thickness: number): PluginApiReturn<ComponentHandle>;
|
|
290
|
+
abstract roof(contour: ContourHandle, thickness: number | PluginFamilyPlacement): PluginApiReturn<ComponentHandle>;
|
|
262
291
|
/**
|
|
263
292
|
* Create a **ceiling** by extruding a footprint contour by `thickness`, lifted
|
|
264
293
|
* `heightFromFloor` above the floor.
|
|
265
294
|
*
|
|
295
|
+
* To cut a hole in an EXISTING one, use `design.create.void`; a contour hole
|
|
296
|
+
* here is baked into the footprint.
|
|
297
|
+
*
|
|
266
298
|
* @param contour - Footprint (outer + holes)
|
|
267
299
|
* @param thickness - Ceiling thickness (> 0)
|
|
268
300
|
* @param heightFromFloor - Lift above the floor (default 0)
|
|
@@ -281,7 +313,7 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
281
313
|
* const ceiling = await snaptrude.design.create.ceiling(contour, 0.05, 2.8)
|
|
282
314
|
* ```
|
|
283
315
|
*/
|
|
284
|
-
abstract ceiling(contour: ContourHandle, thickness: number, heightFromFloor?: number): PluginApiReturn<ComponentHandle>;
|
|
316
|
+
abstract ceiling(...args: [contour: ContourHandle, thickness: number, heightFromFloor?: number] | [contour: ContourHandle, options: PluginFamilyCeilingOptions]): PluginApiReturn<ComponentHandle>;
|
|
285
317
|
/**
|
|
286
318
|
* Create a **column** by extruding a cross-section contour upward by `height`
|
|
287
319
|
* from a base `position`. The column is built to EXACTLY `height` — unlike
|
|
@@ -309,7 +341,12 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
309
341
|
* const column = await snaptrude.design.create.column(base, crossSection, 3)
|
|
310
342
|
* ```
|
|
311
343
|
*/
|
|
312
|
-
abstract column(
|
|
344
|
+
abstract column(...args: [
|
|
345
|
+
position: Vec3Handle,
|
|
346
|
+
crossSection: ContourHandle,
|
|
347
|
+
height: number,
|
|
348
|
+
directionUp?: Vec3Handle
|
|
349
|
+
] | [axis: LineHandle, options: PluginFamilyPlacement]): PluginApiReturn<ComponentHandle>;
|
|
313
350
|
/**
|
|
314
351
|
* Create a **beam** by extruding a cross-section contour along `direction` by
|
|
315
352
|
* `length`. Matches the Snaptrude beam tool's semantics: the beam body hangs
|
|
@@ -350,7 +387,7 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
350
387
|
* const beam = await snaptrude.design.create.beam(section, 6, alongX)
|
|
351
388
|
* ```
|
|
352
389
|
*/
|
|
353
|
-
abstract beam(section: ContourHandle, length: number, direction?: Vec3Handle): PluginApiReturn<ComponentHandle>;
|
|
390
|
+
abstract beam(...args: [section: ContourHandle, length: number, direction?: Vec3Handle] | [axis: LineHandle, options: PluginFamilyPlacement]): PluginApiReturn<ComponentHandle>;
|
|
354
391
|
/**
|
|
355
392
|
* Create a connected run of **walls** from a profile — one wall per curve in
|
|
356
393
|
* the profile's chain, with mitred corners at shared endpoints.
|
|
@@ -359,12 +396,12 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
359
396
|
* @param height - Wall height (default engine default)
|
|
360
397
|
* @param thickness - Wall thickness (default: the `wallType`'s total layer
|
|
361
398
|
* thickness when `wallType` is given, else the engine default)
|
|
362
|
-
* @param wallType -
|
|
363
|
-
*
|
|
364
|
-
*
|
|
365
|
-
*
|
|
366
|
-
*
|
|
367
|
-
* generic wall.
|
|
399
|
+
* @param wallType - Legacy label/`wall:` id, or the exact `nativeFamily`
|
|
400
|
+
* `{ id, version }` pin from `design.types.list("wall")`. Native pins are
|
|
401
|
+
* authorized on every use; selecting a family in Draw is not registration.
|
|
402
|
+
* Native pins support straight horizontal centerlines and flat tops only.
|
|
403
|
+
* Omit thickness for native pins; a conflicting explicit thickness rejects.
|
|
404
|
+
* Default: the engine's generic wall.
|
|
368
405
|
* @param storey - Target storey (integer: `1` ground, `2` first floor, `-1`
|
|
369
406
|
* basement — same convention as `design.create.space`). The walls are
|
|
370
407
|
* assigned to it and lifted to its base elevation, all inside the same
|
|
@@ -419,7 +456,7 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
419
456
|
* host round-trip and ONE undo entry for every run in the batch. Looping this
|
|
420
457
|
* single-run creator is N round-trips and N undo entries.
|
|
421
458
|
*/
|
|
422
|
-
abstract walls(profile: ProfileHandle, height?: number, thickness?: number, wallType?:
|
|
459
|
+
abstract walls(profile: ProfileHandle, height?: number, thickness?: number, wallType?: PluginWallType, storey?: number, topProfiles?: (PluginWallTopProfile | null)[], values?: PluginFamilyValues): PluginApiReturn<ComponentHandle[]>;
|
|
423
460
|
/**
|
|
424
461
|
* Create **many wall runs** in one undoable operation (bulk plural of
|
|
425
462
|
* {@linkcode walls}). Each item is one full run — a wall per curve in that
|
|
@@ -761,30 +798,23 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
761
798
|
*/
|
|
762
799
|
abstract furnitureItems(items: PluginCreateFurnitureItem[]): PluginApiReturn<ComponentHandle[]>;
|
|
763
800
|
/**
|
|
764
|
-
* Place a **door**
|
|
801
|
+
* Place a parametric **door** family into a host wall.
|
|
765
802
|
*
|
|
766
|
-
* Identified by a **
|
|
767
|
-
* or the general library's `fullName`. Discover ids with
|
|
803
|
+
* Identified by a saved **family definition id**. Discover ids with
|
|
768
804
|
* {@linkcode PluginDesignDoorsApi.listCatalog}. The world `position` is
|
|
769
805
|
* projected onto the host wall's face to locate the opening; the wall is
|
|
770
806
|
* re-cut and the door hosted in a single undo entry. Placement is
|
|
771
|
-
* asynchronous
|
|
807
|
+
* asynchronous. Values and host bindings are evaluated before the first cut.
|
|
772
808
|
*
|
|
773
|
-
* @param
|
|
809
|
+
* @param familyId - Hosted door definition ID; legacy mesh catalog IDs are not accepted
|
|
774
810
|
* @param hostWall - The wall to host the door
|
|
775
811
|
* @param position - World point projected onto the wall to locate the opening
|
|
776
|
-
* @param options -
|
|
777
|
-
*
|
|
778
|
-
*
|
|
779
|
-
*
|
|
780
|
-
* @param facing - World point on the side of the wall the door swings open
|
|
781
|
-
* to (the room it opens into — where the plan symbol draws the swing arc).
|
|
782
|
-
* Any point clearly on that side works (e.g. the room's center). Default:
|
|
783
|
-
* the engine picks a side (nondeterministic when `position` sits on the
|
|
784
|
-
* wall centerline).
|
|
812
|
+
* @param options - `version` pins the definition. `values` sets authored parameters
|
|
813
|
+
* (numeric lengths in SU, or unit strings). `label` names the instance.
|
|
814
|
+
* `hinge` selects the declared `hand` enum: local -X is left, +X is right.
|
|
815
|
+
* @param facing - World point selecting local +Z; omitted uses the picked face
|
|
785
816
|
* @returns the {@linkcode ComponentHandle} of the placed door
|
|
786
|
-
* @throws if the
|
|
787
|
-
* mesh fails to load, or the projected point falls **outside** the host wall
|
|
817
|
+
* @throws if the family/category/parameters are invalid, or placement or cutting fails
|
|
788
818
|
*
|
|
789
819
|
* @examplePrompt Add a door to this wall here
|
|
790
820
|
* @examplePrompt Place a sliding door on the selected wall
|
|
@@ -826,23 +856,22 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
826
856
|
* round-trip and ONE undo entry, with each host wall re-cut once per opening inside
|
|
827
857
|
* that single call. Looping this single-door creator is N round-trips.
|
|
828
858
|
*/
|
|
829
|
-
abstract door(
|
|
859
|
+
abstract door(familyId: string, hostWall: ComponentHandle, position: Vec3Handle, options?: {
|
|
830
860
|
label?: string;
|
|
831
861
|
hinge?: Vec3Handle;
|
|
862
|
+
version?: number;
|
|
863
|
+
values?: Record<string, number | string>;
|
|
832
864
|
}, facing?: Vec3Handle): PluginApiReturn<ComponentHandle>;
|
|
833
865
|
/**
|
|
834
866
|
* Place **many doors** into host walls in one undoable operation (bulk plural
|
|
835
|
-
* of {@linkcode door}). Each item carries its own
|
|
867
|
+
* of {@linkcode door}). Each item carries its own family id, host wall,
|
|
836
868
|
* world position, and optional `facing`, `label`, `width` and `height` — the
|
|
837
869
|
* same fields as a `"door"` {@linkcode PluginDesignCreateOpeningOptions}.
|
|
838
870
|
* Validate-all-or-throw; one command.
|
|
839
871
|
*
|
|
840
|
-
*
|
|
841
|
-
*
|
|
842
|
-
*
|
|
843
|
-
* chains the re-cuts internally — but after the call recover the surviving
|
|
844
|
-
* wall with `design.query.getHost(opening)`, never by reusing the handle you
|
|
845
|
-
* passed in.
|
|
872
|
+
* The wall keeps its identity. Several items may use the same host.
|
|
873
|
+
* Width and height set named recipe parameters, not mesh scale. The recipe's
|
|
874
|
+
* evaluated hole can include frame allowances. A failed item rolls back the batch.
|
|
846
875
|
*
|
|
847
876
|
* @param items - One {@linkcode PluginCreateDoorItem} per door to place
|
|
848
877
|
* (≥1, ≤1000)
|
|
@@ -850,10 +879,9 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
850
879
|
* @throws `VALIDATION` if the items fail the schema (empty array, more than
|
|
851
880
|
* 1000 items, unknown fields, a non-positive `width`/`height`);
|
|
852
881
|
* `HANDLE_INVALID` if a `position`, `facing` or `hinge` handle is unknown
|
|
853
|
-
* or released; `PRECONDITION_FAILED` if
|
|
854
|
-
*
|
|
855
|
-
*
|
|
856
|
-
* `OPERATION_FAILED` if a source mesh fails to load or placement fails
|
|
882
|
+
* or released; `PRECONDITION_FAILED` if the family cannot be resolved or saved,
|
|
883
|
+
* or a host is locked / is not in the active proposal;
|
|
884
|
+
* `OPERATION_FAILED` if placement, containment, overlap checks or cutting fail
|
|
857
885
|
* (nothing is created — `details.itemIndex` is the failing item);
|
|
858
886
|
* `METHOD_NOT_PERMITTED` if the plugin may not write.
|
|
859
887
|
*
|
|
@@ -864,7 +892,7 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
864
892
|
* @examplePrompt Add all the doors for this floor plan together
|
|
865
893
|
*
|
|
866
894
|
* @performance Bulk creator — the whole batch is ONE host round-trip and ONE undo
|
|
867
|
-
* entry
|
|
895
|
+
* entry. Always prefer this over
|
|
868
896
|
* calling `design.create.door` in a loop: build the full `items[]` array first
|
|
869
897
|
* (all host walls and points up front), then make one call.
|
|
870
898
|
*
|
|
@@ -874,38 +902,30 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
874
902
|
* const [wall] = await snaptrude.design.query.listWalls({ isSelected: true })
|
|
875
903
|
* const [entry] = await snaptrude.design.doors.listCatalog()
|
|
876
904
|
* const [front, side] = await snaptrude.design.create.doors([
|
|
877
|
-
* {
|
|
878
|
-
* {
|
|
905
|
+
* { familyId: entry.id, hostWall: wall, position: await v.new(2, 0, 5), label: "D-01" },
|
|
906
|
+
* { familyId: entry.id, hostWall: wall, position: await v.new(6, 0, 5), values: { width: "1200mm" } },
|
|
879
907
|
* ])
|
|
880
|
-
* //
|
|
908
|
+
* // The host still resolves after both cuts:
|
|
881
909
|
* const currentWall = await snaptrude.design.query.getHost(front)
|
|
882
910
|
* ```
|
|
883
911
|
*/
|
|
884
912
|
abstract doors(items: PluginCreateDoorItem[]): PluginApiReturn<ComponentHandle[]>;
|
|
885
913
|
/**
|
|
886
|
-
* Place a **window**
|
|
914
|
+
* Place a parametric **window** family into a host wall.
|
|
887
915
|
*
|
|
888
|
-
* Identified by a **
|
|
889
|
-
* or the general library's `fullName`. Discover ids with
|
|
916
|
+
* Identified by a saved **family definition id**. Discover ids with
|
|
890
917
|
* {@linkcode PluginDesignWindowsApi.listCatalog}. The world `position` is
|
|
891
918
|
* projected onto the host wall's face to locate the opening; the wall is
|
|
892
919
|
* re-cut and the window hosted in a single undo entry. Placement is
|
|
893
|
-
* asynchronous
|
|
920
|
+
* asynchronous. The sill parameter determines elevation; position Y is ignored.
|
|
894
921
|
*
|
|
895
|
-
* @param
|
|
922
|
+
* @param familyId - Hosted window definition ID; legacy mesh catalog IDs are not accepted
|
|
896
923
|
* @param hostWall - The wall to host the window
|
|
897
924
|
* @param position - World point projected onto the wall to locate the opening
|
|
898
|
-
* @param options -
|
|
899
|
-
*
|
|
900
|
-
* as {@linkcode PluginDesignCreateApi.door}; default the catalog item's
|
|
901
|
-
* authored side)
|
|
902
|
-
* @param facing - World point on the side of the wall the window opens to
|
|
903
|
-
* (matters for asymmetric windows, e.g. casement swing) — same convention
|
|
904
|
-
* as {@linkcode PluginDesignCreateApi.door}. Default: the engine picks a
|
|
905
|
-
* side (nondeterministic when `position` sits on the centerline).
|
|
925
|
+
* @param options - `version`, `values`, `label`, and parameter-driven `hinge`, as for door
|
|
926
|
+
* @param facing - World point selecting local +Z; omitted uses the picked face
|
|
906
927
|
* @returns the {@linkcode ComponentHandle} of the placed window
|
|
907
|
-
* @throws if the
|
|
908
|
-
* mesh fails to load, or the projected point falls **outside** the host wall
|
|
928
|
+
* @throws if the family/category/parameters are invalid, or placement or cutting fails
|
|
909
929
|
*
|
|
910
930
|
* @examplePrompt Add a window to this wall here
|
|
911
931
|
* @examplePrompt Place a casement window on the selected wall
|
|
@@ -930,25 +950,23 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
930
950
|
* host round-trip and ONE undo entry, with each host wall re-cut once per opening
|
|
931
951
|
* inside that single call. Looping this single-window creator is N round-trips.
|
|
932
952
|
*/
|
|
933
|
-
abstract window(
|
|
953
|
+
abstract window(familyId: string, hostWall: ComponentHandle, position: Vec3Handle, options?: {
|
|
934
954
|
label?: string;
|
|
935
955
|
hinge?: Vec3Handle;
|
|
956
|
+
version?: number;
|
|
957
|
+
values?: Record<string, number | string>;
|
|
936
958
|
}, facing?: Vec3Handle): PluginApiReturn<ComponentHandle>;
|
|
937
959
|
/**
|
|
938
960
|
* Place **many windows** into host walls in one undoable operation (bulk
|
|
939
|
-
* plural of {@linkcode window}). Each item carries its own
|
|
961
|
+
* plural of {@linkcode window}). Each item carries its own family id, host
|
|
940
962
|
* wall, world position, and optional `facing`, `label`, `width`, `height` and
|
|
941
963
|
* `sillHeight` — the same fields as a `"window"`
|
|
942
964
|
* {@linkcode PluginDesignCreateOpeningOptions}. `sillHeight` is measured from
|
|
943
965
|
* the host wall base to the BOTTOM of the window. Validate-all-or-throw; one
|
|
944
966
|
* command.
|
|
945
967
|
*
|
|
946
|
-
*
|
|
947
|
-
*
|
|
948
|
-
* Several items MAY name the same original wall handle in one call — the host
|
|
949
|
-
* chains the re-cuts internally — but after the call recover the surviving
|
|
950
|
-
* wall with `design.query.getHost(opening)`, never by reusing the handle you
|
|
951
|
-
* passed in.
|
|
968
|
+
* Hosts keep their identity. Width, height and sillHeight set the declared
|
|
969
|
+
* width, height and sill parameters before the first cut. No mesh scaling occurs.
|
|
952
970
|
*
|
|
953
971
|
* @param items - One {@linkcode PluginCreateWindowItem} per window to place
|
|
954
972
|
* (≥1, ≤1000)
|
|
@@ -956,10 +974,9 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
956
974
|
* @throws `VALIDATION` if the items fail the schema (empty array, more than
|
|
957
975
|
* 1000 items, unknown fields, a non-positive `width`/`height`, a negative
|
|
958
976
|
* `sillHeight`); `HANDLE_INVALID` if a `position`, `facing` or `hinge`
|
|
959
|
-
* handle is unknown or released; `PRECONDITION_FAILED` if
|
|
960
|
-
*
|
|
961
|
-
*
|
|
962
|
-
* `OPERATION_FAILED` if a source mesh fails to load or placement fails
|
|
977
|
+
* handle is unknown or released; `PRECONDITION_FAILED` if the family cannot be
|
|
978
|
+
* resolved or saved, or a host is locked / is not in the active proposal;
|
|
979
|
+
* `OPERATION_FAILED` if placement, containment, overlap checks or cutting fail
|
|
963
980
|
* (nothing is created — `details.itemIndex` is the failing item);
|
|
964
981
|
* `METHOD_NOT_PERMITTED` if the plugin may not write.
|
|
965
982
|
*
|
|
@@ -970,7 +987,7 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
970
987
|
* @examplePrompt Add all the windows with a 0.9m sill height together
|
|
971
988
|
*
|
|
972
989
|
* @performance Bulk creator — the whole batch is ONE host round-trip and ONE undo
|
|
973
|
-
* entry
|
|
990
|
+
* entry. Always prefer this over
|
|
974
991
|
* calling `design.create.window` in a loop: build the full `items[]` array first
|
|
975
992
|
* (all host walls and points up front), then make one call.
|
|
976
993
|
*
|
|
@@ -980,25 +997,161 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
980
997
|
* const [wall] = await snaptrude.design.query.listWalls({ isSelected: true })
|
|
981
998
|
* const [casement] = await snaptrude.design.windows.listCatalog()
|
|
982
999
|
* const placed = await snaptrude.design.create.windows([
|
|
983
|
-
* {
|
|
984
|
-
* {
|
|
1000
|
+
* { familyId: casement.id, hostWall: wall, position: await v.new(2, 0, 5), values: { sill: "900mm" } },
|
|
1001
|
+
* { familyId: casement.id, hostWall: wall, position: await v.new(5, 0, 5), values: { sill: "900mm" } },
|
|
985
1002
|
* ])
|
|
986
1003
|
* const currentWall = await snaptrude.design.query.getHost(placed[0])
|
|
987
1004
|
* ```
|
|
988
1005
|
*/
|
|
989
1006
|
abstract windows(items: PluginCreateWindowItem[]): PluginApiReturn<ComponentHandle[]>;
|
|
990
1007
|
/**
|
|
991
|
-
*
|
|
1008
|
+
* Cut a **void** — a hole, opening or shaft — through an existing FLAT slab,
|
|
1009
|
+
* floor, roof or ceiling. The void is a selectable child object of its host
|
|
1010
|
+
* (the "Void" of the Draw Void tool). It always cuts the full host thickness.
|
|
1011
|
+
* It can be moved with `design.transform.move` (a move that would leave the
|
|
1012
|
+
* host is shortened without a report) and removed with
|
|
1013
|
+
* `design.delete.entities`; to resize, delete it and cut a new one
|
|
1014
|
+
* (`design.update.space` refuses a void).
|
|
1015
|
+
*
|
|
1016
|
+
* Give the outline **in plan** (all points at one height): its height is
|
|
1017
|
+
* ignored, and it is dropped straight onto the host's top face, so one outline
|
|
1018
|
+
* works on every storey. Keep it at least 25.4 mm (0.1 SU) inside the host
|
|
1019
|
+
* edge and away from other voids; merge overlapping holes into one outline.
|
|
1020
|
+
* Straight segments and arcs only (no splines).
|
|
1021
|
+
*
|
|
1022
|
+
* **A room has a floor finish AND a structural slab that overlap in plan; a
|
|
1023
|
+
* void in one does not cut the other, so a through-opening needs one void in
|
|
1024
|
+
* each.**
|
|
1025
|
+
*
|
|
1026
|
+
* `getEntityType` reports a void as `"mass"`, and `listMasses` /
|
|
1027
|
+
* `listByType("mass")` include voids: a mass whose `design.query.getHost` is a
|
|
1028
|
+
* slab, floor, roof or ceiling is a void. After its host is copied, a void can
|
|
1029
|
+
* report `null` and be missing from those lists; `listChildren(host)` still
|
|
1030
|
+
* finds it.
|
|
1031
|
+
*
|
|
1032
|
+
* Call it as `snaptrude.design.create.void(...)`; `void` is a reserved word and
|
|
1033
|
+
* cannot be destructured. Voids in walls, on sloped, generated or multi-plane
|
|
1034
|
+
* roofs, and on instanced hosts are not available yet; for a door or window
|
|
1035
|
+
* use `design.create.door` / `window`. To make a NEW slab that already has a
|
|
1036
|
+
* fixed hole, pass a contour with holes to `design.create.slab`; that hole is
|
|
1037
|
+
* part of the footprint, not an object. For a contour's outer loop, pass
|
|
1038
|
+
* `core.geom.query.contour.getOuterProfile(contour)`.
|
|
1039
|
+
*
|
|
1040
|
+
* # Example
|
|
1041
|
+
* ```ts
|
|
1042
|
+
* const m = 1000 / 254 // metres → Snaptrude units (SU)
|
|
1043
|
+
* const [slab] = await snaptrude.design.query.listByType("slab", { isSelected: true })
|
|
1044
|
+
* const center = await snaptrude.core.math.vec3.new(10 * m, 0, 5 * m) // plan point; y is ignored
|
|
1045
|
+
* const outline = await snaptrude.core.geom.create.profileRect(2 * m, 2 * m, center) // 2 m x 2 m
|
|
1046
|
+
* const hole = await snaptrude.design.create.void(slab, outline)
|
|
1047
|
+
* ```
|
|
1048
|
+
*
|
|
1049
|
+
* A round hole is two arcs (a circle handle is not a profile):
|
|
1050
|
+
* ```ts
|
|
1051
|
+
* const m = 1000 / 254
|
|
1052
|
+
* const { vec3 } = snaptrude.core.math
|
|
1053
|
+
* const g = snaptrude.core.geom.create
|
|
1054
|
+
* const r = 0.5 * m // 1 m diameter
|
|
1055
|
+
* const centre = await vec3.new(10 * m, 0, 5 * m)
|
|
1056
|
+
* const axis = await vec3.new(0, -1, 0)
|
|
1057
|
+
* const east = await vec3.new(10 * m + r, 0, 5 * m)
|
|
1058
|
+
* const west = await vec3.new(10 * m - r, 0, 5 * m)
|
|
1059
|
+
* const round = await g.profileFromCurves([await g.arc(east, west, centre, axis), await g.arc(west, east, centre, axis)])
|
|
1060
|
+
* await snaptrude.design.create.void(slab, round) // never destructure `void`
|
|
1061
|
+
* ```
|
|
1062
|
+
*
|
|
1063
|
+
* @param host - The slab, floor, roof or ceiling to cut through
|
|
1064
|
+
* @param outline - Closed, flat plan outline (world SU); its height is ignored
|
|
1065
|
+
* @returns the {@linkcode ComponentHandle} of the new void
|
|
1066
|
+
* @throws `VALIDATION` if the outline is open, crosses itself, is not flat or
|
|
1067
|
+
* has a spline, or the arguments are the wrong handle kinds or swapped;
|
|
1068
|
+
* `HANDLE_INVALID` if a handle is unknown or released or the host was
|
|
1069
|
+
* deleted; `HANDLE_STALE` if the host was rebuilt (re-query it);
|
|
1070
|
+
* `PRECONDITION_FAILED` if the
|
|
1071
|
+
* host is a wall or not a slab/floor/roof/ceiling, is sloped, instanced, in
|
|
1072
|
+
* another building, locked, outside the active proposal, a generated roof or
|
|
1073
|
+
* not a single plate, or there is no active structure (`engineCode`
|
|
1074
|
+
* `NO_ACTIVE_STRUCTURE`); `OPERATION_FAILED` with `engineCode`
|
|
1075
|
+
* `VOID_DOES_NOT_FIT` when the outline crosses the host edge, overlaps a void
|
|
1076
|
+
* or hole, is closer than 25.4 mm to either, or the fit could not be checked,
|
|
1077
|
+
* or another `engineCode` when the cut failed (nothing is created, except
|
|
1078
|
+
* `PUBLISH_FAILED` with a hint that the voids are in the scene: undo, then
|
|
1079
|
+
* retry); `METHOD_NOT_PERMITTED` if the plugin may not write.
|
|
1080
|
+
*
|
|
1081
|
+
* @examplePrompt Cut a hole in this slab
|
|
1082
|
+
* @examplePrompt Add a 1.2m by 2.4m stair opening in the first-floor slab
|
|
1083
|
+
* @examplePrompt Make a 600 x 600 service penetration in the floor for the riser
|
|
1084
|
+
* @examplePrompt Put a skylight opening through the roof
|
|
1085
|
+
* @examplePrompt Cut a round 1m duct hole in the slab
|
|
1086
|
+
* @examplePrompt Make a cut-out in the ceiling for the light well
|
|
1087
|
+
* @examplePrompt Add a double-height atrium void in the level 2 floor
|
|
1088
|
+
*
|
|
1089
|
+
* @performance Single-void creator. For MORE THAN ONE void, call
|
|
1090
|
+
* `design.create.voids(items[])`: one host round-trip, ONE undo entry, one cut
|
|
1091
|
+
* per host.
|
|
1092
|
+
*/
|
|
1093
|
+
abstract void(host: ComponentHandle, outline: ProfileHandle): PluginApiReturn<ComponentHandle>;
|
|
1094
|
+
/**
|
|
1095
|
+
* Cut **many voids** (holes, openings, shafts) through slabs, floors, roofs
|
|
1096
|
+
* and ceilings in one undoable operation (bulk plural of {@linkcode void}).
|
|
1097
|
+
* Items may share a host or use different hosts — one shaft outline on every
|
|
1098
|
+
* storey's slab AND floor is one call. Validate-all-or-throw: one item whose
|
|
1099
|
+
* host does not contain the outline rejects the whole batch, so pass only the
|
|
1100
|
+
* hosts that contain it; `details.itemIndex` names the failing item (for two
|
|
1101
|
+
* overlapping items of the batch, the earlier one). At most 50 voids per host
|
|
1102
|
+
* and 200 in all per call. Same outline rules as {@linkcode void}: plan outline, 25.4 mm
|
|
1103
|
+
* (0.1 SU) clearance, floor AND slab are separate hosts. Call it as
|
|
1104
|
+
* `snaptrude.design.create.voids(...)`.
|
|
1105
|
+
*
|
|
1106
|
+
* # Example
|
|
1107
|
+
* ```ts
|
|
1108
|
+
* const m = 1000 / 254
|
|
1109
|
+
* // The user selects the slabs AND floors the shaft passes through; every one must contain the outline.
|
|
1110
|
+
* const hosts = [
|
|
1111
|
+
* ...(await snaptrude.design.query.listByType("slab", { isSelected: true })),
|
|
1112
|
+
* ...(await snaptrude.design.query.listByType("floor", { isSelected: true })),
|
|
1113
|
+
* ]
|
|
1114
|
+
* const centre = await snaptrude.core.math.vec3.new(12 * m, 0, -6 * m)
|
|
1115
|
+
* const shaft = await snaptrude.core.geom.create.profileRect(2 * m, 2 * m, centre)
|
|
1116
|
+
* const holes = await snaptrude.design.create.voids(hosts.map((host) => ({ host, outline: shaft })))
|
|
1117
|
+
* ```
|
|
1118
|
+
*
|
|
1119
|
+
* @param items - One {@linkcode PluginCreateVoidItem} per void (≥1, ≤200; ≤50 per host)
|
|
1120
|
+
* @returns the new voids as {@linkcode ComponentHandle}`[]`, in input order
|
|
1121
|
+
* @throws `VALIDATION` if the items fail the schema (empty array, more than
|
|
1122
|
+
* 1000 items, unknown fields), an outline is invalid (as for
|
|
1123
|
+
* {@linkcode void}), more than 50 items share one host, or there are more
|
|
1124
|
+
* than 200 items; plus every code {@linkcode void} throws, each with
|
|
1125
|
+
* `details.itemIndex`. Nothing is created on any failure, except
|
|
1126
|
+
* `PUBLISH_FAILED` (as for {@linkcode void}).
|
|
1127
|
+
*
|
|
1128
|
+
* @examplePrompt Cut a lift shaft through every floor slab of the core
|
|
1129
|
+
* @examplePrompt Cut a 2m x 2m shaft through all the slabs at this location
|
|
1130
|
+
* @examplePrompt Make stair openings in all the floors above the staircases
|
|
1131
|
+
* @examplePrompt Make holes in the roof for these three skylights
|
|
1132
|
+
* @examplePrompt Cut openings in each storey's slab matching this outline
|
|
1133
|
+
* @examplePrompt Punch the same riser penetration through every floor at once
|
|
1134
|
+
*
|
|
1135
|
+
* @performance ONE host round-trip, ONE undo entry, ONE cut per host. Never call
|
|
1136
|
+
* `void` in a loop. Runs synchronously on the main thread: 50 voids on one
|
|
1137
|
+
* host take about 1 s, and the time grows with the number of hosts (caps:
|
|
1138
|
+
* 50 per host, 200 per call).
|
|
1139
|
+
*/
|
|
1140
|
+
abstract voids(items: PluginCreateVoidItem[]): PluginApiReturn<ComponentHandle[]>;
|
|
1141
|
+
/**
|
|
1142
|
+
* Place a parametric **door or window** into a host wall with parameter overrides.
|
|
992
1143
|
*
|
|
993
1144
|
* The world `position` is projected onto the host wall to locate the opening.
|
|
994
1145
|
* All supplied dimensions use Snaptrude engine units. Window `sillHeight` is
|
|
995
1146
|
* measured from the host wall base to the bottom of the window, not to
|
|
996
1147
|
* its center. Placement is asynchronous and committed as one undoable creation.
|
|
997
1148
|
*
|
|
998
|
-
*
|
|
1149
|
+
* Wall only. For a hole in a slab, floor or roof use `design.create.void`.
|
|
1150
|
+
*
|
|
1151
|
+
* @param options - Opening kind, family and host references, placement, and
|
|
999
1152
|
* optional facing (swing side), hinge (hinged jamb), label, and dimensions
|
|
1000
1153
|
* @returns the {@linkcode ComponentHandle} of the placed door or window
|
|
1001
|
-
* @throws if the options are invalid, the
|
|
1154
|
+
* @throws if the options are invalid, the family id is unknown, the host is
|
|
1002
1155
|
* not a wall, loading fails, or the opening cannot be placed on the host
|
|
1003
1156
|
*
|
|
1004
1157
|
* @examplePrompt Add a 1m wide door to this wall here
|
|
@@ -1012,7 +1165,7 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
1012
1165
|
* ```ts
|
|
1013
1166
|
* const opening = await snaptrude.design.create.opening({
|
|
1014
1167
|
* kind: "window",
|
|
1015
|
-
*
|
|
1168
|
+
* familyId: windowType.id,
|
|
1016
1169
|
* hostWall: wall,
|
|
1017
1170
|
* position: await snaptrude.core.math.vec3.new(3, 0, 5),
|
|
1018
1171
|
* width: 1.2,
|
|
@@ -1465,7 +1618,7 @@ export type PluginDesignCreateBeamArgs = z.infer<typeof PluginDesignCreateBeamAr
|
|
|
1465
1618
|
* | `profile` | {@linkcode ProfileHandle} | Ordered curve chain (wall centerlines) |
|
|
1466
1619
|
* | `height` | `number`? | Wall height (default engine default) |
|
|
1467
1620
|
* | `thickness` | `number`? | Wall thickness (default: `wallType`'s total layer thickness when given, else engine default) |
|
|
1468
|
-
* | `wallType` |
|
|
1621
|
+
* | `wallType` | {@linkcode PluginWallType}? | Legacy name/id or exact native `{ id, version }` pin from `design.types.list("wall")` (default generic) |
|
|
1469
1622
|
* | `storey` | `number`? | Target storey (integer, must exist) — walls assigned + lifted to its base in the same undo entry (default: geometry-derived) |
|
|
1470
1623
|
* | `topProfiles` | ({@linkcode PluginWallTopProfile} \| `null`)[]? | Top edge per curve (same order); `null`/missing = flat at `height`. Straight curves only |
|
|
1471
1624
|
*/
|
|
@@ -1473,12 +1626,16 @@ export declare const PluginDesignCreateWallsArgs: z.ZodObject<{
|
|
|
1473
1626
|
profile: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"profile">, string>>;
|
|
1474
1627
|
height: z.ZodOptional<z.ZodNumber>;
|
|
1475
1628
|
thickness: z.ZodOptional<z.ZodNumber>;
|
|
1476
|
-
wallType: z.ZodOptional<z.ZodString
|
|
1629
|
+
wallType: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
1630
|
+
id: z.ZodString;
|
|
1631
|
+
version: z.ZodNumber;
|
|
1632
|
+
}, z.core.$strip>]>>;
|
|
1477
1633
|
storey: z.ZodOptional<z.ZodNumber>;
|
|
1478
1634
|
topProfiles: z.ZodOptional<z.ZodArray<z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
1479
1635
|
along: z.ZodNumber;
|
|
1480
1636
|
height: z.ZodNumber;
|
|
1481
1637
|
}, z.core.$strip>>>>>;
|
|
1638
|
+
values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>>>;
|
|
1482
1639
|
}, z.core.$strip>;
|
|
1483
1640
|
export type PluginDesignCreateWallsArgs = z.infer<typeof PluginDesignCreateWallsArgs>;
|
|
1484
1641
|
/**
|
|
@@ -1549,20 +1706,26 @@ export type PluginDesignCreateFurnitureArgs = z.infer<typeof PluginDesignCreateF
|
|
|
1549
1706
|
*
|
|
1550
1707
|
* | Property | Type | Description |
|
|
1551
1708
|
* |---|---|---|
|
|
1552
|
-
* | `
|
|
1709
|
+
* | `familyId` | `string` | Hosted door family definition ID |
|
|
1710
|
+
* | `version` | `number`? | Exact version; newest known by default |
|
|
1711
|
+
* | `values` | `Record<string, number \| string>`? | Parameters; numeric lengths use SU |
|
|
1553
1712
|
* | `hostWall` | {@linkcode ComponentHandle} | The wall to host the door |
|
|
1554
1713
|
* | `position` | {@linkcode Vec3Handle} | World point projected onto the wall |
|
|
1555
1714
|
* | `label` | `string`? | Instance name (optional) |
|
|
1556
1715
|
* | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the door swings open to (default engine-chosen) |
|
|
1557
|
-
* | `hinge` | {@linkcode Vec3Handle}? | World point near the
|
|
1716
|
+
* | `hinge` | {@linkcode Vec3Handle}? | World point near the hinged jamb; requires hand control |
|
|
1558
1717
|
*/
|
|
1559
1718
|
export declare const PluginDesignCreateDoorArgs: z.ZodObject<{
|
|
1560
|
-
|
|
1719
|
+
familyId: z.ZodString;
|
|
1720
|
+
version: z.ZodOptional<z.ZodNumber>;
|
|
1721
|
+
values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
|
|
1561
1722
|
hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
|
|
1562
1723
|
position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
|
|
1563
|
-
label: z.ZodOptional<z.ZodString>;
|
|
1564
1724
|
facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
1565
1725
|
hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
1726
|
+
label: z.ZodOptional<z.ZodString>;
|
|
1727
|
+
width: z.ZodOptional<z.ZodNumber>;
|
|
1728
|
+
height: z.ZodOptional<z.ZodNumber>;
|
|
1566
1729
|
}, z.core.$strip>;
|
|
1567
1730
|
export type PluginDesignCreateDoorArgs = z.infer<typeof PluginDesignCreateDoorArgs>;
|
|
1568
1731
|
/**
|
|
@@ -1570,20 +1733,26 @@ export type PluginDesignCreateDoorArgs = z.infer<typeof PluginDesignCreateDoorAr
|
|
|
1570
1733
|
*
|
|
1571
1734
|
* | Property | Type | Description |
|
|
1572
1735
|
* |---|---|---|
|
|
1573
|
-
* | `
|
|
1736
|
+
* | `familyId` | `string` | Hosted window family definition ID |
|
|
1737
|
+
* | `version` | `number`? | Exact version; newest known by default |
|
|
1738
|
+
* | `values` | `Record<string, number \| string>`? | Parameters; numeric lengths use SU |
|
|
1574
1739
|
* | `hostWall` | {@linkcode ComponentHandle} | The wall to host the window |
|
|
1575
1740
|
* | `position` | {@linkcode Vec3Handle} | World point projected onto the wall |
|
|
1576
1741
|
* | `label` | `string`? | Instance name (optional) |
|
|
1577
1742
|
* | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the window opens to (default engine-chosen) |
|
|
1578
|
-
* | `hinge` | {@linkcode Vec3Handle}? | World point near the
|
|
1743
|
+
* | `hinge` | {@linkcode Vec3Handle}? | World point near the hinged jamb; requires hand control |
|
|
1579
1744
|
*/
|
|
1580
1745
|
export declare const PluginDesignCreateWindowArgs: z.ZodObject<{
|
|
1581
|
-
|
|
1746
|
+
familyId: z.ZodString;
|
|
1747
|
+
version: z.ZodOptional<z.ZodNumber>;
|
|
1748
|
+
values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
|
|
1582
1749
|
hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
|
|
1583
1750
|
position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
|
|
1584
|
-
label: z.ZodOptional<z.ZodString>;
|
|
1585
1751
|
facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
1586
1752
|
hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
1753
|
+
label: z.ZodOptional<z.ZodString>;
|
|
1754
|
+
width: z.ZodOptional<z.ZodNumber>;
|
|
1755
|
+
height: z.ZodOptional<z.ZodNumber>;
|
|
1587
1756
|
}, z.core.$strip>;
|
|
1588
1757
|
export type PluginDesignCreateWindowArgs = z.infer<typeof PluginDesignCreateWindowArgs>;
|
|
1589
1758
|
/**
|
|
@@ -1593,7 +1762,9 @@ export type PluginDesignCreateWindowArgs = z.infer<typeof PluginDesignCreateWind
|
|
|
1593
1762
|
* the distance from the host wall base to the bottom of the window.
|
|
1594
1763
|
*/
|
|
1595
1764
|
export declare const PluginDesignCreateOpeningOptions: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
1596
|
-
|
|
1765
|
+
familyId: z.ZodString;
|
|
1766
|
+
version: z.ZodOptional<z.ZodNumber>;
|
|
1767
|
+
values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
|
|
1597
1768
|
hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
|
|
1598
1769
|
position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
|
|
1599
1770
|
facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
@@ -1604,7 +1775,9 @@ export declare const PluginDesignCreateOpeningOptions: z.ZodDiscriminatedUnion<[
|
|
|
1604
1775
|
kind: z.ZodLiteral<"door">;
|
|
1605
1776
|
}, z.core.$strict>, z.ZodObject<{
|
|
1606
1777
|
sillHeight: z.ZodOptional<z.ZodNumber>;
|
|
1607
|
-
|
|
1778
|
+
familyId: z.ZodString;
|
|
1779
|
+
version: z.ZodOptional<z.ZodNumber>;
|
|
1780
|
+
values: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
|
|
1608
1781
|
hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
|
|
1609
1782
|
position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
|
|
1610
1783
|
facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|