@snaptrude/plugin-core 0.11.0-rc.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -0
- package/CHANGELOG.md +176 -14
- package/api-manifest.json +872 -49
- 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 +447 -0
- package/dist/api/core/camera/index.d.ts.map +1 -1
- package/dist/api/core/geom/create/index.d.ts +942 -101
- package/dist/api/core/geom/create/index.d.ts.map +1 -1
- package/dist/api/core/geom/query/brep.d.ts +59 -2
- package/dist/api/core/geom/query/brep.d.ts.map +1 -1
- package/dist/api/core/geom/query/curve.d.ts +59 -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/contour.d.ts +10 -2
- package/dist/api/core/geom/update/contour.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 +3 -1
- package/dist/api/core/geom/update/profile.d.ts.map +1 -1
- package/dist/api/core/handles/index.d.ts +4 -2
- package/dist/api/core/handles/index.d.ts.map +1 -1
- package/dist/api/core/index.d.ts +4 -4
- package/dist/api/core/index.d.ts.map +1 -1
- package/dist/api/core/io/import/index.d.ts +3 -1
- package/dist/api/core/io/import/index.d.ts.map +1 -1
- package/dist/api/core/layers.d.ts +377 -255
- package/dist/api/core/layers.d.ts.map +1 -1
- package/dist/api/core/mode/index.d.ts +19 -7
- package/dist/api/core/mode/index.d.ts.map +1 -1
- package/dist/api/core/proposals/index.d.ts +4 -3
- package/dist/api/core/proposals/index.d.ts.map +1 -1
- package/dist/api/core/storeys/index.d.ts +17 -2
- package/dist/api/core/storeys/index.d.ts.map +1 -1
- package/dist/api/core/storeys/layers.d.ts +408 -0
- package/dist/api/core/storeys/layers.d.ts.map +1 -0
- package/dist/api/core/tags.d.ts +84 -3
- package/dist/api/core/tags.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 +299 -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 +269 -0
- package/dist/api/design/create/bulk-items.d.ts.map +1 -0
- package/dist/api/design/create/grids.d.ts +132 -0
- package/dist/api/design/create/grids.d.ts.map +1 -0
- package/dist/api/design/create/index.d.ts +753 -102
- package/dist/api/design/create/index.d.ts.map +1 -1
- package/dist/api/design/create/opening-fields.d.ts +38 -0
- package/dist/api/design/create/opening-fields.d.ts.map +1 -0
- package/dist/api/design/delete/index.d.ts +7 -20
- package/dist/api/design/delete/index.d.ts.map +1 -1
- package/dist/api/design/dimensions.d.ts +427 -0
- package/dist/api/design/dimensions.d.ts.map +1 -0
- package/dist/api/design/doors/index.d.ts +24 -23
- package/dist/api/design/doors/index.d.ts.map +1 -1
- package/dist/api/design/family.d.ts +1446 -0
- package/dist/api/design/family.d.ts.map +1 -0
- package/dist/api/design/grids.d.ts +237 -0
- package/dist/api/design/grids.d.ts.map +1 -0
- package/dist/api/design/index.d.ts +30 -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/geometry/index.d.ts +33 -5
- package/dist/api/design/query/geometry/index.d.ts.map +1 -1
- package/dist/api/design/query/grids.d.ts +287 -0
- package/dist/api/design/query/grids.d.ts.map +1 -0
- package/dist/api/design/query/index.d.ts +143 -36
- package/dist/api/design/query/index.d.ts.map +1 -1
- package/dist/api/design/query/spaces.d.ts +5 -66
- package/dist/api/design/query/spaces.d.ts.map +1 -1
- package/dist/api/design/selection/index.d.ts +12 -12
- 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 +412 -8
- 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/entity/buildableEnvelope.d.ts +84 -2
- package/dist/api/entity/buildableEnvelope.d.ts.map +1 -1
- package/dist/api/entity/referenceLine.d.ts +13 -1
- package/dist/api/entity/referenceLine.d.ts.map +1 -1
- package/dist/api/entity/space.d.ts +12 -15
- package/dist/api/entity/space.d.ts.map +1 -1
- package/dist/api/entity/story.d.ts +4 -4
- package/dist/api/presentation/aiInspiration.d.ts +24 -24
- package/dist/api/presentation/annotate.d.ts +38 -22
- package/dist/api/presentation/annotate.d.ts.map +1 -1
- package/dist/api/presentation/camera.d.ts +265 -0
- package/dist/api/presentation/camera.d.ts.map +1 -0
- 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/graphics.d.ts +419 -0
- package/dist/api/presentation/graphics.d.ts.map +1 -0
- package/dist/api/presentation/index.d.ts +66 -12
- package/dist/api/presentation/index.d.ts.map +1 -1
- package/dist/api/presentation/placedViews.d.ts +117 -51
- package/dist/api/presentation/placedViews.d.ts.map +1 -1
- package/dist/api/presentation/sections.d.ts +461 -0
- package/dist/api/presentation/sections.d.ts.map +1 -0
- package/dist/api/presentation/shapes.d.ts +2 -2
- package/dist/api/presentation/sheets.d.ts +175 -37
- package/dist/api/presentation/sheets.d.ts.map +1 -1
- package/dist/api/presentation/standards.d.ts +590 -0
- package/dist/api/presentation/standards.d.ts.map +1 -0
- 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 +144 -9
- package/dist/api/presentation/views.d.ts.map +1 -1
- package/dist/api/presentation/walkthroughs.d.ts +1350 -0
- package/dist/api/presentation/walkthroughs.d.ts.map +1 -0
- package/dist/api/program/departments.d.ts +58 -2
- package/dist/api/program/departments.d.ts.map +1 -1
- package/dist/api/program/index.d.ts +16 -6
- package/dist/api/program/index.d.ts.map +1 -1
- package/dist/api/program/labels.d.ts +355 -0
- package/dist/api/program/labels.d.ts.map +1 -0
- package/dist/api/program/metadata.d.ts +328 -0
- package/dist/api/program/metadata.d.ts.map +1 -0
- package/dist/api/program/site.d.ts +4 -4
- package/dist/api/program/spreadsheet.d.ts +267 -4
- package/dist/api/program/spreadsheet.d.ts.map +1 -1
- package/dist/api/workspace/index.d.ts +49 -2
- package/dist/api/workspace/index.d.ts.map +1 -1
- package/dist/errors/codes.d.ts +5 -8
- package/dist/errors/codes.d.ts.map +1 -1
- package/dist/handles.d.ts +32 -3
- package/dist/handles.d.ts.map +1 -1
- package/dist/index.cjs +6534 -2865
- 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 +6118 -2857
- package/dist/index.js.map +1 -1
- package/dist/massParameters.d.ts +287 -0
- package/dist/massParameters.d.ts.map +1 -0
- package/dist/massParameters.ops.d.ts +138 -0
- package/dist/massParameters.ops.d.ts.map +1 -0
- package/package.json +2 -1
- package/scripts/check-dist-fresh.mjs +22 -0
- package/scripts/generate-manifest.mjs +5 -0
- package/scripts/generate-manifest.test.mjs +14 -3
- package/src/api/core/camera/index.ts +429 -1
- package/src/api/core/geom/create/index.ts +1037 -102
- package/src/api/core/geom/query/brep.ts +60 -2
- package/src/api/core/geom/query/curve.ts +26 -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/geom/update/contour.ts +10 -2
- package/src/api/core/geom/update/profile.ts +2 -0
- package/src/api/core/handles/index.ts +3 -2
- package/src/api/core/index.ts +4 -4
- package/src/api/core/io/import/index.ts +11 -3
- package/src/api/core/layers.ts +380 -173
- package/src/api/core/mode/index.ts +19 -7
- package/src/api/core/proposals/index.ts +4 -3
- package/src/api/core/storeys/index.ts +19 -2
- package/src/api/core/storeys/layers.ts +339 -0
- package/src/api/core/tags.ts +76 -0
- package/src/api/core/zoom/index.ts +13 -0
- package/src/api/design/bim.ts +210 -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 +294 -0
- package/src/api/design/create/grids.ts +137 -0
- package/src/api/design/create/index.ts +824 -141
- package/src/api/design/create/opening-fields.ts +40 -0
- package/src/api/design/delete/index.ts +6 -20
- package/src/api/design/dimensions.ts +453 -0
- package/src/api/design/doors/index.ts +64 -41
- package/src/api/design/family.ts +1342 -0
- package/src/api/design/grids.ts +237 -0
- package/src/api/design/index.ts +49 -4
- package/src/api/design/networks.ts +607 -0
- package/src/api/design/query/geometry/index.ts +35 -4
- package/src/api/design/query/grids.ts +197 -0
- package/src/api/design/query/index.ts +105 -5
- package/src/api/design/query/spaces.ts +0 -68
- package/src/api/design/types/index.ts +31 -24
- package/src/api/design/update/index.ts +398 -4
- package/src/api/design/windows/index.ts +40 -22
- package/src/api/entity/buildableEnvelope.ts +77 -2
- package/src/api/entity/referenceLine.ts +25 -12
- package/src/api/entity/space.ts +0 -2
- package/src/api/presentation/annotate.ts +90 -58
- package/src/api/presentation/camera.ts +289 -0
- 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/graphics.ts +324 -0
- package/src/api/presentation/index.ts +73 -14
- package/src/api/presentation/placedViews.ts +120 -57
- package/src/api/presentation/sections.ts +420 -0
- package/src/api/presentation/sheets.ts +182 -37
- package/src/api/presentation/standards.ts +445 -0
- package/src/api/presentation/viewPresets.ts +241 -0
- package/src/api/presentation/views.ts +81 -10
- package/src/api/presentation/walkthroughs.ts +1201 -0
- package/src/api/program/departments.ts +54 -2
- package/src/api/program/index.ts +16 -6
- package/src/api/program/labels.ts +332 -0
- package/src/api/program/metadata.ts +364 -0
- package/src/api/program/spreadsheet.ts +282 -0
- package/src/api/workspace/index.ts +51 -2
- package/src/errors/codes.ts +9 -30
- package/src/handles.ts +42 -3
- package/src/index.ts +2 -0
- package/src/massParameters.ops.ts +246 -0
- package/src/massParameters.ts +427 -0
- package/test/drawingContract.test.mjs +288 -0
- package/test/errors.test.mjs +1 -4
- package/test/massParameters.test.mjs +952 -0
- package/test/paperPensContract.test.mjs +75 -0
- package/test/presentationViewSettings.test.mjs +85 -0
- package/api-manifest.full.json +0 -6928
- package/snaptrude-plugin-core-0.11.0.tgz +0 -0
|
@@ -9,12 +9,54 @@ import {
|
|
|
9
9
|
PluginSpaceUpdateResult,
|
|
10
10
|
} from "../../entity/space"
|
|
11
11
|
import { PluginDesignChangeResult } from "../lock"
|
|
12
|
+
import {
|
|
13
|
+
MassParametersPatch,
|
|
14
|
+
type MassParametersRecord,
|
|
15
|
+
} from "../../../massParameters"
|
|
12
16
|
import {
|
|
13
17
|
PluginBuildableEnvelopePolygonVertex,
|
|
14
18
|
PluginBuildableEnvelopeSetbackTier,
|
|
15
19
|
PluginBuildableEnvelopeVerticalCap,
|
|
16
20
|
PluginBuildableEnvelopeUpdateResult,
|
|
21
|
+
PluginSiteEdgePatch,
|
|
22
|
+
PluginDesignUpdateSiteEdgeResult,
|
|
17
23
|
} from "../../entity/buildableEnvelope"
|
|
24
|
+
import { PluginGridStyleOptions } from "../create/grids"
|
|
25
|
+
import { PluginGraphicsLineStyleId } from "../../presentation/graphics"
|
|
26
|
+
import { PluginEntityType } from "../query"
|
|
27
|
+
import { PluginWallType } from "../types"
|
|
28
|
+
import {
|
|
29
|
+
PluginConstructionType,
|
|
30
|
+
PluginFamilyValues,
|
|
31
|
+
type PluginFamilyUpdates,
|
|
32
|
+
} from "../catalog"
|
|
33
|
+
|
|
34
|
+
/** A project style; its pen/pattern and native legacy mirror change together. */
|
|
35
|
+
export const PluginReferenceLineStylePatch = z
|
|
36
|
+
.object({
|
|
37
|
+
styleId: PluginGraphicsLineStyleId,
|
|
38
|
+
})
|
|
39
|
+
.strict()
|
|
40
|
+
export type PluginReferenceLineStylePatch = z.infer<
|
|
41
|
+
typeof PluginReferenceLineStylePatch
|
|
42
|
+
>
|
|
43
|
+
|
|
44
|
+
/** Arguments for design.update.referenceLine. */
|
|
45
|
+
export const PluginDesignUpdateReferenceLineArgs = z
|
|
46
|
+
.object({
|
|
47
|
+
referenceLineId: z.string().min(1),
|
|
48
|
+
patch: PluginReferenceLineStylePatch,
|
|
49
|
+
})
|
|
50
|
+
.strict()
|
|
51
|
+
|
|
52
|
+
/** Styled line id and the applied project style. */
|
|
53
|
+
export const PluginDesignUpdateReferenceLineResult = z.object({
|
|
54
|
+
referenceLineId: z.string(),
|
|
55
|
+
styleId: PluginGraphicsLineStyleId,
|
|
56
|
+
})
|
|
57
|
+
export type PluginDesignUpdateReferenceLineResult = z.infer<
|
|
58
|
+
typeof PluginDesignUpdateReferenceLineResult
|
|
59
|
+
>
|
|
18
60
|
|
|
19
61
|
/**
|
|
20
62
|
* Sparse property updates for a space. Only provided fields change.
|
|
@@ -136,6 +178,22 @@ export type PluginDesignUpdateStaircaseArgs = z.infer<
|
|
|
136
178
|
typeof PluginDesignUpdateStaircaseArgs
|
|
137
179
|
>
|
|
138
180
|
|
|
181
|
+
/**
|
|
182
|
+
* Arguments for {@linkcode PluginDesignUpdateApi.parameters}.
|
|
183
|
+
*
|
|
184
|
+
* | Property | Type | Description |
|
|
185
|
+
* |---|---|---|
|
|
186
|
+
* | `component` | {@linkcode ComponentHandle} | The parametric mass to edit |
|
|
187
|
+
* | `patch` | {@linkcode MassParametersPatch} | Partial `values` (+ optional `operations`), or the full edited record |
|
|
188
|
+
*/
|
|
189
|
+
export const PluginDesignUpdateParametersArgs = z.object({
|
|
190
|
+
component: ComponentHandle,
|
|
191
|
+
patch: MassParametersPatch,
|
|
192
|
+
})
|
|
193
|
+
export type PluginDesignUpdateParametersArgs = z.infer<
|
|
194
|
+
typeof PluginDesignUpdateParametersArgs
|
|
195
|
+
>
|
|
196
|
+
|
|
139
197
|
/**
|
|
140
198
|
* Sparse edits for a wall (all optional; at least one required). Only the
|
|
141
199
|
* fields you provide change. Dimensions are in **engine units** (the same
|
|
@@ -146,13 +204,14 @@ export type PluginDesignUpdateStaircaseArgs = z.infer<
|
|
|
146
204
|
* |---|---|---|
|
|
147
205
|
* | `thickness` | `number`? | Wall thickness, engine units (> 0) |
|
|
148
206
|
* | `height` | `number`? | Wall height, engine units (> 0) |
|
|
149
|
-
* | `type` |
|
|
207
|
+
* | `type` | {@linkcode PluginWallType}? | Legacy name/id or exact authorized native `{ id, version }` pin from `design.types.list("wall")` |
|
|
150
208
|
*/
|
|
151
209
|
export const PluginWallUpdates = z
|
|
152
210
|
.object({
|
|
153
211
|
thickness: z.number().positive().optional(),
|
|
154
212
|
height: z.number().positive().optional(),
|
|
155
|
-
type:
|
|
213
|
+
type: PluginWallType.optional(),
|
|
214
|
+
values: PluginFamilyValues.optional(),
|
|
156
215
|
})
|
|
157
216
|
.refine((p) => Object.keys(p).length > 0, {
|
|
158
217
|
message: "PluginWallUpdates requires at least one field to change",
|
|
@@ -177,6 +236,8 @@ export const PluginSlabUpdates = z
|
|
|
177
236
|
.object({
|
|
178
237
|
thickness: z.number().positive().optional(),
|
|
179
238
|
overhang: z.number().optional(),
|
|
239
|
+
type: PluginConstructionType.optional(),
|
|
240
|
+
values: PluginFamilyValues.optional(),
|
|
180
241
|
})
|
|
181
242
|
.refine((p) => Object.keys(p).length > 0, {
|
|
182
243
|
message: "PluginSlabUpdates requires at least one field to change",
|
|
@@ -238,15 +299,86 @@ export type PluginDesignSetStoreyArgs = z.infer<
|
|
|
238
299
|
typeof PluginDesignSetStoreyArgs
|
|
239
300
|
>
|
|
240
301
|
|
|
302
|
+
/**
|
|
303
|
+
* Object types {@linkcode PluginDesignUpdateApi.setObjectType} can turn a mass
|
|
304
|
+
* into — the `design.query` `type` vocabulary.
|
|
305
|
+
*/
|
|
306
|
+
export const PluginObjectType = PluginEntityType.extract([
|
|
307
|
+
"wall",
|
|
308
|
+
"roof",
|
|
309
|
+
"slab",
|
|
310
|
+
"floor",
|
|
311
|
+
])
|
|
312
|
+
export type PluginObjectType = z.infer<typeof PluginObjectType>
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Arguments for {@linkcode PluginDesignUpdateApi.setObjectType}.
|
|
316
|
+
*
|
|
317
|
+
* | Property | Type | Description |
|
|
318
|
+
* |---|---|---|
|
|
319
|
+
* | `components` | {@linkcode ComponentHandle}`[]` | The masses to convert (>= 1) |
|
|
320
|
+
* | `objectType` | {@linkcode PluginObjectType} | Target object type (`"wall"`, `"roof"`, `"slab"`, `"floor"`) |
|
|
321
|
+
*/
|
|
322
|
+
export const PluginDesignSetObjectTypeArgs = z.object({
|
|
323
|
+
components: z.array(ComponentHandle).min(1),
|
|
324
|
+
objectType: PluginObjectType,
|
|
325
|
+
})
|
|
326
|
+
export type PluginDesignSetObjectTypeArgs = z.infer<
|
|
327
|
+
typeof PluginDesignSetObjectTypeArgs
|
|
328
|
+
>
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* The sparse GROUP-LEVEL patch accepted by {@linkcode PluginDesignUpdateApi.grid}.
|
|
332
|
+
* Only provided fields change. Wing- and line-level updates live on the grids
|
|
333
|
+
* entity family: `design.grids.updateWings` / `design.grids.updateLines`.
|
|
334
|
+
*/
|
|
335
|
+
export const PluginGridPatch = z.object({
|
|
336
|
+
angle: z.number().finite().optional(),
|
|
337
|
+
props: PluginGridStyleOptions.optional(),
|
|
338
|
+
storeyVisibility: z
|
|
339
|
+
.array(z.object({ storey: z.number().int(), visible: z.boolean() }))
|
|
340
|
+
.optional(),
|
|
341
|
+
})
|
|
342
|
+
export type PluginGridPatch = z.infer<typeof PluginGridPatch>
|
|
343
|
+
|
|
344
|
+
/** Arguments for {@linkcode PluginDesignUpdateApi.grid}. */
|
|
345
|
+
export const PluginDesignUpdateGridArgs = z.object({
|
|
346
|
+
grid: ComponentHandle,
|
|
347
|
+
patch: PluginGridPatch,
|
|
348
|
+
})
|
|
349
|
+
export type PluginDesignUpdateGridArgs = z.infer<
|
|
350
|
+
typeof PluginDesignUpdateGridArgs
|
|
351
|
+
>
|
|
352
|
+
|
|
241
353
|
/**
|
|
242
354
|
* `snaptrude.design.update` — edit existing scene entities (properties + geometry).
|
|
243
355
|
*
|
|
244
356
|
* Migrated from the removed `entity.space.{update, updateGeometryFromProfile, bulkUpdate}`.
|
|
245
357
|
* Only provided fields change; each call is undoable. Failures throw (RPC rejects).
|
|
358
|
+
*
|
|
359
|
+
* Native family edits accept `type` and/or sparse `values` from `design.catalog`.
|
|
360
|
+
* Length overrides use mm; dimensional arguments use SU. Contours and axes stay unchanged.
|
|
361
|
+
* Shared/type overrides are refused. A thickness argument must agree with the layer values.
|
|
362
|
+
* Family roof overhang is unsupported; use the native slab path for family overhang edits.
|
|
246
363
|
*/
|
|
247
364
|
export abstract class PluginDesignUpdateApi {
|
|
248
365
|
constructor() {}
|
|
249
366
|
|
|
367
|
+
/**
|
|
368
|
+
* Apply a project style through the native reference-line property command.
|
|
369
|
+
* One saved undo step; no selection or tool preference changes. Saves the
|
|
370
|
+
* legacy thickness/mode mirror too. Requires Paper Pens and an editable line
|
|
371
|
+
* in the current proposal. A no-op creates no history entry.
|
|
372
|
+
* @param referenceLineId - Existing reference line id.
|
|
373
|
+
* @param patch - styleId from the project line-style catalog.
|
|
374
|
+
* @returns The line id and applied style id.
|
|
375
|
+
* @example await snaptrude.design.update.referenceLine(id, { styleId: "wide" })
|
|
376
|
+
*/
|
|
377
|
+
public abstract referenceLine(
|
|
378
|
+
referenceLineId: string,
|
|
379
|
+
patch: PluginReferenceLineStylePatch,
|
|
380
|
+
): PluginApiReturn<PluginDesignUpdateReferenceLineResult>
|
|
381
|
+
|
|
250
382
|
/**
|
|
251
383
|
* Set a component's **Label** — the same editable Label field the properties
|
|
252
384
|
* panel shows (doors, windows, furniture, spaces, and every other labelled
|
|
@@ -290,6 +422,37 @@ export abstract class PluginDesignUpdateApi {
|
|
|
290
422
|
label: string,
|
|
291
423
|
): PluginApiReturn<boolean>
|
|
292
424
|
|
|
425
|
+
/**
|
|
426
|
+
* Update a structural grid's **group-level** fields with a sparse patch —
|
|
427
|
+
* default line styling, absolute angle, and per-storey 2D visibility. Only
|
|
428
|
+
* provided fields change. Wing- and line-level updates live on the grids
|
|
429
|
+
* entity family: {@linkcode PluginDesignGridsApi.updateWings} /
|
|
430
|
+
* {@linkcode PluginDesignGridsApi.updateLines}.
|
|
431
|
+
*
|
|
432
|
+
* Every change routes through the exact setters the native panel uses —
|
|
433
|
+
* each changed field commits its own undoable command, identical to editing
|
|
434
|
+
* that field in the panel. `angle` is an absolute target in degrees (CCW
|
|
435
|
+
* about +Y).
|
|
436
|
+
*
|
|
437
|
+
* @param grid - The grid group to update
|
|
438
|
+
* @param patch - The sparse {@linkcode PluginGridPatch}
|
|
439
|
+
* @returns `true` once applied
|
|
440
|
+
*
|
|
441
|
+
* @examplePrompt Rotate the grid to 45 degrees
|
|
442
|
+
* @examplePrompt Make this grid's lines dashed and grey
|
|
443
|
+
* @examplePrompt Hide this grid on storey 3's plan
|
|
444
|
+
*
|
|
445
|
+
* # Example
|
|
446
|
+
* ```ts
|
|
447
|
+
* const [grid] = await snaptrude.design.query.listGrids()
|
|
448
|
+
* await snaptrude.design.update.grid(grid, { angle: 45, props: { style: "DASHED" } })
|
|
449
|
+
* ```
|
|
450
|
+
*/
|
|
451
|
+
public abstract grid(
|
|
452
|
+
grid: ComponentHandle,
|
|
453
|
+
patch: PluginGridPatch,
|
|
454
|
+
): PluginApiReturn<boolean>
|
|
455
|
+
|
|
293
456
|
/**
|
|
294
457
|
* Update a single space (room) — change its properties (room label, space
|
|
295
458
|
* type, mass type, area class, department) and/or replace its geometry by
|
|
@@ -299,6 +462,8 @@ export abstract class PluginDesignUpdateApi {
|
|
|
299
462
|
* @param space - The space to update
|
|
300
463
|
* @param options - `properties` (sparse) and/or `geometry` ({ profile, extrudeHeight })
|
|
301
464
|
* @returns the updated space's echoed {@linkcode PluginSpaceUpdateResult}
|
|
465
|
+
* @throws PRECONDITION_FAILED for a void (a hole cut with `design.create.void`): delete it and
|
|
466
|
+
* cut a new one
|
|
302
467
|
*
|
|
303
468
|
* @examplePrompt Rename this room to Office
|
|
304
469
|
* @examplePrompt Change this space's room type to Meeting Room
|
|
@@ -332,6 +497,7 @@ export abstract class PluginDesignUpdateApi {
|
|
|
332
497
|
*
|
|
333
498
|
* @param items - One {@linkcode PluginUpdateSpaceItem} per space
|
|
334
499
|
* @returns one {@linkcode PluginSpaceUpdateResult} per item, in input order
|
|
500
|
+
* @throws PRECONDITION_FAILED for a void, like {@linkcode space}
|
|
335
501
|
*
|
|
336
502
|
* @examplePrompt Label all the selected rooms as Bedrooms
|
|
337
503
|
* @examplePrompt Change the room type of these five spaces at once
|
|
@@ -409,6 +575,98 @@ export abstract class PluginDesignUpdateApi {
|
|
|
409
575
|
params: PluginStaircaseParamUpdates,
|
|
410
576
|
): PluginApiReturn<PluginDesignChangeResult>
|
|
411
577
|
|
|
578
|
+
/**
|
|
579
|
+
* Edit a parametric mass by patching its creation recipe and rebuilding the
|
|
580
|
+
* solid in place — the mass keeps its id, storey, materials, position and
|
|
581
|
+
* linked copies; only the geometry changes. Read the current record with
|
|
582
|
+
* `design.query.getParameters` first.
|
|
583
|
+
*
|
|
584
|
+
* `patch` is a partial of `record.values` — or the whole record you read
|
|
585
|
+
* back, edited. A key you leave out is unchanged (that includes
|
|
586
|
+
* `operations`). Each key you send replaces that value whole — a scalar, a
|
|
587
|
+
* point, a list or a record (`contour`, `profile`, `sections`, `path`,
|
|
588
|
+
* `options`, `operations`) alike — so send the complete value you read,
|
|
589
|
+
* edited (a partial `options` drops the switches it leaves out);
|
|
590
|
+
* `{ operations: [] }` drops every operation. An optional key
|
|
591
|
+
* the record does not carry yet may be patched in when the kind allows it:
|
|
592
|
+
* a straight extrusion acquires `twistInDegrees` or `topScale`, an
|
|
593
|
+
* options-less loft or sweep acquires `options` (`levels` is not one — send
|
|
594
|
+
* the angle, not the section count). A patch that changes nothing
|
|
595
|
+
* returns the current record and records no edit (no undo step). `kind` and
|
|
596
|
+
* `version` are immutable: to change the kind, build a new mass. Keys are the
|
|
597
|
+
* record's `values` keys for its `kind` (sphere: `centre`, `radius`;
|
|
598
|
+
* cylinder: `base`, `axis`, `radius`, `height`; torus: `centre`, `axis`,
|
|
599
|
+
* `majorRadius`, `minorRadius`; …) plus `operations`. To change a fillet
|
|
600
|
+
* radius, edit `operations[i].radius` in the record you read and send
|
|
601
|
+
* `{ operations }` back. Points and axes are WORLD coordinates in internal
|
|
602
|
+
* units, exactly as `getParameters` reports them.
|
|
603
|
+
*
|
|
604
|
+
* Rebuilds in memory first, then swaps onto the SAME component; every linked
|
|
605
|
+
* copy regenerates together. One undo step; saves and syncs to collaborators
|
|
606
|
+
* like any geometry edit. Kernel kinds (revolution, sweep, loft, primitives,
|
|
607
|
+
* any `operations`) run on OpenCascade — expect a short pause.
|
|
608
|
+
*
|
|
609
|
+
* @param component - a mass whose `getParameters` is non-null
|
|
610
|
+
* @param patch - partial `values` (+ optional `operations`), or the full edited record
|
|
611
|
+
* @returns the complete post-edit record, world coordinates (what
|
|
612
|
+
* `getParameters` now returns)
|
|
613
|
+
* @throws PRECONDITION_FAILED when the component is not a mass (a family
|
|
614
|
+
* instance: use `design.family.setParameters`).
|
|
615
|
+
* Also PRECONDITION_FAILED when the mass carries no live recipe — built
|
|
616
|
+
* from a boolean, split, `brepFromFaces`/`brepFromMesh` or drawn; edited
|
|
617
|
+
* free-form since (push/pull, move face, boolean); or scaled with the
|
|
618
|
+
* transform tool. `getParameters` returns `null` for exactly these.
|
|
619
|
+
* Do not retry — rebuild it with a recipe constructor and say so.
|
|
620
|
+
* A scaled mass is the exception: undo the scale and call again.
|
|
621
|
+
* Also PRECONDITION_FAILED when the mass (or a linked copy) is **locked**
|
|
622
|
+
* (the message says so). Locking is invisible to `getParameters` — a
|
|
623
|
+
* locked parametric mass still reads back a full record. Unlock it (and
|
|
624
|
+
* every linked copy) and call again; never rebuild it, the recipe is intact.
|
|
625
|
+
* Also PRECONDITION_FAILED when an `operations` entry's edge/face selectors
|
|
626
|
+
* no longer resolve on the rebuilt base (the message names the operation
|
|
627
|
+
* and edge): re-select the edges on the new shape and re-apply that
|
|
628
|
+
* operation.
|
|
629
|
+
* Also PRECONDITION_FAILED when the edit is the first twist or taper — or
|
|
630
|
+
* the straightening — of an extrusion that carries a shell, fillet or
|
|
631
|
+
* chamfer (the kernel numbers its faces differently): send the twist/taper
|
|
632
|
+
* keys with `operations: []` first (the message names them), re-select on
|
|
633
|
+
* the new shape, then send `{ operations }` back.
|
|
634
|
+
* Graph-bound spaces accept amount-only extrusion edits. Footprint, twist,
|
|
635
|
+
* taper and operation edits require the owning boundary tools, so generated
|
|
636
|
+
* walls, junctions and hosted openings remain synchronized.
|
|
637
|
+
* @throws VALIDATION for a key the kind does not have (the message lists the
|
|
638
|
+
* kind's keys), `kind` or `version` in a partial patch, or a value outside
|
|
639
|
+
* the constructor's own rules (torus tube ≥ ring, revolution angle ∉
|
|
640
|
+
* (0, 360], a profile crossing its axis, a spline with fewer than
|
|
641
|
+
* degree + 1 poles).
|
|
642
|
+
* @throws OPERATION_FAILED when the kernel cannot build the edited recipe;
|
|
643
|
+
* the model is left unchanged.
|
|
644
|
+
*
|
|
645
|
+
* @examplePrompt Make the dome's radius 8 metres
|
|
646
|
+
* @examplePrompt Raise the podium to 5 m
|
|
647
|
+
* @examplePrompt Widen the vase — move its profile points 20 cm outward
|
|
648
|
+
* @examplePrompt Change the fillet on the rounded column to 300 mm
|
|
649
|
+
*
|
|
650
|
+
* # Example
|
|
651
|
+
* ```ts
|
|
652
|
+
* // { kind: "sphere", values: { centre, radius: 19.685 }, … }
|
|
653
|
+
* const before = await snaptrude.design.query.getParameters(dome)
|
|
654
|
+
* const after = await snaptrude.design.update.parameters(dome, { radius: 31.496 }) // 8 m in internal units
|
|
655
|
+
*
|
|
656
|
+
* // Fillet radius on a recorded result: read → edit → send the array back
|
|
657
|
+
* const rec = await snaptrude.design.query.getParameters(column)
|
|
658
|
+
* const operations = rec?.operations ?? []
|
|
659
|
+
* if (operations[0]?.op === "fillet") {
|
|
660
|
+
* operations[0].radius = 1.181
|
|
661
|
+
* await snaptrude.design.update.parameters(column, { operations })
|
|
662
|
+
* }
|
|
663
|
+
* ```
|
|
664
|
+
*/
|
|
665
|
+
public abstract parameters(
|
|
666
|
+
component: ComponentHandle,
|
|
667
|
+
patch: MassParametersPatch,
|
|
668
|
+
): PluginApiReturn<MassParametersRecord>
|
|
669
|
+
|
|
412
670
|
/**
|
|
413
671
|
* Edit a **wall** — its thickness and/or height (the same command the
|
|
414
672
|
* properties panel's Thickness/Height fields drive) and/or its **wall type**
|
|
@@ -583,6 +841,24 @@ export abstract class PluginDesignUpdateApi {
|
|
|
583
841
|
updates: PluginSlabUpdates,
|
|
584
842
|
): PluginApiReturn<PluginDesignChangeResult>
|
|
585
843
|
|
|
844
|
+
/** Replace a native beam family while preserving its authored axis. Values use mm/degrees.
|
|
845
|
+
* @param component Native beam. @param updates Saved family reference and optional instance values.
|
|
846
|
+
* @returns Affected component IDs. One undoable operation; unsupported geometry fails before mutation.
|
|
847
|
+
*/
|
|
848
|
+
public abstract beam(
|
|
849
|
+
component: ComponentHandle,
|
|
850
|
+
updates: PluginFamilyUpdates,
|
|
851
|
+
): PluginApiReturn<PluginDesignChangeResult>
|
|
852
|
+
|
|
853
|
+
/** Replace a native column family while preserving its authored axis. Values use mm/degrees.
|
|
854
|
+
* @param component Native column. @param updates Saved family reference and optional instance values.
|
|
855
|
+
* @returns Affected component IDs. One undoable operation; unsupported geometry fails before mutation.
|
|
856
|
+
*/
|
|
857
|
+
public abstract column(
|
|
858
|
+
component: ComponentHandle,
|
|
859
|
+
updates: PluginFamilyUpdates,
|
|
860
|
+
): PluginApiReturn<PluginDesignChangeResult>
|
|
861
|
+
|
|
586
862
|
/**
|
|
587
863
|
* Set a component's **absolute world elevation** — moves it vertically so its
|
|
588
864
|
* base (the bounding-box bottom, world Y) lands at `elevation`. Composed over
|
|
@@ -690,12 +966,65 @@ export abstract class PluginDesignUpdateApi {
|
|
|
690
966
|
storey: number,
|
|
691
967
|
): PluginApiReturn<PluginDesignChangeResult>
|
|
692
968
|
|
|
969
|
+
/**
|
|
970
|
+
* Change the **object type** of one or more masses — turn a mass into a real
|
|
971
|
+
* wall, roof, slab or floor: the properties panel's Object Type dropdown,
|
|
972
|
+
* headless. The geometry is kept exactly as it is (a wedge stays a wedge;
|
|
973
|
+
* nothing is flattened to a default thickness), so a sloped mass built with
|
|
974
|
+
* `design.create.massFromBrep` becomes a sloped roof or a raked wall. The
|
|
975
|
+
* component keeps its handle, label and storey; it gains the target type's
|
|
976
|
+
* construction layers and properties, and the type's default material when
|
|
977
|
+
* the mass still wore the default. One undoable operation for the whole
|
|
978
|
+
* list; undo turns them back into masses.
|
|
979
|
+
*
|
|
980
|
+
* Instances convert as a family: passing one instance (or the source) of an
|
|
981
|
+
* instanced mass converts its source and every sibling; `affected` echoes
|
|
982
|
+
* every visible member (the hidden instancing template converts too but is
|
|
983
|
+
* not listed). A converted component cannot be converted again (same rule
|
|
984
|
+
* as the panel). A converted wall has no parametric centerline: it hosts
|
|
985
|
+
* doors and windows and exports, but neighbours do not re-mitre against it.
|
|
986
|
+
*
|
|
987
|
+
* Throws before anything changes (all-or-nothing) when a component is not a
|
|
988
|
+
* mass, is a plinth, is locked or in a locked bucket, already had its type
|
|
989
|
+
* changed, or when a handle is gone/forged.
|
|
990
|
+
*
|
|
991
|
+
* @param components - The masses to convert
|
|
992
|
+
* @param objectType - Target type: `"wall"`, `"roof"`, `"slab"` or `"floor"`
|
|
993
|
+
* (the `design.query.getEntityType` vocabulary)
|
|
994
|
+
* @returns the visible components converted — the same handles, plus any
|
|
995
|
+
* instance siblings pulled in by family expansion
|
|
996
|
+
*
|
|
997
|
+
* @examplePrompt Convert this mass into a wall
|
|
998
|
+
* @examplePrompt Turn the sloped mass into a roof
|
|
999
|
+
* @examplePrompt Make these masses real slabs
|
|
1000
|
+
* @examplePrompt Change the object type of the selection to wall
|
|
1001
|
+
* @examplePrompt Convert the wedge I built into a raked wall
|
|
1002
|
+
* @examplePrompt Turn this mass into a floor
|
|
1003
|
+
*
|
|
1004
|
+
* # Example
|
|
1005
|
+
* ```ts
|
|
1006
|
+
* const brep = await snaptrude.core.geom.create.brepFromFaces(wedgeFaces)
|
|
1007
|
+
* const wedge = await snaptrude.design.create.massFromBrep(brep, "Gable end")
|
|
1008
|
+
* const { affected } = await snaptrude.design.update.setObjectType([wedge], "wall")
|
|
1009
|
+
* console.log(await snaptrude.design.query.getEntityType(affected[0])) // "wall"
|
|
1010
|
+
* ```
|
|
1011
|
+
*/
|
|
1012
|
+
public abstract setObjectType(
|
|
1013
|
+
components: ComponentHandle[],
|
|
1014
|
+
objectType: PluginObjectType,
|
|
1015
|
+
): PluginApiReturn<PluginDesignChangeResult>
|
|
1016
|
+
|
|
693
1017
|
/**
|
|
694
1018
|
* Update an existing parametric buildable envelope — regenerate the zoning
|
|
695
1019
|
* volume from a revised site polygon, setbacks, vertical cap, or FAR and
|
|
696
1020
|
* lot-coverage limits, keeping the same envelope id. Canonical home of the
|
|
697
1021
|
* update formerly at `entity.buildableEnvelope.update` (now deprecated).
|
|
698
1022
|
*
|
|
1023
|
+
* Edge state is preserved, like the right panel: every edge's type
|
|
1024
|
+
* (front/side/rear) is kept. For each type whose value changed (by more than
|
|
1025
|
+
* 2 mm), the per-edge custom distances on edges of that type are cleared;
|
|
1026
|
+
* custom distances on types whose value did not change are kept.
|
|
1027
|
+
*
|
|
699
1028
|
* @param buildableEnvelopeId - Existing envelope ID to update; non-empty and
|
|
700
1029
|
* must match an existing envelope on the canvas.
|
|
701
1030
|
* @param sitePolygon - Site polygon vertices in `lengthUnit`; minimum 3 vertices.
|
|
@@ -706,9 +1035,15 @@ export abstract class PluginDesignUpdateApi {
|
|
|
706
1035
|
* @param farRatio - Optional FAR value, positive when provided.
|
|
707
1036
|
* @param lotCoverageMaxPct - Optional lot coverage cap, `0..100`.
|
|
708
1037
|
* @returns A {@linkcode PluginBuildableEnvelopeUpdateResult} with the
|
|
709
|
-
* `buildableEnvelopeId` of the updated envelope
|
|
1038
|
+
* `buildableEnvelopeId` of the updated envelope and `clearedEdgeSetbacks`,
|
|
1039
|
+
* the `edgeIndex` of each edge that lost its custom distance (empty when
|
|
1040
|
+
* none). Tell the user about any cleared edges.
|
|
710
1041
|
* @throws If validation fails, the envelope does not exist, or generation
|
|
711
|
-
* produces no renderable geometry.
|
|
1042
|
+
* produces no renderable geometry. Also throws `PRECONDITION_FAILED`
|
|
1043
|
+
* (`details.reason: "STALE_EDGE_SETTINGS"`, nothing changes) when the site
|
|
1044
|
+
* outline changed since the edge settings were made. Tell the user;
|
|
1045
|
+
* editing any edge on the canvas setback pills resets the edge settings
|
|
1046
|
+
* to the new outline (dropping the old ones), after which you can retry.
|
|
712
1047
|
*
|
|
713
1048
|
* @examplePrompt Change the envelope's height limit to 175 feet
|
|
714
1049
|
* @examplePrompt Update the setbacks on the buildable envelope
|
|
@@ -742,4 +1077,63 @@ export abstract class PluginDesignUpdateApi {
|
|
|
742
1077
|
farRatio?: number,
|
|
743
1078
|
lotCoverageMaxPct?: number,
|
|
744
1079
|
): PluginApiReturn<PluginBuildableEnvelopeUpdateResult>
|
|
1080
|
+
|
|
1081
|
+
/**
|
|
1082
|
+
* Change one site edge's type (front / side / rear) and/or give that edge
|
|
1083
|
+
* its own setback distance, the same as editing a setback pill on the
|
|
1084
|
+
* canvas. One undo step; the pills and Site Analysis sheet refresh.
|
|
1085
|
+
*
|
|
1086
|
+
* Address the edge with `siteId` and `edgeIndex` from
|
|
1087
|
+
* `program.site.listEdges()`. Setting `role` clears that edge's own
|
|
1088
|
+
* distance. `setback: null` clears the edge's own distance and puts it back
|
|
1089
|
+
* on its type's distance. When `role` and a numeric `setback` are both
|
|
1090
|
+
* given, the role is applied first and then the setback, so the new distance
|
|
1091
|
+
* wins. On the only edge of its type, a numeric setback becomes that type's
|
|
1092
|
+
* value (like the canvas pills), so `null` afterwards has nothing to
|
|
1093
|
+
* clear; set the type's value instead. Only call this when the user asks to
|
|
1094
|
+
* change an edge.
|
|
1095
|
+
*
|
|
1096
|
+
* @param siteId - Site component id, from `program.site.listEdges()`.
|
|
1097
|
+
* @param edgeIndex - Edge index from `program.site.listEdges()`; nonnegative
|
|
1098
|
+
* integer, upper bound checked by the host.
|
|
1099
|
+
* @param patch - A {@linkcode PluginSiteEdgePatch}: `role`, `setback` (a
|
|
1100
|
+
* number in `lengthUnit`, or `null` to clear), and `lengthUnit` (required
|
|
1101
|
+
* with a numeric `setback`). Provide `role` and/or `setback`.
|
|
1102
|
+
* @returns The refreshed {@linkcode PluginDesignUpdateSiteEdgeResult} for the
|
|
1103
|
+
* site, as `program.site.listEdges()` returns it.
|
|
1104
|
+
* @throws
|
|
1105
|
+
* - `HANDLE_INVALID`: unknown `siteId` (invalid site handle).
|
|
1106
|
+
* - `VALIDATION`: `edgeIndex` is out of range or not a nonnegative
|
|
1107
|
+
* integer; when the index is out of range, `details` include `edgeCount`.
|
|
1108
|
+
* - `PRECONDITION_FAILED`, with `details.reason` one of:
|
|
1109
|
+
* - `NO_BUILDABLE_ENVELOPE`: the site has no envelope to store edge
|
|
1110
|
+
* settings on. Ask the user whether to create a default envelope with
|
|
1111
|
+
* `design.create.buildableEnvelopeFromSite(siteId)` or to create one
|
|
1112
|
+
* themselves; do not create one unasked.
|
|
1113
|
+
* - `MASSING_ENVELOPE`: the site's envelope is a massing envelope. Tell
|
|
1114
|
+
* the user; change nothing.
|
|
1115
|
+
* - `ENVELOPE_TRANSFORMED`: the envelope has been rotated or scaled, so
|
|
1116
|
+
* edge editing is unavailable. Tell the user.
|
|
1117
|
+
* - `STALE_EDGE_SETTINGS`: the site outline changed since the edge
|
|
1118
|
+
* settings were made. Tell the user; editing any edge on the canvas
|
|
1119
|
+
* setback pills resets the edge settings to the new outline (dropping
|
|
1120
|
+
* the old ones), after which you can retry.
|
|
1121
|
+
*
|
|
1122
|
+
* @examplePrompt Make edge 2 the front
|
|
1123
|
+
* @examplePrompt Set just the north edge setback to 8 m
|
|
1124
|
+
* @examplePrompt Remove the custom setback on edge 3
|
|
1125
|
+
*
|
|
1126
|
+
* # Example
|
|
1127
|
+
* ```ts
|
|
1128
|
+
* const [{ siteId }] = (await snaptrude.program.site.listEdges()).sites
|
|
1129
|
+
* await snaptrude.design.update.siteEdge(siteId, 2, { role: "front" })
|
|
1130
|
+
* await snaptrude.design.update.siteEdge(siteId, 3, { setback: 8, lengthUnit: "m" })
|
|
1131
|
+
* await snaptrude.design.update.siteEdge(siteId, 3, { setback: null })
|
|
1132
|
+
* ```
|
|
1133
|
+
*/
|
|
1134
|
+
public abstract siteEdge(
|
|
1135
|
+
siteId: string,
|
|
1136
|
+
edgeIndex: number,
|
|
1137
|
+
patch: PluginSiteEdgePatch,
|
|
1138
|
+
): PluginApiReturn<PluginDesignUpdateSiteEdgeResult>
|
|
745
1139
|
}
|
|
@@ -10,13 +10,14 @@ import { PluginObjectCatalogGroup, PluginObjectCatalogItem } from "../doors"
|
|
|
10
10
|
* at `design.query.*`. Window targets are {@linkcode ComponentHandle}s.
|
|
11
11
|
*
|
|
12
12
|
* The **catalog** reads (`listCatalogGroups`/`listCatalog`/`getCatalogItem`/`exists`)
|
|
13
|
-
* browse
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* (`[]`/`null`). The {@linkcode PluginObjectCatalogGroup} / {@linkcode PluginObjectCatalogItem}
|
|
13
|
+
* browse saved hosted window families, keyed by definition ID, and feed design.create.window.
|
|
14
|
+
* They reject if saved definitions cannot be loaded completely. A missing item returns null.
|
|
15
|
+
* The {@linkcode PluginObjectCatalogGroup} / {@linkcode PluginObjectCatalogItem}
|
|
17
16
|
* DTOs are shared with `design.doors` (defined there, re-exported here).
|
|
18
17
|
*
|
|
19
|
-
*
|
|
18
|
+
* PC-only: dimensions read the evaluated opening and host thickness in SU. Setters
|
|
19
|
+
* write declared width/height parameters, never mesh scale. Missing or derived
|
|
20
|
+
* controls reject. Use design.family.setParameters for sill and other controls.
|
|
20
21
|
*/
|
|
21
22
|
export abstract class PluginDesignWindowsApi {
|
|
22
23
|
constructor() {}
|
|
@@ -40,7 +41,9 @@ export abstract class PluginDesignWindowsApi {
|
|
|
40
41
|
* if (type) console.log("window type:", type)
|
|
41
42
|
* ```
|
|
42
43
|
*/
|
|
43
|
-
public abstract getType(
|
|
44
|
+
public abstract getType(
|
|
45
|
+
window: ComponentHandle,
|
|
46
|
+
): PluginApiReturn<string | null>
|
|
44
47
|
|
|
45
48
|
/**
|
|
46
49
|
* Get the width of a window — how wide its opening is along the host wall.
|
|
@@ -60,7 +63,9 @@ export abstract class PluginDesignWindowsApi {
|
|
|
60
63
|
* if (width !== null) console.log("window width:", width)
|
|
61
64
|
* ```
|
|
62
65
|
*/
|
|
63
|
-
public abstract getWidth(
|
|
66
|
+
public abstract getWidth(
|
|
67
|
+
window: ComponentHandle,
|
|
68
|
+
): PluginApiReturn<number | null>
|
|
64
69
|
|
|
65
70
|
/**
|
|
66
71
|
* Get the height of a window — how tall its opening is on the host wall.
|
|
@@ -80,12 +85,13 @@ export abstract class PluginDesignWindowsApi {
|
|
|
80
85
|
* if (height !== null) console.log("window height:", height)
|
|
81
86
|
* ```
|
|
82
87
|
*/
|
|
83
|
-
public abstract getHeight(
|
|
88
|
+
public abstract getHeight(
|
|
89
|
+
window: ComponentHandle,
|
|
90
|
+
): PluginApiReturn<number | null>
|
|
84
91
|
|
|
85
92
|
/**
|
|
86
|
-
* Get
|
|
87
|
-
*
|
|
88
|
-
* oriented space.
|
|
93
|
+
* Get evaluated opening width/height and host thickness in Snaptrude units.
|
|
94
|
+
* The opening can differ from the width/height input parameters.
|
|
89
95
|
*
|
|
90
96
|
* @param window The window to query
|
|
91
97
|
* @returns The dimensions, or `null`
|
|
@@ -104,7 +110,7 @@ export abstract class PluginDesignWindowsApi {
|
|
|
104
110
|
* ```
|
|
105
111
|
*/
|
|
106
112
|
public abstract getDimensions(
|
|
107
|
-
window: ComponentHandle
|
|
113
|
+
window: ComponentHandle,
|
|
108
114
|
): PluginApiReturn<PluginWindowDimensions | null>
|
|
109
115
|
|
|
110
116
|
/**
|
|
@@ -129,7 +135,7 @@ export abstract class PluginDesignWindowsApi {
|
|
|
129
135
|
*/
|
|
130
136
|
public abstract setWidth(
|
|
131
137
|
window: ComponentHandle,
|
|
132
|
-
width: number
|
|
138
|
+
width: number,
|
|
133
139
|
): PluginApiReturn<PluginDesignChangeResult>
|
|
134
140
|
|
|
135
141
|
/**
|
|
@@ -153,7 +159,7 @@ export abstract class PluginDesignWindowsApi {
|
|
|
153
159
|
*/
|
|
154
160
|
public abstract setHeight(
|
|
155
161
|
window: ComponentHandle,
|
|
156
|
-
height: number
|
|
162
|
+
height: number,
|
|
157
163
|
): PluginApiReturn<PluginDesignChangeResult>
|
|
158
164
|
|
|
159
165
|
/**
|
|
@@ -174,7 +180,9 @@ export abstract class PluginDesignWindowsApi {
|
|
|
174
180
|
* for (const g of groups) console.log(g.dbType, g.label, g.source)
|
|
175
181
|
* ```
|
|
176
182
|
*/
|
|
177
|
-
public abstract listCatalogGroups(): PluginApiReturn<
|
|
183
|
+
public abstract listCatalogGroups(): PluginApiReturn<
|
|
184
|
+
PluginObjectCatalogGroup[]
|
|
185
|
+
>
|
|
178
186
|
|
|
179
187
|
/**
|
|
180
188
|
* List the placeable window catalog (team + general libraries), optionally
|
|
@@ -196,7 +204,7 @@ export abstract class PluginDesignWindowsApi {
|
|
|
196
204
|
* ```
|
|
197
205
|
*/
|
|
198
206
|
public abstract listCatalog(
|
|
199
|
-
group?: string
|
|
207
|
+
group?: string,
|
|
200
208
|
): PluginApiReturn<PluginObjectCatalogItem[]>
|
|
201
209
|
|
|
202
210
|
/**
|
|
@@ -218,7 +226,7 @@ export abstract class PluginDesignWindowsApi {
|
|
|
218
226
|
* ```
|
|
219
227
|
*/
|
|
220
228
|
public abstract getCatalogItem(
|
|
221
|
-
id: string
|
|
229
|
+
id: string,
|
|
222
230
|
): PluginApiReturn<PluginObjectCatalogItem | null>
|
|
223
231
|
|
|
224
232
|
/**
|
|
@@ -282,7 +290,9 @@ export const PluginDesignWindowSetWidthArgs = z.object({
|
|
|
282
290
|
window: ComponentHandle,
|
|
283
291
|
width: z.number(),
|
|
284
292
|
})
|
|
285
|
-
export type PluginDesignWindowSetWidthArgs = z.infer<
|
|
293
|
+
export type PluginDesignWindowSetWidthArgs = z.infer<
|
|
294
|
+
typeof PluginDesignWindowSetWidthArgs
|
|
295
|
+
>
|
|
286
296
|
|
|
287
297
|
/**
|
|
288
298
|
* Arguments for {@linkcode PluginDesignWindowsApi.setHeight}.
|
|
@@ -296,7 +306,9 @@ export const PluginDesignWindowSetHeightArgs = z.object({
|
|
|
296
306
|
window: ComponentHandle,
|
|
297
307
|
height: z.number(),
|
|
298
308
|
})
|
|
299
|
-
export type PluginDesignWindowSetHeightArgs = z.infer<
|
|
309
|
+
export type PluginDesignWindowSetHeightArgs = z.infer<
|
|
310
|
+
typeof PluginDesignWindowSetHeightArgs
|
|
311
|
+
>
|
|
300
312
|
|
|
301
313
|
// ---------------------------------------------------------------------------
|
|
302
314
|
// catalog (shared DTOs defined in ../doors, re-exported here for symmetry)
|
|
@@ -315,7 +327,9 @@ export { PluginObjectCatalogGroup, PluginObjectCatalogItem }
|
|
|
315
327
|
export const PluginDesignWindowListCatalogArgs = z.object({
|
|
316
328
|
group: z.string().optional(),
|
|
317
329
|
})
|
|
318
|
-
export type PluginDesignWindowListCatalogArgs = z.infer<
|
|
330
|
+
export type PluginDesignWindowListCatalogArgs = z.infer<
|
|
331
|
+
typeof PluginDesignWindowListCatalogArgs
|
|
332
|
+
>
|
|
319
333
|
|
|
320
334
|
/**
|
|
321
335
|
* Arguments for {@linkcode PluginDesignWindowsApi.getCatalogItem} / {@linkcode PluginDesignWindowsApi.exists}.
|
|
@@ -327,7 +341,11 @@ export type PluginDesignWindowListCatalogArgs = z.infer<typeof PluginDesignWindo
|
|
|
327
341
|
export const PluginDesignWindowGetCatalogItemArgs = z.object({
|
|
328
342
|
id: z.string(),
|
|
329
343
|
})
|
|
330
|
-
export type PluginDesignWindowGetCatalogItemArgs = z.infer<
|
|
344
|
+
export type PluginDesignWindowGetCatalogItemArgs = z.infer<
|
|
345
|
+
typeof PluginDesignWindowGetCatalogItemArgs
|
|
346
|
+
>
|
|
331
347
|
|
|
332
348
|
export const PluginDesignWindowExistsArgs = PluginDesignWindowGetCatalogItemArgs
|
|
333
|
-
export type PluginDesignWindowExistsArgs = z.infer<
|
|
349
|
+
export type PluginDesignWindowExistsArgs = z.infer<
|
|
350
|
+
typeof PluginDesignWindowExistsArgs
|
|
351
|
+
>
|