@snaptrude/plugin-core 0.0.0-dev-20260911064951 → 0.0.0-surfaces-20260921090636
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/CHANGELOG.md +0 -25
- package/api-manifest.json +151 -12
- package/dist/api/core/geom/create/index.d.ts +918 -93
- package/dist/api/core/geom/create/index.d.ts.map +1 -1
- package/dist/api/core/geom/query/brep.d.ts +50 -0
- package/dist/api/core/geom/query/brep.d.ts.map +1 -1
- package/dist/api/core/geom/query/curve.d.ts +58 -35
- package/dist/api/core/geom/query/curve.d.ts.map +1 -1
- package/dist/api/core/geom/query/edge.d.ts +2 -2
- package/dist/api/core/geom/query/face.d.ts +105 -0
- package/dist/api/core/geom/query/face.d.ts.map +1 -1
- package/dist/api/core/geom/update/curve.d.ts +5 -5
- package/dist/api/core/geom/update/profile.d.ts +1 -1
- package/dist/api/core/io/import/index.d.ts +1 -3
- package/dist/api/core/io/import/index.d.ts.map +1 -1
- package/dist/api/design/create/index.d.ts +22 -310
- package/dist/api/design/create/index.d.ts.map +1 -1
- package/dist/api/design/delete/index.d.ts +0 -4
- package/dist/api/design/delete/index.d.ts.map +1 -1
- package/dist/api/design/doors/index.d.ts +13 -20
- package/dist/api/design/doors/index.d.ts.map +1 -1
- package/dist/api/design/index.d.ts +0 -5
- package/dist/api/design/index.d.ts.map +1 -1
- package/dist/api/design/query/geometry/index.d.ts +27 -1
- package/dist/api/design/query/geometry/index.d.ts.map +1 -1
- package/dist/api/design/query/index.d.ts +47 -0
- package/dist/api/design/query/index.d.ts.map +1 -1
- package/dist/api/design/query/spaces.d.ts +5 -5
- package/dist/api/design/update/index.d.ts +87 -0
- package/dist/api/design/update/index.d.ts.map +1 -1
- package/dist/api/entity/referenceLine.d.ts +2 -2
- package/dist/api/entity/referenceLine.d.ts.map +1 -1
- package/dist/api/entity/space.d.ts +5 -4
- package/dist/api/entity/space.d.ts.map +1 -1
- package/dist/api/entity/story.d.ts +4 -4
- package/dist/api/presentation/annotate.d.ts +2 -2
- package/dist/api/presentation/shapes.d.ts +2 -2
- package/dist/api/program/site.d.ts +4 -4
- package/dist/api/program/spreadsheet.d.ts +4 -4
- package/dist/handles.d.ts +12 -22
- package/dist/handles.d.ts.map +1 -1
- package/dist/index.cjs +2773 -2445
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2726 -2422
- package/dist/index.js.map +1 -1
- package/dist/massParameters.d.ts +280 -0
- package/dist/massParameters.d.ts.map +1 -0
- package/dist/massParameters.ops.d.ts +135 -0
- package/dist/massParameters.ops.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/api/core/geom/create/index.ts +1011 -94
- package/src/api/core/geom/query/brep.ts +51 -0
- package/src/api/core/geom/query/curve.ts +25 -2
- package/src/api/core/geom/query/edge.ts +2 -2
- package/src/api/core/geom/query/face.ts +109 -4
- package/src/api/core/io/import/index.ts +3 -11
- package/src/api/design/create/index.ts +38 -335
- package/src/api/design/delete/index.ts +0 -4
- package/src/api/design/doors/index.ts +13 -20
- package/src/api/design/index.ts +0 -5
- package/src/api/design/query/geometry/index.ts +29 -0
- package/src/api/design/query/index.ts +50 -0
- package/src/api/design/update/index.ts +94 -0
- package/src/handles.ts +15 -27
- package/src/index.ts +2 -0
- package/src/massParameters.ops.ts +243 -0
- package/src/massParameters.ts +418 -0
- package/test/massParameters.test.mjs +936 -0
- package/dist/api/design/create/bulk-items.d.ts +0 -185
- package/dist/api/design/create/bulk-items.d.ts.map +0 -1
- package/dist/api/design/create/opening-fields.d.ts +0 -37
- package/dist/api/design/create/opening-fields.d.ts.map +0 -1
- package/dist/api/design/dimensions.d.ts +0 -427
- package/dist/api/design/dimensions.d.ts.map +0 -1
- package/src/api/design/create/bulk-items.ts +0 -186
- package/src/api/design/create/opening-fields.ts +0 -37
- package/src/api/design/dimensions.ts +0 -453
|
@@ -3,13 +3,11 @@ import { PluginApiReturn } from "../../../types";
|
|
|
3
3
|
import { BrepHandle, ComponentHandle, ContourHandle, ProfileHandle, Vec3Handle } from "../../../handles";
|
|
4
4
|
import { PluginSpaceType, PluginMassType, PluginDepartmentId } from "../../entity/space";
|
|
5
5
|
import { PluginBuildableEnvelopePolygonVertex, PluginBuildableEnvelopeSetbackTier, PluginBuildableEnvelopeVerticalCap, PluginBuildableEnvelopeCreateResult } from "../../entity/buildableEnvelope";
|
|
6
|
-
import type { PluginCreateDoorItem, PluginCreateFloorItem, PluginCreateFurnitureItem, PluginCreateWallRunItem, PluginCreateWindowItem } from "./bulk-items";
|
|
7
6
|
/**
|
|
8
7
|
* `design.create.*` — author new scene-committed BIM entities.
|
|
9
8
|
*
|
|
10
9
|
* Every creator takes geometry handles + scalars and returns a
|
|
11
|
-
* {@linkcode ComponentHandle} (or `ComponentHandle[]` for plural creators
|
|
12
|
-
* `wallRuns` returns one `ComponentHandle[]` per run) — the
|
|
10
|
+
* {@linkcode ComponentHandle} (or `ComponentHandle[]` for plural creators) — the
|
|
13
11
|
* `Component.id` of the created entity, resolvable across the rest of the
|
|
14
12
|
* `design.*` surface. Creation is an undoable host call; it **throws** on failure
|
|
15
13
|
* (no `Result` wrapper — consistent with `core.geom.create.*`).
|
|
@@ -192,49 +190,8 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
192
190
|
* const contour = await snaptrude.core.geom.create.contourFromProfile(rect)
|
|
193
191
|
* const floor = await snaptrude.design.create.floor(contour, 0.1)
|
|
194
192
|
* ```
|
|
195
|
-
*
|
|
196
|
-
* @performance For MORE THAN ONE floor, call `design.create.floors(items[])` — one
|
|
197
|
-
* host round-trip and ONE undo entry for the whole batch. Looping this single-floor
|
|
198
|
-
* creator is N round-trips and N undo entries.
|
|
199
193
|
*/
|
|
200
194
|
abstract floor(contour: ContourHandle, thickness: number, position?: Vec3Handle): PluginApiReturn<ComponentHandle>;
|
|
201
|
-
/**
|
|
202
|
-
* Create **many floors** in one undoable operation (bulk plural of
|
|
203
|
-
* {@linkcode floor}). Each item extrudes its own footprint contour (outer
|
|
204
|
-
* profile + holes) upward by its own `thickness`, at its own optional
|
|
205
|
-
* position offset. Validate-all-or-throw; one command.
|
|
206
|
-
*
|
|
207
|
-
* @param items - One {@linkcode PluginCreateFloorItem} per floor to create
|
|
208
|
-
* (≥1, ≤1000)
|
|
209
|
-
* @returns the created floors as {@linkcode ComponentHandle}`[]`, in input order
|
|
210
|
-
* @throws `VALIDATION` if the items fail the schema (empty array, more than
|
|
211
|
-
* 1000 items, a non-positive thickness) or a contour is degenerate;
|
|
212
|
-
* `HANDLE_INVALID` if a `contour` or `position` handle is unknown or
|
|
213
|
-
* released; `OPERATION_FAILED` if extrusion fails (nothing is created —
|
|
214
|
-
* `details.itemIndex` is the failing item); `METHOD_NOT_PERMITTED` if the
|
|
215
|
-
* plugin may not write.
|
|
216
|
-
*
|
|
217
|
-
* @examplePrompt Create floors for all these room outlines at once
|
|
218
|
-
* @examplePrompt Add a floor to every space in one operation
|
|
219
|
-
* @examplePrompt Bulk create the floor plates for this building
|
|
220
|
-
* @examplePrompt Lay 100mm floors across these five footprints in one undo step
|
|
221
|
-
* @examplePrompt Create the ground and first floor slabs together
|
|
222
|
-
*
|
|
223
|
-
* @performance Bulk creator — the whole batch is ONE host round-trip and ONE undo
|
|
224
|
-
* entry. Always prefer this over calling `design.create.floor` in a loop: build the
|
|
225
|
-
* full `items[]` array first (all contours and offsets up front), then make one call.
|
|
226
|
-
*
|
|
227
|
-
* # Example
|
|
228
|
-
* ```ts
|
|
229
|
-
* const rect = await snaptrude.core.geom.create.profileRect(5, 4)
|
|
230
|
-
* const contour = await snaptrude.core.geom.create.contourFromProfile(rect)
|
|
231
|
-
* const [ground, upper] = await snaptrude.design.create.floors([
|
|
232
|
-
* { contour, thickness: 0.1 },
|
|
233
|
-
* { contour, thickness: 0.1, position: await snaptrude.core.math.vec3.new(0, 3, 0) },
|
|
234
|
-
* ])
|
|
235
|
-
* ```
|
|
236
|
-
*/
|
|
237
|
-
abstract floors(items: PluginCreateFloorItem[]): PluginApiReturn<ComponentHandle[]>;
|
|
238
195
|
/**
|
|
239
196
|
* Create a **roof** by extruding a footprint contour by `thickness`. Created
|
|
240
197
|
* flat (extruded downward); pitch/slope is a separate post-creation edit.
|
|
@@ -396,63 +353,8 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
396
353
|
* centerlines, 3, undefined, brick.label,
|
|
397
354
|
* )
|
|
398
355
|
* ```
|
|
399
|
-
*
|
|
400
|
-
* @performance For MORE THAN ONE run, call `design.create.wallRuns(items[])` — one
|
|
401
|
-
* host round-trip and ONE undo entry for every run in the batch. Looping this
|
|
402
|
-
* single-run creator is N round-trips and N undo entries.
|
|
403
356
|
*/
|
|
404
357
|
abstract walls(profile: ProfileHandle, height?: number, thickness?: number, wallType?: string, storey?: number): PluginApiReturn<ComponentHandle[]>;
|
|
405
|
-
/**
|
|
406
|
-
* Create **many wall runs** in one undoable operation (bulk plural of
|
|
407
|
-
* {@linkcode walls}). Each item is one full run — a wall per curve in that
|
|
408
|
-
* item's profile chain, mitred at shared endpoints. Junctions resolve within a
|
|
409
|
-
* run, not between runs. Each item carries its own
|
|
410
|
-
* dimensions, `wallType` and `storey`, so a single call can build a whole
|
|
411
|
-
* floor plate or several storeys at once. Validate-all-or-throw; one command.
|
|
412
|
-
*
|
|
413
|
-
* @param items - One {@linkcode PluginCreateWallRunItem} per run to create
|
|
414
|
-
* (≥1, ≤1000)
|
|
415
|
-
* @returns one {@linkcode ComponentHandle}`[]` per item, in input order —
|
|
416
|
-
* each inner array holding that run's walls in profile-curve order
|
|
417
|
-
* @throws `VALIDATION` if the items fail the schema (empty array, more than
|
|
418
|
-
* 1000 items, a non-positive height or thickness, a zero-length curve);
|
|
419
|
-
* `HANDLE_INVALID` if a `profile` handle is unknown or released;
|
|
420
|
-
* `PRECONDITION_FAILED` if a profile has no curves, `wallType` names no
|
|
421
|
-
* wall type in the project, or `storey` does not exist;
|
|
422
|
-
* `OPERATION_FAILED` if wall creation fails (nothing is created —
|
|
423
|
-
* `details.itemIndex` is the failing item); `METHOD_NOT_PERMITTED` if the
|
|
424
|
-
* plugin may not write.
|
|
425
|
-
*
|
|
426
|
-
* @examplePrompt Draw all the walls of this floor plan at once
|
|
427
|
-
* @examplePrompt Build every room's perimeter in one operation
|
|
428
|
-
* @examplePrompt Bulk create wall runs from these centerlines
|
|
429
|
-
* @examplePrompt Create the walls for both storeys in a single undo step
|
|
430
|
-
* @examplePrompt Turn these polylines into 200mm brick walls together
|
|
431
|
-
*
|
|
432
|
-
* @performance Bulk creator — the whole batch is ONE host round-trip and ONE undo
|
|
433
|
-
* entry. Always prefer this over calling `design.create.walls` in a loop: build the
|
|
434
|
-
* full `items[]` array first (all profiles up front), then make one call.
|
|
435
|
-
*
|
|
436
|
-
* # Example
|
|
437
|
-
* ```ts
|
|
438
|
-
* const v = snaptrude.core.math.vec3
|
|
439
|
-
* const ground = await snaptrude.core.geom.create.profileFromLinePoints([
|
|
440
|
-
* await v.new(0, 0, 0),
|
|
441
|
-
* await v.new(8, 0, 0),
|
|
442
|
-
* await v.new(8, 0, 6),
|
|
443
|
-
* ])
|
|
444
|
-
* const upper = await snaptrude.core.geom.create.profileFromLinePoints([
|
|
445
|
-
* await v.new(0, 0, 0),
|
|
446
|
-
* await v.new(8, 0, 0),
|
|
447
|
-
* ])
|
|
448
|
-
* const [groundWalls, upperWalls] = await snaptrude.design.create.wallRuns([
|
|
449
|
-
* { profile: ground, height: 3, thickness: 0.2 },
|
|
450
|
-
* { profile: upper, height: 3, storey: 2 },
|
|
451
|
-
* ])
|
|
452
|
-
* console.log(groundWalls.length, "walls on the ground floor")
|
|
453
|
-
* ```
|
|
454
|
-
*/
|
|
455
|
-
abstract wallRuns(items: PluginCreateWallRunItem[]): PluginApiReturn<ComponentHandle[][]>;
|
|
456
358
|
/**
|
|
457
359
|
* Create a **staircase** from a parametric preset, placed at a point.
|
|
458
360
|
*
|
|
@@ -542,19 +444,15 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
542
444
|
* `position.y` (the same surface-flush contract as interactive drag-drop) —
|
|
543
445
|
* pass the floor/storey elevation to stand furniture on it; never add half
|
|
544
446
|
* the item's height yourself.
|
|
545
|
-
* @param options - Optional placement options: `label` — instance name
|
|
546
|
-
*
|
|
547
|
-
*
|
|
548
|
-
* source-mesh persistence: a catalog source is recorded exactly once, by the
|
|
549
|
-
* first placement that brings it in, and this flag cannot skip that record.
|
|
447
|
+
* @param options - Optional placement options: `label` — instance name
|
|
448
|
+
* (default auto `${name}Ins${n}`); `createNewSourceMesh` — emit a
|
|
449
|
+
* source-mesh creation command (default `true`)
|
|
550
450
|
* @param angleInDegrees - Optional signed rotation about the vertical axis, in
|
|
551
451
|
* degrees (same convention as {@linkcode PluginDesignTransformApi.rotate}).
|
|
552
452
|
* Applied at creation time so it is part of the placement's single undo entry.
|
|
553
453
|
* Default: the item's own (unrotated) orientation.
|
|
554
454
|
* @returns the {@linkcode ComponentHandle} of the placed furniture instance
|
|
555
|
-
* @throws if the catalog id is unknown, the source mesh fails to load, or placement fails
|
|
556
|
-
* `PRECONDITION_FAILED` (`details.engineCode: "TOOL_ACTIVE"`) while the interactive
|
|
557
|
-
* furniture tool is active — finish or cancel it first
|
|
455
|
+
* @throws if the catalog id is unknown, the source mesh fails to load, or placement fails
|
|
558
456
|
*
|
|
559
457
|
* @examplePrompt Place a chair from the library at this spot
|
|
560
458
|
* @examplePrompt Add a sofa from the furniture catalog to the living room
|
|
@@ -578,58 +476,11 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
578
476
|
* 90,
|
|
579
477
|
* )
|
|
580
478
|
* ```
|
|
581
|
-
*
|
|
582
|
-
* @performance For MORE THAN ONE item, call `design.create.furnitureItems(items[])` —
|
|
583
|
-
* one host round-trip and ONE undo entry, and a catalog source shared by several
|
|
584
|
-
* items is fetched once. Looping this single-item creator is N round-trips.
|
|
585
479
|
*/
|
|
586
480
|
abstract furniture(catalogId: string, position: Vec3Handle, options?: {
|
|
587
481
|
label?: string;
|
|
588
482
|
createNewSourceMesh?: boolean;
|
|
589
483
|
}, angleInDegrees?: number): PluginApiReturn<ComponentHandle>;
|
|
590
|
-
/**
|
|
591
|
-
* Place **many furniture items** in one undoable operation (bulk plural of
|
|
592
|
-
* {@linkcode furniture}). Each item names a catalog id and an absolute world
|
|
593
|
-
* position (`position.y` is the REST elevation — the same grounding contract
|
|
594
|
-
* as the singular creator), with optional label and rotation. A catalog
|
|
595
|
-
* source shared by several items is fetched and recorded once for the whole
|
|
596
|
-
* batch, so the host — not the caller — owns source persistence (there is no
|
|
597
|
-
* per-item `createNewSourceMesh`). Validate-all-or-throw; one command.
|
|
598
|
-
*
|
|
599
|
-
* @param items - One {@linkcode PluginCreateFurnitureItem} per instance to
|
|
600
|
-
* place (≥1, ≤1000)
|
|
601
|
-
* @returns the placed instances as {@linkcode ComponentHandle}`[]`, in input order
|
|
602
|
-
* @throws `VALIDATION` if the items fail the schema (empty array, more than
|
|
603
|
-
* 1000 items); `HANDLE_INVALID` if a `position` handle is unknown or
|
|
604
|
-
* released; `PRECONDITION_FAILED` if a catalog id is unknown, a furniture
|
|
605
|
-
* tool is active, or a parametric group is active (exit it first, or place
|
|
606
|
-
* items one at a time with `furniture`); `OPERATION_FAILED` if a source
|
|
607
|
-
* mesh fails to load or placement fails (nothing is created —
|
|
608
|
-
* `details.itemIndex` is the failing item); `METHOD_NOT_PERMITTED` if the plugin may not write.
|
|
609
|
-
*
|
|
610
|
-
* @examplePrompt Place all the desks for this office at once
|
|
611
|
-
* @examplePrompt Furnish every bedroom in one operation
|
|
612
|
-
* @examplePrompt Bulk place these chairs around the table
|
|
613
|
-
* @examplePrompt Add the whole furniture layout in a single undo step
|
|
614
|
-
* @examplePrompt Drop twenty copies of this chair at these positions
|
|
615
|
-
*
|
|
616
|
-
* @performance Bulk creator — the whole batch is ONE host round-trip and ONE undo
|
|
617
|
-
* entry, and each distinct catalog source loads once. Always prefer this over
|
|
618
|
-
* calling `design.create.furniture` in a loop: build the full `items[]` array
|
|
619
|
-
* first (all positions and angles up front), then make one call.
|
|
620
|
-
*
|
|
621
|
-
* # Example
|
|
622
|
-
* ```ts
|
|
623
|
-
* const v = snaptrude.core.math.vec3
|
|
624
|
-
* const [chair] = await snaptrude.design.furniture.listCatalog()
|
|
625
|
-
* const placed = await snaptrude.design.create.furnitureItems([
|
|
626
|
-
* { catalogId: chair.id, position: await v.new(3, 0, 5), label: "Chair-01" },
|
|
627
|
-
* { catalogId: chair.id, position: await v.new(4, 0, 5), angleInDegrees: 90 },
|
|
628
|
-
* { catalogId: chair.id, position: await v.new(5, 0, 5), angleInDegrees: 180 },
|
|
629
|
-
* ])
|
|
630
|
-
* ```
|
|
631
|
-
*/
|
|
632
|
-
abstract furnitureItems(items: PluginCreateFurnitureItem[]): PluginApiReturn<ComponentHandle[]>;
|
|
633
484
|
/**
|
|
634
485
|
* Place a **door** from the catalog into a host wall.
|
|
635
486
|
*
|
|
@@ -643,15 +494,12 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
643
494
|
* @param catalogId - Library id: team `_id` or general `fullName`
|
|
644
495
|
* @param hostWall - The wall to host the door
|
|
645
496
|
* @param position - World point projected onto the wall to locate the opening
|
|
646
|
-
* @param options - Optional placement options: `label` — instance name
|
|
647
|
-
*
|
|
648
|
-
*
|
|
649
|
-
*
|
|
650
|
-
*
|
|
651
|
-
*
|
|
652
|
-
* Any point clearly on that side works (e.g. the room's center). Default:
|
|
653
|
-
* the engine picks a side (nondeterministic when `position` sits on the
|
|
654
|
-
* wall centerline).
|
|
497
|
+
* @param options - Optional placement options: `label` — instance name
|
|
498
|
+
* @param facing - World point selecting which side of the wall the door faces
|
|
499
|
+
* (the room it opens into) — the same convention as approaching the wall
|
|
500
|
+
* from that side with the cursor in the interactive tool. Any point clearly
|
|
501
|
+
* on that side works (e.g. the room's center). Default: the engine picks a
|
|
502
|
+
* side (nondeterministic when `position` sits on the wall centerline).
|
|
655
503
|
* @returns the {@linkcode ComponentHandle} of the placed door
|
|
656
504
|
* @throws if the catalog id is unknown, the host is not a wall, the source
|
|
657
505
|
* mesh fails to load, or the projected point falls **outside** the host wall
|
|
@@ -662,7 +510,6 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
662
510
|
* @examplePrompt Insert the entrance door into this wall
|
|
663
511
|
* @examplePrompt Add a door to the wall and call it Entry-01
|
|
664
512
|
* @examplePrompt Add a door that opens into the living room
|
|
665
|
-
* @examplePrompt Put a door here hinged on the north jamb
|
|
666
513
|
*
|
|
667
514
|
* # Example
|
|
668
515
|
* ```ts
|
|
@@ -682,76 +529,11 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
682
529
|
* undefined,
|
|
683
530
|
* await snaptrude.core.math.vec3.new(3, 0, 9),
|
|
684
531
|
* )
|
|
685
|
-
* // …and hinged on the jamb nearest a point (here the +x end of the opening):
|
|
686
|
-
* const hingedRight = await snaptrude.design.create.door(
|
|
687
|
-
* entry.id,
|
|
688
|
-
* wall,
|
|
689
|
-
* await snaptrude.core.math.vec3.new(3, 0, 5),
|
|
690
|
-
* { hinge: await snaptrude.core.math.vec3.new(3.5, 0, 5) },
|
|
691
|
-
* await snaptrude.core.math.vec3.new(3, 0, 9),
|
|
692
|
-
* )
|
|
693
532
|
* ```
|
|
694
|
-
*
|
|
695
|
-
* @performance For MORE THAN ONE door, call `design.create.doors(items[])` — one host
|
|
696
|
-
* round-trip and ONE undo entry, with each host wall re-cut once per opening inside
|
|
697
|
-
* that single call. Looping this single-door creator is N round-trips.
|
|
698
533
|
*/
|
|
699
534
|
abstract door(catalogId: string, hostWall: ComponentHandle, position: Vec3Handle, options?: {
|
|
700
535
|
label?: string;
|
|
701
|
-
hinge?: Vec3Handle;
|
|
702
536
|
}, facing?: Vec3Handle): PluginApiReturn<ComponentHandle>;
|
|
703
|
-
/**
|
|
704
|
-
* Place **many doors** into host walls in one undoable operation (bulk plural
|
|
705
|
-
* of {@linkcode door}). Each item carries its own catalog id, host wall,
|
|
706
|
-
* world position, and optional `facing`, `label`, `width` and `height` — the
|
|
707
|
-
* same fields as a `"door"` {@linkcode PluginDesignCreateOpeningOptions}.
|
|
708
|
-
* Validate-all-or-throw; one command.
|
|
709
|
-
*
|
|
710
|
-
* As with the singular creator, placing an opening **re-cuts its host wall**:
|
|
711
|
-
* the wall you passed as `hostWall` stops resolving once the call returns.
|
|
712
|
-
* Several items MAY name the same original wall handle in one call — the host
|
|
713
|
-
* chains the re-cuts internally — but after the call recover the surviving
|
|
714
|
-
* wall with `design.query.getHost(opening)`, never by reusing the handle you
|
|
715
|
-
* passed in.
|
|
716
|
-
*
|
|
717
|
-
* @param items - One {@linkcode PluginCreateDoorItem} per door to place
|
|
718
|
-
* (≥1, ≤1000)
|
|
719
|
-
* @returns the placed doors as {@linkcode ComponentHandle}`[]`, in input order
|
|
720
|
-
* @throws `VALIDATION` if the items fail the schema (empty array, more than
|
|
721
|
-
* 1000 items, unknown fields, a non-positive `width`/`height`);
|
|
722
|
-
* `HANDLE_INVALID` if a `position`, `facing` or `hinge` handle is unknown
|
|
723
|
-
* or released; `PRECONDITION_FAILED` if a catalog id is unknown, a `hostWall`
|
|
724
|
-
* is not a wall / is locked / is not in the active proposal, the projected
|
|
725
|
-
* point falls outside its host wall, or a door tool is active;
|
|
726
|
-
* `OPERATION_FAILED` if a source mesh fails to load or placement fails
|
|
727
|
-
* (nothing is created — `details.itemIndex` is the failing item);
|
|
728
|
-
* `METHOD_NOT_PERMITTED` if the plugin may not write.
|
|
729
|
-
*
|
|
730
|
-
* @examplePrompt Add doors to all of these walls at once
|
|
731
|
-
* @examplePrompt Place a door in every room in one operation
|
|
732
|
-
* @examplePrompt Bulk add the entrance doors from this schedule
|
|
733
|
-
* @examplePrompt Put three doors on this wall in a single undo step
|
|
734
|
-
* @examplePrompt Add all the doors for this floor plan together
|
|
735
|
-
*
|
|
736
|
-
* @performance Bulk creator — the whole batch is ONE host round-trip and ONE undo
|
|
737
|
-
* entry, and each distinct catalog source loads once. Always prefer this over
|
|
738
|
-
* calling `design.create.door` in a loop: build the full `items[]` array first
|
|
739
|
-
* (all host walls and points up front), then make one call.
|
|
740
|
-
*
|
|
741
|
-
* # Example
|
|
742
|
-
* ```ts
|
|
743
|
-
* const v = snaptrude.core.math.vec3
|
|
744
|
-
* const [wall] = await snaptrude.design.query.listWalls({ isSelected: true })
|
|
745
|
-
* const [entry] = await snaptrude.design.doors.listCatalog()
|
|
746
|
-
* const [front, side] = await snaptrude.design.create.doors([
|
|
747
|
-
* { catalogId: entry.id, hostWall: wall, position: await v.new(2, 0, 5), label: "D-01" },
|
|
748
|
-
* { catalogId: entry.id, hostWall: wall, position: await v.new(6, 0, 5), width: 1.2 },
|
|
749
|
-
* ])
|
|
750
|
-
* // `wall` was re-cut twice and no longer resolves — ask the opening for its host:
|
|
751
|
-
* const currentWall = await snaptrude.design.query.getHost(front)
|
|
752
|
-
* ```
|
|
753
|
-
*/
|
|
754
|
-
abstract doors(items: PluginCreateDoorItem[]): PluginApiReturn<ComponentHandle[]>;
|
|
755
537
|
/**
|
|
756
538
|
* Place a **window** from the catalog into a host wall.
|
|
757
539
|
*
|
|
@@ -765,14 +547,11 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
765
547
|
* @param catalogId - Library id: team `_id` or general `fullName`
|
|
766
548
|
* @param hostWall - The wall to host the window
|
|
767
549
|
* @param position - World point projected onto the wall to locate the opening
|
|
768
|
-
* @param options - Optional placement options: `label` — instance name
|
|
769
|
-
*
|
|
770
|
-
*
|
|
771
|
-
*
|
|
772
|
-
*
|
|
773
|
-
* (matters for asymmetric windows, e.g. casement swing) — same convention
|
|
774
|
-
* as {@linkcode PluginDesignCreateApi.door}. Default: the engine picks a
|
|
775
|
-
* side (nondeterministic when `position` sits on the centerline).
|
|
550
|
+
* @param options - Optional placement options: `label` — instance name
|
|
551
|
+
* @param facing - World point selecting which side of the wall the window
|
|
552
|
+
* faces (matters for asymmetric windows, e.g. casement swing) — same
|
|
553
|
+
* convention as {@linkcode PluginDesignCreateApi.door}. Default: the engine
|
|
554
|
+
* picks a side (nondeterministic when `position` sits on the centerline).
|
|
776
555
|
* @returns the {@linkcode ComponentHandle} of the placed window
|
|
777
556
|
* @throws if the catalog id is unknown, the host is not a wall, the source
|
|
778
557
|
* mesh fails to load, or the projected point falls **outside** the host wall
|
|
@@ -795,68 +574,10 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
795
574
|
* { label: "Win-01" },
|
|
796
575
|
* )
|
|
797
576
|
* ```
|
|
798
|
-
*
|
|
799
|
-
* @performance For MORE THAN ONE window, call `design.create.windows(items[])` — one
|
|
800
|
-
* host round-trip and ONE undo entry, with each host wall re-cut once per opening
|
|
801
|
-
* inside that single call. Looping this single-window creator is N round-trips.
|
|
802
577
|
*/
|
|
803
578
|
abstract window(catalogId: string, hostWall: ComponentHandle, position: Vec3Handle, options?: {
|
|
804
579
|
label?: string;
|
|
805
|
-
hinge?: Vec3Handle;
|
|
806
580
|
}, facing?: Vec3Handle): PluginApiReturn<ComponentHandle>;
|
|
807
|
-
/**
|
|
808
|
-
* Place **many windows** into host walls in one undoable operation (bulk
|
|
809
|
-
* plural of {@linkcode window}). Each item carries its own catalog id, host
|
|
810
|
-
* wall, world position, and optional `facing`, `label`, `width`, `height` and
|
|
811
|
-
* `sillHeight` — the same fields as a `"window"`
|
|
812
|
-
* {@linkcode PluginDesignCreateOpeningOptions}. `sillHeight` is measured from
|
|
813
|
-
* the host wall base to the BOTTOM of the window. Validate-all-or-throw; one
|
|
814
|
-
* command.
|
|
815
|
-
*
|
|
816
|
-
* As with the singular creator, placing an opening **re-cuts its host wall**:
|
|
817
|
-
* the wall you passed as `hostWall` stops resolving once the call returns.
|
|
818
|
-
* Several items MAY name the same original wall handle in one call — the host
|
|
819
|
-
* chains the re-cuts internally — but after the call recover the surviving
|
|
820
|
-
* wall with `design.query.getHost(opening)`, never by reusing the handle you
|
|
821
|
-
* passed in.
|
|
822
|
-
*
|
|
823
|
-
* @param items - One {@linkcode PluginCreateWindowItem} per window to place
|
|
824
|
-
* (≥1, ≤1000)
|
|
825
|
-
* @returns the placed windows as {@linkcode ComponentHandle}`[]`, in input order
|
|
826
|
-
* @throws `VALIDATION` if the items fail the schema (empty array, more than
|
|
827
|
-
* 1000 items, unknown fields, a non-positive `width`/`height`, a negative
|
|
828
|
-
* `sillHeight`); `HANDLE_INVALID` if a `position`, `facing` or `hinge`
|
|
829
|
-
* handle is unknown or released; `PRECONDITION_FAILED` if a catalog id is unknown, a
|
|
830
|
-
* `hostWall` is not a wall / is locked / is not in the active proposal, the
|
|
831
|
-
* projected point falls outside its host wall, or a window tool is active;
|
|
832
|
-
* `OPERATION_FAILED` if a source mesh fails to load or placement fails
|
|
833
|
-
* (nothing is created — `details.itemIndex` is the failing item);
|
|
834
|
-
* `METHOD_NOT_PERMITTED` if the plugin may not write.
|
|
835
|
-
*
|
|
836
|
-
* @examplePrompt Add windows along this whole facade at once
|
|
837
|
-
* @examplePrompt Place a window in every bedroom in one operation
|
|
838
|
-
* @examplePrompt Bulk add the windows from this schedule
|
|
839
|
-
* @examplePrompt Put four windows on this wall in a single undo step
|
|
840
|
-
* @examplePrompt Add all the windows with a 0.9m sill height together
|
|
841
|
-
*
|
|
842
|
-
* @performance Bulk creator — the whole batch is ONE host round-trip and ONE undo
|
|
843
|
-
* entry, and each distinct catalog source loads once. Always prefer this over
|
|
844
|
-
* calling `design.create.window` in a loop: build the full `items[]` array first
|
|
845
|
-
* (all host walls and points up front), then make one call.
|
|
846
|
-
*
|
|
847
|
-
* # Example
|
|
848
|
-
* ```ts
|
|
849
|
-
* const v = snaptrude.core.math.vec3
|
|
850
|
-
* const [wall] = await snaptrude.design.query.listWalls({ isSelected: true })
|
|
851
|
-
* const [casement] = await snaptrude.design.windows.listCatalog()
|
|
852
|
-
* const placed = await snaptrude.design.create.windows([
|
|
853
|
-
* { catalogId: casement.id, hostWall: wall, position: await v.new(2, 0, 5), sillHeight: 0.9 },
|
|
854
|
-
* { catalogId: casement.id, hostWall: wall, position: await v.new(5, 0, 5), sillHeight: 0.9 },
|
|
855
|
-
* ])
|
|
856
|
-
* const currentWall = await snaptrude.design.query.getHost(placed[0])
|
|
857
|
-
* ```
|
|
858
|
-
*/
|
|
859
|
-
abstract windows(items: PluginCreateWindowItem[]): PluginApiReturn<ComponentHandle[]>;
|
|
860
581
|
/**
|
|
861
582
|
* Place a catalog **door or window** into a host wall with optional size overrides.
|
|
862
583
|
*
|
|
@@ -866,7 +587,7 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
866
587
|
* its center. Placement is asynchronous and committed as one undoable creation.
|
|
867
588
|
*
|
|
868
589
|
* @param options - Opening kind, catalog and host references, placement, and
|
|
869
|
-
* optional facing
|
|
590
|
+
* optional facing, label, and dimensions
|
|
870
591
|
* @returns the {@linkcode ComponentHandle} of the placed door or window
|
|
871
592
|
* @throws if the options are invalid, the catalog id is unknown, the host is
|
|
872
593
|
* not a wall, loading fails, or the opening cannot be placed on the host
|
|
@@ -874,9 +595,8 @@ export declare abstract class PluginDesignCreateApi {
|
|
|
874
595
|
* @examplePrompt Add a 1m wide door to this wall here
|
|
875
596
|
* @examplePrompt Place a window with a 0.9m sill height on the selected wall
|
|
876
597
|
*
|
|
877
|
-
* @performance Single-opening creator — use it for one hosted opening.
|
|
878
|
-
*
|
|
879
|
-
* the same per-item fields, one host round-trip, ONE undo entry.
|
|
598
|
+
* @performance Single-opening creator — use it for one hosted opening. A plural
|
|
599
|
+
* API is intentionally unavailable until host placement can be atomic.
|
|
880
600
|
*
|
|
881
601
|
* # Example
|
|
882
602
|
* ```ts
|
|
@@ -1398,7 +1118,7 @@ export type PluginDesignCreateStaircaseArgs = z.infer<typeof PluginDesignCreateS
|
|
|
1398
1118
|
* | `catalogId` | `string` | Library id: team `_id` or general `fullName` |
|
|
1399
1119
|
* | `position` | {@linkcode Vec3Handle} | Absolute world placement point |
|
|
1400
1120
|
* | `label` | `string`? | Instance name (default auto `${name}Ins${n}`) |
|
|
1401
|
-
* | `createNewSourceMesh` | `boolean`? |
|
|
1121
|
+
* | `createNewSourceMesh` | `boolean`? | Emit a source-mesh creation command (default `true`) |
|
|
1402
1122
|
* | `angleInDegrees` | `number`? | Rotation about the vertical axis, in degrees (default unrotated) |
|
|
1403
1123
|
*/
|
|
1404
1124
|
export declare const PluginDesignCreateFurnitureArgs: z.ZodObject<{
|
|
@@ -1418,8 +1138,7 @@ export type PluginDesignCreateFurnitureArgs = z.infer<typeof PluginDesignCreateF
|
|
|
1418
1138
|
* | `hostWall` | {@linkcode ComponentHandle} | The wall to host the door |
|
|
1419
1139
|
* | `position` | {@linkcode Vec3Handle} | World point projected onto the wall |
|
|
1420
1140
|
* | `label` | `string`? | Instance name (optional) |
|
|
1421
|
-
* | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the door
|
|
1422
|
-
* | `hinge` | {@linkcode Vec3Handle}? | World point near the jamb the door is hinged on (default the catalog item's authored side) |
|
|
1141
|
+
* | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the door faces (default engine-chosen) |
|
|
1423
1142
|
*/
|
|
1424
1143
|
export declare const PluginDesignCreateDoorArgs: z.ZodObject<{
|
|
1425
1144
|
catalogId: z.ZodString;
|
|
@@ -1427,7 +1146,6 @@ export declare const PluginDesignCreateDoorArgs: z.ZodObject<{
|
|
|
1427
1146
|
position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
|
|
1428
1147
|
label: z.ZodOptional<z.ZodString>;
|
|
1429
1148
|
facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
1430
|
-
hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
1431
1149
|
}, z.core.$strip>;
|
|
1432
1150
|
export type PluginDesignCreateDoorArgs = z.infer<typeof PluginDesignCreateDoorArgs>;
|
|
1433
1151
|
/**
|
|
@@ -1439,8 +1157,7 @@ export type PluginDesignCreateDoorArgs = z.infer<typeof PluginDesignCreateDoorAr
|
|
|
1439
1157
|
* | `hostWall` | {@linkcode ComponentHandle} | The wall to host the window |
|
|
1440
1158
|
* | `position` | {@linkcode Vec3Handle} | World point projected onto the wall |
|
|
1441
1159
|
* | `label` | `string`? | Instance name (optional) |
|
|
1442
|
-
* | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the window
|
|
1443
|
-
* | `hinge` | {@linkcode Vec3Handle}? | World point near the jamb the window is hinged on (default the catalog item's authored side) |
|
|
1160
|
+
* | `facing` | {@linkcode Vec3Handle}? | World point on the side of the wall the window faces (default engine-chosen) |
|
|
1444
1161
|
*/
|
|
1445
1162
|
export declare const PluginDesignCreateWindowArgs: z.ZodObject<{
|
|
1446
1163
|
catalogId: z.ZodString;
|
|
@@ -1448,7 +1165,6 @@ export declare const PluginDesignCreateWindowArgs: z.ZodObject<{
|
|
|
1448
1165
|
position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
|
|
1449
1166
|
label: z.ZodOptional<z.ZodString>;
|
|
1450
1167
|
facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
1451
|
-
hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
1452
1168
|
}, z.core.$strip>;
|
|
1453
1169
|
export type PluginDesignCreateWindowArgs = z.infer<typeof PluginDesignCreateWindowArgs>;
|
|
1454
1170
|
/**
|
|
@@ -1462,7 +1178,6 @@ export declare const PluginDesignCreateOpeningOptions: z.ZodDiscriminatedUnion<[
|
|
|
1462
1178
|
hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
|
|
1463
1179
|
position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
|
|
1464
1180
|
facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
1465
|
-
hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
1466
1181
|
label: z.ZodOptional<z.ZodString>;
|
|
1467
1182
|
width: z.ZodOptional<z.ZodNumber>;
|
|
1468
1183
|
height: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1473,7 +1188,6 @@ export declare const PluginDesignCreateOpeningOptions: z.ZodDiscriminatedUnion<[
|
|
|
1473
1188
|
hostWall: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
|
|
1474
1189
|
position: z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>;
|
|
1475
1190
|
facing: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
1476
|
-
hinge: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodString>, z.ZodTransform<import("../../..").Handle<"vec3">, string>>>;
|
|
1477
1191
|
label: z.ZodOptional<z.ZodString>;
|
|
1478
1192
|
width: z.ZodOptional<z.ZodNumber>;
|
|
1479
1193
|
height: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1634,6 +1348,4 @@ export declare const PluginCreateSpaceItem: z.ZodObject<{
|
|
|
1634
1348
|
storey: z.ZodOptional<z.ZodNumber>;
|
|
1635
1349
|
}, z.core.$strip>;
|
|
1636
1350
|
export type PluginCreateSpaceItem = z.infer<typeof PluginCreateSpaceItem>;
|
|
1637
|
-
export * from "./opening-fields";
|
|
1638
|
-
export * from "./bulk-items";
|
|
1639
1351
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/design/create/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EACL,UAAU,EACV,eAAe,EACf,aAAa,EACb,aAAa,EACb,UAAU,EACX,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EACnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,oCAAoC,EACpC,kCAAkC,EAClC,kCAAkC,EAClC,mCAAmC,EACpC,MAAM,gCAAgC,CAAA;AAEvC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/design/create/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,10 +36,6 @@ export declare abstract class PluginDesignDeleteApi {
|
|
|
36
36
|
* children are removed and linked-list neighbours are fixed up — not caller-tunable
|
|
37
37
|
* in v1. Undoable — commits as a **single** undo entry.
|
|
38
38
|
*
|
|
39
|
-
* Dimension lines anchored to a deleted entity are removed with it, in the same undo
|
|
40
|
-
* entry, exactly as the editor's Delete key does — see `design.dimensions`. They are
|
|
41
|
-
* NOT listed in `affected`, which reports component handles only.
|
|
42
|
-
*
|
|
43
39
|
* @param components - Entities to delete. Unknown/forged handles reject the whole call (fail-fast).
|
|
44
40
|
* @returns The entities that were deleted, as {@linkcode ComponentHandle}`[]`
|
|
45
41
|
* (echoed host-side from the resolved+deleted set — the engine returns no ids).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/design/delete/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAElD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8BAA8B;;iBAEzC,CAAA;AACF,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAE3F;;;;;;;;;GASG;AACH,8BAAsB,qBAAqB;;IAGzC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/design/delete/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAElD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8BAA8B;;iBAEzC,CAAA;AACF,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAE3F;;;;;;;;;GASG;AACH,8BAAsB,qBAAqB;;IAGzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;aACa,QAAQ,CACtB,UAAU,EAAE,eAAe,EAAE,GAC5B,eAAe,CAAC,wBAAwB,CAAC;CAC7C"}
|
|
@@ -7,11 +7,9 @@ import { PluginDesignChangeResult } from "../lock";
|
|
|
7
7
|
* `design.create.door`; generic reads (`listDoors`/`getHost`/`getProperties`) live at
|
|
8
8
|
* `design.query.*`. Door targets are {@linkcode ComponentHandle}s.
|
|
9
9
|
*
|
|
10
|
-
* `getSwingDirection` is a DERIVED read (no persisted field) — computed from the
|
|
11
|
-
* mesh
|
|
12
|
-
*
|
|
13
|
-
* axes (undoable, one command): `'x'` flips the swing side, `'z'` swaps the hinged jamb;
|
|
14
|
-
* `setType` is intentionally absent (the engine has no in-place re-type —
|
|
10
|
+
* `getSwingDirection` is a DERIVED read (no persisted field) — computed from the door
|
|
11
|
+
* mesh reflection state. `mirror` reflects the door across an axis (undoable, one
|
|
12
|
+
* command); `setType` is intentionally absent (the engine has no in-place re-type —
|
|
15
13
|
* it would require delete+recreate).
|
|
16
14
|
*
|
|
17
15
|
* The **catalog** reads (`listCatalogGroups`/`listCatalog`/`getCatalogItem`/`exists`)
|
|
@@ -146,11 +144,9 @@ export declare abstract class PluginDesignDoorsApi {
|
|
|
146
144
|
*/
|
|
147
145
|
abstract getSupportFloor(door: ComponentHandle): PluginApiReturn<ComponentHandle | null>;
|
|
148
146
|
/**
|
|
149
|
-
* Get a door's swing (hinge) handedness
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
* orientation (the same reflection `mirror` and the `hinge` placement option
|
|
153
|
-
* apply), not a persisted field.
|
|
147
|
+
* Get a door's swing (hinge) handedness — whether it opens as a left-hand or
|
|
148
|
+
* right-hand door. Derived from the door mesh's reflection state, not a
|
|
149
|
+
* persisted field.
|
|
154
150
|
*
|
|
155
151
|
* @param door The door to query
|
|
156
152
|
* @returns `'left'` / `'right'`, or `null` if indeterminate
|
|
@@ -169,13 +165,11 @@ export declare abstract class PluginDesignDoorsApi {
|
|
|
169
165
|
*/
|
|
170
166
|
abstract getSwingDirection(door: ComponentHandle): PluginApiReturn<"left" | "right" | null>;
|
|
171
167
|
/**
|
|
172
|
-
* Mirror a door
|
|
173
|
-
*
|
|
174
|
-
* (left-hand ↔ right-hand, same swing side); `'y'` turns it upside down.
|
|
175
|
-
* Undoable as a single command.
|
|
168
|
+
* Mirror a door across an axis, flipping its swing so it opens from the
|
|
169
|
+
* other side. Undoable as a single command.
|
|
176
170
|
*
|
|
177
171
|
* @param door The door to mirror
|
|
178
|
-
* @param axis Reflection axis (optional; default `'x'` — the swing-flip axis
|
|
172
|
+
* @param axis Reflection axis (optional; default `'x'` — the swing-flip axis)
|
|
179
173
|
* @returns The affected door(s)
|
|
180
174
|
*
|
|
181
175
|
* @examplePrompt Flip this door's swing
|
|
@@ -186,11 +180,10 @@ export declare abstract class PluginDesignDoorsApi {
|
|
|
186
180
|
*
|
|
187
181
|
* # Example
|
|
188
182
|
* ```ts
|
|
189
|
-
* // Flip the selected door's swing
|
|
183
|
+
* // Flip the selected door's swing — axis defaults to "x" (the swing-flip
|
|
184
|
+
* // axis); pass "y" or "z" to reflect across a different axis
|
|
190
185
|
* const [door] = await snaptrude.design.query.listDoors({ isSelected: true })
|
|
191
186
|
* const { affected } = await snaptrude.design.doors.mirror(door)
|
|
192
|
-
* // …or swap the hinged jamb instead (keeps the swing side)
|
|
193
|
-
* await snaptrude.design.doors.mirror(door, "z")
|
|
194
187
|
* ```
|
|
195
188
|
*/
|
|
196
189
|
abstract mirror(door: ComponentHandle, axis?: PluginMirrorAxis): PluginApiReturn<PluginDesignChangeResult>;
|
|
@@ -341,7 +334,7 @@ export declare const PluginDoorDimensions: z.ZodObject<{
|
|
|
341
334
|
thickness: z.ZodNumber;
|
|
342
335
|
}, z.core.$strip>;
|
|
343
336
|
export type PluginDoorDimensions = z.infer<typeof PluginDoorDimensions>;
|
|
344
|
-
/** Mirror axis — tokens mirror the engine `FlipDirection` verbatim
|
|
337
|
+
/** Mirror axis — tokens mirror the engine `FlipDirection` verbatim (§6.1). */
|
|
345
338
|
export declare const PluginMirrorAxis: z.ZodEnum<{
|
|
346
339
|
x: "x";
|
|
347
340
|
y: "y";
|
|
@@ -354,7 +347,7 @@ export type PluginMirrorAxis = z.infer<typeof PluginMirrorAxis>;
|
|
|
354
347
|
* | Property | Type | Description |
|
|
355
348
|
* |---|---|---|
|
|
356
349
|
* | `door` | {@linkcode ComponentHandle} | The door to mirror |
|
|
357
|
-
* | `axis` | {@linkcode PluginMirrorAxis} | Reflection axis (optional; default `'x'` — the swing-flip axis
|
|
350
|
+
* | `axis` | {@linkcode PluginMirrorAxis} | Reflection axis (optional; default `'x'` — the swing-flip axis) |
|
|
358
351
|
*/
|
|
359
352
|
export declare const PluginDesignDoorMirrorArgs: z.ZodObject<{
|
|
360
353
|
door: z.ZodPipe<z.ZodString, z.ZodTransform<ComponentHandle, string>>;
|