@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
@@ -221,6 +221,8 @@ function mathValueData(value) {
221
221
  throw new TypeError("Immutable math values must expose canonical data through toData().");
222
222
  return Reflect.apply(method, value, []);
223
223
  }
224
+ // Data and recipe modes copy containers; dependency mode validates them in place for memo identity.
225
+ // Recipe mode also captures accessor values and numeric buffers while retaining deferred callbacks.
224
226
  function captureValue(value, mode, validated) {
225
227
  const recipeInputs = mode === "recipe";
226
228
  const seen = new Map();
@@ -20,6 +20,9 @@ export function box(options) {
20
20
  * Neither operand moves, loses material, or changes sampling. The result has no inherited anchors.
21
21
  * This operation promises neither a circular radius, a constant bevel angle, nor global curvature continuity.
22
22
  *
23
+ * @param base - Support solid in shared modeling coordinates.
24
+ * @param feature - Positioned feature that owns the source datum.
25
+ *
23
26
  * @example Join a mounting boss
24
27
  * ```ts
25
28
  * const base = box({ size: [50, 40, 6] });
@@ -47,28 +50,92 @@ export function cylinder(options) {
47
50
  return invoke("cylinder", [options]);
48
51
  }
49
52
  /**
50
- * Declares a +Z hole or blind-pocket cutter with explicit end overrun in millimetres.
53
+ * Declares a +Z hole or blind-pocket cutter with independent opening treatments.
51
54
  *
52
55
  * @remarks
53
- * Choose exactly one circular diameter or existing Section. A 45-degree entry chamfer
54
- * supports one strictly convex contour without holes; plain profiles may have any topology.
55
- * Circular entries retain nominal frustum radii; profile entries offset the supplied polygon edges.
56
- * Circular head recesses are mutually exclusive with entryChamfer. Both overrun ends default
57
- * to zero, so the nominal bottom remains at Z=0 and blind pocket floors are preserved.
56
+ * Choose exactly one circular diameter or existing Section. Finished profiles require one
57
+ * strictly convex contour without holes; plain profiles may have any topology. Opening treatments
58
+ * widen the mouth while retaining a positive nominal throat. Circular openings also admit
59
+ * counterbores and countersinks. An omitted opening leaves that end unchanged.
60
+ * Overrun extends each terminal cross section outside Z=0..height; both ends default to zero,
61
+ * preserving blind-pocket floors. It is independent of manufacturing clearance.
58
62
  * Existing Section samples are authoritative; limits and unspecified circular sampling belong
59
63
  * to the evaluating host.
60
64
  *
61
- * @example A blind hex pocket with an open top
65
+ * @example Amber cutter · Blue blind hex pocket
62
66
  * ```ts
63
- * holeCutter({
64
- * profile: regularPolygon({ sides: 6, radius: 3.5, sizing: "face", rotation: 30 }),
65
- * height: 12, entryChamfer: 0.5, overrun: { top: 0.05 },
67
+ * import { box, generate, holeCutter, regularPolygon } from "@metamesh/modeling";
68
+ * import { transform3 } from "@metamesh/modeling/geometry";
69
+ *
70
+ * const cutter = holeCutter({
71
+ * profile: regularPolygon({ sides: 6, radius: 5, sizing: "face", rotation: 30 }),
72
+ * height: 5,
73
+ * openings: { top: { kind: "chamfer", distance: 1.5 } },
74
+ * overrun: { top: 0.05 },
66
75
  * });
76
+ * // A 3 mm floor remains beneath the pocket. Display the cutter separately on the left.
77
+ * const stock = box({ size: [22, 20, 8] }).translate([0, 0, 4]);
78
+ * const result = stock.subtract(cutter.translate([0, 0, 3]));
79
+ * export default generate(({ part }) => [
80
+ * part("cutter", { geometry: cutter, color: "#f6ad55", transform: transform3().translate([-12, -12, 0]) }),
81
+ * part("result", { geometry: result, color: "#4f83a6", transform: transform3().translate([12, 12, 0]) }),
82
+ * ]);
67
83
  * ```
68
84
  */
69
85
  export function holeCutter(options) {
70
86
  return invoke("holeCutter", [options]);
71
87
  }
88
+ /**
89
+ * Creates a cutter for one straight convex edge along +Z, with its sharp reference at XY=0.
90
+ * Position it explicitly before subtraction; the included material angle defaults to 90 degrees.
91
+ *
92
+ * @example Amber cutter · Blue rounded edge
93
+ * ```ts
94
+ * import { box, edgeCutter, generate } from "@metamesh/modeling";
95
+ * import { transform3 } from "@metamesh/modeling/geometry";
96
+ *
97
+ * const cutter = edgeCutter({ length: 18, treatment: { kind: "round", radius: 6 }, excess: 0 });
98
+ * const result = box({ size: 18, center: false }).subtract(cutter);
99
+ * // Turn the concave mask and convex result toward the viewer independently.
100
+ * export default generate(({ part }) => [
101
+ * part("cutter", { geometry: cutter.translate([-3, -3, 0]).rotate([0, 0, -90]), color: "#f6ad55", transform: transform3().translate([-11, -11, 0]) }),
102
+ * part("result", { geometry: result.translate([-9, -9, 0]).rotate([0, 0, 90]), color: "#4f83a6", transform: transform3().translate([11, 11, 0]) }),
103
+ * ]);
104
+ * ```
105
+ */
106
+ export function edgeCutter(options) {
107
+ return invoke("edgeCutter", [options]);
108
+ }
109
+ /**
110
+ * Creates a round or chamfer cutter at the origin for three perpendicular positive-axis faces.
111
+ * Complements matching edge cutters; construction, placement, and subtraction remain explicit.
112
+ *
113
+ * @example Amber corner cutter · Blue three-edge junction
114
+ * ```ts
115
+ * import { box, cornerCutter, edgeCutter, generate } from "@metamesh/modeling";
116
+ * import { transform3 } from "@metamesh/modeling/geometry";
117
+ *
118
+ * const treatment = { kind: "round", radius: 5 } as const;
119
+ * const cutter = cornerCutter({ treatment, excess: 0 });
120
+ * const edge = edgeCutter({ length: 12, treatment, excess: 0 });
121
+ * const result = box({ size: 12, center: false }).subtract([
122
+ * edge,
123
+ * edge.rotate([0, -90, 0]).translate([12, 0, 0]),
124
+ * edge.rotate([90, 0, 0]).translate([0, 12, 0]),
125
+ * cutter,
126
+ * ]);
127
+ * // Display the concave mask and completed upper junction from opposite sides.
128
+ * const view = (shape: typeof result, center: number, height: number) =>
129
+ * shape.translate([-center, -center, 0]).mirror([0, 0, 1]).translate([0, 0, height]).rotate([0, 0, 90]);
130
+ * export default generate(({ part }) => [
131
+ * part("cutter", { geometry: cutter.translate([-2.5, -2.5, 0]).rotate([0, 0, -90]), color: "#f6ad55", transform: transform3().translate([-8, -8, 0]) }),
132
+ * part("result", { geometry: view(result, 6, 12), color: "#4f83a6", transform: transform3().translate([8, 8, 0]) }),
133
+ * ]);
134
+ * ```
135
+ */
136
+ export function cornerCutter(options) {
137
+ return invoke("cornerCutter", [options]);
138
+ }
72
139
  /**
73
140
  * Hollow +Z tube.
74
141
  *
@@ -81,7 +148,8 @@ export function tube(options) {
81
148
  return invoke("tube", [options]);
82
149
  }
83
150
  /**
84
- * Origin-centered sphere.
151
+ * Origin-centered sphere with adaptive sampling that bounds spherical triangle error.
152
+ * Explicit segment requests select octahedral refinement and round up to a multiple of four.
85
153
  *
86
154
  * @example Sphere
87
155
  * ```ts
@@ -111,13 +179,15 @@ export function intersect(shapes) {
111
179
  export function hull(options) {
112
180
  return invoke("hull", [options]);
113
181
  }
114
- /** Three-dimensional Minkowski sum. */
182
+ /** Declares the three-dimensional Minkowski sum of two Solid recipes. */
115
183
  export function minkowskiSum(a, b) {
116
184
  return invoke("minkowskiSum", [a, b]);
117
185
  }
118
186
  /**
119
187
  * Imports a bounded closed indexed mesh.
120
188
  *
189
+ * @param mesh - Closed, oriented mesh in millimetres; ownership stays with the caller.
190
+ *
121
191
  * @example Mesh import
122
192
  * ```ts
123
193
  * import { solidFromMesh } from "@metamesh/modeling";
@@ -137,6 +207,8 @@ export function solidFromMesh(mesh) {
137
207
  * Closing edges are implicit. Compound contours use nonzero fill unless selected otherwise.
138
208
  * Explicit topology must be simple and disjoint; compound winding may resolve overlaps.
139
209
  *
210
+ * @param input - XY outline in millimetres, or explicit or compound topology.
211
+ *
140
212
  * @example Extrude a triangular plate
141
213
  * ```ts
142
214
  * polygon([[0, 0], [20, 0], [10, 12]]).extrude({ height: 3 });
@@ -146,12 +218,14 @@ export function polygon(input) {
146
218
  return invoke("polygon", [input]);
147
219
  }
148
220
  /**
149
- * Creates a centered-width native Section along a sampled XY path.
221
+ * Declares a centered-width Section recipe along a sampled XY path.
150
222
  *
151
- * Shares caps, joins and physical sampling with Geometry's strokeRegionData. Native union
152
- * resolves overlapping stroke primitives. Session resolution and resource ceilings apply;
223
+ * Shares caps, joins and physical sampling with Geometry's strokeRegionData. During evaluation,
224
+ * union resolves overlapping stroke primitives. Session resolution and resource ceilings apply;
153
225
  * closed paths omit the duplicated seam. Returns an immutable deferred recipe.
154
226
  *
227
+ * @param path - XY path in millimetres.
228
+ *
155
229
  * @example Extrude a rounded track
156
230
  * ```ts
157
231
  * stroke([[0, 0], [20, 0], [20, 10]], { width: 3, join: "round", cap: "round" }).extrude({ height: 2 });
@@ -168,7 +242,7 @@ export function stroke(path, options) {
168
242
  *
169
243
  * @example Round the corners
170
244
  * ```ts
171
- * rectangle({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
245
+ * rectangle({ size: [30, 20], treatment: { kind: "round", radius: 3 } }).extrude({ height: 3 });
172
246
  * ```
173
247
  */
174
248
  export function rectangle(options) {
@@ -179,7 +253,7 @@ export function rectangle(options) {
179
253
  *
180
254
  * @example Size to polygon faces
181
255
  * ```ts
182
- * circle({ diameter: 12, sizing: "face" });
256
+ * circle({ diameter: 12, sizing: "face" }).extrude({ height: 3 });
183
257
  * ```
184
258
  */
185
259
  export function circle(options) {
@@ -190,7 +264,7 @@ export function circle(options) {
190
264
  *
191
265
  * @example Ellipse by full dimensions
192
266
  * ```ts
193
- * ellipse({ size: [30, 20] });
267
+ * ellipse({ size: [30, 20] }).extrude({ height: 3 });
194
268
  * ```
195
269
  */
196
270
  export function ellipse(options) {
@@ -201,7 +275,7 @@ export function ellipse(options) {
201
275
  *
202
276
  * @example Hexagonal section
203
277
  * ```ts
204
- * regularPolygon({ radius: 10, sides: 6, sizing: "face" });
278
+ * regularPolygon({ radius: 10, sides: 6, sizing: "face" }).extrude({ height: 3 });
205
279
  * ```
206
280
  */
207
281
  export function regularPolygon(options) {
@@ -212,7 +286,7 @@ export function regularPolygon(options) {
212
286
  *
213
287
  * @example Five-point section
214
288
  * ```ts
215
- * star({ outerRadius: 12, innerRadius: 6, points: 5 });
289
+ * star({ outerRadius: 12, innerRadius: 6, points: 5 }).extrude({ height: 3 });
216
290
  * ```
217
291
  */
218
292
  export function star(options) {
@@ -222,10 +296,12 @@ export function star(options) {
222
296
  * Extrudes a filled Section or explicit corresponding contours along +Z with degree twist and top scaling.
223
297
  * Use `section.extrude(options)` in fluent sequences, or this function for generic profile inputs.
224
298
  *
299
+ * @param shape - Filled XY profile in millimetres.
300
+ *
225
301
  * @example Extrude
226
302
  * ```ts
227
- * import { extrude, matchProfiles } from "@metamesh/modeling";
228
- * import { rectangleProfile } from "@metamesh/modeling/geometry";
303
+ * import { extrude } from "@metamesh/modeling";
304
+ * import { matchProfiles, rectangleProfile } from "@metamesh/modeling/geometry";
229
305
  *
230
306
  * const [profile] = matchProfiles([rectangleProfile({ size: [30, 20] })]);
231
307
  * extrude(profile!, { height: 8 });
@@ -238,10 +314,12 @@ export function extrude(shape, options) {
238
314
  * Revolves a filled Section or explicit corresponding radial/Z contours around +Z, with caps for partial sweeps.
239
315
  * Use `section.revolve(options)` in fluent sequences, or this function for generic profile inputs.
240
316
  *
317
+ * @param shape - Profile coordinates are [radius, Z] in millimetres.
318
+ *
241
319
  * @example Revolve
242
320
  * ```ts
243
- * import { matchProfiles, revolve } from "@metamesh/modeling";
244
- * import { rectangleProfile } from "@metamesh/modeling/geometry";
321
+ * import { revolve } from "@metamesh/modeling";
322
+ * import { matchProfiles, rectangleProfile } from "@metamesh/modeling/geometry";
245
323
  *
246
324
  * // Contour coordinates are [radius, Z].
247
325
  * const [profile] = matchProfiles([rectangleProfile({ size: [4, 16], center: false })]);
@@ -254,30 +332,8 @@ export function revolve(shape, options) {
254
332
  export function loft(stations, options) {
255
333
  return invoke("loft", [stations, options]);
256
334
  }
257
- /**
258
- * Matches a profile family using operation settings over host resolution and limits.
259
- * Requires active synchronous model execution. Use Geometry's matchProfiles for standalone preparation.
260
- */
261
- export function matchProfiles(profiles, options) {
262
- return invoke("matchProfiles", [profiles, options]);
263
- }
264
- /**
265
- * Sweeps a filled Section or explicit corresponding contours using the selected frame policy.
266
- * Use `section.sweep(path, options)` in fluent sequences, or this function for generic profile inputs.
267
- *
268
- * @example Sweep
269
- * ```ts
270
- * import { matchProfiles, sweep } from "@metamesh/modeling";
271
- * import { rectangleProfile } from "@metamesh/modeling/geometry";
272
- *
273
- * const [profile] = matchProfiles([rectangleProfile({ size: [6, 3] })]);
274
- * sweep(profile!, [[0, 0, 0], [0, 0, 15], [10, 0, 25]], {
275
- * orientation: { kind: "transport", initialNormal: [0, 1, 0] },
276
- * });
277
- * ```
278
- */
279
- export function sweep(shape, path, options) {
280
- return invoke("sweep", [shape, path, options]);
335
+ export function sweep(shape, route, options = {}) {
336
+ return invoke("sweep", [shape, route, options]);
281
337
  }
282
338
  /**
283
339
  * Bounded positive-inside implicit field constructor.
@@ -315,7 +371,7 @@ export function gridPattern(...args) {
315
371
  export function pathPattern(...args) {
316
372
  return invoke("pathPattern", args);
317
373
  }
318
- /** Helical ridge mesh construction. */
374
+ /** Declares a helical ridge Solid recipe along +Z, with lengths in millimetres. */
319
375
  export function threadRidge(options) {
320
376
  return invoke("threadRidge", [options]);
321
377
  }
@@ -329,7 +385,6 @@ export function threadRidge(options) {
329
385
  * Each half's `chamfer` bevels its barrel outer rims and all web edges. Consumers own plates, screw holes,
330
386
  * pin retention, fit policy, and part placement. Added mounting material must preserve the bores.
331
387
  * No opening range or collision freedom is implied for arbitrary caller attachments.
332
- * Compiled Generator packages using this operation require runtime 10.0.0 or newer in major 10.
333
388
  *
334
389
  * @example Integral-pin hinge with two mounting webs
335
390
  * ```ts
@@ -350,7 +405,7 @@ export function knuckleHinge(options) {
350
405
  * @example Threaded rod
351
406
  * ```ts
352
407
  * import { threadedRod } from "@metamesh/modeling";
353
- * import { threadProfile } from "@metamesh/modeling/geometry";
408
+ * import { threadProfile } from "@metamesh/modeling/geometry/mechanical";
354
409
  *
355
410
  * const profile = threadProfile({ kind: "triangular", pitch: 1.75 });
356
411
  * threadedRod({ nominalMajorDiameter: 12, length: 24, profile, fit: "normal" });
@@ -362,14 +417,22 @@ export function threadedRod(options) {
362
417
  /**
363
418
  * Compensated internal threaded cutter.
364
419
  *
365
- * @example Internal thread
420
+ * @example Amber thread cutter · Blue cutaway result
366
421
  * ```ts
367
- * import { cylinder, internalThreadCutter } from "@metamesh/modeling";
368
- * import { threadProfile } from "@metamesh/modeling/geometry";
422
+ * import { box, cylinder, generate, internalThreadCutter } from "@metamesh/modeling";
423
+ * import { transform3 } from "@metamesh/modeling/geometry";
424
+ * import { threadProfile } from "@metamesh/modeling/geometry/mechanical";
425
+ *
369
426
  * const profile = threadProfile({ kind: "triangular", pitch: 1.75 });
370
427
  * const body = cylinder({ diameter: 20, height: 12, center: false });
371
428
  * const cutter = internalThreadCutter({ nominalMajorDiameter: 12, length: 12, profile });
372
- * body.subtract([cutter]);
429
+ * // Remove the front quarter of the stock to expose the actual internal thread.
430
+ * const cutaway = box({ size: [11, 11, 14], center: false }).translate([0, -11, -1]);
431
+ * const result = body.subtract([cutter, cutaway]);
432
+ * export default generate(({ part }) => [
433
+ * part("cutter", { geometry: cutter, color: "#f6ad55", transform: transform3().translate([-12, -12, 0]) }),
434
+ * part("result", { geometry: result, color: "#4f83a6", transform: transform3().translate([12, 12, 0]) }),
435
+ * ]);
373
436
  * ```
374
437
  */
375
438
  export function internalThreadCutter(options) {
@@ -381,7 +444,7 @@ export function internalThreadCutter(options) {
381
444
  * @example Threaded nut
382
445
  * ```ts
383
446
  * import { threadedNut } from "@metamesh/modeling";
384
- * import { threadProfile } from "@metamesh/modeling/geometry";
447
+ * import { threadProfile } from "@metamesh/modeling/geometry/mechanical";
385
448
  *
386
449
  * const profile = threadProfile({ kind: "triangular", pitch: 1.75 });
387
450
  * threadedNut({ nominalMajorDiameter: 12, thickness: 8, width: 20, shape: "hex", profile, fit: "normal" });
@@ -390,47 +453,16 @@ export function internalThreadCutter(options) {
390
453
  export function threadedNut(options) {
391
454
  return invoke("threadedNut", [options]);
392
455
  }
393
- /**
394
- * Checks compensated rod dimensions and conservative mesh estimates against host output limits.
395
- *
396
- * Requires active synchronous model execution and uses its resolution and limits. Returns selected
397
- * sampling and conservative row/triangle estimates without mesh buffers or native objects.
398
- * Mesh validity, native construction, and aggregate output limits are checked later.
399
- *
400
- * @see {@link threadedRod}
401
- */
402
- export function preflightThreadedRod(options) {
403
- return invoke("preflightThreadedRod", [options]);
404
- }
405
- /**
406
- * Checks compensated cutter dimensions and conservative mesh estimates against host output limits.
407
- *
408
- * Requires active synchronous model execution and uses its resolution and limits. Estimates include
409
- * the one-pitch extension beyond each requested face, without mesh buffers or native objects.
410
- * Mesh validity, native construction, and aggregate output limits are checked later.
411
- *
412
- * @see {@link internalThreadCutter}
413
- */
414
- export function preflightInternalThreadCutter(options) {
415
- return invoke("preflightInternalThreadCutter", [options]);
416
- }
417
- /**
418
- * Checks nut dimensions, chamfers, end-face wall, and the extended compensated cutter's allocation plan.
419
- *
420
- * Requires active synchronous model execution and uses its resolution and limits, without mesh
421
- * buffers or native objects. Returned thread estimates cover the cutter, excluding the body and
422
- * Boolean result. Mesh validity, native construction, and aggregate output limits are checked later.
423
- *
424
- * @see {@link threadedNut}
425
- */
426
- export function preflightThreadedNut(options) {
427
- return invoke("preflightThreadedNut", [options]);
428
- }
429
456
  /**
430
457
  * Consumes a previously prepared layout; never shapes or fetches a font.
431
458
  *
459
+ * @param layout - Prepared millimetre outlines; create the layout before generation.
460
+ *
432
461
  * @example Use a prepared text layout
433
462
  * ```ts
463
+ * import { textSection } from "@metamesh/modeling";
464
+ * import type { VectorTextLayout } from "@metamesh/modeling/geometry";
465
+ *
434
466
  * // Prepare the exact font and layout before entering build.
435
467
  * function labelSection(layout: VectorTextLayout) {
436
468
  * return textSection(layout);
@@ -443,12 +475,14 @@ export function textSection(layout, options) {
443
475
  /**
444
476
  * Imports bounded painted SVG document geometry.
445
477
  *
478
+ * @param svg - Complete SVG XML, at most 256 KiB of UTF-8.
479
+ *
446
480
  * @example Import a physical SVG rectangle
447
481
  * ```ts
448
482
  * svgSection(
449
483
  * '<svg xmlns="http://www.w3.org/2000/svg" width="30mm" height="20mm" viewBox="0 0 30 20"><rect width="30" height="20"/></svg>',
450
484
  * { origin: "center" },
451
- * );
485
+ * ).extrude({ height: 3 });
452
486
  * ```
453
487
  */
454
488
  export function svgSection(svg, options) {
@@ -457,9 +491,11 @@ export function svgSection(svg, options) {
457
491
  /**
458
492
  * Imports bounded filled SVG path data.
459
493
  *
494
+ * @param path - SVG path data, at most 1 MiB of UTF-8; omit the XML wrapper.
495
+ *
460
496
  * @example Fill an SVG path in millimetres
461
497
  * ```ts
462
- * svgPathSection("M0 0H20V12H0Z", { origin: "center", scale: 1 });
498
+ * svgPathSection("M0 0H20V12H0Z", { origin: "center", scale: 1 }).extrude({ height: 3 });
463
499
  * ```
464
500
  */
465
501
  export function svgPathSection(path, options) {
@@ -1,8 +1,8 @@
1
1
  import { GeometryError } from "../geometry/errors.js";
2
+ import { defaultModelingLimits } from "../geometry/limits.js";
2
3
  import { knuckleHingeAxis } from "../geometry/mechanical/knuckle-hinge.js";
3
- import { defaultModelingLimits } from "../geometry/model-limits.js";
4
4
  import { gridPatternPlan, linearPatternPlan, pathPatternPlan, radialPatternPlan, } from "../geometry/patterns/placements.js";
5
- import { restrictTransform3 } from "../geometry/transform2.js";
5
+ import { restrictTransform3 } from "../geometry/transforms/dimensions.js";
6
6
  import { geometryRecipe, recordGeometryRecipe, } from "./geometry-recipes.js";
7
7
  import { captureRecipeInputs } from "./immutable-generation-data.js";
8
8
  // Every public operation must explicitly choose its realization and result behavior.
@@ -11,6 +11,8 @@ const operationBehaviors = {
11
11
  box: "solid",
12
12
  cylinder: "solid",
13
13
  holeCutter: "solid",
14
+ edgeCutter: "solid",
15
+ cornerCutter: "solid",
14
16
  tube: "solid",
15
17
  sphere: "solid",
16
18
  torus: "solid",
@@ -62,10 +64,6 @@ const operationBehaviors = {
62
64
  distance: "observation",
63
65
  castSegment: "observation",
64
66
  anchor: "observation",
65
- matchProfiles: "observation",
66
- preflightThreadedRod: "observation",
67
- preflightInternalThreadCutter: "observation",
68
- preflightThreadedNut: "observation",
69
67
  split: "split",
70
68
  splitByPlane: "split",
71
69
  components: "components",
@@ -85,7 +83,7 @@ export function createRecipeContext(resolution, declaration) {
85
83
  ])));
86
84
  }
87
85
  /** Captures and validates inputs before deciding whether an operation needs native geometry now. */
88
- export function declareRecipeOperation(operation, resolution, supplied, declaration) {
86
+ function declareRecipeOperation(operation, resolution, supplied, declaration) {
89
87
  declaration.assertActive?.();
90
88
  const behavior = operationBehaviors[operation];
91
89
  if (behavior === "observation" || behavior === "components")
@@ -10,6 +10,7 @@ function serializeVectorText({ paths, metrics }) {
10
10
  const bounds = metrics.bounds;
11
11
  if (bounds === null || paths.length === 0)
12
12
  throw new GeometryError("DEGENERATE_GEOMETRY", "The selected font produced no visible glyph outlines.", { operation: "VectorFont.toSvg" });
13
+ // Text uses Y-up coordinates; SVG's viewport uses Y-down coordinates.
13
14
  const d = paths
14
15
  .map((path) => new SVGPathData(path).transform(SVGPathDataTransformer.MATRIX(1, 0, 0, -1, 0, 0)).encode())
15
16
  .join(" ");
@@ -24,6 +25,8 @@ function serializeVectorText({ paths, metrics }) {
24
25
  * Parses bounded font bytes using optional fontkit and WOFF2 peers; no font fetching occurs here.
25
26
  * Argument and resource failures use GeometryError; parser and decoder exceptions propagate unchanged.
26
27
  *
28
+ * @param bytes - Non-empty font bytes, at most 16 MiB; copied before parsing.
29
+ *
27
30
  * @example Prepare a label before building geometry
28
31
  * ```ts
29
32
  * async function prepareLabel(fontBytes: Uint8Array) {
@@ -251,6 +251,7 @@ function buildLayout(font, fontMetrics, lines, controls) {
251
251
  const clockwise = direction === "clockwise";
252
252
  if (clockwise ? radius + bounds.minY <= 0 : radius - bounds.maxY <= 0)
253
253
  fail("Arc glyph outlines cross the circle's center axis. Increase the radius or reduce text size.");
254
+ // Convert baseline arc length to an angle, then rotate the intact glyph group onto its tangent.
254
255
  const angleRadians = (centerAngle * Math.PI) / 180 + ((clockwise ? -1 : 1) * groupCenter) / radius;
255
256
  const rotationRadians = angleRadians + (clockwise ? -Math.PI / 2 : Math.PI / 2);
256
257
  const cosine = Math.cos(rotationRadians);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamesh/modeling",
3
- "version": "0.19.0",
3
+ "version": "0.20.0",
4
4
  "description": "Scoped solid modeling and pure geometry foundations for Node and browsers.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -27,7 +27,9 @@
27
27
  "dist/engine/kernel/LICENSE",
28
28
  "!dist/geometry-module.js",
29
29
  "!dist/modeling-module.js",
30
- "!dist/mesh-module.js"
30
+ "!dist/mesh-module.js",
31
+ "!dist/math-module.js",
32
+ "!dist/mechanical-module.js"
31
33
  ],
32
34
  "exports": {
33
35
  ".": {
@@ -50,23 +52,19 @@
50
52
  "types": "./dist/api/export.d.ts",
51
53
  "import": "./dist/export/index.js"
52
54
  },
53
- "./export/stl": {
54
- "types": "./dist/api/export-stl.d.ts",
55
- "import": "./dist/export/stl.js"
56
- },
57
- "./export/3mf": {
58
- "types": "./dist/api/export-3mf.d.ts",
59
- "import": "./dist/export/3mf.js"
60
- },
61
- "./export/glb": {
62
- "types": "./dist/api/export-glb.d.ts",
63
- "import": "./dist/export/glb.js"
64
- },
65
55
  "./text": {
66
56
  "types": "./dist/api/text.d.ts",
67
57
  "import": "./dist/text/index.js"
68
58
  },
69
- "./docs/manifest.json": "./dist/docs/manifest.json"
59
+ "./docs/manifest.json": "./dist/docs/manifest.json",
60
+ "./geometry/math": {
61
+ "types": "./dist/api/math.d.ts",
62
+ "import": "./dist/geometry/math-api.js"
63
+ },
64
+ "./geometry/mechanical": {
65
+ "types": "./dist/api/mechanical.d.ts",
66
+ "import": "./dist/geometry/mechanical-api.js"
67
+ }
70
68
  },
71
69
  "publishConfig": {
72
70
  "access": "public",
@@ -88,9 +86,9 @@
88
86
  "fontkit": "^2.0.4",
89
87
  "gltf-validator": "2.0.0-dev.3.10",
90
88
  "manifold-3d": "3.5.4",
91
- "rolldown": "1.2.14",
89
+ "rolldown": "1.2.15",
92
90
  "typedoc": "0.28.20",
93
- "typedoc-plugin-markdown": "4.14.0",
91
+ "typedoc-plugin-markdown": "4.14.1",
94
92
  "typescript": "6.0.3",
95
93
  "vitest": "^5.0.5",
96
94
  "woff2-encoder": "2.0.0"
@@ -1,2 +0,0 @@
1
- export { export3mf, write3mf } from "./export.js";
2
- export type { ExportDiagnostic, ExportFormat, ExportGeometry, ExportLimits, ExportMaterial, ExportOptions, ExportPart, ExportReport, ExportedFile, ExportSink, Export3mfOptions } from "./export.js";
@@ -1,2 +0,0 @@
1
- export { exportGlb, writeGlb } from "./export.js";
2
- export type { ExportDiagnostic, ExportFormat, ExportGeometry, ExportLimits, ExportMaterial, ExportOptions, ExportPart, ExportReport, ExportedFile, ExportSink, ExportGlbOptions } from "./export.js";
@@ -1,2 +0,0 @@
1
- export { exportStl, writeStl } from "./export.js";
2
- export type { ExportDiagnostic, ExportFormat, ExportGeometry, ExportLimits, ExportMaterial, ExportOptions, ExportPart, ExportReport, ExportedFile, ExportSink, ExportStlOptions } from "./export.js";
@@ -1,17 +0,0 @@
1
- # BoxEdge
2
-
3
- Box edges use +Z top, +Y front and +X right; vertical names list front/back first.
4
-
5
- **BoxEdge** = `"top-front"` \| `"top-back"` \| `"top-left"` \| `"top-right"` \| `"bottom-front"` \| `"bottom-back"` \| `"bottom-left"` \| `"bottom-right"` \| `"front-left"` \| `"front-right"` \| `"back-left"` \| `"back-right"`
6
-
7
- ## Supported imports
8
-
9
- ```ts
10
- import type { BoxEdge } from "@metamesh/modeling";
11
- ```
12
-
13
- ```ts
14
- import type { BoxEdge } from "@metamesh/modeling/geometry";
15
- ```
16
-
17
- Package: `@metamesh/modeling@0.19.0`.
@@ -1,24 +0,0 @@
1
- # BoxEdgeSelection
2
-
3
- Named individual edges or top/bottom rims and all four vertical edges.
4
-
5
- **BoxEdgeSelection** = [`BoxEdge`](BoxEdge.md) \| `"top"` \| `"bottom"` \| `"vertical"`
6
-
7
-
8
-
9
-
10
- ## Related APIs
11
-
12
- - [BoxEdge](BoxEdge.md)
13
-
14
- ## Supported imports
15
-
16
- ```ts
17
- import type { BoxEdgeSelection } from "@metamesh/modeling";
18
- ```
19
-
20
- ```ts
21
- import type { BoxEdgeSelection } from "@metamesh/modeling/geometry";
22
- ```
23
-
24
- Package: `@metamesh/modeling@0.19.0`.
@@ -1,25 +0,0 @@
1
- # BoxEdgeTreatments
2
-
3
- Independent treatments for disjoint named edge selections; overlapping selections fail.
4
-
5
- **BoxEdgeTreatments** = `Readonly`\<`Partial`\<`Record`\<[`BoxEdgeSelection`](BoxEdgeSelection.md), [`EdgeTreatment`](EdgeTreatment.md)\>\>\>
6
-
7
-
8
-
9
-
10
- ## Related APIs
11
-
12
- - [BoxEdgeSelection](BoxEdgeSelection.md)
13
- - [EdgeTreatment](EdgeTreatment.md)
14
-
15
- ## Supported imports
16
-
17
- ```ts
18
- import type { BoxEdgeTreatments } from "@metamesh/modeling";
19
- ```
20
-
21
- ```ts
22
- import type { BoxEdgeTreatments } from "@metamesh/modeling/geometry";
23
- ```
24
-
25
- Package: `@metamesh/modeling@0.19.0`.