@snaptrude/plugin-core 0.2.9 → 0.5.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.
Files changed (269) hide show
  1. package/AGENTS.md +128 -50
  2. package/CHANGELOG.md +52 -6
  3. package/api-manifest.full.json +3999 -0
  4. package/api-manifest.json +3845 -0
  5. package/dist/api/core/buildings.d.ts +427 -0
  6. package/dist/api/core/buildings.d.ts.map +1 -0
  7. package/dist/api/core/comment/index.d.ts +230 -0
  8. package/dist/api/core/comment/index.d.ts.map +1 -0
  9. package/dist/api/core/geom/create/index.d.ts +247 -0
  10. package/dist/api/core/geom/create/index.d.ts.map +1 -0
  11. package/dist/api/core/geom/delete/index.d.ts +72 -0
  12. package/dist/api/core/geom/delete/index.d.ts.map +1 -0
  13. package/dist/api/core/geom/index.d.ts +24 -23
  14. package/dist/api/core/geom/index.d.ts.map +1 -1
  15. package/dist/api/core/geom/query/arc.d.ts +169 -0
  16. package/dist/api/core/geom/query/arc.d.ts.map +1 -0
  17. package/dist/api/core/geom/query/brep.d.ts +402 -0
  18. package/dist/api/core/geom/query/brep.d.ts.map +1 -0
  19. package/dist/api/core/geom/query/circle.d.ts +378 -0
  20. package/dist/api/core/geom/query/circle.d.ts.map +1 -0
  21. package/dist/api/core/geom/query/contour.d.ts +450 -0
  22. package/dist/api/core/geom/query/contour.d.ts.map +1 -0
  23. package/dist/api/core/geom/query/curve.d.ts +918 -0
  24. package/dist/api/core/geom/query/curve.d.ts.map +1 -0
  25. package/dist/api/core/geom/query/edge.d.ts +128 -0
  26. package/dist/api/core/geom/query/edge.d.ts.map +1 -0
  27. package/dist/api/core/geom/query/face.d.ts +363 -0
  28. package/dist/api/core/geom/query/face.d.ts.map +1 -0
  29. package/dist/api/core/geom/query/halfedge.d.ts +206 -0
  30. package/dist/api/core/geom/query/halfedge.d.ts.map +1 -0
  31. package/dist/api/core/geom/query/index.d.ts +61 -0
  32. package/dist/api/core/geom/query/index.d.ts.map +1 -0
  33. package/dist/api/core/geom/query/profile.d.ts +410 -0
  34. package/dist/api/core/geom/query/profile.d.ts.map +1 -0
  35. package/dist/api/core/geom/query/vertex.d.ts +187 -0
  36. package/dist/api/core/geom/query/vertex.d.ts.map +1 -0
  37. package/dist/api/core/geom/update/contour.d.ts +272 -0
  38. package/dist/api/core/geom/update/contour.d.ts.map +1 -0
  39. package/dist/api/core/geom/update/curve.d.ts +180 -0
  40. package/dist/api/core/geom/update/curve.d.ts.map +1 -0
  41. package/dist/api/core/geom/update/index.d.ts +27 -0
  42. package/dist/api/core/geom/update/index.d.ts.map +1 -0
  43. package/dist/api/core/geom/update/profile.d.ts +329 -0
  44. package/dist/api/core/geom/update/profile.d.ts.map +1 -0
  45. package/dist/api/core/groups.d.ts +485 -0
  46. package/dist/api/core/groups.d.ts.map +1 -0
  47. package/dist/api/core/history/index.d.ts +78 -0
  48. package/dist/api/core/history/index.d.ts.map +1 -0
  49. package/dist/api/core/index.d.ts +46 -1
  50. package/dist/api/core/index.d.ts.map +1 -1
  51. package/dist/api/core/layers.d.ts +402 -0
  52. package/dist/api/core/layers.d.ts.map +1 -0
  53. package/dist/api/core/math/quat.d.ts +111 -128
  54. package/dist/api/core/math/quat.d.ts.map +1 -1
  55. package/dist/api/core/math/vec3.d.ts +120 -102
  56. package/dist/api/core/math/vec3.d.ts.map +1 -1
  57. package/dist/api/core/project/index.d.ts +399 -0
  58. package/dist/api/core/project/index.d.ts.map +1 -0
  59. package/dist/api/core/tags.d.ts +755 -0
  60. package/dist/api/core/tags.d.ts.map +1 -0
  61. package/dist/api/core/units/index.d.ts +175 -0
  62. package/dist/api/core/units/index.d.ts.map +1 -0
  63. package/dist/api/core/zoom/index.d.ts +45 -0
  64. package/dist/api/core/zoom/index.d.ts.map +1 -0
  65. package/dist/api/design/boolean/index.d.ts +168 -0
  66. package/dist/api/design/boolean/index.d.ts.map +1 -0
  67. package/dist/api/design/create/index.d.ts +828 -0
  68. package/dist/api/design/create/index.d.ts.map +1 -0
  69. package/dist/api/design/delete/index.d.ts +63 -0
  70. package/dist/api/design/delete/index.d.ts.map +1 -0
  71. package/dist/api/design/doors/index.d.ts +268 -0
  72. package/dist/api/design/doors/index.d.ts.map +1 -0
  73. package/dist/api/design/edit/index.d.ts +49 -0
  74. package/dist/api/design/edit/index.d.ts.map +1 -0
  75. package/dist/api/design/erase/index.d.ts +160 -0
  76. package/dist/api/design/erase/index.d.ts.map +1 -0
  77. package/dist/api/design/furniture/index.d.ts +123 -0
  78. package/dist/api/design/furniture/index.d.ts.map +1 -0
  79. package/dist/api/design/index.d.ts +153 -0
  80. package/dist/api/design/index.d.ts.map +1 -0
  81. package/dist/api/design/lock.d.ts +41 -0
  82. package/dist/api/design/lock.d.ts.map +1 -0
  83. package/dist/api/design/materials/index.d.ts +297 -0
  84. package/dist/api/design/materials/index.d.ts.map +1 -0
  85. package/dist/api/design/query/geometry/index.d.ts +140 -0
  86. package/dist/api/design/query/geometry/index.d.ts.map +1 -0
  87. package/dist/api/design/query/index.d.ts +1011 -0
  88. package/dist/api/design/query/index.d.ts.map +1 -0
  89. package/dist/api/design/query/spaces.d.ts +221 -0
  90. package/dist/api/design/query/spaces.d.ts.map +1 -0
  91. package/dist/api/design/selection/index.d.ts +138 -0
  92. package/dist/api/design/selection/index.d.ts.map +1 -0
  93. package/dist/api/design/shared.d.ts +38 -0
  94. package/dist/api/design/shared.d.ts.map +1 -0
  95. package/dist/api/design/transform/index.d.ts +87 -0
  96. package/dist/api/design/transform/index.d.ts.map +1 -0
  97. package/dist/api/design/update/index.d.ts +178 -0
  98. package/dist/api/design/update/index.d.ts.map +1 -0
  99. package/dist/api/design/windows/index.d.ts +189 -0
  100. package/dist/api/design/windows/index.d.ts.map +1 -0
  101. package/dist/api/entity/buildableEnvelope.d.ts +51 -23
  102. package/dist/api/entity/buildableEnvelope.d.ts.map +1 -1
  103. package/dist/api/entity/department.d.ts +0 -98
  104. package/dist/api/entity/department.d.ts.map +1 -1
  105. package/dist/api/entity/index.d.ts +4 -9
  106. package/dist/api/entity/index.d.ts.map +1 -1
  107. package/dist/api/entity/referenceLine.d.ts +49 -106
  108. package/dist/api/entity/referenceLine.d.ts.map +1 -1
  109. package/dist/api/entity/space.d.ts +76 -828
  110. package/dist/api/entity/space.d.ts.map +1 -1
  111. package/dist/api/entity/story.d.ts +47 -37
  112. package/dist/api/entity/story.d.ts.map +1 -1
  113. package/dist/api/index.d.ts +17 -17
  114. package/dist/api/index.d.ts.map +1 -1
  115. package/dist/api/presentation/aiInspiration.d.ts +440 -0
  116. package/dist/api/presentation/aiInspiration.d.ts.map +1 -0
  117. package/dist/api/presentation/diagrams.d.ts +81 -0
  118. package/dist/api/presentation/diagrams.d.ts.map +1 -0
  119. package/dist/api/presentation/import.d.ts +113 -0
  120. package/dist/api/presentation/import.d.ts.map +1 -0
  121. package/dist/api/presentation/index.d.ts +46 -0
  122. package/dist/api/presentation/index.d.ts.map +1 -0
  123. package/dist/api/presentation/sheets.d.ts +176 -0
  124. package/dist/api/presentation/sheets.d.ts.map +1 -0
  125. package/dist/api/presentation/views.d.ts +296 -0
  126. package/dist/api/presentation/views.d.ts.map +1 -0
  127. package/dist/api/program/adjacency.d.ts +155 -0
  128. package/dist/api/program/adjacency.d.ts.map +1 -0
  129. package/dist/api/program/areas.d.ts +360 -0
  130. package/dist/api/program/areas.d.ts.map +1 -0
  131. package/dist/api/program/classification.d.ts +135 -0
  132. package/dist/api/program/classification.d.ts.map +1 -0
  133. package/dist/api/program/cores.d.ts +174 -0
  134. package/dist/api/program/cores.d.ts.map +1 -0
  135. package/dist/api/program/departments.d.ts +431 -0
  136. package/dist/api/program/departments.d.ts.map +1 -0
  137. package/dist/api/program/index.d.ts +69 -0
  138. package/dist/api/program/index.d.ts.map +1 -0
  139. package/dist/api/program/layout.d.ts +63 -0
  140. package/dist/api/program/layout.d.ts.map +1 -0
  141. package/dist/api/program/metrics.d.ts +108 -0
  142. package/dist/api/program/metrics.d.ts.map +1 -0
  143. package/dist/api/program/site.d.ts +367 -0
  144. package/dist/api/program/site.d.ts.map +1 -0
  145. package/dist/api/program/spreadsheet.d.ts +2041 -0
  146. package/dist/api/program/spreadsheet.d.ts.map +1 -0
  147. package/dist/handles.d.ts +138 -0
  148. package/dist/handles.d.ts.map +1 -0
  149. package/dist/host-utils.d.ts +7 -5
  150. package/dist/host-utils.d.ts.map +1 -1
  151. package/dist/index.cjs +3897 -1542
  152. package/dist/index.cjs.map +1 -1
  153. package/dist/index.d.ts +1 -0
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +3326 -1462
  156. package/dist/index.js.map +1 -1
  157. package/package.json +6 -2
  158. package/scripts/generate-manifest.mjs +193 -0
  159. package/scripts/generate-manifest.test.mjs +193 -0
  160. package/src/api/core/buildings.ts +485 -0
  161. package/src/api/core/comment/index.ts +258 -0
  162. package/src/api/core/geom/create/index.ts +293 -0
  163. package/src/api/core/geom/delete/index.ts +78 -0
  164. package/src/api/core/geom/index.ts +24 -23
  165. package/src/api/core/geom/query/arc.ts +169 -0
  166. package/src/api/core/geom/query/brep.ts +444 -0
  167. package/src/api/core/geom/query/circle.ts +404 -0
  168. package/src/api/core/geom/query/contour.ts +540 -0
  169. package/src/api/core/geom/query/curve.ts +1078 -0
  170. package/src/api/core/geom/query/edge.ts +130 -0
  171. package/src/api/core/geom/query/face.ts +403 -0
  172. package/src/api/core/geom/query/halfedge.ts +210 -0
  173. package/src/api/core/geom/query/index.ts +63 -0
  174. package/src/api/core/geom/query/profile.ts +473 -0
  175. package/src/api/core/geom/query/vertex.ts +205 -0
  176. package/src/api/core/geom/update/contour.ts +315 -0
  177. package/src/api/core/geom/update/curve.ts +209 -0
  178. package/src/api/core/geom/update/index.ts +29 -0
  179. package/src/api/core/geom/update/profile.ts +377 -0
  180. package/src/api/core/groups.ts +521 -0
  181. package/src/api/core/history/index.ts +84 -0
  182. package/src/api/core/index.ts +46 -1
  183. package/src/api/core/layers.ts +333 -0
  184. package/src/api/core/math/quat.ts +112 -235
  185. package/src/api/core/math/vec3.ts +124 -159
  186. package/src/api/core/project/index.ts +418 -0
  187. package/src/api/core/tags.ts +808 -0
  188. package/src/api/core/units/index.ts +164 -0
  189. package/src/api/core/zoom/index.ts +47 -0
  190. package/src/api/design/boolean/index.ts +179 -0
  191. package/src/api/design/create/index.ts +886 -0
  192. package/src/api/design/delete/index.ts +67 -0
  193. package/src/api/design/doors/index.ts +285 -0
  194. package/src/api/design/edit/index.ts +54 -0
  195. package/src/api/design/erase/index.ts +151 -0
  196. package/src/api/design/furniture/index.ts +130 -0
  197. package/src/api/design/index.ts +162 -0
  198. package/src/api/design/lock.ts +42 -0
  199. package/src/api/design/materials/index.ts +301 -0
  200. package/src/api/design/query/geometry/index.ts +166 -0
  201. package/src/api/design/query/index.ts +937 -0
  202. package/src/api/design/query/spaces.ts +132 -0
  203. package/src/api/design/selection/index.ts +144 -0
  204. package/src/api/design/shared.ts +40 -0
  205. package/src/api/design/transform/index.ts +93 -0
  206. package/src/api/design/update/index.ts +117 -0
  207. package/src/api/design/windows/index.ts +207 -0
  208. package/src/api/entity/buildableEnvelope.ts +64 -23
  209. package/src/api/entity/department.ts +0 -113
  210. package/src/api/entity/index.ts +4 -9
  211. package/src/api/entity/referenceLine.ts +50 -38
  212. package/src/api/entity/space.ts +84 -440
  213. package/src/api/entity/story.ts +53 -42
  214. package/src/api/index.ts +17 -17
  215. package/src/api/presentation/aiInspiration.ts +362 -0
  216. package/src/api/presentation/diagrams.ts +84 -0
  217. package/src/api/presentation/import.ts +112 -0
  218. package/src/api/presentation/index.ts +48 -0
  219. package/src/api/presentation/sheets.ts +198 -0
  220. package/src/api/presentation/views.ts +303 -0
  221. package/src/api/program/adjacency.ts +164 -0
  222. package/src/api/program/areas.ts +335 -0
  223. package/src/api/program/classification.ts +138 -0
  224. package/src/api/program/cores.ts +171 -0
  225. package/src/api/program/departments.ts +465 -0
  226. package/src/api/program/index.ts +71 -0
  227. package/src/api/program/layout.ts +68 -0
  228. package/src/api/program/metrics.ts +120 -0
  229. package/src/api/program/site.ts +326 -0
  230. package/src/api/program/spreadsheet.ts +2075 -0
  231. package/src/handles.ts +148 -0
  232. package/src/host-utils.ts +10 -6
  233. package/src/index.ts +1 -0
  234. package/dist/api/core/geom/arc.d.ts +0 -81
  235. package/dist/api/core/geom/arc.d.ts.map +0 -1
  236. package/dist/api/core/geom/curve.d.ts +0 -70
  237. package/dist/api/core/geom/curve.d.ts.map +0 -1
  238. package/dist/api/core/geom/line.d.ts +0 -56
  239. package/dist/api/core/geom/line.d.ts.map +0 -1
  240. package/dist/api/core/geom/profile.d.ts +0 -121
  241. package/dist/api/core/geom/profile.d.ts.map +0 -1
  242. package/dist/api/documentation/aiInspiration.d.ts +0 -2155
  243. package/dist/api/documentation/aiInspiration.d.ts.map +0 -1
  244. package/dist/api/documentation/index.d.ts +0 -13
  245. package/dist/api/documentation/index.d.ts.map +0 -1
  246. package/dist/api/tools/copy.d.ts +0 -59
  247. package/dist/api/tools/copy.d.ts.map +0 -1
  248. package/dist/api/tools/index.d.ts +0 -29
  249. package/dist/api/tools/index.d.ts.map +0 -1
  250. package/dist/api/tools/offset.d.ts +0 -43
  251. package/dist/api/tools/offset.d.ts.map +0 -1
  252. package/dist/api/tools/selection.d.ts +0 -48
  253. package/dist/api/tools/selection.d.ts.map +0 -1
  254. package/dist/api/tools/transform.d.ts +0 -114
  255. package/dist/api/tools/transform.d.ts.map +0 -1
  256. package/dist/api/units/index.d.ts +0 -163
  257. package/dist/api/units/index.d.ts.map +0 -1
  258. package/src/api/core/geom/arc.ts +0 -70
  259. package/src/api/core/geom/curve.ts +0 -41
  260. package/src/api/core/geom/line.ts +0 -53
  261. package/src/api/core/geom/profile.ts +0 -94
  262. package/src/api/documentation/aiInspiration.ts +0 -871
  263. package/src/api/documentation/index.ts +0 -15
  264. package/src/api/tools/copy.ts +0 -55
  265. package/src/api/tools/index.ts +0 -35
  266. package/src/api/tools/offset.ts +0 -43
  267. package/src/api/tools/selection.ts +0 -51
  268. package/src/api/tools/transform.ts +0 -117
  269. package/src/api/units/index.ts +0 -163
