@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,7 +1,8 @@
1
1
  /** Closed ridge and complete-solid mesh construction from resolved thread plans. */
2
- import { triangulateContour } from "../../loft/loft.js";
3
- import { analyzeTriangleMesh, joinTriangleMeshes, reverseTriangleMesh, validateTriangleMesh, } from "../../mesh/mesh.js";
4
- import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../../model-limits.js";
2
+ import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../../limits.js";
3
+ import { analyzeTriangleMesh, joinTriangleMeshes, } from "../../mesh/operations.js";
4
+ import { reverseOwnedTriangleWinding } from "../../mesh/winding.js";
5
+ import { triangulateContour } from "../../regions/triangulation.js";
5
6
  import { resolveHelicalThreadMeshOptions, resolveHelicalThreadSolidMeshPreflight, } from "./mesh-plan.js";
6
7
  import { buildThreadSurfaceColumn, stitchThreadSurfaceColumns } from "./surface.js";
7
8
  const MINIMUM_TAPERED_RIDGE_HEIGHT = 0.0005;
@@ -56,13 +57,12 @@ const buildThreadRidgeComponent = (options) => {
56
57
  };
57
58
  cap(0, false);
58
59
  cap(spans, true);
59
- let mesh = {
60
+ const mesh = {
60
61
  positions: new Float32Array(positions),
61
62
  indices: new Uint32Array(indices),
62
63
  };
63
- validateTriangleMesh(mesh, { requireClosed: true });
64
64
  if (analyzeTriangleMesh(mesh, { requireClosed: true }).signedVolume < 0)
65
- mesh = reverseTriangleMesh(mesh);
65
+ reverseOwnedTriangleWinding(mesh.indices);
66
66
  return mesh;
67
67
  };
68
68
  /**
@@ -73,6 +73,8 @@ const buildThreadRidgeComponent = (options) => {
73
73
  * monotone strip, with optional intermediate rows bounded by physical `maxSegmentLength`. A
74
74
  * conservative pre-allocation estimate rejects excessive meshes before constructing position
75
75
  * arrays.
76
+ *
77
+ * @param options - Dimensions in millimetres and a validated profile; apply any fit compensation first.
76
78
  */
