@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
@@ -6,8 +6,8 @@ Build parts by combining primitives, applying transforms, and removing material
6
6
  MetaMesh uses [Manifold](https://manifoldcad.org/docs/jsapi/), a solid-modeling kernel that works
7
7
  with **manifold meshes**: closed, consistently oriented boundaries representing solid material.
8
8
 
9
- Studio code Projects use `@metamesh/modeling` to construct immutable `Section` and `Solid` recipes.
10
- The engine evaluates them and owns the underlying kernel values.
9
+ In a Studio code Project, `@metamesh/modeling` describes your shapes as immutable `Section` and
10
+ `Solid` recipes. The engine builds their geometry and takes care of the underlying kernel values.
11
11
 
12
12
  ## Coordinates and units
13
13
 
@@ -15,8 +15,8 @@ MetaMesh uses a right-handed coordinate system with **+Z up**. Model dimensions
15
15
  Place a part intentionally around the origin, then use transforms or anchors to relate it to other
16
16
  parts.
17
17
 
18
- Transform methods preserve the input and return immutable geometry recipes, so you can name
19
- meaningful stages and reuse a source shape without tracking hidden state.
18
+ Transforms leave the original shape unchanged. Keep a base shape, give each stage a useful name,
19
+ and reuse the same base for several features.
20
20
 
21
21
  ## Build solids compositionally
22
22
 
@@ -33,7 +33,7 @@ export default generate(({ part }) => {
33
33
  // Primitives are centered by default, so both faces get 2 mm of overtravel.
34
34
  // Overtravel is for robust subtraction; it does not enlarge the hole diameter.
35
35
  const hole = cylinder({ height: 8, radius: 3 });
36
- return [part("model", plate.subtract([hole]))];
36
+ return [part("model", plate.subtract(hole))];
37
37
  });
38
38
  ```
39
39
 
@@ -42,16 +42,18 @@ The cylinder clears both faces of the plate, leaving a through-hole without coin
42
42
 
43
43
 
44
44
  The plate is centered about the origin. Its `4 mm` thickness occupies `Z = −2…2 mm`; the cutter
45
- occupies `Z = −4…4 mm`. That overtravel makes the subtraction deliberate while the hole radius
46
- stays `3 mm`. Derive cutter placement from the same datum as the body when changing dimensions.
45
+ occupies `Z = −4…4 mm`. Extending the cutter beyond both faces makes a clear through-cut while the
46
+ hole radius stays `3 mm`. Use the body's datum to place the cutter so they stay aligned when
47
+ dimensions change.
47
48
 
48
49
  Name intermediate solids by their purpose. Arrange independent repeated cutters first, then
49
- subtract them together where possible. Many high-resolution Boolean steps increase generation
50
- time and obscure design intent.
50
+ subtract them together where possible. Many high-resolution Boolean steps take longer to build
51
+ and make it harder to see what each step contributes.
51
52
 
52
- The `union` and `intersect` functions and `shape.subtract(cutters)` also combine filled Sections
53
- in XY. Choose one dimension for every operand in a call. Keep a Section native through its Boolean
54
- and offset steps, then chain `.extrude({ height })` or `.revolve(options)` to make a Solid.
53
+ The `union`, `subtract`, and `intersect` methods accept one shape or an array and also combine
54
+ filled Sections in XY. Use collection `union(shapes)` and `intersect(shapes)` when combining peers.
55
+ Use either Sections or Solids throughout each call. Keep an outline as a Section while
56
+ combining and offsetting it, then chain `.extrude({ height })` or `.revolve(options)` to make a Solid.
55
57
  Transforms apply in written order about the origin: translating then rotating also rotates the
56
58
  translated position. Place finished parts through `part` options when their geometry can be reused.
57
59
 
@@ -63,7 +65,7 @@ the final translations separate the results for comparison.
63
65
 
64
66
 
65
67
  ```ts
66
- import { box, cylinder, intersect, union } from "@metamesh/modeling";
68
+ import { box, cylinder, transform3 } from "@metamesh/modeling";
67
69
  import { generate } from "@metamesh/project";
68
70
 
69
71
  export default generate(({ part }) => {
@@ -72,15 +74,15 @@ export default generate(({ part }) => {
72
74
  // Reuse the same overlapping operands to compare the three operations.
73
75
  // Place finished parts separately so display spacing can reuse their geometry.
74
76
  return [
75
- part("union", { geometry: union([block, tool]), color: "#60a5fa" }),
77
+ part("union", { geometry: block.union(tool), color: "#60a5fa" }),
76
78
  part("difference", {
77
- geometry: block.subtract([tool]),
78
- position: [42, 0, 0],
79
+ geometry: block.subtract(tool),
80
+ transform: transform3().translate([42, 0, 0]),
79
81
  color: "#f59e0b",
80
82
  }),
81
83
  part("intersection", {
82
- geometry: intersect([block, tool]),
83
- position: [84, 0, 0],
84
+ geometry: block.intersect(tool),
85
+ transform: transform3().translate([84, 0, 0]),
84
86
  color: "#34d399",
85
87
  }),
86
88
  ];
@@ -91,11 +93,11 @@ Left: all material from union. Center: block material outside the tool. Right: m
91
93
 
92
94
 
93
95
 
94
- | Operation | Material retained | Common use |
95
- | -------------------------------------------------------- | ------------------------------------- | -------------------------------------------------------- |
96
- | [`union`](../reference/model/union.md) | Inside any operand | Join an overlapping boss or rib to a body |
97
- | [`shape.subtract`](../reference/model/Solid.md#subtract) | Inside the base, outside every cutter | Cut holes, pockets, and clearance envelopes |
98
- | [`intersect`](../reference/model/intersect.md) | Inside every operand | Trim a feature to an envelope or isolate shared material |
96
+ | Operation | Material retained | Common use |
97
+ | ---------------------------------------------------------- | ------------------------------------- | -------------------------------------------------------- |
98
+ | [`shape.union`](../reference/model/Solid.md#union) | Inside any operand | Join an overlapping boss or rib to a body |
99
+ | [`shape.subtract`](../reference/model/Solid.md#subtract) | Inside the base, outside every cutter | Cut holes, pockets, and clearance envelopes |
100
+ | [`shape.intersect`](../reference/model/Solid.md#intersect) | Inside every operand | Trim a feature to an envelope or isolate shared material |
99
101
 
100
102
  Use intentional overlap for joined features and overtravel for through-cutters. A face or point
101
103
  that only touches another feature is not a reliable connection for a manufacturing part. Inspect
@@ -103,7 +105,7 @@ the result when thin walls, tangencies, or disconnected components are possible.
103
105
 
104
106
  ## Valid solid does not mean manufacturable part
105
107
 
106
- The kernel can enforce solid topology, but it does not know your printer, material, load case,
108
+ The kernel can enforce solid topology, but it doesn't know your printer, material, load case,
107
109
  tolerance stack, minimum wall, overhang strategy, or fit target. Encode supported input limits and
108
110
  cross-field errors in the Project, then verify the exported file in its downstream tool.
109
111
 
@@ -111,12 +113,11 @@ Empty or zero-volume output is invalid; non-empty output still needs engineering
111
113
 
112
114
  ## Geometry ownership
113
115
 
114
- `Section` and `Solid` values are immutable recipes. Evaluating them creates native resources
115
- owned and cleaned up by Studio. Do not initialize the kernel or manually delete shapes in
116
- `model.ts`.
116
+ Studio creates and cleans up the native resources needed to evaluate your `Section` and `Solid`
117
+ recipes. Don't initialize the kernel or manually delete shapes in `model.ts`.
117
118
 
118
- Use `inspectSection()` or `inspectSolid()` for measurements such as bounds, area, volume, and
119
- `componentCount`. `components()` returns disconnected material pieces, preserving holes and
119
+ Use `shape.inspect()` for measurements such as bounds, area, volume, and
120
+ `componentCount`. `shape.components()` returns disconnected material pieces, preserving holes and
120
121
  enclosed cavities. A sealed hollow box is one component; adding a loose ball inside its cavity
121
122
  makes two. Recombining the pieces preserves the original material.
122
123
 
@@ -1,16 +1,17 @@
1
1
  # Code Project contract
2
2
 
3
- Understand Studio’s TypeScript source contract, computed caches, parts, resource ownership, and recovery.
3
+ Learn how Studio runs your TypeScript model, reuses work across edits, and keeps a preview available when an edit fails.
4
4
 
5
- An authored Project has one control definition and one TypeScript entry file. Studio supplies the
6
- compiler, prepared services, modeling engine, persistence and preview.
5
+ An authored Project has one control definition and one TypeScript entry file. You write the model;
6
+ Studio compiles it, prepares services, runs the modeling engine, saves the Project, and shows the preview.
7
7
 
8
8
  ## Source boundary
9
9
 
10
10
  Keep helpers in the single editable `model.ts` file. Import modeling operations from
11
- `@metamesh/modeling`, pure utilities from `@metamesh/modeling/geometry`, and the typed
11
+ `@metamesh/modeling`, pure utilities from `@metamesh/modeling/geometry`, mesh operations from
12
+ `@metamesh/modeling/geometry/mesh`, and the typed
12
13
  `generate` helper from `@metamesh/project`. These approved modules and declarations work offline.
13
- Source cannot install packages, fetch modules or initialize another kernel.
14
+ Source can't install packages, fetch modules, or initialize another kernel.
14
15
 
15
16
  ## Start with generate
16
17
 
@@ -31,9 +32,12 @@ export default generate(({ params: parameters, part }) => {
31
32
 
32
33
  The helper infers `params` from **Model controls** as readonly numbers, strings, and structured
33
34
  values. Import `type Parameters` from `@metamesh/project` when a separate helper needs the type.
35
+ Parameters and memo results use `ImmutableValue<T>` views: nested objects, arrays, and tuples
36
+ are readonly in TypeScript and frozen when captured at runtime. Create a copy for editable working
37
+ data. Fluent Modeling methods and explicit buffer `copy()` calls retain their normal return types.
34
38
 
35
- The outer callback runs for each edit. Return a single `part(...)` or a readonly array of parts;
36
- `computed` is optional.
39
+ The outer callback runs for each edit. Return a single `part(...)` or a readonly array of parts.
40
+ You can add `memo` when you need it.
37
41
  Export only the default program; keep helpers local to `model.ts`. Definitions and presets remain
38
42
  serializable metadata. There are no separate preparation/build exports.
39
43
 
@@ -55,9 +59,10 @@ assert(
55
59
 
56
60
 
57
61
 
58
- Assertions follow normal code order. Put cheap checks before costly reads. An assertion that reads
59
- geometry must evaluate that geometry first. Warnings belong in the outer callback; assertions can
60
- also run inside computed values, whenever that computation evaluates.
62
+ Assertions follow normal code order. Put cheap checks before costly reads so invalid dimensions
63
+ can stop the work early. An assertion that reads geometry must evaluate that geometry first.
64
+ Warnings belong in the outer callback; assertions can also run inside a memo helper when it
65
+ evaluates. Pass the full generation context to a helper that needs `assert` or fixed services.
61
66
 
62
67
  ## Reuse unchanged work
63
68
 
@@ -65,78 +70,90 @@ also run inside computed values, whenever that computation evaluates.
65
70
 
66
71
  **Caching is optional**
67
72
 
68
- Start with ordinary generation code. If parameter edits become slow, add `computed` around
69
- expensive work that can stay unchanged across edits. Cheap arithmetic and part placement usually
70
- do not need caching.
73
+ Start with ordinary generation code. If parameter edits become slow, add `memo` around expensive
74
+ work that can stay unchanged across edits. Cheap arithmetic and part placement usually do not need
75
+ caching.
71
76
 
72
77
 
73
78
 
74
- `computed(id, callback)` creates a lazy reader of cached data or geometry. Calling it evaluates the
75
- calculation when needed; passing it directly to `part` defers evaluation until the outer callback
76
- succeeds. **Read `params`, derive values, and destructure inside the computed callback.** These
77
- reads are tracked automatically, including reads made by synchronous helpers called there:
79
+ `memo(fn, ...args)` calls a synchronous helper and returns its immutable result directly. Repeated
80
+ calls with the same function and unchanged inputs can reuse that result. Define helpers at module
81
+ scope so their identity stays stable between generations.
82
+
83
+ Pass the exact `params` object when a helper needs several parameters. MetaMesh tracks the fields
84
+ read while the helper runs, including reads made by synchronous helpers it calls:
78
85
 
79
86
 
80
87
 
81
88
  ```ts
82
- const body = computed("body", () => {
83
- const { width, height } = params;
84
- return box({ size: [width, 10, height] });
85
- });
89
+ function buildTrackedBody(params: Readonly<Parameters>) {
90
+ const { width, height } = params;
91
+ return box({ size: [width, 10, height] });
92
+ }
86
93
  ```
87
94
 
88
95
 
89
96
 
90
- Call other computed readers inside the callback too: `computed("finished", () => base().subtract(...))`
91
- tracks the base result automatically. In **New project → Cached panels**, changing **Gap** only
92
- moves the second panel; changing **Notch width** reuses the hole pattern for the finishing cut.
97
+ You can also pass ordinary arguments, just as you would call the function normally. These are the
98
+ function's inputs, not a separate dependency declaration:
99
+
100
+
101
+
102
+ ```ts
103
+ function buildBody(width: number, height: number) {
104
+ return box({ size: [width, 10, height] });
105
+ }
106
+ ```
107
+
108
+
93
109
 
94
- An earlier read such as `const { height } = params` captures a snapshot. Using it inside a
95
- computation does not track the parameter and can reuse stale geometry. Move the read inside the
96
- callback. If a changing value must be prepared outside, such as a loop item, list it in the optional
97
- third argument:
110
+ Inside `generate`, both forms return values ready for `part` or the next memo:
98
111
 
99
112
 
100
113
 
101
114
  ```ts
102
- const { height } = params;
103
- const capturedBody = computed("captured-body", () => box({ size: [params.width, 10, height] }), [
104
- height,
105
- ]);
115
+ const body = memo(buildTrackedBody, params);
116
+ const argumentBody = memo(buildBody, params.width, params.height);
106
117
  ```
107
118
 
108
119
 
109
120
 
110
- Both examples rebuild when width or height changes. The array supplements automatic tracking;
111
- `params.width` is still tracked inside the second callback, and even `[]` keeps automatic reads.
121
+ Both rebuild when width or height changes. Unrelated parameters can change without rebuilding.
122
+ Compose stages by passing memo results directly: `memo(finishBody, body, params)`.
123
+ In **New project → Cached panels**, changing **Gap** only moves the second panel; changing
124
+ **Notch width** reuses the hole pattern for the finishing cut.
112
125
 
113
- The same capture rule applies to an eagerly read result such as `const value = otherComputed()`.
114
- Select and call readers inside the callback when possible. Studio warns about common hidden captures
115
- while Code is open; its advisory checks cannot prove arbitrary JavaScript correct.
126
+ A function defined inside `generate`, including an inline arrow, gets a new identity each run.
127
+ It still computes correctly, but cannot reuse previous runs. Studio warns about common cases while
128
+ Code is open; factories, dynamic aliases, and arbitrary JavaScript aren't always identifiable.
116
129
 
117
- Dependency entries use `Object.is`, without comparing object or array contents. Use immutable
118
- parameter values, computed results, or scalar inputs; other objects must be deeply frozen. Create
119
- temporary options inside the callback, since fresh object or array dependencies prevent reuse.
120
- Studio warns about obvious fresh dependencies without running generation.
130
+ Test representative parameter edits in the same session when using cached computations. An isolated
131
+ run cannot expose stale reuse. Standalone sessions and Testkit's Generator runner accept
132
+ `verifyCache: true` to check retained results against fresh computation. The probe is bounded;
133
+ compare finalized output with `cache: false` when it cannot compare a model's calculations.
121
134
 
122
- IDs identify logical computations, so loops and conditions work without hook call-order rules.
123
- IDs must be unique lowercase hyphen-separated alphanumeric names of at most 64 characters within
124
- their namespace.
135
+ Ordinary arguments use `Object.is`, without comparing object or array contents. Use immutable
136
+ parameter values, memo results, or scalar inputs; other objects must be deeply frozen. Creating a
137
+ fresh frozen object each generation still misses the cache. Create temporary options inside the
138
+ helper, and pass its scalar inputs. A TypeScript `readonly` annotation doesn't freeze runtime data.
139
+ An array is one argument; use `memo(fn, ...tuple)` to spread several arguments.
125
140
 
126
141
  Keep calculations synchronous and pure: do not mutate cached values, read clocks or randomness,
127
- perform effects, or return promises or functions. The physical result must remain the same after
142
+ perform effects, or return promises or functions. Pass every changing input explicitly; a helper
143
+ that reads changing module state can reuse stale output. Neither editor warnings nor runtime
144
+ tracking can prove purity. The physical result must remain the same after
128
145
  cache eviction or a worker restart. Cache expensive layouts or grids; cheap arithmetic usually
129
146
  does not need its own computation.
130
147
 
131
- For cached numeric data, call [`immutableBuffer`](../reference/model/immutableBuffer.md) and use
132
- its `length`, `at(index)`, or `copy()` methods. Copy once before a dense sampling callback so its
148
+ For cached numeric data, call [`immutableBuffer`](../reference/geometry/immutableBuffer.md) and use
149
+ its `length`, `at(index)`, standard iteration, or `copy()` method. Copy once before a dense sampling callback so its
133
150
  inner loop reads an ordinary typed array. Capture a cached indexed mesh with
134
- [`immutableMesh`](../reference/model/immutableMesh.md); its reader can pass directly to `part`.
135
- Raw typed arrays in computed results or dependencies reject with guidance to use these helpers.
151
+ [`mesh.immutable`](../reference/mesh/immutable.md); its value can pass directly to `part`.
152
+ Raw typed arrays in memo results or arguments reject with guidance to use these helpers.
136
153
 
137
154
  ## Text services
138
155
 
139
- The host injects `services` into the callback after preparing exact selected font bytes.
156
+ Studio prepares the exact selected font bytes before passing `services` to the callback.
140
157
  Call `services.text.layout()` synchronously, check its metrics, then pass the layout to
141
158
  `textSection(layout)`. Generation itself does no networking:
142
159
 
@@ -163,30 +180,33 @@ export default generate(({ params, services, part }) => {
163
180
  ## Parts and placement
164
181
 
165
182
  Use `part("body", geometry)` for the simple form, or pass an object with `geometry`,
166
- `position`, `rotation` and `color`. Geometry accepts a Solid or indexed manufacturing mesh.
167
- Geometry and placement accept values or computed readers. Keep stable semantic part IDs:
183
+ `transform` and `color`. Geometry accepts a Solid or indexed manufacturing mesh.
184
+ Geometry and placement accept values. Give each part a stable ID:
168
185
 
169
186
 
170
187
 
171
188
  ```ts
172
189
  export default generate(({ params: parameters, part }) => {
173
190
  const base = box({ size: [parameters.width, parameters.depth, parameters.height] });
174
- const lid = box({ size: [parameters.width, parameters.depth, 2] }).translate([
175
- 0,
176
- parameters.depth + 4,
177
- 0,
178
- ]);
191
+ const lid = box({ size: [parameters.width, parameters.depth, 2] });
179
192
  return [
180
193
  part("base", { geometry: base, color: "#3b82f6" }),
181
- part("lid", { geometry: lid, color: "#f59e0b" }),
194
+ part("lid", {
195
+ geometry: lid,
196
+ transform: transform3().translate([0, parameters.depth + 4, 0]),
197
+ color: "#f59e0b",
198
+ }),
182
199
  ];
183
200
  });
184
201
  ```
185
202
 
186
203
 
187
204
 
188
- Lengths use millimetres and rotations use degrees. Coordinates are right-handed with **+Z up**.
189
- Rotation applies about fixed X, then Y, then Z axes before translation. Part placement governs
205
+ Use a `transform3()` value or a row-major 16-number matrix for translation and rotation;
206
+ omitting it means identity placement. Scale, shear, reflection and perspective are rejected.
207
+ Pattern and attachment transforms pass directly to this option.
208
+ Lengths use millimetres and fluent rotations use degrees. Coordinates are right-handed with **+Z up**.
209
+ Fluent transform calls apply in written order. Part placement governs
190
210
  preview, picking, measurements and all exports. Changing placement or color can reuse cached
191
211
  geometry and renderer buffers. Studio's native part-color overrides update appearance directly.
192
212
  Use modeling `translate`/`rotate` when moving a cutter or feature inside construction.
@@ -203,12 +223,12 @@ Solids and Sections are immutable deferred recipes. Ordinary recipes can be reus
203
223
  sessions; unspecified resolution settings inherit the evaluating host's defaults. Apply local
204
224
  resolution explicitly to each affected constructor or Section operation.
205
225
 
206
- Observations such as `inspectSolid` evaluate required geometry synchronously and return copied
207
- facts. `components()` selections and recipes using them can only be evaluated in their originating
208
- session because their identity depends on evaluated topology. The host cleans up native
226
+ Calls such as `shape.inspect()` evaluate the required geometry synchronously and return copied
227
+ measurements. `shape.components()` selections and recipes using them can only be evaluated in their
228
+ originating session because their identity depends on evaluated topology. The host cleans up native
209
229
  allocations on success and failure. Nested or asynchronous execution rejects.
210
230
 
211
- Source/control-definition changes invalidate the program session. Parameter edits reuse it.
231
+ Changing the source or control definition invalidates the program session. Parameter edits reuse it.
212
232
  Failed or stale requests retain the last valid preview; fatal failures replace the worker.
213
233
  Unsupported older Project data remains available through raw backup for manual source conversion;
214
234
  there is no old executor and no automatic destructive reset.
@@ -0,0 +1,193 @@
1
+ # Choose geometry values and representations
2
+
3
+ Choose filled shapes, paths, profiles, and plain data, and understand when geometry is evaluated.
4
+
5
+ Choose a value by the information your next operation needs. Filled Sections and Solids represent
6
+ material; paths retain traversal and closure; identified profiles retain correspondence between
7
+ cross sections. Pure calculations do not need a host engine.
8
+
9
+ ## Geometry vocabulary
10
+
11
+ Choose the representation by the information you need to retain:
12
+
13
+ | Representation | Retains | Typical use |
14
+ | -------------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------ |
15
+ | `Vector2` / `Vector3` | Immutable finite coordinates and arithmetic methods | Readable calculations |
16
+ | `Path2` / `Path3` | Sampled points, traversal order, and closure | Trajectories and boundary queries |
17
+ | `Contour` | One closed boundary's point tuples, without a repeated endpoint | Custom calculations and meshing |
18
+ | `PolygonData` / `RegionData` | One exterior plus holes / a collection of filled polygons | Serialized filled topology |
19
+ | `Profile` / `ProfileContour2` | Identified family topology / one closed boundary of identified spans | Correspondence across related shapes |
20
+ | `CorrespondingProfile` | Shared sampled landmarks from `matchProfiles` | Loft or sweep stations |
21
+ | `Section` / `Solid` | Immutable filled 2D / 3D recipes | Booleans and model construction |
22
+ | `Vector2Data` / `Vector3Data`, `Path2Data` / `Path3Data` | Vector tuples and complete path records | Interchange and numerical kernels |
23
+ | `Bounds2` / `Bounds3` | Immutable axis-aligned extents and measurement methods | Containment and placement queries |
24
+ | `Bounds2Data` / `Bounds3Data` | Plain min/max coordinates | Measurements and interchange |
25
+ | `Anchor3` | An attachment frame | Relative placement |
26
+
27
+ `Section` and `Solid` describe shapes as immutable recipes. You can construct and combine them
28
+ without an engine, then reuse ordinary recipes across sessions. Explicit resolution settings
29
+ stay with the recipe; omitted settings use the evaluating host's defaults. The host manages
30
+ evaluation caches and native kernel values.
31
+
32
+ Calling `shape.components()` reads evaluated geometry. Its selected shapes, and recipes using them,
33
+ can only be evaluated in their original session because the selection depends on that session's
34
+ evaluated topology.
35
+
36
+ Use Sections from the root module for Booleans, extrusion, sweeps, and lofts. Use `/geometry`
37
+ contour factories such as `circleContour` and `rectangleContour` when custom calculations or
38
+ meshing need point data. These rectangle factories share size, center, corner treatment, and
39
+ sampling options:
40
+
41
+ | You need | Choose | Result |
42
+ | ------------------------------------------------- | --------------------------------------------------------------- | --------- |
43
+ | Filled material for Booleans or extrusion | [`rectangle`](../reference/model/rectangle.md) | `Section` |
44
+ | Sampled boundary coordinates | [`rectangleContour`](../reference/geometry/rectangleContour.md) | `Contour` |
45
+ | Stable edge and corner identities across stations | [`rectangleProfile`](../reference/geometry/rectangleProfile.md) | `Profile` |
46
+
47
+ [`polygon`](../reference/model/polygon.md) fills boundaries in four forms:
48
+
49
+ - `polygon(points)` fills one contour.
50
+ - `polygon({ outer, holes })` validates exterior/hole topology and normalizes winding.
51
+ - `polygon({ contours, fillRule })` resolves compound paths with `"nonzero"` fill by default or
52
+ explicit `"evenodd"` fill.
53
+ - `polygon({ polygons: data })` accepts existing `RegionData`.
54
+
55
+ Each returns a `Section`, like `circle` or `rectangle`. Later Booleans may produce holes or
56
+ disconnected components. Use `section.toRegionData()` inside synchronous generation to read
57
+ the evaluated shape; keep serialized point data for interchange or calculations outside generation.
58
+
59
+ `rectangleProfile({ size: [width, height], treatment: { kind: "round", radius }, id })` describes
60
+ identified spans for custom geometry. Use `matchProfiles` to prepare a complete family when loft
61
+ stations or a sweep need holes, seams, or landmarks beyond ordinary primitives.
62
+
63
+ Identified spans also accept cubic Béziers with the same endpoints and controls as
64
+ [`CubicBezierCurve2`](../reference/geometry/CubicBezierCurve2.md). Paired spans share one parameter
65
+ grid; physical sampling refines every member before choosing the family count. Collapsed spans
66
+ retain repeated logical slots, while the completed loft removes degenerate faces.
67
+
68
+ ## Choose fluent values or standalone algorithms
69
+
70
+ ### Convert representations deliberately
71
+
72
+ | From | Conversion | Evaluation and ownership |
73
+ | -------------------------- | ---------------------------------------------- | -------------------------------------------------------------- |
74
+ | `Contour` / `RegionData` | `polygon(...)` to `Section` | Captures a recipe without an engine |
75
+ | `Section` | `section.toRegionData()` | Observes evaluated geometry inside a host execution |
76
+ | `Profile` | `matchProfiles(...)` | Pure matching retains identified boundaries and landmarks |
77
+ | Closed `Path2` / `Contour` | `mesh.extrude(...)` to `TriangleMesh` | Pure mesh construction; no `ends` treatments |
78
+ | `TriangleMesh` | `solidFromMesh(...)` to `Solid` | Captures a recipe; native validation happens during evaluation |
79
+ | `Solid` / `TriangleMesh` | `part(...)`, then an engine run to `ModelPart` | Host finalizes durable immutable manufacturing buffers |
80
+ | `ModelPart` | Pass directly to mesh analysis or `export3mf` | No live session needed; use buffer `copy()` before mutation |
81
+
82
+ Pure extrusion uses `ExtrudeMeshOptions` for height, centering, twist, top scale, and sampling.
83
+ Native `Section.extrude` also supports `ends` through `ExtrudeOptions`; requesting them from
84
+ `mesh.extrude` throws instead of silently returning unfinished geometry.
85
+
86
+ Use methods for ordinary composition and queries on a value, such as `path.transform(...)`,
87
+ `path.closestPoint(...)`, or `vector.normalize()`. Use standalone algorithms for specialized
88
+ outputs, such as [`computeParallelTransportFrames`](../reference/geometry/computeParallelTransportFrames.md),
89
+ [`mesh.sweep`](../reference/mesh/sweep.md), or
90
+ [`resolveCylindricalGear`](../reference/geometry/resolveCylindricalGear.md).
91
+
92
+ ### Fluent vector and tuple arithmetic
93
+
94
+ Tuple kernels remain useful in numerical loops. The same arithmetic can be written in either form:
95
+
96
+
97
+
98
+ ```ts
99
+ import { vector3 } from "@metamesh/modeling";
100
+ import { add3, normalize3, scale3 } from "@metamesh/modeling/geometry";
101
+
102
+ export const fluentDirection = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
103
+ export const tupleDirection = scale3(normalize3(add3([1, 2, 3], [4, 0, 0])), 10);
104
+ // fluentDirection.toData() and tupleDirection contain the same coordinates.
105
+ ```
106
+
107
+
108
+
109
+ Fluent vectors validate finite inputs and results and allocate immutable values. Basic tuple
110
+ arithmetic such as `add3` avoids those wrappers and assumes valid inputs; overflow can produce
111
+ nonfinite results. Individual kernels document additional checks, such as zero-length rejection
112
+ in `normalize3`.
113
+
114
+ ## Value and data naming
115
+
116
+ Modeling values use domain names such as `Vector2`, `Transform2`, `Path2`, and `Bounds2`.
117
+ Their plain representations consistently use `Data`: `Vector2Data`, `Transform2Data`,
118
+ `Path2Data`, and `Bounds2Data`. Each value exposes `toData()` for a stable, deeply frozen
119
+ representation, and its factory accepts that data again. `Input` types describe accepted values,
120
+ data, and any supported construction shorthand.
121
+
122
+ Vector data is a coordinate tuple, transform data a canonical matrix, bounds data a min/max record,
123
+ and path data a record with `dimension`, `points`, and `closed`. Use `path.toData().points`
124
+ when a numerical algorithm needs only coordinates; keep the full record when closure matters too.
125
+ Options, reports, geometry descriptors, and recipes keep their own descriptive names. Use
126
+ `toMesh()` or `toRegionData()` during active host execution to evaluate a Solid as a triangle mesh
127
+ or a Section as a region.
128
+
129
+ ## Query paths and preserve closure
130
+
131
+ Use `path2(points, { closed: true })` or `path3(points, { closed: true })` for a reusable boundary.
132
+ `length()` includes the closing edge. [`closestPoint`](../reference/geometry/Path3-type.md#closestpoint)
133
+ returns a [`PathLocation`](../reference/geometry/PathLocation.md): a fluent `point`, `distance` in
134
+ millimetres, `edgeIndex`, and clamped `fraction` within that edge. Equal-distance ties select the
135
+ first edge in traversal order. The fraction is local to an edge; it is not a whole-path or analytic
136
+ curve parameter.
137
+
138
+ ### Path coordinate round trip
139
+
140
+
141
+
142
+ ```ts
143
+ import { path3 } from "@metamesh/modeling";
144
+
145
+ export const boundary = path3(
146
+ [
147
+ [0, 0, 0],
148
+ [10, 0, 0],
149
+ [10, 10, 0],
150
+ [0, 10, 0],
151
+ ],
152
+ { closed: true }
153
+ );
154
+ export const nearest = boundary.closestPoint([-2, 5, 0]);
155
+ // point: [0, 5, 0], distance: 2, edgeIndex: 3, fraction: 0.5
156
+ export const restoredPath = path3(boundary.toData());
157
+ // Both paths include the closing edge and have length 40 mm.
158
+ ```
159
+
160
+
161
+
162
+ `toData()` returns a deeply frozen record with `dimension`, `points`, and `closed`. Pass the path
163
+ value directly where supported, or restore the full record with `path2(data)` or `path3(data)`.
164
+ Don't repeat the endpoint of a closed path. Open paths may be empty; their bounds are `undefined`,
165
+ and nearest-edge queries require at least two vertices. Queries measure the sampled boundary,
166
+ not a filled interior or underlying analytic curve.
167
+
168
+ Chain `transform`, `reverse`, and equal-distance `resample` to create new paths. Transforming a path
169
+ preserves traversal even after reflection. `polygon(path)` requires a closed planar value and
170
+ establishes exterior/hole winding; `stroke`, sweeps, and path patterns accept paths in the matching
171
+ dimension. Authored point collections accept fluent vectors or tuples; serialized data uses tuples.
172
+
173
+ ## Compose modeling operations
174
+
175
+ Give intermediate shapes meaningful names and choose a curve tolerance that preserves the detail
176
+ you need. Many high-resolution Boolean operands take longer to build.
177
+
178
+ Dimension inputs accept matching fluent vectors or plain coordinate tuples, such as
179
+ `box({ size: vector3([30, 20, 6]) })`. Use `section.extrude(options)`, `section.revolve(options)`,
180
+ and `section.sweep(path, options)` in fluent modeling sequences. Imported `extrude`, `revolve`, and
181
+ `sweep` accept `Section | CorrespondingProfile`, so reusable profile functions can use either input
182
+ without branching. Both forms use the same operation contracts. Use `mesh.extrude(contour, options)`
183
+ when constructing triangle buffers directly.
184
+
185
+ Primitive factories take one options object. For example, `rectangle({ size: [24, 16] })` creates a
186
+ filled Section and `box({ size: [24, 16, 6] })` creates a Solid. The `union`, `subtract`, and `intersect`
187
+ methods accept one same-dimensional shape or a readonly array; an empty array preserves the receiver.
188
+ Collection `union(shapes)` and `intersect(shapes)` combine peers and require at least one shape.
189
+ `section.offset(distance, options)` stays in the filled XY plane.
190
+
191
+ For construction details, choose [profiles and extrusion](profiles-and-extrusion.md),
192
+ [sweeps and lofts](sweeps-and-lofts.md), or a
193
+ [worked recipe](recipes.md).