@metamesh/modeling 0.19.0 → 0.20.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 (789) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +34 -18
  3. package/dist/api/engine.d.ts +217 -121
  4. package/dist/api/export.d.ts +123 -79
  5. package/dist/api/geometry.d.ts +406 -2102
  6. package/dist/api/index.d.ts +472 -1798
  7. package/dist/api/math.d.ts +315 -0
  8. package/dist/api/mechanical.d.ts +1041 -0
  9. package/dist/api/mesh.d.ts +360 -88
  10. package/dist/api/text.d.ts +24 -44
  11. package/dist/docs/guides/concepts.md +67 -33
  12. package/dist/docs/guides/exporting.md +88 -0
  13. package/dist/docs/guides/fonts.md +5 -3
  14. package/dist/docs/guides/fundamentals.md +12 -24
  15. package/dist/docs/guides/generation.md +24 -16
  16. package/dist/docs/guides/geometry-values.md +192 -134
  17. package/dist/docs/guides/hosting.md +51 -96
  18. package/dist/docs/guides/profiles-and-extrusion.md +159 -11
  19. package/dist/docs/guides/recipes.md +121 -28
  20. package/dist/docs/guides/resolution-and-inspection.md +43 -23
  21. package/dist/docs/guides/solid-joins.md +12 -2
  22. package/dist/docs/guides/standalone-model.md +4 -2
  23. package/dist/docs/guides/svg-and-text.md +76 -39
  24. package/dist/docs/guides/sweeps-and-lofts.md +88 -44
  25. package/dist/docs/guides/transforms-and-placement.md +113 -103
  26. package/dist/docs/guides/workers.md +166 -0
  27. package/dist/docs/manifest.json +4133 -4153
  28. package/dist/docs/reference/engine/GenerationOptions.md +2 -3
  29. package/dist/docs/reference/engine/GeometryResource.md +6 -6
  30. package/dist/docs/reference/engine/ModelDependencies.md +2 -2
  31. package/dist/docs/reference/engine/ModelEngine.md +2 -3
  32. package/dist/docs/reference/engine/ModelEngineOptions.md +2 -7
  33. package/dist/docs/reference/engine/ModelPart.md +6 -6
  34. package/dist/docs/reference/engine/ModelResult.md +2 -2
  35. package/dist/docs/reference/engine/ModelRunArguments.md +2 -2
  36. package/dist/docs/reference/engine/ModelRunOptions.md +2 -3
  37. package/dist/docs/reference/engine/ModelSession.md +2 -2
  38. package/dist/docs/reference/engine/SessionOptions.md +2 -3
  39. package/dist/docs/reference/engine/categories/host-lifecycle.md +9 -3
  40. package/dist/docs/reference/engine/checkModel.md +6 -2
  41. package/dist/docs/reference/engine/createModelEngine.md +5 -3
  42. package/dist/docs/reference/engine/defaultModelingLimits.md +4 -11
  43. package/dist/docs/reference/engine/modelingWasmUrl.md +2 -2
  44. package/dist/docs/reference/engine.md +7 -1
  45. package/dist/docs/reference/export/Export3mfOptions.md +2 -6
  46. package/dist/docs/reference/export/ExportDiagnostic.md +2 -14
  47. package/dist/docs/reference/export/ExportFormat.md +2 -14
  48. package/dist/docs/reference/export/ExportGeometry.md +3 -15
  49. package/dist/docs/reference/export/ExportGlbOptions.md +14 -18
  50. package/dist/docs/reference/export/ExportLimits.md +2 -14
  51. package/dist/docs/reference/export/ExportMaterial.md +2 -14
  52. package/dist/docs/reference/export/ExportOptions.md +2 -14
  53. package/dist/docs/reference/export/ExportPart.md +2 -14
  54. package/dist/docs/reference/export/ExportReport.md +2 -14
  55. package/dist/docs/reference/export/ExportSink.md +5 -15
  56. package/dist/docs/reference/export/ExportStlOptions.md +2 -6
  57. package/dist/docs/reference/export/ExportedFile.md +14 -26
  58. package/dist/docs/reference/export/categories/mesh-serialization.md +9 -3
  59. package/dist/docs/reference/export/defaultExportLimits.md +2 -2
  60. package/dist/docs/reference/export/export3mf.md +4 -6
  61. package/dist/docs/reference/export/exportGlb.md +8 -10
  62. package/dist/docs/reference/export/exportStl.md +4 -6
  63. package/dist/docs/reference/export/write3mf.md +6 -6
  64. package/dist/docs/reference/export/writeGlb.md +10 -10
  65. package/dist/docs/reference/export/writeStl.md +6 -6
  66. package/dist/docs/reference/export.md +9 -3
  67. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +4 -4
  68. package/dist/docs/reference/geometry/Anchor3-type.md +3 -7
  69. package/dist/docs/reference/geometry/Anchor3Options.md +70 -0
  70. package/dist/docs/reference/geometry/ArcCurve2.md +3 -3
  71. package/dist/docs/reference/geometry/ArcCurve3.md +3 -3
  72. package/dist/docs/reference/geometry/AttachOptions.md +4 -9
  73. package/dist/docs/reference/geometry/Bounds2-type.md +9 -30
  74. package/dist/docs/reference/geometry/Bounds2Data.md +2 -19
  75. package/dist/docs/reference/geometry/Bounds2Input.md +2 -10
  76. package/dist/docs/reference/geometry/Bounds2Options.md +2 -6
  77. package/dist/docs/reference/geometry/Bounds3-type.md +9 -30
  78. package/dist/docs/reference/geometry/Bounds3Data.md +2 -15
  79. package/dist/docs/reference/geometry/Bounds3Input.md +2 -10
  80. package/dist/docs/reference/geometry/Bounds3Options.md +2 -6
  81. package/dist/docs/reference/geometry/BoundsFit2.md +2 -2
  82. package/dist/docs/reference/geometry/BoundsFit3.md +2 -2
  83. package/dist/docs/reference/geometry/BoundsFitOptions.md +2 -2
  84. package/dist/docs/reference/geometry/BoxAnchorFace.md +3 -3
  85. package/dist/docs/reference/geometry/BoxAnchorOptions.md +3 -3
  86. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +3 -7
  87. package/dist/docs/reference/geometry/CircleContourOptions.md +3 -7
  88. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +3 -12
  89. package/dist/docs/reference/geometry/CircularResolutionOptions.md +2 -2
  90. package/dist/docs/reference/geometry/CircularSampling.md +2 -2
  91. package/dist/docs/reference/geometry/CircularSamplingOptions.md +2 -2
  92. package/dist/docs/reference/geometry/Contour.md +4 -9
  93. package/dist/docs/reference/geometry/ContourCurve.md +3 -3
  94. package/dist/docs/reference/geometry/ContourPoint.md +3 -3
  95. package/dist/docs/reference/geometry/ContourSegment.md +3 -3
  96. package/dist/docs/reference/geometry/CorrespondingComponent.md +3 -7
  97. package/dist/docs/reference/geometry/CorrespondingContour.md +3 -7
  98. package/dist/docs/reference/geometry/CorrespondingProfile.md +3 -7
  99. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +4 -8
  100. package/dist/docs/reference/geometry/CubicBezierCurve2.md +3 -3
  101. package/dist/docs/reference/geometry/CubicBezierCurve3.md +3 -3
  102. package/dist/docs/reference/geometry/Curve2.md +3 -3
  103. package/dist/docs/reference/geometry/Curve3.md +3 -3
  104. package/dist/docs/reference/geometry/CurveSamplingOptions.md +3 -11
  105. package/dist/docs/reference/geometry/CylinderAnchorFace.md +3 -3
  106. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +4 -4
  107. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +2 -2
  108. package/dist/docs/reference/geometry/EdgeTreatment.md +2 -6
  109. package/dist/docs/reference/geometry/EllipseContourOptions.md +3 -7
  110. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +9 -18
  111. package/dist/docs/reference/geometry/FittedTextLayout.md +2 -2
  112. package/dist/docs/reference/geometry/{Frame3.md → Frame3-type.md} +4 -11
  113. package/dist/docs/reference/geometry/Frame3Options.md +69 -0
  114. package/dist/docs/reference/geometry/GeometryError.md +2 -6
  115. package/dist/docs/reference/geometry/GeometryErrorCode.md +2 -6
  116. package/dist/docs/reference/geometry/GeometryErrorContext.md +2 -6
  117. package/dist/docs/reference/geometry/GeometryResolution.md +2 -10
  118. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +3 -11
  119. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +3 -11
  120. package/dist/docs/reference/geometry/GridPatternOptions.md +7 -9
  121. package/dist/docs/reference/geometry/ImmutableBuffer-type.md +2 -10
  122. package/dist/docs/reference/geometry/LineCurve2.md +3 -3
  123. package/dist/docs/reference/geometry/LineCurve3.md +3 -3
  124. package/dist/docs/reference/geometry/LinearPatternOptions.md +2 -6
  125. package/dist/docs/reference/geometry/LoftPlacement.md +13 -21
  126. package/dist/docs/reference/geometry/MatchProfilesOptions.md +3 -7
  127. package/dist/docs/reference/geometry/ModelingLimits.md +2 -14
  128. package/dist/docs/reference/geometry/NumericArray.md +2 -10
  129. package/dist/docs/reference/geometry/Path2-type.md +153 -12
  130. package/dist/docs/reference/geometry/Path2Data.md +3 -11
  131. package/dist/docs/reference/geometry/Path2Input.md +3 -11
  132. package/dist/docs/reference/geometry/Path3-type.md +153 -12
  133. package/dist/docs/reference/geometry/Path3Data.md +3 -11
  134. package/dist/docs/reference/geometry/Path3Input.md +3 -11
  135. package/dist/docs/reference/geometry/PathFrame.md +3 -3
  136. package/dist/docs/reference/geometry/PathLocation.md +3 -11
  137. package/dist/docs/reference/geometry/PathNormalGuide.md +4 -12
  138. package/dist/docs/reference/geometry/PathOptions.md +3 -7
  139. package/dist/docs/reference/geometry/PathPatternOptions.md +3 -7
  140. package/dist/docs/reference/geometry/PathPlacement.md +5 -5
  141. package/dist/docs/reference/geometry/PathResamplingOptions.md +3 -11
  142. package/dist/docs/reference/geometry/PathStation.md +87 -0
  143. package/dist/docs/reference/geometry/PathSubdivisionOptions.md +44 -0
  144. package/dist/docs/reference/geometry/Pivot2Options.md +3 -11
  145. package/dist/docs/reference/geometry/Pivot3Options.md +3 -11
  146. package/dist/docs/reference/geometry/PolygonData.md +4 -8
  147. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +3 -3
  148. package/dist/docs/reference/geometry/Profile.md +3 -4
  149. package/dist/docs/reference/geometry/ProfileComponent2.md +3 -7
  150. package/dist/docs/reference/geometry/ProfileContour2.md +3 -7
  151. package/dist/docs/reference/geometry/ProfileSpan2.md +3 -7
  152. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +5 -8
  153. package/dist/docs/reference/geometry/RadialPatternOptions.md +2 -6
  154. package/dist/docs/reference/geometry/RadialSizing.md +2 -6
  155. package/dist/docs/reference/geometry/RadialSizingOptions.md +2 -6
  156. package/dist/docs/reference/geometry/RectangleContourOptions.md +4 -7
  157. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +3 -7
  158. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +3 -7
  159. package/dist/docs/reference/geometry/RectangleProfileOptions.md +3 -3
  160. package/dist/docs/reference/geometry/RegionData.md +3 -7
  161. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
  162. package/dist/docs/reference/geometry/ResolvedGeometryResolution.md +71 -0
  163. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +2 -2
  164. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +2 -6
  165. package/dist/docs/reference/geometry/RowLayoutOptions.md +2 -2
  166. package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
  167. package/dist/docs/reference/geometry/SampleHelixOptions.md +3 -3
  168. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
  169. package/dist/docs/reference/geometry/SampledCurve2.md +3 -3
  170. package/dist/docs/reference/geometry/SampledCurve3.md +3 -3
  171. package/dist/docs/reference/geometry/SideProfileCurve.md +3 -3
  172. package/dist/docs/reference/geometry/SideProfilePoint.md +3 -3
  173. package/dist/docs/reference/geometry/SideProfileSegment.md +3 -3
  174. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +2 -6
  175. package/dist/docs/reference/geometry/SplineOptions.md +69 -0
  176. package/dist/docs/reference/geometry/StarContourOptions.md +7 -7
  177. package/dist/docs/reference/geometry/StrokeCap.md +2 -6
  178. package/dist/docs/reference/geometry/StrokeJoin.md +2 -6
  179. package/dist/docs/reference/geometry/StrokeOptions.md +3 -7
  180. package/dist/docs/reference/geometry/SvgImportOptions.md +4 -4
  181. package/dist/docs/reference/geometry/SvgRegionPreflight.md +2 -2
  182. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +2 -2
  183. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +2 -2
  184. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +2 -2
  185. package/dist/docs/reference/geometry/Transform2-type.md +3 -11
  186. package/dist/docs/reference/geometry/Transform2Data.md +3 -11
  187. package/dist/docs/reference/geometry/Transform2Input.md +3 -11
  188. package/dist/docs/reference/geometry/Transform3-type.md +4 -12
  189. package/dist/docs/reference/geometry/Transform3Data.md +3 -11
  190. package/dist/docs/reference/geometry/Transform3Input.md +6 -13
  191. package/dist/docs/reference/geometry/Vector2-type.md +3 -11
  192. package/dist/docs/reference/geometry/Vector2Data.md +3 -15
  193. package/dist/docs/reference/geometry/Vector2Input.md +3 -11
  194. package/dist/docs/reference/geometry/Vector3-type.md +27 -11
  195. package/dist/docs/reference/geometry/Vector3Data.md +3 -11
  196. package/dist/docs/reference/geometry/Vector3Input.md +3 -11
  197. package/dist/docs/reference/geometry/VectorTextLayout.md +2 -10
  198. package/dist/docs/reference/geometry/VectorTextMetrics.md +3 -11
  199. package/dist/docs/reference/geometry/anchor3.md +17 -26
  200. package/dist/docs/reference/geometry/anchorFrame3.md +6 -6
  201. package/dist/docs/reference/geometry/attachmentTransform3.md +8 -8
  202. package/dist/docs/reference/geometry/bounds2.md +6 -8
  203. package/dist/docs/reference/geometry/bounds3.md +4 -6
  204. package/dist/docs/reference/geometry/boundsCenter.md +2 -2
  205. package/dist/docs/reference/geometry/boundsSize.md +2 -2
  206. package/dist/docs/reference/geometry/boxAnchor3.md +3 -3
  207. package/dist/docs/reference/geometry/categories/bounds-layout.md +9 -3
  208. package/dist/docs/reference/geometry/categories/curves-paths.md +24 -13
  209. package/dist/docs/reference/geometry/categories/immutable-data.md +40 -0
  210. package/dist/docs/reference/geometry/categories/pattern-placement.md +10 -4
  211. package/dist/docs/reference/geometry/categories/primitive-options.md +8 -13
  212. package/dist/docs/reference/geometry/categories/profiles-regions.md +11 -5
  213. package/dist/docs/reference/geometry/categories/resolution-errors.md +8 -1
  214. package/dist/docs/reference/geometry/categories/transforms-math.md +20 -51
  215. package/dist/docs/reference/geometry/categories/vector-import.md +7 -4
  216. package/dist/docs/reference/geometry/circleContour.md +3 -3
  217. package/dist/docs/reference/geometry/closeToAxis.md +7 -3
  218. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +9 -6
  219. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +13 -6
  220. package/dist/docs/reference/geometry/contourContainsPoint.md +7 -3
  221. package/dist/docs/reference/geometry/cylinderAnchor3.md +5 -5
  222. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +3 -3
  223. package/dist/docs/reference/geometry/distributeAlongPath.md +16 -11
  224. package/dist/docs/reference/geometry/ellipseContour.md +3 -3
  225. package/dist/docs/reference/geometry/fitBounds.md +10 -2
  226. package/dist/docs/reference/geometry/fitTextLayout.md +5 -5
  227. package/dist/docs/reference/geometry/frame3.md +66 -0
  228. package/dist/docs/reference/geometry/gridPatternTransforms.md +6 -6
  229. package/dist/docs/reference/geometry/immutableBuffer.md +5 -7
  230. package/dist/docs/reference/geometry/isGeometryError.md +2 -6
  231. package/dist/docs/reference/geometry/layoutRow.md +4 -2
  232. package/dist/docs/reference/geometry/linearPatternTransforms.md +6 -6
  233. package/dist/docs/reference/geometry/matchProfiles.md +5 -3
  234. package/dist/docs/reference/geometry/normalizeContour.md +8 -4
  235. package/dist/docs/reference/geometry/normalizePolygon.md +5 -3
  236. package/dist/docs/reference/geometry/normalizeRegion.md +5 -3
  237. package/dist/docs/reference/geometry/path2.md +7 -7
  238. package/dist/docs/reference/geometry/path3.md +7 -7
  239. package/dist/docs/reference/geometry/pathPatternTransforms.md +12 -8
  240. package/dist/docs/reference/geometry/preflightSvgRegion.md +5 -5
  241. package/dist/docs/reference/geometry/radialPatternTransforms.md +5 -5
  242. package/dist/docs/reference/geometry/rectangleContour.md +3 -3
  243. package/dist/docs/reference/geometry/rectangleProfile.md +3 -4
  244. package/dist/docs/reference/geometry/regionArea.md +3 -3
  245. package/dist/docs/reference/geometry/regionBounds.md +6 -4
  246. package/dist/docs/reference/geometry/regularPolygonContour.md +3 -3
  247. package/dist/docs/reference/geometry/resamplePolyline2.md +7 -3
  248. package/dist/docs/reference/geometry/resamplePolyline3.md +7 -3
  249. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +5 -5
  250. package/dist/docs/reference/geometry/resolveArcSegments.md +8 -6
  251. package/dist/docs/reference/geometry/resolveCircularSampling.md +2 -2
  252. package/dist/docs/reference/geometry/resolveCircularSegments.md +5 -3
  253. package/dist/docs/reference/geometry/{resolveExtrusionDivisions.md → resolveExtrusionSlices.md} +16 -15
  254. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +5 -3
  255. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +3 -3
  256. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +12 -5
  257. package/dist/docs/reference/geometry/sampleContour.md +5 -5
  258. package/dist/docs/reference/geometry/sampleCurve2.md +7 -3
  259. package/dist/docs/reference/geometry/sampleCurve3.md +7 -3
  260. package/dist/docs/reference/geometry/sampleHelix.md +3 -3
  261. package/dist/docs/reference/geometry/sampleSideProfile.md +5 -5
  262. package/dist/docs/reference/geometry/sampleTextContours.md +3 -3
  263. package/dist/docs/reference/geometry/signedContourArea.md +5 -3
  264. package/dist/docs/reference/geometry/spline2.md +68 -0
  265. package/dist/docs/reference/geometry/spline3.md +62 -0
  266. package/dist/docs/reference/geometry/starContour.md +3 -3
  267. package/dist/docs/reference/geometry/strokeRegionData.md +8 -5
  268. package/dist/docs/reference/geometry/transform2.md +5 -7
  269. package/dist/docs/reference/geometry/transform3.md +23 -10
  270. package/dist/docs/reference/geometry/transformRegionData.md +7 -3
  271. package/dist/docs/reference/geometry/triangulateContour.md +6 -4
  272. package/dist/docs/reference/geometry/vector2.md +6 -8
  273. package/dist/docs/reference/geometry/vector3.md +8 -8
  274. package/dist/docs/reference/geometry.md +13 -18
  275. package/dist/docs/reference/{geometry → math}/AxisAngleRotation3.md +4 -5
  276. package/dist/docs/reference/math/IDENTITY_TRANSFORM3.md +20 -0
  277. package/dist/docs/reference/math/add2.md +38 -0
  278. package/dist/docs/reference/math/add3.md +46 -0
  279. package/dist/docs/reference/math/applyTransformDirection3.md +46 -0
  280. package/dist/docs/reference/math/applyTransformPoint3.md +44 -0
  281. package/dist/docs/reference/math/categories/tuple-matrix.md +67 -0
  282. package/dist/docs/reference/math/cross2.md +38 -0
  283. package/dist/docs/reference/math/cross3.md +44 -0
  284. package/dist/docs/reference/math/distance2.md +38 -0
  285. package/dist/docs/reference/math/distance3.md +38 -0
  286. package/dist/docs/reference/math/dot2.md +38 -0
  287. package/dist/docs/reference/math/dot3.md +44 -0
  288. package/dist/docs/reference/math/eulerTransform3.md +43 -0
  289. package/dist/docs/reference/math/inverseTransform3.md +36 -0
  290. package/dist/docs/reference/math/length2.md +32 -0
  291. package/dist/docs/reference/math/length3.md +32 -0
  292. package/dist/docs/reference/math/lerp2.md +46 -0
  293. package/dist/docs/reference/math/lerp3.md +46 -0
  294. package/dist/docs/reference/math/multiplyTransform3.md +46 -0
  295. package/dist/docs/reference/math/normalize2.md +45 -0
  296. package/dist/docs/reference/math/normalize3.md +45 -0
  297. package/dist/docs/reference/math/projectOntoPlane3.md +40 -0
  298. package/dist/docs/reference/math/rotate2.md +40 -0
  299. package/dist/docs/reference/math/rotationTransform3.md +56 -0
  300. package/dist/docs/reference/math/scale2.md +38 -0
  301. package/dist/docs/reference/math/scale3.md +44 -0
  302. package/dist/docs/reference/math/scaleTransform3.md +39 -0
  303. package/dist/docs/reference/math/subtract2.md +38 -0
  304. package/dist/docs/reference/math/subtract3.md +44 -0
  305. package/dist/docs/reference/math/transformDeterminant3.md +38 -0
  306. package/dist/docs/reference/math/translationTransform3.md +36 -0
  307. package/dist/docs/reference/math/validateRigidTransform3.md +38 -0
  308. package/dist/docs/reference/math/validateTransform3.md +48 -0
  309. package/dist/docs/reference/math.md +22 -0
  310. package/dist/docs/reference/{geometry → mechanical}/AcmeThreadProfileSpec.md +4 -13
  311. package/dist/docs/reference/{geometry → mechanical}/Bevel.md +3 -11
  312. package/dist/docs/reference/{geometry → mechanical}/BevelSize.md +3 -11
  313. package/dist/docs/reference/{geometry → mechanical}/ButtressPressureFlankSide.md +3 -11
  314. package/dist/docs/reference/{geometry → mechanical}/ButtressThreadProfileSpec.md +4 -13
  315. package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleDimensions.md +3 -3
  316. package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleFit.md +3 -3
  317. package/dist/docs/reference/{geometry → mechanical}/CompensatedThreadDiameters.md +3 -3
  318. package/dist/docs/reference/{geometry → mechanical}/CustomThreadProfileSpec.md +5 -15
  319. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearDimensions.md +3 -3
  320. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearMeshKind.md +3 -3
  321. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearOutlineOptions.md +5 -10
  322. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairDimensions.md +3 -3
  323. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionOptions.md +3 -3
  324. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionReport.md +3 -3
  325. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairSpec.md +3 -3
  326. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearSpec.md +3 -3
  327. package/dist/docs/reference/{geometry → mechanical}/InternalThreadCutterOptions.md +6 -13
  328. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeBaseSpec.md +3 -7
  329. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeDimensions.md +4 -5
  330. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeInterval.md +3 -3
  331. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSamplingOptions.md +5 -14
  332. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSpec.md +3 -7
  333. package/dist/docs/reference/{geometry → mechanical}/METRIC_FASTENER_STANDARDS.md +3 -3
  334. package/dist/docs/reference/{geometry → mechanical}/MetricFastenerSize.md +3 -3
  335. package/dist/docs/reference/{geometry → mechanical}/MetricFastenerStandard.md +3 -3
  336. package/dist/docs/reference/{geometry → mechanical}/MetricHexNutDimensions.md +3 -3
  337. package/dist/docs/reference/{geometry → mechanical}/MetricSocketCapHeadDimensions.md +3 -3
  338. package/dist/docs/reference/{geometry → mechanical}/PRINTABLE_THREAD_FIT_POLICIES.md +3 -3
  339. package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFit.md +3 -7
  340. package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFitPolicy.md +3 -7
  341. package/dist/docs/reference/{geometry → mechanical}/RackPitchDimensions.md +3 -3
  342. package/dist/docs/reference/{geometry → mechanical}/RackPitchSpec.md +3 -3
  343. package/dist/docs/reference/{geometry → mechanical}/SampledThreadHelices.md +4 -8
  344. package/dist/docs/reference/{geometry → mechanical}/SquareThreadProfileSpec.md +4 -13
  345. package/dist/docs/reference/{geometry → mechanical}/ThreadBevelOptions.md +3 -7
  346. package/dist/docs/reference/{geometry → mechanical}/ThreadCircularSegmentsOptions.md +5 -7
  347. package/dist/docs/reference/{geometry → mechanical}/ThreadCompensationOptions.md +4 -5
  348. package/dist/docs/reference/{geometry → mechanical}/ThreadEndStyle.md +3 -11
  349. package/dist/docs/reference/{geometry → mechanical}/ThreadEndTreatmentOptions.md +3 -11
  350. package/dist/docs/reference/{geometry → mechanical}/ThreadHandedness.md +3 -11
  351. package/dist/docs/reference/{geometry → mechanical}/ThreadHelixOptions.md +5 -7
  352. package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInEnvelope.md +3 -11
  353. package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInShape.md +3 -11
  354. package/dist/docs/reference/{geometry → mechanical}/ThreadProfile-type.md +5 -17
  355. package/dist/docs/reference/{geometry → mechanical}/ThreadProfileBaseSpec.md +4 -13
  356. package/dist/docs/reference/{geometry → mechanical}/ThreadProfileSpec.md +3 -11
  357. package/dist/docs/reference/{geometry → mechanical}/ThreadRidgeOptions.md +7 -18
  358. package/dist/docs/reference/{geometry → mechanical}/ThreadRole.md +3 -3
  359. package/dist/docs/reference/{geometry → mechanical}/ThreadSolidOptions.md +8 -15
  360. package/dist/docs/reference/{geometry → mechanical}/ThreadSolidPreflight.md +3 -11
  361. package/dist/docs/reference/{geometry → mechanical}/ThreadedNutOptions.md +7 -14
  362. package/dist/docs/reference/{geometry → mechanical}/ThreadedNutPreflight.md +3 -7
  363. package/dist/docs/reference/{geometry → mechanical}/ThreadedNutShape.md +3 -7
  364. package/dist/docs/reference/{geometry → mechanical}/ThreadedRodOptions.md +6 -13
  365. package/dist/docs/reference/{geometry → mechanical}/TrapezoidalThreadProfileSpec.md +4 -13
  366. package/dist/docs/reference/{geometry → mechanical}/TriangularThreadProfileSpec.md +4 -13
  367. package/dist/docs/reference/{geometry → mechanical}/categories/mechanical.md +8 -2
  368. package/dist/docs/reference/{geometry → mechanical}/compensateThreadDiameters.md +4 -4
  369. package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileAxially.md +12 -6
  370. package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileForFaceting.md +13 -3
  371. package/dist/docs/reference/{geometry → mechanical}/getMetricClearanceHoleDiameter.md +3 -3
  372. package/dist/docs/reference/{geometry → mechanical}/getMetricFastenerStandard.md +3 -3
  373. package/dist/docs/reference/{geometry → mechanical}/measureInternalCylindricalGearPairMotion.md +9 -7
  374. package/dist/docs/reference/{geometry → mechanical}/minimumCylindricalGearToothCountWithoutUndercut.md +5 -3
  375. package/dist/docs/reference/{geometry → mechanical}/preflightInternalThreadCutter.md +8 -6
  376. package/dist/docs/reference/{geometry → mechanical}/preflightThreadedNut.md +9 -7
  377. package/dist/docs/reference/{geometry → mechanical}/preflightThreadedRod.md +8 -6
  378. package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGear.md +5 -3
  379. package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGearPair.md +5 -3
  380. package/dist/docs/reference/{geometry → mechanical}/resolveKnuckleHinge.md +9 -7
  381. package/dist/docs/reference/{geometry → mechanical}/resolvePrintableThreadFitPolicy.md +5 -3
  382. package/dist/docs/reference/{geometry → mechanical}/resolveRackPitch.md +5 -3
  383. package/dist/docs/reference/{geometry → mechanical}/resolveThreadCircularSegments.md +7 -5
  384. package/dist/docs/reference/{geometry → mechanical}/sampleCylindricalGearOutline.md +9 -8
  385. package/dist/docs/reference/{geometry → mechanical}/sampleInternalCylindricalGearSpaceOutline.md +9 -8
  386. package/dist/docs/reference/{geometry → mechanical}/sampleRackToothPath.md +10 -8
  387. package/dist/docs/reference/{geometry → mechanical}/sampleThreadHelices.md +8 -6
  388. package/dist/docs/reference/{geometry → mechanical}/threadProfile.md +7 -3
  389. package/dist/docs/reference/mechanical.md +19 -0
  390. package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +128 -0
  391. package/dist/docs/reference/{geometry → mesh}/HeightfieldMeshLimits.md +5 -13
  392. package/dist/docs/reference/{geometry → mesh}/HeightfieldPreflight.md +3 -7
  393. package/dist/docs/reference/{geometry → mesh}/ImmutableTriangleMesh.md +5 -17
  394. package/dist/docs/reference/mesh/LoftMeshStation.md +32 -0
  395. package/dist/docs/reference/mesh/MeshRenderOptions.md +3 -3
  396. package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationFallbackReason.md +4 -8
  397. package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationOptions.md +4 -9
  398. package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationResult.md +4 -8
  399. package/dist/docs/reference/{geometry → mesh}/PlanarPatchQuality.md +4 -12
  400. package/dist/docs/reference/mesh/RenderMesh.md +19 -19
  401. package/dist/docs/reference/{geometry → mesh}/SolidMeshValidationOptions.md +4 -12
  402. package/dist/docs/reference/{geometry → mesh}/TriangleMesh.md +8 -12
  403. package/dist/docs/reference/{geometry → mesh}/TriangleMeshAnalysis.md +5 -14
  404. package/dist/docs/reference/{geometry → mesh}/TriangleMeshAnalysisOptions.md +4 -9
  405. package/dist/docs/reference/{geometry → mesh}/TriangleMeshInput.md +3 -7
  406. package/dist/docs/reference/{geometry → mesh}/TriangleMeshMeasurements.md +5 -14
  407. package/dist/docs/reference/{geometry → mesh}/TriangleMeshQualityOptions.md +4 -9
  408. package/dist/docs/reference/{geometry → mesh}/TriangleMeshQualityReport.md +3 -7
  409. package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignature.md +4 -9
  410. package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignatureOptions.md +3 -7
  411. package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignatureTolerances.md +3 -7
  412. package/dist/docs/reference/{geometry → mesh}/TriangleMeshTopologyAnalysis.md +5 -14
  413. package/dist/docs/reference/{geometry → mesh}/TriangleMeshValidationOptions.md +4 -9
  414. package/dist/docs/reference/mesh/analyze.md +26 -18
  415. package/dist/docs/reference/mesh/analyzeQuality.md +12 -12
  416. package/dist/docs/reference/mesh/bounds.md +5 -6
  417. package/dist/docs/reference/mesh/categories/operations.md +37 -4
  418. package/dist/docs/reference/mesh/centroid.md +5 -6
  419. package/dist/docs/reference/mesh/extrude.md +21 -20
  420. package/dist/docs/reference/mesh/heightfield.md +8 -8
  421. package/dist/docs/reference/mesh/immutable.md +7 -5
  422. package/dist/docs/reference/mesh/join.md +7 -7
  423. package/dist/docs/reference/mesh/loft.md +19 -18
  424. package/dist/docs/reference/mesh/optimizePlanarPatches.md +21 -21
  425. package/dist/docs/reference/mesh/preflightHeightfield.md +8 -8
  426. package/dist/docs/reference/mesh/preflightThreadSolid.md +22 -25
  427. package/dist/docs/reference/mesh/render.md +7 -5
  428. package/dist/docs/reference/mesh/reverse.md +7 -7
  429. package/dist/docs/reference/mesh/revolve.md +12 -14
  430. package/dist/docs/reference/mesh/signature.md +12 -12
  431. package/dist/docs/reference/mesh/sweep.md +96 -25
  432. package/dist/docs/reference/mesh/threadRidge.md +19 -18
  433. package/dist/docs/reference/mesh/threadSolid.md +23 -22
  434. package/dist/docs/reference/mesh/transform.md +8 -9
  435. package/dist/docs/reference/mesh/validate.md +11 -11
  436. package/dist/docs/reference/mesh/validateSolid.md +10 -10
  437. package/dist/docs/reference/mesh.md +8 -2
  438. package/dist/docs/reference/model/BoxEdge.md +23 -0
  439. package/dist/docs/reference/model/BoxEdgeSelection.md +27 -0
  440. package/dist/docs/reference/model/BoxEdgeTreatments.md +27 -0
  441. package/dist/docs/reference/{geometry → model}/BoxOptions.md +12 -12
  442. package/dist/docs/reference/model/CircleOptions.md +4 -5
  443. package/dist/docs/reference/model/CornerCutterOptions.md +93 -0
  444. package/dist/docs/reference/model/CornerCutterTreatment.md +53 -0
  445. package/dist/docs/reference/model/{HoleCutterOverrun.md → CutterOverrun.md} +8 -7
  446. package/dist/docs/reference/model/CylinderOptions.md +64 -0
  447. package/dist/docs/reference/model/DiagnosticOptions.md +2 -2
  448. package/dist/docs/reference/model/EdgeCutterOptions.md +129 -0
  449. package/dist/docs/reference/model/EllipseOptions.md +4 -5
  450. package/dist/docs/reference/model/EndTreatments.md +43 -0
  451. package/dist/docs/reference/model/ExtrudeOptions.md +153 -0
  452. package/dist/docs/reference/model/GenerateCallback.md +2 -2
  453. package/dist/docs/reference/model/GenerateContext.md +27 -3
  454. package/dist/docs/reference/model/GenerationDiagnostic.md +2 -2
  455. package/dist/docs/reference/model/GenerationError.md +2 -2
  456. package/dist/docs/reference/{geometry → model}/HeightfieldOptions.md +5 -23
  457. package/dist/docs/reference/model/HoleCutterOpening.md +27 -0
  458. package/dist/docs/reference/model/HoleCutterOptions.md +9 -22
  459. package/dist/docs/reference/model/HoleCutterRecess.md +5 -4
  460. package/dist/docs/reference/model/HullOptions.md +2 -3
  461. package/dist/docs/reference/model/ImmutableValue.md +2 -2
  462. package/dist/docs/reference/model/ImplicitOptions.md +3 -9
  463. package/dist/docs/reference/model/JoinOptions.md +2 -5
  464. package/dist/docs/reference/model/JoinTransition.md +2 -2
  465. package/dist/docs/reference/model/KnuckleHinge-type.md +2 -3
  466. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +2 -2
  467. package/dist/docs/reference/model/KnuckleHingeOptions.md +3 -5
  468. package/dist/docs/reference/model/KnuckleHingeWeb.md +2 -2
  469. package/dist/docs/reference/{geometry → model}/LoftCorrespondence.md +8 -11
  470. package/dist/docs/reference/{geometry → model}/LoftOptions.md +11 -16
  471. package/dist/docs/reference/model/LoftStation.md +4 -5
  472. package/dist/docs/reference/model/Memo.md +2 -2
  473. package/dist/docs/reference/model/ModelProgram.md +2 -2
  474. package/dist/docs/reference/model/PartDeclaration.md +4 -5
  475. package/dist/docs/reference/model/PartGeometry.md +3 -5
  476. package/dist/docs/reference/model/PartOptions.md +4 -5
  477. package/dist/docs/reference/model/PatternSource.md +4 -4
  478. package/dist/docs/reference/model/PlaneOptions.md +3 -7
  479. package/dist/docs/reference/model/PolygonOptions.md +2 -7
  480. package/dist/docs/reference/model/PrimitiveAttachment.md +50 -0
  481. package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +111 -0
  482. package/dist/docs/reference/model/RectangleOptions.md +21 -26
  483. package/dist/docs/reference/model/RegularPolygonOptions.md +4 -37
  484. package/dist/docs/reference/{geometry → model}/RevolveOptions.md +15 -24
  485. package/dist/docs/reference/model/Section.md +115 -53
  486. package/dist/docs/reference/model/SectionHullOptions.md +2 -3
  487. package/dist/docs/reference/model/SectionInspection.md +2 -6
  488. package/dist/docs/reference/model/SectionOffsetJoin.md +2 -2
  489. package/dist/docs/reference/model/SectionOffsetOptions.md +2 -3
  490. package/dist/docs/reference/model/Solid.md +24 -12
  491. package/dist/docs/reference/model/SolidInspection.md +2 -6
  492. package/dist/docs/reference/model/SolidSegmentHit.md +2 -6
  493. package/dist/docs/reference/model/SphereOptions.md +27 -0
  494. package/dist/docs/reference/model/StarOptions.md +21 -23
  495. package/dist/docs/reference/model/SvgOrigin.md +2 -2
  496. package/dist/docs/reference/model/SvgPathSectionOptions.md +3 -5
  497. package/dist/docs/reference/model/SvgSectionOptions.md +3 -6
  498. package/dist/docs/reference/model/SweepOptions.md +109 -0
  499. package/dist/docs/reference/model/SweepOrientation.md +119 -0
  500. package/dist/docs/reference/model/SweepTransformOptions.md +105 -0
  501. package/dist/docs/reference/model/TextSectionOptions.md +2 -7
  502. package/dist/docs/reference/{geometry → model}/TorusOptions.md +11 -10
  503. package/dist/docs/reference/model/TubeOptions.md +84 -0
  504. package/dist/docs/reference/model/box.md +11 -10
  505. package/dist/docs/reference/model/categories/boolean-operations.md +9 -3
  506. package/dist/docs/reference/model/categories/bounded-surfaces.md +13 -1
  507. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +26 -7
  508. package/dist/docs/reference/model/categories/generation.md +11 -3
  509. package/dist/docs/reference/model/categories/hinges.md +7 -1
  510. package/dist/docs/reference/model/categories/mesh-inspection.md +7 -1
  511. package/dist/docs/reference/model/categories/primitives.md +34 -6
  512. package/dist/docs/reference/model/categories/sections.md +8 -2
  513. package/dist/docs/reference/model/categories/threads.md +8 -5
  514. package/dist/docs/reference/model/categories/transforms-placement.md +15 -10
  515. package/dist/docs/reference/model/circle.md +7 -3
  516. package/dist/docs/reference/model/cornerCutter.md +88 -0
  517. package/dist/docs/reference/model/cylinder.md +6 -5
  518. package/dist/docs/reference/model/edgeCutter.md +91 -0
  519. package/dist/docs/reference/model/ellipse.md +7 -3
  520. package/dist/docs/reference/model/extrude.md +29 -23
  521. package/dist/docs/reference/model/generate.md +4 -2
  522. package/dist/docs/reference/model/gridPattern.md +11 -4
  523. package/dist/docs/reference/model/heightfield.md +5 -5
  524. package/dist/docs/reference/model/holeCutter.md +26 -12
  525. package/dist/docs/reference/model/hull.md +2 -2
  526. package/dist/docs/reference/model/implicit.md +3 -3
  527. package/dist/docs/reference/model/internalThreadCutter.md +32 -21
  528. package/dist/docs/reference/model/intersect.md +7 -3
  529. package/dist/docs/reference/model/join.md +6 -2
  530. package/dist/docs/reference/model/knuckleHinge.md +2 -3
  531. package/dist/docs/reference/model/linearPattern.md +11 -4
  532. package/dist/docs/reference/model/loft.md +28 -24
  533. package/dist/docs/reference/model/minkowskiSum.md +3 -3
  534. package/dist/docs/reference/model/pathPattern.md +17 -8
  535. package/dist/docs/reference/model/polygon.md +8 -3
  536. package/dist/docs/reference/model/radialPattern.md +11 -4
  537. package/dist/docs/reference/model/rectangle.md +11 -7
  538. package/dist/docs/reference/model/regularPolygon.md +7 -3
  539. package/dist/docs/reference/model/revolve.md +18 -12
  540. package/dist/docs/reference/model/solidFromMesh.md +10 -6
  541. package/dist/docs/reference/model/sphere.md +7 -6
  542. package/dist/docs/reference/model/star.md +11 -7
  543. package/dist/docs/reference/model/stroke.md +12 -8
  544. package/dist/docs/reference/model/svgPathSection.md +10 -4
  545. package/dist/docs/reference/model/svgSection.md +10 -4
  546. package/dist/docs/reference/model/sweep.md +102 -25
  547. package/dist/docs/reference/model/textSection.md +7 -3
  548. package/dist/docs/reference/model/threadRidge.md +16 -17
  549. package/dist/docs/reference/model/threadedNut.md +25 -22
  550. package/dist/docs/reference/model/threadedRod.md +21 -18
  551. package/dist/docs/reference/model/torus.md +13 -12
  552. package/dist/docs/reference/model/tube.md +6 -5
  553. package/dist/docs/reference/model/union.md +7 -3
  554. package/dist/docs/reference/model.md +10 -5
  555. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +2 -2
  556. package/dist/docs/reference/text/VectorFont.md +38 -34
  557. package/dist/docs/reference/text/VectorFontOptions.md +2 -2
  558. package/dist/docs/reference/{geometry → text}/VectorTextArcBaseline.md +2 -11
  559. package/dist/docs/reference/{geometry → text}/VectorTextLayoutOptions.md +3 -11
  560. package/dist/docs/reference/{geometry → text}/VectorTextOptions.md +2 -10
  561. package/dist/docs/reference/text/categories/font-preparation.md +10 -1
  562. package/dist/docs/reference/text/prepareVectorFont.md +4 -2
  563. package/dist/docs/reference/text.md +7 -1
  564. package/dist/engine/execution.js +5 -3
  565. package/dist/engine/finalization.js +5 -5
  566. package/dist/engine/index.js +9 -4
  567. package/dist/engine/native/adapter.js +1 -1
  568. package/dist/engine/native/construction-mesh.js +15 -5
  569. package/dist/engine/native/context.js +10 -7
  570. package/dist/engine/native/index.js +1 -1
  571. package/dist/engine/native/material-components.js +2 -2
  572. package/dist/engine/native/mesh-observation.js +1 -1
  573. package/dist/engine/native/regions.js +44 -24
  574. package/dist/engine/native/scoped-primitives.js +3 -3
  575. package/dist/engine/native/scoped-threads.js +1 -13
  576. package/dist/engine/native/threads.js +2 -2
  577. package/dist/engine/native/transforms.js +2 -2
  578. package/dist/engine/operations/construction.js +77 -27
  579. package/dist/engine/operations/context.js +13 -6
  580. package/dist/engine/operations/cutters.js +112 -0
  581. package/dist/engine/operations/environment.js +2 -2
  582. package/dist/engine/operations/extrusion-finishing.js +42 -16
  583. package/dist/engine/operations/hole-cutter.js +125 -114
  584. package/dist/engine/operations/join-collar-profile.js +19 -19
  585. package/dist/engine/operations/join.js +86 -73
  586. package/dist/engine/operations/knuckle-hinge.js +25 -20
  587. package/dist/engine/operations/loft.js +9 -16
  588. package/dist/engine/operations/mechanical.js +4 -15
  589. package/dist/engine/operations/primitives/anchors.js +23 -19
  590. package/dist/engine/operations/primitives/construction.js +38 -12
  591. package/dist/engine/operations/primitives/correspondence.js +2 -2
  592. package/dist/engine/operations/primitives/profile-mesh.js +41 -80
  593. package/dist/engine/operations/primitives/profiles.js +5 -5
  594. package/dist/engine/operations/sections.js +8 -8
  595. package/dist/engine/operations/transforms.js +19 -39
  596. package/dist/engine/placement.js +3 -3
  597. package/dist/engine/recipe-realization.js +86 -30
  598. package/dist/engine/session/declarations.js +98 -0
  599. package/dist/engine/session/dependencies.js +81 -28
  600. package/dist/engine/session/graph.js +39 -137
  601. package/dist/engine/session/parameters.js +78 -0
  602. package/dist/engine/session/session.js +2 -2
  603. package/dist/engine/session/snapshot-cache.js +2 -2
  604. package/dist/engine/shape-anchors.js +13 -6
  605. package/dist/export/3mf.js +9 -2
  606. package/dist/export/capture.js +10 -6
  607. package/dist/export/glb.js +7 -2
  608. package/dist/export/stl.js +21 -6
  609. package/dist/geometry/{bounds.js → bounds/operations.js} +3 -1
  610. package/dist/geometry/{bounds-value.js → bounds/value.js} +20 -16
  611. package/dist/geometry/curves/evaluation.js +5 -6
  612. package/dist/geometry/curves/sampling.js +30 -6
  613. package/dist/geometry/{extrusion.js → extrusion/controls.js} +58 -35
  614. package/dist/geometry/extrusion/mesh.js +92 -0
  615. package/dist/geometry/extrusion/stations.js +35 -0
  616. package/dist/geometry/extrusion/twisted-chamfer.js +265 -0
  617. package/dist/geometry/immutable-buffer.js +7 -1
  618. package/dist/geometry/index.js +24 -32
  619. package/dist/geometry/{model-limits.js → limits.js} +1 -1
  620. package/dist/geometry/loft/{loft-correspondence.js → correspondence.js} +31 -20
  621. package/dist/geometry/loft/{loft-geometry.js → geometry.js} +15 -17
  622. package/dist/geometry/loft/mesh.js +53 -0
  623. package/dist/geometry/loft/{loft-options.js → options.js} +13 -11
  624. package/dist/geometry/loft/{loft-simple-mesh.js → simple-mesh.js} +26 -17
  625. package/dist/geometry/math/interpolation.js +9 -0
  626. package/dist/geometry/math/vector-value.js +12 -3
  627. package/dist/geometry/math/vector2.js +18 -5
  628. package/dist/geometry/math/vector3.js +28 -5
  629. package/dist/geometry/math-api.js +4 -0
  630. package/dist/geometry/mechanical/gear-motion.js +7 -5
  631. package/dist/geometry/mechanical/gears.js +21 -4
  632. package/dist/geometry/mechanical/knuckle-hinge.js +7 -5
  633. package/dist/geometry/mechanical/threads/fit.js +8 -2
  634. package/dist/geometry/mechanical/threads/helices.js +4 -2
  635. package/dist/geometry/mechanical/threads/mesh-plan.js +4 -2
  636. package/dist/geometry/mechanical/threads/mesh.js +12 -9
  637. package/dist/geometry/mechanical/threads/profiles.js +18 -4
  638. package/dist/geometry/mechanical/threads/solids.js +11 -2
  639. package/dist/geometry/mechanical-api.js +10 -0
  640. package/dist/geometry/mesh/{mesh-centroid.js → centroid.js} +2 -1
  641. package/dist/geometry/{heightfield.js → mesh/heightfield.js} +9 -5
  642. package/dist/geometry/{join-geometry.js → mesh/join-layers.js} +53 -59
  643. package/dist/geometry/mesh/{mesh.js → operations.js} +11 -18
  644. package/dist/geometry/mesh/{mesh-planar.js → planar.js} +8 -18
  645. package/dist/geometry/mesh/{mesh-quality.js → quality.js} +10 -42
  646. package/dist/geometry/mesh/{mesh-render.js → render-buffers.js} +22 -7
  647. package/dist/geometry/mesh/{mesh-signature.js → signature.js} +1 -1
  648. package/dist/geometry/mesh/{mesh-solid-intersections.js → solid-intersections.js} +2 -0
  649. package/dist/geometry/mesh/{mesh-solid.js → solid.js} +4 -4
  650. package/dist/geometry/mesh/triangle-quality.js +42 -0
  651. package/dist/geometry/mesh/winding.js +11 -0
  652. package/dist/geometry/{numeric.js → mesh/write-vertex.js} +1 -1
  653. package/dist/geometry/mesh-api.js +12 -11
  654. package/dist/geometry/paths/distribution.js +43 -0
  655. package/dist/geometry/paths/editing.js +76 -0
  656. package/dist/geometry/paths/frames.js +16 -11
  657. package/dist/geometry/paths/helix.js +1 -1
  658. package/dist/geometry/paths/resampling.js +46 -61
  659. package/dist/geometry/paths/{planar.js → rounding.js} +8 -67
  660. package/dist/geometry/paths/spline.js +116 -0
  661. package/dist/geometry/paths/traversal.js +107 -0
  662. package/dist/geometry/paths/{path-value.js → value.js} +97 -18
  663. package/dist/geometry/patterns/placements.js +20 -29
  664. package/dist/geometry/{patterns.js → patterns/transforms.js} +11 -7
  665. package/dist/geometry/primitives/cutters.js +70 -0
  666. package/dist/geometry/{cylinder.js → primitives/cylinder.js} +4 -4
  667. package/dist/geometry/{edge-finishing.js → primitives/edges.js} +5 -5
  668. package/dist/geometry/{primitive-resolvers.js → primitives/resolvers.js} +9 -9
  669. package/dist/geometry/primitives/sampling.js +41 -0
  670. package/dist/geometry/profiles/contour.js +19 -7
  671. package/dist/geometry/profiles/{match-profiles.js → matching.js} +9 -6
  672. package/dist/geometry/profiles/primitives/circle.js +1 -1
  673. package/dist/geometry/profiles/primitives/ellipse.js +2 -2
  674. package/dist/geometry/profiles/primitives/rectangle.js +8 -8
  675. package/dist/geometry/profiles/primitives/star.js +1 -1
  676. package/dist/geometry/profiles/side-profile.js +8 -5
  677. package/dist/geometry/profiles/validation.js +1 -1
  678. package/dist/geometry/{polygon-clipping.js → regions/clipping.js} +1 -1
  679. package/dist/geometry/{convex-offset.js → regions/convex-offset.js} +1 -1
  680. package/dist/geometry/{region-offset.js → regions/offset.js} +7 -5
  681. package/dist/geometry/{regions.js → regions/operations.js} +59 -22
  682. package/dist/geometry/{stroke-path.js → regions/stroke.js} +46 -20
  683. package/dist/geometry/{loft/loft-triangulation.js → regions/triangulation.js} +35 -2
  684. package/dist/geometry/revolve/{revolve-mesh.js → mesh.js} +9 -10
  685. package/dist/geometry/{circular-sampling.js → sampling/circular.js} +3 -3
  686. package/dist/geometry/{sampling-limits.js → sampling/limits.js} +6 -2
  687. package/dist/geometry/{resolution.js → sampling/resolution.js} +15 -14
  688. package/dist/geometry/svg/fill.js +4 -3
  689. package/dist/geometry/svg/import.js +47 -64
  690. package/dist/geometry/svg/path.js +3 -3
  691. package/dist/geometry/sweep/closed.js +55 -0
  692. package/dist/geometry/sweep/mesh.js +30 -0
  693. package/dist/geometry/{sweeps/sweep-open.js → sweep/open.js} +9 -24
  694. package/dist/geometry/{sweeps → sweep}/orientation.js +14 -11
  695. package/dist/geometry/sweep/seam.js +30 -0
  696. package/dist/geometry/{sweeps → sweep}/stations.js +75 -10
  697. package/dist/geometry/sweep/transforms.js +30 -0
  698. package/dist/geometry/{sweeps → sweep}/validation.js +4 -4
  699. package/dist/geometry/{text-contours.js → text/contours.js} +3 -3
  700. package/dist/geometry/{text-fitting.js → text/fitting.js} +4 -3
  701. package/dist/geometry/text/layout.js +1 -0
  702. package/dist/geometry/{transform3.js → transforms/affine3.js} +31 -46
  703. package/dist/geometry/{anchors.js → transforms/anchors.js} +43 -24
  704. package/dist/geometry/{transform-geometry.js → transforms/apply.js} +8 -5
  705. package/dist/geometry/{transform2.js → transforms/dimensions.js} +23 -19
  706. package/dist/geometry/transforms/frame.js +64 -0
  707. package/dist/geometry/{transform-matrix.js → transforms/matrix-input.js} +8 -1
  708. package/dist/geometry/{transform-value.js → transforms/value.js} +29 -11
  709. package/dist/index.js +3 -9
  710. package/dist/model/cutters.js +1 -0
  711. package/dist/model/execution-binding.js +3 -3
  712. package/dist/model/generation.js +2 -0
  713. package/dist/model/immutable-generation-data.js +2 -0
  714. package/dist/model/operations.js +130 -94
  715. package/dist/model/recipe-declaration.js +5 -7
  716. package/dist/text/index.js +3 -0
  717. package/dist/text/vector-text-layout.js +1 -0
  718. package/package.json +15 -17
  719. package/dist/api/export-3mf.d.ts +0 -2
  720. package/dist/api/export-glb.d.ts +0 -2
  721. package/dist/api/export-stl.d.ts +0 -2
  722. package/dist/docs/reference/geometry/BoxEdge.md +0 -17
  723. package/dist/docs/reference/geometry/BoxEdgeSelection.md +0 -24
  724. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +0 -25
  725. package/dist/docs/reference/geometry/CylinderOptions.md +0 -63
  726. package/dist/docs/reference/geometry/EndTreatments.md +0 -44
  727. package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +0 -144
  728. package/dist/docs/reference/geometry/ExtrudeOptions.md +0 -156
  729. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +0 -25
  730. package/dist/docs/reference/geometry/LoftMeshStation.md +0 -41
  731. package/dist/docs/reference/geometry/PrimitiveAttachment.md +0 -39
  732. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +0 -114
  733. package/dist/docs/reference/geometry/SphereOptions.md +0 -25
  734. package/dist/docs/reference/geometry/SweepOptions.md +0 -127
  735. package/dist/docs/reference/geometry/SweepOrientation.md +0 -127
  736. package/dist/docs/reference/geometry/TubeOptions.md +0 -72
  737. package/dist/docs/reference/geometry/add2.md +0 -43
  738. package/dist/docs/reference/geometry/add3.md +0 -49
  739. package/dist/docs/reference/geometry/applyTransformDirection3.md +0 -52
  740. package/dist/docs/reference/geometry/applyTransformPoint3.md +0 -50
  741. package/dist/docs/reference/geometry/categories/meshes.md +0 -68
  742. package/dist/docs/reference/geometry/composeTransform3.md +0 -51
  743. package/dist/docs/reference/geometry/cross2.md +0 -43
  744. package/dist/docs/reference/geometry/cross3.md +0 -49
  745. package/dist/docs/reference/geometry/distance2.md +0 -43
  746. package/dist/docs/reference/geometry/distance3.md +0 -43
  747. package/dist/docs/reference/geometry/dot2.md +0 -43
  748. package/dist/docs/reference/geometry/dot3.md +0 -49
  749. package/dist/docs/reference/geometry/eulerTransform3.md +0 -49
  750. package/dist/docs/reference/geometry/frameTransform3.md +0 -55
  751. package/dist/docs/reference/geometry/inverseTransform3.md +0 -41
  752. package/dist/docs/reference/geometry/length2.md +0 -37
  753. package/dist/docs/reference/geometry/length3.md +0 -37
  754. package/dist/docs/reference/geometry/lerp2.md +0 -49
  755. package/dist/docs/reference/geometry/lerp3.md +0 -49
  756. package/dist/docs/reference/geometry/normalize2.md +0 -46
  757. package/dist/docs/reference/geometry/normalize3.md +0 -46
  758. package/dist/docs/reference/geometry/projectOntoPlane3.md +0 -43
  759. package/dist/docs/reference/geometry/rotate2.md +0 -43
  760. package/dist/docs/reference/geometry/rotationTransform3.md +0 -60
  761. package/dist/docs/reference/geometry/scale2.md +0 -43
  762. package/dist/docs/reference/geometry/scale3.md +0 -49
  763. package/dist/docs/reference/geometry/scaleTransform3.md +0 -45
  764. package/dist/docs/reference/geometry/subtract2.md +0 -43
  765. package/dist/docs/reference/geometry/subtract3.md +0 -49
  766. package/dist/docs/reference/geometry/transformDeterminant3.md +0 -43
  767. package/dist/docs/reference/geometry/translationTransform3.md +0 -42
  768. package/dist/docs/reference/geometry/validateRigidTransform3.md +0 -41
  769. package/dist/docs/reference/geometry/validateTransform3.md +0 -54
  770. package/dist/docs/reference/model/Profile.md +0 -30
  771. package/dist/docs/reference/model/categories/explicit-profiles.md +0 -21
  772. package/dist/docs/reference/model/matchProfiles.md +0 -48
  773. package/dist/docs/reference/model/preflightInternalThreadCutter.md +0 -93
  774. package/dist/docs/reference/model/preflightThreadedNut.md +0 -109
  775. package/dist/docs/reference/model/preflightThreadedRod.md +0 -93
  776. package/dist/engine/operations/patterns.js +0 -47
  777. package/dist/geometry/loft/loft.js +0 -105
  778. package/dist/geometry/mechanical/index.js +0 -14
  779. package/dist/geometry/primitive-resolution.js +0 -20
  780. package/dist/geometry/svg/index.js +0 -1
  781. package/dist/geometry/sweeps/options.js +0 -29
  782. package/dist/geometry/sweeps/sweep-closed.js +0 -96
  783. package/dist/geometry/sweeps/sweep-mesh.js +0 -32
  784. /package/dist/geometry/mechanical/{standards.js → fastener-standards.js} +0 -0
  785. /package/dist/geometry/mesh/{mesh-edge-table.js → edge-table.js} +0 -0
  786. /package/dist/geometry/mesh/{mesh-types.js → types.js} +0 -0
  787. /package/dist/geometry/mesh/{mesh-view-cache.js → view-cache.js} +0 -0
  788. /package/dist/geometry/{primitive-options.js → primitives/options.js} +0 -0
  789. /package/dist/geometry/{text-layout.js → sweep/options.js} +0 -0