@@ -0,0 +1,169 @@
1
+ import * as z from "zod"
2
+ import { PluginApiReturn } from "../../../../types"
3
+ import { ArcHandle, Vec3Components } from "../../../../handles"
4
+
5
+ /**
6
+ * Arc-specific geometry queries — read circular-arc properties as plain values.
7
+ *
8
+ * Every method takes an opaque {@linkcode ArcHandle} and returns plain values
9
+ * (numbers or {@linkcode Vec3Components}), never a handle. Use these to inspect
10
+ * the radius, centre, axis, sweep angle, and validity of an arc handle obtained
11
+ * from {@linkcode PluginGeomCreateApi.arc} or another query.
12
+ *
13
+ * Accessed via `snaptrude.core.geom.query.arc`.
14
+ */
15
+ export abstract class PluginGeomQueryArcApi {
16
+ constructor() {}
17
+
18
+ /**
19
+ * Read the radius of an arc.
20
+ *
21
+ * @param arc The arc to query
22
+ * @returns The arc radius as a `number`
23
+ *
24
+ * @examplePrompt What is the radius of this curved wall segment?
25
+ * @examplePrompt Measure the radius of the selected arc
26
+ *
27
+ * # Example
28
+ * ```ts
29
+ * const start = await snaptrude.core.math.vec3.new(5, 0, 0)
30
+ * const end = await snaptrude.core.math.vec3.new(0, 0, 5)
31
+ * const origin = await snaptrude.core.math.vec3.new(0, 0, 0)
32
+ * const up = await snaptrude.core.math.vec3.new(0, 1, 0)
33
+ * const arc = await snaptrude.core.geom.create.arc(start, end, origin, up)
34
+ * const radius = await snaptrude.core.geom.query.arc.getRadius(arc)
35
+ * ```
36
+ */
37
+ public abstract getRadius(arc: ArcHandle): PluginApiReturn<number>
38
+
39
+ /**
40
+ * Read the centre point of an arc.
41
+ *
42
+ * @param arc The arc to query
43
+ * @returns The arc centre as {@linkcode Vec3Components}
44
+ *
45
+ * @examplePrompt Where is the centre of this arc?
46
+ * @examplePrompt Find the center point of the curved wall
47
+ *
48
+ * # Example
49
+ * ```ts
50
+ * const start = await snaptrude.core.math.vec3.new(5, 0, 0)
51
+ * const end = await snaptrude.core.math.vec3.new(0, 0, 5)
52
+ * const origin = await snaptrude.core.math.vec3.new(0, 0, 0)
53
+ * const up = await snaptrude.core.math.vec3.new(0, 1, 0)
54
+ * const arc = await snaptrude.core.geom.create.arc(start, end, origin, up)
55
+ * const centre = await snaptrude.core.geom.query.arc.getCentre(arc)
56
+ * console.log(centre.x, centre.y, centre.z)
57
+ * ```
58
+ */
59
+ public abstract getCentre(arc: ArcHandle): PluginApiReturn<Vec3Components>
60
+
61
+ /**
62
+ * Read the rotation axis of an arc.
63
+ *
64
+ * @param arc The arc to query
65
+ * @returns The arc axis as {@linkcode Vec3Components}
66
+ *
67
+ * # Example
68
+ * ```ts
69
+ * const start = await snaptrude.core.math.vec3.new(5, 0, 0)
70
+ * const end = await snaptrude.core.math.vec3.new(0, 0, 5)
71
+ * const origin = await snaptrude.core.math.vec3.new(0, 0, 0)
72
+ * const up = await snaptrude.core.math.vec3.new(0, 1, 0)
73
+ * const arc = await snaptrude.core.geom.create.arc(start, end, origin, up)
74
+ * const axis = await snaptrude.core.geom.query.arc.getAxis(arc)
75
+ * console.log(axis.x, axis.y, axis.z)
76
+ * ```
77
+ */
78
+ public abstract getAxis(arc: ArcHandle): PluginApiReturn<Vec3Components>
79
+
80
+ /**
81
+ * Read the sweep angle of an arc (the angle subtended at its centre).
82
+ *
83
+ * @param arc The arc to query
84
+ * @returns The sweep angle in radians as a `number`
85
+ *
86
+ * @examplePrompt What angle does this arc sweep through?
87
+ * @examplePrompt How many degrees does this curved wall turn?
88
+ *
89
+ * # Example
90
+ * ```ts
91
+ * const start = await snaptrude.core.math.vec3.new(5, 0, 0)
92
+ * const end = await snaptrude.core.math.vec3.new(0, 0, 5)
93
+ * const origin = await snaptrude.core.math.vec3.new(0, 0, 0)
94
+ * const up = await snaptrude.core.math.vec3.new(0, 1, 0)
95
+ * const arc = await snaptrude.core.geom.create.arc(start, end, origin, up)
96
+ * const sweep = await snaptrude.core.geom.query.arc.getSweepAngle(arc)
97
+ * console.log("degrees:", (sweep * 180) / Math.PI)
98
+ * ```
99
+ */
100
+ public abstract getSweepAngle(arc: ArcHandle): PluginApiReturn<number>
101
+
102
+ /**
103
+ * Check whether an arc is geometrically valid.
104
+ *
105
+ * @param arc The arc to query
106
+ * @returns `true` if the arc is valid as a `boolean`
107
+ *
108
+ * # Example
109
+ * ```ts
110
+ * const start = await snaptrude.core.math.vec3.new(5, 0, 0)
111
+ * const end = await snaptrude.core.math.vec3.new(0, 0, 5)
112
+ * const origin = await snaptrude.core.math.vec3.new(0, 0, 0)
113
+ * const up = await snaptrude.core.math.vec3.new(0, 1, 0)
114
+ * const arc = await snaptrude.core.geom.create.arc(start, end, origin, up)
115
+ * const ok = await snaptrude.core.geom.query.arc.isValid(arc)
116
+ * ```
117
+ */
118
+ public abstract isValid(arc: ArcHandle): PluginApiReturn<boolean>
119
+ }
120
+
121
+ /**
122
+ * Arguments for {@linkcode PluginGeomQueryArcApi.getRadius}.
123
+ *
124
+ * | Property | Type | Description |
125
+ * |---|---|---|
126
+ * | `arc` | {@linkcode ArcHandle} | The arc to query |
127
+ */
128
+ export const PluginGeomQueryArcGetRadiusArgs = z.object({ arc: ArcHandle })
129
+ export type PluginGeomQueryArcGetRadiusArgs = z.infer<typeof PluginGeomQueryArcGetRadiusArgs>
130
+
131
+ /**
132
+ * Arguments for {@linkcode PluginGeomQueryArcApi.getCentre}.
133
+ *
134
+ * | Property | Type | Description |
135
+ * |---|---|---|
136
+ * | `arc` | {@linkcode ArcHandle} | The arc to query |
137
+ */
138
+ export const PluginGeomQueryArcGetCentreArgs = z.object({ arc: ArcHandle })
139
+ export type PluginGeomQueryArcGetCentreArgs = z.infer<typeof PluginGeomQueryArcGetCentreArgs>
140
+
141
+ /**
142
+ * Arguments for {@linkcode PluginGeomQueryArcApi.getAxis}.
143
+ *
144
+ * | Property | Type | Description |
145
+ * |---|---|---|
146
+ * | `arc` | {@linkcode ArcHandle} | The arc to query |
147
+ */
148
+ export const PluginGeomQueryArcGetAxisArgs = z.object({ arc: ArcHandle })
149
+ export type PluginGeomQueryArcGetAxisArgs = z.infer<typeof PluginGeomQueryArcGetAxisArgs>
150
+
151
+ /**
152
+ * Arguments for {@linkcode PluginGeomQueryArcApi.getSweepAngle}.
153
+ *
154
+ * | Property | Type | Description |
155
+ * |---|---|---|
156
+ * | `arc` | {@linkcode ArcHandle} | The arc to query |
157
+ */
158
+ export const PluginGeomQueryArcGetSweepAngleArgs = z.object({ arc: ArcHandle })
159
+ export type PluginGeomQueryArcGetSweepAngleArgs = z.infer<typeof PluginGeomQueryArcGetSweepAngleArgs>
160
+
161
+ /**
162
+ * Arguments for {@linkcode PluginGeomQueryArcApi.isValid}.
163
+ *
164
+ * | Property | Type | Description |
165
+ * |---|---|---|
166
+ * | `arc` | {@linkcode ArcHandle} | The arc to query |
167
+ */
168
+ export const PluginGeomQueryArcIsValidArgs = z.object({ arc: ArcHandle })
169
+ export type PluginGeomQueryArcIsValidArgs = z.infer<typeof PluginGeomQueryArcIsValidArgs>
@@ -0,0 +1,444 @@
1
+ import * as z from "zod"
2
+ import { PluginApiReturn } from "../../../../types"
3
+ import {
4
+ BrepHandle,
5
+ FaceHandle,
6
+ EdgeHandle,
7
+ VertexHandle,
8
+ HalfEdgeHandle,
9
+ Vec3Components,
10
+ BBoxComponents,
11
+ } from "../../../../handles"
12
+
13
+ /**
14
+ * BREP queries — read the topology and geometry of a boundary-representation mesh
15
+ * as plain values / child handles (all-handle model, §11). A {@linkcode BrepHandle}
16
+ * is a session-ephemeral resource handle obtained from `design.query.geometry.getBrep`;
17
+ * it goes stale on undo/redo/re-topologize.
18
+ *
19
+ * Enumerations mint fresh child topology handles ({@linkcode FaceHandle},
20
+ * {@linkcode EdgeHandle}, {@linkcode VertexHandle}, {@linkcode HalfEdgeHandle}); the
21
+ * registry dedupes by identity, so re-enumeration returns the same handles. Position
22
+ * reads return {@linkcode Vec3Components}. No query mutates its inputs.
23
+ *
24
+ * Accessed via `snaptrude.core.geom.query.brep`.
25
+ */
26
+ export abstract class PluginGeomQueryBrepApi {
27
+ constructor() {}
28
+
29
+ /**
30
+ * List the faces of a brep.
31
+ * @param brep The brep to query
32
+ * @returns The faces as {@linkcode FaceHandle}`[]`
33
+ *
34
+ * # Example
35
+ * ```ts
36
+ * const [wall] = await snaptrude.design.query.listWalls()
37
+ * const brep = await snaptrude.design.query.geometry.getBrep(wall)
38
+ * if (brep) {
39
+ * const faces = await snaptrude.core.geom.query.brep.listFaces(brep)
40
+ * }
41
+ * ```
42
+ */
43
+ public abstract listFaces(brep: BrepHandle): PluginApiReturn<FaceHandle[]>
44
+
45
+ /**
46
+ * List the edges of a brep.
47
+ * @param brep The brep to query
48
+ * @returns The edges as {@linkcode EdgeHandle}`[]`
49
+ *
50
+ * # Example
51
+ * ```ts
52
+ * const [wall] = await snaptrude.design.query.listWalls()
53
+ * const brep = await snaptrude.design.query.geometry.getBrep(wall)
54
+ * if (brep) {
55
+ * const edges = await snaptrude.core.geom.query.brep.listEdges(brep)
56
+ * }
57
+ * ```
58
+ */
59
+ public abstract listEdges(brep: BrepHandle): PluginApiReturn<EdgeHandle[]>
60
+
61
+ /**
62
+ * List the vertices of a brep.
63
+ * @param brep The brep to query
64
+ * @returns The vertices as {@linkcode VertexHandle}`[]`
65
+ *
66
+ * # Example
67
+ * ```ts
68
+ * const [mass] = await snaptrude.design.query.listMasses()
69
+ * const brep = await snaptrude.design.query.geometry.getBrep(mass)
70
+ * if (brep) {
71
+ * const vertices = await snaptrude.core.geom.query.brep.listVertices(brep)
72
+ * }
73
+ * ```
74
+ */
75
+ public abstract listVertices(brep: BrepHandle): PluginApiReturn<VertexHandle[]>
76
+
77
+ /**
78
+ * List the half-edges of a brep.
79
+ * @param brep The brep to query
80
+ * @returns The half-edges as {@linkcode HalfEdgeHandle}`[]`
81
+ *
82
+ * # Example
83
+ * ```ts
84
+ * const [wall] = await snaptrude.design.query.listWalls()
85
+ * const brep = await snaptrude.design.query.geometry.getBrep(wall)
86
+ * if (brep) {
87
+ * const halfEdges = await snaptrude.core.geom.query.brep.listHalfEdges(brep)
88
+ * }
89
+ * ```
90
+ */
91
+ public abstract listHalfEdges(brep: BrepHandle): PluginApiReturn<HalfEdgeHandle[]>
92
+
93
+ /**
94
+ * Get the edge connecting two vertices (by their brep vertex indices).
95
+ * @param brep The brep to query
96
+ * @param vertexIndexA First vertex index
97
+ * @param vertexIndexB Second vertex index
98
+ * @returns The edge as an {@linkcode EdgeHandle}, or `null` if no such edge exists
99
+ *
100
+ * # Example
101
+ * ```ts
102
+ * const [wall] = await snaptrude.design.query.listWalls()
103
+ * const brep = await snaptrude.design.query.geometry.getBrep(wall)
104
+ * if (brep) {
105
+ * const [va, vb] = await snaptrude.core.geom.query.brep.listVertices(brep)
106
+ * const ia = await snaptrude.core.geom.query.vertex.getIndex(va)
107
+ * const ib = await snaptrude.core.geom.query.vertex.getIndex(vb)
108
+ * const edge = await snaptrude.core.geom.query.brep.getEdge(brep, ia, ib)
109
+ * if (edge) console.log("those two vertices are connected")
110
+ * }
111
+ * ```
112
+ */
113
+ public abstract getEdge(
114
+ brep: BrepHandle,
115
+ vertexIndexA: number,
116
+ vertexIndexB: number
117
+ ): PluginApiReturn<EdgeHandle | null>
118
+
119
+ /**
120
+ * Test whether an edge connects two vertices (by their brep vertex indices).
121
+ * @param brep The brep to query
122
+ * @param vertexIndexA First vertex index
123
+ * @param vertexIndexB Second vertex index
124
+ * @returns `true` if such an edge exists, otherwise `false`
125
+ *
126
+ * # Example
127
+ * ```ts
128
+ * const [wall] = await snaptrude.design.query.listWalls()
129
+ * const brep = await snaptrude.design.query.geometry.getBrep(wall)
130
+ * if (brep) {
131
+ * // brep vertex indices (get one from core.geom.query.vertex.getIndex)
132
+ * const connected = await snaptrude.core.geom.query.brep.hasEdge(brep, 0, 1)
133
+ * }
134
+ * ```
135
+ */
136
+ public abstract hasEdge(
137
+ brep: BrepHandle,
138
+ vertexIndexA: number,
139
+ vertexIndexB: number
140
+ ): PluginApiReturn<boolean>
141
+
142
+ /**
143
+ * List every edge connecting two vertices (by their brep vertex indices).
144
+ * @param brep The brep to query
145
+ * @param vertexIndexA First vertex index
146
+ * @param vertexIndexB Second vertex index
147
+ * @returns The edges as {@linkcode EdgeHandle}`[]`
148
+ *
149
+ * # Example
150
+ * ```ts
151
+ * const [wall] = await snaptrude.design.query.listWalls()
152
+ * const brep = await snaptrude.design.query.geometry.getBrep(wall)
153
+ * if (brep) {
154
+ * // brep vertex indices (get one from core.geom.query.vertex.getIndex)
155
+ * const edges = await snaptrude.core.geom.query.brep.listEdgesBetween(brep, 0, 1)
156
+ * console.log("edges between vertices 0 and 1:", edges.length)
157
+ * }
158
+ * ```
159
+ */
160
+ public abstract listEdgesBetween(
161
+ brep: BrepHandle,
162
+ vertexIndexA: number,
163
+ vertexIndexB: number
164
+ ): PluginApiReturn<EdgeHandle[]>
165
+
166
+ /**
167
+ * Get the position of a vertex within a brep.
168
+ * @param brep The brep to query
169
+ * @param vertex The vertex whose position to read
170
+ * @returns The position as {@linkcode Vec3Components}
171
+ *
172
+ * # Example
173
+ * ```ts
174
+ * const [wall] = await snaptrude.design.query.listWalls()
175
+ * const brep = await snaptrude.design.query.geometry.getBrep(wall)
176
+ * if (brep) {
177
+ * const [vertex] = await snaptrude.core.geom.query.brep.listVertices(brep)
178
+ * const { x, y, z } = await snaptrude.core.geom.query.brep.getVertexPosition(brep, vertex)
179
+ * }
180
+ * ```
181
+ */
182
+ public abstract getVertexPosition(
183
+ brep: BrepHandle,
184
+ vertex: VertexHandle
185
+ ): PluginApiReturn<Vec3Components>
186
+
187
+ /**
188
+ * List the positions of all vertices in a brep (ordered as {@linkcode PluginGeomQueryBrepApi.listVertices}).
189
+ * @param brep The brep to query
190
+ * @returns The positions as {@linkcode Vec3Components}`[]`
191
+ *
192
+ * @examplePrompt Get the coordinates of every corner of this shape
193
+ * @examplePrompt Give me all the corner points of the selected mass as XYZ coordinates
194
+ *
195
+ * # Example
196
+ * ```ts
197
+ * const [mass] = await snaptrude.design.query.listMasses()
198
+ * const brep = await snaptrude.design.query.geometry.getBrep(mass)
199
+ * if (brep) {
200
+ * const positions = await snaptrude.core.geom.query.brep.listVertexPositions(brep)
201
+ * for (const p of positions) console.log(p.x, p.y, p.z)
202
+ * }
203
+ * ```
204
+ */
205
+ public abstract listVertexPositions(brep: BrepHandle): PluginApiReturn<Vec3Components[]>
206
+
207
+ /**
208
+ * Get the centroid (mean of all vertex positions) of a brep.
209
+ * @param brep The brep to query
210
+ * @returns The centroid as {@linkcode Vec3Components}
211
+ *
212
+ * @examplePrompt Find the centre point of this shape
213
+ * @examplePrompt What is the centroid of the selected object?
214
+ *
215
+ * # Example
216
+ * ```ts
217
+ * const [mass] = await snaptrude.design.query.listMasses()
218
+ * const brep = await snaptrude.design.query.geometry.getBrep(mass)
219
+ * if (brep) {
220
+ * const centroid = await snaptrude.core.geom.query.brep.getCentroid(brep)
221
+ * console.log(centroid.x, centroid.y, centroid.z)
222
+ * }
223
+ * ```
224
+ */
225
+ public abstract getCentroid(brep: BrepHandle): PluginApiReturn<Vec3Components>
226
+
227
+ /**
228
+ * Get the number of faces in a brep.
229
+ * @param brep The brep to query
230
+ * @returns The face count as a `number`
231
+ *
232
+ * # Example
233
+ * ```ts
234
+ * const [wall] = await snaptrude.design.query.listWalls()
235
+ * const brep = await snaptrude.design.query.geometry.getBrep(wall)
236
+ * if (brep) {
237
+ * const faceCount = await snaptrude.core.geom.query.brep.getFaceCount(brep)
238
+ * }
239
+ * ```
240
+ */
241
+ public abstract getFaceCount(brep: BrepHandle): PluginApiReturn<number>
242
+
243
+ /**
244
+ * Get the number of edges in a brep.
245
+ * @param brep The brep to query
246
+ * @returns The edge count as a `number`
247
+ *
248
+ * # Example
249
+ * ```ts
250
+ * const [wall] = await snaptrude.design.query.listWalls()
251
+ * const brep = await snaptrude.design.query.geometry.getBrep(wall)
252
+ * if (brep) {
253
+ * const edgeCount = await snaptrude.core.geom.query.brep.getEdgeCount(brep)
254
+ * }
255
+ * ```
256
+ */
257
+ public abstract getEdgeCount(brep: BrepHandle): PluginApiReturn<number>
258
+
259
+ /**
260
+ * Get the number of vertices in a brep.
261
+ * @param brep The brep to query
262
+ * @returns The vertex count as a `number`
263
+ *
264
+ * # Example
265
+ * ```ts
266
+ * const [mass] = await snaptrude.design.query.listMasses()
267
+ * const brep = await snaptrude.design.query.geometry.getBrep(mass)
268
+ * if (brep) {
269
+ * const vertexCount = await snaptrude.core.geom.query.brep.getVertexCount(brep)
270
+ * }
271
+ * ```
272
+ */
273
+ public abstract getVertexCount(brep: BrepHandle): PluginApiReturn<number>
274
+
275
+ /**
276
+ * Get the number of half-edges in a brep.
277
+ * @param brep The brep to query
278
+ * @returns The half-edge count as a `number`
279
+ *
280
+ * # Example
281
+ * ```ts
282
+ * const [mass] = await snaptrude.design.query.listMasses()
283
+ * const brep = await snaptrude.design.query.geometry.getBrep(mass)
284
+ * if (brep) {
285
+ * const halfEdgeCount = await snaptrude.core.geom.query.brep.getHalfEdgeCount(brep)
286
+ * }
287
+ * ```
288
+ */
289
+ public abstract getHalfEdgeCount(brep: BrepHandle): PluginApiReturn<number>
290
+
291
+ /**
292
+ * Get the axis-aligned bounding box of a brep.
293
+ * @param brep The brep to query
294
+ * @returns The bounding box as {@linkcode BBoxComponents}
295
+ *
296
+ * @examplePrompt What is the bounding box of this shape?
297
+ * @examplePrompt How big is this object overall — give me its min and max extents
298
+ *
299
+ * # Example
300
+ * ```ts
301
+ * const [mass] = await snaptrude.design.query.listMasses()
302
+ * const brep = await snaptrude.design.query.geometry.getBrep(mass)
303
+ * if (brep) {
304
+ * const { min, max } = await snaptrude.core.geom.query.brep.getBoundingBox(brep)
305
+ * console.log("size:", max.x - min.x, max.y - min.y, max.z - min.z)
306
+ * }
307
+ * ```
308
+ */
309
+ public abstract getBoundingBox(brep: BrepHandle): PluginApiReturn<BBoxComponents>
310
+
311
+ /**
312
+ * Test whether two breps are geometrically equal.
313
+ * @param brepA First brep
314
+ * @param brepB Second brep
315
+ * @returns `true` if the breps are equal, otherwise `false`
316
+ *
317
+ * @examplePrompt Are these two shapes geometrically identical?
318
+ * @examplePrompt Check whether these two objects have the same geometry
319
+ *
320
+ * # Example
321
+ * ```ts
322
+ * const [a, b] = await snaptrude.design.query.listMasses()
323
+ * const brepA = await snaptrude.design.query.geometry.getBrep(a)
324
+ * const brepB = await snaptrude.design.query.geometry.getBrep(b)
325
+ * if (brepA && brepB) {
326
+ * const same = await snaptrude.core.geom.query.brep.isEqual(brepA, brepB)
327
+ * }
328
+ * ```
329
+ */
330
+ public abstract isEqual(brepA: BrepHandle, brepB: BrepHandle): PluginApiReturn<boolean>
331
+ }
332
+
333
+ const brepArg = z.object({ brep: BrepHandle })
334
+ const brepEdgeArg = z.object({
335
+ brep: BrepHandle,
336
+ vertexIndexA: z.number(),
337
+ vertexIndexB: z.number(),
338
+ })
339
+
340
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.listFaces}. `{ brep: BrepHandle }` */
341
+ export const PluginGeomQueryBrepListFacesArgs = brepArg
342
+ export type PluginGeomQueryBrepListFacesArgs = z.infer<typeof PluginGeomQueryBrepListFacesArgs>
343
+
344
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.listEdges}. `{ brep: BrepHandle }` */
345
+ export const PluginGeomQueryBrepListEdgesArgs = brepArg
346
+ export type PluginGeomQueryBrepListEdgesArgs = z.infer<typeof PluginGeomQueryBrepListEdgesArgs>
347
+
348
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.listVertices}. `{ brep: BrepHandle }` */
349
+ export const PluginGeomQueryBrepListVerticesArgs = brepArg
350
+ export type PluginGeomQueryBrepListVerticesArgs = z.infer<typeof PluginGeomQueryBrepListVerticesArgs>
351
+
352
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.listHalfEdges}. `{ brep: BrepHandle }` */
353
+ export const PluginGeomQueryBrepListHalfEdgesArgs = brepArg
354
+ export type PluginGeomQueryBrepListHalfEdgesArgs = z.infer<
355
+ typeof PluginGeomQueryBrepListHalfEdgesArgs
356
+ >
357
+
358
+ /**
359
+ * Arguments for {@linkcode PluginGeomQueryBrepApi.getEdge}.
360
+ *
361
+ * | Property | Type | Description |
362
+ * |---|---|---|
363
+ * | `brep` | {@linkcode BrepHandle} | The brep to query |
364
+ * | `vertexIndexA` | `number` | First vertex index |
365
+ * | `vertexIndexB` | `number` | Second vertex index |
366
+ */
367
+ export const PluginGeomQueryBrepGetEdgeArgs = brepEdgeArg
368
+ export type PluginGeomQueryBrepGetEdgeArgs = z.infer<typeof PluginGeomQueryBrepGetEdgeArgs>
369
+
370
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.hasEdge}. `{ brep, vertexIndexA, vertexIndexB }` */
371
+ export const PluginGeomQueryBrepHasEdgeArgs = brepEdgeArg
372
+ export type PluginGeomQueryBrepHasEdgeArgs = z.infer<typeof PluginGeomQueryBrepHasEdgeArgs>
373
+
374
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.listEdgesBetween}. `{ brep, vertexIndexA, vertexIndexB }` */
375
+ export const PluginGeomQueryBrepListEdgesBetweenArgs = brepEdgeArg
376
+ export type PluginGeomQueryBrepListEdgesBetweenArgs = z.infer<
377
+ typeof PluginGeomQueryBrepListEdgesBetweenArgs
378
+ >
379
+
380
+ /**
381
+ * Arguments for {@linkcode PluginGeomQueryBrepApi.getVertexPosition}.
382
+ *
383
+ * | Property | Type | Description |
384
+ * |---|---|---|
385
+ * | `brep` | {@linkcode BrepHandle} | The brep to query |
386
+ * | `vertex` | {@linkcode VertexHandle} | The vertex whose position to read |
387
+ */
388
+ export const PluginGeomQueryBrepGetVertexPositionArgs = z.object({
389
+ brep: BrepHandle,
390
+ vertex: VertexHandle,
391
+ })
392
+ export type PluginGeomQueryBrepGetVertexPositionArgs = z.infer<
393
+ typeof PluginGeomQueryBrepGetVertexPositionArgs
394
+ >
395
+
396
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.listVertexPositions}. `{ brep: BrepHandle }` */
397
+ export const PluginGeomQueryBrepListVertexPositionsArgs = brepArg
398
+ export type PluginGeomQueryBrepListVertexPositionsArgs = z.infer<
399
+ typeof PluginGeomQueryBrepListVertexPositionsArgs
400
+ >
401
+
402
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.getCentroid}. `{ brep: BrepHandle }` */
403
+ export const PluginGeomQueryBrepGetCentroidArgs = brepArg
404
+ export type PluginGeomQueryBrepGetCentroidArgs = z.infer<typeof PluginGeomQueryBrepGetCentroidArgs>
405
+
406
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.getFaceCount}. `{ brep: BrepHandle }` */
407
+ export const PluginGeomQueryBrepGetFaceCountArgs = brepArg
408
+ export type PluginGeomQueryBrepGetFaceCountArgs = z.infer<typeof PluginGeomQueryBrepGetFaceCountArgs>
409
+
410
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.getEdgeCount}. `{ brep: BrepHandle }` */
411
+ export const PluginGeomQueryBrepGetEdgeCountArgs = brepArg
412
+ export type PluginGeomQueryBrepGetEdgeCountArgs = z.infer<typeof PluginGeomQueryBrepGetEdgeCountArgs>
413
+
414
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.getVertexCount}. `{ brep: BrepHandle }` */
415
+ export const PluginGeomQueryBrepGetVertexCountArgs = brepArg
416
+ export type PluginGeomQueryBrepGetVertexCountArgs = z.infer<
417
+ typeof PluginGeomQueryBrepGetVertexCountArgs
418
+ >
419
+
420
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.getHalfEdgeCount}. `{ brep: BrepHandle }` */
421
+ export const PluginGeomQueryBrepGetHalfEdgeCountArgs = brepArg
422
+ export type PluginGeomQueryBrepGetHalfEdgeCountArgs = z.infer<
423
+ typeof PluginGeomQueryBrepGetHalfEdgeCountArgs
424
+ >
425
+
426
+ /** Arguments for {@linkcode PluginGeomQueryBrepApi.getBoundingBox}. `{ brep: BrepHandle }` */
427
+ export const PluginGeomQueryBrepGetBoundingBoxArgs = brepArg
428
+ export type PluginGeomQueryBrepGetBoundingBoxArgs = z.infer<
429
+ typeof PluginGeomQueryBrepGetBoundingBoxArgs
430
+ >
431
+
432
+ /**
433
+ * Arguments for {@linkcode PluginGeomQueryBrepApi.isEqual}.
434
+ *
435
+ * | Property | Type | Description |
436
+ * |---|---|---|
437
+ * | `brepA` | {@linkcode BrepHandle} | First brep |
438
+ * | `brepB` | {@linkcode BrepHandle} | Second brep |
439
+ */
440
+ export const PluginGeomQueryBrepIsEqualArgs = z.object({
441
+ brepA: BrepHandle,
442
+ brepB: BrepHandle,
443
+ })
444
+ export type PluginGeomQueryBrepIsEqualArgs = z.infer<typeof PluginGeomQueryBrepIsEqualArgs>