@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,103 +1,81 @@
1
- # Choose geometry values and representations
2
-
3
- Choose filled shapes, paths, profiles, and plain data, and understand when geometry is evaluated.
4
-
5
- Choose a value by the information your next operation needs. Filled Sections and Solids represent
6
- material; paths retain traversal and closure; identified profiles retain correspondence between
7
- cross sections. Pure calculations do not need a host engine.
8
-
9
- ## Geometry vocabulary
10
-
11
- Choose the representation by the information you need to retain:
12
-
13
- | Representation | Retains | Typical use |
14
- | -------------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------ |
15
- | `Vector2` / `Vector3` | Immutable finite coordinates and arithmetic methods | Readable calculations |
16
- | `Path2` / `Path3` | Sampled points, traversal order, and closure | Trajectories and boundary queries |
17
- | `Contour` | One closed boundary's point tuples, without a repeated endpoint | Custom calculations and meshing |
18
- | `PolygonData` / `RegionData` | One exterior plus holes / a collection of filled polygons | Serialized filled topology |
19
- | `Profile` / `ProfileContour2` | Identified family topology / one closed boundary of identified spans | Correspondence across related shapes |
20
- | `CorrespondingProfile` | Shared sampled landmarks from `matchProfiles` | Loft or sweep stations |
21
- | `Section` / `Solid` | Immutable filled 2D / 3D recipes | Booleans and model construction |
22
- | `Vector2Data` / `Vector3Data`, `Path2Data` / `Path3Data` | Vector tuples and complete path records | Interchange and numerical kernels |
23
- | `Bounds2` / `Bounds3` | Immutable axis-aligned extents and measurement methods | Containment and placement queries |
24
- | `Bounds2Data` / `Bounds3Data` | Plain min/max coordinates | Measurements and interchange |
25
- | `Anchor3` | An attachment frame | Relative placement |
26
-
27
- `Section` and `Solid` describe shapes as immutable recipes. You can construct and combine them
28
- without an engine, then reuse ordinary recipes across sessions. Explicit resolution settings
29
- stay with the recipe; omitted settings use the evaluating host's defaults. The host manages
30
- evaluation caches and native kernel values.
31
-
32
- Calling `shape.components()` reads evaluated geometry. Its selected shapes, and recipes using them,
33
- can only be evaluated in their original session because the selection depends on that session's
34
- evaluated topology.
35
-
36
- Use Sections from the root module for Booleans, extrusion, sweeps, and lofts. Use `/geometry`
37
- contour factories such as `circleContour` and `rectangleContour` when custom calculations or
38
- meshing need point data. These rectangle factories share size, center, corner treatment, and
39
- sampling options:
40
-
41
- | You need | Choose | Result |
42
- | ------------------------------------------------- | --------------------------------------------------------------- | --------- |
43
- | Filled material for Booleans or extrusion | [`rectangle`](../reference/model/rectangle.md) | `Section` |
44
- | Sampled boundary coordinates | [`rectangleContour`](../reference/geometry/rectangleContour.md) | `Contour` |
45
- | Stable edge and corner identities across stations | [`rectangleProfile`](../reference/geometry/rectangleProfile.md) | `Profile` |
46
-
47
- [`polygon`](../reference/model/polygon.md) fills boundaries in four forms:
1
+ # Choose geometry representations
2
+
3
+ Move between filled shapes, paths, profiles, fluent values, and plain data without losing information.
4
+
5
+ Choose the representation that retains the information your next operation needs. A Section
6
+ retains filled material, a path retains traversal and closure, and an identified Profile retains
7
+ landmarks that can correspond across changing cross sections.
8
+
9
+ For ordinary parts, start with Sections and Solids. Use the other representations when a
10
+ calculation or construction needs their extra information.
11
+
12
+ ## Material, boundaries, and matching profiles
13
+
14
+ | You need | Choose | Example or next step |
15
+ | ------------------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------- |
16
+ | Filled 2D material for Booleans or extrusion | `Section` | [`rectangle({ size: [30, 20] })`](../reference/model/rectangle.md) |
17
+ | Filled 3D material for a finished part | `Solid` | [`box({ size: [30, 20, 6] })`](../reference/model/box.md) |
18
+ | One closed boundary as sampled coordinates | `Contour` | [`rectangleContour({ size: [30, 20] })`](../reference/geometry/rectangleContour.md) |
19
+ | Ordered samples with explicit closure and queries | `Path2` or `Path3` | [Path queries and round trips](#keep-path-closure-and-traversal) |
20
+ | Stable corners, seams, or holes across stations | `Profile`, then `CorrespondingProfile` | [Sweeps and lofts](sweeps-and-lofts.md#matched-section-loft) |
21
+ | Triangle buffers for a renderer or algorithm | `TriangleMesh` | [Mesh API](../reference/mesh.md) |
22
+
23
+ A `Contour` does not repeat its first point at the end. `PolygonData` stores an exterior and its
24
+ holes; `RegionData` stores a collection of filled polygons. These are plain coordinate data,
25
+ while a Section describes filled geometry that can be combined and evaluated.
26
+
27
+ [`polygon`](../reference/model/polygon.md) captures those boundaries as a Section:
48
28
 
49
29
  - `polygon(points)` fills one contour.
50
30
  - `polygon({ outer, holes })` validates exterior/hole topology and normalizes winding.
51
- - `polygon({ contours, fillRule })` resolves compound paths with `"nonzero"` fill by default or
31
+ - `polygon({ contours, fillRule })` resolves compound paths, using `"nonzero"` by default or
52
32
  explicit `"evenodd"` fill.
53
33
  - `polygon({ polygons: data })` accepts existing `RegionData`.
54
34
 
55
- Each returns a `Section`, like `circle` or `rectangle`. Later Booleans may produce holes or
56
- disconnected components. Use `section.toRegionData()` inside synchronous generation to read
57
- the evaluated shape; keep serialized point data for interchange or calculations outside generation.
58
-
59
- `rectangleProfile({ size: [width, height], treatment: { kind: "round", radius }, id })` describes
60
- identified spans for custom geometry. Use `matchProfiles` to prepare a complete family when loft
61
- stations or a sweep need holes, seams, or landmarks beyond ordinary primitives.
35
+ For a straightforward plate, subtract holes from a Section and extrude it. Use
36
+ [`rectangleProfile`](../reference/geometry/rectangleProfile.md) and
37
+ [`matchProfiles`](../reference/geometry/matchProfiles.md) when related stations need explicit
38
+ correspondence. Profile IDs identify components, contours, and spans; matching preserves those
39
+ landmarks while preparing a shared sampling grid. See the
40
+ [loft guide](sweeps-and-lofts.md#matched-section-loft) for the topology requirements.
62
41
 
63
- Identified spans also accept cubic Béziers with the same endpoints and controls as
64
- [`CubicBezierCurve2`](../reference/geometry/CubicBezierCurve2.md). Paired spans share one parameter
65
- grid; physical sampling refines every member before choosing the family count. Collapsed spans
66
- retain repeated logical slots, while the completed loft removes degenerate faces.
42
+ ## Fluent values, plain data, and descriptors
67
43
 
68
- ## Choose fluent values or standalone algorithms
44
+ Import geometric values from `@metamesh/modeling/geometry`. They provide immutable methods for
45
+ calculations and placement:
69
46
 
70
- ### Convert representations deliberately
47
+ | Value | Plain representation | Useful operations |
48
+ | --------------------------- | --------------------------------------------------------- | --------------------------------------------------------- |
49
+ | `Vector2` / `Vector3` | `Vector2Data` / `Vector3Data`: coordinate tuples | Arithmetic, normalization, distance, projection |
50
+ | `Transform2` / `Transform3` | `Transform2Data` / `Transform3Data`: canonical matrices | Composition, inversion, point/direction/normal transforms |
51
+ | `Bounds2` / `Bounds3` | `Bounds2Data` / `Bounds3Data`: min/max records | Size, center, containment |
52
+ | `Path2` / `Path3` | `Path2Data` / `Path3Data`: points, dimension, and closure | Length, closest point, transformation, resampling |
71
53
 
72
- | From | Conversion | Evaluation and ownership |
73
- | -------------------------- | ---------------------------------------------- | -------------------------------------------------------------- |
74
- | `Contour` / `RegionData` | `polygon(...)` to `Section` | Captures a recipe without an engine |
75
- | `Section` | `section.toRegionData()` | Observes evaluated geometry inside a host execution |
76
- | `Profile` | `matchProfiles(...)` | Pure matching retains identified boundaries and landmarks |
77
- | Closed `Path2` / `Contour` | `mesh.extrude(...)` to `TriangleMesh` | Pure mesh construction; no `ends` treatments |
78
- | `TriangleMesh` | `solidFromMesh(...)` to `Solid` | Captures a recipe; native validation happens during evaluation |
79
- | `Solid` / `TriangleMesh` | `part(...)`, then an engine run to `ModelPart` | Host finalizes durable immutable manufacturing buffers |
80
- | `ModelPart` | Pass directly to mesh analysis or `export3mf` | No live session needed; use buffer `copy()` before mutation |
54
+ `toData()` returns a stable, deeply frozen plain representation. The matching factory accepts
55
+ that data again. An `Input` type describes the values, data, and construction shorthand accepted
56
+ by a particular operation; check its contract when crossing representations.
81
57
 
82
- Pure extrusion uses `ExtrudeMeshOptions` for height, centering, twist, top scale, and sampling.
83
- Native `Section.extrude` also supports `ends` through `ExtrudeOptions`; requesting them from
84
- `mesh.extrude` throws instead of silently returning unfinished geometry.
58
+ Value queries return matching fluent values: a bound's `min`, `max`, `center()`, and `size()` are
59
+ vectors; a path's `bounds()` is a bounds value, or `undefined` when the path is empty.
60
+ Inspection reports, serialized regions, mesh measurements, and engine snapshots use plain data.
61
+ Wrap that data with `bounds3(...)` or another matching factory when you need fluent queries.
85
62
 
86
- Use methods for ordinary composition and queries on a value, such as `path.transform(...)`,
87
- `path.closestPoint(...)`, or `vector.normalize()`. Use standalone algorithms for specialized
88
- outputs, such as [`computeParallelTransportFrames`](../reference/geometry/computeParallelTransportFrames.md),
89
- [`mesh.sweep`](../reference/mesh/sweep.md), or
90
- [`resolveCylindricalGear`](../reference/geometry/resolveCylindricalGear.md).
63
+ Not every factory creates a fluent value. `Frame3` and `Anchor3` are validated, frozen plain
64
+ geometric descriptors. A Profile describes identified geometry; a Section or Solid describes a
65
+ modeling recipe. They keep names that describe their role rather than adopting `Data` merely
66
+ because they are records.
91
67
 
92
- ### Fluent vector and tuple arithmetic
68
+ ### Choose arithmetic for the job
93
69
 
94
- Tuple kernels remain useful in numerical loops. The same arithmetic can be written in either form:
70
+ Methods make ordinary calculations easy to follow. Tuple kernels from
71
+ [`@metamesh/modeling/geometry/math`](../reference/math.md) are useful when processing coordinate
72
+ arrays or interoperating with another numerical system:
95
73
 
96
74
 
97
75
 
98
76
  ```ts
99
- import { vector3 } from "@metamesh/modeling";
100
- import { add3, normalize3, scale3 } from "@metamesh/modeling/geometry";
77
+ import { vector3 } from "@metamesh/modeling/geometry";
78
+ import { add3, normalize3, scale3 } from "@metamesh/modeling/geometry/math";
101
79
 
102
80
  export const fluentDirection = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
103
81
  export const tupleDirection = scale3(normalize3(add3([1, 2, 3], [4, 0, 0])), 10);
@@ -106,41 +84,96 @@ export const tupleDirection = scale3(normalize3(add3([1, 2, 3], [4, 0, 0])), 10)
106
84
 
107
85
 
108
86
 
109
- Fluent vectors validate finite inputs and results and allocate immutable values. Basic tuple
110
- arithmetic such as `add3` avoids those wrappers and assumes valid inputs; overflow can produce
111
- nonfinite results. Individual kernels document additional checks, such as zero-length rejection
112
- in `normalize3`.
87
+ Both examples calculate the same direction. Fluent vectors validate finite inputs and results
88
+ and allocate immutable values. Basic tuple arithmetic such as `add3` assumes valid inputs;
89
+ overflow can produce nonfinite results. Individual kernels document additional checks, such as
90
+ zero-length rejection in `normalize3`.
91
+
92
+ Use a value's methods for composition and common queries, including
93
+ `vector3(...).projectOntoPlane(normal)`. Specialized algorithms such as
94
+ [`computeParallelTransportFrames`](../reference/geometry/computeParallelTransportFrames.md) and
95
+ [`mesh.sweep`](../reference/mesh/sweep.md) remain standalone functions.
96
+
97
+ ## Frames, anchors, and transforms
98
+
99
+ Choose a frame when the origin and orthonormal axes express your datum. Choose a transform when
100
+ you need to compose placement or include affine deformation:
101
+
102
+ | Known information | Construction |
103
+ | ------------------------------- | ------------------------------------------------------- |
104
+ | Rotation, translation, or scale | `transform3().rotate([0, 0, 45]).translate([0, 0, 30])` |
105
+ | An existing canonical matrix | `transform3(matrix)` |
106
+ | An origin and coordinate axes | `frame3({ origin, xAxis, yAxis, zAxis })` |
107
+ | A mating position and direction | `anchor3({ position, direction, up })` |
108
+
109
+ [`frame3`](../reference/geometry/frame3.md) copies and deeply freezes its record and coordinate
110
+ tuples. Origins use millimetres; axes must form a right-handed orthonormal basis. Only accepted
111
+ numerical roundoff is normalized. Scaled, skewed, or left-handed bases reject.
112
+
113
+ `transform3(frame)` provides affine methods for a frame. `Transform3Input` accepts `Frame3`, a
114
+ fluent `Transform3`, or canonical matrix data. Pass those inputs directly to compatible shapes,
115
+ loft stations, sweeps, and parts. Final part placement permits translation and proper rotation;
116
+ geometry operations also accept affine deformation. Helpers such as `gridPatternTransforms` and
117
+ `attachmentTransform3` return fluent transforms that can be passed on directly.
118
+
119
+ Use `transform3(frame).toData()` when a numerical algorithm needs matrix coefficients. Obtain
120
+ that data once per station, rather than allocating a fluent result for each point. Freezing a
121
+ frame does not freeze a containing Profile or array; prepare those inputs separately before
122
+ using them as memo arguments.
123
+
124
+ The [placement guide](transforms-and-placement.md) covers composition order, pivots,
125
+ normal transforms, patterns, and attachment.
126
+
127
+ ## Keep path closure and traversal
128
+
129
+ Use `path2(points, { closed: true })` or `path3(points, { closed: true })` when closure is part of
130
+ the geometry. `length()` includes the closing edge, without a repeated endpoint.
131
+
113
132
 
114
- ## Value and data naming
115
133
 
116
- Modeling values use domain names such as `Vector2`, `Transform2`, `Path2`, and `Bounds2`.
117
- Their plain representations consistently use `Data`: `Vector2Data`, `Transform2Data`,
118
- `Path2Data`, and `Bounds2Data`. Each value exposes `toData()` for a stable, deeply frozen
119
- representation, and its factory accepts that data again. `Input` types describe accepted values,
120
- data, and any supported construction shorthand.
134
+ ```ts
135
+ // Both paths include the closing edge and have length 40 mm.
136
+ ```
121
137
 
122
- Vector data is a coordinate tuple, transform data a canonical matrix, bounds data a min/max record,
123
- and path data a record with `dimension`, `points`, and `closed`. Use `path.toData().points`
124
- when a numerical algorithm needs only coordinates; keep the full record when closure matters too.
125
- Options, reports, geometry descriptors, and recipes keep their own descriptive names. Use
126
- `toMesh()` or `toRegionData()` during active host execution to evaluate a Solid as a triangle mesh
127
- or a Section as a region.
128
138
 
129
- ## Query paths and preserve closure
130
139
 
131
- Use `path2(points, { closed: true })` or `path3(points, { closed: true })` for a reusable boundary.
132
- `length()` includes the closing edge. [`closestPoint`](../reference/geometry/Path3-type.md#closestpoint)
133
- returns a [`PathLocation`](../reference/geometry/PathLocation.md): a fluent `point`, `distance` in
140
+ [`closestPoint`](../reference/geometry/Path3-type.md#closestpoint) returns a
141
+ [`PathLocation`](../reference/geometry/PathLocation.md): a fluent `point`, `distance` in
134
142
  millimetres, `edgeIndex`, and clamped `fraction` within that edge. Equal-distance ties select the
135
- first edge in traversal order. The fraction is local to an edge; it is not a whole-path or analytic
136
- curve parameter.
143
+ first edge in traversal order. That fraction is local to an edge; it is not a whole-path or
144
+ analytic-curve parameter.
145
+
146
+ Keep the complete `toData()` record when restoring a path: it contains `dimension`, `points`, and
147
+ `closed`. Use `path.toData().points` only when the receiving algorithm needs coordinates alone.
148
+ Open paths may be empty; their bounds are `undefined`, and nearest-edge queries require at least
149
+ two vertices. Queries measure the sampled boundary, not a filled interior or underlying curve.
150
+
151
+ Chain `transform`, `reverse`, and equal-distance `resample` to produce new paths. Reflection
152
+ preserves traversal order. `polygon(path)` requires a closed planar path and establishes
153
+ exterior/hole winding. Stroke, sweep, and path-pattern operations accept paths in their matching
154
+ dimension. Authored point collections accept fluent vectors or tuples; serialized data uses tuples.
155
+
156
+ Use `atDistance(distance)` to query an offset in model units, or `atFraction(fraction)` for progress
157
+ from zero to one measured by arc length. Both return a `PathStation` with a fluent point and unit
158
+ tangent, the arc-length `offset`, and the original edge index and local fraction. Zero-length edges
159
+ are skipped. Exact interior vertices use their outgoing edge; an open final endpoint uses its
160
+ incoming edge. A closed path's full length selects its outgoing seam. Path distribution and tangent
161
+ patterns follow the same convention. Out-of-range queries and paths with no usable edge reject.
162
+
163
+ `splitAt(distance)` cuts strictly inside one traversal and returns two open paths. `trim(start, end)`
164
+ extracts a strictly increasing range within that traversal as an open path. Both retain original
165
+ interior vertices and use the authored seam for closed paths. Trimming a complete closed traversal
166
+ returns an open path with its first point repeated at the end.
137
167
 
138
- ### Path coordinate round trip
168
+ Use `subdivide({ maxSegmentLength })` to refine each edge while retaining every original vertex.
169
+ Equal-distance `resample` can bridge corners; subdivision preserves them. Both enforce their
170
+ selected sampling ceilings without reducing requested detail. A resampling count that would repeat
171
+ a closed seam rejects rather than returning invalid path data.
139
172
 
140
173
 
141
174
 
142
175
  ```ts
143
- import { path3 } from "@metamesh/modeling";
176
+ import { path2, path3, spline2 } from "@metamesh/modeling/geometry";
144
177
 
145
178
  export const boundary = path3(
146
179
  [
@@ -154,40 +187,65 @@ export const boundary = path3(
154
187
  export const nearest = boundary.closestPoint([-2, 5, 0]);
155
188
  // point: [0, 5, 0], distance: 2, edgeIndex: 3, fraction: 0.5
156
189
  export const restoredPath = path3(boundary.toData());
157
- // Both paths include the closing edge and have length 40 mm.
158
- ```
159
190
 
191
+ export const trajectory = path2(
192
+ [
193
+ [0, 0],
194
+ [10, 0],
195
+ [10, 10],
196
+ [0, 10],
197
+ ],
198
+ { closed: true }
199
+ );
200
+ export const atCorner = trajectory.atDistance(10);
201
+ // The outgoing tangent is [0, 1]; offset is 10 mm.
202
+ export const middle = trajectory.atFraction(0.5);
203
+ export const pieces = trajectory.splitAt(15);
204
+ export const trimmed = trajectory.trim(5, 25);
205
+ export const refined = trajectory.subdivide({ maxSegmentLength: 2 });
206
+ // Each original edge is subdivided independently, preserving all four corners.
207
+ export const smoothRoute = spline2(
208
+ [
209
+ [0, 0],
210
+ [10, 8],
211
+ [25, 0],
212
+ ],
213
+ {
214
+ resolution: { maxChordError: 0.02, maxSegmentLength: 2 },
215
+ }
216
+ );
217
+ ```
160
218
 
161
219
 
162
- `toData()` returns a deeply frozen record with `dimension`, `points`, and `closed`. Pass the path
163
- value directly where supported, or restore the full record with `path2(data)` or `path3(data)`.
164
- Don't repeat the endpoint of a closed path. Open paths may be empty; their bounds are `undefined`,
165
- and nearest-edge queries require at least two vertices. Queries measure the sampled boundary,
166
- not a filled interior or underlying analytic curve.
167
220
 
168
- Chain `transform`, `reverse`, and equal-distance `resample` to create new paths. Transforming a path
169
- preserves traversal even after reflection. `polygon(path)` requires a closed planar value and
170
- establishes exterior/hole winding; `stroke`, sweeps, and path patterns accept paths in the matching
171
- dimension. Authored point collections accept fluent vectors or tuples; serialized data uses tuples.
221
+ `spline2` and `spline3` interpolate waypoints with a centripetal Catmull–Rom spline and return
222
+ sampled path values. Open endpoints use one-sided secants; closed paths are periodic. Consecutive
223
+ duplicate waypoints and repeated closed endpoints reject. The default physical sampling policy
224
+ bounds every cubic span. Use `segmentsPerSpan` only when exact parameter intervals are required;
225
+ it overrides physical sampling. All waypoints remain in the sampled result, and one aggregate
226
+ point ceiling bounds the complete path.
172
227
 
173
- ## Compose modeling operations
228
+ ## Cross the evaluation boundary deliberately
174
229
 
175
- Give intermediate shapes meaningful names and choose a curve tolerance that preserves the detail
176
- you need. Many high-resolution Boolean operands take longer to build.
230
+ | From | Conversion | What happens |
231
+ | -------------------------- | ------------------------------------------- | --------------------------------------------------------------- |
232
+ | `Contour` / `RegionData` | `polygon(...)` to `Section` | Captures a recipe without an engine |
233
+ | `Profile` family | `matchProfiles(...)` | Pure matching retains identified landmarks |
234
+ | Closed `Path2` / `Contour` | `mesh.extrude(...)` to `TriangleMesh` | Constructs buffers without an engine |
235
+ | `TriangleMesh` | `solidFromMesh(...)` to `Solid` | Captures a recipe; native validation occurs during evaluation |
236
+ | `Section` | `section.toRegionData()` | Reads filled geometry during synchronous generation |
237
+ | `Solid` | `solid.toMesh()` | Copies evaluated triangle buffers during synchronous generation |
238
+ | `Solid` / `TriangleMesh` | `part(...)`, then a host run to `ModelPart` | Finalizes durable immutable buffers |
239
+ | `ModelPart` | Mesh analysis or export | Uses completed data without a live session |
177
240
 
178
- Dimension inputs accept matching fluent vectors or plain coordinate tuples, such as
179
- `box({ size: vector3([30, 20, 6]) })`. Use `section.extrude(options)`, `section.revolve(options)`,
180
- and `section.sweep(path, options)` in fluent modeling sequences. Imported `extrude`, `revolve`, and
181
- `sweep` accept `Section | CorrespondingProfile`, so reusable profile functions can use either input
182
- without branching. Both forms use the same operation contracts. Use `mesh.extrude(contour, options)`
183
- when constructing triangle buffers directly.
241
+ Pure mesh extrusion supports height, centering, twist, top scale, and sampling. Native
242
+ `Section.extrude` also supports `ends` treatments. Passing `ends` to `mesh.extrude` rejects; it does
243
+ not silently return unfinished geometry.
184
244
 
185
- Primitive factories take one options object. For example, `rectangle({ size: [24, 16] })` creates a
186
- filled Section and `box({ size: [24, 16, 6] })` creates a Solid. The `union`, `subtract`, and `intersect`
187
- methods accept one same-dimensional shape or a readonly array; an empty array preserves the receiver.
188
- Collection `union(shapes)` and `intersect(shapes)` combine peers and require at least one shape.
189
- `section.offset(distance, options)` stays in the filled XY plane.
245
+ Ordinary recipes can be reused across sessions. `shape.components()` is different: it selects
246
+ evaluated topology, so the selected shapes and recipes that use them can only be evaluated in
247
+ their original session. The host owns evaluation caches and native resources.
190
248
 
191
- For construction details, choose [profiles and extrusion](profiles-and-extrusion.md),
192
- [sweeps and lofts](sweeps-and-lofts.md), or a
193
- [worked recipe](recipes.md).
249
+ For completed immutable buffers, use `copy()` when you need mutable storage. Read
250
+ [resolution and inspection](resolution-and-inspection.md#lifecycle-and-inspection) for
251
+ shape observations and [Engine hosting](hosting.md) for finalization and export.
@@ -1,9 +1,11 @@
1
1
  # Run Modeling in your application
2
2
 
3
- Set up the engine in Node or a browser Worker, then export a captured model as STL, 3MF, or GLB.
3
+ Initialize Modeling, run a program, and manage sessions and completed results in your application.
4
4
 
5
- Build a model in your own application, then export its parts as STL, 3MF, or GLB. Install Modeling in your
6
- Node application or browser Worker project:
5
+ Start with one engine and one model run. Use this guide for host setup, synchronous execution,
6
+ session lifetime, and resource limits. For terminal commands, use the [CLI](https://metamesh.studio/docs/develop/cli).
7
+
8
+ Install Modeling in your Node application or browser Worker project:
7
9
 
8
10
  ```bash
9
11
  pnpm add @metamesh/modeling
@@ -26,7 +28,7 @@ This complete function returns the 3MF bytes for a plate with a hole:
26
28
  ```ts
27
29
  import { box, cylinder, generate } from "@metamesh/modeling";
28
30
  import { createModelEngine } from "@metamesh/modeling/engine";
29
- import { export3mf } from "@metamesh/modeling/export/3mf";
31
+ import { export3mf } from "@metamesh/modeling/export";
30
32
 
31
33
  export async function makePlate3mf(): Promise<Uint8Array> {
32
34
  const engine = await createModelEngine();
@@ -35,7 +37,7 @@ export async function makePlate3mf(): Promise<Uint8Array> {
35
37
  const plate = box({ size: [30, 20, 6] });
36
38
  // Extend the cutter beyond both faces to avoid coincident Boolean surfaces.
37
39
  const bore = cylinder({ radius: 3, height: 8, sizing: "face" });
38
- return [part("plate", { geometry: plate.subtract(bore), color: "#67e8f9" })];
40
+ return part("plate", plate.subtract(bore));
39
41
  })
40
42
  );
41
43
  return (await export3mf(model.parts, { name: "Plate" })).bytes;
@@ -59,6 +61,40 @@ or throws an error listing the available IDs. IDs match exactly. Keep using the
59
61
  array for iteration, export, and assertions about output order; use `model.parts.find(...)` when
60
62
  absence is expected.
61
63
 
64
+ ## Reuse a session across edits
65
+
66
+ Use `engine.run()` for independent one-off builds. Create a session when edits should reuse memoized
67
+ geometry. Dispose it in `finally` when the editing workflow ends:
68
+
69
+
70
+
71
+ ```ts
72
+ import { box, generate } from "@metamesh/modeling";
73
+ import { createModelEngine, type ModelResult } from "@metamesh/modeling/engine";
74
+
75
+ const plate = generate<{ readonly width: number }>(({ params, part }) =>
76
+ part("plate", box({ size: [params.width, 20, 6] }))
77
+ );
78
+
79
+ export async function buildPlateRevisions(): Promise<readonly ModelResult[]> {
80
+ const engine = await createModelEngine();
81
+ const session = engine.createSession(plate);
82
+
83
+ try {
84
+ const initial = session.run({ width: 30 });
85
+ const wider = session.run({ width: 40 });
86
+ return [initial, wider];
87
+ } finally {
88
+ session.dispose();
89
+ }
90
+ }
91
+ ```
92
+
93
+
94
+
95
+ Both returned results remain usable after cleanup. An application can keep its session open for
96
+ the editing lifetime instead; the `finally` block shows where that owner releases it.
97
+
62
98
  ## Keep execution synchronous
63
99
 
64
100
  Load fonts and other assets before generation, and supply any synchronous services when creating
@@ -99,66 +135,17 @@ geometry. Both return diagnostics; unexpected authoring and geometry errors stil
99
135
  | `session.check` | Declarations, assertions, and reached geometry observations | Returned parts are not all evaluated or finalized |
100
136
  | `engine.run` / `session.run` | The model and every returned part | Finalizes output under the selected topology, mesh-validation, resolution, and resource policy |
101
137
 
102
- A successful check does not evaluate every deferred recipe. For example, an invalid dimension in a
103
- returned shape may fail only during `run()`. Run representative valid inputs to verify finalized
104
- geometry. Programs accepting an empty parameter map allow both `session.check()` and `session.run()`.
105
- For example, checking a returned `box({ size: -1 })` can succeed while running it throws.
106
-
107
- ## Load WASM in a browser Worker
108
138
 
109
- The package includes its matching JS/WASM kernel. Node and unbundled browser modules resolve the
110
- installed WASM asset automatically. A browser bundler must retain or emit that relative asset;
111
- [`modelingWasmUrl`](../reference/engine/modelingWasmUrl.md) can supply the emitted URL through
112
- `createModelEngine({ wasmUrl: modelingWasmUrl })`.
113
139
 
114
- Create Workers and handle their messages in your application. Each Worker runs independently.
115
- Transfer copies of completed buffers that you own; transferring cache backing storage would
116
- detach it. Native handles stay inside their engine.
140
+ **Run the parts you intend to ship**
117
141
 
118
- For incremental delivery, the optional `@metamesh/generator-sdk/modeling` adapter provides
119
- `ModelDeliveryEncoder`. Its copies can be transferred while the engine result remains usable.
120
- `PartDeliveryDecoder` from `@metamesh/generator-sdk/runtime` hydrates later resource references:
142
+ A successful check does not evaluate every deferred recipe. Invalid dimensions in a returned shape
143
+ can fail only during `run()`. Execute representative inputs to verify finalized geometry.
121
144
 
122
145
 
123
146
 
124
- ```ts
125
- import { ModelDeliveryEncoder } from "@metamesh/generator-sdk/modeling";
126
- // eslint-disable-next-line no-restricted-imports -- Host documentation snippet; Web only displays this code.
127
- import { PartDeliveryDecoder } from "@metamesh/generator-sdk/runtime";
128
- import { type ModelResult } from "@metamesh/modeling/engine";
129
- import { export3mf } from "@metamesh/modeling/export/3mf";
130
-
131
- export async function transferAndExport(model: ModelResult): Promise<Uint8Array> {
132
- const encoder = new ModelDeliveryEncoder("preview");
133
- const delivery = encoder.encode(model, {
134
- revisionId: "preview-1",
135
- requestId: 1,
136
- bounds: model.bounds,
137
- warnings: model.diagnostics,
138
- });
139
- const buffers = delivery.parts.flatMap(({ geometry }) =>
140
- geometry.positions === undefined ? [] : [geometry.positions.buffer, geometry.indices!.buffer]
141
- );
142
- // This clone exercises the same ownership transfer as worker.postMessage(delivery, buffers).
143
- const received = structuredClone(delivery, { transfer: buffers });
144
- const decoder = new PartDeliveryDecoder({
145
- maxParts: 64,
146
- maxVertices: 1_000_000,
147
- maxTriangles: 2_000_000,
148
- maxBytes: 96 * 1024 * 1024,
149
- });
150
- const parts = decoder.decode(received.parts);
151
- return (await export3mf(parts, { name: "Transferred model" })).bytes;
152
- }
153
- ```
154
-
155
-
156
-
157
- Keep one encoder and decoder per ordered connection. Clear both when the receiver is replaced.
158
- Decoded parts contain **local** buffers under `geometry`, plus world placement. Keep these received
159
- buffers immutable and attached. Pass decoded parts directly to the shared exporters. They read
160
- local geometry and apply each part's placement once, preserving shared resources where the format
161
- permits it. Engine `ModelResult.parts` use that same export contract.
147
+ Programs accepting an empty parameter map allow both `session.check()` and `session.run()`.
148
+ For example, checking a returned `box({ size: -1 })` can succeed while running it throws.
162
149
 
163
150
  ## Set resource limits
164
151
 
@@ -166,40 +153,8 @@ permits it. Engine `ModelResult.parts` use that same export contract.
166
153
  Individual runs and sessions may lower those ceilings. Requests that exceed a selected sampling or output
167
154
  budget fail explicitly; the engine does not silently reduce modeling fidelity.
168
155
 
169
- ## Export the completed result
170
-
171
- Import `export3mf`, `exportStl`, or `exportGlb` from `@metamesh/modeling/export`, or load one format
172
- from `/export/3mf`, `/export/stl`, or `/export/glb`. Every exporter accepts completed parts with local
173
- `geometry`, an optional placement transform, and optional display color and material identity.
174
- No engine or renderer is required, and export never reruns the model.
175
-
176
- The result contains `bytes: Uint8Array`, `mediaType`, `extension`, `byteLength`, and structured
177
- `diagnostics`. The host chooses the filename and saves or downloads the bytes. Resolve selected
178
- parts and appearance overrides before exporting so the file belongs to one captured revision.
179
-
180
- Inputs use millimetres and Z-up coordinates. 3MF retains those units; GLB converts to metres and
181
- Y-up. Binary STL writes placed triangles and reports dropped appearance, material assignments,
182
- and part names. GLB preserves named parts, shared geometry, placement, and crease-aware shading.
183
- Export preserves the supplied physical sampling; no writer silently simplifies geometry.
184
-
185
- Use explicit `materialId` values with `options.materials` when material identity matters. Two
186
- materials may share the same RGB value and remain distinct. Per-part display color overrides do
187
- not change the selected material identity. 3MF carries portable material names and standard
188
- Materials-extension color groups separately; assigned parts combine those properties with
189
- `multiproperties`. Slicer support for those properties varies, and this metadata does not select a
190
- filament or physical tray. Full slicer projects, printer/process presets, and device/filament mapping
191
- require a separate application adapter.
192
-
193
- Exports have their own input and output ceilings through `options.limits`; they do not inherit an
194
- engine's policy. `meshValidation: "solid"` requests the bounded geometric checks in addition to
195
- the format's structural requirements. Pass an `AbortSignal` to cancel bounded work.
196
-
197
- For large output, `write3mf(parts, sink, options)`, `writeStl`, and `writeGlb` await each sink write
198
- before continuing and return metadata and diagnostics without collecting the complete output.
199
- Browser applications own Worker execution; an async function alone does not move CPU work off
200
- the UI thread. Format entry points isolate runtime loading, while npm installs the containing
201
- package's dependencies together.
202
-
203
- Use the [Export API reference](../reference/export.md) for serialization options,
204
- the [Engine API reference](../reference/engine.md) for execution, and
205
- [Modeling guides](https://metamesh.studio/docs/modeling) to choose geometry operations.
156
+ ## Continue with delivery
157
+
158
+ Run your browser host in a [Worker](workers.md) to keep generation off the UI
159
+ thread. [Export the completed parts](exporting.md) when your application needs 3MF, STL,
160
+ or GLB bytes. Those steps consume the result; they do not rerun the model.