@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,20 +1,20 @@
|
|
|
1
|
-
import { PluginVec3Api } from "./vec3"
|
|
2
|
-
import { PluginQuatApi } from "./quat"
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Math primitives for 3D vector and quaternion operations.
|
|
6
|
-
*
|
|
7
|
-
* - {@linkcode PluginMathApi.vec3} — 3D vector creation and arithmetic
|
|
8
|
-
* - {@linkcode PluginMathApi.quat} — Quaternion creation and rotation operations
|
|
9
|
-
*/
|
|
10
|
-
export abstract class PluginMathApi {
|
|
11
|
-
/** 3D vector operations. See {@linkcode PluginVec3Api}. */
|
|
12
|
-
public abstract vec3: PluginVec3Api
|
|
13
|
-
/** Quaternion operations. See {@linkcode PluginQuatApi}. */
|
|
14
|
-
public abstract quat: PluginQuatApi
|
|
15
|
-
|
|
16
|
-
constructor() {}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export * from "./vec3"
|
|
20
|
-
export * from "./quat"
|
|
1
|
+
import { PluginVec3Api } from "./vec3"
|
|
2
|
+
import { PluginQuatApi } from "./quat"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Math primitives for 3D vector and quaternion operations.
|
|
6
|
+
*
|
|
7
|
+
* - {@linkcode PluginMathApi.vec3} — 3D vector creation and arithmetic
|
|
8
|
+
* - {@linkcode PluginMathApi.quat} — Quaternion creation and rotation operations
|
|
9
|
+
*/
|
|
10
|
+
export abstract class PluginMathApi {
|
|
11
|
+
/** 3D vector operations. See {@linkcode PluginVec3Api}. */
|
|
12
|
+
public abstract vec3: PluginVec3Api
|
|
13
|
+
/** Quaternion operations. See {@linkcode PluginQuatApi}. */
|
|
14
|
+
public abstract quat: PluginQuatApi
|
|
15
|
+
|
|
16
|
+
constructor() {}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export * from "./vec3"
|
|
20
|
+
export * from "./quat"
|
|
@@ -1,172 +1,172 @@
|
|
|
1
|
-
import { PluginApiReturn } from "../../../types"
|
|
2
|
-
import { Vec3Handle, QuatHandle, QuatComponents } from "../../../handles"
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Quaternion operations (all-handle model, §11).
|
|
6
|
-
*
|
|
7
|
-
* Quaternions are opaque {@linkcode QuatHandle}s; every operation is a host call
|
|
8
|
-
* returning a new handle. Read primitive components back with
|
|
9
|
-
* {@linkcode PluginQuatApi.components}. Accessed via `snaptrude.core.math.quat`.
|
|
10
|
-
*/
|
|
11
|
-
export abstract class PluginQuatApi {
|
|
12
|
-
constructor() {}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Create a quaternion from primitive components.
|
|
16
|
-
*
|
|
17
|
-
* # Example
|
|
18
|
-
* ```ts
|
|
19
|
-
* const q = await snaptrude.core.math.quat.new(0, 0, 0, 1)
|
|
20
|
-
* const { x, y, z, w } = await snaptrude.core.math.quat.components(q)
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
abstract new(x: number, y: number, z: number, w: number): PluginApiReturn<QuatHandle>
|
|
24
|
-
/**
|
|
25
|
-
* Return the identity quaternion (no rotation).
|
|
26
|
-
*
|
|
27
|
-
* # Example
|
|
28
|
-
* ```ts
|
|
29
|
-
* const noRotation = await snaptrude.core.math.quat.identity()
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
abstract identity(): PluginApiReturn<QuatHandle>
|
|
33
|
-
/**
|
|
34
|
-
* Build a quaternion from a rotation axis and an angle in radians.
|
|
35
|
-
*
|
|
36
|
-
* # Example
|
|
37
|
-
* ```ts
|
|
38
|
-
* const axis = await snaptrude.core.math.vec3.new(0, 0, 1)
|
|
39
|
-
* const quarterTurn = await snaptrude.core.math.quat.fromAxisAngle(axis, Math.PI / 2)
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
abstract fromAxisAngle(axis: Vec3Handle, angle: number): PluginApiReturn<QuatHandle>
|
|
43
|
-
/**
|
|
44
|
-
* Build a quaternion from Euler angles in radians.
|
|
45
|
-
*
|
|
46
|
-
* # Example
|
|
47
|
-
* ```ts
|
|
48
|
-
* const q = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 2, 0)
|
|
49
|
-
* ```
|
|
50
|
-
*/
|
|
51
|
-
abstract fromEuler(x: number, y: number, z: number): PluginApiReturn<QuatHandle>
|
|
52
|
-
/**
|
|
53
|
-
* Compose two rotations with the Hamilton product `a * b` (apply `b` then `a`).
|
|
54
|
-
*
|
|
55
|
-
* # Example
|
|
56
|
-
* ```ts
|
|
57
|
-
* const a = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 2, 0)
|
|
58
|
-
* const b = await snaptrude.core.math.quat.fromEuler(Math.PI / 4, 0, 0)
|
|
59
|
-
* const combined = await snaptrude.core.math.quat.multiply(a, b) // b first, then a
|
|
60
|
-
* ```
|
|
61
|
-
*/
|
|
62
|
-
abstract multiply(a: QuatHandle, b: QuatHandle): PluginApiReturn<QuatHandle>
|
|
63
|
-
/**
|
|
64
|
-
* Compute the conjugate of a quaternion (negated vector part).
|
|
65
|
-
*
|
|
66
|
-
* # Example
|
|
67
|
-
* ```ts
|
|
68
|
-
* const q = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 4, 0)
|
|
69
|
-
* const conj = await snaptrude.core.math.quat.conjugate(q)
|
|
70
|
-
* ```
|
|
71
|
-
*/
|
|
72
|
-
abstract conjugate(q: QuatHandle): PluginApiReturn<QuatHandle>
|
|
73
|
-
/**
|
|
74
|
-
* Compute the magnitude (norm) of a quaternion.
|
|
75
|
-
*
|
|
76
|
-
* # Example
|
|
77
|
-
* ```ts
|
|
78
|
-
* const q = await snaptrude.core.math.quat.new(0, 0, 0, 1)
|
|
79
|
-
* const len = await snaptrude.core.math.quat.length(q) // 1
|
|
80
|
-
* ```
|
|
81
|
-
*/
|
|
82
|
-
abstract length(q: QuatHandle): PluginApiReturn<number>
|
|
83
|
-
/**
|
|
84
|
-
* Normalize a quaternion to unit length.
|
|
85
|
-
*
|
|
86
|
-
* # Example
|
|
87
|
-
* ```ts
|
|
88
|
-
* const q = await snaptrude.core.math.quat.new(0, 0, 1, 1)
|
|
89
|
-
* const unit = await snaptrude.core.math.quat.normalize(q)
|
|
90
|
-
* ```
|
|
91
|
-
*/
|
|
92
|
-
abstract normalize(q: QuatHandle): PluginApiReturn<QuatHandle>
|
|
93
|
-
/**
|
|
94
|
-
* Compute the inverse quaternion — the rotation that undoes `q`.
|
|
95
|
-
*
|
|
96
|
-
* # Example
|
|
97
|
-
* ```ts
|
|
98
|
-
* const q = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 2, 0)
|
|
99
|
-
* const undo = await snaptrude.core.math.quat.inverse(q)
|
|
100
|
-
* ```
|
|
101
|
-
*/
|
|
102
|
-
abstract inverse(q: QuatHandle): PluginApiReturn<QuatHandle>
|
|
103
|
-
/**
|
|
104
|
-
* Decompose a quaternion into its rotation axis and angle (radians).
|
|
105
|
-
*
|
|
106
|
-
* # Example
|
|
107
|
-
* ```ts
|
|
108
|
-
* const q = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 3, 0)
|
|
109
|
-
* const { axis, angle } = await snaptrude.core.math.quat.toAxisAngle(q)
|
|
110
|
-
* const { x, y, z } = await snaptrude.core.math.vec3.components(axis)
|
|
111
|
-
* ```
|
|
112
|
-
*/
|
|
113
|
-
abstract toAxisAngle(q: QuatHandle): PluginApiReturn<{ axis: Vec3Handle; angle: number }>
|
|
114
|
-
/**
|
|
115
|
-
* Spherically interpolate (slerp) between two rotations by factor `t`.
|
|
116
|
-
*
|
|
117
|
-
* # Example
|
|
118
|
-
* ```ts
|
|
119
|
-
* const start = await snaptrude.core.math.quat.identity()
|
|
120
|
-
* const end = await snaptrude.core.math.quat.fromEuler(0, Math.PI, 0)
|
|
121
|
-
* const halfway = await snaptrude.core.math.quat.slerp(start, end, 0.5)
|
|
122
|
-
* ```
|
|
123
|
-
*/
|
|
124
|
-
abstract slerp(a: QuatHandle, b: QuatHandle, t: number): PluginApiReturn<QuatHandle>
|
|
125
|
-
/**
|
|
126
|
-
* Compute the dot product of two quaternions.
|
|
127
|
-
*
|
|
128
|
-
* # Example
|
|
129
|
-
* ```ts
|
|
130
|
-
* const a = await snaptrude.core.math.quat.identity()
|
|
131
|
-
* const b = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 2, 0)
|
|
132
|
-
* const d = await snaptrude.core.math.quat.dot(a, b)
|
|
133
|
-
* ```
|
|
134
|
-
*/
|
|
135
|
-
abstract dot(a: QuatHandle, b: QuatHandle): PluginApiReturn<number>
|
|
136
|
-
/**
|
|
137
|
-
* Test whether two quaternions have exactly equal components.
|
|
138
|
-
*
|
|
139
|
-
* # Example
|
|
140
|
-
* ```ts
|
|
141
|
-
* const a = await snaptrude.core.math.quat.new(0, 0, 0, 1)
|
|
142
|
-
* const b = await snaptrude.core.math.quat.identity()
|
|
143
|
-
* const same = await snaptrude.core.math.quat.equals(a, b) // true
|
|
144
|
-
* ```
|
|
145
|
-
*/
|
|
146
|
-
abstract equals(a: QuatHandle, b: QuatHandle): PluginApiReturn<boolean>
|
|
147
|
-
/**
|
|
148
|
-
* Test whether two quaternions are equal within a tolerance `epsilon` (default `1e-6`).
|
|
149
|
-
*
|
|
150
|
-
* # Example
|
|
151
|
-
* ```ts
|
|
152
|
-
* const a = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 2, 0)
|
|
153
|
-
* const b = await snaptrude.core.math.quat.fromEuler(0, 1.5711, 0)
|
|
154
|
-
* const close = await snaptrude.core.math.quat.equalsApprox(a, b, 1e-3) // true
|
|
155
|
-
* ```
|
|
156
|
-
*/
|
|
157
|
-
abstract equalsApprox(
|
|
158
|
-
a: QuatHandle,
|
|
159
|
-
b: QuatHandle,
|
|
160
|
-
epsilon?: number,
|
|
161
|
-
): PluginApiReturn<boolean>
|
|
162
|
-
/**
|
|
163
|
-
* Read the primitive `{ x, y, z, w }` components of a quaternion handle.
|
|
164
|
-
*
|
|
165
|
-
* # Example
|
|
166
|
-
* ```ts
|
|
167
|
-
* const q = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 2, 0)
|
|
168
|
-
* const { x, y, z, w } = await snaptrude.core.math.quat.components(q)
|
|
169
|
-
* ```
|
|
170
|
-
*/
|
|
171
|
-
abstract components(q: QuatHandle): PluginApiReturn<QuatComponents>
|
|
172
|
-
}
|
|
1
|
+
import { PluginApiReturn } from "../../../types"
|
|
2
|
+
import { Vec3Handle, QuatHandle, QuatComponents } from "../../../handles"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Quaternion operations (all-handle model, §11).
|
|
6
|
+
*
|
|
7
|
+
* Quaternions are opaque {@linkcode QuatHandle}s; every operation is a host call
|
|
8
|
+
* returning a new handle. Read primitive components back with
|
|
9
|
+
* {@linkcode PluginQuatApi.components}. Accessed via `snaptrude.core.math.quat`.
|
|
10
|
+
*/
|
|
11
|
+
export abstract class PluginQuatApi {
|
|
12
|
+
constructor() {}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Create a quaternion from primitive components.
|
|
16
|
+
*
|
|
17
|
+
* # Example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const q = await snaptrude.core.math.quat.new(0, 0, 0, 1)
|
|
20
|
+
* const { x, y, z, w } = await snaptrude.core.math.quat.components(q)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
abstract new(x: number, y: number, z: number, w: number): PluginApiReturn<QuatHandle>
|
|
24
|
+
/**
|
|
25
|
+
* Return the identity quaternion (no rotation).
|
|
26
|
+
*
|
|
27
|
+
* # Example
|
|
28
|
+
* ```ts
|
|
29
|
+
* const noRotation = await snaptrude.core.math.quat.identity()
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
abstract identity(): PluginApiReturn<QuatHandle>
|
|
33
|
+
/**
|
|
34
|
+
* Build a quaternion from a rotation axis and an angle in radians.
|
|
35
|
+
*
|
|
36
|
+
* # Example
|
|
37
|
+
* ```ts
|
|
38
|
+
* const axis = await snaptrude.core.math.vec3.new(0, 0, 1)
|
|
39
|
+
* const quarterTurn = await snaptrude.core.math.quat.fromAxisAngle(axis, Math.PI / 2)
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
abstract fromAxisAngle(axis: Vec3Handle, angle: number): PluginApiReturn<QuatHandle>
|
|
43
|
+
/**
|
|
44
|
+
* Build a quaternion from Euler angles in radians.
|
|
45
|
+
*
|
|
46
|
+
* # Example
|
|
47
|
+
* ```ts
|
|
48
|
+
* const q = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 2, 0)
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
abstract fromEuler(x: number, y: number, z: number): PluginApiReturn<QuatHandle>
|
|
52
|
+
/**
|
|
53
|
+
* Compose two rotations with the Hamilton product `a * b` (apply `b` then `a`).
|
|
54
|
+
*
|
|
55
|
+
* # Example
|
|
56
|
+
* ```ts
|
|
57
|
+
* const a = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 2, 0)
|
|
58
|
+
* const b = await snaptrude.core.math.quat.fromEuler(Math.PI / 4, 0, 0)
|
|
59
|
+
* const combined = await snaptrude.core.math.quat.multiply(a, b) // b first, then a
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
abstract multiply(a: QuatHandle, b: QuatHandle): PluginApiReturn<QuatHandle>
|
|
63
|
+
/**
|
|
64
|
+
* Compute the conjugate of a quaternion (negated vector part).
|
|
65
|
+
*
|
|
66
|
+
* # Example
|
|
67
|
+
* ```ts
|
|
68
|
+
* const q = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 4, 0)
|
|
69
|
+
* const conj = await snaptrude.core.math.quat.conjugate(q)
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
abstract conjugate(q: QuatHandle): PluginApiReturn<QuatHandle>
|
|
73
|
+
/**
|
|
74
|
+
* Compute the magnitude (norm) of a quaternion.
|
|
75
|
+
*
|
|
76
|
+
* # Example
|
|
77
|
+
* ```ts
|
|
78
|
+
* const q = await snaptrude.core.math.quat.new(0, 0, 0, 1)
|
|
79
|
+
* const len = await snaptrude.core.math.quat.length(q) // 1
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
abstract length(q: QuatHandle): PluginApiReturn<number>
|
|
83
|
+
/**
|
|
84
|
+
* Normalize a quaternion to unit length.
|
|
85
|
+
*
|
|
86
|
+
* # Example
|
|
87
|
+
* ```ts
|
|
88
|
+
* const q = await snaptrude.core.math.quat.new(0, 0, 1, 1)
|
|
89
|
+
* const unit = await snaptrude.core.math.quat.normalize(q)
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
abstract normalize(q: QuatHandle): PluginApiReturn<QuatHandle>
|
|
93
|
+
/**
|
|
94
|
+
* Compute the inverse quaternion — the rotation that undoes `q`.
|
|
95
|
+
*
|
|
96
|
+
* # Example
|
|
97
|
+
* ```ts
|
|
98
|
+
* const q = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 2, 0)
|
|
99
|
+
* const undo = await snaptrude.core.math.quat.inverse(q)
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
abstract inverse(q: QuatHandle): PluginApiReturn<QuatHandle>
|
|
103
|
+
/**
|
|
104
|
+
* Decompose a quaternion into its rotation axis and angle (radians).
|
|
105
|
+
*
|
|
106
|
+
* # Example
|
|
107
|
+
* ```ts
|
|
108
|
+
* const q = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 3, 0)
|
|
109
|
+
* const { axis, angle } = await snaptrude.core.math.quat.toAxisAngle(q)
|
|
110
|
+
* const { x, y, z } = await snaptrude.core.math.vec3.components(axis)
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
abstract toAxisAngle(q: QuatHandle): PluginApiReturn<{ axis: Vec3Handle; angle: number }>
|
|
114
|
+
/**
|
|
115
|
+
* Spherically interpolate (slerp) between two rotations by factor `t`.
|
|
116
|
+
*
|
|
117
|
+
* # Example
|
|
118
|
+
* ```ts
|
|
119
|
+
* const start = await snaptrude.core.math.quat.identity()
|
|
120
|
+
* const end = await snaptrude.core.math.quat.fromEuler(0, Math.PI, 0)
|
|
121
|
+
* const halfway = await snaptrude.core.math.quat.slerp(start, end, 0.5)
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
abstract slerp(a: QuatHandle, b: QuatHandle, t: number): PluginApiReturn<QuatHandle>
|
|
125
|
+
/**
|
|
126
|
+
* Compute the dot product of two quaternions.
|
|
127
|
+
*
|
|
128
|
+
* # Example
|
|
129
|
+
* ```ts
|
|
130
|
+
* const a = await snaptrude.core.math.quat.identity()
|
|
131
|
+
* const b = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 2, 0)
|
|
132
|
+
* const d = await snaptrude.core.math.quat.dot(a, b)
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
abstract dot(a: QuatHandle, b: QuatHandle): PluginApiReturn<number>
|
|
136
|
+
/**
|
|
137
|
+
* Test whether two quaternions have exactly equal components.
|
|
138
|
+
*
|
|
139
|
+
* # Example
|
|
140
|
+
* ```ts
|
|
141
|
+
* const a = await snaptrude.core.math.quat.new(0, 0, 0, 1)
|
|
142
|
+
* const b = await snaptrude.core.math.quat.identity()
|
|
143
|
+
* const same = await snaptrude.core.math.quat.equals(a, b) // true
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
abstract equals(a: QuatHandle, b: QuatHandle): PluginApiReturn<boolean>
|
|
147
|
+
/**
|
|
148
|
+
* Test whether two quaternions are equal within a tolerance `epsilon` (default `1e-6`).
|
|
149
|
+
*
|
|
150
|
+
* # Example
|
|
151
|
+
* ```ts
|
|
152
|
+
* const a = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 2, 0)
|
|
153
|
+
* const b = await snaptrude.core.math.quat.fromEuler(0, 1.5711, 0)
|
|
154
|
+
* const close = await snaptrude.core.math.quat.equalsApprox(a, b, 1e-3) // true
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
abstract equalsApprox(
|
|
158
|
+
a: QuatHandle,
|
|
159
|
+
b: QuatHandle,
|
|
160
|
+
epsilon?: number,
|
|
161
|
+
): PluginApiReturn<boolean>
|
|
162
|
+
/**
|
|
163
|
+
* Read the primitive `{ x, y, z, w }` components of a quaternion handle.
|
|
164
|
+
*
|
|
165
|
+
* # Example
|
|
166
|
+
* ```ts
|
|
167
|
+
* const q = await snaptrude.core.math.quat.fromEuler(0, Math.PI / 2, 0)
|
|
168
|
+
* const { x, y, z, w } = await snaptrude.core.math.quat.components(q)
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
abstract components(q: QuatHandle): PluginApiReturn<QuatComponents>
|
|
172
|
+
}
|