77
79
  export function threadSolidMesh(options) {
78
80
  const operation = "threadSolidMesh";
@@ -98,13 +100,12 @@ export function threadSolidMesh(options) {
98
100
  indices.push(bottomCenter, nextBottom, bottom, topCenter, top, nextTop);
99
101
  }
100
102
  assertMeshAllocationWithinLimits(positions.length / 3, indices.length / 3, (positions.length + indices.length) * 4, operation, resolveModelingLimits(options.limits));
101
- let mesh = {
103
+ const mesh = {
102
104
  positions: new Float32Array(positions),
103
105
  indices: new Uint32Array(indices),
104
106
  };
105
- validateTriangleMesh(mesh, { requireClosed: true });
106
107
  if (analyzeTriangleMesh(mesh, { requireClosed: true }).signedVolume < 0) {
107
- mesh = reverseTriangleMesh(mesh);
108
+ reverseOwnedTriangleWinding(mesh.indices);
108
109
  }
109
110
  return mesh;
110
111
  }
@@ -112,6 +113,8 @@ export function threadSolidMesh(options) {
112
113
  * Builds closed thread-ridge components with every profile locked to the
113
114
  * shaft's radial/axial frame. The mesh is intended for union with its
114
115
  * minor-envelope cylinder and never owns WASM objects.
116
+ *
117
+ * @param options - Dimensions in millimetres and a validated profile; apply any fit compensation first.
115
118
  */
116
119
  export function threadRidgeMesh(options) {
117
120
  const operation = "threadRidgeMesh";
@@ -1,6 +1,6 @@
1
1
  /** Periodic thread profiles and axial/radial fit compensation. */
2
2
  import { GeometryError } from "../../errors.js";
3
- import { triangulateContour } from "../../loft/loft.js";
3
+ import { triangulateContour } from "../../regions/triangulation.js";
4
4
  import { resolveGeometryTolerance } from "../../tolerance.js";
5
5
  const BUTTRESS_DEFAULT_DEPTH_RATIO = 0.66271;
6
6
  const BUTTRESS_CREST_FLAT_RATIO = 0.16316;
@@ -11,9 +11,13 @@ export const MAX_THREAD_PROFILE_POINTS = 1_024;
11
11
  /**
12
12
  * Applies axial fit allowance to a validated periodic profile.
13
13
  *
14
- * Male crests/ridges narrow by the requested backlash; female cutter ridges
15
- * widen by it. Periodic root endpoints remain fixed so pitch and lead do not
16
- * change. The returned profile is a new deeply immutable value.
14
+ * Each flank moves by one quarter of the mating pair's total backlash: male ridges narrow and
15
+ * female cutter ridges widen. Periodic root endpoints remain fixed, preserving pitch and lead.
16
+ * Changed profiles are deeply immutable; zero backlash returns the input unchanged.
17
+ *
18
+ * @param profile - Validated `[axial, radial]` profile in millimetres.
19
+ * @param axialBacklash - Nonnegative total pair allowance in millimetres, below half the pitch.
20
+ * @param role - Male ridge to narrow or female cutter ridge to widen.
17
21
  */
18
22
  export function compensateThreadProfileAxially(profile, axialBacklash, role) {
19
23
  const operation = "compensateThreadProfileAxially";
@@ -92,6 +96,12 @@ export function scaleThreadProfileRadially(profile, scale) {
92
96
  * This helper distributes the full conservative flank clearance between the male crest and female
93
97
  * root according to their available flat widths, and rejects a resolution that cannot represent
94
98
  * it exactly.
99
+ *
100
+ * @param profile - Uncompensated `[axial, radial]` profile in millimetres.
101
+ * @param axialBacklash - Nonnegative total pair allowance in millimetres, below half the pitch.
102
+ * @param role - Male ridge or female cutter receiving its share of the allowances.
103
+ * @param starts - Integer start count from 1 through 32.
104
+ * @param circularSegments - Full-circle facet count, at least 3 and divisible by starts.
95
105
  */
96
106
  export function compensateThreadProfileForFaceting(profile, axialBacklash, role, starts, circularSegments) {
97
107
  const operation = "compensateThreadProfileForFaceting";
@@ -235,8 +245,12 @@ const standardProfile = (kind, pitch, depth, root, crest, leftRun, rightRun) =>
235
245
  * values point toward the shaft. Custom paths must be finite, axially
236
246
  * non-decreasing, periodic at their endpoints, and reach radial zero.
237
247
  *
248
+ * @param spec - Profile family or custom one-pitch `[axial, radial]` path, in millimetres.
249
+ *
238
250
  * @example Printable triangular thread profile
239
251
  * ```ts
252
+ * import { threadProfile } from "@metamesh/modeling/geometry/mechanical";
253
+ *
240
254
  * threadProfile({ kind: "triangular", pitch: 1.75 });
241
255
  * ```
242
256
  */
@@ -1,8 +1,9 @@
1
1
  import { GeometryError } from "../../errors.js";
2
- import { resolveCircularSegments } from "../../resolution.js";
2
+ import { resolveCircularSegments } from "../../sampling/resolution.js";
3
3
  import { resolveGeometryTolerance } from "../../tolerance.js";
4
- import { compensateThreadDiameters, preflightThreadSolidMesh, resolveThreadCircularSegments, } from "../index.js";
5
4
  import { resolveBevel } from "./bevel.js";
5
+ import { compensateThreadDiameters, resolveThreadCircularSegments, } from "./fit.js";
6
+ import { preflightThreadSolidMesh, } from "./mesh-plan.js";
6
7
  import { compensateThreadProfileForFaceting, scaleThreadProfileRadially } from "./profiles.js";
7
8
  const THREAD_FACETING_MARGIN = 0.001;
8
9
  const resolveCompensatedThreadBevelSize = (role, compensated, style, depth) => {
@@ -11,6 +12,7 @@ const resolveCompensatedThreadBevelSize = (role, compensated, style, depth) => {
11
12
  const envelopeDiameter = role === "female" ? compensated.majorDiameter : compensated.minorDiameter;
12
13
  return envelopeDiameter / 12;
13
14
  };
15
+ /** @internal Applies shared mating allowances before role-specific bevel and mesh planning. */
14
16
  export const resolveCompensatedThreadSolidMesh = (options, role) => {
15
17
  const compensated = compensateThreadDiameters({
16
18
  nominalMajorDiameter: options.nominalMajorDiameter,
@@ -97,6 +99,8 @@ const preflightCompensatedThreadSolid = (options, role) => preflightThreadSolidM
97
99
  *
98
100
  * See `mesh.preflightThreadSolid` for standalone mesh estimates.
99
101
  * See `mesh.threadSolid` for standalone mesh construction.
102
+ *
103
+ * @param options - Nominal rod dimensions in millimetres, fit, and sampling controls.
100
104
  */
101
105
  export function preflightThreadedRodSolid(options) {
102
106
  return preflightCompensatedThreadSolid(options, "male");
@@ -111,6 +115,8 @@ export function preflightThreadedRodSolid(options) {
111
115
  *
112
116
  * See `mesh.preflightThreadSolid` for standalone mesh estimates.
113
117
  * See `mesh.threadSolid` for standalone mesh construction.
118
+ *
119
+ * @param options - Nominal cavity dimensions in millimetres, before fit and face extension.
114
120
  */
115
121
  export function preflightInternalThreadCutterSolid(options) {
116
122
  return preflightCompensatedThreadSolid(options, "female");
@@ -121,6 +127,7 @@ const throwInvalidNutScalar = (label, parameter, requirement, operation) => {
121
127
  details: { parameter },
122
128
  });
123
129
  };
130
+ /** @internal Checks nut faces and plans the compensated cutter before native allocation. */
124
131
  export const resolveThreadedNutSolid = (options, operation) => {
125
132
  // Keep these public boundary checks ahead of resolution and all Manifold body construction.
126
133
  if (!Number.isFinite(options.width) || !(options.width > 0)) {
@@ -218,6 +225,8 @@ export const resolveThreadedNutSolid = (options, operation) => {
218
225
  * Successful preflight leaves mesh validity, native construction, and manufacturing fit to later checks.
219
226
  *
220
227
  * See `mesh.preflightThreadSolid` for standalone mesh estimates.
228
+ *
229
+ * @param options - Nominal nut dimensions in millimetres, fit, and sampling controls.
221
230
  */
222
231
  export function preflightThreadedNutSolid(options) {
223
232
  return resolveThreadedNutSolid(options, "preflightThreadedNutSolid").preflight;
@@ -0,0 +1,10 @@
1
+ /** Pure mechanical dimensions, fit policies, standards, and preflight calculations. @packageDocumentation */
2
+ export { preflightThreadedRodSolid as preflightThreadedRod, preflightInternalThreadCutterSolid as preflightInternalThreadCutter, preflightThreadedNutSolid as preflightThreadedNut, } from "./mechanical/threads/solids.js";
3
+ export { minimumCylindricalGearToothCountWithoutUndercut, resolveCylindricalGear, resolveCylindricalGearPair, resolveRackPitch, sampleCylindricalGearOutline, sampleInternalCylindricalGearSpaceOutline, sampleRackToothPath, } from "./mechanical/gears.js";
4
+ export { measureInternalCylindricalGearPairMotion, } from "./mechanical/gear-motion.js";
5
+ export { METRIC_FASTENER_STANDARDS, getMetricClearanceHoleDiameter, getMetricFastenerStandard, } from "./mechanical/fastener-standards.js";
6
+ export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, threadProfile, } from "./mechanical/threads/profiles.js";
7
+ export {} from "./mechanical/threads/mesh-plan.js";
8
+ export { sampleConventionalThreadHelices as sampleThreadHelices, } from "./mechanical/threads/helices.js";
9
+ export { PRINTABLE_THREAD_FIT_POLICIES, compensateThreadDiameters, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./mechanical/threads/fit.js";
10
+ export { resolveKnuckleHinge, } from "./mechanical/knuckle-hinge.js";
@@ -1,6 +1,6 @@
1
1
  import { GeometryError } from "../errors.js";
2
2
  import { immutableMeshView } from "../immutable-buffer.js";
3
- import { analyzeTriangleMesh } from "./mesh.js";
3
+ import { analyzeTriangleMesh } from "./operations.js";
4
4
  /**
5
5
  * Computes the uniform-density volume centroid of an oriented closed solid, including cavity shells.
6
6
  *
@@ -16,6 +16,7 @@ export function computeTriangleMeshCentroid(mesh) {
16
16
  const facts = analyzeTriangleMesh(source, { requireClosed: true });
17
17
  if (!(facts.signedVolume > 0))
18
18
  throw new GeometryError("INVALID_TOPOLOGY", "A volume centroid requires positive oriented volume.", { operation: "computeTriangleMeshCentroid" });
19
+ // Translate tetrahedra near the mesh before summing moments to limit cancellation at large offsets.
19
20
  const origin = facts.bounds.min;
20
21
  const totals = [0, 0, 0], corrections = [0, 0, 0];
21
22
  for (let offset = 0; offset < source.indices.length; offset += 3) {
@@ -1,8 +1,8 @@
1
- import { GeometryError } from "./errors.js";
2
- import { vector2Data } from "./math/vector-value.js";
3
- import { validateTriangleMesh } from "./mesh/mesh.js";
4
- import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "./model-limits.js";
5
- import { writeMeshVertex } from "./numeric.js";
1
+ import { GeometryError } from "../errors.js";
2
+ import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "../limits.js";
3
+ import { vector2Data } from "../math/vector-value.js";
4
+ import { validateTriangleMesh } from "./operations.js";
5
+ import { writeMeshVertex } from "./write-vertex.js";
6
6
  function planHeightfield(options, limits) {
7
7
  const operation = "preflightHeightfield";
8
8
  if (typeof options !== "object" ||
@@ -82,6 +82,8 @@ function planHeightfield(options, limits) {
82
82
  * Successful preflight leaves height values, Float32 base storage, and generated mesh validity to
83
83
  * construction. `byteCount` covers position and index buffers, not total working memory.
84
84
  *
85
+ * @param options - Grid in millimetres; the height callback is not evaluated.
86
+ *
85
87
  * @see `mesh.heightfield`
86
88
  */
87
89
  export function preflightHeightfield(options, limits = {}) {
@@ -94,6 +96,8 @@ export function preflightHeightfield(options, limits = {}) {
94
96
  * Top winding is +Z, the base is -Z, and sides face outward. Coordinates and heights must fit
95
97
  * Float32 storage. Explicit axes are captured before sampling; shared wall vertices prevent cracks.
96
98
  *
99
+ * @param options - Grid and absolute height callback in millimetres.
100
+ *
97
101
  * @see `mesh.preflightHeightfield`
98
102
  *
99
103
  * @example Sample a closed wavy mesh
@@ -1,6 +1,6 @@
1
- import { GeometryError } from "./errors.js";
2
- import { assertMeshAllocationWithinLimits } from "./model-limits.js";
3
- import { signedContourArea } from "./regions.js";
1
+ import { GeometryError } from "../errors.js";
2
+ import { assertMeshAllocationWithinLimits } from "../limits.js";
3
+ import { signedContourArea } from "../regions/operations.js";
4
4
  /** @internal One bounded traversal budget for connection arrangement and meshing. */
5
5
  export class JoinWork {
6
6
  count;
@@ -23,9 +23,12 @@ export function clipJoinPolygon(polygon, plane) {
23
23
  }
24
24
  function clipJoinHalfPlane(polygon, distance) {
25
25
  const output = [];
26
+ if (polygon.length === 0)
27
+ return output;
28
+ let da = distance(polygon[0]);
26
29
  for (let i = 0; i < polygon.length; i++) {
27
30
  const a = polygon[i], b = polygon[(i + 1) % polygon.length];
28
- const da = distance(a), db = distance(b);
31
+ const db = distance(b);
29
32
  const aInside = da >= 0, bInside = db >= 0;
30
33
  if (aInside)
31
34
  output.push(a);
@@ -33,6 +36,7 @@ function clipJoinHalfPlane(polygon, distance) {
33
36
  const t = da / (da - db);
34
37
  output.push([a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t]);
35
38
  }
39
+ da = db;
36
40
  }
37
41
  return output;
38
42
  }
@@ -232,7 +236,8 @@ export function createJoinPolygonIndex(polygons, work, limits) {
232
236
  return result;
233
237
  };
234
238
  }
235
- /** @internal Prepare one conforming XY partition for proof and visible layers at different heights.
239
+ /**
240
+ * @internal Prepare one conforming XY partition for proof and visible layers at different heights.
236
241
  * Shared construction vertices are captured once; this does not weld or repair an input mesh.
237
242
  */
238
243
  export function prepareJoinLayer(polygons, epsilon, limits, work, options = {}) {
@@ -389,23 +394,16 @@ export function prepareJoinLayer(polygons, epsilon, limits, work, options = {})
389
394
  });
390
395
  for (let i = 0; i < face.length; i++) {
391
396
  const a = face[i], b = face[(i + 1) % face.length];
392
- const key = `${Math.min(a, b)},${Math.max(a, b)}`;
393
- const edge = edges.get(key);
394
- if (edge === undefined)
395
- edges.set(key, { a, b, count: 1 });
396
- else if (edge.a !== b || edge.b !== a || edge.count !== 1)
397
- throw new GeometryError("INVALID_TOPOLOGY", "Join partition cells reverse or repeat a shared boundary.", {
398
- operation: "join",
399
- details: { x1: points[a][0], y1: points[a][1], x2: points[b][0], y2: points[b][1] },
400
- });
401
- else
402
- edge.count++;
397
+ appendJoinEdge(edges, a, b, points);
403
398
  }
404
399
  }
400
+ // Affine support caps can drop transverse cell edges. The sampled top keeps
401
+ // every cell because its heights can vary within a single support group.
405
402
  if (options.triangulate !== undefined)
406
403
  appendJoinCaps(faces, cells.map((cell) => cell.group), points, options.triangulate, (a, b, c) => triangle(bottomTriangles, a, b, c), work);
407
404
  const realize = (top, bottom, maximumLength, upperTriangles) => {
408
405
  const positions = [], nativePositions = [], indices = [];
406
+ // Each upper vertex is immediately followed by its lower partner.
409
407
  const vertices = new Map();
410
408
  const vertex = (id) => {
411
409
  const cached = vertices.get(id);
@@ -415,38 +413,27 @@ export function prepareJoinLayer(polygons, epsilon, limits, work, options = {})
415
413
  const native = nativePoints[id], nativeHi = top(native, nativeSupportHeights?.[id]), nativeLo = bottom(native, nativeSupportHeights?.[id]);
416
414
  if (![hi, lo, nativeHi, nativeLo].every(Number.isFinite) || hi <= lo || nativeHi <= nativeLo)
417
415
  throw new GeometryError("DEGENERATE_GEOMETRY", "Join layer needs resolved positive thickness.", { operation: "join" });
418
- const pair = [positions.length / 3, positions.length / 3 + 1];
416
+ const upper = positions.length / 3;
419
417
  assertMeshAllocationWithinLimits(positions.length / 3 + 2, indices.length / 3, (positions.length + 6) * 12 + indices.length * 4, "join", limits);
420
418
  positions.push(p[0], p[1], hi, p[0], p[1], lo);
421
419
  nativePositions.push(native[0], native[1], nativeHi, native[0], native[1], nativeLo);
422
- vertices.set(id, pair);
423
- return pair;
420
+ vertices.set(id, upper);
421
+ return upper;
424
422
  };
425
423
  const append = (a, b, c) => {
426
424
  assertMeshAllocationWithinLimits(positions.length / 3, indices.length / 3 + 1, positions.length * 12 + (indices.length + 3) * 4, "join", limits);
427
425
  indices.push(a, b, c);
428
426
  };
429
427
  for (let i = 0; i < upperTriangles.length; i += 3)
430
- append(vertex(upperTriangles[i])[0], vertex(upperTriangles[i + 1])[0], vertex(upperTriangles[i + 2])[0]);
428
+ append(vertex(upperTriangles[i]), vertex(upperTriangles[i + 1]), vertex(upperTriangles[i + 2]));
431
429
  for (let i = 0; i < bottomTriangles.length; i += 3)
432
- append(vertex(bottomTriangles[i])[1], vertex(bottomTriangles[i + 1])[1], vertex(bottomTriangles[i + 2])[1]);
430
+ append(vertex(bottomTriangles[i]) + 1, vertex(bottomTriangles[i + 1]) + 1, vertex(bottomTriangles[i + 2]) + 1);
433
431
  for (const edge of edges.values()) {
434
- if (edge.count === 2)
432
+ if (edge.paired)
435
433
  continue;
436
- if (edge.count !== 1)
437
- throw new GeometryError("INVALID_TOPOLOGY", "Join chart partition overlaps.", {
438
- operation: "join",
439
- details: {
440
- count: edge.count,
441
- x1: points[edge.a][0],
442
- y1: points[edge.a][1],
443
- x2: points[edge.b][0],
444
- y2: points[edge.b][1],
445
- },
446
- });
447
434
  const a = vertex(edge.a), b = vertex(edge.b);
448
- append(a[0], a[1], b[1]);
449
- append(a[0], b[1], b[0]);
435
+ append(a, a + 1, b + 1);
436
+ append(a, b + 1, b);
450
437
  }
451
438
  assertMeshAllocationWithinLimits(positions.length / 3, indices.length / 3, positions.length * 12 + indices.length * 4, "join", limits);
452
439
  // Coarse caps need no unused partners for fine top interior vertices.
@@ -477,7 +464,7 @@ export function prepareJoinLayer(polygons, epsilon, limits, work, options = {})
477
464
  throw new GeometryError("DEGENERATE_GEOMETRY", "Join layer thickness exceeds coordinate precision.", { operation: "join" });
478
465
  compactIndices.push(a, b, c);
479
466
  }
480
- return refineJoinLayer(Float32Array.from(compact), Float64Array.from(compactNative), compactIndices, maximumLength, limits, work);
467
+ return refineJoinLayer(compact, compactNative, compactIndices, maximumLength, limits, work);
481
468
  };
482
469
  return {
483
470
  build: (top, bottom, maximumLength) => realize(top, bottom, maximumLength, topTriangles),
@@ -660,6 +647,27 @@ function triangulateJoinCell(face, points, work, append) {
660
647
  operation: "join",
661
648
  });
662
649
  }
650
+ // Shared edges must occur exactly twice with opposite winding, in both the full
651
+ // partition and each cap group. Keep paired records so a third use still rejects.
652
+ function appendJoinEdge(edges, a, b, points) {
653
+ const key = `${Math.min(a, b)},${Math.max(a, b)}`;
654
+ const previous = edges.get(key);
655
+ if (previous === undefined)
656
+ edges.set(key, { a, b, paired: false });
657
+ else if (previous.a !== b || previous.b !== a || previous.paired)
658
+ throw new GeometryError("INVALID_TOPOLOGY", "Join partition cells reverse or repeat a shared boundary.", {
659
+ operation: "join",
660
+ details: {
661
+ count: previous.paired ? 2 : 1,
662
+ x1: points[a][0],
663
+ y1: points[a][1],
664
+ x2: points[b][0],
665
+ y2: points[b][1],
666
+ },
667
+ });
668
+ else
669
+ previous.paired = true;
670
+ }
663
671
  function appendJoinCaps(faces, groups, points, triangulate, append, work) {
664
672
  const grouped = new Map();
665
673
  for (let index = 0; index < faces.length; index++) {
@@ -673,27 +681,11 @@ function appendJoinCaps(faces, groups, points, triangulate, append, work) {
673
681
  for (let i = 0; i < face.length; i++) {
674
682
  work.use();
675
683
  const a = face[i], b = face[(i + 1) % face.length];
676
- const key = `${Math.min(a, b)},${Math.max(a, b)}`;
677
- const previous = edges.get(key);
678
- if (previous === undefined)
679
- edges.set(key, { a, b, count: 1 });
680
- else if (previous.a !== b || previous.b !== a || previous.count !== 1)
681
- throw new GeometryError("INVALID_TOPOLOGY", "Join cap cells overlap or reverse lineage.", {
682
- operation: "join",
683
- details: {
684
- count: previous.count,
685
- x1: points[a][0],
686
- y1: points[a][1],
687
- x2: points[b][0],
688
- y2: points[b][1],
689
- },
690
- });
691
- else
692
- previous.count = 2;
684
+ appendJoinEdge(edges, a, b, points);
693
685
  }
694
686
  }
695
687
  for (const edges of grouped.values()) {
696
- const boundary = [...edges.values()].filter((edge) => edge.count === 1);
688
+ const boundary = [...edges.values()].filter((edge) => !edge.paired);
697
689
  const outgoing = new Map();
698
690
  for (const edge of boundary) {
699
691
  const entries = outgoing.get(edge.a);
@@ -754,22 +746,24 @@ function appendJoinCaps(faces, groups, points, triangulate, append, work) {
754
746
  }
755
747
  }
756
748
  }
757
- function refineJoinLayer(initial, initialNative, initialIndices, maximumLength, limits, work) {
749
+ function refineJoinLayer(positions, nativePositions, initialIndices, maximumLength, limits, work) {
750
+ // Inputs are owned arrays with proxy positions already rounded to Float32.
751
+ // Keep native coordinates separate until both buffers are finalized.
758
752
  if (maximumLength === undefined)
759
753
  return {
760
- positions: initial,
761
- nativePositions: initialNative,
754
+ positions: Float32Array.from(positions),
755
+ nativePositions: Float64Array.from(nativePositions),
762
756
  indices: Uint32Array.from(initialIndices),
763
757
  };
764
758
  if (!Number.isFinite(maximumLength) || maximumLength <= 0)
765
759
  throw new GeometryError("INVALID_ARGUMENT", "Join segment length must be finite and positive.", {
766
760
  operation: "join",
767
761
  });
768
- const positions = Array.from(initial);
769
- const nativePositions = Array.from(initialNative);
770
762
  let indices = initialIndices;
771
763
  const key = (a, b) => (a < b ? `${a},${b}` : `${b},${a}`);
772
764
  while (true) {
765
+ // Discover all splits before replacing faces so every incident triangle
766
+ // shares each edge midpoint, regardless of its other edge lengths.
773
767
  const midpoints = new Map();
774
768
  for (let i = 0; i < indices.length; i += 3) {
775
769
  const face = [indices[i], indices[i + 1], indices[i + 2]];
@@ -1,10 +1,11 @@
1
1
  import { GeometryError } from "../errors.js";
2
2
  import { immutableMeshView } from "../immutable-buffer.js";
3
- import { writeMeshVertex } from "../numeric.js";
4
3
  import { resolveGeometryTolerance } from "../tolerance.js";
5
- import { readTransformMatrix } from "../transform-matrix.js";
6
- import { transformDeterminant3, validateTransform3 } from "../transform3.js";
7
- import { IndexedMeshEdgeTable } from "./mesh-edge-table.js";
4
+ import { transformDeterminant3, validateTransform3 } from "../transforms/affine3.js";
5
+ import { readTransformMatrix } from "../transforms/matrix-input.js";
6
+ import { IndexedMeshEdgeTable } from "./edge-table.js";
7
+ import { reverseOwnedTriangleWinding } from "./winding.js";
8
+ import { writeMeshVertex } from "./write-vertex.js";
8
9
  function inspectTriangleMesh(mesh, options = {}, mode = "validate", topology = false) {
9
10
  // Normalize immutable storage and read raw input accessors once before traversal.
10
11
  const source = immutableMeshView(mesh);
@@ -77,6 +78,7 @@ function inspectTriangleMesh(mesh, options = {}, mode = "validate", topology = f
77
78
  };
78
79
  // Keep the two hot-loop accumulators independent and local: no mutable numeric objects escape.
79
80
  let surfaceArea = 0, areaCorrection = 0, signedVolume = 0, volumeCorrection = 0;
81
+ // A local tetrahedron origin limits cancellation when the mesh has a large world offset.
80
82
  const originX = source.positions[0] ?? 0, originY = source.positions[1] ?? 0, originZ = source.positions[2] ?? 0;
81
83
  for (let offset = 0; offset < source.indices.length; offset += 3) {
82
84
  const a = source.indices[offset], b = source.indices[offset + 1], c = source.indices[offset + 2];
@@ -157,7 +159,7 @@ export function analyzeTriangleMesh(mesh, options = {}) {
157
159
  * and non-manifold edges. It establishes edge connectivity without detecting geometric
158
160
  * self-intersections between faces. The mesh is neither mutated nor copied.
159
161
  *
160
- * @param mesh - Mesh to inspect.
162
+ * @param mesh - Raw or captured indexed buffers with complete finite XYZ vertices.
161
163
  * @param options - Empty-mesh, topology, and tolerance policy.
162
164
  * @returns The original mesh after successful validation.
163
165
  * @throws `GeometryError` When any requested invariant fails.
@@ -222,11 +224,7 @@ export function reverseTriangleMesh(mesh) {
222
224
  const source = immutableMeshView(mesh);
223
225
  validateTriangleMesh(source);
224
226
  const indices = new Uint32Array(source.indices);
225
- for (let offset = 0; offset < indices.length; offset += 3) {
226
- const second = indices[offset + 1];
227
- indices[offset + 1] = indices[offset + 2];
228
- indices[offset + 2] = second;
229
- }
227
+ reverseOwnedTriangleWinding(indices);
230
228
  return { indices, positions: new Float32Array(source.positions) };
231
229
  }
232
230
  /**
@@ -236,7 +234,7 @@ export function reverseTriangleMesh(mesh) {
236
234
  * automatically reverses every triangle. Singular transforms are rejected.
237
235
  *
238
236
  * @param mesh - Mesh to transform without mutation.
239
- * @param placement - Immutable spatial placement or canonical row-major affine matrix.
237
+ * @param placement - Frame, fluent transform, or row-major affine matrix.
240
238
  * @returns A mesh with fresh transformed positions and copied or reversed indices.
241
239
  */
242
240
  export function transformTriangleMesh(mesh, placement) {
@@ -256,12 +254,7 @@ export function transformTriangleMesh(mesh, placement) {
256
254
  ], "transformTriangleMesh");
257
255
  }
258
256
  const indices = new Uint32Array(source.indices);
259
- if (transformDeterminant3(transform) < 0) {
260
- for (let offset = 0; offset < indices.length; offset += 3) {
261
- const second = indices[offset + 1];
262
- indices[offset + 1] = indices[offset + 2];
263
- indices[offset + 2] = second;
264
- }
265
- }
257
+ if (transformDeterminant3(transform) < 0)
258
+ reverseOwnedTriangleWinding(indices);
266
259
  return validateTriangleMesh({ indices, positions });
267
260
  }
@@ -1,6 +1,7 @@
1
1
  import { GeometryError } from "../errors.js";
2
2
  import { immutableMeshView, isImmutableBuffer } from "../immutable-buffer.js";
3
- import { buildTriangleMeshQualityAnalysis, } from "./mesh-quality.js";
3
+ import { buildTriangleMeshQualityAnalysis, } from "./quality.js";
4
+ import { triangleQuality } from "./triangle-quality.js";
4
5
  const DEFAULT_MAXIMUM_FLIP_ATTEMPTS = 1_000_000;
5
6
  const DEFAULT_MAXIMUM_PATCH_TRIANGLE_COUNT = 50_000;
6
7
  const DEFAULT_MAXIMUM_PROCESSED_TRIANGLE_COUNT = 200_000;
@@ -17,6 +18,8 @@ const pointAt = (positions, vertex) => [
17
18
  positions[vertex * 3 + 1],
18
19
  positions[vertex * 3 + 2],
19
20
  ];
21
+ // Keep these kernels local to isolate V8's array-type feedback from other modeling operations.
22
+ // Shared helpers see more array representations, which can slow hot loops even when inlined.
20
23
  const subtract = (left, right) => [
21
24
  left[0] - right[0],
22
25
  left[1] - right[1],
@@ -70,22 +73,9 @@ const pairQuality = (positions, first, second) => {
70
73
  let maximumAspectRatio = 0;
71
74
  for (const triangle of [first, second]) {
72
75
  const points = triangle.map((vertex) => pointAt(positions, vertex));
73
- const edgeVectors = [
74
- subtract(points[1], points[0]),
75
- subtract(points[2], points[1]),
76
- subtract(points[0], points[2]),
77
- ];
78
- const edgeSquaredLengths = edgeVectors.map(squaredLength);
79
- const doubleArea = Math.sqrt(squaredLength(cross(edgeVectors[0], subtract(points[2], points[0]))));
80
- maximumAspectRatio = Math.max(maximumAspectRatio, doubleArea === 0
81
- ? Number.POSITIVE_INFINITY
82
- : (Math.sqrt(3) * Math.max(...edgeSquaredLengths)) / (2 * doubleArea));
83
- for (let corner = 0; corner < 3; corner += 1) {
84
- const origin = points[corner];
85
- const incoming = subtract(points[(corner + 1) % 3], origin);
86
- const outgoing = subtract(points[(corner + 2) % 3], origin);
87
- angles.push(Math.atan2(Math.sqrt(squaredLength(cross(incoming, outgoing))), dot(incoming, outgoing)));
88
- }
76
+ const quality = triangleQuality(points[0], points[1], points[2], "squared");
77
+ maximumAspectRatio = Math.max(maximumAspectRatio, quality.aspectRatio);
78
+ angles.push(...quality.angles);
89
79
  }
90
80
  angles.sort((left, right) => left - right);
91
81
  return { angles, maximumAspectRatio };
@@ -170,7 +160,7 @@ const fallbackReasonForCandidate = (before, after, boundaryEdgeKeys) => {
170
160
  * original raw mesh object. Immutable inputs produce owned raw output buffers, including unchanged
171
161
  * results. Malformed buffers and the configured analysis complexity limit throw.
172
162
  *
173
- * @param mesh - Closed, consistently wound indexed triangle mesh in arbitrary consistent units.
163
+ * @param mesh - Closed, consistently wound mesh in consistent units.
174
164
  * @param options - Patch eligibility, numeric tolerance, and deterministic work bounds.
175
165
  * @returns Optimized connectivity and before/after diagnostics, or an unchanged safe fallback.
176
166
  */