@snaptrude/plugin-core 0.9.17 → 0.9.18-edgesetbacks-20261021.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +231 -231
- package/CHANGELOG.md +408 -408
- package/CLAUDE.md +11 -11
- package/api-manifest.json +1428 -712
- package/dist/api/analysis/daylight.d.ts +5 -5
- package/dist/api/analysis/solar.d.ts +2 -2
- package/dist/api/core/camera/index.d.ts +29 -0
- package/dist/api/core/camera/index.d.ts.map +1 -1
- package/dist/api/core/geom/create/index.d.ts +7 -1
- package/dist/api/core/geom/create/index.d.ts.map +1 -1
- package/dist/api/core/geom/update/contour.d.ts +8 -2
- package/dist/api/core/geom/update/contour.d.ts.map +1 -1
- package/dist/api/core/storeys/index.d.ts +5 -2
- package/dist/api/core/storeys/index.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 +65 -25
- package/dist/api/design/create/bulk-items.d.ts.map +1 -1
- package/dist/api/design/create/index.d.ts +299 -100
- package/dist/api/design/create/index.d.ts.map +1 -1
- package/dist/api/design/create/opening-fields.d.ts +13 -12
- package/dist/api/design/create/opening-fields.d.ts.map +1 -1
- package/dist/api/design/delete/index.d.ts +1 -0
- package/dist/api/design/delete/index.d.ts.map +1 -1
- package/dist/api/design/doors/index.d.ts +18 -24
- package/dist/api/design/doors/index.d.ts.map +1 -1
- package/dist/api/design/family.d.ts +813 -35
- package/dist/api/design/family.d.ts.map +1 -1
- package/dist/api/design/index.d.ts +16 -0
- package/dist/api/design/index.d.ts.map +1 -1
- package/dist/api/design/networks.d.ts +1703 -0
- package/dist/api/design/networks.d.ts.map +1 -0
- package/dist/api/design/query/grids.d.ts +2 -2
- package/dist/api/design/query/index.d.ts +42 -32
- package/dist/api/design/query/index.d.ts.map +1 -1
- package/dist/api/design/selection/index.d.ts +10 -10
- package/dist/api/design/types/index.d.ts +40 -24
- package/dist/api/design/types/index.d.ts.map +1 -1
- package/dist/api/design/update/index.d.ts +111 -6
- 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/presentation/aiInspiration.d.ts +10 -10
- package/dist/api/presentation/annotate.d.ts +38 -22
- package/dist/api/presentation/annotate.d.ts.map +1 -1
- package/dist/api/presentation/drawingContract.d.ts +32 -0
- package/dist/api/presentation/drawingContract.d.ts.map +1 -0
- package/dist/api/presentation/drawings.d.ts +3523 -0
- package/dist/api/presentation/drawings.d.ts.map +1 -0
- package/dist/api/presentation/export.d.ts +23 -5
- package/dist/api/presentation/export.d.ts.map +1 -1
- package/dist/api/presentation/index.d.ts +32 -12
- package/dist/api/presentation/index.d.ts.map +1 -1
- package/dist/api/presentation/placedViews.d.ts +106 -6
- package/dist/api/presentation/placedViews.d.ts.map +1 -1
- package/dist/api/presentation/shapes.d.ts +2 -2
- package/dist/api/presentation/sheets.d.ts +175 -19
- package/dist/api/presentation/sheets.d.ts.map +1 -1
- package/dist/api/presentation/viewPresets.d.ts +222 -0
- package/dist/api/presentation/viewPresets.d.ts.map +1 -0
- package/dist/api/presentation/views.d.ts +141 -8
- package/dist/api/presentation/views.d.ts.map +1 -1
- package/dist/api/presentation/walkthroughs.d.ts +6 -6
- package/dist/errors/codes.d.ts +3 -1
- package/dist/errors/codes.d.ts.map +1 -1
- package/dist/index.cjs +3831 -2444
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3705 -2444
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/scripts/check-dist-fresh.mjs +22 -22
- package/scripts/generate-manifest.mjs +243 -238
- package/scripts/generate-manifest.test.mjs +303 -303
- package/src/api/analysis/daylight.ts +470 -470
- package/src/api/analysis/heatmaps.ts +683 -683
- package/src/api/analysis/illuminance.ts +155 -155
- package/src/api/analysis/index.ts +61 -61
- package/src/api/analysis/shadows.ts +183 -183
- package/src/api/analysis/solar.ts +237 -237
- package/src/api/analysis/sunlightHours.ts +211 -211
- package/src/api/analysis/sunpath.ts +83 -83
- package/src/api/analysis/weather.ts +179 -179
- package/src/api/core/buildings.ts +485 -485
- package/src/api/core/camera/index.ts +696 -667
- package/src/api/core/comment/index.ts +376 -376
- package/src/api/core/geom/create/index.ts +2139 -2133
- package/src/api/core/geom/delete/index.ts +84 -84
- package/src/api/core/geom/index.ts +35 -35
- package/src/api/core/geom/query/arc.ts +169 -169
- package/src/api/core/geom/query/brep.ts +621 -621
- package/src/api/core/geom/query/circle.ts +404 -404
- package/src/api/core/geom/query/contour.ts +540 -540
- package/src/api/core/geom/query/curve.ts +1102 -1102
- package/src/api/core/geom/query/edge.ts +130 -130
- package/src/api/core/geom/query/face.ts +508 -508
- package/src/api/core/geom/query/halfedge.ts +210 -210
- package/src/api/core/geom/query/index.ts +63 -63
- package/src/api/core/geom/query/profile.ts +473 -473
- package/src/api/core/geom/query/vertex.ts +205 -205
- package/src/api/core/geom/update/contour.ts +323 -317
- package/src/api/core/geom/update/curve.ts +209 -209
- package/src/api/core/geom/update/index.ts +29 -29
- package/src/api/core/geom/update/profile.ts +379 -379
- package/src/api/core/groups.ts +521 -521
- package/src/api/core/handles/index.ts +234 -234
- package/src/api/core/history/index.ts +84 -84
- package/src/api/core/index.ts +99 -99
- package/src/api/core/io/export/index.ts +126 -126
- package/src/api/core/io/import/index.ts +504 -504
- package/src/api/core/io/index.ts +42 -42
- package/src/api/core/io/job/index.ts +140 -140
- package/src/api/core/io/query/index.ts +71 -71
- package/src/api/core/io/terrain/index.ts +360 -360
- package/src/api/core/io/underlay/index.ts +705 -705
- package/src/api/core/layers.ts +540 -540
- package/src/api/core/math/index.ts +20 -20
- package/src/api/core/math/quat.ts +172 -172
- package/src/api/core/math/vec3.ts +179 -179
- package/src/api/core/mode/index.ts +108 -108
- package/src/api/core/project/index.ts +479 -479
- package/src/api/core/proposals/index.ts +570 -570
- package/src/api/core/storeys/index.ts +311 -308
- package/src/api/core/storeys/layers.ts +339 -339
- package/src/api/core/tags.ts +911 -911
- package/src/api/core/units/index.ts +164 -164
- package/src/api/core/user.ts +46 -46
- package/src/api/core/zoom/index.ts +64 -51
- package/src/api/design/bim.ts +210 -0
- package/src/api/design/boolean/index.ts +181 -179
- package/src/api/design/catalog.ts +203 -0
- package/src/api/design/create/bulk-items.ts +294 -254
- package/src/api/design/create/grids.ts +137 -137
- package/src/api/design/create/index.ts +2178 -1980
- package/src/api/design/create/opening-fields.ts +40 -37
- package/src/api/design/delete/index.ts +75 -74
- package/src/api/design/dimensions.ts +453 -453
- package/src/api/design/doors/index.ts +516 -500
- package/src/api/design/edit/index.ts +54 -54
- package/src/api/design/erase/index.ts +151 -151
- package/src/api/design/family.ts +1342 -704
- package/src/api/design/furniture/index.ts +319 -319
- package/src/api/design/grids.ts +237 -237
- package/src/api/design/index.ts +304 -274
- package/src/api/design/lock.ts +69 -69
- package/src/api/design/materials/index.ts +608 -608
- package/src/api/design/networks.ts +607 -0
- package/src/api/design/query/geometry/index.ts +319 -319
- package/src/api/design/query/grids.ts +197 -197
- package/src/api/design/query/index.ts +1236 -1226
- package/src/api/design/query/referenceLines.ts +52 -52
- package/src/api/design/query/spaces.ts +275 -275
- package/src/api/design/selection/index.ts +273 -273
- package/src/api/design/shared.ts +40 -40
- package/src/api/design/transform/index.ts +254 -254
- package/src/api/design/types/index.ts +163 -156
- package/src/api/design/update/index.ts +1096 -983
- package/src/api/design/visibility.ts +143 -143
- package/src/api/design/windows/index.ts +351 -333
- package/src/api/entity/buildableEnvelope.ts +397 -322
- package/src/api/entity/index.ts +30 -30
- package/src/api/entity/referenceLine.ts +235 -235
- package/src/api/entity/space.ts +612 -612
- package/src/api/entity/story.ts +517 -517
- package/src/api/index.ts +47 -47
- package/src/api/presentation/aiInspiration.ts +1116 -1116
- package/src/api/presentation/annotate.ts +417 -385
- package/src/api/presentation/camera.ts +289 -289
- package/src/api/presentation/diagrams.ts +194 -194
- package/src/api/presentation/drawingContract.ts +70 -0
- package/src/api/presentation/drawings.ts +1179 -0
- package/src/api/presentation/export.ts +134 -108
- package/src/api/presentation/import.ts +159 -159
- package/src/api/presentation/index.ts +160 -135
- package/src/api/presentation/placedViews.ts +1211 -1120
- package/src/api/presentation/sections.ts +420 -420
- package/src/api/presentation/shapes.ts +274 -274
- package/src/api/presentation/sheets.ts +746 -585
- package/src/api/presentation/slideshow.ts +134 -134
- package/src/api/presentation/tables.ts +84 -84
- package/src/api/presentation/viewPresets.ts +241 -0
- package/src/api/presentation/views.ts +742 -673
- package/src/api/presentation/walkthroughs.ts +1201 -1201
- package/src/api/program/adjacency.ts +164 -164
- package/src/api/program/areas.ts +408 -408
- package/src/api/program/classification.ts +138 -138
- package/src/api/program/cores.ts +83 -83
- package/src/api/program/departments.ts +517 -517
- package/src/api/program/index.ts +73 -73
- package/src/api/program/labels.ts +332 -332
- package/src/api/program/layout.ts +422 -422
- package/src/api/program/metadata.ts +364 -364
- package/src/api/program/metrics.ts +120 -120
- package/src/api/program/site.ts +748 -748
- package/src/api/program/spreadsheet.ts +2698 -2698
- package/src/api/workspace/index.ts +612 -612
- package/src/errors/codes.ts +143 -136
- package/src/errors/envelope.ts +75 -75
- package/src/errors/index.ts +21 -21
- package/src/errors/plugin-error.ts +134 -134
- package/src/handles.ts +297 -297
- package/src/host-utils.ts +67 -67
- package/src/index.ts +7 -7
- package/src/massParameters.ops.ts +246 -246
- package/src/massParameters.ts +427 -427
- package/src/types.ts +16 -16
- package/test/drawingContract.test.mjs +288 -0
- package/test/errors.test.mjs +185 -184
- package/test/massParameters.test.mjs +952 -952
- package/test/presentationViewSettings.test.mjs +85 -0
- package/tsconfig.json +22 -22
- package/tsup.config.ts +12 -12
|
@@ -1,197 +1,197 @@
|
|
|
1
|
-
import * as z from "zod"
|
|
2
|
-
import { PluginApiReturn } from "../../../types"
|
|
3
|
-
import { CurveHandle, BBoxComponents } from "../../../handles"
|
|
4
|
-
import { PluginReferenceLineStyle } from "../create"
|
|
5
|
-
|
|
6
|
-
// ---------------------------------------------------------------------------
|
|
7
|
-
// Records
|
|
8
|
-
// ---------------------------------------------------------------------------
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Visual properties of grid lines — the group's defaults and any per-line
|
|
12
|
-
* overrides share this shape (values mirror the engine's `GridLineProps`).
|
|
13
|
-
*
|
|
14
|
-
* | Property | Type | Description |
|
|
15
|
-
* |---|---|---|
|
|
16
|
-
* | `style` | {@linkcode PluginReferenceLineStyle} | Line style (`"SOLID"` \| `"DASHED"` \| `"DOT_DASH"`) |
|
|
17
|
-
* | `weight` | `number` | Line weight |
|
|
18
|
-
* | `color` | `string` | Line color as a `#rrggbb` hex string |
|
|
19
|
-
* | `showStart` | `boolean` | Whether the start-end tag bubble is shown |
|
|
20
|
-
* | `showEnd` | `boolean` | Whether the end-end tag bubble is shown |
|
|
21
|
-
*/
|
|
22
|
-
export const PluginGridLineProps = z.object({
|
|
23
|
-
style: PluginReferenceLineStyle,
|
|
24
|
-
weight: z.number(),
|
|
25
|
-
color: z.string(),
|
|
26
|
-
showStart: z.boolean(),
|
|
27
|
-
showEnd: z.boolean(),
|
|
28
|
-
})
|
|
29
|
-
export type PluginGridLineProps = z.infer<typeof PluginGridLineProps>
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* One grid line within a wing.
|
|
33
|
-
*
|
|
34
|
-
* | Property | Type | Description |
|
|
35
|
-
* |---|---|---|
|
|
36
|
-
* | `curve` | {@linkcode CurveHandle} | The line's geometry in **world space** (a line or arc; read coordinates via `core.geom.curve`) |
|
|
37
|
-
* | `tag` | `string` | The line's grid tag (e.g. `"A"`, `"3"`) |
|
|
38
|
-
* | `visible` | `boolean` | Persisted per-line visibility |
|
|
39
|
-
* | `props` | {@linkcode PluginGridLineProps} | **Effective** visual properties (group defaults merged with this line's overrides) |
|
|
40
|
-
* | `overrides` | `Partial<`{@linkcode PluginGridLineProps}`>`? | This line's raw overrides, when any exist |
|
|
41
|
-
*/
|
|
42
|
-
export const PluginGridLineRecord = z.object({
|
|
43
|
-
curve: CurveHandle,
|
|
44
|
-
tag: z.string(),
|
|
45
|
-
visible: z.boolean(),
|
|
46
|
-
props: PluginGridLineProps,
|
|
47
|
-
overrides: PluginGridLineProps.partial().optional(),
|
|
48
|
-
})
|
|
49
|
-
export type PluginGridLineRecord = z.infer<typeof PluginGridLineRecord>
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* One wing of a grid — a family of parallel lines sharing a local frame.
|
|
53
|
-
* `spacing` and `span` are measured along the wing's local axes in
|
|
54
|
-
* Snaptrude units; line addresses used by mutating APIs are
|
|
55
|
-
* `{ wing, line }` index pairs into these arrays.
|
|
56
|
-
*
|
|
57
|
-
* | Property | Type | Description |
|
|
58
|
-
* |---|---|---|
|
|
59
|
-
* | `spacing` | `number` | Nominal spacing between adjacent lines (Snaptrude units) |
|
|
60
|
-
* | `tagStart` | `string` | First tag of the wing's deterministic tag sequence |
|
|
61
|
-
* | `span` | `{ min: number; max: number }`? | Explicit family length along the wing's line axis, when baked |
|
|
62
|
-
* | `lines` | {@linkcode PluginGridLineRecord}`[]` | The wing's lines, in wing order (index = the `line` address) |
|
|
63
|
-
*/
|
|
64
|
-
export const PluginGridWingRecord = z.object({
|
|
65
|
-
spacing: z.number(),
|
|
66
|
-
tagStart: z.string(),
|
|
67
|
-
span: z.object({ min: z.number(), max: z.number() }).optional(),
|
|
68
|
-
lines: z.array(PluginGridLineRecord),
|
|
69
|
-
})
|
|
70
|
-
export type PluginGridWingRecord = z.infer<typeof PluginGridWingRecord>
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Per-storey 2D-plan visibility of a grid.
|
|
74
|
-
*
|
|
75
|
-
* | Property | Type | Description |
|
|
76
|
-
* |---|---|---|
|
|
77
|
-
* | `activeStorey` | `number` | The storey the grid belongs to |
|
|
78
|
-
* | `disabledOnStoreys` | `number[]` | Storeys on whose 2D plan the grid is hidden |
|
|
79
|
-
*/
|
|
80
|
-
export const PluginGridStoreyVisibility = z.object({
|
|
81
|
-
activeStorey: z.number(),
|
|
82
|
-
disabledOnStoreys: z.array(z.number()),
|
|
83
|
-
})
|
|
84
|
-
export type PluginGridStoreyVisibility = z.infer<typeof PluginGridStoreyVisibility>
|
|
85
|
-
|
|
86
|
-
// ---------------------------------------------------------------------------
|
|
87
|
-
// get — args & result
|
|
88
|
-
// ---------------------------------------------------------------------------
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Property names readable via {@linkcode PluginDesignQueryGridsApi.get}.
|
|
92
|
-
*
|
|
93
|
-
* | Value | Description |
|
|
94
|
-
* |---|---|
|
|
95
|
-
* | `"angle"` | World rotation about +Y, in **degrees** |
|
|
96
|
-
* | `"props"` | Group-level default line properties |
|
|
97
|
-
* | `"storeyVisibility"` | Active storey + storeys where the grid is hidden in 2D |
|
|
98
|
-
* | `"wings"` | Full wing/line structure with world-space curve handles |
|
|
99
|
-
* | `"bounds"` | World-space axis-aligned bounding box of the grid geometry |
|
|
100
|
-
*/
|
|
101
|
-
export const PluginGridGetProperty = z.enum([
|
|
102
|
-
"angle",
|
|
103
|
-
"props",
|
|
104
|
-
"storeyVisibility",
|
|
105
|
-
"wings",
|
|
106
|
-
"bounds",
|
|
107
|
-
])
|
|
108
|
-
export type PluginGridGetProperty = z.infer<typeof PluginGridGetProperty>
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Arguments for {@linkcode PluginDesignQueryGridsApi.get}.
|
|
112
|
-
*
|
|
113
|
-
* | Property | Type | Description |
|
|
114
|
-
* |---|---|---|
|
|
115
|
-
* | `gridId` | `string` | The grid group ID to query |
|
|
116
|
-
* | `properties` | {@linkcode PluginGridGetProperty}`[]` | Properties to retrieve |
|
|
117
|
-
*/
|
|
118
|
-
export const PluginGridGetArgs = z.object({
|
|
119
|
-
gridId: z.string(),
|
|
120
|
-
properties: z.array(PluginGridGetProperty),
|
|
121
|
-
})
|
|
122
|
-
export type PluginGridGetArgs = z.infer<typeof PluginGridGetArgs>
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Result of {@linkcode PluginDesignQueryGridsApi.get} — only the requested
|
|
126
|
-
* properties are present.
|
|
127
|
-
*/
|
|
128
|
-
export const PluginGridGetResult = z
|
|
129
|
-
.object({
|
|
130
|
-
angle: z.number(),
|
|
131
|
-
props: PluginGridLineProps,
|
|
132
|
-
storeyVisibility: PluginGridStoreyVisibility,
|
|
133
|
-
wings: z.array(PluginGridWingRecord),
|
|
134
|
-
bounds: BBoxComponents,
|
|
135
|
-
})
|
|
136
|
-
.partial()
|
|
137
|
-
export type PluginGridGetResult = z.infer<typeof PluginGridGetResult>
|
|
138
|
-
|
|
139
|
-
// ---------------------------------------------------------------------------
|
|
140
|
-
// Abstract API
|
|
141
|
-
// ---------------------------------------------------------------------------
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* `design.query.grids.*` — structural-grid-specific reads.
|
|
145
|
-
*
|
|
146
|
-
* A **grid** (grid group) is a structural/documentation grid: one or more
|
|
147
|
-
* *wings* (families of parallel lines with a shared local frame), each holding
|
|
148
|
-
* tagged grid *lines* (straight lines, or a lone arc). Enumerate grids with
|
|
149
|
-
* `design.query.listGrids`; read an individual grid's structure here.
|
|
150
|
-
*
|
|
151
|
-
* Lines have no stable identity of their own — mutating APIs address them
|
|
152
|
-
* positionally as `{ wing, line }` index pairs into the `wings` arrays
|
|
153
|
-
* returned by {@linkcode get}. Structural edits (adding/removing lines,
|
|
154
|
-
* count changes) re-index lines; re-query after mutating.
|
|
155
|
-
*
|
|
156
|
-
* Accessed via `snaptrude.design.query.grids`.
|
|
157
|
-
*/
|
|
158
|
-
export abstract class PluginDesignQueryGridsApi {
|
|
159
|
-
constructor() {}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Get properties of a grid by its ID.
|
|
163
|
-
*
|
|
164
|
-
* Only the properties listed in `properties` are returned — unlisted
|
|
165
|
-
* properties will be `undefined` in the result. `wings` is the heavy
|
|
166
|
-
* read (it registers a world-space {@linkcode CurveHandle} per line);
|
|
167
|
-
* request it only when the geometry is needed.
|
|
168
|
-
*
|
|
169
|
-
* Units: `angle` is in **degrees** (positive = CCW about +Y); `spacing`,
|
|
170
|
-
* `span`, `bounds`, and curve coordinates are in **Snaptrude units**,
|
|
171
|
-
* world space.
|
|
172
|
-
*
|
|
173
|
-
* @param gridId - The unique grid group ID
|
|
174
|
-
* @param properties - Array of property names to retrieve. See
|
|
175
|
-
* {@linkcode PluginGridGetProperty}.
|
|
176
|
-
* @returns A partial {@linkcode PluginGridGetResult} containing only the
|
|
177
|
-
* requested properties
|
|
178
|
-
* @throws If the grid does not exist
|
|
179
|
-
*
|
|
180
|
-
* @examplePrompt What is the spacing of this grid?
|
|
181
|
-
* @examplePrompt Read the grid line tags on this structural grid
|
|
182
|
-
* @examplePrompt Get the geometry of every line in this grid
|
|
183
|
-
* @examplePrompt Which storeys is this grid hidden on?
|
|
184
|
-
*
|
|
185
|
-
* # Example
|
|
186
|
-
* ```ts
|
|
187
|
-
* const [grid] = await snaptrude.design.query.listGrids()
|
|
188
|
-
* const { wings } = await snaptrude.design.query.grids.get(grid, ["wings"])
|
|
189
|
-
* // wings[0].lines[0].curve is an opaque CurveHandle in world space;
|
|
190
|
-
* // read its coordinates via `snaptrude.core.geom.curve`.
|
|
191
|
-
* ```
|
|
192
|
-
*/
|
|
193
|
-
public abstract get(
|
|
194
|
-
gridId: string,
|
|
195
|
-
properties: z.infer<typeof PluginGridGetProperty>[],
|
|
196
|
-
): PluginApiReturn<PluginGridGetResult>
|
|
197
|
-
}
|
|
1
|
+
import * as z from "zod"
|
|
2
|
+
import { PluginApiReturn } from "../../../types"
|
|
3
|
+
import { CurveHandle, BBoxComponents } from "../../../handles"
|
|
4
|
+
import { PluginReferenceLineStyle } from "../create"
|
|
5
|
+
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Records
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Visual properties of grid lines — the group's defaults and any per-line
|
|
12
|
+
* overrides share this shape (values mirror the engine's `GridLineProps`).
|
|
13
|
+
*
|
|
14
|
+
* | Property | Type | Description |
|
|
15
|
+
* |---|---|---|
|
|
16
|
+
* | `style` | {@linkcode PluginReferenceLineStyle} | Line style (`"SOLID"` \| `"DASHED"` \| `"DOT_DASH"`) |
|
|
17
|
+
* | `weight` | `number` | Line weight |
|
|
18
|
+
* | `color` | `string` | Line color as a `#rrggbb` hex string |
|
|
19
|
+
* | `showStart` | `boolean` | Whether the start-end tag bubble is shown |
|
|
20
|
+
* | `showEnd` | `boolean` | Whether the end-end tag bubble is shown |
|
|
21
|
+
*/
|
|
22
|
+
export const PluginGridLineProps = z.object({
|
|
23
|
+
style: PluginReferenceLineStyle,
|
|
24
|
+
weight: z.number(),
|
|
25
|
+
color: z.string(),
|
|
26
|
+
showStart: z.boolean(),
|
|
27
|
+
showEnd: z.boolean(),
|
|
28
|
+
})
|
|
29
|
+
export type PluginGridLineProps = z.infer<typeof PluginGridLineProps>
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* One grid line within a wing.
|
|
33
|
+
*
|
|
34
|
+
* | Property | Type | Description |
|
|
35
|
+
* |---|---|---|
|
|
36
|
+
* | `curve` | {@linkcode CurveHandle} | The line's geometry in **world space** (a line or arc; read coordinates via `core.geom.curve`) |
|
|
37
|
+
* | `tag` | `string` | The line's grid tag (e.g. `"A"`, `"3"`) |
|
|
38
|
+
* | `visible` | `boolean` | Persisted per-line visibility |
|
|
39
|
+
* | `props` | {@linkcode PluginGridLineProps} | **Effective** visual properties (group defaults merged with this line's overrides) |
|
|
40
|
+
* | `overrides` | `Partial<`{@linkcode PluginGridLineProps}`>`? | This line's raw overrides, when any exist |
|
|
41
|
+
*/
|
|
42
|
+
export const PluginGridLineRecord = z.object({
|
|
43
|
+
curve: CurveHandle,
|
|
44
|
+
tag: z.string(),
|
|
45
|
+
visible: z.boolean(),
|
|
46
|
+
props: PluginGridLineProps,
|
|
47
|
+
overrides: PluginGridLineProps.partial().optional(),
|
|
48
|
+
})
|
|
49
|
+
export type PluginGridLineRecord = z.infer<typeof PluginGridLineRecord>
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* One wing of a grid — a family of parallel lines sharing a local frame.
|
|
53
|
+
* `spacing` and `span` are measured along the wing's local axes in
|
|
54
|
+
* Snaptrude units; line addresses used by mutating APIs are
|
|
55
|
+
* `{ wing, line }` index pairs into these arrays.
|
|
56
|
+
*
|
|
57
|
+
* | Property | Type | Description |
|
|
58
|
+
* |---|---|---|
|
|
59
|
+
* | `spacing` | `number` | Nominal spacing between adjacent lines (Snaptrude units) |
|
|
60
|
+
* | `tagStart` | `string` | First tag of the wing's deterministic tag sequence |
|
|
61
|
+
* | `span` | `{ min: number; max: number }`? | Explicit family length along the wing's line axis, when baked |
|
|
62
|
+
* | `lines` | {@linkcode PluginGridLineRecord}`[]` | The wing's lines, in wing order (index = the `line` address) |
|
|
63
|
+
*/
|
|
64
|
+
export const PluginGridWingRecord = z.object({
|
|
65
|
+
spacing: z.number(),
|
|
66
|
+
tagStart: z.string(),
|
|
67
|
+
span: z.object({ min: z.number(), max: z.number() }).optional(),
|
|
68
|
+
lines: z.array(PluginGridLineRecord),
|
|
69
|
+
})
|
|
70
|
+
export type PluginGridWingRecord = z.infer<typeof PluginGridWingRecord>
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Per-storey 2D-plan visibility of a grid.
|
|
74
|
+
*
|
|
75
|
+
* | Property | Type | Description |
|
|
76
|
+
* |---|---|---|
|
|
77
|
+
* | `activeStorey` | `number` | The storey the grid belongs to |
|
|
78
|
+
* | `disabledOnStoreys` | `number[]` | Storeys on whose 2D plan the grid is hidden |
|
|
79
|
+
*/
|
|
80
|
+
export const PluginGridStoreyVisibility = z.object({
|
|
81
|
+
activeStorey: z.number(),
|
|
82
|
+
disabledOnStoreys: z.array(z.number()),
|
|
83
|
+
})
|
|
84
|
+
export type PluginGridStoreyVisibility = z.infer<typeof PluginGridStoreyVisibility>
|
|
85
|
+
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
// get — args & result
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Property names readable via {@linkcode PluginDesignQueryGridsApi.get}.
|
|
92
|
+
*
|
|
93
|
+
* | Value | Description |
|
|
94
|
+
* |---|---|
|
|
95
|
+
* | `"angle"` | World rotation about +Y, in **degrees** |
|
|
96
|
+
* | `"props"` | Group-level default line properties |
|
|
97
|
+
* | `"storeyVisibility"` | Active storey + storeys where the grid is hidden in 2D |
|
|
98
|
+
* | `"wings"` | Full wing/line structure with world-space curve handles |
|
|
99
|
+
* | `"bounds"` | World-space axis-aligned bounding box of the grid geometry |
|
|
100
|
+
*/
|
|
101
|
+
export const PluginGridGetProperty = z.enum([
|
|
102
|
+
"angle",
|
|
103
|
+
"props",
|
|
104
|
+
"storeyVisibility",
|
|
105
|
+
"wings",
|
|
106
|
+
"bounds",
|
|
107
|
+
])
|
|
108
|
+
export type PluginGridGetProperty = z.infer<typeof PluginGridGetProperty>
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Arguments for {@linkcode PluginDesignQueryGridsApi.get}.
|
|
112
|
+
*
|
|
113
|
+
* | Property | Type | Description |
|
|
114
|
+
* |---|---|---|
|
|
115
|
+
* | `gridId` | `string` | The grid group ID to query |
|
|
116
|
+
* | `properties` | {@linkcode PluginGridGetProperty}`[]` | Properties to retrieve |
|
|
117
|
+
*/
|
|
118
|
+
export const PluginGridGetArgs = z.object({
|
|
119
|
+
gridId: z.string(),
|
|
120
|
+
properties: z.array(PluginGridGetProperty),
|
|
121
|
+
})
|
|
122
|
+
export type PluginGridGetArgs = z.infer<typeof PluginGridGetArgs>
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Result of {@linkcode PluginDesignQueryGridsApi.get} — only the requested
|
|
126
|
+
* properties are present.
|
|
127
|
+
*/
|
|
128
|
+
export const PluginGridGetResult = z
|
|
129
|
+
.object({
|
|
130
|
+
angle: z.number(),
|
|
131
|
+
props: PluginGridLineProps,
|
|
132
|
+
storeyVisibility: PluginGridStoreyVisibility,
|
|
133
|
+
wings: z.array(PluginGridWingRecord),
|
|
134
|
+
bounds: BBoxComponents,
|
|
135
|
+
})
|
|
136
|
+
.partial()
|
|
137
|
+
export type PluginGridGetResult = z.infer<typeof PluginGridGetResult>
|
|
138
|
+
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
// Abstract API
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* `design.query.grids.*` — structural-grid-specific reads.
|
|
145
|
+
*
|
|
146
|
+
* A **grid** (grid group) is a structural/documentation grid: one or more
|
|
147
|
+
* *wings* (families of parallel lines with a shared local frame), each holding
|
|
148
|
+
* tagged grid *lines* (straight lines, or a lone arc). Enumerate grids with
|
|
149
|
+
* `design.query.listGrids`; read an individual grid's structure here.
|
|
150
|
+
*
|
|
151
|
+
* Lines have no stable identity of their own — mutating APIs address them
|
|
152
|
+
* positionally as `{ wing, line }` index pairs into the `wings` arrays
|
|
153
|
+
* returned by {@linkcode get}. Structural edits (adding/removing lines,
|
|
154
|
+
* count changes) re-index lines; re-query after mutating.
|
|
155
|
+
*
|
|
156
|
+
* Accessed via `snaptrude.design.query.grids`.
|
|
157
|
+
*/
|
|
158
|
+
export abstract class PluginDesignQueryGridsApi {
|
|
159
|
+
constructor() {}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Get properties of a grid by its ID.
|
|
163
|
+
*
|
|
164
|
+
* Only the properties listed in `properties` are returned — unlisted
|
|
165
|
+
* properties will be `undefined` in the result. `wings` is the heavy
|
|
166
|
+
* read (it registers a world-space {@linkcode CurveHandle} per line);
|
|
167
|
+
* request it only when the geometry is needed.
|
|
168
|
+
*
|
|
169
|
+
* Units: `angle` is in **degrees** (positive = CCW about +Y); `spacing`,
|
|
170
|
+
* `span`, `bounds`, and curve coordinates are in **Snaptrude units**,
|
|
171
|
+
* world space.
|
|
172
|
+
*
|
|
173
|
+
* @param gridId - The unique grid group ID
|
|
174
|
+
* @param properties - Array of property names to retrieve. See
|
|
175
|
+
* {@linkcode PluginGridGetProperty}.
|
|
176
|
+
* @returns A partial {@linkcode PluginGridGetResult} containing only the
|
|
177
|
+
* requested properties
|
|
178
|
+
* @throws If the grid does not exist
|
|
179
|
+
*
|
|
180
|
+
* @examplePrompt What is the spacing of this grid?
|
|
181
|
+
* @examplePrompt Read the grid line tags on this structural grid
|
|
182
|
+
* @examplePrompt Get the geometry of every line in this grid
|
|
183
|
+
* @examplePrompt Which storeys is this grid hidden on?
|
|
184
|
+
*
|
|
185
|
+
* # Example
|
|
186
|
+
* ```ts
|
|
187
|
+
* const [grid] = await snaptrude.design.query.listGrids()
|
|
188
|
+
* const { wings } = await snaptrude.design.query.grids.get(grid, ["wings"])
|
|
189
|
+
* // wings[0].lines[0].curve is an opaque CurveHandle in world space;
|
|
190
|
+
* // read its coordinates via `snaptrude.core.geom.curve`.
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
public abstract get(
|
|
194
|
+
gridId: string,
|
|
195
|
+
properties: z.infer<typeof PluginGridGetProperty>[],
|
|
196
|
+
): PluginApiReturn<PluginGridGetResult>
|
|
197
|
+
}
|