@@ -1,10 +1,9 @@
1
1
  import { GeometryError } from "../errors.js";
2
- import { normalizeContour, normalizeRegion, signedContourArea } from "../regions.js";
3
- import { resolveGeometryResolution } from "../resolution.js";
4
- import { assertSamplingCount } from "../sampling-limits.js";
5
- import { frameTransform3 } from "../transform3.js";
6
- import { alignLoftRows, assertLoftGrid, loftSubdivisions, sliceLoftRows, subdivideLoftRow, } from "./loft-correspondence.js";
7
- import { loftFrame, resolveLoftControls } from "./loft-options.js";
2
+ import { normalizeContour, normalizeRegion, signedContourArea } from "../regions/operations.js";
3
+ import { assertSamplingCount } from "../sampling/limits.js";
4
+ import { resolveGeometryResolution } from "../sampling/resolution.js";
5
+ import { alignLoftRows, assertLoftGrid, loftSubdivisions, sliceLoftRows, subdivideLoftRow, } from "./correspondence.js";
6
+ import { loftTransform, resolveLoftControls } from "./options.js";
8
7
  const fail = (message) => {
9
8
  throw new GeometryError("INVALID_ARGUMENT", message, { operation: "loft" });
10
9
  };
@@ -76,10 +75,9 @@ export function prepareLoftGeometry(input, options, limits, authoritative, recip
76
75
  assertSamplingCount(input.reduce((sum, station) => sum + loftProfilePointCount(station.profile), 0), "loft", 1_000_000);
77
76
  if (authoritative && controls.methods.some((method) => method !== "direct"))
78
77
  fail("Identified loft landmarks are authoritative and cannot be remapped by geometric correspondence methods.");
79
- const finalRows = input.length + controls.slices.reduce((sum, count) => sum + count, 0);
78
+ const finalRows = 1 + controls.slices.reduce((sum, count) => sum + count, 0);
80
79
  assertSamplingCount(finalRows, "loft", limits.maxPathPoints);
81
- const frames = input.map((station) => loftFrame(station));
82
- const transforms = frames.map((frame) => frameTransform3(frame));
80
+ const transforms = input.map((station) => loftTransform(station));
83
81
  const first = input[0].profile;
84
82
  if (!Array.isArray(first.components) ||
85
83
  first.components.length === 0 ||
@@ -153,21 +151,21 @@ export function prepareLoftGeometry(input, options, limits, authoritative, recip
153
151
  allSpans.push(spans);
154
152
  });
155
153
  const templates = first.components;
156
- const stationFrames = [frames[0]];
154
+ const stationTransforms = [transforms[0]];
157
155
  for (let gap = 0; gap < controls.slices.length; gap++) {
158
- // Intermediate frames are placeholders only. Their vertices use the explicit world grids.
159
- for (let index = 0; index < controls.slices[gap]; index++)
160
- stationFrames.push(frames[gap]);
161
- stationFrames.push(frames[gap + 1]);
156
+ // Intermediate placements are placeholders; vertices use the explicit world grids.
157
+ for (let index = 1; index < controls.slices[gap]; index++)
158
+ stationTransforms.push(transforms[gap]);
159
+ stationTransforms.push(transforms[gap + 1]);
162
160
  }
163
- const stations = stationFrames.map((frame, row) => {
161
+ const stations = stationTransforms.map((transform, row) => {
164
162
  let contourIndex = 0;
165
163
  const convert = (contour) => {
166
164
  const index = contourIndex++;
167
165
  return { ...contour, points: allRows[index][row].points, spans: allSpans[index] };
168
166
  };
169
167
  return {
170
- frame,
168
+ transform,
171
169
  profile: {
172
170
  components: templates.map((component) => ({
173
171
  ...component,
@@ -179,6 +177,6 @@ export function prepareLoftGeometry(input, options, limits, authoritative, recip
179
177
  });
180
178
  return {
181
179
  stations,
182
- world: stationFrames.map((_, row) => allRows.map((contour) => contour[row].world)),
180
+ world: stationTransforms.map((_, row) => allRows.map((contour) => contour[row].world)),
183
181
  };
184
182
  }
@@ -0,0 +1,53 @@
1
+ import { GeometryError } from "../errors.js";
2
+ import { resolveModelingLimits } from "../limits.js";
3
+ import { capturePath2Input, path2InputData } from "../paths/value.js";
4
+ import { assertSamplingCount } from "../sampling/limits.js";
5
+ import { pointLoftProfile, prepareLoftGeometry } from "./geometry.js";
6
+ import { simpleLoftMesh } from "./simple-mesh.js";
7
+ /**
8
+ * Lofts simple point contours at z heights or explicit affine transforms, in input order.
9
+ *
10
+ * Correspondence defaults to direct. CCW-normalized contours retain their
11
+ * seam and original vertices; unequal counts gain subdivisions or repeated fan slots.
12
+ * Both ends use ear-clipped caps, supporting concave profiles without center fans.
13
+ * Intermediate slices interpolate placed world vertices, never frame axes.
14
+ * Transformed coordinates must fit finite Float32 mesh storage.
15
+ * Path2 profiles must be closed; raw point collections are interpreted as closed.
16
+ *
17
+ * @param stations - At least two XY profiles in connection order, each with Z height or affine placement.
18
+ *
19
+ * @example Loft with explicit point correspondence
20
+ * ```ts
21
+ * const bottom = rectangleContour({ size: [20, 12] });
22
+ * const top = rectangleContour({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
23
+ * mesh.loft([{ profile: bottom, z: 0 }, { profile: top, z: 30 }], { correspondence: "reindex" });
24
+ * ```
25
+ */
26
+ export function loftMesh(stations, options = {}) {
27
+ if (typeof options !== "object" || options === null || Array.isArray(options))
28
+ throw new GeometryError("INVALID_ARGUMENT", "Loft options must be an object.", {
29
+ operation: "loftMesh",
30
+ });
31
+ const limits = resolveModelingLimits(options.limits);
32
+ if (!Array.isArray(stations) || stations.length < 2)
33
+ throw new GeometryError("INVALID_ARGUMENT", "Loft requires at least two stations.", {
34
+ operation: "loftMesh",
35
+ });
36
+ assertSamplingCount(stations.length, "loftMesh", limits.maxPathPoints);
37
+ const inputs = stations;
38
+ const input = inputs.map(({ profile, ...placement }) => ({
39
+ ...placement,
40
+ source: capturePath2Input(profile, true),
41
+ }));
42
+ assertSamplingCount(input.reduce((sum, station) => sum + station.source.count, 0), "loftMesh", 1_000_000);
43
+ let remaining = 1_000_000;
44
+ const profiles = input.map(({ source, ...placement }) => {
45
+ const points = path2InputData(source.input, true, {
46
+ maxPathPoints: Math.max(1, Math.min(limits.maxProfilePoints, remaining)),
47
+ }).points;
48
+ assertSamplingCount(points.length, "loftMesh", remaining);
49
+ remaining -= points.length;
50
+ return { ...placement, profile: pointLoftProfile(points) };
51
+ });
52
+ return simpleLoftMesh(prepareLoftGeometry(profiles, options, limits, false), limits);
53
+ }
@@ -1,21 +1,23 @@
1
1
  import { GeometryError } from "../errors.js";
2
- import { frameTransform3 } from "../transform3.js";
3
- /** @internal Resolves placement without sorting stations or interpolating their axes. */
4
- export function loftFrame(placement, operation = "loft") {
2
+ import { translationTransform3 } from "../transforms/affine3.js";
3
+ import { transform3 } from "../transforms/value.js";
4
+ /** @internal Resolves placement without sorting stations or interpolating transformations. */
5
+ export function loftTransform(placement, operation = "loft") {
5
6
  if (typeof placement !== "object" ||
6
7
  placement === null ||
7
8
  Array.isArray(placement) ||
8
- "z" in placement === "frame" in placement)
9
- throw new GeometryError("INVALID_ARGUMENT", "Each loft station must specify exactly one z or frame.", { operation });
9
+ "frame" in placement ||
10
+ ("transform" in placement && placement.transform === undefined) ||
11
+ "z" in placement === "transform" in placement)
12
+ throw new GeometryError("INVALID_ARGUMENT", "Each loft station must specify exactly one z or transform.", { operation });
10
13
  if ("z" in placement) {
11
14
  if (!Number.isFinite(placement.z))
12
15
  throw new GeometryError("NON_FINITE_VALUE", "Loft station z must be finite millimetres.", {
13
16
  operation,
14
17
  });
15
- return { origin: [0, 0, placement.z], xAxis: [1, 0, 0], yAxis: [0, 1, 0], zAxis: [0, 0, 1] };
18
+ return translationTransform3([0, 0, placement.z]);
16
19
  }
17
- frameTransform3(placement.frame);
18
- return placement.frame;
20
+ return transform3(placement.transform).toData();
19
21
  }
20
22
  /** @internal Validated controls shared by every loft construction route. */
21
23
  export function resolveLoftControls(options, stationCount) {
@@ -42,13 +44,13 @@ export function resolveLoftControls(options, stationCount) {
42
44
  if (duplicate && distribution !== "segments")
43
45
  fail("Vertex-duplication correspondence requires segments distribution.");
44
46
  const refine = expand(options.refine, stationCount, 1, "refine");
45
- const slices = expand(options.slices, stationCount - 1, 0, "slices");
47
+ const slices = expand(options.slices, stationCount - 1, 1, "slices");
46
48
  for (const count of refine)
47
49
  if (!Number.isSafeInteger(count) || count < 1)
48
50
  fail("Loft refine values must be positive safe integers.");
49
51
  for (const count of slices)
50
- if (!Number.isSafeInteger(count) || count < 0)
51
- fail("Loft slices values must be nonnegative safe integers.");
52
+ if (!Number.isSafeInteger(count) || count < 1)
53
+ fail("Loft slices values must be positive safe integers.");
52
54
  return { methods, distribution, refine, slices };
53
55
  }
54
56
  const fail = (message) => {
@@ -1,12 +1,13 @@
1
1
  import { GeometryError } from "../errors.js";
2
- import { analyzeTriangleMesh, validateTriangleMesh } from "../mesh/mesh.js";
3
- import { assertMeshAllocationWithinLimits } from "../model-limits.js";
4
- import { writeMeshVertex } from "../numeric.js";
5
- import { triangulateContour } from "./loft-triangulation.js";
2
+ import { assertMeshAllocationWithinLimits } from "../limits.js";
3
+ import { analyzeTriangleMesh } from "../mesh/operations.js";
4
+ import { reverseOwnedTriangleWinding } from "../mesh/winding.js";
5
+ import { writeMeshVertex } from "../mesh/write-vertex.js";
6
+ import { triangulateContour } from "../regions/triangulation.js";
6
7
  /** @internal Pure closed simple-contour strips, retaining repeated correspondence slots as shared physical vertices. */
7
- export function simpleLoftMesh(geometry, limits) {
8
+ export function simpleLoftMesh(geometry, limits, closed = false) {
8
9
  const count = geometry.world[0][0].length, rowCount = geometry.world.length;
9
- const maxVertices = count * rowCount, maximumTriangles = 2 * count * (rowCount - 1) + 2 * (count - 2);
10
+ const maxVertices = count * rowCount, maximumTriangles = 2 * count * (closed ? rowCount : rowCount - 1) + (closed ? 0 : 2 * (count - 2));
10
11
  const bytes = 12 * (maxVertices + maximumTriangles);
11
12
  assertMeshAllocationWithinLimits(maxVertices, maximumTriangles, bytes, "loftMesh", limits);
12
13
  const positions = new Float32Array(maxVertices * 3), indices = new Uint32Array(maximumTriangles * 3);
@@ -61,9 +62,9 @@ export function simpleLoftMesh(geometry, limits) {
61
62
  indices[cursor++] = b;
62
63
  indices[cursor++] = c;
63
64
  };
64
- for (let row = 0; row < rows.length - 1; row++)
65
+ for (let row = 0; row < (closed ? rows.length : rows.length - 1); row++)
65
66
  for (let index = 0; index < count; index++) {
66
- const next = (index + 1) % count, a = rows[row], b = rows[row + 1];
67
+ const next = (index + 1) % count, a = rows[row], b = rows[(row + 1) % rows.length];
67
68
  triangle(a.slots[index], a.slots[next], b.slots[next]);
68
69
  triangle(a.slots[index], b.slots[next], b.slots[index]);
69
70
  }
@@ -72,20 +73,28 @@ export function simpleLoftMesh(geometry, limits) {
72
73
  for (let index = 0; index < triangles.length; index += 3)
73
74
  triangle(contour.vertices[triangles[index]], contour.vertices[triangles[index + (top ? 1 : 2)]], contour.vertices[triangles[index + (top ? 2 : 1)]]);
74
75
  };
75
- cap(0, false);
76
- cap(rows.length - 1, true);
76
+ if (!closed) {
77
+ cap(0, false);
78
+ cap(rows.length - 1, true);
79
+ }
77
80
  const mesh = {
78
81
  positions: positions.slice(0, vertexCount * 3),
79
82
  indices: indices.slice(0, cursor),
80
83
  };
81
- const volume = analyzeTriangleMesh(mesh).signedVolume;
84
+ let volume;
85
+ try {
86
+ volume = analyzeTriangleMesh(mesh, { requireClosed: true }).signedVolume;
87
+ }
88
+ catch (error) {
89
+ // Preserve the zero-volume diagnostic ahead of a closure failure for collapsed lofts.
90
+ // Only invalid output needs a second traversal; successful meshes are analyzed once.
91
+ volume = analyzeTriangleMesh(mesh).signedVolume;
92
+ if (volume !== 0)
93
+ throw error;
94
+ }
82
95
  if (volume === 0)
83
96
  throw new GeometryError("DEGENERATE_GEOMETRY", "Loft stations collapse to zero enclosed volume.", { operation: "loftMesh" });
84
97
  if (volume < 0)
85
- for (let index = 0; index < mesh.indices.length; index += 3) {
86
- const b = mesh.indices[index + 1];
87
- mesh.indices[index + 1] = mesh.indices[index + 2];
88
- mesh.indices[index + 2] = b;
89
- }
90
- return validateTriangleMesh(mesh, { requireClosed: true });
98
+ reverseOwnedTriangleWinding(mesh.indices);
99
+ return mesh;
91
100
  }
@@ -0,0 +1,9 @@
1
+ /** Internal scalar interpolation with exact endpoints and finite convex combinations. */
2
+ export function interpolateCoordinate(a, b, t) {
3
+ if (t === 0)
4
+ return a;
5
+ if (t === 1)
6
+ return b;
7
+ // Opposite signs can overflow b - a even when the interpolated coordinate is finite.
8
+ return a < 0 !== b < 0 ? a * (1 - t) + b * t : a + (b - a) * t;
9
+ }
@@ -1,7 +1,7 @@
1
1
  import { GeometryError } from "../errors.js";
2
2
  import { immutableMathClass } from "./immutable-value.js";
3
3
  import { add2, cross2, distance2, dot2, length2, lerp2, normalize2, scale2, subtract2, } from "./vector2.js";
4
- import { add3, cross3, distance3, dot3, length3, lerp3, normalize3, scale3, subtract3, } from "./vector3.js";
4
+ import { add3, cross3, distance3, dot3, length3, lerp3, normalize3, projectOntoPlane3, scale3, subtract3, } from "./vector3.js";
5
5
  const finite = (value, operation) => {
6
6
  if (!Number.isFinite(value)) {
7
7
  throw new GeometryError("NON_FINITE_VALUE", "Vector coordinates and results must be finite.", {
@@ -130,6 +130,9 @@ const SpatialVector = /* @__PURE__ */ immutableMathClass(class SpatialVector {
130
130
  cross(other) {
131
131
  return new SpatialVector(cross3(this.values, operand3(other, "vector3.cross")), "vector3.cross");
132
132
  }
133
+ projectOntoPlane(normal) {
134
+ return new SpatialVector(projectOntoPlane3(this.values, normalize3(operand3(normal, "vector3.projectOntoPlane"), 0)), "vector3.projectOntoPlane");
135
+ }
133
136
  length() {
134
137
  return finite(length3(this.values), "vector3.length");
135
138
  }
@@ -148,7 +151,9 @@ const SpatialVector = /* @__PURE__ */ immutableMathClass(class SpatialVector {
148
151
  * Use transform2().applyDirection(value) for rotations and nonuniform scaling.
149
152
  *
150
153
  * Use `toData()` for frozen tuple interchange, or
151
- * [normalize2](/docs/reference/geometry/normalize2) for tuple-based normalization in numerical loops.
154
+ * [normalize2](/docs/reference/math/normalize2) for tuple-based normalization in numerical loops.
155
+ *
156
+ * @param input - Finite XY tuple or vector; coordinates are copied without changing their units.
152
157
  */
153
158
  export function vector2(input) {
154
159
  const values = operand2(input, "vector2");
@@ -162,10 +167,14 @@ export function vector2(input) {
162
167
  * Use transform3().applyDirection(value) for rotations and nonuniform scaling.
163
168
  *
164
169
  * Use `toData()` for frozen tuple interchange, or
165
- * [normalize3](/docs/reference/geometry/normalize3) for tuple-based normalization in numerical loops.
170
+ * [normalize3](/docs/reference/math/normalize3) for tuple-based normalization in numerical loops.
171
+ *
172
+ * @param input - Finite XYZ tuple or vector; coordinates are copied without changing their units.
166
173
  *
167
174
  * @example
168
175
  * ```ts
176
+ * import { vector3 } from "@metamesh/modeling/geometry";
177
+ *
169
178
  * const direction = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
170
179
  * const alignment = direction.dot([0, 0, 1]);
171
180
  * ```
@@ -1,4 +1,5 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { interpolateCoordinate } from "./interpolation.js";
2
3
  /** Adds two finite XY vectors component-wise. */
3
4
  export const add2 = (a, b) => [a[0] + b[0], a[1] + b[1]];
4
5
  /** Subtracts `b` from `a` component-wise. */
@@ -13,17 +14,20 @@ export const scale2 = (vector, scale) => [
13
14
  ];
14
15
  /** Returns the scalar dot product. */
15
16
  export const dot2 = (a, b) => a[0] * b[0] + a[1] * b[1];
16
- /** Returns the signed scalar cross product; positive means `b` is counter-clockwise from `a`. */
17
+ /** Returns the signed scalar cross product; positive means `b` is counterclockwise from `a`. */
17
18
  export const cross2 = (a, b) => a[0] * b[1] - a[1] * b[0];
18
19
  /** Returns Euclidean vector length in the vector's coordinate units. */
19
20
  export const length2 = (vector) => Math.hypot(vector[0], vector[1]);
20
21
  /** Returns Euclidean point distance without allocating an intermediate difference vector. */
21
22
  export const distance2 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1]);
22
23
  /**
23
- * Returns a unit vector; `epsilon` is a finite, non-negative length threshold (default `1e-12`).
24
+ * Returns a unit vector; `epsilon` is a finite, nonnegative length threshold (default `1e-12`).
24
25
  *
25
26
  * Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
26
27
  * `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
28
+ *
29
+ * @param vector - Vector with length greater than epsilon.
30
+ * @param epsilon - Minimum length in coordinate units; finite, nonnegative, default 1e-12.
27
31
  */
28
32
  export const normalize2 = (vector, epsilon = 1e-12) => {
29
33
  const operation = "normalize2";
@@ -53,11 +57,20 @@ export const normalize2 = (vector, epsilon = 1e-12) => {
53
57
  }
54
58
  return [vector[0] / length, vector[1] / length];
55
59
  };
56
- /** Linearly interpolates two vectors; `t` is dimensionless and may extrapolate. */
57
- export const lerp2 = (a, b, t) => add2(a, scale2(subtract2(b, a), t));
58
60
  /**
59
- * Rotates a finite vector counter-clockwise in XY by `degrees` about the origin.
61
+ * Linearly interpolates two vectors; `t` is dimensionless and may extrapolate.
62
+ *
63
+ * @param t - Unclamped fraction: 0 selects a, 1 selects b.
64
+ */
65
+ export const lerp2 = (a, b, t) => [
66
+ interpolateCoordinate(a[0], b[0], t),
67
+ interpolateCoordinate(a[1], b[1], t),
68
+ ];
69
+ /**
70
+ * Rotates a finite vector counterclockwise in XY by `degrees` about the origin.
60
71
  * Throws `NON_FINITE_VALUE` for nonfinite coordinates, angles, or derived coordinates.
72
+ *
73
+ * @param degrees - Counterclockwise angle in degrees.
61
74
  */
62
75
  export const rotate2 = (vector, degrees) => {
63
76
  if (!Number.isFinite(vector[0]) || !Number.isFinite(vector[1]) || !Number.isFinite(degrees)) {
@@ -1,8 +1,11 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { interpolateCoordinate } from "./interpolation.js";
2
3
  /**
3
4
  * Adds two finite XYZ vectors component-wise.
4
5
  * @example
5
6
  * ```ts
7
+ * import { add3 } from "@metamesh/modeling/geometry/math";
8
+ *
6
9
  * add3([1, 2, 3], [4, 5, 6]); // [5, 7, 9]
7
10
  * ```
8
11
  */
@@ -60,10 +63,13 @@ export const length3 = (vector) => Math.hypot(vector[0], vector[1], vector[2]);
60
63
  /** Returns Euclidean point distance without allocating an intermediate difference vector. */
61
64
  export const distance3 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
62
65
  /**
63
- * Returns a unit vector; `epsilon` is a finite, non-negative length threshold (default `1e-12`).
66
+ * Returns a unit vector; `epsilon` is a finite, nonnegative length threshold (default `1e-12`).
64
67
  *
65
68
  * Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
66
69
  * `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
70
+ *
71
+ * @param vector - Vector with length greater than epsilon.
72
+ * @param epsilon - Minimum length in coordinate units; finite, nonnegative, default 1e-12.
67
73
  */
68
74
  export const normalize3 = (vector, epsilon = 1e-12) => {
69
75
  const operation = "normalize3";
@@ -94,11 +100,28 @@ export const normalize3 = (vector, epsilon = 1e-12) => {
94
100
  }
95
101
  return [vector[0] / length, vector[1] / length, vector[2] / length];
96
102
  };
97
- /** Linearly interpolates two vectors; `t` is dimensionless and may extrapolate. */
98
- export const lerp3 = (a, b, t) => add3(a, scale3(subtract3(b, a), t));
99
- /** Removes the component parallel to a normalized plane normal. */
103
+ /**
104
+ * Linearly interpolates two vectors; `t` is dimensionless and may extrapolate.
105
+ *
106
+ * @param t - Unclamped fraction: 0 selects a, 1 selects b.
107
+ */
108
+ export const lerp3 = (a, b, t) => [
109
+ interpolateCoordinate(a[0], b[0], t),
110
+ interpolateCoordinate(a[1], b[1], t),
111
+ interpolateCoordinate(a[2], b[2], t),
112
+ ];
113
+ /**
114
+ * Removes the component parallel to a normalized plane normal.
115
+ *
116
+ * @param normal - Unit plane normal; used without normalization.
117
+ */
100
118
  export const projectOntoPlane3 = (vector, normal) => subtract3(vector, scale3(normal, dot3(vector, normal)));
101
- /** Rotates a vector right-handed around a unit axis by `angle` radians. */
119
+ /**
120
+ * Rotates a vector right-handed around a unit axis by `angle` radians.
121
+ *
122
+ * @param axis - Unit rotation axis; used without normalization.
123
+ * @param angle - Right-handed angle in radians.
124
+ */
102
125
  export const rotateAroundAxis3Radians = (vector, axis, angle) => {
103
126
  const cosine = Math.cos(angle);
104
127
  const sine = Math.sin(angle);
@@ -0,0 +1,4 @@
1
+ /** Tuple arithmetic and affine matrix kernels without host state. @packageDocumentation */
2
+ export { add2, subtract2, scale2, dot2, cross2, length2, distance2, normalize2, lerp2, rotate2, } from "./math/vector2.js";
3
+ export { add3, cross3, dot3, length3, distance3, lerp3, normalize3, projectOntoPlane3, scale3, subtract3, } from "./math/vector3.js";
4
+ export { IDENTITY_TRANSFORM3, applyTransformDirection3, applyTransformPoint3, multiplyTransform3, eulerTransform3, inverseTransform3, rotationTransform3, scaleTransform3, transformDeterminant3, translationTransform3, validateTransform3, validateRigidTransform3, } from "./transforms/affine3.js";
@@ -1,5 +1,5 @@
1
1
  import { GeometryError } from "../errors.js";
2
- import { polygonClipping } from "../polygon-clipping.js";
2
+ import { polygonClipping } from "../regions/clipping.js";
3
3
  import { resolveCylindricalGearPair, sampleCylindricalGearOutline, sampleInternalCylindricalGearSpaceOutline, } from "./gears.js";
4
4
  const DEFAULT_MOTION_SAMPLES = 24;
5
5
  const MAXIMUM_MOTION_SAMPLES = 360;
@@ -51,10 +51,12 @@ const multiPolygonArea = (multiPolygon) => multiPolygon.reduce((total, polygon)
51
51
  * Measures sampled kinematic interference over one tooth cycle of an internal gear pair.
52
52
  *
53
53
  * The driver and ring start with half-tooth offsets for odd tooth counts, then rotate in the
54
- * same direction at their resolved tooth-count ratio. Each
55
- * sampled pinion outline is subtracted from the ring's center-and-space opening; remaining area is
56
- * solid overlap. This catches involute, tip, and trimming interference that a single assembled pose
57
- * misses. It is a deterministic model check, not a certified gear-rating calculation.
54
+ * same direction at their resolved tooth-count ratio. Subtracting the ring's center-and-space
55
+ * opening from each sampled pinion outline leaves the area overlapping ring material. This detects
56
+ * involute, tip, and trimming interference that a single assembled pose misses.
57
+ * It is a deterministic model check, not a certified gear-rating calculation.
58
+ *
59
+ * @param spec - Internal pair: external driver pinion and internal driven ring.
58
60
  */
59
61
  export function measureInternalCylindricalGearPairMotion(spec, options = {}) {
60
62
  if (spec.mesh !== "internal") {
@@ -1,7 +1,7 @@
1
1
  import { GeometryError } from "../errors.js";
2
- import { signedContourArea } from "../regions.js";
3
- import { resolveCircularSegments, resolveGeometryResolution, } from "../resolution.js";
4
- import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
2
+ import { signedContourArea } from "../regions/operations.js";
3
+ import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling/limits.js";
4
+ import { resolveCircularSegments, resolveGeometryResolution, } from "../sampling/resolution.js";
5
5
  const DEFAULT_PRESSURE_ANGLE_DEGREES = 20;
6
6
  const DEFAULT_CLEARANCE_FACTOR = 0.25;
7
7
  const MAXIMUM_TOOTH_COUNT = 1_000;
@@ -31,6 +31,8 @@ const freezePoints = (points) => {
31
31
  *
32
32
  * The normal-plane limit is `2 / sin²(alpha_n)`. Helical gears use the standard virtual tooth
33
33
  * count `z_v = z / cos³(beta)`, so increasing helix angle can reduce the physical tooth count.
34
+ *
35
+ * @param spec - Pressure and signed helix angles in degrees; defaults are 20 and zero.
34
36
  */
35
37
  export function minimumCylindricalGearToothCountWithoutUndercut(spec = {}) {
36
38
  const pressureAngle = finite(spec.pressureAngle ?? DEFAULT_PRESSURE_ANGLE_DEGREES, "Pressure angle", "minimumCylindricalGearToothCountWithoutUndercut");
@@ -177,6 +179,8 @@ const resolveCylindricalGearDimensions = (spec, profile) => {
177
179
  * The gear axis is +Z and the returned radii describe its XY pitch plane. Inputs below the
178
180
  * pressure- and helix-dependent no-undercut tooth count are rejected because profile shift is not
179
181
  * currently supported.
182
+ *
183
+ * @param spec - Nominal gear dimensions in millimetres and degrees.
180
184
  */
181
185
  export function resolveCylindricalGear(spec) {
182
186
  return resolveCylindricalGearDimensions(spec, "external");
@@ -187,6 +191,8 @@ export function resolveCylindricalGear(spec) {
187
191
  * Both gears must use the same normal module, pressure angle, and helix-angle
188
192
  * magnitude. An external pair uses opposite helix hands; an internal pair uses
189
193
  * the same hand. The function validates those conjugate pitch invariants.
194
+ *
195
+ * @param spec - Driver and driven gears using the same normal pitch system.
190
196
  */
191
197
  export function resolveCylindricalGearPair(spec) {
192
198
  if (spec.mesh !== "external" && spec.mesh !== "internal") {
@@ -413,6 +419,8 @@ const sampleResolvedCylindricalGearOutline = (dimensions, options, operation) =>
413
419
  * The returned loop is counter-clockwise, closed implicitly without a repeated
414
420
  * seam point, and contains no holes. Its center is the origin and its axis is
415
421
  * +Z. Bore, hub, keyway, twist, and face-width choices remain generator-owned.
422
+ *
423
+ * @param spec - External gear dimensions in millimetres and degrees; undercut profiles reject.
416
424
  */
417
425
  export function sampleCylindricalGearOutline(spec, options = {}) {
418
426
  return sampleResolvedCylindricalGearOutline(resolveCylindricalGear(spec), options, "sampleCylindricalGearOutline");
@@ -424,11 +432,17 @@ export function sampleCylindricalGearOutline(spec, options = {}) {
424
432
  * dedendum above it. At the pitch circle, positive backlash widens each sampled space
425
433
  * tangentially. The returned CCW loop encloses the center and is intended to be reversed
426
434
  * when used as a region hole.
435
+ *
436
+ * @param spec - Internal ring dimensions in millimetres and degrees; backlash widens tooth spaces.
427
437
  */
428
438
  export function sampleInternalCylindricalGearSpaceOutline(spec, options = {}) {
429
439
  return sampleResolvedCylindricalGearOutline(internalCylindricalGearSpaceDimensions(resolveCylindricalGearDimensions(spec, "internal")), options, "sampleInternalCylindricalGearSpaceOutline");
430
440
  }
431
- /** Resolves a rack segment that is conjugate with the same normal cylindrical pitch system. */
441
+ /**
442
+ * Resolves a rack segment that is conjugate with the same normal cylindrical pitch system.
443
+ *
444
+ * @param spec - Rack dimensions in millimetres and degrees.
445
+ */
432
446
  export function resolveRackPitch(spec) {
433
447
  const reference = resolveCylindricalGear({
434
448
  ...(spec.backlash === undefined ? {} : { backlash: spec.backlash }),
@@ -464,6 +478,9 @@ export function resolveRackPitch(spec) {
464
478
  * The path begins and ends on the root line, omits duplicate adjacent points,
465
479
  * and leaves base thickness, mounting features, extrusion, and helical sweep to
466
480
  * the owning generator.
481
+ *
482
+ * @param spec - Rack dimensions in millimetres and degrees, along +X.
483
+ * @param limits - Sampling limits; exceeding them throws without coarsening.
467
484
  */
468
485
  export function sampleRackToothPath(spec, limits = {}) {
469
486
  const dimensions = resolveRackPitch(spec);
@@ -1,7 +1,7 @@
1
1
  import { GeometryError } from "../errors.js";
2
- import { assertPositivePrimitive, assertPrimitiveOptions } from "../primitive-resolvers.js";
3
- import { resolveAlignedCircularSegments } from "../resolution.js";
4
- import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
2
+ import { assertPositivePrimitive, assertPrimitiveOptions } from "../primitives/resolvers.js";
3
+ import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling/limits.js";
4
+ import { resolveAlignedCircularSegments } from "../sampling/resolution.js";
5
5
  /** @internal Shared fixed frame; ordinary transforms place the joint in a model. */
6
6
  export const knuckleHingeAxis = Object.freeze({
7
7
  position: Object.freeze([0, 0, 0]),
@@ -19,9 +19,11 @@ const invalid = (message) => {
19
19
  * bounds; an insufficient ceiling rejects instead of reducing quality. Exact counts are intentional
20
20
  * facets. Zero allowances describe ideal contact, not a printable running fit.
21
21
  *
22
- * Rejects nonfinite or nonpositive dimensions, invalid mode/count combinations, exhausted axial
23
- * length, missing/excessive lift-off engagement, and nonpositive conservative faceted barrel walls.
22
+ * Rejects non-finite or non-positive dimensions, invalid mode/count combinations, exhausted axial
23
+ * length, missing/excessive lift-off engagement, and non-positive conservative faceted barrel walls.
24
24
  * Manufacturing minima, strength, mounting, retention, handedness, and motion remain caller policy.
25
+ *
26
+ * @param spec - Joint dimensions in millimetres, mode, and knuckle count.
25
27
  */
26
28
  export function resolveKnuckleHinge(spec, options = {}) {
27
29
  assertPrimitiveOptions(spec, "resolveKnuckleHinge");
@@ -1,5 +1,5 @@
1
1
  import { GeometryError } from "../../errors.js";
2
- import { resolveCircularSegments, resolveGeometryResolution, } from "../../resolution.js";
2
+ import { resolveCircularSegments, resolveGeometryResolution, } from "../../sampling/resolution.js";
3
3
  import { resolveGeometryTolerance } from "../../tolerance.js";
4
4
  import { compensateThreadProfileForFaceting } from "./profiles.js";
5
5
  const frozenFit = (maleRadialInset, femaleRadialOutset, axialBacklash) => Object.freeze({ axialBacklash, femaleRadialOutset, maleRadialInset });
@@ -32,7 +32,11 @@ const validateFitPolicy = (policy) => {
32
32
  }
33
33
  return Object.freeze({ axialBacklash: axial, femaleRadialOutset: female, maleRadialInset: male });
34
34
  };
35
- /** Resolves and validates a named or caller-defined print-fit policy. */
35
+ /**
36
+ * Resolves and validates a named or caller-defined print-fit policy.
37
+ *
38
+ * @param fit - Named fit or non-negative per-side radial and total axial allowances, in millimetres.
39
+ */
36
40
  export function resolvePrintableThreadFitPolicy(fit = "normal") {
37
41
  if (typeof fit !== "string")
38
42
  return validateFitPolicy(fit);
@@ -82,6 +86,8 @@ export function compensateThreadDiameters(options) {
82
86
  *
83
87
  * An exact `circularSegments` value must already be divisible by `starts`; it is never silently
84
88
  * raised. Adaptive policies align upward and fail if that would exceed `maxSegments`.
89
+ *
90
+ * @param options - Nominal diameter, uncompensated profile, and shared mating resolution.
85
91
  */
86
92
  export function resolveThreadCircularSegments(options) {
87
93
  const operation = "resolveThreadCircularSegments";
@@ -1,10 +1,12 @@
1
1
  /** Conventional thread helix sampling, independent of surface construction. */
2
2
  import { GeometryError } from "../../errors.js";
3
- import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../../sampling-limits.js";
3
+ import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../../sampling/limits.js";
4
4
  import { assertFiniteThreadNumber } from "./profiles.js";
5
5
  /**
6
6
  * Samples evenly phased thread helices with finite `lead = pitch * starts`.
7
- * All starts together respect maxPathPoints (default 100000); excessive counts fail before allocation.
7
+ * All starts together respect `maxPathPoints`; excessive counts fail before allocation.
8
+ *
9
+ * @param options - Dimensions in millimetres; lead is pitch multiplied by starts.
8
10
  */
9
11
  export function sampleConventionalThreadHelices(options) {
10
12
  const operation = "sampleThreadHelices";
@@ -1,7 +1,7 @@
1
1
  /** Thread input resolution, end/bevel boundaries, and allocation preflight. */
2
2
  import { GeometryError } from "../../errors.js";
3
- import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "../../model-limits.js";
4
- import { resolveCircularSegments, resolveGeometryResolution, } from "../../resolution.js";
3
+ import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "../../limits.js";
4
+ import { resolveCircularSegments, resolveGeometryResolution, } from "../../sampling/resolution.js";
5
5
  import { resolveGeometryTolerance } from "../../tolerance.js";
6
6
  import { resolveBevel } from "./bevel.js";
7
7
  import { assertFiniteThreadNumber, createThreadRidgeSection, freezeThreadProfilePoints, MAX_THREAD_PROFILE_POINTS, } from "./profiles.js";
@@ -341,6 +341,8 @@ export const resolveHelicalThreadSolidMeshPreflight = (options, operation) => {
341
341
  * Successful preflight leaves generated coordinate and topology checks to mesh construction.
342
342
  *
343
343
  * See `mesh.threadSolid` for standalone mesh construction.
344
+ *
345
+ * @param options - Dimensions in millimetres and a validated profile; apply any fit compensation first.
344
346
  */
345
347
  export function preflightThreadSolidMesh(options) {
346
348
  return resolveHelicalThreadSolidMeshPreflight(options, "preflightThreadSolidMesh").preflight;