@metamesh/modeling 0.17.0 → 0.19.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 (832) hide show
  1. package/CHANGELOG.md +186 -0
  2. package/README.md +147 -157
  3. package/dist/api/engine.d.ts +106 -83
  4. package/dist/api/export-3mf.d.ts +2 -0
  5. package/dist/api/export-glb.d.ts +2 -0
  6. package/dist/api/export-stl.d.ts +2 -0
  7. package/dist/api/export.d.ts +160 -0
  8. package/dist/api/geometry.d.ts +250 -461
  9. package/dist/api/index.d.ts +470 -445
  10. package/dist/api/mesh.d.ts +489 -0
  11. package/dist/api/text.d.ts +1 -1
  12. package/dist/docs/guides/concepts.md +32 -495
  13. package/dist/docs/guides/fonts.md +14 -13
  14. package/dist/docs/guides/fundamentals.md +30 -29
  15. package/dist/docs/guides/generation.md +84 -64
  16. package/dist/docs/guides/geometry-values.md +193 -0
  17. package/dist/docs/guides/hosting.md +147 -48
  18. package/dist/docs/guides/profiles-and-extrusion.md +252 -0
  19. package/dist/docs/guides/recipes.md +33 -769
  20. package/dist/docs/guides/resolution-and-inspection.md +133 -0
  21. package/dist/docs/guides/solid-joins.md +126 -0
  22. package/dist/docs/guides/standalone-model.md +8 -7
  23. package/dist/docs/guides/svg-and-text.md +215 -0
  24. package/dist/docs/guides/sweeps-and-lofts.md +179 -0
  25. package/dist/docs/guides/transforms-and-placement.md +313 -0
  26. package/dist/docs/manifest.json +3224 -4430
  27. package/dist/docs/reference/engine/GenerationOptions.md +12 -5
  28. package/dist/docs/reference/engine/GeometryResource.md +19 -13
  29. package/dist/docs/reference/engine/ModelDependencies.md +9 -3
  30. package/dist/docs/reference/engine/ModelEngine.md +33 -24
  31. package/dist/docs/reference/engine/ModelEngineOptions.md +13 -2
  32. package/dist/docs/reference/engine/ModelPart.md +114 -0
  33. package/dist/docs/reference/engine/ModelResult.md +181 -0
  34. package/dist/docs/reference/engine/ModelRunArguments.md +34 -0
  35. package/dist/docs/reference/engine/ModelRunOptions.md +110 -0
  36. package/dist/docs/reference/engine/ModelSession.md +22 -16
  37. package/dist/docs/reference/engine/SessionOptions.md +21 -10
  38. package/dist/docs/reference/engine/categories/host-lifecycle.md +20 -15
  39. package/dist/docs/reference/engine/checkModel.md +49 -0
  40. package/dist/docs/reference/engine/createModelEngine.md +11 -13
  41. package/dist/docs/reference/engine/defaultModelingLimits.md +15 -2
  42. package/dist/docs/reference/engine/modelingWasmUrl.md +7 -1
  43. package/dist/docs/reference/engine.md +8 -15
  44. package/dist/docs/reference/export/Export3mfOptions.md +24 -0
  45. package/dist/docs/reference/export/ExportDiagnostic.md +59 -0
  46. package/dist/docs/reference/export/ExportFormat.md +25 -0
  47. package/dist/docs/reference/export/ExportGeometry.md +39 -0
  48. package/dist/docs/reference/export/ExportGlbOptions.md +118 -0
  49. package/dist/docs/reference/export/ExportLimits.md +83 -0
  50. package/dist/docs/reference/export/ExportMaterial.md +47 -0
  51. package/dist/docs/reference/export/ExportOptions.md +94 -0
  52. package/dist/docs/reference/export/ExportPart.md +88 -0
  53. package/dist/docs/reference/export/ExportReport.md +82 -0
  54. package/dist/docs/reference/export/ExportSink.md +39 -0
  55. package/dist/docs/reference/export/ExportStlOptions.md +24 -0
  56. package/dist/docs/reference/export/ExportedFile.md +110 -0
  57. package/dist/docs/reference/export/categories/mesh-serialization.md +47 -0
  58. package/dist/docs/reference/export/defaultExportLimits.md +20 -0
  59. package/dist/docs/reference/export/export3mf.md +64 -0
  60. package/dist/docs/reference/export/exportGlb.md +68 -0
  61. package/dist/docs/reference/export/exportStl.md +64 -0
  62. package/dist/docs/reference/export/write3mf.md +71 -0
  63. package/dist/docs/reference/export/writeGlb.md +75 -0
  64. package/dist/docs/reference/export/writeStl.md +71 -0
  65. package/dist/docs/reference/export.md +21 -0
  66. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +16 -2
  67. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +7 -1
  68. package/dist/docs/reference/geometry/Anchor3-type.md +13 -3
  69. package/dist/docs/reference/geometry/ArcCurve2.md +8 -2
  70. package/dist/docs/reference/geometry/ArcCurve3.md +8 -2
  71. package/dist/docs/reference/geometry/AttachOptions.md +13 -3
  72. package/dist/docs/reference/geometry/AxisAngleRotation3.md +9 -3
  73. package/dist/docs/reference/geometry/Bevel.md +32 -0
  74. package/dist/docs/reference/geometry/BevelSize.md +28 -0
  75. package/dist/docs/reference/geometry/Bounds2-type.md +18 -4
  76. package/dist/docs/reference/geometry/Bounds2Data.md +22 -4
  77. package/dist/docs/reference/geometry/Bounds2Input.md +18 -4
  78. package/dist/docs/reference/geometry/Bounds2Options.md +61 -11
  79. package/dist/docs/reference/geometry/Bounds3-type.md +18 -4
  80. package/dist/docs/reference/geometry/Bounds3Data.md +18 -4
  81. package/dist/docs/reference/geometry/Bounds3Input.md +18 -4
  82. package/dist/docs/reference/geometry/Bounds3Options.md +61 -11
  83. package/dist/docs/reference/geometry/BoundsFit2.md +10 -4
  84. package/dist/docs/reference/geometry/BoundsFit3.md +10 -4
  85. package/dist/docs/reference/geometry/BoundsFitOptions.md +10 -4
  86. package/dist/docs/reference/geometry/BoxAnchorFace.md +9 -3
  87. package/dist/docs/reference/geometry/BoxAnchorOptions.md +12 -6
  88. package/dist/docs/reference/geometry/BoxEdge.md +11 -1
  89. package/dist/docs/reference/geometry/BoxEdgeSelection.md +11 -1
  90. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +11 -1
  91. package/dist/docs/reference/geometry/BoxOptions.md +13 -3
  92. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +16 -2
  93. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +16 -2
  94. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +11 -1
  95. package/dist/docs/reference/geometry/CircleContourOptions.md +12 -2
  96. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +15 -3
  97. package/dist/docs/reference/geometry/CircularResolutionOptions.md +7 -1
  98. package/dist/docs/reference/geometry/CircularSampling.md +7 -1
  99. package/dist/docs/reference/geometry/CircularSamplingOptions.md +7 -1
  100. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +8 -2
  101. package/dist/docs/reference/geometry/ClearanceHoleFit.md +8 -2
  102. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +8 -2
  103. package/dist/docs/reference/geometry/Contour.md +12 -2
  104. package/dist/docs/reference/geometry/ContourCurve.md +8 -2
  105. package/dist/docs/reference/geometry/ContourPoint.md +8 -2
  106. package/dist/docs/reference/geometry/ContourSegment.md +8 -2
  107. package/dist/docs/reference/geometry/CorrespondingComponent.md +12 -2
  108. package/dist/docs/reference/geometry/CorrespondingContour.md +12 -2
  109. package/dist/docs/reference/geometry/CorrespondingProfile.md +12 -2
  110. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +12 -2
  111. package/dist/docs/reference/geometry/CubicBezierCurve2.md +8 -2
  112. package/dist/docs/reference/geometry/CubicBezierCurve3.md +8 -2
  113. package/dist/docs/reference/geometry/Curve2.md +8 -2
  114. package/dist/docs/reference/geometry/Curve3.md +8 -2
  115. package/dist/docs/reference/geometry/CurveSamplingOptions.md +16 -2
  116. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +16 -2
  117. package/dist/docs/reference/geometry/CylinderAnchorFace.md +9 -3
  118. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +11 -5
  119. package/dist/docs/reference/geometry/CylinderOptions.md +11 -1
  120. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +8 -2
  121. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +8 -2
  122. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +8 -2
  123. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +8 -2
  124. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +8 -2
  125. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +8 -2
  126. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +8 -2
  127. package/dist/docs/reference/geometry/CylindricalGearSpec.md +8 -2
  128. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -1
  129. package/dist/docs/reference/geometry/EdgeTreatment.md +11 -1
  130. package/dist/docs/reference/geometry/EllipseContourOptions.md +14 -4
  131. package/dist/docs/reference/geometry/EndTreatments.md +12 -2
  132. package/dist/docs/reference/{model/ExtrudeOptions.md → geometry/ExtrudeMeshOptions.md} +30 -26
  133. package/dist/docs/reference/geometry/ExtrudeOptions.md +29 -11
  134. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +18 -4
  135. package/dist/docs/reference/geometry/FittedTextLayout.md +8 -2
  136. package/dist/docs/reference/geometry/Frame3.md +16 -2
  137. package/dist/docs/reference/geometry/GeometryError.md +11 -1
  138. package/dist/docs/reference/geometry/GeometryErrorCode.md +11 -1
  139. package/dist/docs/reference/geometry/GeometryErrorContext.md +11 -1
  140. package/dist/docs/reference/geometry/GeometryResolution.md +15 -1
  141. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +16 -2
  142. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +15 -1
  143. package/dist/docs/reference/geometry/GridPatternOptions.md +12 -2
  144. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +12 -2
  145. package/dist/docs/reference/geometry/HeightfieldOptions.md +18 -3
  146. package/dist/docs/reference/geometry/HeightfieldPreflight.md +12 -2
  147. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +9 -3
  148. package/dist/docs/reference/geometry/ImmutableBuffer-type.md +110 -0
  149. package/dist/docs/reference/geometry/ImmutableTriangleMesh.md +57 -0
  150. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +63 -84
  151. package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +12 -2
  152. package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +8 -2
  153. package/dist/docs/reference/geometry/KnuckleHingeInterval.md +8 -2
  154. package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +12 -2
  155. package/dist/docs/reference/geometry/KnuckleHingeSpec.md +12 -2
  156. package/dist/docs/reference/geometry/LineCurve2.md +8 -2
  157. package/dist/docs/reference/geometry/LineCurve3.md +8 -2
  158. package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -2
  159. package/dist/docs/reference/geometry/LoftCorrespondence.md +16 -2
  160. package/dist/docs/reference/geometry/LoftMeshStation.md +12 -2
  161. package/dist/docs/reference/geometry/LoftOptions.md +18 -4
  162. package/dist/docs/reference/geometry/LoftPlacement.md +16 -2
  163. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +8 -2
  164. package/dist/docs/reference/geometry/MatchProfilesOptions.md +12 -2
  165. package/dist/docs/reference/geometry/MetricFastenerSize.md +8 -2
  166. package/dist/docs/reference/geometry/MetricFastenerStandard.md +8 -2
  167. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +8 -2
  168. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +8 -2
  169. package/dist/docs/reference/geometry/ModelingLimits.md +19 -1
  170. package/dist/docs/reference/geometry/NumericArray.md +28 -0
  171. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +8 -2
  172. package/dist/docs/reference/geometry/Path2-type.md +16 -2
  173. package/dist/docs/reference/geometry/Path2Data.md +16 -2
  174. package/dist/docs/reference/geometry/Path2Input.md +16 -2
  175. package/dist/docs/reference/geometry/Path3-type.md +16 -2
  176. package/dist/docs/reference/geometry/Path3Data.md +16 -2
  177. package/dist/docs/reference/geometry/Path3Input.md +16 -2
  178. package/dist/docs/reference/geometry/PathFrame.md +8 -2
  179. package/dist/docs/reference/geometry/PathLocation.md +16 -2
  180. package/dist/docs/reference/geometry/PathNormalGuide.md +16 -2
  181. package/dist/docs/reference/geometry/PathOptions.md +12 -2
  182. package/dist/docs/reference/geometry/PathPatternOptions.md +12 -2
  183. package/dist/docs/reference/geometry/PathPlacement.md +8 -2
  184. package/dist/docs/reference/geometry/PathResamplingOptions.md +16 -2
  185. package/dist/docs/reference/geometry/Pivot2Options.md +17 -3
  186. package/dist/docs/reference/geometry/Pivot3Options.md +17 -3
  187. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +12 -2
  188. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +12 -2
  189. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +12 -2
  190. package/dist/docs/reference/geometry/PlanarPatchQuality.md +12 -2
  191. package/dist/docs/reference/geometry/PolygonData.md +12 -2
  192. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +8 -2
  193. package/dist/docs/reference/geometry/PrimitiveAttachment.md +11 -3
  194. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +11 -1
  195. package/dist/docs/reference/geometry/PrintableThreadFit.md +12 -2
  196. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +12 -2
  197. package/dist/docs/reference/geometry/Profile.md +8 -2
  198. package/dist/docs/reference/geometry/ProfileComponent2.md +12 -2
  199. package/dist/docs/reference/geometry/ProfileContour2.md +12 -2
  200. package/dist/docs/reference/geometry/ProfileSpan2.md +12 -2
  201. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +11 -1
  202. package/dist/docs/reference/geometry/RackPitchDimensions.md +8 -2
  203. package/dist/docs/reference/geometry/RackPitchSpec.md +8 -2
  204. package/dist/docs/reference/geometry/RadialPatternOptions.md +12 -2
  205. package/dist/docs/reference/geometry/RadialSizing.md +11 -1
  206. package/dist/docs/reference/geometry/RadialSizingOptions.md +11 -1
  207. package/dist/docs/reference/geometry/RectangleContourOptions.md +14 -4
  208. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +12 -2
  209. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +12 -2
  210. package/dist/docs/reference/geometry/RectangleProfileOptions.md +10 -4
  211. package/dist/docs/reference/geometry/RegionData.md +12 -2
  212. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +8 -2
  213. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +7 -1
  214. package/dist/docs/reference/geometry/RevolveOptions.md +17 -3
  215. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +11 -1
  216. package/dist/docs/reference/geometry/RowLayoutOptions.md +10 -4
  217. package/dist/docs/reference/geometry/SampleContourOptions.md +8 -2
  218. package/dist/docs/reference/geometry/SampleHelixOptions.md +8 -2
  219. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +8 -2
  220. package/dist/docs/reference/geometry/SampledCurve2.md +8 -2
  221. package/dist/docs/reference/geometry/SampledCurve3.md +8 -2
  222. package/dist/docs/reference/geometry/SampledThreadHelices.md +8 -2
  223. package/dist/docs/reference/geometry/SideProfileCurve.md +8 -2
  224. package/dist/docs/reference/geometry/SideProfilePoint.md +8 -2
  225. package/dist/docs/reference/geometry/SideProfileSegment.md +8 -2
  226. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +11 -1
  227. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +12 -2
  228. package/dist/docs/reference/geometry/SphereOptions.md +11 -1
  229. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +16 -2
  230. package/dist/docs/reference/geometry/StarContourOptions.md +84 -0
  231. package/dist/docs/reference/geometry/StrokeCap.md +12 -2
  232. package/dist/docs/reference/geometry/StrokeJoin.md +12 -2
  233. package/dist/docs/reference/geometry/StrokeOptions.md +12 -2
  234. package/dist/docs/reference/geometry/SvgImportOptions.md +8 -2
  235. package/dist/docs/reference/geometry/SvgRegionPreflight.md +8 -2
  236. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +8 -2
  237. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +8 -2
  238. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +8 -2
  239. package/dist/docs/reference/geometry/SweepOptions.md +16 -2
  240. package/dist/docs/reference/geometry/SweepOrientation.md +16 -2
  241. package/dist/docs/reference/geometry/ThreadBevelOptions.md +18 -31
  242. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +8 -2
  243. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +8 -2
  244. package/dist/docs/reference/geometry/ThreadEndStyle.md +16 -2
  245. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +16 -2
  246. package/dist/docs/reference/geometry/ThreadHandedness.md +16 -2
  247. package/dist/docs/reference/geometry/ThreadHelixOptions.md +8 -2
  248. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +16 -2
  249. package/dist/docs/reference/geometry/ThreadLeadInShape.md +16 -2
  250. package/dist/docs/reference/geometry/ThreadProfile-type.md +17 -3
  251. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +16 -2
  252. package/dist/docs/reference/geometry/ThreadProfileSpec.md +16 -2
  253. package/dist/docs/reference/geometry/{HelicalThreadRidgeMeshOptions.md → ThreadRidgeOptions.md} +19 -5
  254. package/dist/docs/reference/geometry/ThreadRole.md +8 -2
  255. package/dist/docs/reference/geometry/{HelicalThreadSolidMeshOptions.md → ThreadSolidOptions.md} +29 -66
  256. package/dist/docs/reference/geometry/{HelicalThreadSolidMeshPreflight.md → ThreadSolidPreflight.md} +17 -3
  257. package/dist/docs/reference/geometry/ThreadedNutOptions.md +86 -87
  258. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +29 -7
  259. package/dist/docs/reference/geometry/ThreadedNutShape.md +12 -2
  260. package/dist/docs/reference/geometry/ThreadedRodOptions.md +63 -84
  261. package/dist/docs/reference/geometry/TorusOptions.md +11 -1
  262. package/dist/docs/reference/geometry/Transform2-type.md +17 -3
  263. package/dist/docs/reference/geometry/Transform2Data.md +17 -3
  264. package/dist/docs/reference/geometry/Transform2Input.md +17 -3
  265. package/dist/docs/reference/geometry/Transform3-type.md +17 -3
  266. package/dist/docs/reference/geometry/Transform3Data.md +17 -3
  267. package/dist/docs/reference/geometry/Transform3Input.md +17 -3
  268. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +16 -2
  269. package/dist/docs/reference/geometry/TriangleMesh.md +19 -6
  270. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +25 -5
  271. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +13 -3
  272. package/dist/docs/reference/geometry/TriangleMeshInput.md +29 -0
  273. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +16 -2
  274. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +12 -2
  275. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +12 -2
  276. package/dist/docs/reference/geometry/TriangleMeshSignature.md +14 -4
  277. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +12 -2
  278. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +12 -2
  279. package/dist/docs/reference/geometry/TriangleMeshTopologyAnalysis.md +145 -0
  280. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +12 -2
  281. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +16 -2
  282. package/dist/docs/reference/geometry/TubeOptions.md +20 -86
  283. package/dist/docs/reference/geometry/Vector2-type.md +17 -3
  284. package/dist/docs/reference/geometry/Vector2Data.md +21 -3
  285. package/dist/docs/reference/geometry/Vector2Input.md +17 -3
  286. package/dist/docs/reference/geometry/Vector3-type.md +17 -3
  287. package/dist/docs/reference/geometry/Vector3Data.md +17 -3
  288. package/dist/docs/reference/geometry/Vector3Input.md +17 -3
  289. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +12 -2
  290. package/dist/docs/reference/geometry/VectorTextLayout.md +16 -2
  291. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +14 -4
  292. package/dist/docs/reference/geometry/VectorTextMetrics.md +16 -2
  293. package/dist/docs/reference/geometry/VectorTextOptions.md +12 -2
  294. package/dist/docs/reference/geometry/add2.md +9 -3
  295. package/dist/docs/reference/geometry/add3.md +9 -3
  296. package/dist/docs/reference/geometry/anchor3.md +9 -3
  297. package/dist/docs/reference/geometry/anchorFrame3.md +8 -2
  298. package/dist/docs/reference/geometry/applyTransformDirection3.md +9 -3
  299. package/dist/docs/reference/geometry/applyTransformPoint3.md +9 -3
  300. package/dist/docs/reference/geometry/attachmentTransform3.md +9 -3
  301. package/dist/docs/reference/geometry/bounds2.md +18 -8
  302. package/dist/docs/reference/geometry/bounds3.md +18 -8
  303. package/dist/docs/reference/geometry/boundsCenter.md +10 -4
  304. package/dist/docs/reference/geometry/boundsSize.md +10 -4
  305. package/dist/docs/reference/geometry/boxAnchor3.md +11 -5
  306. package/dist/docs/reference/geometry/categories/bounds-layout.md +6 -6
  307. package/dist/docs/reference/geometry/categories/curves-paths.md +3 -3
  308. package/dist/docs/reference/geometry/categories/mechanical.md +9 -11
  309. package/dist/docs/reference/geometry/categories/meshes.md +20 -33
  310. package/dist/docs/reference/geometry/categories/pattern-placement.md +3 -3
  311. package/dist/docs/reference/geometry/categories/primitive-options.md +4 -4
  312. package/dist/docs/reference/geometry/categories/profiles-regions.md +6 -5
  313. package/dist/docs/reference/geometry/categories/resolution-errors.md +3 -3
  314. package/dist/docs/reference/geometry/categories/transforms-math.md +5 -4
  315. package/dist/docs/reference/geometry/categories/vector-import.md +4 -4
  316. package/dist/docs/reference/geometry/circleContour.md +8 -2
  317. package/dist/docs/reference/geometry/closeToAxis.md +8 -2
  318. package/dist/docs/reference/geometry/compensateThreadDiameters.md +8 -2
  319. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +8 -2
  320. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +8 -2
  321. package/dist/docs/reference/geometry/composeTransform3.md +9 -3
  322. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +8 -2
  323. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +8 -2
  324. package/dist/docs/reference/geometry/contourContainsPoint.md +8 -2
  325. package/dist/docs/reference/geometry/cross2.md +9 -3
  326. package/dist/docs/reference/geometry/cross3.md +9 -3
  327. package/dist/docs/reference/geometry/cylinderAnchor3.md +10 -4
  328. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +8 -2
  329. package/dist/docs/reference/geometry/distance2.md +9 -3
  330. package/dist/docs/reference/geometry/distance3.md +9 -3
  331. package/dist/docs/reference/geometry/distributeAlongPath.md +8 -2
  332. package/dist/docs/reference/geometry/dot2.md +9 -3
  333. package/dist/docs/reference/geometry/dot3.md +9 -3
  334. package/dist/docs/reference/geometry/ellipseContour.md +8 -2
  335. package/dist/docs/reference/geometry/eulerTransform3.md +9 -3
  336. package/dist/docs/reference/geometry/fitBounds.md +10 -4
  337. package/dist/docs/reference/geometry/fitTextLayout.md +8 -2
  338. package/dist/docs/reference/geometry/frameTransform3.md +9 -3
  339. package/dist/docs/reference/geometry/getMetricClearanceHoleDiameter.md +8 -2
  340. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +8 -2
  341. package/dist/docs/reference/geometry/gridPatternTransforms.md +8 -2
  342. package/dist/docs/reference/{model → geometry}/immutableBuffer.md +13 -2
  343. package/dist/docs/reference/geometry/inverseTransform3.md +9 -3
  344. package/dist/docs/reference/geometry/isGeometryError.md +11 -1
  345. package/dist/docs/reference/geometry/layoutRow.md +10 -4
  346. package/dist/docs/reference/geometry/length2.md +9 -3
  347. package/dist/docs/reference/geometry/length3.md +9 -3
  348. package/dist/docs/reference/geometry/lerp2.md +9 -3
  349. package/dist/docs/reference/geometry/lerp3.md +9 -3
  350. package/dist/docs/reference/geometry/linearPatternTransforms.md +8 -2
  351. package/dist/docs/reference/geometry/matchProfiles.md +8 -2
  352. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +8 -2
  353. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +8 -2
  354. package/dist/docs/reference/geometry/normalize2.md +9 -3
  355. package/dist/docs/reference/geometry/normalize3.md +9 -3
  356. package/dist/docs/reference/geometry/normalizeContour.md +8 -2
  357. package/dist/docs/reference/geometry/normalizePolygon.md +8 -2
  358. package/dist/docs/reference/geometry/normalizeRegion.md +8 -2
  359. package/dist/docs/reference/geometry/path2.md +12 -2
  360. package/dist/docs/reference/geometry/path3.md +12 -2
  361. package/dist/docs/reference/geometry/pathPatternTransforms.md +8 -2
  362. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +25 -26
  363. package/dist/docs/reference/geometry/preflightSvgRegion.md +8 -2
  364. package/dist/docs/reference/geometry/preflightThreadedNut.md +31 -27
  365. package/dist/docs/reference/geometry/preflightThreadedRod.md +25 -26
  366. package/dist/docs/reference/geometry/projectOntoPlane3.md +9 -3
  367. package/dist/docs/reference/geometry/radialPatternTransforms.md +8 -2
  368. package/dist/docs/reference/geometry/rectangleContour.md +17 -6
  369. package/dist/docs/reference/geometry/rectangleProfile.md +9 -3
  370. package/dist/docs/reference/geometry/regionArea.md +8 -2
  371. package/dist/docs/reference/geometry/regionBounds.md +8 -2
  372. package/dist/docs/reference/geometry/regularPolygonContour.md +9 -3
  373. package/dist/docs/reference/geometry/resamplePolyline2.md +8 -2
  374. package/dist/docs/reference/geometry/resamplePolyline3.md +8 -2
  375. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +7 -1
  376. package/dist/docs/reference/geometry/resolveArcSegments.md +7 -1
  377. package/dist/docs/reference/geometry/resolveCircularSampling.md +7 -1
  378. package/dist/docs/reference/geometry/resolveCircularSegments.md +7 -1
  379. package/dist/docs/reference/geometry/resolveCylindricalGear.md +8 -2
  380. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +8 -2
  381. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +8 -2
  382. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +8 -2
  383. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +7 -1
  384. package/dist/docs/reference/geometry/resolveKnuckleHinge.md +8 -2
  385. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +8 -2
  386. package/dist/docs/reference/geometry/resolveRackPitch.md +8 -2
  387. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +8 -2
  388. package/dist/docs/reference/geometry/rotate2.md +9 -3
  389. package/dist/docs/reference/geometry/rotationTransform3.md +9 -3
  390. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +8 -2
  391. package/dist/docs/reference/geometry/sampleContour.md +8 -2
  392. package/dist/docs/reference/geometry/sampleCurve2.md +8 -2
  393. package/dist/docs/reference/geometry/sampleCurve3.md +8 -2
  394. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +8 -2
  395. package/dist/docs/reference/geometry/sampleHelix.md +8 -2
  396. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +8 -2
  397. package/dist/docs/reference/geometry/sampleRackToothPath.md +8 -2
  398. package/dist/docs/reference/geometry/sampleSideProfile.md +8 -2
  399. package/dist/docs/reference/geometry/sampleTextContours.md +8 -2
  400. package/dist/docs/reference/geometry/sampleThreadHelices.md +8 -2
  401. package/dist/docs/reference/geometry/scale2.md +9 -3
  402. package/dist/docs/reference/geometry/scale3.md +9 -3
  403. package/dist/docs/reference/geometry/scaleTransform3.md +9 -3
  404. package/dist/docs/reference/geometry/signedContourArea.md +8 -2
  405. package/dist/docs/reference/geometry/starContour.md +24 -16
  406. package/dist/docs/reference/geometry/strokeRegionData.md +8 -2
  407. package/dist/docs/reference/geometry/subtract2.md +9 -3
  408. package/dist/docs/reference/geometry/subtract3.md +9 -3
  409. package/dist/docs/reference/geometry/threadProfile.md +8 -2
  410. package/dist/docs/reference/geometry/transform2.md +13 -3
  411. package/dist/docs/reference/geometry/transform3.md +13 -3
  412. package/dist/docs/reference/geometry/transformDeterminant3.md +9 -3
  413. package/dist/docs/reference/geometry/transformRegionData.md +8 -2
  414. package/dist/docs/reference/geometry/translationTransform3.md +9 -3
  415. package/dist/docs/reference/geometry/triangulateContour.md +8 -2
  416. package/dist/docs/reference/geometry/validateRigidTransform3.md +41 -0
  417. package/dist/docs/reference/geometry/validateTransform3.md +9 -3
  418. package/dist/docs/reference/geometry/vector2.md +13 -3
  419. package/dist/docs/reference/geometry/vector3.md +13 -3
  420. package/dist/docs/reference/geometry.md +10 -10
  421. package/dist/docs/reference/mesh/MeshRenderOptions.md +28 -0
  422. package/dist/docs/reference/mesh/RenderMesh.md +68 -0
  423. package/dist/docs/reference/mesh/analyze.md +102 -0
  424. package/dist/docs/reference/mesh/analyzeQuality.md +62 -0
  425. package/dist/docs/reference/mesh/bounds.md +45 -0
  426. package/dist/docs/reference/mesh/categories/operations.md +57 -0
  427. package/dist/docs/reference/mesh/centroid.md +45 -0
  428. package/dist/docs/reference/mesh/extrude.md +79 -0
  429. package/dist/docs/reference/mesh/heightfield.md +57 -0
  430. package/dist/docs/reference/mesh/immutable.md +51 -0
  431. package/dist/docs/reference/mesh/join.md +47 -0
  432. package/dist/docs/reference/mesh/loft.md +83 -0
  433. package/dist/docs/reference/mesh/optimizePlanarPatches.md +102 -0
  434. package/dist/docs/reference/mesh/preflightHeightfield.md +48 -0
  435. package/dist/docs/reference/mesh/preflightThreadSolid.md +96 -0
  436. package/dist/docs/reference/mesh/render.md +57 -0
  437. package/dist/docs/reference/mesh/reverse.md +41 -0
  438. package/dist/docs/reference/{geometry/revolveMesh.md → mesh/revolve.md} +23 -17
  439. package/dist/docs/reference/mesh/signature.md +70 -0
  440. package/dist/docs/reference/mesh/sweep.md +92 -0
  441. package/dist/docs/reference/mesh/threadRidge.md +78 -0
  442. package/dist/docs/reference/mesh/threadSolid.md +96 -0
  443. package/dist/docs/reference/mesh/transform.md +53 -0
  444. package/dist/docs/reference/mesh/validate.md +75 -0
  445. package/dist/docs/reference/{geometry/validateSolidMesh.md → mesh/validateSolid.md} +23 -11
  446. package/dist/docs/reference/mesh.md +21 -0
  447. package/dist/docs/reference/model/CircleOptions.md +13 -7
  448. package/dist/docs/reference/model/DiagnosticOptions.md +21 -1
  449. package/dist/docs/reference/model/EllipseOptions.md +13 -7
  450. package/dist/docs/reference/model/GenerateCallback.md +11 -5
  451. package/dist/docs/reference/model/GenerateContext.md +26 -99
  452. package/dist/docs/reference/model/GenerationDiagnostic.md +19 -1
  453. package/dist/docs/reference/model/GenerationError.md +8 -2
  454. package/dist/docs/reference/model/HoleCutterOptions.md +17 -10
  455. package/dist/docs/reference/model/HoleCutterOverrun.md +10 -3
  456. package/dist/docs/reference/model/HoleCutterRecess.md +10 -3
  457. package/dist/docs/reference/model/HullOptions.md +13 -6
  458. package/dist/docs/reference/model/ImmutableValue.md +26 -0
  459. package/dist/docs/reference/model/ImplicitOptions.md +12 -6
  460. package/dist/docs/reference/model/JoinOptions.md +76 -0
  461. package/dist/docs/reference/model/JoinTransition.md +54 -0
  462. package/dist/docs/reference/model/KnuckleHinge-type.md +9 -3
  463. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +7 -1
  464. package/dist/docs/reference/model/KnuckleHingeOptions.md +10 -4
  465. package/dist/docs/reference/model/KnuckleHingeWeb.md +7 -1
  466. package/dist/docs/reference/model/LoftStation.md +16 -9
  467. package/dist/docs/reference/model/Memo.md +54 -0
  468. package/dist/docs/reference/model/ModelProgram.md +8 -2
  469. package/dist/docs/reference/model/PartDeclaration.md +87 -0
  470. package/dist/docs/reference/model/PartGeometry.md +10 -4
  471. package/dist/docs/reference/model/PartOptions.md +16 -22
  472. package/dist/docs/reference/model/PatternSource.md +10 -4
  473. package/dist/docs/reference/model/PlaneOptions.md +11 -4
  474. package/dist/docs/reference/model/PolygonOptions.md +20 -14
  475. package/dist/docs/reference/model/Profile.md +10 -4
  476. package/dist/docs/reference/model/RectangleOptions.md +28 -22
  477. package/dist/docs/reference/model/RegularPolygonOptions.md +13 -7
  478. package/dist/docs/reference/model/Section.md +196 -77
  479. package/dist/docs/reference/model/SectionHullOptions.md +13 -6
  480. package/dist/docs/reference/model/SectionInspection.md +12 -18
  481. package/dist/docs/reference/model/SectionOffsetJoin.md +10 -4
  482. package/dist/docs/reference/model/SectionOffsetOptions.md +12 -6
  483. package/dist/docs/reference/model/Solid.md +339 -54
  484. package/dist/docs/reference/model/SolidInspection.md +12 -18
  485. package/dist/docs/reference/model/SolidSegmentHit.md +14 -4
  486. package/dist/docs/reference/model/StarOptions.md +53 -25
  487. package/dist/docs/reference/model/SvgOrigin.md +10 -4
  488. package/dist/docs/reference/model/SvgPathSectionOptions.md +14 -8
  489. package/dist/docs/reference/model/SvgSectionOptions.md +16 -10
  490. package/dist/docs/reference/model/TextSectionOptions.md +14 -8
  491. package/dist/docs/reference/model/box.md +18 -11
  492. package/dist/docs/reference/model/categories/boolean-operations.md +13 -11
  493. package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -7
  494. package/dist/docs/reference/model/categories/explicit-profiles.md +1 -14
  495. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +11 -23
  496. package/dist/docs/reference/model/categories/generation.md +10 -15
  497. package/dist/docs/reference/model/categories/hinges.md +1 -4
  498. package/dist/docs/reference/model/categories/mesh-inspection.md +14 -9
  499. package/dist/docs/reference/model/categories/primitives.md +8 -24
  500. package/dist/docs/reference/model/categories/sections.md +6 -16
  501. package/dist/docs/reference/model/categories/threads.md +3 -30
  502. package/dist/docs/reference/model/categories/transforms-placement.md +5 -35
  503. package/dist/docs/reference/model/circle.md +10 -4
  504. package/dist/docs/reference/model/cylinder.md +13 -6
  505. package/dist/docs/reference/model/ellipse.md +10 -4
  506. package/dist/docs/reference/model/extrude.md +28 -20
  507. package/dist/docs/reference/model/generate.md +10 -4
  508. package/dist/docs/reference/model/gridPattern.md +15 -9
  509. package/dist/docs/reference/model/heightfield.md +10 -4
  510. package/dist/docs/reference/model/holeCutter.md +21 -4
  511. package/dist/docs/reference/model/hull.md +9 -2
  512. package/dist/docs/reference/model/implicit.md +9 -3
  513. package/dist/docs/reference/model/internalThreadCutter.md +31 -33
  514. package/dist/docs/reference/model/intersect.md +11 -4
  515. package/dist/docs/reference/model/join.md +89 -0
  516. package/dist/docs/reference/model/knuckleHinge.md +8 -2
  517. package/dist/docs/reference/model/linearPattern.md +15 -9
  518. package/dist/docs/reference/model/loft.md +36 -28
  519. package/dist/docs/reference/model/matchProfiles.md +14 -8
  520. package/dist/docs/reference/model/minkowskiSum.md +9 -2
  521. package/dist/docs/reference/model/pathPattern.md +25 -19
  522. package/dist/docs/reference/model/polygon.md +13 -7
  523. package/dist/docs/reference/model/preflightInternalThreadCutter.md +33 -35
  524. package/dist/docs/reference/model/preflightThreadedNut.md +43 -40
  525. package/dist/docs/reference/model/preflightThreadedRod.md +33 -35
  526. package/dist/docs/reference/model/radialPattern.md +15 -9
  527. package/dist/docs/reference/model/rectangle.md +14 -8
  528. package/dist/docs/reference/model/regularPolygon.md +10 -4
  529. package/dist/docs/reference/model/revolve.md +25 -17
  530. package/dist/docs/reference/model/solidFromMesh.md +16 -9
  531. package/dist/docs/reference/model/sphere.md +13 -6
  532. package/dist/docs/reference/model/star.md +17 -11
  533. package/dist/docs/reference/model/stroke.md +21 -15
  534. package/dist/docs/reference/model/svgPathSection.md +12 -6
  535. package/dist/docs/reference/model/svgSection.md +13 -7
  536. package/dist/docs/reference/model/sweep.md +29 -21
  537. package/dist/docs/reference/model/textSection.md +15 -9
  538. package/dist/docs/reference/model/threadRidge.md +21 -15
  539. package/dist/docs/reference/model/threadedNut.md +41 -38
  540. package/dist/docs/reference/model/threadedRod.md +31 -33
  541. package/dist/docs/reference/model/torus.md +20 -13
  542. package/dist/docs/reference/model/tube.md +13 -41
  543. package/dist/docs/reference/model/union.md +11 -4
  544. package/dist/docs/reference/model.md +11 -20
  545. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +8 -2
  546. package/dist/docs/reference/text/VectorFont.md +39 -33
  547. package/dist/docs/reference/text/VectorFontOptions.md +7 -1
  548. package/dist/docs/reference/text/categories/font-preparation.md +3 -15
  549. package/dist/docs/reference/text/prepareVectorFont.md +7 -1
  550. package/dist/docs/reference/text.md +4 -4
  551. package/dist/engine/execution.js +10 -6
  552. package/dist/engine/finalization.js +2 -74
  553. package/dist/engine/index.js +24 -30
  554. package/dist/engine/model-parts.js +8 -0
  555. package/dist/engine/model-summary.js +5 -5
  556. package/dist/engine/native/construction-mesh.js +41 -0
  557. package/dist/engine/native/index.js +1 -1
  558. package/dist/engine/native/material-components.js +5 -54
  559. package/dist/engine/native/mesh-observation.js +55 -0
  560. package/dist/engine/native/operations.js +0 -7
  561. package/dist/engine/native/regions.js +2 -1
  562. package/dist/engine/native/scoped-primitives.js +5 -4
  563. package/dist/engine/native/threads.js +14 -14
  564. package/dist/engine/{construction-operations.js → operations/construction.js} +25 -23
  565. package/dist/engine/{modeling-context.js → operations/context.js} +12 -10
  566. package/dist/engine/{operation-environment.js → operations/environment.js} +2 -2
  567. package/dist/engine/{extrusion-finishing.js → operations/extrusion-finishing.js} +23 -22
  568. package/dist/engine/{hole-cutter-operation.js → operations/hole-cutter.js} +3 -3
  569. package/dist/engine/{inspection-operations.js → operations/inspection.js} +6 -6
  570. package/dist/engine/operations/join-collar-profile.js +120 -0
  571. package/dist/engine/operations/join.js +508 -0
  572. package/dist/engine/{knuckle-hinge-operation.js → operations/knuckle-hinge.js} +4 -4
  573. package/dist/engine/{loft-operations.js → operations/loft.js} +13 -12
  574. package/dist/engine/{mechanical-operations.js → operations/mechanical.js} +2 -2
  575. package/dist/engine/{pattern-operations.js → operations/patterns.js} +4 -4
  576. package/dist/engine/{primitive-anchors.js → operations/primitives/anchors.js} +9 -4
  577. package/dist/engine/{primitive-operations.js → operations/primitives/construction.js} +18 -19
  578. package/dist/engine/{primitive-correspondence.js → operations/primitives/correspondence.js} +4 -4
  579. package/dist/engine/{profile-mesh.js → operations/primitives/profile-mesh.js} +12 -12
  580. package/dist/engine/{primitive-profiles.js → operations/primitives/profiles.js} +7 -7
  581. package/dist/engine/{section-operations.js → operations/sections.js} +8 -8
  582. package/dist/engine/{transform-operations.js → operations/transforms.js} +8 -8
  583. package/dist/engine/placement.js +3 -4
  584. package/dist/engine/recipe-realization.js +2 -2
  585. package/dist/engine/{deferred-context.js → session/deferred-context.js} +4 -4
  586. package/dist/engine/session/dependencies.js +93 -0
  587. package/dist/engine/session/graph.js +428 -0
  588. package/dist/engine/{session-native.js → session/native-cache.js} +2 -2
  589. package/dist/engine/{session.js → session/session.js} +20 -14
  590. package/dist/engine/{session-snapshot.js → session/snapshot-cache.js} +30 -60
  591. package/dist/export/3mf.js +190 -0
  592. package/dist/export/capture.js +178 -0
  593. package/dist/export/glb.js +209 -0
  594. package/dist/export/index.js +5 -0
  595. package/dist/export/limits.js +18 -0
  596. package/dist/export/stl.js +105 -0
  597. package/dist/export/types.js +1 -0
  598. package/dist/export/writer.js +54 -0
  599. package/dist/geometry/anchors.js +4 -11
  600. package/dist/geometry/bounds-value.js +22 -12
  601. package/dist/geometry/heightfield.js +10 -12
  602. package/dist/{model → geometry}/immutable-buffer.js +31 -12
  603. package/dist/geometry/index.js +16 -22
  604. package/dist/geometry/join-geometry.js +839 -0
  605. package/dist/geometry/loft/loft.js +11 -6
  606. package/dist/geometry/mechanical/index.js +5 -5
  607. package/dist/geometry/mechanical/threads/bevel.js +24 -0
  608. package/dist/geometry/mechanical/{threads.js → threads/fit.js} +4 -4
  609. package/dist/geometry/mechanical/{thread-helices.js → threads/helices.js} +3 -3
  610. package/dist/geometry/mechanical/{thread-mesh-plan.js → threads/mesh-plan.js} +38 -53
  611. package/dist/geometry/mechanical/{thread-mesh.js → threads/mesh.js} +9 -9
  612. package/dist/geometry/mechanical/{thread-profiles.js → threads/profiles.js} +3 -3
  613. package/dist/geometry/mechanical/{thread-solids.js → threads/solids.js} +58 -89
  614. package/dist/geometry/mechanical/{thread-surface.js → threads/surface.js} +7 -8
  615. package/dist/geometry/mesh/mesh-centroid.js +3 -2
  616. package/dist/geometry/mesh/mesh-planar.js +27 -8
  617. package/dist/geometry/mesh/mesh-quality.js +2 -1
  618. package/dist/geometry/mesh/mesh-render.js +205 -0
  619. package/dist/geometry/mesh/mesh-signature.js +7 -6
  620. package/dist/geometry/mesh/mesh-solid-intersections.js +43 -17
  621. package/dist/geometry/mesh/mesh-solid.js +8 -5
  622. package/dist/geometry/mesh/mesh-types.js +1 -0
  623. package/dist/geometry/mesh/mesh.js +13 -22
  624. package/dist/geometry/mesh-api.js +15 -0
  625. package/dist/geometry/primitive-resolvers.js +42 -14
  626. package/dist/geometry/profiles/primitives/circle.js +19 -0
  627. package/dist/geometry/profiles/{shapes.js → primitives/ellipse.js} +6 -10
  628. package/dist/geometry/profiles/{rectangle.js → primitives/rectangle.js} +14 -12
  629. package/dist/geometry/profiles/primitives/regular-polygon.js +33 -0
  630. package/dist/geometry/profiles/primitives/star.js +28 -0
  631. package/dist/geometry/region-offset.js +278 -0
  632. package/dist/geometry/regions.js +11 -1
  633. package/dist/geometry/revolve/revolve-mesh.js +1 -1
  634. package/dist/geometry/{svg-import.js → svg/import.js} +10 -10
  635. package/dist/geometry/sweeps/sweep-mesh.js +1 -1
  636. package/dist/geometry/transform3.js +29 -0
  637. package/dist/index.js +2 -1
  638. package/dist/model/diagnostic-path.js +26 -0
  639. package/dist/model/execution-binding.js +3 -3
  640. package/dist/model/generation.js +9 -3
  641. package/dist/model/geometry-recipes.js +1 -1
  642. package/dist/model/immutable-generation-data.js +45 -14
  643. package/dist/model/join.js +1 -0
  644. package/dist/model/operations.js +34 -144
  645. package/dist/model/recipe-declaration.js +7 -2
  646. package/dist/model/shape-handles.js +31 -7
  647. package/dist/text/index.js +1 -1
  648. package/package.json +38 -11
  649. package/dist/docs/reference/engine/Export3mfOptions.md +0 -29
  650. package/dist/docs/reference/engine/ExportMeshPart.md +0 -65
  651. package/dist/docs/reference/engine/ModelSnapshot.md +0 -184
  652. package/dist/docs/reference/engine/SnapshotPart.md +0 -133
  653. package/dist/docs/reference/engine/validateModel.md +0 -48
  654. package/dist/docs/reference/geometry/ThreadedNutBevel.md +0 -14
  655. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +0 -61
  656. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +0 -56
  657. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +0 -39
  658. package/dist/docs/reference/geometry/computeTriangleMeshSignature.md +0 -64
  659. package/dist/docs/reference/geometry/extrudeMesh.md +0 -77
  660. package/dist/docs/reference/geometry/heightfieldMesh.md +0 -52
  661. package/dist/docs/reference/geometry/helicalThreadRidgeMesh.md +0 -72
  662. package/dist/docs/reference/geometry/helicalThreadSolidMesh.md +0 -106
  663. package/dist/docs/reference/geometry/joinTriangleMeshes.md +0 -40
  664. package/dist/docs/reference/geometry/loftMesh.md +0 -77
  665. package/dist/docs/reference/geometry/meshBounds.md +0 -39
  666. package/dist/docs/reference/geometry/optimizePlanarPatches.md +0 -95
  667. package/dist/docs/reference/geometry/preflightHeightfield.md +0 -43
  668. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +0 -105
  669. package/dist/docs/reference/geometry/reverseTriangleMesh.md +0 -34
  670. package/dist/docs/reference/geometry/sweepMesh.md +0 -86
  671. package/dist/docs/reference/geometry/transformTriangleMesh.md +0 -46
  672. package/dist/docs/reference/geometry/validateTriangleMesh.md +0 -63
  673. package/dist/docs/reference/model/Anchor3.md +0 -55
  674. package/dist/docs/reference/model/AttachOptions.md +0 -69
  675. package/dist/docs/reference/model/Bounds2-type.md +0 -125
  676. package/dist/docs/reference/model/Bounds2Data.md +0 -44
  677. package/dist/docs/reference/model/Bounds2Input.md +0 -19
  678. package/dist/docs/reference/model/Bounds2Options.md +0 -70
  679. package/dist/docs/reference/model/Bounds3-type.md +0 -125
  680. package/dist/docs/reference/model/Bounds3Data.md +0 -44
  681. package/dist/docs/reference/model/Bounds3Input.md +0 -19
  682. package/dist/docs/reference/model/Bounds3Options.md +0 -70
  683. package/dist/docs/reference/model/BoxEdge.md +0 -15
  684. package/dist/docs/reference/model/BoxEdgeSelection.md +0 -19
  685. package/dist/docs/reference/model/BoxEdgeTreatments.md +0 -20
  686. package/dist/docs/reference/model/BoxOptions.md +0 -92
  687. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +0 -35
  688. package/dist/docs/reference/model/CircleContourOptions.md +0 -21
  689. package/dist/docs/reference/model/CircularPrimitiveOptions.md +0 -64
  690. package/dist/docs/reference/model/Computed.md +0 -40
  691. package/dist/docs/reference/model/ComputedValue.md +0 -24
  692. package/dist/docs/reference/model/Contour.md +0 -24
  693. package/dist/docs/reference/model/CorrespondingComponent.md +0 -46
  694. package/dist/docs/reference/model/CorrespondingContour.md +0 -46
  695. package/dist/docs/reference/model/CorrespondingProfile.md +0 -22
  696. package/dist/docs/reference/model/CorrespondingProfileStation.md +0 -27
  697. package/dist/docs/reference/model/CylinderOptions.md +0 -58
  698. package/dist/docs/reference/model/EdgeTreatment.md +0 -22
  699. package/dist/docs/reference/model/EllipseContourOptions.md +0 -21
  700. package/dist/docs/reference/model/EndTreatments.md +0 -39
  701. package/dist/docs/reference/model/FinalizedModel.md +0 -131
  702. package/dist/docs/reference/model/FinalizedPart.md +0 -87
  703. package/dist/docs/reference/model/Frame3.md +0 -63
  704. package/dist/docs/reference/model/GeneratedPart.md +0 -97
  705. package/dist/docs/reference/model/GeometryResolution.md +0 -70
  706. package/dist/docs/reference/model/GeometrySamplingLimits.md +0 -62
  707. package/dist/docs/reference/model/GeometryToleranceOptions.md +0 -46
  708. package/dist/docs/reference/model/GridPatternOptions.md +0 -50
  709. package/dist/docs/reference/model/HeightfieldOptions.md +0 -67
  710. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +0 -141
  711. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +0 -59
  712. package/dist/docs/reference/model/ImmutableBuffer-type.md +0 -84
  713. package/dist/docs/reference/model/ImmutableTriangleMesh.md +0 -38
  714. package/dist/docs/reference/model/InternalThreadCutterOptions.md +0 -246
  715. package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +0 -77
  716. package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +0 -47
  717. package/dist/docs/reference/model/KnuckleHingeSpec.md +0 -18
  718. package/dist/docs/reference/model/LinearPatternOptions.md +0 -39
  719. package/dist/docs/reference/model/LoftCorrespondence.md +0 -27
  720. package/dist/docs/reference/model/LoftOptions.md +0 -91
  721. package/dist/docs/reference/model/LoftPlacement.md +0 -73
  722. package/dist/docs/reference/model/MatchProfilesOptions.md +0 -35
  723. package/dist/docs/reference/model/ModelingLimits.md +0 -126
  724. package/dist/docs/reference/model/NumericArray.md +0 -14
  725. package/dist/docs/reference/model/Path2-type.md +0 -196
  726. package/dist/docs/reference/model/Path2Data.md +0 -50
  727. package/dist/docs/reference/model/Path2Input.md +0 -20
  728. package/dist/docs/reference/model/Path3-type.md +0 -196
  729. package/dist/docs/reference/model/Path3Data.md +0 -50
  730. package/dist/docs/reference/model/Path3Input.md +0 -20
  731. package/dist/docs/reference/model/PathLocation.md +0 -69
  732. package/dist/docs/reference/model/PathNormalGuide.md +0 -46
  733. package/dist/docs/reference/model/PathOptions.md +0 -38
  734. package/dist/docs/reference/model/PathPatternOptions.md +0 -48
  735. package/dist/docs/reference/model/PathResamplingOptions.md +0 -83
  736. package/dist/docs/reference/model/Pivot2Options.md +0 -28
  737. package/dist/docs/reference/model/Pivot3Options.md +0 -28
  738. package/dist/docs/reference/model/PolygonData.md +0 -44
  739. package/dist/docs/reference/model/PrimitiveAttachment.md +0 -41
  740. package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +0 -110
  741. package/dist/docs/reference/model/PrintableThreadFit.md +0 -15
  742. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +0 -51
  743. package/dist/docs/reference/model/ProfileComponent2.md +0 -46
  744. package/dist/docs/reference/model/ProfileContour2.md +0 -36
  745. package/dist/docs/reference/model/ProfileSpan2.md +0 -47
  746. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +0 -41
  747. package/dist/docs/reference/model/RadialPatternOptions.md +0 -59
  748. package/dist/docs/reference/model/RadialSizing.md +0 -15
  749. package/dist/docs/reference/model/RadialSizingOptions.md +0 -40
  750. package/dist/docs/reference/model/RectangleContourOptions.md +0 -72
  751. package/dist/docs/reference/model/RectangleCornerTreatment.md +0 -40
  752. package/dist/docs/reference/model/RectangleCornerTreatments.md +0 -20
  753. package/dist/docs/reference/model/RegionData.md +0 -19
  754. package/dist/docs/reference/model/RevolveOptions.md +0 -94
  755. package/dist/docs/reference/model/RoundedEdgeTreatment.md +0 -96
  756. package/dist/docs/reference/model/SmoothEdgeTreatment.md +0 -76
  757. package/dist/docs/reference/model/SphereOptions.md +0 -20
  758. package/dist/docs/reference/model/StrokeCap.md +0 -16
  759. package/dist/docs/reference/model/StrokeJoin.md +0 -16
  760. package/dist/docs/reference/model/StrokeOptions.md +0 -91
  761. package/dist/docs/reference/model/SweepOptions.md +0 -116
  762. package/dist/docs/reference/model/SweepOrientation.md +0 -116
  763. package/dist/docs/reference/model/ThreadEndStyle.md +0 -15
  764. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +0 -118
  765. package/dist/docs/reference/model/ThreadHandedness.md +0 -15
  766. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +0 -15
  767. package/dist/docs/reference/model/ThreadLeadInShape.md +0 -15
  768. package/dist/docs/reference/model/ThreadProfile.md +0 -87
  769. package/dist/docs/reference/model/ThreadRidgeOptions.md +0 -19
  770. package/dist/docs/reference/model/ThreadedNutBevel.md +0 -15
  771. package/dist/docs/reference/model/ThreadedNutOptions.md +0 -274
  772. package/dist/docs/reference/model/ThreadedNutPreflight.md +0 -99
  773. package/dist/docs/reference/model/ThreadedNutShape.md +0 -15
  774. package/dist/docs/reference/model/ThreadedRodOptions.md +0 -246
  775. package/dist/docs/reference/model/TorusOptions.md +0 -110
  776. package/dist/docs/reference/model/Transform2-type.md +0 -257
  777. package/dist/docs/reference/model/Transform2Data.md +0 -16
  778. package/dist/docs/reference/model/Transform2Input.md +0 -21
  779. package/dist/docs/reference/model/Transform3-type.md +0 -297
  780. package/dist/docs/reference/model/Transform3Data.md +0 -19
  781. package/dist/docs/reference/model/Transform3Input.md +0 -21
  782. package/dist/docs/reference/model/TriangleMesh.md +0 -42
  783. package/dist/docs/reference/model/TriangleMeshAnalysis.md +0 -123
  784. package/dist/docs/reference/model/TriangleMeshMeasurements.md +0 -79
  785. package/dist/docs/reference/model/TubeOptions.md +0 -143
  786. package/dist/docs/reference/model/Vector2-type.md +0 -271
  787. package/dist/docs/reference/model/Vector2Data.md +0 -15
  788. package/dist/docs/reference/model/Vector2Input.md +0 -21
  789. package/dist/docs/reference/model/Vector3-type.md +0 -283
  790. package/dist/docs/reference/model/Vector3Data.md +0 -15
  791. package/dist/docs/reference/model/Vector3Input.md +0 -21
  792. package/dist/docs/reference/model/VectorTextLayout.md +0 -40
  793. package/dist/docs/reference/model/VectorTextMetrics.md +0 -100
  794. package/dist/docs/reference/model/anchor.md +0 -47
  795. package/dist/docs/reference/model/bounds2.md +0 -37
  796. package/dist/docs/reference/model/bounds3.md +0 -37
  797. package/dist/docs/reference/model/castSegment.md +0 -40
  798. package/dist/docs/reference/model/categories/bounds.md +0 -38
  799. package/dist/docs/reference/model/categories/contracts.md +0 -18
  800. package/dist/docs/reference/model/categories/core-values-errors.md +0 -30
  801. package/dist/docs/reference/model/categories/inspection.md +0 -29
  802. package/dist/docs/reference/model/categories/paths.md +0 -41
  803. package/dist/docs/reference/model/categories/resolution.md +0 -20
  804. package/dist/docs/reference/model/components.md +0 -71
  805. package/dist/docs/reference/model/compose.md +0 -31
  806. package/dist/docs/reference/model/distance.md +0 -45
  807. package/dist/docs/reference/model/immutableMesh.md +0 -44
  808. package/dist/docs/reference/model/inspectSection.md +0 -38
  809. package/dist/docs/reference/model/inspectSolid.md +0 -38
  810. package/dist/docs/reference/model/isEmpty.md +0 -39
  811. package/dist/docs/reference/model/path2.md +0 -54
  812. package/dist/docs/reference/model/path3.md +0 -49
  813. package/dist/docs/reference/model/split.md +0 -54
  814. package/dist/docs/reference/model/splitByPlane.md +0 -66
  815. package/dist/docs/reference/model/transform2.md +0 -46
  816. package/dist/docs/reference/model/transform3.md +0 -48
  817. package/dist/docs/reference/model/vector2.md +0 -40
  818. package/dist/docs/reference/model/vector3.md +0 -47
  819. package/dist/docs/reference/text/Bounds2Data.md +0 -34
  820. package/dist/docs/reference/text/Vector2Data.md +0 -7
  821. package/dist/docs/reference/text/VectorTextArcBaseline.md +0 -53
  822. package/dist/docs/reference/text/VectorTextLayout.md +0 -34
  823. package/dist/docs/reference/text/VectorTextLayoutOptions.md +0 -111
  824. package/dist/docs/reference/text/VectorTextMetrics.md +0 -94
  825. package/dist/docs/reference/text/VectorTextOptions.md +0 -50
  826. package/dist/engine/export-3mf.js +0 -116
  827. package/dist/engine/model-dependencies.js +0 -46
  828. package/dist/engine/session-graph.js +0 -449
  829. package/dist/geometry/profiles/profiles.js +0 -71
  830. /package/dist/engine/{primitive-profile-types.js → operations/primitives/profile-types.js} +0 -0
  831. /package/dist/{engine → geometry/mesh}/mesh-view-cache.js +0 -0
  832. /package/dist/geometry/profiles/{matched.js → match-profiles.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,191 @@
1
1
  # @metamesh/modeling
2
2
 
3
+ ## 0.19.0
4
+
5
+ ### Minor Changes
6
+
7
+ - c9de510: Extend straight extrusion end finishing to concave outlines, holes, and disconnected regions.
8
+ Add independent-solid `join` with a feature datum and a smooth (default) or straight width/height
9
+ transition against validated planar, angled, and curved sampled support patches. Both profiles use
10
+ the same support, collar, and whole-volume containment proofs.
11
+
12
+ Breaking: compiled Generators require Modeling runtime major 12. Rebuild packages for the new
13
+ host contract; old compiled runtimes are rejected. Joining preserves the supplied operands and
14
+ does not promise a circular fillet radius or perform automatic placement.
15
+
16
+ Replace named lazy `computed` readers with eager `memo(fn, ...args)` values. Stable pure helpers
17
+ reuse immutable arguments and tracked current params/context reads, with bounded recent histories
18
+ and native geometry retention. Update Studio diagnostics to warn about fresh function identities.
19
+ All authored and compiled callers must use the new API; there is no compatibility surface.
20
+
21
+ - de3d234: Add runtime-neutral STL, 3MF, and GLB export under `@metamesh/modeling/export`, with isolated
22
+ format entry points and backpressure-aware streaming writers. All formats consume captured local
23
+ geometry, placement, and appearance, with independent limits, cancellation, and structured
24
+ information-loss diagnostics. Standard 3MF color groups carry appearance, while base materials
25
+ and multiproperties retain explicit material identities independently of RGB values. These
26
+ properties do not assign slicer filaments or physical device trays. Add `mesh.render()` for
27
+ shared crease-aware display buffers that preserve exact triangle coordinates.
28
+
29
+ Breaking: remove `export3mf` and export types from `/engine`, remove SDK export request protocols
30
+ and `toWorldMeshes`, and return owned `Uint8Array` bytes with format metadata from the shared
31
+ exporters. Studio uses one export worker for every format. CLI captures use format version 3;
32
+ replace `run --export-3mf` with `metamesh export RUN_DIRECTORY --format 3mf --output model.3mf`.
33
+ Captured-run export also supports STL and GLB without rerunning source. No legacy export paths
34
+ or capture readers are retained.
35
+
36
+ ## 0.18.0
37
+
38
+ ### Minor Changes
39
+
40
+ - 2eea694: Consolidate model authoring, execution, and testing around fluent shapes and durable immutable
41
+ results. Upgrade all four packages together; these Preview API changes have no compatibility
42
+ aliases. Rebuild compiled Generators for module format 5 and Modeling runtime major 11. Older
43
+ module formats and incompatible runtime versions are rejected before execution.
44
+
45
+ ### Modeling imports and operations
46
+
47
+ | Previous API | 0.18 API |
48
+ | ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
49
+ | `body.subtract([cutter])` for a single operand | `body.subtract(cutter)`; fluent `union`, `intersect`, and `subtract` accept one shape or a readonly array |
50
+ | `compose(shapes)` | `union(shapes)` |
51
+ | Free shape inspection, emptiness, component, and anchor queries | `shape.inspect()`, `shape.isEmpty()`, `shape.components()`, and `shape.anchor(name)` |
52
+ | Free Solid distance/segment queries and splitting functions | `solid.distance(other)`, `solid.castSegment(...)`, `solid.split(cutter)`, and `solid.splitByPlane(plane)` |
53
+ | `solid.toTriangleMesh()` | `solid.toMesh()` |
54
+ | Named `mesh` import from `/geometry`, or standalone triangle-mesh functions | `import * as mesh from "@metamesh/modeling/geometry/mesh"` |
55
+ | Standalone `immutableMesh(...)` | `mesh.immutable(...)` |
56
+ | `helicalThreadRidgeMesh`, `helicalThreadSolidMesh`, and `preflightHelicalThreadSolidMesh` | `mesh.threadRidge`, `mesh.threadSolid`, and `mesh.preflightThreadSolid` |
57
+ | `HelicalThreadRidgeMeshOptions`, `HelicalThreadSolidMeshOptions`, and `HelicalThreadSolidMeshPreflight` | `ThreadRidgeOptions`, `ThreadSolidOptions`, and `ThreadSolidPreflight`, exported from the mesh module |
58
+ | Mesh `connectedComponentCount` | `shellCount`; native inspection `componentCount` still counts material components |
59
+ | Inspection extrema on the inspection result | Immutable `inspection.bounds.min` and `inspection.bounds.max` |
60
+ | `starContour(outerRadius, points, innerRadius, limits)` | `starContour({ outerRadius, innerRadius, points, limits })` |
61
+
62
+ Free `union(shapes)` and `intersect(shapes)` remain for collections of peers and reject empty
63
+ collections. Fluent Boolean methods with an empty array return the receiver.
64
+
65
+ Use `section.extrude(options)` in fluent modeling, `extrude(profile, options)` for generic
66
+ `Section | CorrespondingProfile` inputs, and `mesh.extrude(contour, options)` for pure triangle
67
+ buffers. The same fluent/generic distinction applies to revolution and sweeping. Pure extrusion
68
+ uses `ExtrudeMeshOptions` and rejects `ends`; use Section extrusion for native end treatments.
69
+ Construction, transforms, and splitting remain deferred recipes; observations and `toMesh()`
70
+ require active model execution.
71
+
72
+ Point-loop and arbitrary Section lofts default to direct correspondence when the method is
73
+ omitted; known primitive landmarks remain preserved. Dimension inputs accept fluent vectors.
74
+ Tube sizing accepts complete inner/outer radius or diameter pairs. Both star factories require
75
+ an explicit inner radius and support degree rotation; use `innerRadius: outerRadius / 2` to retain
76
+ the contour helper's former default.
77
+
78
+ Rod and internal-cutter `bevelBottom`, `bevelTop`, and `bevelSize` become `bevel`. The shared
79
+ `Bevel` contract accepts a nonnegative size, `"auto"`, or a readonly `[bottom, top]` pair; zero
80
+ disables an end and omission preserves factory defaults. Complete-thread mesh builders use the
81
+ same contract, with thread termination under `ends`. Nuts replace bevel selection, `chamferSize`,
82
+ and `flushBuildPlateBottom` with independent `innerBevel` and `outerBevel`. For a flat outside
83
+ bottom that retains its inner opening bevel, use `outerBevel: [0, "auto"]`. Nut preflight exposes
84
+ resolved inner/outer pairs and checks face walls pairwise; each end's reservation and automatic
85
+ sizing are resolved independently, including internal-cutter axial extension.
86
+
87
+ Primitive contours and their points are immutable and can be explicit `computed` dependencies.
88
+ Copy the outer array and any points before editing. Geometry errors are available from the
89
+ Modeling root; operation option/result types are exported beside their owning operations.
90
+ Topology analysis with `includeTopology: true`, finalized parts, and local geometry resources
91
+ include required `shellCount` and `edgeCount`. Bounds construction options describe inputs only;
92
+ existing fluent bounds remain accepted.
93
+
94
+ ### Part placement and result ownership
95
+
96
+ Replace `part(id, { geometry, position, rotation })` with
97
+ `part(id, { geometry, transform })`. The optional transform accepts a fluent `transform3()` value,
98
+ a row-major 16-number matrix, or a computed reader; omission means identity. Pattern and
99
+ attachment matrices pass directly to `part()`. Only rigid placement is supported: scale, shear,
100
+ reflection, perspective, and non-finite values are rejected. Geometry-only and geometry-or-options
101
+ union inputs remain accepted without casts.
102
+
103
+ Use `PartDeclaration` for authored parts. Replace `ModelSnapshot` / `FinalizedModel` with
104
+ `ModelResult`, and `SnapshotPart` / `FinalizedPart` with `ModelPart`. `engine.run()`, `session.run()`,
105
+ and Testkit's `runModel()` return durable immutable results. Dispose sessions and runners to release their
106
+ caches; completed results remain valid and need no disposal. `model.part(id)` returns a required
107
+ semantic part or throws with available IDs; `model.parts` preserves output order.
108
+
109
+ Finalized buffers expose stable, iterable `ImmutableBuffer` values. Use `.copy()` for mutable
110
+ storage. A `ModelPart`'s top-level positions and indices are already in world space; apply its
111
+ immutable `transform` only to the reusable local buffers under `geometry`. Worker deliveries also
112
+ nest local resources under `geometry`. Host integrations use `ModelDeliveryEncoder`,
113
+ `PartDeliveryDecoder`, and `toWorldMeshes` for owned transfer and manufacturing output.
114
+ Replace `engine.export3mf(...)` with standalone `export3mf(parts, options)` from `/engine`, which
115
+ accepts completed meshes with explicit resource limits, independently of engine initialization.
116
+
117
+ Statistics rename `volumeMm3` → `signedVolume`, `finalizationMs` → `finalizeMs`, and
118
+ `generationMs` → `generateMs`; `buildMs` measures declarations.
119
+ `ModelResult.stats.byteCount` means bytes occupied by finalized world-space position and index buffers,
120
+ counting shared buffers once. Worker statistics preserve engine `generateMs`; host elapsed time
121
+ is `timings.totalMs`, with `paramsMs` for parameter work. Other host timing stages are optional:
122
+ an omitted stage is unmeasured.
123
+
124
+ Model parameter roots must be object maps. Captured parameters and computed results expose
125
+ deeply readonly `ImmutableValue<T>` views; supported mutable caller input is still accepted and
126
+ recaptured on every revision, including mutable children inside frozen objects. Deeply immutable
127
+ data retains identity reuse. Assertions and warnings accept bounded immutable nested `path`
128
+ metadata. Replace `validateModel` with `checkModel` and session/runner `.validate()` with `.check()`.
129
+ These check declarations and reached assertions without finalizing geometry; unexpected execution
130
+ failures still throw.
131
+
132
+ ### Generator SDK and Testkit
133
+
134
+ | Previous API | 0.18 API |
135
+ | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
136
+ | Nested compiled Generator module | Flat format-5 model program; bind an existing program with `defineGeneratorModule({ definition, program })` |
137
+ | `isGeneratorModule(value)` | `parseGeneratorModule(value, definition)` |
138
+ | `executeGenerator({ ..., parsedParameters })` | `executeGenerator({ ..., parameters })`; current-definition validation always runs |
139
+ | Callback-scoped `withModel`, `ModelTestOptions`, or `runner.withModel` | `await runModel(programOrCallback, ...)` for one-off results; explicit sessions or Generator runners for repeated edits |
140
+ | Generator test `runner.execute(...)` | `runner.run(...)`, returning `GeneratorTestResult` |
141
+ | `expectSerializableDefinition` | `assertValidDefinition` |
142
+ | `expectValidDefaults`, `expectValidPresets`, and `expectValidParts` | `assertValidDefaults`, `assertValidPresets`, and `assertValidParts` |
143
+ | `expectMeshMeasurements` | `assertMeshMeasurements` |
144
+ | `canonicalizeParameters(definition, parameters)` from `/parameters` | `canonicalizeParameters(parameters)` from `/runtime` |
145
+ | `GeneratedPartsDecoder`, `parseGeneratedParts`, and `GeneratedPartsLimits` | `PartDeliveryDecoder`, `parseModelParts`, and `PartDeliveryLimits` |
146
+ | `GeneratedPart` and `GeneratedModel` | `ModelPartData` and `ModelData` |
147
+ | `GeneratedPartDelivery` and `GeneratedModelDelivery` | `PartDelivery` and `ModelDelivery` |
148
+
149
+ Testkit `runModel` accepts existing `ModelProgram` values and synchronous inline callbacks;
150
+ typed callbacks use `runModel<Parameters, Services>`. Its definition-bound Generator overload
151
+ validates inputs and prepares services. The SDK Modeling adapter adds definition-inferred
152
+ `GeneratorModel` and `parseGeneratorModel`. Ordinary model tests preserve definition-inferred
153
+ input types. Reusable Generator runners accept physical generation policy plus `cache` and
154
+ `verifyCache` for edit sequences; dispose the runner after use.
155
+
156
+ Generator execution and ordinary tests strictly require complete canonical parameter maps.
157
+ Use the parameter codec for strict input and `normalizeParameters` for forgiving recovery;
158
+ replace `prepareParameters`, `validateParameters`, and `PreparedParameters` with
159
+ `createParamCodec(definition).parse(...)` or `.safeParse(...)`. Schema adapters remain private.
160
+ Codec failures provide structured issues without a substitute parameter map. For deliberate
161
+ malformed-input assertion probes, replace `runner.validate(parameters, { normalize: false })`
162
+ with `runner.check(parameters, { validateInput: false })`.
163
+ Defaults are selected only by omission or `undefined` where supported; a `null` parameter map is
164
+ rejected. Parameterless model calls can omit the empty map. Definition and preset helpers catch
165
+ nested key typos and validate immediately while retaining literal inference.
166
+
167
+ `assertValidParts` checks the supplied world-space buffers, closed topology, and exact agreement
168
+ with local geometry under `transform`; it no longer hides corrupted output by reconstructing it.
169
+ Always await `assertValidParts(parts, engine)` (or omit the engine): failures reject, and supplying
170
+ an engine changes resource reuse only.
171
+ `assertValidDefinition` also checks the canonical JSON round trip. New `assertEqualBuffer` and
172
+ `assertEqualMesh` compare exact ordered contents without copying; equivalent shapes with different
173
+ triangulations can differ. `ContentMismatchError` identifies the first differing element or
174
+ length, while malformed input and reader failures retain their errors. Optional `contentMatchers`
175
+ support `expect.extend`, including negation, without a test-framework dependency.
176
+
177
+ ### CLI and package requirements
178
+
179
+ Rename the type-only CLI command `metamesh check` to `metamesh typecheck`; no alias is retained.
180
+ Node authoring APIs and Modeling/Testkit declaration-check methods retain their names. Generator
181
+ runs use `overrides` / `--overrides`, merged with defaults before strict parsing; standalone models
182
+ use `params` / `--params`. Supplying the other entry kind's input option is rejected.
183
+
184
+ Captured runs use format 2 with transform-only placement. The bundled capture renderer resolves
185
+ from the installed CLI package so published installations can render captures.
186
+ Public packages require Node.js 24 or newer, ESM imports, and TypeScript 6.0 or newer with strict
187
+ checking for TypeScript consumers.
188
+
3
189
  ## 0.17.0
4
190
 
5
191
  ### Minor Changes
package/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # `@metamesh/modeling`
2
2
 
3
- Build parametric 3D parts in TypeScript. Combine solids, work with pure geometry, and export 3MF
4
- from Node applications, browser Workers, or MetaMesh Generators.
3
+ Build parametric 3D models in TypeScript. Combine shapes, add holes and threads, and change the
4
+ dimensions without rewriting the model. Run it in Node.js or a browser Worker. Use the resulting
5
+ meshes in your own application or export them for printing.
5
6
 
6
7
  > **Preview:** `0.x` minor releases may break compatibility. Patches remain compatible within the
7
8
  > same minor line.
@@ -12,197 +13,186 @@ from Node applications, browser Workers, or MetaMesh Generators.
12
13
  pnpm add @metamesh/modeling
13
14
  ```
14
15
 
15
- Modeling works on its own; the Generator SDK and Testkit are optional.
16
+ The package publishes ES modules only. Use Node.js 24 or newer. TypeScript consumers need
17
+ TypeScript 6.0 or newer, `strict` checking, and `NodeNext` or `Bundler` module resolution.
18
+ Browser hosts need an ES2023-compatible runtime and WebAssembly; run the engine in a Worker.
19
+
20
+ Use Modeling on its own, or add the [Generator SDK](https://github.com/JasonKoolman/metamesh/blob/main/packages/generator-sdk/README.md)
21
+ for controls and presets, [Testkit](https://github.com/JasonKoolman/metamesh/blob/main/packages/testkit/README.md)
22
+ for tests, and the [CLI](https://github.com/JasonKoolman/metamesh/blob/main/packages/cli/README.md)
23
+ to check, run, and render local source. Studio isn't required.
16
24
 
17
25
  ## Start modeling
18
26
 
19
- Build a plate with a hole, then export its finished geometry:
27
+ This Node.js example builds a plate with an adjustable width and a through hole:
20
28
 
21
29
  ```ts
22
30
  import { box, cylinder, generate } from "@metamesh/modeling";
23
31
  import { createModelEngine } from "@metamesh/modeling/engine";
24
32
 
25
- const model = generate<Record<never, never>>(({ part }) => {
26
- const body = box({ size: [30, 20, 6] });
33
+ const model = generate<{ width: number }>(({ params, part }) => {
34
+ const plate = box({ size: [params.width, 20, 6] });
27
35
  const bore = cylinder({ height: 8, radius: 3, sizing: "face" });
28
- return part("plate", body.subtract([bore]));
36
+ return part("plate", plate.subtract(bore));
29
37
  });
30
38
 
31
39
  const engine = await createModelEngine();
32
- const session = engine.createSession(model, { resolution: { maxChordError: 0.025 } });
33
- try {
34
- const snapshot = session.run({});
35
- try {
36
- const bytes = await engine.export3mf(snapshot.parts, { name: "Plate" });
37
- // Save or send the 3MF bytes.
38
- } finally {
39
- snapshot.dispose();
40
- }
41
- } finally {
42
- session.dispose();
43
- }
40
+ const result = engine.run(model, { width: 30 }, { resolution: { maxChordError: 0.025 } });
41
+
42
+ console.log(result.bounds, result.stats.signedVolume, result.stats.generateMs);
44
43
  ```
45
44
 
46
- Use `path2(points, { closed })` or `path3(points)` for reusable sampled trajectories.
47
- Paths own closure and chain `transform`, `reverse`, and `resample` immutably. `path.closestPoint(point)`
48
- returns the nearest boundary position, distance, edge index, and fraction within that edge.
49
- Use `stroke(path, { width, cap, join })` to fill a sampled XY path without conversion.
45
+ The generation callback reads typed values through `params` and returns named parts. Organize the
46
+ model with ordinary TypeScript functions, conditionals, and loops. `result.part("plate")` finds the plate by its ID;
47
+ `result.parts` contains all the completed parts, with their meshes, placement, colors, and measurements.
48
+
49
+ Lengths use millimetres and rotations use degrees. `maxChordError` controls physical curve
50
+ sampling in both preview and manufacturing output. Browser hosts also configure the WebAssembly
51
+ asset and run the engine in a Worker; see the
52
+ [hosting guide](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/engine/hosting.mdx).
50
53
 
51
- Generation is synchronous. Return a single `part(...)` or a readonly array of parts. Shape constructors
52
- and methods create immutable recipes without an engine. Ordinary recipes can be reused across
53
- sessions regardless of where they were constructed. Explicit resolution settings are captured;
54
- unspecified settings inherit the evaluating host's defaults. Observed `components()` selections
55
- and recipes using them can only be evaluated in their originating session. The engine evaluates
56
- recipes into a snapshot for rendering or export. Sessions own evaluated caches and native resources,
57
- while snapshots remain usable after their session is disposed.
58
- Dispose both when finished. Export uses the captured geometry without running the model again.
54
+ ## Modeling capabilities
59
55
 
60
- `components()` returns disconnected material pieces with their holes and enclosed cavities intact.
61
- Inspection `componentCount` counts these pieces; snapshot `stats.partCount` counts declared output
62
- parts. Snapshot `stats.vertexCount` and `stats.triangleCount` count all instances, while
63
- `stats.byteCount` counts shared backing storage once.
56
+ | Area | Capabilities |
57
+ | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
58
+ | Shapes and sections | Solid primitives, filled 2D shapes with holes, Booleans, hulls, 2D offsets, splitting, edge treatments, and controlled solid joins. |
59
+ | Sweeps and surfaces | Extrusion, revolution, sweeps, lofts with explicit profile correspondence, heightfields, and implicit surfaces. |
60
+ | Paths and placement | Immutable vectors, paths, transforms, and bounds; anchors, layout, and linear, radial, grid, and path patterns. |
61
+ | SVG and text | Bounded SVG fills and strokes, prepared font outlines, and vector text layout. |
62
+ | Mechanical geometry | Printable threads, knuckle joints, gear profiles, fastener standards, and fit calculations. |
63
+ | Meshes and inspection | Indexed mesh construction and conversion, measurements, spatial queries, topology checks, and bounded preflight. |
64
64
 
65
- Lengths use millimetres and modeling rotations use degrees. Physical resolution controls curve
66
- sampling for both preview and manufacturing output. See the
67
- [hosting guide](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/engine/hosting.mdx)
68
- for browser WASM setup, resource limits, and lifecycle details.
65
+ The [geometry values guide](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/geometry-values.mdx)
66
+ helps you choose a representation. The [recipes](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/geometry-recipes.mdx)
67
+ show how these capabilities fit together.
69
68
 
70
- ## Reusable math and shapes
69
+ ## Pure triangle meshes
71
70
 
72
- Use immutable fluent vectors, paths, bounds, and transforms for ordinary modeling. Transform chains apply in written order,
73
- rotations use degrees, and an optional `pivot` is a fixed world-space point:
71
+ Use `@metamesh/modeling/geometry/mesh` when you want to construct and process triangle buffers
72
+ without an engine:
74
73
 
75
74
  ```ts
76
- import { polygon, transform2, vector3 } from "@metamesh/modeling";
77
-
78
- const placement = transform2()
79
- .rotate(30, { pivot: [10, 5] })
80
- .scale([2, 1])
81
- .translate([20, 0]);
82
- const body = polygon({
83
- outer: [
84
- [0, 0],
85
- [20, 0],
86
- [10, 10],
87
- ],
88
- holes: [],
89
- })
90
- .transform(placement)
91
- .extrude({ height: 8 });
92
- const direction = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
93
- const alignment = direction.dot([0, 0, 1]);
75
+ import { rectangleContour, transform3 } from "@metamesh/modeling/geometry";
76
+ import * as mesh from "@metamesh/modeling/geometry/mesh";
77
+
78
+ const plate = mesh.extrude(rectangleContour({ size: [30, 20] }), { height: 8 });
79
+ const positioned = mesh.transform(plate, transform3().translate([10, 0, 0]));
80
+ const facts = mesh.analyze(positioned, { requireClosed: true });
94
81
  ```
95
82
 
96
- Transforms apply separately to points, directions and normals with `applyPoint`, `applyDirection`
97
- and `applyNormal`. `andThen` composes placements in execution order; `inverse` reverses them.
98
- Value types use domain names (`Vector2`, `Transform2`, `Path2`, `Bounds2`); their plain
99
- representations use `Data`, and accepted construction forms use `Input`. Use `toData()` for
100
- canonical plain interchange, including path dimension and closure. Tuple arithmetic kernels remain available in
101
- `/geometry` for dense numerical loops.
102
-
103
- Primitive `attachment` maps a local anchor to a target anchor using the same degree-based
104
- `AttachOptions` as `solid.attach()`. Rotation references use `pivot`; immutable tolerance changes
105
- use `solid.withTolerance(value)`. Final part `position` and `rotation` remain rigid placement data,
106
- separate from reusable geometry.
107
-
108
- `Section` is the filled 2D modeling value. Its serialized representation is `RegionData`;
109
- `polygon({ polygons: data })` constructs a Section from it. `section.toRegionData()` and other
110
- geometry observations need an active synchronous host execution.
111
- `solid.toTriangleMesh()` follows the same observation rule and returns copied mesh buffers.
112
- Closed `Path2` values describe traversal, not material; `polygon(path)` fills them and normalizes
113
- winding. Path transforms preserve traversal under reflection. `toData()` supplies a frozen record with points, closure, and dimension for interchange.
114
-
115
- Use `bounds2({ min, max })` and `bounds3({ min, max })` for axis-aligned extents with fluent
116
- `size()`, `center()`, and `containsBounds()` queries. Construct from dimensions with
117
- `bounds2({ size: [30, 18] })` or `bounds3({ size: [30, 18, 8], center: false })`; centered size
118
- construction is the default, and size cannot be combined with min/max. Path `bounds()` returns these values, or
119
- `undefined` for an empty path. Measurements and snapshots retain plain `Bounds2Data` / `Bounds3Data`;
120
- wrap them once for fluent queries and use `toData()` for a frozen min/max record.
121
- Containment includes touching boundaries in the same coordinate frame; it does not establish
122
- manufacturing fit. Pure `fitBounds` and `layoutRow` accept values or data for fitting and row placement.
123
-
124
- ## Hole and pocket cutters
125
-
126
- `holeCutter({ diameter, height })` declares a circular cutter from Z=0 to `height`.
127
- Use `profile: regularPolygon(...)` or `profile: rectangle(...)` instead of `diameter` for
128
- existing Section outlines. Plain profiles may have holes or disconnected regions. A positive
129
- `entryChamfer` must be smaller than `height`. Circular entries use nominal frustum radii;
130
- profile entries expand one strictly convex contour without holes by 45-degree parallel-edge
131
- offsets of its sampled boundary.
132
-
133
- Circular cutters additionally accept a `recess` with `kind: "counterbore"`, `diameter` and `depth`,
134
- or `kind: "countersink"`, `diameter` and full `includedAngle` in degrees. Recesses and entry chamfers
135
- are alternatives; `face` selects the top opening by default or the bottom opening explicitly.
136
- Both `overrun.bottom` and `overrun.top` default to zero. To preserve a blind pocket floor, position
137
- the cutter at that floor and extend only its top. Consumers own fit allowances and retained walls.
138
-
139
- ## Mechanical joints
140
-
141
- `knuckleHinge(options)` declares separate `halfA` and `halfB` solids with a centered +X pin axis
142
- and +Z roll guide. Choose `print-in-place`, `inserted-pin`, or `lift-off` construction. Captive
143
- joints require an odd knuckle count; lift-off joints require two knuckles and an explicit
144
- `pinEngagement`. Inserted-pin joints supply no pin or retention hardware.
145
-
146
- Each half accepts an optional rectangular web with its own Y direction, lower-face Z coordinate
147
- (`zMin`), thickness, and reach, or can remain barrels only. Optional per-half `chamfer` sets the
148
- 45-degree setback in millimetres at both ends of every barrel and on exposed web edges. The root
149
- at the pin centreline stays square so its faces merge with the barrel. The setback defaults to
150
- zero and must leave a positive barrel wall and axial band. Web thickness must exceed twice the
151
- setback; web reach and knuckle length must exceed `2 * Math.SQRT2 * chamfer` to retain the end contours.
152
- Consumers connect disconnected intervals to their plates or shells, preserve bores when adding
153
- material, and own mounting holes, part placement, and motion. Arbitrary attachments
154
- have no guaranteed opening range. Use `resolveKnuckleHinge(spec, sampling)` from `/geometry` for
155
- the immutable interval schedule, axis frame, integral pin extent, and conservative faceted wall.
156
-
157
- Radial clearance is a per-side allowance; axial gap is the total space between neighboring
158
- knuckle ends. Both may be zero for ideal contact, which does not establish a printable fit.
159
- Sampling follows the normal resolution contract; exact circular counts must be divisible by four.
83
+ Constructors return `TriangleMesh` values with `positions` and `indices`. `mesh.join` concatenates
84
+ buffers; it doesn't perform a solid union, so overlapping geometry remains overlapping.
85
+ `mesh.loft(stations)` retains the supplied seams and vertices through direct correspondence by default.
86
+ `mesh.optimizePlanarPatches` returns an optimized mesh together with its report.
160
87
 
161
- ## Reuse unchanged work
88
+ For threads, use `mesh.threadRidge` for a helical ridge or `mesh.threadSolid` for a complete threaded
89
+ cylinder. `mesh.preflightThreadSolid` estimates sampling and allocation before construction.
162
90
 
163
- Use optional `computed` values for expensive geometry or data. Keep ordinary arithmetic and part
164
- placement simple:
91
+ Use `mesh.immutable` to capture mesh buffers in memoized data. Primitive contour constructors
92
+ return frozen arrays of frozen points, suitable for `memo` arguments. To edit a
93
+ contour, create owned points first: `contour.map(([x, y]) => [x, y])`.
165
94
 
166
- ```ts
167
- const model = generate<{ height: number; gap: number }>(({ params, computed, part }) => {
168
- const body = computed("body", () => box({ size: [10, 10, params.height] }));
169
- return [part("left", body), part("right", { geometry: body, position: [10 + params.gap, 0, 0] })];
170
- });
171
- ```
95
+ Import the mesh module directly so bundlers can remove unused operations and their dependencies.
172
96
 
173
- Changing `gap` reuses the body's geometry; changing `height` recomputes it. Read parameters and
174
- other computed readers inside the callback so their dependencies are tracked. Changing outer
175
- captures need an explicit dependency array. Callbacks are pure and synchronous; cached data is
176
- immutable. Use `immutableBuffer` and `immutableMesh` for cached typed arrays and meshes.
97
+ ## Reuse unchanged work
177
98
 
178
- The [computed-value guide](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/code-project-contract.mdx)
179
- covers dependency tracking, immutable data, cache verification, and part placement.
99
+ Shape constructors and fluent methods create immutable recipes, leaving their inputs unchanged.
100
+ You can declare shapes before creating an engine. The engine evaluates them during a synchronous
101
+ run and manages native allocations and cleanup.
102
+
103
+ Use shape methods for fluent modeling: `body.union(boss).subtract(bore).intersect(envelope)`.
104
+ Each Boolean method accepts one same-dimensional shape or a readonly array; an empty array preserves
105
+ the receiver. Collection `union(shapes)` and `intersect(shapes)` combine peers and need at least one
106
+ shape. Queries use `shape.inspect()`, `shape.isEmpty()`, `shape.components()`, and `shape.anchor(name)`;
107
+ Solids also support `distance`, `castSegment`, `split`, and `splitByPlane`. Use `solid.toMesh()` for
108
+ copied triangle buffers during active generation.
109
+
110
+ Prefer `section.extrude(options)` in a modeling sequence. Imported `extrude(profile, options)` accepts
111
+ `Section | CorrespondingProfile` for reusable profile functions; `revolve` and `sweep` follow the same
112
+ convention. Use `mesh.extrude(contour, options)` for pure triangle-buffer construction.
113
+
114
+ Use `engine.run()` for a single build and `engine.createSession()` for repeated edits.
115
+ Inside generation, `memo(fn, ...args)` reuses expensive pure calculations. Define helpers outside
116
+ generation, pass immutable inputs, and pass the current `params` to track the fields a helper reads.
117
+ Keep final part placement separate from local geometry so moving a part can reuse its mesh.
118
+ Results are immutable and remain usable after later runs. Call `session.dispose()` when you're
119
+ finished with a session; individual results need no disposal.
120
+
121
+ Use `part(id, { geometry, transform: transform3().rotate([0, 0, 90]).translate([20, 0, 0]) })`
122
+ for final placement. The transform accepts a fluent value or row-major 16-number matrix, including
123
+ pattern and attachment outputs; omission means identity. Only translation and proper rotation are
124
+ allowed. Completed parts expose the copied frozen matrix as `part.transform`.
125
+
126
+ ### Parameters and validation
127
+
128
+ Parameters and memo results use `ImmutableValue<T>`: nested objects, arrays, and tuples are
129
+ readonly. Copy data before editing it. Fluent methods and explicit buffer `copy()` methods keep
130
+ their ordinary return types.
131
+
132
+ Parameters use an object map; named interfaces and nested arrays or tuples remain supported.
133
+ Each run recaptures mutable caller data, including mutable children of frozen objects. Sessions
134
+ reuse unchanged complex parameter identities only when their complete data graph is immutable.
135
+ Values must be data the engine can capture. Ordinary class instances such as `Date`, functions,
136
+ and mutable typed arrays reject at runtime; use scalar dates, prepared services, or explicit
137
+ `immutableBuffer` captures as appropriate. TypeScript types alone don't establish that an object
138
+ contains supported data.
139
+
140
+ The context's `assert` reports generation diagnostics; it does not act as a TypeScript narrowing
141
+ assertion. When narrowing is needed, use a conditional guard such as
142
+ `if (params.size === undefined) return assert(false, "Size is required.")` before reading the value.
143
+
144
+ Use `session.check(parameters)` or standalone `checkModel(program, parameters)` to check declarations
145
+ and reached assertions without finalizing output. Use `run()` to evaluate and finalize geometry.
146
+ Checks return expected assertion errors and warnings; unexpected execution and geometry failures throw.
147
+
148
+ See [generation and caching](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/code-project-contract.mdx)
149
+ for dependency rules, immutable data, and session ownership.
150
+
151
+ ## Inspect and export parts
152
+
153
+ Authored parts use `PartDeclaration`; completed output uses `ModelPart` and `ModelResult` from
154
+ `/engine`. A completed part's top-level buffers contain world coordinates; `part.geometry` holds
155
+ reusable local geometry. Read immutable buffers through iteration or `.at(index)`, or use `.copy()`
156
+ to get an owned typed array.
157
+
158
+ Local and world-space measurements include `signedVolume` in mm³, `surfaceArea` in mm²,
159
+ `shellCount`, and `edgeCount`. Completed parts always include the topology counts, even when
160
+ optional topology analysis of an arbitrary mesh would omit them.
161
+
162
+ Result statistics include `buildMs`, `finalizeMs`, and `generateMs`; `generateMs` includes cleanup.
163
+ `stats.byteCount` counts finalized world-space position and index buffer bytes, counting shared
164
+ buffers once. It doesn't measure local resources, transfer size, or total working memory.
165
+
166
+ Export `result.parts` as STL, 3MF, or GLB with `@metamesh/modeling/export`. Export needs no engine.
167
+ The [hosting guide](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/engine/hosting.mdx#export-the-completed-result)
168
+ covers saving files and choosing a format.
180
169
 
181
170
  ## API discovery and ownership
182
171
 
183
- | Import | Use it for |
184
- | ------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
185
- | [`@metamesh/modeling`](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/reference/generated/model/index.mdx) | Immutable shapes, vectors, paths, transforms, and modeling operations |
186
- | [`@metamesh/modeling/geometry`](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/reference/generated/geometry/index.mdx) | Pure paths, profiles, meshes, and calculations |
187
- | [`@metamesh/modeling/engine`](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/reference/generated/engine/index.mdx) | Sessions, snapshots, limits, and 3MF export |
188
- | [`@metamesh/modeling/text`](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/reference/generated/text/index.mdx) | Optional font preparation and vector layouts |
172
+ | Import | Responsibility |
173
+ | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
174
+ | [`@metamesh/modeling`](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/reference/generated/model/index.mdx) | Shapes, fluent values, modeling operations, and generation programs. |
175
+ | [`@metamesh/modeling/geometry`](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/reference/generated/geometry/index.mdx) | Pure TypeScript geometry, sampling, numerical helpers, and mesh contracts without a native engine. |
176
+ | [`@metamesh/modeling/geometry/mesh`](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/reference/generated/mesh/index.mdx) | Triangle mesh construction, processing, and inspection through direct `mesh.*` imports. |
177
+ | [`@metamesh/modeling/engine`](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/reference/generated/engine/index.mdx) | Host initialization, execution, and resource limits. |
178
+ | [`@metamesh/modeling/export`](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/reference/generated/export/index.mdx) | STL, 3MF, and GLB export. |
179
+ | [`@metamesh/modeling/text`](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/reference/generated/text/index.mdx) | Optional font preparation and reusable vector layouts from supplied bytes. |
180
+
181
+ Font preparation requires the optional `fontkit` peer; add `woff2-encoder` for WOFF2 input. Models
182
+ consume prepared layouts without fetching fonts during generation. Your host owns viewing,
183
+ application state, asset loading, and export delivery.
189
184
 
190
185
  ## Documentation
191
186
 
192
- The installed package exposes `@metamesh/modeling/docs/manifest.json`: an exact-version index of
193
- plain Markdown guides and every public API symbol. Resolve that export from your project to find
194
- the documentation beside your installed release. Its paths are relative to the manifest.
195
- With `@metamesh/cli` installed, use `pnpm exec metamesh docs search "your topic"` and
196
- `pnpm exec metamesh docs show DOCUMENT_ID` for bounded offline lookup. Read
197
- `modeling/guide/standalone-model` for a short complete example, `modeling/guide/concepts` to choose
198
- geometry, or `modeling/guide/hosting` to run a program in your application.
187
+ Resolve `@metamesh/modeling/docs/manifest.json` from your project for exact-version Markdown guides
188
+ and API references. With [`@metamesh/cli`](https://github.com/JasonKoolman/metamesh/blob/main/packages/cli/README.md)
189
+ installed, search and read them offline:
199
190
 
200
- - [Geometry concepts](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/geometry-package.mdx) — coordinates, resolution, and supported modeling paths.
201
- - [Geometry recipes](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/develop/geometry-recipes.mdx) — primitives, sweeps, lofts, text, SVG, and booleans.
202
- - [Font preparation](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/content/docs/engine/fonts.mdx) — prepare exact font bytes outside Studio.
191
+ ```bash
192
+ pnpm exec metamesh docs search "sweep"
193
+ pnpm exec metamesh docs show modeling/guide/concepts
194
+ ```
203
195
 
204
- Until the public documentation site launches, use these repository guides or
205
- [run the docs locally](https://github.com/JasonKoolman/metamesh/blob/main/apps/web/README.md#local-use).
206
196
  For package development, see [Contributing](https://github.com/JasonKoolman/metamesh/blob/main/CONTRIBUTING.md).
207
197
 
208
198
  ## License