@snaptrude/plugin-core 0.9.16 → 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 -402
- package/CLAUDE.md +11 -11
- package/api-manifest.json +1510 -701
- 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 +41 -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/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 -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 +3883 -2385
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3744 -2385
- 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 -126
- package/src/api/presentation/placedViews.ts +1211 -1120
- package/src/api/presentation/sections.ts +420 -0
- 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,164 +1,164 @@
|
|
|
1
|
-
import * as z from "zod"
|
|
2
|
-
import { PluginApiReturn } from "../../../types"
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Unit-type queries and conversion.
|
|
6
|
-
*
|
|
7
|
-
* Snaptrude stores all geometry in an internal `babylon` unit. These methods
|
|
8
|
-
* read the available unit types, the internal (`babylon`) type, and the current
|
|
9
|
-
* project type; set the current project type; and convert values between any two
|
|
10
|
-
* unit types.
|
|
11
|
-
*
|
|
12
|
-
* Accessed via `snaptrude.core.units`.
|
|
13
|
-
*/
|
|
14
|
-
export abstract class PluginUnitsApi {
|
|
15
|
-
constructor() {}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* List the selectable real-world unit types (excludes the internal `babylon`
|
|
19
|
-
* storage type, which is read via {@linkcode PluginUnitsApi.getBabylonType}).
|
|
20
|
-
*
|
|
21
|
-
* @examplePrompt What units can I use in this project?
|
|
22
|
-
* @examplePrompt List all the available measurement units
|
|
23
|
-
* @examplePrompt Which unit systems does Snaptrude support?
|
|
24
|
-
* @examplePrompt Show the unit options I could switch the model to
|
|
25
|
-
*
|
|
26
|
-
* # Example
|
|
27
|
-
* ```ts
|
|
28
|
-
* const types = await snaptrude.core.units.listTypes()
|
|
29
|
-
* console.log(types) // ["meters", "feet-inches", "inches", ...]
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
public abstract listTypes(): PluginApiReturn<PUnitType[]>
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Get the internal storage unit type that all geometry is kept in — always
|
|
36
|
-
* `"babylon"` — for use as one side of a {@linkcode PluginUnitsApi.convert} call.
|
|
37
|
-
*
|
|
38
|
-
* @examplePrompt What unit does Snaptrude store geometry in internally?
|
|
39
|
-
* @examplePrompt Get the internal babylon unit type
|
|
40
|
-
* @examplePrompt Which unit are raw model coordinates saved in?
|
|
41
|
-
*
|
|
42
|
-
* # Example
|
|
43
|
-
* ```ts
|
|
44
|
-
* const babylon = await snaptrude.core.units.getBabylonType() // "babylon"
|
|
45
|
-
* const meters = await snaptrude.core.units.convert(10, babylon, "meters")
|
|
46
|
-
* ```
|
|
47
|
-
*/
|
|
48
|
-
public abstract getBabylonType(): PluginApiReturn<PUnitType>
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Get the current project's unit type — the unit lengths are displayed and
|
|
52
|
-
* entered in. Paired with {@linkcode PluginUnitsApi.setType}.
|
|
53
|
-
*
|
|
54
|
-
* @examplePrompt What units is this project using?
|
|
55
|
-
* @examplePrompt Are we working in metric or imperial?
|
|
56
|
-
* @examplePrompt Check the current measurement unit of the model
|
|
57
|
-
* @examplePrompt Is the file set to millimetres or feet and inches?
|
|
58
|
-
*
|
|
59
|
-
* # Example
|
|
60
|
-
* ```ts
|
|
61
|
-
* const type = await snaptrude.core.units.getType()
|
|
62
|
-
* console.log(type) // e.g. "millimeters"
|
|
63
|
-
* ```
|
|
64
|
-
*/
|
|
65
|
-
public abstract getType(): PluginApiReturn<PUnitType>
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Set the current project's unit type. Paired with {@linkcode PluginUnitsApi.getType}.
|
|
69
|
-
*
|
|
70
|
-
* @param type - The unit type to set as the project unit.
|
|
71
|
-
* @returns `true` if applied; `false` if `type` is not a settable project unit
|
|
72
|
-
* (e.g. `kilometers`, `miles`, `babylon`).
|
|
73
|
-
*
|
|
74
|
-
* @examplePrompt Change the project units to millimeters
|
|
75
|
-
* @examplePrompt Switch this model to feet and inches
|
|
76
|
-
* @examplePrompt Set the working units to metric
|
|
77
|
-
* @examplePrompt Make the drawing use centimetres instead of meters
|
|
78
|
-
*
|
|
79
|
-
* # Example
|
|
80
|
-
* ```ts
|
|
81
|
-
* await snaptrude.core.units.setType("meters")
|
|
82
|
-
* ```
|
|
83
|
-
*/
|
|
84
|
-
public abstract setType(type: PUnitType): PluginApiReturn<boolean>
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Convert a value between two unit types.
|
|
88
|
-
*
|
|
89
|
-
* @param value - The numeric value to convert.
|
|
90
|
-
* @param from - Source unit type.
|
|
91
|
-
* @param to - Target unit type.
|
|
92
|
-
* @param degree - (Optional) 1 = length, 2 = area, 3 = volume. Defaults to 1.
|
|
93
|
-
* @returns The converted numeric value.
|
|
94
|
-
*
|
|
95
|
-
* @examplePrompt Convert 5 meters to feet and inches
|
|
96
|
-
* @examplePrompt How many millimetres is 12 feet?
|
|
97
|
-
* @examplePrompt Change this area from internal units to square metres
|
|
98
|
-
* @examplePrompt Turn 2500 mm into meters
|
|
99
|
-
* @examplePrompt Convert a volume value from babylon units to cubic feet
|
|
100
|
-
*
|
|
101
|
-
* # Example
|
|
102
|
-
* ```ts
|
|
103
|
-
* // 5 meters → internal babylon units
|
|
104
|
-
* const b = await snaptrude.core.units.convert(5, "meters", "babylon")
|
|
105
|
-
* // an internal area → square metres
|
|
106
|
-
* const m2 = await snaptrude.core.units.convert(area, "babylon", "meters", 2)
|
|
107
|
-
* ```
|
|
108
|
-
*/
|
|
109
|
-
public abstract convert(
|
|
110
|
-
value: number,
|
|
111
|
-
from: PUnitType,
|
|
112
|
-
to: PUnitType,
|
|
113
|
-
degree?: number,
|
|
114
|
-
): PluginApiReturn<number>
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Supported unit types. `babylon` is Snaptrude's internal storage unit; the rest
|
|
119
|
-
* are real-world units. Mirrors the engine `Converter.UNITS` vocabulary.
|
|
120
|
-
*/
|
|
121
|
-
export const PUnitType = z.enum([
|
|
122
|
-
"meters",
|
|
123
|
-
"feet-inches",
|
|
124
|
-
"inches",
|
|
125
|
-
"centimeters",
|
|
126
|
-
"millimeters",
|
|
127
|
-
"kilometers",
|
|
128
|
-
"miles",
|
|
129
|
-
"babylon",
|
|
130
|
-
])
|
|
131
|
-
|
|
132
|
-
export type PUnitType = z.infer<typeof PUnitType>
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Arguments for {@linkcode PluginUnitsApi.setType}.
|
|
136
|
-
*
|
|
137
|
-
* | Property | Type | Description |
|
|
138
|
-
* |---|---|---|
|
|
139
|
-
* | `type` | {@linkcode PUnitType} | The unit type to set as the project unit |
|
|
140
|
-
*/
|
|
141
|
-
export const PluginUnitsSetTypeArgs = z.object({
|
|
142
|
-
type: PUnitType,
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
export type PluginUnitsSetTypeArgs = z.infer<typeof PluginUnitsSetTypeArgs>
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Arguments for {@linkcode PluginUnitsApi.convert}.
|
|
149
|
-
*
|
|
150
|
-
* | Property | Type | Description |
|
|
151
|
-
* |---|---|---|
|
|
152
|
-
* | `value` | `number` | The numeric value to convert |
|
|
153
|
-
* | `from` | {@linkcode PUnitType} | Source unit type |
|
|
154
|
-
* | `to` | {@linkcode PUnitType} | Target unit type |
|
|
155
|
-
* | `degree` | `1 \| 2 \| 3` | (Optional) 1 = length, 2 = area, 3 = volume. Defaults to 1 |
|
|
156
|
-
*/
|
|
157
|
-
export const PluginUnitsConvertArgs = z.object({
|
|
158
|
-
value: z.number(),
|
|
159
|
-
from: PUnitType,
|
|
160
|
-
to: PUnitType,
|
|
161
|
-
degree: z.number().int().min(1).max(3).optional(),
|
|
162
|
-
})
|
|
163
|
-
|
|
164
|
-
export type PluginUnitsConvertArgs = z.infer<typeof PluginUnitsConvertArgs>
|
|
1
|
+
import * as z from "zod"
|
|
2
|
+
import { PluginApiReturn } from "../../../types"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Unit-type queries and conversion.
|
|
6
|
+
*
|
|
7
|
+
* Snaptrude stores all geometry in an internal `babylon` unit. These methods
|
|
8
|
+
* read the available unit types, the internal (`babylon`) type, and the current
|
|
9
|
+
* project type; set the current project type; and convert values between any two
|
|
10
|
+
* unit types.
|
|
11
|
+
*
|
|
12
|
+
* Accessed via `snaptrude.core.units`.
|
|
13
|
+
*/
|
|
14
|
+
export abstract class PluginUnitsApi {
|
|
15
|
+
constructor() {}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* List the selectable real-world unit types (excludes the internal `babylon`
|
|
19
|
+
* storage type, which is read via {@linkcode PluginUnitsApi.getBabylonType}).
|
|
20
|
+
*
|
|
21
|
+
* @examplePrompt What units can I use in this project?
|
|
22
|
+
* @examplePrompt List all the available measurement units
|
|
23
|
+
* @examplePrompt Which unit systems does Snaptrude support?
|
|
24
|
+
* @examplePrompt Show the unit options I could switch the model to
|
|
25
|
+
*
|
|
26
|
+
* # Example
|
|
27
|
+
* ```ts
|
|
28
|
+
* const types = await snaptrude.core.units.listTypes()
|
|
29
|
+
* console.log(types) // ["meters", "feet-inches", "inches", ...]
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
public abstract listTypes(): PluginApiReturn<PUnitType[]>
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Get the internal storage unit type that all geometry is kept in — always
|
|
36
|
+
* `"babylon"` — for use as one side of a {@linkcode PluginUnitsApi.convert} call.
|
|
37
|
+
*
|
|
38
|
+
* @examplePrompt What unit does Snaptrude store geometry in internally?
|
|
39
|
+
* @examplePrompt Get the internal babylon unit type
|
|
40
|
+
* @examplePrompt Which unit are raw model coordinates saved in?
|
|
41
|
+
*
|
|
42
|
+
* # Example
|
|
43
|
+
* ```ts
|
|
44
|
+
* const babylon = await snaptrude.core.units.getBabylonType() // "babylon"
|
|
45
|
+
* const meters = await snaptrude.core.units.convert(10, babylon, "meters")
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
public abstract getBabylonType(): PluginApiReturn<PUnitType>
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Get the current project's unit type — the unit lengths are displayed and
|
|
52
|
+
* entered in. Paired with {@linkcode PluginUnitsApi.setType}.
|
|
53
|
+
*
|
|
54
|
+
* @examplePrompt What units is this project using?
|
|
55
|
+
* @examplePrompt Are we working in metric or imperial?
|
|
56
|
+
* @examplePrompt Check the current measurement unit of the model
|
|
57
|
+
* @examplePrompt Is the file set to millimetres or feet and inches?
|
|
58
|
+
*
|
|
59
|
+
* # Example
|
|
60
|
+
* ```ts
|
|
61
|
+
* const type = await snaptrude.core.units.getType()
|
|
62
|
+
* console.log(type) // e.g. "millimeters"
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
public abstract getType(): PluginApiReturn<PUnitType>
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Set the current project's unit type. Paired with {@linkcode PluginUnitsApi.getType}.
|
|
69
|
+
*
|
|
70
|
+
* @param type - The unit type to set as the project unit.
|
|
71
|
+
* @returns `true` if applied; `false` if `type` is not a settable project unit
|
|
72
|
+
* (e.g. `kilometers`, `miles`, `babylon`).
|
|
73
|
+
*
|
|
74
|
+
* @examplePrompt Change the project units to millimeters
|
|
75
|
+
* @examplePrompt Switch this model to feet and inches
|
|
76
|
+
* @examplePrompt Set the working units to metric
|
|
77
|
+
* @examplePrompt Make the drawing use centimetres instead of meters
|
|
78
|
+
*
|
|
79
|
+
* # Example
|
|
80
|
+
* ```ts
|
|
81
|
+
* await snaptrude.core.units.setType("meters")
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
public abstract setType(type: PUnitType): PluginApiReturn<boolean>
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Convert a value between two unit types.
|
|
88
|
+
*
|
|
89
|
+
* @param value - The numeric value to convert.
|
|
90
|
+
* @param from - Source unit type.
|
|
91
|
+
* @param to - Target unit type.
|
|
92
|
+
* @param degree - (Optional) 1 = length, 2 = area, 3 = volume. Defaults to 1.
|
|
93
|
+
* @returns The converted numeric value.
|
|
94
|
+
*
|
|
95
|
+
* @examplePrompt Convert 5 meters to feet and inches
|
|
96
|
+
* @examplePrompt How many millimetres is 12 feet?
|
|
97
|
+
* @examplePrompt Change this area from internal units to square metres
|
|
98
|
+
* @examplePrompt Turn 2500 mm into meters
|
|
99
|
+
* @examplePrompt Convert a volume value from babylon units to cubic feet
|
|
100
|
+
*
|
|
101
|
+
* # Example
|
|
102
|
+
* ```ts
|
|
103
|
+
* // 5 meters → internal babylon units
|
|
104
|
+
* const b = await snaptrude.core.units.convert(5, "meters", "babylon")
|
|
105
|
+
* // an internal area → square metres
|
|
106
|
+
* const m2 = await snaptrude.core.units.convert(area, "babylon", "meters", 2)
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
public abstract convert(
|
|
110
|
+
value: number,
|
|
111
|
+
from: PUnitType,
|
|
112
|
+
to: PUnitType,
|
|
113
|
+
degree?: number,
|
|
114
|
+
): PluginApiReturn<number>
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Supported unit types. `babylon` is Snaptrude's internal storage unit; the rest
|
|
119
|
+
* are real-world units. Mirrors the engine `Converter.UNITS` vocabulary.
|
|
120
|
+
*/
|
|
121
|
+
export const PUnitType = z.enum([
|
|
122
|
+
"meters",
|
|
123
|
+
"feet-inches",
|
|
124
|
+
"inches",
|
|
125
|
+
"centimeters",
|
|
126
|
+
"millimeters",
|
|
127
|
+
"kilometers",
|
|
128
|
+
"miles",
|
|
129
|
+
"babylon",
|
|
130
|
+
])
|
|
131
|
+
|
|
132
|
+
export type PUnitType = z.infer<typeof PUnitType>
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Arguments for {@linkcode PluginUnitsApi.setType}.
|
|
136
|
+
*
|
|
137
|
+
* | Property | Type | Description |
|
|
138
|
+
* |---|---|---|
|
|
139
|
+
* | `type` | {@linkcode PUnitType} | The unit type to set as the project unit |
|
|
140
|
+
*/
|
|
141
|
+
export const PluginUnitsSetTypeArgs = z.object({
|
|
142
|
+
type: PUnitType,
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
export type PluginUnitsSetTypeArgs = z.infer<typeof PluginUnitsSetTypeArgs>
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Arguments for {@linkcode PluginUnitsApi.convert}.
|
|
149
|
+
*
|
|
150
|
+
* | Property | Type | Description |
|
|
151
|
+
* |---|---|---|
|
|
152
|
+
* | `value` | `number` | The numeric value to convert |
|
|
153
|
+
* | `from` | {@linkcode PUnitType} | Source unit type |
|
|
154
|
+
* | `to` | {@linkcode PUnitType} | Target unit type |
|
|
155
|
+
* | `degree` | `1 \| 2 \| 3` | (Optional) 1 = length, 2 = area, 3 = volume. Defaults to 1 |
|
|
156
|
+
*/
|
|
157
|
+
export const PluginUnitsConvertArgs = z.object({
|
|
158
|
+
value: z.number(),
|
|
159
|
+
from: PUnitType,
|
|
160
|
+
to: PUnitType,
|
|
161
|
+
degree: z.number().int().min(1).max(3).optional(),
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
export type PluginUnitsConvertArgs = z.infer<typeof PluginUnitsConvertArgs>
|
package/src/api/core/user.ts
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
import * as z from "zod"
|
|
2
|
-
import { PluginApiReturn } from "../../types"
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* User locale.
|
|
6
|
-
*
|
|
7
|
-
* Read the viewer's timezone and language — for date/number formatting and
|
|
8
|
-
* localized labels. This is locale only: NO precise geolocation, no IP, no
|
|
9
|
-
* account identity. Accessed via `snaptrude.core.user`.
|
|
10
|
-
*/
|
|
11
|
-
export abstract class PluginUserApi {
|
|
12
|
-
constructor() {}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Get the viewer's locale: IANA timezone and BCP-47 language tag, resolved
|
|
16
|
-
* from the browser (`Intl.DateTimeFormat().resolvedOptions().timeZone` and
|
|
17
|
-
* `navigator.language`). Locale only — no precise location.
|
|
18
|
-
*
|
|
19
|
-
* @returns `{ timezone, language }` — e.g. `{ timezone: "Asia/Kolkata", language: "en-US" }`.
|
|
20
|
-
*
|
|
21
|
-
* @examplePrompt What timezone is the user in?
|
|
22
|
-
* @examplePrompt Get the viewer's language for localized labels
|
|
23
|
-
* @examplePrompt Format the report date in the user's local timezone
|
|
24
|
-
* @examplePrompt Which locale should I use for this plugin's UI?
|
|
25
|
-
*
|
|
26
|
-
* # Example
|
|
27
|
-
* ```ts
|
|
28
|
-
* const { timezone, language } = await snaptrude.core.user.getLocale()
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
public abstract getLocale(): PluginApiReturn<PluginUserLocale>
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* The viewer's locale.
|
|
36
|
-
*
|
|
37
|
-
* | Property | Type | Description |
|
|
38
|
-
* |---|---|---|
|
|
39
|
-
* | `timezone` | `string` | IANA timezone id (e.g. `"Asia/Kolkata"`) |
|
|
40
|
-
* | `language` | `string` | BCP-47 language tag (e.g. `"en-US"`) |
|
|
41
|
-
*/
|
|
42
|
-
export const PluginUserLocale = z.object({
|
|
43
|
-
timezone: z.string(),
|
|
44
|
-
language: z.string(),
|
|
45
|
-
})
|
|
46
|
-
export type PluginUserLocale = z.infer<typeof PluginUserLocale>
|
|
1
|
+
import * as z from "zod"
|
|
2
|
+
import { PluginApiReturn } from "../../types"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* User locale.
|
|
6
|
+
*
|
|
7
|
+
* Read the viewer's timezone and language — for date/number formatting and
|
|
8
|
+
* localized labels. This is locale only: NO precise geolocation, no IP, no
|
|
9
|
+
* account identity. Accessed via `snaptrude.core.user`.
|
|
10
|
+
*/
|
|
11
|
+
export abstract class PluginUserApi {
|
|
12
|
+
constructor() {}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Get the viewer's locale: IANA timezone and BCP-47 language tag, resolved
|
|
16
|
+
* from the browser (`Intl.DateTimeFormat().resolvedOptions().timeZone` and
|
|
17
|
+
* `navigator.language`). Locale only — no precise location.
|
|
18
|
+
*
|
|
19
|
+
* @returns `{ timezone, language }` — e.g. `{ timezone: "Asia/Kolkata", language: "en-US" }`.
|
|
20
|
+
*
|
|
21
|
+
* @examplePrompt What timezone is the user in?
|
|
22
|
+
* @examplePrompt Get the viewer's language for localized labels
|
|
23
|
+
* @examplePrompt Format the report date in the user's local timezone
|
|
24
|
+
* @examplePrompt Which locale should I use for this plugin's UI?
|
|
25
|
+
*
|
|
26
|
+
* # Example
|
|
27
|
+
* ```ts
|
|
28
|
+
* const { timezone, language } = await snaptrude.core.user.getLocale()
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
public abstract getLocale(): PluginApiReturn<PluginUserLocale>
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The viewer's locale.
|
|
36
|
+
*
|
|
37
|
+
* | Property | Type | Description |
|
|
38
|
+
* |---|---|---|
|
|
39
|
+
* | `timezone` | `string` | IANA timezone id (e.g. `"Asia/Kolkata"`) |
|
|
40
|
+
* | `language` | `string` | BCP-47 language tag (e.g. `"en-US"`) |
|
|
41
|
+
*/
|
|
42
|
+
export const PluginUserLocale = z.object({
|
|
43
|
+
timezone: z.string(),
|
|
44
|
+
language: z.string(),
|
|
45
|
+
})
|
|
46
|
+
export type PluginUserLocale = z.infer<typeof PluginUserLocale>
|
|
@@ -1,51 +1,64 @@
|
|
|
1
|
-
import { PluginApiReturn } from "../../../types"
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Camera zoom controls.
|
|
5
|
-
*
|
|
6
|
-
* Frame the viewport camera onto scene geometry — mirrors the canvas zoom menu
|
|
7
|
-
* ("Zoom extents" / "Zoom to selection"). Accessed via `snaptrude.core.zoom`.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* @
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* @
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
1
|
+
import { PluginApiReturn } from "../../../types"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Camera zoom controls.
|
|
5
|
+
*
|
|
6
|
+
* Frame the viewport camera onto scene geometry — mirrors the canvas zoom menu
|
|
7
|
+
* ("Zoom extents" / "Zoom to selection"). Accessed via `snaptrude.core.zoom`.
|
|
8
|
+
*
|
|
9
|
+
* While Present mode is open these calls set the Design frame a view saved in
|
|
10
|
+
* Present (`presentation.views.create`) is taken from; they never move the
|
|
11
|
+
* Present sheet canvas. To pan, zoom or screenshot the Present canvas, use
|
|
12
|
+
* {@linkcode PluginPresentationCameraApi} (`presentation.camera`).
|
|
13
|
+
*/
|
|
14
|
+
export abstract class PluginZoomApi {
|
|
15
|
+
constructor() {}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Zoom (fit) the camera to all geometry in the scene — the "zoom extents" action.
|
|
19
|
+
*
|
|
20
|
+
* While Present is open this sets the Design frame a view saved in Present
|
|
21
|
+
* is taken from; it never moves the Present sheet canvas; use
|
|
22
|
+
* `presentation.camera` for that.
|
|
23
|
+
*
|
|
24
|
+
* @returns `true` once the camera has been framed to the scene.
|
|
25
|
+
*
|
|
26
|
+
* @examplePrompt Zoom out so I can see the whole model
|
|
27
|
+
* @examplePrompt Fit everything in the view
|
|
28
|
+
* @examplePrompt Frame the entire building in the viewport
|
|
29
|
+
* @examplePrompt Do a zoom extents on the canvas
|
|
30
|
+
* @examplePrompt Show me the full scene
|
|
31
|
+
*
|
|
32
|
+
* # Example
|
|
33
|
+
* ```ts
|
|
34
|
+
* await snaptrude.core.zoom.extents()
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @deprecated Use `core.camera.zoomExtents`
|
|
38
|
+
*/
|
|
39
|
+
public abstract extents(): PluginApiReturn<boolean>
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Zoom (fit) the camera to the current selection.
|
|
43
|
+
*
|
|
44
|
+
* While Present is open this sets the Design frame a view saved in Present
|
|
45
|
+
* is taken from; it never moves the Present sheet canvas; use
|
|
46
|
+
* `presentation.camera` for that.
|
|
47
|
+
*
|
|
48
|
+
* @returns `true` if there was a selection to frame; `false` if nothing is
|
|
49
|
+
* selected (no-op).
|
|
50
|
+
*
|
|
51
|
+
* @examplePrompt Zoom in on what I have selected
|
|
52
|
+
* @examplePrompt Frame the selected walls in the view
|
|
53
|
+
* @examplePrompt Focus the camera on my current selection
|
|
54
|
+
* @examplePrompt Fit the view to the selected room
|
|
55
|
+
*
|
|
56
|
+
* # Example
|
|
57
|
+
* ```ts
|
|
58
|
+
* await snaptrude.core.zoom.selection()
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* @deprecated Use `core.camera.zoomSelection`
|
|
62
|
+
*/
|
|
63
|
+
public abstract selection(): PluginApiReturn<boolean>
|
|
64
|
+
}
|