@metamesh/modeling 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1035) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/README.md +96 -64
  3. package/dist/api/engine.d.ts +216 -160
  4. package/dist/api/export.d.ts +204 -0
  5. package/dist/api/geometry.d.ts +410 -2106
  6. package/dist/api/index.d.ts +545 -1821
  7. package/dist/api/math.d.ts +315 -0
  8. package/dist/api/mechanical.d.ts +1041 -0
  9. package/dist/api/mesh.d.ts +395 -94
  10. package/dist/api/text.d.ts +24 -44
  11. package/dist/docs/guides/concepts.md +54 -523
  12. package/dist/docs/guides/exporting.md +88 -0
  13. package/dist/docs/guides/fonts.md +7 -5
  14. package/dist/docs/guides/fundamentals.md +12 -24
  15. package/dist/docs/guides/generation.md +76 -61
  16. package/dist/docs/guides/geometry-values.md +251 -0
  17. package/dist/docs/guides/hosting.md +58 -80
  18. package/dist/docs/guides/profiles-and-extrusion.md +400 -0
  19. package/dist/docs/guides/recipes.md +52 -706
  20. package/dist/docs/guides/resolution-and-inspection.md +153 -0
  21. package/dist/docs/guides/solid-joins.md +136 -0
  22. package/dist/docs/guides/standalone-model.md +5 -3
  23. package/dist/docs/guides/svg-and-text.md +252 -0
  24. package/dist/docs/guides/sweeps-and-lofts.md +223 -0
  25. package/dist/docs/guides/transforms-and-placement.md +323 -0
  26. package/dist/docs/guides/workers.md +166 -0
  27. package/dist/docs/manifest.json +5539 -8603
  28. package/dist/docs/reference/engine/GenerationOptions.md +9 -4
  29. package/dist/docs/reference/engine/GeometryResource.md +11 -5
  30. package/dist/docs/reference/engine/ModelDependencies.md +9 -3
  31. package/dist/docs/reference/engine/ModelEngine.md +8 -3
  32. package/dist/docs/reference/engine/ModelEngineOptions.md +6 -5
  33. package/dist/docs/reference/engine/ModelPart.md +12 -6
  34. package/dist/docs/reference/engine/ModelResult.md +8 -2
  35. package/dist/docs/reference/engine/ModelRunArguments.md +7 -1
  36. package/dist/docs/reference/engine/ModelRunOptions.md +9 -4
  37. package/dist/docs/reference/engine/ModelSession.md +7 -1
  38. package/dist/docs/reference/engine/SessionOptions.md +9 -4
  39. package/dist/docs/reference/engine/categories/host-lifecycle.md +11 -10
  40. package/dist/docs/reference/engine/checkModel.md +11 -1
  41. package/dist/docs/reference/engine/createModelEngine.md +13 -4
  42. package/dist/docs/reference/engine/defaultModelingLimits.md +7 -8
  43. package/dist/docs/reference/engine/modelingWasmUrl.md +7 -1
  44. package/dist/docs/reference/engine.md +13 -7
  45. package/dist/docs/reference/export/Export3mfOptions.md +20 -0
  46. package/dist/docs/reference/export/ExportDiagnostic.md +47 -0
  47. package/dist/docs/reference/export/ExportFormat.md +13 -0
  48. package/dist/docs/reference/export/ExportGeometry.md +27 -0
  49. package/dist/docs/reference/export/ExportGlbOptions.md +114 -0
  50. package/dist/docs/reference/export/ExportLimits.md +71 -0
  51. package/dist/docs/reference/export/ExportMaterial.md +35 -0
  52. package/dist/docs/reference/export/ExportOptions.md +82 -0
  53. package/dist/docs/reference/export/ExportPart.md +76 -0
  54. package/dist/docs/reference/export/ExportReport.md +70 -0
  55. package/dist/docs/reference/export/ExportSink.md +29 -0
  56. package/dist/docs/reference/export/ExportStlOptions.md +20 -0
  57. package/dist/docs/reference/export/ExportedFile.md +98 -0
  58. package/dist/docs/reference/export/categories/mesh-serialization.md +53 -0
  59. package/dist/docs/reference/export/defaultExportLimits.md +20 -0
  60. package/dist/docs/reference/export/export3mf.md +62 -0
  61. package/dist/docs/reference/export/exportGlb.md +66 -0
  62. package/dist/docs/reference/export/exportStl.md +62 -0
  63. package/dist/docs/reference/export/write3mf.md +71 -0
  64. package/dist/docs/reference/export/writeGlb.md +75 -0
  65. package/dist/docs/reference/export/writeStl.md +71 -0
  66. package/dist/docs/reference/export.md +27 -0
  67. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +9 -3
  68. package/dist/docs/reference/geometry/Anchor3-type.md +9 -3
  69. package/dist/docs/reference/geometry/Anchor3Options.md +70 -0
  70. package/dist/docs/reference/geometry/ArcCurve2.md +8 -2
  71. package/dist/docs/reference/geometry/ArcCurve3.md +8 -2
  72. package/dist/docs/reference/geometry/AttachOptions.md +10 -5
  73. package/dist/docs/reference/geometry/Bounds2-type.md +17 -24
  74. package/dist/docs/reference/geometry/Bounds2Data.md +10 -9
  75. package/dist/docs/reference/geometry/Bounds2Input.md +10 -4
  76. package/dist/docs/reference/geometry/Bounds2Options.md +10 -4
  77. package/dist/docs/reference/geometry/Bounds3-type.md +17 -24
  78. package/dist/docs/reference/geometry/Bounds3Data.md +10 -9
  79. package/dist/docs/reference/geometry/Bounds3Input.md +10 -4
  80. package/dist/docs/reference/geometry/Bounds3Options.md +10 -4
  81. package/dist/docs/reference/geometry/BoundsFit2.md +10 -4
  82. package/dist/docs/reference/geometry/BoundsFit3.md +10 -4
  83. package/dist/docs/reference/geometry/BoundsFitOptions.md +10 -4
  84. package/dist/docs/reference/geometry/BoxAnchorFace.md +9 -3
  85. package/dist/docs/reference/geometry/BoxAnchorOptions.md +9 -3
  86. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +8 -2
  87. package/dist/docs/reference/geometry/CircleContourOptions.md +8 -2
  88. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +8 -3
  89. package/dist/docs/reference/geometry/CircularResolutionOptions.md +7 -1
  90. package/dist/docs/reference/geometry/CircularSampling.md +7 -1
  91. package/dist/docs/reference/geometry/CircularSamplingOptions.md +7 -1
  92. package/dist/docs/reference/geometry/Contour.md +9 -4
  93. package/dist/docs/reference/geometry/ContourCurve.md +8 -2
  94. package/dist/docs/reference/geometry/ContourPoint.md +8 -2
  95. package/dist/docs/reference/geometry/ContourSegment.md +8 -2
  96. package/dist/docs/reference/geometry/CorrespondingComponent.md +8 -2
  97. package/dist/docs/reference/geometry/CorrespondingContour.md +8 -2
  98. package/dist/docs/reference/geometry/CorrespondingProfile.md +8 -2
  99. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +9 -3
  100. package/dist/docs/reference/geometry/CubicBezierCurve2.md +8 -2
  101. package/dist/docs/reference/geometry/CubicBezierCurve3.md +8 -2
  102. package/dist/docs/reference/geometry/Curve2.md +8 -2
  103. package/dist/docs/reference/geometry/Curve3.md +8 -2
  104. package/dist/docs/reference/geometry/CurveSamplingOptions.md +8 -2
  105. package/dist/docs/reference/geometry/CylinderAnchorFace.md +9 -3
  106. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +10 -4
  107. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -1
  108. package/dist/docs/reference/geometry/EdgeTreatment.md +7 -1
  109. package/dist/docs/reference/geometry/EllipseContourOptions.md +8 -2
  110. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +15 -10
  111. package/dist/docs/reference/geometry/FittedTextLayout.md +8 -2
  112. package/dist/docs/reference/geometry/{Frame3.md → Frame3-type.md} +9 -2
  113. package/dist/docs/reference/geometry/Frame3Options.md +69 -0
  114. package/dist/docs/reference/geometry/GeometryError.md +7 -1
  115. package/dist/docs/reference/geometry/GeometryErrorCode.md +7 -1
  116. package/dist/docs/reference/geometry/GeometryErrorContext.md +7 -1
  117. package/dist/docs/reference/geometry/GeometryResolution.md +7 -1
  118. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +8 -2
  119. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +8 -2
  120. package/dist/docs/reference/geometry/GridPatternOptions.md +13 -5
  121. package/dist/docs/reference/geometry/ImmutableBuffer-type.md +8 -14
  122. package/dist/docs/reference/geometry/LineCurve2.md +8 -2
  123. package/dist/docs/reference/geometry/LineCurve3.md +8 -2
  124. package/dist/docs/reference/geometry/LinearPatternOptions.md +8 -2
  125. package/dist/docs/reference/geometry/LoftPlacement.md +19 -13
  126. package/dist/docs/reference/geometry/MatchProfilesOptions.md +8 -2
  127. package/dist/docs/reference/geometry/ModelingLimits.md +7 -1
  128. package/dist/docs/reference/geometry/NumericArray.md +8 -2
  129. package/dist/docs/reference/geometry/Path2-type.md +158 -3
  130. package/dist/docs/reference/geometry/Path2Data.md +8 -2
  131. package/dist/docs/reference/geometry/Path2Input.md +8 -2
  132. package/dist/docs/reference/geometry/Path3-type.md +158 -3
  133. package/dist/docs/reference/geometry/Path3Data.md +8 -2
  134. package/dist/docs/reference/geometry/Path3Input.md +8 -2
  135. package/dist/docs/reference/geometry/PathFrame.md +8 -2
  136. package/dist/docs/reference/geometry/PathLocation.md +8 -2
  137. package/dist/docs/reference/geometry/PathNormalGuide.md +9 -3
  138. package/dist/docs/reference/geometry/PathOptions.md +8 -2
  139. package/dist/docs/reference/geometry/PathPatternOptions.md +9 -3
  140. package/dist/docs/reference/geometry/PathPlacement.md +10 -4
  141. package/dist/docs/reference/geometry/PathResamplingOptions.md +8 -2
  142. package/dist/docs/reference/geometry/PathStation.md +87 -0
  143. package/dist/docs/reference/geometry/PathSubdivisionOptions.md +44 -0
  144. package/dist/docs/reference/geometry/Pivot2Options.md +9 -3
  145. package/dist/docs/reference/geometry/Pivot3Options.md +9 -3
  146. package/dist/docs/reference/geometry/PolygonData.md +9 -3
  147. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +8 -2
  148. package/dist/docs/reference/geometry/Profile.md +8 -3
  149. package/dist/docs/reference/geometry/ProfileComponent2.md +8 -2
  150. package/dist/docs/reference/geometry/ProfileContour2.md +8 -2
  151. package/dist/docs/reference/geometry/ProfileSpan2.md +8 -2
  152. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +10 -3
  153. package/dist/docs/reference/geometry/RadialPatternOptions.md +8 -2
  154. package/dist/docs/reference/geometry/RadialSizing.md +7 -1
  155. package/dist/docs/reference/geometry/RadialSizingOptions.md +7 -1
  156. package/dist/docs/reference/geometry/RectangleContourOptions.md +9 -2
  157. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +8 -2
  158. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +8 -2
  159. package/dist/docs/reference/geometry/RectangleProfileOptions.md +8 -2
  160. package/dist/docs/reference/geometry/RegionData.md +8 -2
  161. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +8 -2
  162. package/dist/docs/reference/geometry/ResolvedGeometryResolution.md +71 -0
  163. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +7 -1
  164. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +7 -1
  165. package/dist/docs/reference/geometry/RowLayoutOptions.md +10 -4
  166. package/dist/docs/reference/geometry/SampleContourOptions.md +8 -2
  167. package/dist/docs/reference/geometry/SampleHelixOptions.md +8 -2
  168. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +8 -2
  169. package/dist/docs/reference/geometry/SampledCurve2.md +8 -2
  170. package/dist/docs/reference/geometry/SampledCurve3.md +8 -2
  171. package/dist/docs/reference/geometry/SideProfileCurve.md +8 -2
  172. package/dist/docs/reference/geometry/SideProfilePoint.md +8 -2
  173. package/dist/docs/reference/geometry/SideProfileSegment.md +8 -2
  174. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +7 -1
  175. package/dist/docs/reference/geometry/SplineOptions.md +69 -0
  176. package/dist/docs/reference/geometry/StarContourOptions.md +12 -2
  177. package/dist/docs/reference/geometry/StrokeCap.md +8 -2
  178. package/dist/docs/reference/geometry/StrokeJoin.md +8 -2
  179. package/dist/docs/reference/geometry/StrokeOptions.md +9 -3
  180. package/dist/docs/reference/geometry/SvgImportOptions.md +10 -4
  181. package/dist/docs/reference/geometry/SvgRegionPreflight.md +8 -2
  182. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +8 -2
  183. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +8 -2
  184. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +8 -2
  185. package/dist/docs/reference/geometry/Transform2-type.md +9 -3
  186. package/dist/docs/reference/geometry/Transform2Data.md +9 -3
  187. package/dist/docs/reference/geometry/Transform2Input.md +9 -3
  188. package/dist/docs/reference/geometry/Transform3-type.md +10 -4
  189. package/dist/docs/reference/geometry/Transform3Data.md +9 -3
  190. package/dist/docs/reference/geometry/Transform3Input.md +12 -5
  191. package/dist/docs/reference/geometry/Vector2-type.md +9 -3
  192. package/dist/docs/reference/geometry/Vector2Data.md +9 -3
  193. package/dist/docs/reference/geometry/Vector2Input.md +9 -3
  194. package/dist/docs/reference/geometry/Vector3-type.md +33 -3
  195. package/dist/docs/reference/geometry/Vector3Data.md +9 -3
  196. package/dist/docs/reference/geometry/Vector3Input.md +9 -3
  197. package/dist/docs/reference/geometry/VectorTextLayout.md +8 -2
  198. package/dist/docs/reference/geometry/VectorTextMetrics.md +9 -3
  199. package/dist/docs/reference/geometry/anchor3.md +23 -26
  200. package/dist/docs/reference/geometry/anchorFrame3.md +11 -5
  201. package/dist/docs/reference/geometry/attachmentTransform3.md +14 -8
  202. package/dist/docs/reference/geometry/bounds2.md +16 -8
  203. package/dist/docs/reference/geometry/bounds3.md +14 -6
  204. package/dist/docs/reference/geometry/boundsCenter.md +10 -4
  205. package/dist/docs/reference/geometry/boundsSize.md +10 -4
  206. package/dist/docs/reference/geometry/boxAnchor3.md +9 -3
  207. package/dist/docs/reference/geometry/categories/bounds-layout.md +12 -6
  208. package/dist/docs/reference/geometry/categories/curves-paths.md +24 -13
  209. package/dist/docs/reference/geometry/categories/immutable-data.md +40 -0
  210. package/dist/docs/reference/geometry/categories/pattern-placement.md +11 -5
  211. package/dist/docs/reference/geometry/categories/primitive-options.md +8 -13
  212. package/dist/docs/reference/geometry/categories/profiles-regions.md +11 -5
  213. package/dist/docs/reference/geometry/categories/resolution-errors.md +8 -1
  214. package/dist/docs/reference/geometry/categories/transforms-math.md +20 -51
  215. package/dist/docs/reference/geometry/categories/vector-import.md +8 -5
  216. package/dist/docs/reference/geometry/circleContour.md +8 -2
  217. package/dist/docs/reference/geometry/closeToAxis.md +12 -2
  218. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +14 -5
  219. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +18 -5
  220. package/dist/docs/reference/geometry/contourContainsPoint.md +12 -2
  221. package/dist/docs/reference/geometry/cylinderAnchor3.md +11 -5
  222. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +8 -2
  223. package/dist/docs/reference/geometry/distributeAlongPath.md +21 -10
  224. package/dist/docs/reference/geometry/ellipseContour.md +8 -2
  225. package/dist/docs/reference/geometry/fitBounds.md +18 -4
  226. package/dist/docs/reference/geometry/fitTextLayout.md +11 -5
  227. package/dist/docs/reference/geometry/frame3.md +66 -0
  228. package/dist/docs/reference/geometry/gridPatternTransforms.md +12 -6
  229. package/dist/docs/reference/geometry/immutableBuffer.md +11 -3
  230. package/dist/docs/reference/geometry/isGeometryError.md +7 -1
  231. package/dist/docs/reference/geometry/layoutRow.md +12 -4
  232. package/dist/docs/reference/geometry/linearPatternTransforms.md +12 -6
  233. package/dist/docs/reference/geometry/matchProfiles.md +10 -2
  234. package/dist/docs/reference/geometry/normalizeContour.md +13 -3
  235. package/dist/docs/reference/geometry/normalizePolygon.md +10 -2
  236. package/dist/docs/reference/geometry/normalizeRegion.md +10 -2
  237. package/dist/docs/reference/geometry/path2.md +12 -2
  238. package/dist/docs/reference/geometry/path3.md +12 -2
  239. package/dist/docs/reference/geometry/pathPatternTransforms.md +18 -8
  240. package/dist/docs/reference/geometry/preflightSvgRegion.md +11 -5
  241. package/dist/docs/reference/geometry/radialPatternTransforms.md +11 -5
  242. package/dist/docs/reference/geometry/rectangleContour.md +8 -2
  243. package/dist/docs/reference/geometry/rectangleProfile.md +8 -3
  244. package/dist/docs/reference/geometry/regionArea.md +8 -2
  245. package/dist/docs/reference/geometry/regionBounds.md +11 -3
  246. package/dist/docs/reference/geometry/regularPolygonContour.md +8 -2
  247. package/dist/docs/reference/geometry/resamplePolyline2.md +12 -2
  248. package/dist/docs/reference/geometry/resamplePolyline3.md +12 -2
  249. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +10 -4
  250. package/dist/docs/reference/geometry/resolveArcSegments.md +13 -5
  251. package/dist/docs/reference/geometry/resolveCircularSampling.md +7 -1
  252. package/dist/docs/reference/geometry/resolveCircularSegments.md +10 -2
  253. package/dist/docs/reference/geometry/resolveExtrusionSlices.md +85 -0
  254. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +10 -2
  255. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +8 -2
  256. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +17 -4
  257. package/dist/docs/reference/geometry/sampleContour.md +10 -4
  258. package/dist/docs/reference/geometry/sampleCurve2.md +12 -2
  259. package/dist/docs/reference/geometry/sampleCurve3.md +12 -2
  260. package/dist/docs/reference/geometry/sampleHelix.md +8 -2
  261. package/dist/docs/reference/geometry/sampleSideProfile.md +10 -4
  262. package/dist/docs/reference/geometry/sampleTextContours.md +9 -3
  263. package/dist/docs/reference/geometry/signedContourArea.md +10 -2
  264. package/dist/docs/reference/geometry/spline2.md +68 -0
  265. package/dist/docs/reference/geometry/spline3.md +62 -0
  266. package/dist/docs/reference/geometry/starContour.md +8 -2
  267. package/dist/docs/reference/geometry/strokeRegionData.md +14 -5
  268. package/dist/docs/reference/geometry/transform2.md +11 -3
  269. package/dist/docs/reference/geometry/transform3.md +29 -6
  270. package/dist/docs/reference/geometry/transformRegionData.md +12 -2
  271. package/dist/docs/reference/geometry/triangulateContour.md +11 -3
  272. package/dist/docs/reference/geometry/vector2.md +12 -4
  273. package/dist/docs/reference/geometry/vector3.md +14 -4
  274. package/dist/docs/reference/geometry.md +13 -18
  275. package/dist/docs/reference/{geometry → math}/AxisAngleRotation3.md +8 -3
  276. package/dist/docs/reference/math/IDENTITY_TRANSFORM3.md +20 -0
  277. package/dist/docs/reference/math/add2.md +38 -0
  278. package/dist/docs/reference/math/add3.md +46 -0
  279. package/dist/docs/reference/math/applyTransformDirection3.md +46 -0
  280. package/dist/docs/reference/math/applyTransformPoint3.md +44 -0
  281. package/dist/docs/reference/math/categories/tuple-matrix.md +67 -0
  282. package/dist/docs/reference/math/cross2.md +38 -0
  283. package/dist/docs/reference/math/cross3.md +44 -0
  284. package/dist/docs/reference/math/distance2.md +38 -0
  285. package/dist/docs/reference/math/distance3.md +38 -0
  286. package/dist/docs/reference/math/dot2.md +38 -0
  287. package/dist/docs/reference/math/dot3.md +44 -0
  288. package/dist/docs/reference/math/eulerTransform3.md +43 -0
  289. package/dist/docs/reference/math/inverseTransform3.md +36 -0
  290. package/dist/docs/reference/math/length2.md +32 -0
  291. package/dist/docs/reference/math/length3.md +32 -0
  292. package/dist/docs/reference/math/lerp2.md +46 -0
  293. package/dist/docs/reference/math/lerp3.md +46 -0
  294. package/dist/docs/reference/math/multiplyTransform3.md +46 -0
  295. package/dist/docs/reference/math/normalize2.md +45 -0
  296. package/dist/docs/reference/math/normalize3.md +45 -0
  297. package/dist/docs/reference/math/projectOntoPlane3.md +40 -0
  298. package/dist/docs/reference/math/rotate2.md +40 -0
  299. package/dist/docs/reference/math/rotationTransform3.md +56 -0
  300. package/dist/docs/reference/math/scale2.md +38 -0
  301. package/dist/docs/reference/math/scale3.md +44 -0
  302. package/dist/docs/reference/math/scaleTransform3.md +39 -0
  303. package/dist/docs/reference/math/subtract2.md +38 -0
  304. package/dist/docs/reference/math/subtract3.md +44 -0
  305. package/dist/docs/reference/math/transformDeterminant3.md +38 -0
  306. package/dist/docs/reference/math/translationTransform3.md +36 -0
  307. package/dist/docs/reference/math/validateRigidTransform3.md +38 -0
  308. package/dist/docs/reference/math/validateTransform3.md +48 -0
  309. package/dist/docs/reference/math.md +22 -0
  310. package/dist/docs/reference/{geometry → mechanical}/AcmeThreadProfileSpec.md +9 -4
  311. package/dist/docs/reference/{geometry → mechanical}/Bevel.md +8 -2
  312. package/dist/docs/reference/{geometry → mechanical}/BevelSize.md +8 -2
  313. package/dist/docs/reference/{geometry → mechanical}/ButtressPressureFlankSide.md +8 -2
  314. package/dist/docs/reference/{geometry → mechanical}/ButtressThreadProfileSpec.md +9 -4
  315. package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleDimensions.md +8 -2
  316. package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleFit.md +8 -2
  317. package/dist/docs/reference/{geometry → mechanical}/CompensatedThreadDiameters.md +8 -2
  318. package/dist/docs/reference/{geometry → mechanical}/CustomThreadProfileSpec.md +10 -6
  319. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearDimensions.md +8 -2
  320. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearMeshKind.md +8 -2
  321. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearOutlineOptions.md +9 -8
  322. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairDimensions.md +8 -2
  323. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionOptions.md +8 -2
  324. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionReport.md +8 -2
  325. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairSpec.md +8 -2
  326. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearSpec.md +8 -2
  327. package/dist/docs/reference/{geometry → mechanical}/InternalThreadCutterOptions.md +11 -8
  328. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeBaseSpec.md +8 -2
  329. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeDimensions.md +9 -4
  330. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeInterval.md +8 -2
  331. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSamplingOptions.md +9 -8
  332. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSpec.md +8 -2
  333. package/dist/docs/reference/{geometry → mechanical}/METRIC_FASTENER_STANDARDS.md +8 -2
  334. package/dist/docs/reference/{geometry → mechanical}/MetricFastenerSize.md +8 -2
  335. package/dist/docs/reference/{geometry → mechanical}/MetricFastenerStandard.md +8 -2
  336. package/dist/docs/reference/{geometry → mechanical}/MetricHexNutDimensions.md +8 -2
  337. package/dist/docs/reference/{geometry → mechanical}/MetricSocketCapHeadDimensions.md +8 -2
  338. package/dist/docs/reference/{geometry → mechanical}/PRINTABLE_THREAD_FIT_POLICIES.md +8 -2
  339. package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFit.md +8 -2
  340. package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFitPolicy.md +8 -2
  341. package/dist/docs/reference/{geometry → mechanical}/RackPitchDimensions.md +8 -2
  342. package/dist/docs/reference/{geometry → mechanical}/RackPitchSpec.md +8 -2
  343. package/dist/docs/reference/{geometry → mechanical}/SampledThreadHelices.md +8 -6
  344. package/dist/docs/reference/{geometry → mechanical}/SquareThreadProfileSpec.md +9 -4
  345. package/dist/docs/reference/{geometry → mechanical}/ThreadBevelOptions.md +8 -2
  346. package/dist/docs/reference/{geometry → mechanical}/ThreadCircularSegmentsOptions.md +10 -6
  347. package/dist/docs/reference/{geometry → mechanical}/ThreadCompensationOptions.md +9 -4
  348. package/dist/docs/reference/{geometry → mechanical}/ThreadEndStyle.md +8 -2
  349. package/dist/docs/reference/{geometry → mechanical}/ThreadEndTreatmentOptions.md +8 -2
  350. package/dist/docs/reference/{geometry → mechanical}/ThreadHandedness.md +8 -2
  351. package/dist/docs/reference/{geometry → mechanical}/ThreadHelixOptions.md +10 -6
  352. package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInEnvelope.md +8 -2
  353. package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInShape.md +8 -2
  354. package/dist/docs/reference/{mesh/ThreadProfile.md → mechanical/ThreadProfile-type.md} +8 -6
  355. package/dist/docs/reference/{geometry → mechanical}/ThreadProfileBaseSpec.md +9 -4
  356. package/dist/docs/reference/{geometry → mechanical}/ThreadProfileSpec.md +8 -2
  357. package/dist/docs/reference/{geometry → mechanical}/ThreadRidgeOptions.md +12 -9
  358. package/dist/docs/reference/{geometry → mechanical}/ThreadRole.md +8 -2
  359. package/dist/docs/reference/{geometry → mechanical}/ThreadSolidOptions.md +13 -10
  360. package/dist/docs/reference/{geometry → mechanical}/ThreadSolidPreflight.md +8 -2
  361. package/dist/docs/reference/{geometry → mechanical}/ThreadedNutOptions.md +12 -9
  362. package/dist/docs/reference/{geometry → mechanical}/ThreadedNutPreflight.md +8 -2
  363. package/dist/docs/reference/mechanical/ThreadedNutShape.md +20 -0
  364. package/dist/docs/reference/{geometry → mechanical}/ThreadedRodOptions.md +11 -8
  365. package/dist/docs/reference/{geometry → mechanical}/TrapezoidalThreadProfileSpec.md +9 -4
  366. package/dist/docs/reference/{geometry → mechanical}/TriangularThreadProfileSpec.md +9 -4
  367. package/dist/docs/reference/{geometry → mechanical}/categories/mechanical.md +9 -3
  368. package/dist/docs/reference/{geometry → mechanical}/compensateThreadDiameters.md +9 -3
  369. package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileAxially.md +17 -5
  370. package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileForFaceting.md +18 -2
  371. package/dist/docs/reference/{geometry → mechanical}/getMetricClearanceHoleDiameter.md +8 -2
  372. package/dist/docs/reference/{geometry → mechanical}/getMetricFastenerStandard.md +8 -2
  373. package/dist/docs/reference/{geometry → mechanical}/measureInternalCylindricalGearPairMotion.md +14 -6
  374. package/dist/docs/reference/{geometry → mechanical}/minimumCylindricalGearToothCountWithoutUndercut.md +10 -2
  375. package/dist/docs/reference/{geometry → mechanical}/preflightInternalThreadCutter.md +13 -5
  376. package/dist/docs/reference/{geometry → mechanical}/preflightThreadedNut.md +14 -6
  377. package/dist/docs/reference/{geometry → mechanical}/preflightThreadedRod.md +13 -5
  378. package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGear.md +10 -2
  379. package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGearPair.md +10 -2
  380. package/dist/docs/reference/{geometry → mechanical}/resolveKnuckleHinge.md +14 -6
  381. package/dist/docs/reference/{geometry → mechanical}/resolvePrintableThreadFitPolicy.md +10 -2
  382. package/dist/docs/reference/{geometry → mechanical}/resolveRackPitch.md +10 -2
  383. package/dist/docs/reference/{geometry → mechanical}/resolveThreadCircularSegments.md +12 -4
  384. package/dist/docs/reference/{geometry → mechanical}/sampleCylindricalGearOutline.md +14 -7
  385. package/dist/docs/reference/{geometry → mechanical}/sampleInternalCylindricalGearSpaceOutline.md +14 -7
  386. package/dist/docs/reference/{geometry → mechanical}/sampleRackToothPath.md +15 -7
  387. package/dist/docs/reference/{geometry → mechanical}/sampleThreadHelices.md +13 -5
  388. package/dist/docs/reference/{geometry → mechanical}/threadProfile.md +12 -2
  389. package/dist/docs/reference/mechanical.md +19 -0
  390. package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +39 -40
  391. package/dist/docs/reference/mesh/HeightfieldMeshLimits.md +8 -6
  392. package/dist/docs/reference/mesh/HeightfieldPreflight.md +8 -2
  393. package/dist/docs/reference/mesh/ImmutableTriangleMesh.md +8 -6
  394. package/dist/docs/reference/mesh/LoftMeshStation.md +8 -7
  395. package/dist/docs/reference/mesh/MeshRenderOptions.md +28 -0
  396. package/dist/docs/reference/mesh/PlanarMeshOptimizationFallbackReason.md +9 -3
  397. package/dist/docs/reference/mesh/PlanarMeshOptimizationOptions.md +11 -6
  398. package/dist/docs/reference/mesh/PlanarMeshOptimizationResult.md +13 -7
  399. package/dist/docs/reference/mesh/PlanarPatchQuality.md +7 -5
  400. package/dist/docs/reference/mesh/RenderMesh.md +68 -0
  401. package/dist/docs/reference/mesh/SolidMeshValidationOptions.md +7 -5
  402. package/dist/docs/reference/mesh/TriangleMesh.md +16 -2
  403. package/dist/docs/reference/mesh/TriangleMeshAnalysis.md +16 -11
  404. package/dist/docs/reference/mesh/TriangleMeshAnalysisOptions.md +12 -7
  405. package/dist/docs/reference/mesh/TriangleMeshInput.md +9 -3
  406. package/dist/docs/reference/mesh/TriangleMeshMeasurements.md +10 -5
  407. package/dist/docs/reference/mesh/TriangleMeshQualityOptions.md +9 -4
  408. package/dist/docs/reference/mesh/TriangleMeshQualityReport.md +9 -3
  409. package/dist/docs/reference/mesh/TriangleMeshSignature.md +9 -4
  410. package/dist/docs/reference/mesh/TriangleMeshSignatureOptions.md +8 -2
  411. package/dist/docs/reference/mesh/TriangleMeshSignatureTolerances.md +8 -2
  412. package/dist/docs/reference/mesh/TriangleMeshTopologyAnalysis.md +17 -12
  413. package/dist/docs/reference/mesh/TriangleMeshValidationOptions.md +9 -4
  414. package/dist/docs/reference/mesh/analyze.md +28 -14
  415. package/dist/docs/reference/mesh/analyzeQuality.md +15 -9
  416. package/dist/docs/reference/mesh/bounds.md +10 -5
  417. package/dist/docs/reference/mesh/categories/operations.md +24 -81
  418. package/dist/docs/reference/mesh/centroid.md +10 -5
  419. package/dist/docs/reference/mesh/extrude.md +25 -18
  420. package/dist/docs/reference/mesh/heightfield.md +13 -7
  421. package/dist/docs/reference/mesh/immutable.md +16 -10
  422. package/dist/docs/reference/mesh/join.md +11 -5
  423. package/dist/docs/reference/mesh/loft.md +23 -16
  424. package/dist/docs/reference/mesh/optimizePlanarPatches.md +24 -18
  425. package/dist/docs/reference/mesh/preflightHeightfield.md +13 -7
  426. package/dist/docs/reference/mesh/preflightThreadSolid.md +27 -24
  427. package/dist/docs/reference/mesh/render.md +59 -0
  428. package/dist/docs/reference/mesh/reverse.md +11 -5
  429. package/dist/docs/reference/mesh/revolve.md +17 -13
  430. package/dist/docs/reference/mesh/signature.md +15 -9
  431. package/dist/docs/reference/mesh/sweep.md +101 -24
  432. package/dist/docs/reference/mesh/threadRidge.md +24 -17
  433. package/dist/docs/reference/mesh/threadSolid.md +28 -21
  434. package/dist/docs/reference/mesh/transform.md +12 -7
  435. package/dist/docs/reference/mesh/validate.md +15 -9
  436. package/dist/docs/reference/mesh/validateSolid.md +14 -8
  437. package/dist/docs/reference/mesh.md +8 -2
  438. package/dist/docs/reference/model/BoxEdge.md +11 -3
  439. package/dist/docs/reference/model/BoxEdgeSelection.md +11 -3
  440. package/dist/docs/reference/model/BoxEdgeTreatments.md +12 -5
  441. package/dist/docs/reference/model/BoxOptions.md +14 -9
  442. package/dist/docs/reference/model/CircleOptions.md +11 -6
  443. package/dist/docs/reference/model/CornerCutterOptions.md +93 -0
  444. package/dist/docs/reference/model/CornerCutterTreatment.md +53 -0
  445. package/dist/docs/reference/model/CutterOverrun.md +43 -0
  446. package/dist/docs/reference/model/CylinderOptions.md +12 -6
  447. package/dist/docs/reference/model/DiagnosticOptions.md +7 -1
  448. package/dist/docs/reference/model/EdgeCutterOptions.md +129 -0
  449. package/dist/docs/reference/model/EllipseOptions.md +11 -6
  450. package/dist/docs/reference/model/EndTreatments.md +13 -9
  451. package/dist/docs/reference/model/ExtrudeOptions.md +48 -44
  452. package/dist/docs/reference/model/GenerateCallback.md +7 -1
  453. package/dist/docs/reference/model/GenerateContext.md +23 -24
  454. package/dist/docs/reference/model/GenerationDiagnostic.md +7 -1
  455. package/dist/docs/reference/model/GenerationError.md +8 -2
  456. package/dist/docs/reference/model/HeightfieldOptions.md +8 -8
  457. package/dist/docs/reference/model/HoleCutterOpening.md +27 -0
  458. package/dist/docs/reference/model/HoleCutterOptions.md +19 -25
  459. package/dist/docs/reference/model/HoleCutterRecess.md +13 -5
  460. package/dist/docs/reference/model/HullOptions.md +12 -6
  461. package/dist/docs/reference/model/ImmutableValue.md +7 -1
  462. package/dist/docs/reference/model/ImplicitOptions.md +9 -9
  463. package/dist/docs/reference/model/JoinOptions.md +73 -0
  464. package/dist/docs/reference/model/JoinTransition.md +54 -0
  465. package/dist/docs/reference/model/KnuckleHinge-type.md +8 -3
  466. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +7 -1
  467. package/dist/docs/reference/model/KnuckleHingeOptions.md +8 -4
  468. package/dist/docs/reference/model/KnuckleHingeWeb.md +7 -1
  469. package/dist/docs/reference/model/LoftCorrespondence.md +13 -5
  470. package/dist/docs/reference/model/LoftOptions.md +16 -10
  471. package/dist/docs/reference/model/LoftStation.md +16 -10
  472. package/dist/docs/reference/model/Memo.md +54 -0
  473. package/dist/docs/reference/model/ModelProgram.md +7 -1
  474. package/dist/docs/reference/model/PartDeclaration.md +12 -8
  475. package/dist/docs/reference/model/PartGeometry.md +8 -4
  476. package/dist/docs/reference/model/PartOptions.md +12 -8
  477. package/dist/docs/reference/model/PatternSource.md +11 -5
  478. package/dist/docs/reference/model/PlaneOptions.md +11 -8
  479. package/dist/docs/reference/model/PolygonOptions.md +17 -16
  480. package/dist/docs/reference/model/PrimitiveAttachment.md +15 -4
  481. package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +18 -17
  482. package/dist/docs/reference/model/RectangleOptions.md +31 -30
  483. package/dist/docs/reference/model/RegularPolygonOptions.md +11 -38
  484. package/dist/docs/reference/model/RevolveOptions.md +19 -17
  485. package/dist/docs/reference/model/Section.md +128 -72
  486. package/dist/docs/reference/model/SectionHullOptions.md +12 -6
  487. package/dist/docs/reference/model/SectionInspection.md +8 -6
  488. package/dist/docs/reference/model/SectionOffsetJoin.md +10 -4
  489. package/dist/docs/reference/model/SectionOffsetOptions.md +11 -6
  490. package/dist/docs/reference/model/Solid.md +113 -53
  491. package/dist/docs/reference/model/SolidInspection.md +8 -6
  492. package/dist/docs/reference/model/SolidSegmentHit.md +9 -7
  493. package/dist/docs/reference/model/SphereOptions.md +12 -5
  494. package/dist/docs/reference/model/StarOptions.md +33 -29
  495. package/dist/docs/reference/model/SvgOrigin.md +10 -4
  496. package/dist/docs/reference/model/SvgPathSectionOptions.md +13 -9
  497. package/dist/docs/reference/model/SvgSectionOptions.md +14 -11
  498. package/dist/docs/reference/model/SweepOptions.md +21 -28
  499. package/dist/docs/reference/model/SweepOrientation.md +19 -16
  500. package/dist/docs/reference/model/SweepTransformOptions.md +105 -0
  501. package/dist/docs/reference/model/TextSectionOptions.md +11 -10
  502. package/dist/docs/reference/model/TorusOptions.md +13 -7
  503. package/dist/docs/reference/model/TubeOptions.md +25 -8
  504. package/dist/docs/reference/model/box.md +14 -6
  505. package/dist/docs/reference/model/categories/boolean-operations.md +16 -4
  506. package/dist/docs/reference/model/categories/bounded-surfaces.md +7 -1
  507. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +21 -16
  508. package/dist/docs/reference/model/categories/generation.md +15 -12
  509. package/dist/docs/reference/model/categories/hinges.md +7 -4
  510. package/dist/docs/reference/model/categories/mesh-inspection.md +8 -6
  511. package/dist/docs/reference/model/categories/primitives.md +32 -20
  512. package/dist/docs/reference/model/categories/sections.md +11 -16
  513. package/dist/docs/reference/model/categories/threads.md +9 -43
  514. package/dist/docs/reference/model/categories/transforms-placement.md +17 -41
  515. package/dist/docs/reference/model/circle.md +15 -5
  516. package/dist/docs/reference/model/cornerCutter.md +88 -0
  517. package/dist/docs/reference/model/cylinder.md +11 -3
  518. package/dist/docs/reference/model/edgeCutter.md +91 -0
  519. package/dist/docs/reference/model/ellipse.md +15 -5
  520. package/dist/docs/reference/model/extrude.md +37 -24
  521. package/dist/docs/reference/model/generate.md +10 -2
  522. package/dist/docs/reference/model/gridPattern.md +22 -9
  523. package/dist/docs/reference/model/heightfield.md +7 -1
  524. package/dist/docs/reference/model/holeCutter.md +34 -13
  525. package/dist/docs/reference/model/hull.md +9 -2
  526. package/dist/docs/reference/model/implicit.md +10 -4
  527. package/dist/docs/reference/model/internalThreadCutter.md +38 -21
  528. package/dist/docs/reference/model/intersect.md +14 -3
  529. package/dist/docs/reference/model/join.md +93 -0
  530. package/dist/docs/reference/model/knuckleHinge.md +7 -2
  531. package/dist/docs/reference/model/linearPattern.md +22 -9
  532. package/dist/docs/reference/model/loft.md +27 -16
  533. package/dist/docs/reference/model/minkowskiSum.md +10 -3
  534. package/dist/docs/reference/model/pathPattern.md +36 -21
  535. package/dist/docs/reference/model/polygon.md +18 -7
  536. package/dist/docs/reference/model/radialPattern.md +22 -9
  537. package/dist/docs/reference/model/rectangle.md +22 -12
  538. package/dist/docs/reference/model/regularPolygon.md +15 -5
  539. package/dist/docs/reference/model/revolve.md +26 -13
  540. package/dist/docs/reference/model/solidFromMesh.md +16 -6
  541. package/dist/docs/reference/model/sphere.md +12 -4
  542. package/dist/docs/reference/model/star.md +20 -10
  543. package/dist/docs/reference/model/stroke.md +29 -19
  544. package/dist/docs/reference/model/svgPathSection.md +20 -8
  545. package/dist/docs/reference/model/svgSection.md +21 -9
  546. package/dist/docs/reference/model/sweep.md +108 -24
  547. package/dist/docs/reference/model/textSection.md +19 -9
  548. package/dist/docs/reference/model/threadRidge.md +22 -17
  549. package/dist/docs/reference/model/threadedNut.md +31 -22
  550. package/dist/docs/reference/model/threadedRod.md +27 -18
  551. package/dist/docs/reference/model/torus.md +13 -5
  552. package/dist/docs/reference/model/tube.md +11 -3
  553. package/dist/docs/reference/model/union.md +14 -3
  554. package/dist/docs/reference/model.md +11 -11
  555. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -1
  556. package/dist/docs/reference/text/VectorFont.md +22 -12
  557. package/dist/docs/reference/text/VectorFontOptions.md +7 -1
  558. package/dist/docs/reference/text/VectorTextArcBaseline.md +7 -1
  559. package/dist/docs/reference/text/VectorTextLayoutOptions.md +8 -2
  560. package/dist/docs/reference/text/VectorTextOptions.md +7 -1
  561. package/dist/docs/reference/text/categories/font-preparation.md +7 -10
  562. package/dist/docs/reference/text/prepareVectorFont.md +9 -1
  563. package/dist/docs/reference/text.md +7 -1
  564. package/dist/engine/execution.js +5 -3
  565. package/dist/engine/finalization.js +6 -78
  566. package/dist/engine/index.js +11 -6
  567. package/dist/engine/native/adapter.js +1 -1
  568. package/dist/engine/native/construction-mesh.js +51 -0
  569. package/dist/engine/native/context.js +10 -7
  570. package/dist/engine/native/index.js +1 -1
  571. package/dist/engine/native/material-components.js +4 -53
  572. package/dist/engine/native/mesh-observation.js +55 -0
  573. package/dist/engine/native/regions.js +44 -23
  574. package/dist/engine/native/scoped-primitives.js +3 -3
  575. package/dist/engine/native/scoped-threads.js +1 -13
  576. package/dist/engine/native/threads.js +2 -2
  577. package/dist/engine/native/transforms.js +2 -2
  578. package/dist/engine/operations/construction.js +77 -27
  579. package/dist/engine/operations/context.js +15 -6
  580. package/dist/engine/operations/cutters.js +112 -0
  581. package/dist/engine/operations/environment.js +2 -2
  582. package/dist/engine/operations/extrusion-finishing.js +56 -29
  583. package/dist/engine/operations/hole-cutter.js +125 -114
  584. package/dist/engine/operations/join-collar-profile.js +120 -0
  585. package/dist/engine/operations/join.js +521 -0
  586. package/dist/engine/operations/knuckle-hinge.js +25 -20
  587. package/dist/engine/operations/loft.js +9 -16
  588. package/dist/engine/operations/mechanical.js +4 -15
  589. package/dist/engine/operations/primitives/anchors.js +23 -19
  590. package/dist/engine/operations/primitives/construction.js +38 -12
  591. package/dist/engine/operations/primitives/correspondence.js +2 -2
  592. package/dist/engine/operations/primitives/profile-mesh.js +41 -80
  593. package/dist/engine/operations/primitives/profiles.js +5 -5
  594. package/dist/engine/operations/sections.js +8 -8
  595. package/dist/engine/operations/transforms.js +19 -39
  596. package/dist/engine/placement.js +3 -3
  597. package/dist/engine/recipe-realization.js +87 -31
  598. package/dist/engine/session/declarations.js +98 -0
  599. package/dist/engine/session/dependencies.js +139 -39
  600. package/dist/engine/session/graph.js +290 -411
  601. package/dist/engine/session/native-cache.js +1 -1
  602. package/dist/engine/session/parameters.js +78 -0
  603. package/dist/engine/session/session.js +7 -7
  604. package/dist/engine/session/snapshot-cache.js +4 -4
  605. package/dist/engine/shape-anchors.js +13 -6
  606. package/dist/export/3mf.js +197 -0
  607. package/dist/export/capture.js +182 -0
  608. package/dist/export/glb.js +214 -0
  609. package/dist/export/index.js +5 -0
  610. package/dist/export/limits.js +18 -0
  611. package/dist/export/stl.js +120 -0
  612. package/dist/export/writer.js +54 -0
  613. package/dist/geometry/{bounds.js → bounds/operations.js} +3 -1
  614. package/dist/geometry/{bounds-value.js → bounds/value.js} +24 -20
  615. package/dist/geometry/curves/evaluation.js +5 -6
  616. package/dist/geometry/curves/sampling.js +30 -6
  617. package/dist/geometry/{extrusion.js → extrusion/controls.js} +58 -35
  618. package/dist/geometry/extrusion/mesh.js +92 -0
  619. package/dist/geometry/extrusion/stations.js +35 -0
  620. package/dist/geometry/extrusion/twisted-chamfer.js +265 -0
  621. package/dist/geometry/immutable-buffer.js +11 -7
  622. package/dist/geometry/index.js +24 -32
  623. package/dist/geometry/{model-limits.js → limits.js} +1 -1
  624. package/dist/geometry/loft/{loft-correspondence.js → correspondence.js} +31 -20
  625. package/dist/geometry/loft/{loft-geometry.js → geometry.js} +15 -17
  626. package/dist/geometry/loft/mesh.js +53 -0
  627. package/dist/geometry/loft/{loft-options.js → options.js} +13 -11
  628. package/dist/geometry/loft/{loft-simple-mesh.js → simple-mesh.js} +26 -17
  629. package/dist/geometry/math/interpolation.js +9 -0
  630. package/dist/geometry/math/vector-value.js +12 -3
  631. package/dist/geometry/math/vector2.js +18 -5
  632. package/dist/geometry/math/vector3.js +28 -5
  633. package/dist/geometry/math-api.js +4 -0
  634. package/dist/geometry/mechanical/gear-motion.js +7 -5
  635. package/dist/geometry/mechanical/gears.js +21 -4
  636. package/dist/geometry/mechanical/knuckle-hinge.js +7 -5
  637. package/dist/geometry/mechanical/threads/fit.js +8 -2
  638. package/dist/geometry/mechanical/threads/helices.js +4 -2
  639. package/dist/geometry/mechanical/threads/mesh-plan.js +4 -2
  640. package/dist/geometry/mechanical/threads/mesh.js +12 -9
  641. package/dist/geometry/mechanical/threads/profiles.js +18 -4
  642. package/dist/geometry/mechanical/threads/solids.js +11 -2
  643. package/dist/geometry/mechanical-api.js +10 -0
  644. package/dist/geometry/mesh/{mesh-centroid.js → centroid.js} +2 -1
  645. package/dist/geometry/{heightfield.js → mesh/heightfield.js} +9 -5
  646. package/dist/geometry/mesh/join-layers.js +833 -0
  647. package/dist/geometry/mesh/{mesh.js → operations.js} +11 -18
  648. package/dist/geometry/mesh/{mesh-planar.js → planar.js} +8 -18
  649. package/dist/geometry/mesh/{mesh-quality.js → quality.js} +10 -42
  650. package/dist/geometry/mesh/render-buffers.js +220 -0
  651. package/dist/geometry/mesh/{mesh-signature.js → signature.js} +1 -1
  652. package/dist/geometry/mesh/{mesh-solid-intersections.js → solid-intersections.js} +45 -17
  653. package/dist/geometry/mesh/{mesh-solid.js → solid.js} +10 -6
  654. package/dist/geometry/mesh/triangle-quality.js +42 -0
  655. package/dist/geometry/mesh/winding.js +11 -0
  656. package/dist/geometry/{numeric.js → mesh/write-vertex.js} +1 -1
  657. package/dist/geometry/mesh-api.js +12 -10
  658. package/dist/geometry/paths/distribution.js +43 -0
  659. package/dist/geometry/paths/editing.js +76 -0
  660. package/dist/geometry/paths/frames.js +16 -11
  661. package/dist/geometry/paths/helix.js +1 -1
  662. package/dist/geometry/paths/resampling.js +46 -61
  663. package/dist/geometry/paths/{planar.js → rounding.js} +8 -67
  664. package/dist/geometry/paths/spline.js +116 -0
  665. package/dist/geometry/paths/traversal.js +107 -0
  666. package/dist/geometry/paths/{path-value.js → value.js} +97 -18
  667. package/dist/geometry/patterns/placements.js +20 -29
  668. package/dist/geometry/{patterns.js → patterns/transforms.js} +11 -7
  669. package/dist/geometry/primitives/cutters.js +70 -0
  670. package/dist/geometry/{cylinder.js → primitives/cylinder.js} +4 -4
  671. package/dist/geometry/{edge-finishing.js → primitives/edges.js} +5 -5
  672. package/dist/geometry/{primitive-resolvers.js → primitives/resolvers.js} +9 -9
  673. package/dist/geometry/primitives/sampling.js +41 -0
  674. package/dist/geometry/profiles/contour.js +19 -7
  675. package/dist/geometry/profiles/{match-profiles.js → matching.js} +9 -6
  676. package/dist/geometry/profiles/primitives/circle.js +1 -1
  677. package/dist/geometry/profiles/primitives/ellipse.js +2 -2
  678. package/dist/geometry/profiles/primitives/rectangle.js +8 -8
  679. package/dist/geometry/profiles/primitives/star.js +1 -1
  680. package/dist/geometry/profiles/side-profile.js +8 -5
  681. package/dist/geometry/profiles/validation.js +1 -1
  682. package/dist/geometry/{polygon-clipping.js → regions/clipping.js} +1 -1
  683. package/dist/geometry/{convex-offset.js → regions/convex-offset.js} +1 -1
  684. package/dist/geometry/regions/offset.js +280 -0
  685. package/dist/geometry/{regions.js → regions/operations.js} +70 -23
  686. package/dist/geometry/{stroke-path.js → regions/stroke.js} +46 -20
  687. package/dist/geometry/{loft/loft-triangulation.js → regions/triangulation.js} +35 -2
  688. package/dist/geometry/revolve/{revolve-mesh.js → mesh.js} +9 -10
  689. package/dist/geometry/{circular-sampling.js → sampling/circular.js} +3 -3
  690. package/dist/geometry/{sampling-limits.js → sampling/limits.js} +6 -2
  691. package/dist/geometry/{resolution.js → sampling/resolution.js} +15 -14
  692. package/dist/geometry/svg/fill.js +4 -3
  693. package/dist/geometry/svg/import.js +47 -64
  694. package/dist/geometry/svg/path.js +3 -3
  695. package/dist/geometry/sweep/closed.js +55 -0
  696. package/dist/geometry/sweep/mesh.js +30 -0
  697. package/dist/geometry/{sweeps/sweep-open.js → sweep/open.js} +9 -24
  698. package/dist/geometry/sweep/options.js +1 -0
  699. package/dist/geometry/{sweeps → sweep}/orientation.js +14 -11
  700. package/dist/geometry/sweep/seam.js +30 -0
  701. package/dist/geometry/{sweeps → sweep}/stations.js +75 -10
  702. package/dist/geometry/sweep/transforms.js +30 -0
  703. package/dist/geometry/{sweeps → sweep}/validation.js +4 -4
  704. package/dist/geometry/{text-contours.js → text/contours.js} +3 -3
  705. package/dist/geometry/{text-fitting.js → text/fitting.js} +4 -3
  706. package/dist/geometry/text/layout.js +1 -0
  707. package/dist/geometry/{transform3.js → transforms/affine3.js} +31 -46
  708. package/dist/geometry/{anchors.js → transforms/anchors.js} +43 -24
  709. package/dist/geometry/{transform-geometry.js → transforms/apply.js} +8 -5
  710. package/dist/geometry/{transform2.js → transforms/dimensions.js} +23 -19
  711. package/dist/geometry/transforms/frame.js +64 -0
  712. package/dist/geometry/{transform-matrix.js → transforms/matrix-input.js} +8 -1
  713. package/dist/geometry/{transform-value.js → transforms/value.js} +29 -11
  714. package/dist/index.js +3 -9
  715. package/dist/model/cutters.js +1 -0
  716. package/dist/model/execution-binding.js +3 -3
  717. package/dist/model/generation.js +4 -2
  718. package/dist/model/immutable-generation-data.js +15 -13
  719. package/dist/model/join.js +1 -0
  720. package/dist/model/operations.js +150 -94
  721. package/dist/model/recipe-declaration.js +6 -7
  722. package/dist/model/shape-handles.js +1 -0
  723. package/dist/text/index.js +3 -0
  724. package/dist/text/vector-text-layout.js +1 -0
  725. package/package.json +20 -5
  726. package/dist/docs/reference/engine/Export3mfOptions.md +0 -46
  727. package/dist/docs/reference/engine/ExportMeshPart.md +0 -31
  728. package/dist/docs/reference/engine/ModelingLimits.md +0 -121
  729. package/dist/docs/reference/engine/export3mf.md +0 -55
  730. package/dist/docs/reference/geometry/BoxEdge.md +0 -7
  731. package/dist/docs/reference/geometry/BoxEdgeSelection.md +0 -14
  732. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +0 -15
  733. package/dist/docs/reference/geometry/BoxOptions.md +0 -87
  734. package/dist/docs/reference/geometry/CylinderOptions.md +0 -53
  735. package/dist/docs/reference/geometry/EndTreatments.md +0 -34
  736. package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +0 -130
  737. package/dist/docs/reference/geometry/ExtrudeOptions.md +0 -146
  738. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +0 -18
  739. package/dist/docs/reference/geometry/HeightfieldOptions.md +0 -72
  740. package/dist/docs/reference/geometry/HeightfieldPreflight.md +0 -58
  741. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +0 -19
  742. package/dist/docs/reference/geometry/ImmutableTriangleMesh.md +0 -43
  743. package/dist/docs/reference/geometry/LoftCorrespondence.md +0 -24
  744. package/dist/docs/reference/geometry/LoftMeshStation.md +0 -31
  745. package/dist/docs/reference/geometry/LoftOptions.md +0 -88
  746. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +0 -14
  747. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +0 -160
  748. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +0 -124
  749. package/dist/docs/reference/geometry/PlanarPatchQuality.md +0 -194
  750. package/dist/docs/reference/geometry/PrimitiveAttachment.md +0 -29
  751. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +0 -104
  752. package/dist/docs/reference/geometry/RevolveOptions.md +0 -91
  753. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +0 -38
  754. package/dist/docs/reference/geometry/SphereOptions.md +0 -15
  755. package/dist/docs/reference/geometry/SweepOptions.md +0 -113
  756. package/dist/docs/reference/geometry/SweepOrientation.md +0 -113
  757. package/dist/docs/reference/geometry/ThreadProfile-type.md +0 -86
  758. package/dist/docs/reference/geometry/ThreadedNutShape.md +0 -14
  759. package/dist/docs/reference/geometry/TorusOptions.md +0 -105
  760. package/dist/docs/reference/geometry/TriangleMesh.md +0 -34
  761. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +0 -129
  762. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +0 -79
  763. package/dist/docs/reference/geometry/TriangleMeshInput.md +0 -19
  764. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +0 -79
  765. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +0 -43
  766. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +0 -194
  767. package/dist/docs/reference/geometry/TriangleMeshSignature.md +0 -111
  768. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +0 -46
  769. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +0 -34
  770. package/dist/docs/reference/geometry/TriangleMeshTopologyAnalysis.md +0 -131
  771. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +0 -55
  772. package/dist/docs/reference/geometry/TubeOptions.md +0 -62
  773. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +0 -58
  774. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +0 -115
  775. package/dist/docs/reference/geometry/VectorTextOptions.md +0 -54
  776. package/dist/docs/reference/geometry/add2.md +0 -37
  777. package/dist/docs/reference/geometry/add3.md +0 -43
  778. package/dist/docs/reference/geometry/applyTransformDirection3.md +0 -46
  779. package/dist/docs/reference/geometry/applyTransformPoint3.md +0 -44
  780. package/dist/docs/reference/geometry/categories/meshes.md +0 -68
  781. package/dist/docs/reference/geometry/composeTransform3.md +0 -45
  782. package/dist/docs/reference/geometry/cross2.md +0 -37
  783. package/dist/docs/reference/geometry/cross3.md +0 -43
  784. package/dist/docs/reference/geometry/distance2.md +0 -37
  785. package/dist/docs/reference/geometry/distance3.md +0 -37
  786. package/dist/docs/reference/geometry/dot2.md +0 -37
  787. package/dist/docs/reference/geometry/dot3.md +0 -43
  788. package/dist/docs/reference/geometry/eulerTransform3.md +0 -43
  789. package/dist/docs/reference/geometry/frameTransform3.md +0 -49
  790. package/dist/docs/reference/geometry/inverseTransform3.md +0 -35
  791. package/dist/docs/reference/geometry/length2.md +0 -31
  792. package/dist/docs/reference/geometry/length3.md +0 -31
  793. package/dist/docs/reference/geometry/lerp2.md +0 -43
  794. package/dist/docs/reference/geometry/lerp3.md +0 -43
  795. package/dist/docs/reference/geometry/normalize2.md +0 -40
  796. package/dist/docs/reference/geometry/normalize3.md +0 -40
  797. package/dist/docs/reference/geometry/projectOntoPlane3.md +0 -37
  798. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +0 -78
  799. package/dist/docs/reference/geometry/rotate2.md +0 -37
  800. package/dist/docs/reference/geometry/rotationTransform3.md +0 -54
  801. package/dist/docs/reference/geometry/scale2.md +0 -37
  802. package/dist/docs/reference/geometry/scale3.md +0 -43
  803. package/dist/docs/reference/geometry/scaleTransform3.md +0 -39
  804. package/dist/docs/reference/geometry/subtract2.md +0 -37
  805. package/dist/docs/reference/geometry/subtract3.md +0 -43
  806. package/dist/docs/reference/geometry/transformDeterminant3.md +0 -37
  807. package/dist/docs/reference/geometry/translationTransform3.md +0 -36
  808. package/dist/docs/reference/geometry/validateRigidTransform3.md +0 -35
  809. package/dist/docs/reference/geometry/validateTransform3.md +0 -48
  810. package/dist/docs/reference/mesh/AcmeThreadProfileSpec.md +0 -79
  811. package/dist/docs/reference/mesh/Bevel.md +0 -18
  812. package/dist/docs/reference/mesh/BevelSize.md +0 -14
  813. package/dist/docs/reference/mesh/Bounds2.md +0 -125
  814. package/dist/docs/reference/mesh/Bounds2Data.md +0 -43
  815. package/dist/docs/reference/mesh/Bounds2Input.md +0 -19
  816. package/dist/docs/reference/mesh/Bounds3.md +0 -125
  817. package/dist/docs/reference/mesh/Bounds3Data.md +0 -43
  818. package/dist/docs/reference/mesh/Bounds3Input.md +0 -19
  819. package/dist/docs/reference/mesh/ButtressPressureFlankSide.md +0 -14
  820. package/dist/docs/reference/mesh/ButtressThreadProfileSpec.md +0 -97
  821. package/dist/docs/reference/mesh/CircularPrimitiveOptions.md +0 -60
  822. package/dist/docs/reference/mesh/CurveSamplingOptions.md +0 -69
  823. package/dist/docs/reference/mesh/CustomThreadProfileSpec.md +0 -77
  824. package/dist/docs/reference/mesh/ExtrusionSamplingOptions.md +0 -81
  825. package/dist/docs/reference/mesh/Frame3.md +0 -62
  826. package/dist/docs/reference/mesh/GeometryResolution.md +0 -74
  827. package/dist/docs/reference/mesh/GeometrySamplingLimits.md +0 -66
  828. package/dist/docs/reference/mesh/GeometryToleranceOptions.md +0 -46
  829. package/dist/docs/reference/mesh/HeightfieldOptions.md +0 -72
  830. package/dist/docs/reference/mesh/ImmutableBuffer.md +0 -108
  831. package/dist/docs/reference/mesh/LoftCorrespondence.md +0 -24
  832. package/dist/docs/reference/mesh/LoftOptions.md +0 -88
  833. package/dist/docs/reference/mesh/LoftPlacement.md +0 -70
  834. package/dist/docs/reference/mesh/ModelingLimits.md +0 -130
  835. package/dist/docs/reference/mesh/NumericArray.md +0 -14
  836. package/dist/docs/reference/mesh/Path2.md +0 -197
  837. package/dist/docs/reference/mesh/Path2Data.md +0 -50
  838. package/dist/docs/reference/mesh/Path2Input.md +0 -20
  839. package/dist/docs/reference/mesh/Path3.md +0 -197
  840. package/dist/docs/reference/mesh/Path3Data.md +0 -50
  841. package/dist/docs/reference/mesh/Path3Input.md +0 -20
  842. package/dist/docs/reference/mesh/PathLocation.md +0 -69
  843. package/dist/docs/reference/mesh/PathNormalGuide.md +0 -43
  844. package/dist/docs/reference/mesh/PathResamplingOptions.md +0 -84
  845. package/dist/docs/reference/mesh/Pivot2Options.md +0 -26
  846. package/dist/docs/reference/mesh/Pivot3Options.md +0 -26
  847. package/dist/docs/reference/mesh/RevolveOptions.md +0 -91
  848. package/dist/docs/reference/mesh/SquareThreadProfileSpec.md +0 -79
  849. package/dist/docs/reference/mesh/SweepOptions.md +0 -113
  850. package/dist/docs/reference/mesh/SweepOrientation.md +0 -113
  851. package/dist/docs/reference/mesh/ThreadEndStyle.md +0 -14
  852. package/dist/docs/reference/mesh/ThreadEndTreatmentOptions.md +0 -117
  853. package/dist/docs/reference/mesh/ThreadHandedness.md +0 -14
  854. package/dist/docs/reference/mesh/ThreadLeadInEnvelope.md +0 -14
  855. package/dist/docs/reference/mesh/ThreadLeadInShape.md +0 -14
  856. package/dist/docs/reference/mesh/ThreadProfileBaseSpec.md +0 -53
  857. package/dist/docs/reference/mesh/ThreadProfileSpec.md +0 -23
  858. package/dist/docs/reference/mesh/ThreadRidgeOptions.md +0 -145
  859. package/dist/docs/reference/mesh/ThreadSolidOptions.md +0 -222
  860. package/dist/docs/reference/mesh/ThreadSolidPreflight.md +0 -58
  861. package/dist/docs/reference/mesh/Transform2.md +0 -256
  862. package/dist/docs/reference/mesh/Transform2Data.md +0 -14
  863. package/dist/docs/reference/mesh/Transform2Input.md +0 -19
  864. package/dist/docs/reference/mesh/Transform3.md +0 -296
  865. package/dist/docs/reference/mesh/Transform3Data.md +0 -17
  866. package/dist/docs/reference/mesh/Transform3Input.md +0 -19
  867. package/dist/docs/reference/mesh/TrapezoidalThreadProfileSpec.md +0 -96
  868. package/dist/docs/reference/mesh/TriangularThreadProfileSpec.md +0 -95
  869. package/dist/docs/reference/mesh/Vector2.md +0 -270
  870. package/dist/docs/reference/mesh/Vector2Data.md +0 -14
  871. package/dist/docs/reference/mesh/Vector2Input.md +0 -19
  872. package/dist/docs/reference/mesh/Vector3.md +0 -282
  873. package/dist/docs/reference/mesh/Vector3Data.md +0 -14
  874. package/dist/docs/reference/mesh/Vector3Input.md +0 -19
  875. package/dist/docs/reference/model/AcmeThreadProfileSpec.md +0 -80
  876. package/dist/docs/reference/model/Anchor3.md +0 -55
  877. package/dist/docs/reference/model/AttachOptions.md +0 -69
  878. package/dist/docs/reference/model/Bevel.md +0 -19
  879. package/dist/docs/reference/model/BevelSize.md +0 -15
  880. package/dist/docs/reference/model/Bounds2-type.md +0 -125
  881. package/dist/docs/reference/model/Bounds2Data.md +0 -44
  882. package/dist/docs/reference/model/Bounds2Input.md +0 -19
  883. package/dist/docs/reference/model/Bounds2Options.md +0 -110
  884. package/dist/docs/reference/model/Bounds3-type.md +0 -125
  885. package/dist/docs/reference/model/Bounds3Data.md +0 -44
  886. package/dist/docs/reference/model/Bounds3Input.md +0 -19
  887. package/dist/docs/reference/model/Bounds3Options.md +0 -110
  888. package/dist/docs/reference/model/ButtressPressureFlankSide.md +0 -15
  889. package/dist/docs/reference/model/ButtressThreadProfileSpec.md +0 -98
  890. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +0 -35
  891. package/dist/docs/reference/model/CircleContourOptions.md +0 -21
  892. package/dist/docs/reference/model/CircularPrimitiveOptions.md +0 -62
  893. package/dist/docs/reference/model/Computed.md +0 -44
  894. package/dist/docs/reference/model/ComputedValue.md +0 -24
  895. package/dist/docs/reference/model/Contour.md +0 -24
  896. package/dist/docs/reference/model/CorrespondingComponent.md +0 -46
  897. package/dist/docs/reference/model/CorrespondingContour.md +0 -46
  898. package/dist/docs/reference/model/CorrespondingProfile.md +0 -22
  899. package/dist/docs/reference/model/CorrespondingProfileStation.md +0 -27
  900. package/dist/docs/reference/model/CurveSamplingOptions.md +0 -68
  901. package/dist/docs/reference/model/CustomThreadProfileSpec.md +0 -78
  902. package/dist/docs/reference/model/EdgeTreatment.md +0 -22
  903. package/dist/docs/reference/model/EllipseContourOptions.md +0 -21
  904. package/dist/docs/reference/model/ExtrudeMeshOptions.md +0 -133
  905. package/dist/docs/reference/model/ExtrusionSamplingOptions.md +0 -84
  906. package/dist/docs/reference/model/Frame3.md +0 -63
  907. package/dist/docs/reference/model/GeometryError.md +0 -102
  908. package/dist/docs/reference/model/GeometryErrorCode.md +0 -15
  909. package/dist/docs/reference/model/GeometryErrorContext.md +0 -35
  910. package/dist/docs/reference/model/GeometryResolution.md +0 -70
  911. package/dist/docs/reference/model/GeometrySamplingLimits.md +0 -62
  912. package/dist/docs/reference/model/GeometryToleranceOptions.md +0 -46
  913. package/dist/docs/reference/model/GridPatternOptions.md +0 -50
  914. package/dist/docs/reference/model/HoleCutterOverrun.md +0 -35
  915. package/dist/docs/reference/model/ImmutableBuffer-type.md +0 -108
  916. package/dist/docs/reference/model/ImmutableTriangleMesh.md +0 -43
  917. package/dist/docs/reference/model/InternalThreadCutterOptions.md +0 -216
  918. package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +0 -77
  919. package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +0 -47
  920. package/dist/docs/reference/model/KnuckleHingeSpec.md +0 -18
  921. package/dist/docs/reference/model/LinearPatternOptions.md +0 -39
  922. package/dist/docs/reference/model/LoftPlacement.md +0 -73
  923. package/dist/docs/reference/model/MatchProfilesOptions.md +0 -35
  924. package/dist/docs/reference/model/ModelingLimits.md +0 -126
  925. package/dist/docs/reference/model/NumericArray.md +0 -14
  926. package/dist/docs/reference/model/Path2-type.md +0 -196
  927. package/dist/docs/reference/model/Path2Data.md +0 -50
  928. package/dist/docs/reference/model/Path2Input.md +0 -20
  929. package/dist/docs/reference/model/Path3-type.md +0 -196
  930. package/dist/docs/reference/model/Path3Data.md +0 -50
  931. package/dist/docs/reference/model/Path3Input.md +0 -20
  932. package/dist/docs/reference/model/PathLocation.md +0 -69
  933. package/dist/docs/reference/model/PathNormalGuide.md +0 -46
  934. package/dist/docs/reference/model/PathOptions.md +0 -38
  935. package/dist/docs/reference/model/PathPatternOptions.md +0 -48
  936. package/dist/docs/reference/model/PathResamplingOptions.md +0 -84
  937. package/dist/docs/reference/model/Pivot2Options.md +0 -28
  938. package/dist/docs/reference/model/Pivot3Options.md +0 -28
  939. package/dist/docs/reference/model/PolygonData.md +0 -44
  940. package/dist/docs/reference/model/PrintableThreadFit.md +0 -15
  941. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +0 -51
  942. package/dist/docs/reference/model/Profile.md +0 -24
  943. package/dist/docs/reference/model/ProfileComponent2.md +0 -46
  944. package/dist/docs/reference/model/ProfileContour2.md +0 -36
  945. package/dist/docs/reference/model/ProfileSpan2.md +0 -47
  946. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +0 -41
  947. package/dist/docs/reference/model/RadialPatternOptions.md +0 -59
  948. package/dist/docs/reference/model/RadialSizing.md +0 -15
  949. package/dist/docs/reference/model/RadialSizingOptions.md +0 -40
  950. package/dist/docs/reference/model/RectangleContourOptions.md +0 -72
  951. package/dist/docs/reference/model/RectangleCornerTreatment.md +0 -40
  952. package/dist/docs/reference/model/RectangleCornerTreatments.md +0 -20
  953. package/dist/docs/reference/model/RegionData.md +0 -19
  954. package/dist/docs/reference/model/RoundedEdgeTreatment.md +0 -96
  955. package/dist/docs/reference/model/SmoothEdgeTreatment.md +0 -76
  956. package/dist/docs/reference/model/SquareThreadProfileSpec.md +0 -80
  957. package/dist/docs/reference/model/StarContourOptions.md +0 -81
  958. package/dist/docs/reference/model/StrokeCap.md +0 -16
  959. package/dist/docs/reference/model/StrokeJoin.md +0 -16
  960. package/dist/docs/reference/model/StrokeOptions.md +0 -91
  961. package/dist/docs/reference/model/ThreadBevelOptions.md +0 -35
  962. package/dist/docs/reference/model/ThreadEndStyle.md +0 -15
  963. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +0 -118
  964. package/dist/docs/reference/model/ThreadHandedness.md +0 -15
  965. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +0 -15
  966. package/dist/docs/reference/model/ThreadLeadInShape.md +0 -15
  967. package/dist/docs/reference/model/ThreadProfile.md +0 -87
  968. package/dist/docs/reference/model/ThreadProfileBaseSpec.md +0 -54
  969. package/dist/docs/reference/model/ThreadProfileSpec.md +0 -24
  970. package/dist/docs/reference/model/ThreadRidgeOptions.md +0 -141
  971. package/dist/docs/reference/model/ThreadSolidPreflight.md +0 -59
  972. package/dist/docs/reference/model/ThreadedNutOptions.md +0 -263
  973. package/dist/docs/reference/model/ThreadedNutPreflight.md +0 -111
  974. package/dist/docs/reference/model/ThreadedNutShape.md +0 -15
  975. package/dist/docs/reference/model/ThreadedRodOptions.md +0 -216
  976. package/dist/docs/reference/model/Transform2-type.md +0 -257
  977. package/dist/docs/reference/model/Transform2Data.md +0 -16
  978. package/dist/docs/reference/model/Transform2Input.md +0 -21
  979. package/dist/docs/reference/model/Transform3-type.md +0 -297
  980. package/dist/docs/reference/model/Transform3Data.md +0 -19
  981. package/dist/docs/reference/model/Transform3Input.md +0 -21
  982. package/dist/docs/reference/model/TrapezoidalThreadProfileSpec.md +0 -97
  983. package/dist/docs/reference/model/TriangleMesh.md +0 -34
  984. package/dist/docs/reference/model/TriangleMeshAnalysis.md +0 -129
  985. package/dist/docs/reference/model/TriangleMeshMeasurements.md +0 -79
  986. package/dist/docs/reference/model/TriangleMeshTopologyAnalysis.md +0 -131
  987. package/dist/docs/reference/model/TriangularThreadProfileSpec.md +0 -96
  988. package/dist/docs/reference/model/Vector2-type.md +0 -271
  989. package/dist/docs/reference/model/Vector2Data.md +0 -15
  990. package/dist/docs/reference/model/Vector2Input.md +0 -21
  991. package/dist/docs/reference/model/Vector3-type.md +0 -283
  992. package/dist/docs/reference/model/Vector3Data.md +0 -15
  993. package/dist/docs/reference/model/Vector3Input.md +0 -21
  994. package/dist/docs/reference/model/VectorTextLayout.md +0 -40
  995. package/dist/docs/reference/model/VectorTextMetrics.md +0 -100
  996. package/dist/docs/reference/model/bounds2.md +0 -37
  997. package/dist/docs/reference/model/bounds3.md +0 -37
  998. package/dist/docs/reference/model/categories/bounds.md +0 -38
  999. package/dist/docs/reference/model/categories/contracts.md +0 -16
  1000. package/dist/docs/reference/model/categories/core-values-errors.md +0 -44
  1001. package/dist/docs/reference/model/categories/explicit-profiles.md +0 -34
  1002. package/dist/docs/reference/model/categories/paths.md +0 -42
  1003. package/dist/docs/reference/model/categories/resolution.md +0 -20
  1004. package/dist/docs/reference/model/immutableBuffer.md +0 -49
  1005. package/dist/docs/reference/model/isGeometryError.md +0 -34
  1006. package/dist/docs/reference/model/matchProfiles.md +0 -42
  1007. package/dist/docs/reference/model/path2.md +0 -54
  1008. package/dist/docs/reference/model/path3.md +0 -49
  1009. package/dist/docs/reference/model/preflightInternalThreadCutter.md +0 -87
  1010. package/dist/docs/reference/model/preflightThreadedNut.md +0 -103
  1011. package/dist/docs/reference/model/preflightThreadedRod.md +0 -87
  1012. package/dist/docs/reference/model/transform2.md +0 -46
  1013. package/dist/docs/reference/model/transform3.md +0 -48
  1014. package/dist/docs/reference/model/vector2.md +0 -40
  1015. package/dist/docs/reference/model/vector3.md +0 -47
  1016. package/dist/docs/reference/text/Bounds2Data.md +0 -34
  1017. package/dist/docs/reference/text/Vector2Data.md +0 -7
  1018. package/dist/docs/reference/text/VectorTextLayout.md +0 -34
  1019. package/dist/docs/reference/text/VectorTextMetrics.md +0 -94
  1020. package/dist/engine/export-3mf.js +0 -23
  1021. package/dist/engine/operations/patterns.js +0 -47
  1022. package/dist/engine/serialize-3mf.js +0 -116
  1023. package/dist/geometry/loft/loft.js +0 -105
  1024. package/dist/geometry/mechanical/index.js +0 -14
  1025. package/dist/geometry/primitive-resolution.js +0 -20
  1026. package/dist/geometry/svg/index.js +0 -1
  1027. package/dist/geometry/sweeps/options.js +0 -29
  1028. package/dist/geometry/sweeps/sweep-closed.js +0 -96
  1029. package/dist/geometry/sweeps/sweep-mesh.js +0 -32
  1030. /package/dist/{geometry/mesh/mesh-types.js → export/types.js} +0 -0
  1031. /package/dist/geometry/mechanical/{standards.js → fastener-standards.js} +0 -0
  1032. /package/dist/geometry/mesh/{mesh-edge-table.js → edge-table.js} +0 -0
  1033. /package/dist/geometry/{primitive-options.js → mesh/types.js} +0 -0
  1034. /package/dist/{engine/mesh-view-cache.js → geometry/mesh/view-cache.js} +0 -0
  1035. /package/dist/geometry/{text-layout.js → primitives/options.js} +0 -0
@@ -1,782 +1,128 @@
1
1
  # Modeling recipes
2
2
 
3
- Build plates, cups, routed tubes, lofts, repeated features, SVG shapes, and lettering with complete modeling examples.
3
+ Choose an illustrated construction technique by the part you want to make.
4
4
 
5
- Choose a recipe, inspect its render, and copy the complete source into a Studio
6
- [code Project](https://metamesh.studio/docs/develop/code-projects). Each illustrated recipe renders that same source;
7
- open its interactive preview to orbit the result.
5
+ Choose the shape or feature you need. Each guide pairs rendered geometry with the checked source
6
+ that creates it, explains the important constraints, and links to the exact API.
8
7
 
9
- | You want to make | Start here | Main decision |
10
- | ------------------------ | -------------------------------------------------------------- | --------------------------------------------------------- |
11
- | A flat part with holes | [Sections and extrusion](#section-hole-offset-and-extrusion) | Solve the filled outline before adding thickness |
12
- | A badge from artwork | [SVG extrusion](#svg-parameter-and-extrusion) | Set physical size and preserve holes |
13
- | A lathed cup or knob | [Revolution](#revolve-a-radial-profile) | Describe radius and height in one closed wall profile |
14
- | A hub with repeated arms | [Radial placement](#primitive-booleans-and-repeated-placement) | Position one feature before repeating it |
15
- | A routed strip or tube | [Path sweep](#rotation-minimizing-path-sweep) | Choose how the section is oriented along the path |
16
- | A transition or adapter | [Section loft](#matched-section-loft) | Keep corresponding landmarks between stations |
17
- | A relief tile | [Heightfield](#sample-a-heightfield) | Choose physical samples and triangle diagonals |
18
- | A pair of mating pieces | [Anchors](#named-anchors-and-custom-frames) | Define the mating datum rather than duplicate coordinates |
19
- | Raised lettering | [Prepared text](#text-from-a-font-parameter) | Cache the selected font layout during generation |
8
+ New to Modeling? [Start with a complete part](https://metamesh.studio/docs/modeling#start-with-one-part), then return here
9
+ when you want to build a different shape.
20
10
 
21
- All dimensions in these recipes are millimetres. MetaMesh uses a right-handed coordinate system
22
- with +Z up and degrees for angular arguments including `rotate`. Don't repeat the first point at
23
- the end of a closed contour.
24
- The examples default-export a synchronous `generate` program. Use assertions for constraints
25
- and optional `computed` values to cache expensive shared calculations, geometry, or text layouts.
26
- [Define parameters and validation](https://metamesh.studio/docs/develop/parameters-and-validation) connects
27
- source values to controls.
11
+ ## Choose a technique
28
12
 
29
- ## Section, hole, offset, and extrusion
30
13
 
31
14
 
32
15
 
33
- ```ts
34
- import { circle, rectangle } from "@metamesh/modeling";
35
- import { generate } from "@metamesh/project";
16
+ ### [Profiles and extrusion](profiles-and-extrusion.md)
36
17
 
37
- export default generate(({ part }) => {
38
- const plate = rectangle({ size: [80, 45] });
39
- const hole = circle({ radius: 4 });
40
- // Positive offset expands material: the outer edge grows and the hole shrinks.
41
- const rimmedPlate = plate.subtract(hole).offset(1.2);
42
- // Keep the plate centered about Z = 0 for later symmetric placement.
43
- return [part("model", rimmedPlate.extrude({ height: 5, center: true }))];
44
- });
45
- ```
18
+ Outline → solid
46
19
 
47
- Subtract the opening in 2D, offset the filled material, then extrude it into one plate.
20
+ Extrude plates and gaskets, revolve cups, and finish housings and rims.
48
21
 
22
+ ![A tapered cup with an open top and closed floor](https://metamesh.studio/docs/develop/section-revolve.webp)
49
23
 
50
24
 
51
- `rectangle` and `circle` take object options and return filled Sections. The `union`, `subtract`, and
52
- `intersect` methods accept one shape or an array and also support Solids; every operand in a call
53
- must have the same dimension. Use collection `union(shapes)` or `intersect(shapes)` to combine peers.
54
- `section.offset(distance)` offsets the filled material. `section.extrude({ height })` preserves
55
- holes and places the bottom at zero unless `center: true` is requested.
56
25
 
57
- Positive offset grows material on every boundary: this example grows the outside by `1.2 mm` and
58
- reduces the hole radius from `4 mm` to `2.8 mm`. If the final bore must remain `8 mm` in diameter,
59
- offset the outside first and subtract the hole afterward. See
60
- [`Section.offset`](../reference/model/Section.md#offset) and [`Section.extrude`](../reference/model/Section.md#extrude).
61
26
 
62
- ## SVG parameter and extrusion
63
27
 
64
- Pass an SVG control's string value from `params` directly to `svgSection`. This example aliases
65
- `params` as `parameters`:
28
+ ### [Sweeps, lofts, and reliefs](sweeps-and-lofts.md)
66
29
 
30
+ Path or stations → solid
67
31
 
32
+ Route a ribbon, blend changing profiles, or sample a surface over an XY grid.
68
33
 
69
- ```ts
70
- import { svgSection } from "@metamesh/modeling";
71
- import { generate } from "@metamesh/project";
34
+ ![A transition between rounded rectangular sections](https://metamesh.studio/docs/develop/section-loft.webp)
72
35
 
73
- export default generate(({ params: parameters, part }) => {
74
- const profile = svgSection(parameters.profile6);
75
- return [part("model", profile.extrude({ height: 3, center: true }))];
76
- });
77
- ```
78
36
 
79
37
 
80
38
 
81
- The property name matches the ID in **Model controls**: `profile6` in this example, or
82
- `parameters.logo` for a control with ID `logo`.
83
39
 
84
- `svgSection` also accepts literal SVG documents. Here two nested subpaths make a badge
85
- with a rectangular opening:
40
+ ### [Transforms and placement](transforms-and-placement.md)
86
41
 
42
+ One feature → coordinated parts
87
43
 
44
+ Repeat features, share placements, and align parts by their anchors.
88
45
 
89
- ```ts
90
- import { svgSection } from "@metamesh/modeling";
91
- import { generate } from "@metamesh/project";
46
+ ![A radial hub with six repeated arms](https://metamesh.studio/docs/develop/primitive-array.webp)
92
47
 
93
- export default generate(({ part }) => {
94
- // Physical root units make the imported artwork exactly 48 × 32 mm.
95
- // Even-odd filling turns the second closed subpath into an opening.
96
- const badge = svgSection(`
97
- <svg xmlns="http://www.w3.org/2000/svg" width="48mm" height="32mm" viewBox="0 0 48 32">
98
- <path
99
- fill-rule="evenodd"
100
- d="M 0 0 H 48 V 32 H 0 Z M 14 8 H 34 V 24 H 14 Z"
101
- />
102
- </svg>
103
- `);
104
- // Check the imported topology before using it in the manufacturing solid.
105
- const measurements = badge.inspect();
106
- if (measurements.componentCount !== 1 || measurements.contourCount !== 2) {
107
- throw new Error("Expected one badge with one rectangular opening.");
108
- }
109
- return [part("model", badge.extrude({ height: 4, center: true }))];
110
- });
111
- ```
112
48
 
113
- The 48 × 32 mm SVG document retains its physical size and even-odd opening after extrusion.
114
49
 
115
50
 
116
51
 
117
- `svgSection` turns supported filled shapes and bounded strokes into a Section. The even-odd fill
118
- rule makes the second subpath a hole regardless of winding. Complete documents honor supported physical root units
119
- and `viewBox`, convert SVG's Y-down coordinates to MetaMesh Y-up, and center the filled bounds by
120
- default. Use `svgPathSection` for path-data strings where one user unit should equal 1 mm, or pass
121
- its `scale` option to choose another millimetres-per-unit conversion.
52
+ ### [Solid joins](solid-joins.md)
122
53
 
123
- To choose the finished artwork size, pass `fit` with positioned XY bounds. Fitting preserves
124
- aspect ratio and centers the painted geometry inside the target; unused SVG canvas margins do
125
- not reserve space. Adaptive curve tolerance and edge spacing apply at the final millimetre size:
54
+ Base + feature → connection
126
55
 
56
+ Connect a separately modeled boss or rib with a smooth or straight transition.
127
57
 
58
+ ![A mounting boss blended into a flat base](https://metamesh.studio/docs/develop/solid-join.webp)
128
59
 
129
- ```ts
130
- import { bounds2, svgSection } from "@metamesh/modeling";
131
- import { generate } from "@metamesh/project";
132
-
133
- export default generate(({ part }) => {
134
- const artwork = svgSection('<svg><circle r="1"/></svg>', {
135
- fit: bounds2({ size: [30, 18] }),
136
- resolution: { maxChordError: 0.05 },
137
- });
138
- return part("artwork", artwork.extrude({ height: 0.8 }));
139
- });
140
- ```
141
-
142
-
143
-
144
- To prepare SVG without an engine, `preflightSvgRegion` from `@metamesh/modeling/geometry` accepts
145
- the same fit target and returns its applied `fit`, final region, and review metrics. The scale
146
- and translation map the selected origin's SVG millimetres to model millimetres. Reuse them to
147
- align layers imported with the same document coordinate system and origin.
148
- Exact circular segment counts retain precedence over adaptive sampling. Empty artwork cannot
149
- be fitted, and fitting rejects a requested resolution that exceeds the sampling limits.
150
-
151
- Visible fills and bounded strokes contribute geometry; editor metadata is ignored. Editor text is
152
- outlined to visible paths on Apply. Live `<text>`, images, `<use>`, external resources, class-based
153
- stylesheets, clipping, masks, filters, and percentage dimensions are rejected. To generate lettering
154
- directly, use the [text recipe](#text-from-a-font-parameter). These helpers don't support SVG export,
155
- project assets, custom font uploads, text on paths, or general SVG layout.
156
-
157
- ## Revolve a radial profile
158
-
159
- Use revolution when one side outline can describe the entire part around an axis. In the Section
160
- below, X is radius and Y is final Z height; radii must stay nonnegative. The closed loop includes
161
- the cup's floor, outside, rim, and inside, so you can describe the wall and opening together.
162
60
 
163
61
 
164
62
 
165
- ```ts
166
- import { polygon } from "@metamesh/modeling";
167
- import { generate } from "@metamesh/project";
168
-
169
- export default generate(({ part }) => {
170
- // Here Section X means radius and Section Y becomes the final Z height.
171
- // Walk the filled wall counterclockwise, omitting a repeated closing point.
172
- const wall = polygon([
173
- [0, 0],
174
- [16, 0],
175
- [16, 4],
176
- [12, 4],
177
- [10, 28],
178
- [7, 28],
179
- [9, 4],
180
- [0, 4],
181
- ]);
182
- // A full revolution creates the floor, tapered wall, and open top together.
183
- return [part("model", wall.revolve())];
184
- });
185
- ```
186
-
187
- One radial wall profile revolved around +Z creates the floor and tapered cup wall.
188
-
189
-
190
-
191
- [`polygon`](../reference/model/polygon.md) fills the ordered contour.
192
- [`Section.revolve`](../reference/model/Section.md#revolve) defaults to a complete `360°` turn. Set
193
- `degrees: 270` for a capped partial turn that exposes the cross section. Keep the closed
194
- profile free of self-intersections and never repeat its first point at the end.
195
-
196
- For an open side outline, [`sampleSideProfile`](../reference/geometry/sampleSideProfile.md)
197
- returns physical `[radius, height]` points. [`closeToAxis`](../reference/geometry/closeToAxis.md)
198
- adds the horizontal bottom/top edges needed for a solid body. Fill the result with `polygon`,
199
- then revolve it. Hollow walls and mounting bores need their own closed material contour.
200
-
201
- ## Choose a primitive
202
-
203
- Start with the factory that most closely describes the shape. The first row below contains ready
204
- Solids; the second contains filled Sections extruded to `5 mm` thickness. Each result remains a
205
- separate named part so you can inspect it in the interactive preview.
206
-
207
63
 
64
+ ### [SVG and lettering](svg-and-text.md)
208
65
 
209
- ```ts
210
- import { ellipse, regularPolygon, sphere, star, torus, transform3, tube } from "@metamesh/modeling";
211
- import { generate } from "@metamesh/project";
66
+ Artwork → material
212
67
 
213
- export default generate(({ part }) => {
214
- // Solid primitives are ready for placement; filled Sections need depth first.
215
- // Place finished parts on two rows while keeping local geometry reusable.
216
- return [
217
- part("sphere", {
218
- geometry: sphere({ diameter: 14 }),
219
- transform: transform3().translate([0, 0, 7]),
220
- color: "#60a5fa",
221
- }),
222
- part("torus", {
223
- geometry: torus({ majorRadius: 7, minorRadius: 2 }),
224
- transform: transform3().translate([24, 0, 2]),
225
- color: "#34d399",
226
- }),
227
- part("tube", {
228
- geometry: tube({ outerRadius: 7, innerRadius: 4, height: 10, center: false }),
229
- transform: transform3().translate([48, 0, 0]),
230
- color: "#f59e0b",
231
- }),
232
- part("ellipse", {
233
- geometry: ellipse({ size: [18, 12] }).extrude({ height: 5 }),
234
- transform: transform3().translate([0, 24, 0]),
235
- color: "#c084fc",
236
- }),
237
- part("star", {
238
- geometry: star({ outerRadius: 9, innerRadius: 4.5, points: 5 }).extrude({ height: 5 }),
239
- transform: transform3().translate([24, 24, 0]),
240
- color: "#fb7185",
241
- }),
242
- part("hexagon", {
243
- geometry: regularPolygon({ radius: 7, sides: 6, sizing: "face" }).extrude({ height: 5 }),
244
- transform: transform3().translate([48, 24, 0]),
245
- color: "#22d3ee",
246
- }),
247
- ];
248
- });
249
- ```
250
-
251
- Sphere, torus, and tube are solid factories. Ellipse, star, and regular polygon create Sections that can be extruded.
252
-
253
-
254
-
255
- Use a [`tube`](../reference/model/tube.md) when the bore is concentric; it avoids a separate cutter.
256
- A [`torus`](../reference/model/torus.md) uses the distance to the circular profile's center as its
257
- major radius. [`regularPolygon`](../reference/model/regularPolygon.md) has an exact side count;
258
- `sizing: "face"` makes the specified radius reach the faces instead of the vertices. Keep physical
259
- curve tolerance for ordinary round shapes and use exact segment counts for deliberate faceting.
260
-
261
- ## Primitive booleans and repeated placement
262
-
263
-
264
-
265
- ```ts
266
- import { box, cylinder, radialPattern, union } from "@metamesh/modeling";
267
- import { generate } from "@metamesh/project";
268
-
269
- export default generate(({ part }) => {
270
- const hub = cylinder({ height: 12, radius: 14 });
271
- const arm = box({ size: [30, 6, 6] });
272
- // Translate first, then rotate the whole arm about the world origin.
273
- // Its inner end overlaps the hub so union creates one connected part.
274
- const arms = radialPattern(arm.translate([18, 0, 0]).rotate([0, 0, 30]), {
275
- count: 6,
276
- axis: [0, 0, 1],
277
- angle: 60,
278
- });
279
- // Both shapes are Z-centered; extra cutter height clears both hub faces.
280
- const bore = cylinder({ height: 16, radius: 4 });
281
- // Combine the repeated features once, then cut the common bore.
282
- return [part("model", union([hub, ...arms]).subtract(bore))];
283
- });
284
- ```
285
-
286
- Position and rotate one arm, repeat it about +Z, union the overlaps, then cut a common bore.
287
-
288
-
289
-
290
- Transforms apply in written order: `arm.translate(...).rotate(...)` moves the arm first, then rotates
291
- its position about the origin. Reversing those calls rotates the arm locally before moving it.
292
- Keep a deliberate overlap between each arm and the hub so the result is one connected solid.
293
-
294
- Exact signatures: [`box`](../reference/model/box.md),
295
- [`cylinder`](../reference/model/cylinder.md), and
296
- [`radialPattern`](../reference/model/radialPattern.md).
297
-
298
- ## Reuse a 2D placement
299
-
300
- Build one [`transform2`](../reference/geometry/transform2.md) chain when the same placement applies
301
- to a Section and its plain point data. This placement rotates around `[2, 1]`, then translates:
302
-
303
-
304
-
305
- ```ts
306
- import { path2, pathPattern, polygon, rectangle, transform2, union } from "@metamesh/modeling";
307
-
308
- const planarPlacement = transform2()
309
- .rotate(90, { pivot: [2, 1] })
310
- .translate([10, 0]);
311
- const outline = [
312
- [0, 0],
313
- [4, 0],
314
- [0, 2],
315
- ] as const;
316
-
317
- // Shape construction and composition are pure; the host evaluates the finished body.
318
- export const placedBody = polygon({ outer: outline, holes: [] })
319
- .transform(planarPlacement)
320
- .extrude({ height: 8 });
321
-
322
- // Paths accept the same placement. Matrices and tuples remain available for interchange.
323
- export const sectionMatrix = planarPlacement.toData();
324
- export const placedContour = path2(outline, { closed: true }).transform(planarPlacement);
325
- ```
326
-
327
-
328
-
329
- Pass the placement directly to `section.transform(planarPlacement)` or `path.transform(planarPlacement)`.
330
- Fill the transformed closed path with `polygon(placedContour)` when you need material.
331
- [`transformRegionData`](../reference/geometry/transformRegionData.md) serves serialized filled data.
68
+ Extrude painted SVG shapes or exact-font lettering and fit the visible outlines.
332
69
 
333
- A negative scale factor reflects the placement. Paths retain traversal order, including closed
334
- paths; filled Sections and serialized regions restore outer and hole winding. `andThen(next)`
335
- composes another placement in execution order;
336
- reuse the placement instead of rebuilding the chain for every point. Use `toData()` when another
337
- system needs the matrix.
70
+ ![A scalloped badge with a star-shaped opening](https://metamesh.studio/docs/develop/svg-document-extrusion.webp)
338
71
 
339
- Section path patterns consume `Path2` values directly. Tangent orientation aligns the Section's
340
- local +X direction with the path while preserving its XY plane:
341
72
 
342
73
 
343
74
 
344
- ```ts
345
- const guide = path2([
346
- [0, 0],
347
- [12, 0],
348
- [12, 12],
349
- ]);
350
- const tabs = pathPattern(rectangle({ size: [4, 2] }), guide, {
351
- count: 5,
352
- orientation: "tangent",
353
- });
354
- export const patternedTabs = union(tabs).extrude({ height: 3 });
355
- ```
356
75
 
76
+ ### [Printable threads](https://metamesh.studio/docs/develop/printable-threads)
357
77
 
78
+ Shared dimensions → mating parts
358
79
 
359
- Linear Section patterns use XY directions. Radial Section patterns rotate about an optional XY
360
- `pivot` using the implicit +Z axis; spatial Solid patterns retain their explicit rotation axis.
80
+ Make a threaded rod and nut with shared profiles, end treatments, and fit allowances.
361
81
 
362
- ## Rotation-minimizing path sweep
82
+ ![A threaded rod and matching nut](https://metamesh.studio/docs/modeling-guides/printable-threads/threaded-parts.webp)
363
83
 
364
84
 
365
85
 
366
- ```ts
367
- import { rectangle } from "@metamesh/modeling";
368
- import { generate } from "@metamesh/project";
369
86
 
370
- export default generate(({ part }) => {
371
- // An asymmetric section makes the frame orientation visible in the result.
372
- const section = rectangle({
373
- size: [8, 3],
374
- treatment: { kind: "round", radius: 0.8 },
375
- });
376
- const path = [
377
- [0, 0, 0],
378
- [15, 0, 8],
379
- [25, 10, 18],
380
- [25, 25, 24],
381
- ] as const;
382
- // The initial normal sets profile +X; transport carries it along the path.
383
- // The path is open, so the sweep closes both ends with caps.
384
- return [
385
- part(
386
- "model",
387
- section.sweep(path, { orientation: { kind: "transport", initialNormal: [0, 1, 0] } })
388
- ),
389
- ];
390
- });
391
- ```
392
87
 
393
- The asymmetric section makes its transported orientation visible as the path turns.
88
+ ### [Gear geometry](https://metamesh.studio/docs/develop/gear-geometry)
394
89
 
90
+ Pitch + tooth count → gear pair
395
91
 
92
+ Resolve dimensions, sample tooth outlines, and place a pinion, wheel, or rack.
396
93
 
397
- `section.sweep(path, options)` transports a filled shape along a path:
398
-
399
- - `orientation: { kind: "transport", initialNormal: [0, 1, 0] }` chooses the starting profile-X
400
- direction. Fixed normals, directed normal guides, and discrete Frenet frames are alternatives;
401
- the sweep rejects a selected policy that becomes singular.
402
- - `twist` adds total rotation by physical path length. Set `twistBy: "stations"` to use the authored
403
- station schedule instead.
404
- - `scale` accepts a positive uniform size, an XY pair, or one XY pair per normalized station.
405
- - `closed: true` joins an implicitly closed path without repeated endpoints. Orientation, scales,
406
- and `seamProfileOffset` must describe a compatible closing seam.
407
-
408
- Start with the open path above, inspect the first cap and the turns, then replace the rectangle
409
- with a [`circle`](../reference/model/circle.md) for a round rod. A sweep follows the supplied path
410
- stations; it does not infer a smooth curve between them. Sample a curve with the
411
- [path helpers](../reference/geometry/categories/curves-paths.md) when you need a curved trajectory.
412
-
413
- ## Named anchors and custom frames
94
+ ![A golden pinion and blue wheel with meshing teeth](https://metamesh.studio/docs/develop/gear-pair.webp)
414
95
 
415
96
 
416
97
 
417
- ```ts
418
- import { box, cylinder } from "@metamesh/modeling";
419
- import { generate } from "@metamesh/project";
420
98
 
421
- export default generate(({ part }) => {
422
- const base = box({ size: [40, 24, 6], center: false });
423
- // Named anchors follow dimensions: no duplicated half-height calculation.
424
- // Mating bottom to top opposes the two outward normals automatically.
425
- const pin = cylinder({ diameter: 8, height: 12 }).attach("bottom", base.anchor("top"), {
426
- gap: 0.2,
427
- });
428
- // Keep the gap and the two physical pieces instead of unioning the assembly.
429
- return [part("base", { geometry: base }), part("pin", { geometry: pin })];
430
- });
431
- ```
432
-
433
- The pin's bottom mates to the base's top with a 0.2 mm gap. They remain two named parts.
434
-
435
-
436
-
437
- Ordinary primitives know their named anchors, so `base.anchor("top")` follows the box's dimensions
438
- and placement. `pin.attach("bottom", base.anchor("top"))` mates opposed directions. Transforms and
439
- patterns carry those frames with the shape, with outward normals preserved under nonuniform scale
440
- and reflection. The axis names are `left/right` (−X/+X), `back/front` (−Y/+Y) and `bottom/top` (−Z/+Z).
441
-
442
- Use `shape.withAnchors({ mount: anchor3(position, direction, up) })` to define a custom datum
443
- without changing the original shape. Existing names remain unless replaced; definitions are copied
444
- and immutable.
445
- Boolean and other constructed shapes need explicit definitions because their surfaces may change.
446
- Anchor names use lowercase kebab-case, with at most 64 characters and 128 definitions per shape.
447
- Look up anchors during active synchronous generation; the lookup evaluates the required recipe.
448
- Returned frames are plain data.
449
-
450
- Primitive anchors describe nominal construction dimensions. Finishing and curve sampling do not
451
- move them. Tube and torus axial datums may lie over an opening; a cone has no cap anchor at its apex.
452
- Regular polygons and stars expose only `center`. Custom `Anchor3` frames, including pure
453
- `boxAnchor3` and `cylinderAnchor3` helpers, work wherever a source or target frame is required.
454
-
455
- Primitive `attachment` uses the same source/target anchor, `alignment`, `gap`, and `spin`
456
- options as `attach`, including a named `source`. It applies after local construction; Section
457
- attachment must preserve the XY plane.
458
-
459
- The `gap` here separates the two pieces along the target normal; it is a placement distance, not
460
- a radial fit clearance. Keep separate named parts for an assembly. For one fused part, remove the
461
- gap, add a small intended overlap, and [`union`](../reference/model/union.md) the solids.
462
-
463
- ## Printable threaded rod and nut
464
-
465
- Follow [Build printable threads](https://metamesh.studio/docs/develop/printable-threads) for a runnable rod-and-nut example
466
- and guidance on profiles, fit, lead, end treatments, resolution, and calibration.
467
-
468
- ## Treated boxes, frustums, and mirrored arrays
469
-
470
-
471
-
472
- ```ts
473
- import { box, cylinder, gridPattern } from "@metamesh/modeling";
474
- import { generate } from "@metamesh/project";
475
-
476
- export default generate(({ part }) => {
477
- const housing = box({
478
- size: [46, 30, 12],
479
- treatment: { kind: "round", radius: 3 },
480
- });
481
- const taperedBore = cylinder({
482
- // The centered cutter extends beyond both faces of the 12 mm housing.
483
- height: 16,
484
- // Tuples run from the bottom diameter to the top diameter along +Z.
485
- diameter: [8, 6],
486
- sizing: "face",
487
- ends: { top: { kind: "chamfer", distance: 0.8 } },
488
- });
489
- // Pattern the already-positioned tool; X varies fastest through the array.
490
- const perforations = gridPattern(taperedBore.translate([-13, -6, 0]), {
491
- count: [3, 2],
492
- spacing: [13, 12],
493
- });
494
- // Mirror the completed housing across the plane with normal +X.
495
- return [part("model", housing.subtract(perforations).mirror([1, 0, 0]))];
496
- });
497
- ```
498
-
499
- Six non-overlapping cutters share the same taper and rim treatment; the completed housing is mirrored.
500
-
501
-
502
-
503
- Paired cylinder radii or diameters are always `[bottom, top]` in +Z order. A zero endpoint makes a cone;
504
- chamfers under `ends.bottom` and `ends.top` may treat either nonzero end and follow the tapered side.
505
- Boxes and rectangles share `round`, `chamfer`, `smooth`, and explicit `profile` treatments. Boxes
506
- can select disjoint named edges or groups; rectangles can select each corner. `gridPattern` places
507
- the cutters on an XY grid, with X varying fastest.
508
- Zero rounding radius or zero chamfer/smooth setbacks disable that treatment, so an adjustable
509
- feature can remain in the options object when switched off.
510
-
511
- The bores use `diameter: [8, 6]` and `13 × 12 mm` spacing to leave material between them. Check
512
- the widest cutter diameter and the outer wall when changing either value. In this example the
513
- tool's top chamfer lies above the housing; it shapes the cutter end, not the finished hole's rim.
514
- Use an explicitly shaped cutting profile if the finished mouth needs a countersink.
515
-
516
- ## Matched-section loft
517
-
518
-
519
-
520
- ```ts
521
- import { loft, rectangle } from "@metamesh/modeling";
522
- import { generate } from "@metamesh/project";
523
-
524
- export default generate(({ part }) => {
525
- const base = rectangle({
526
- size: [24, 16],
527
- treatment: { kind: "round", radius: 3 },
528
- });
529
- // Transform the Section in its XY plane; loft supplies the station heights.
530
- // Keeping the original rectangle landmarks preserves corner correspondence.
531
- const top = base.scale([0.8, 1.2]).rotate(10).translate([3, 0]);
532
- return [
533
- part(
534
- "model",
535
- loft([
536
- {
537
- profile: base,
538
- z: 0,
539
- },
540
- {
541
- profile: top,
542
- z: 18,
543
- },
544
- ])
545
- ),
546
- ];
547
- });
548
- ```
549
-
550
- The two rounded rectangles retain matching corner identities while their size and pose change.
551
-
552
-
553
-
554
- This [`loft`](../reference/model/loft.md) example places a rounded rectangle at two heights. Use
555
- `scale`, `rotate` and `translate` to pose the top profile in XY; `rotate` takes degrees. Each
556
- station uses `z` for an ordinary horizontal plane. To tilt a station, pass
557
- `frame: anchorFrame3(anchor3(position, direction, up))` instead; the direction chooses its
558
- normal and a nonparallel `up` vector chooses its roll.
559
-
560
- The primitive retains its corner identities, so `loft` pairs corresponding landmarks without
561
- extra setup. The same approach works when corners become square or fully rounded. For a hollow
562
- adapter, loft the outer shape and bore separately, then subtract the bore.
563
-
564
- Custom hole topology or disconnected components can use an explicit
565
- [`Profile`](../reference/geometry/Profile.md) family with stable component, contour, and span IDs.
566
- Prepare [`matchProfiles`](../reference/geometry/matchProfiles.md) once and pass its
567
- [`CorrespondingProfile`](../reference/geometry/CorrespondingProfile.md) stations to the same `loft`
568
- function. Topology must remain constant across stations. Arbitrary Boolean Sections default to
569
- `correspondence: "direct"`; choose `"reindex"`, `"fast-distance"`, or `"distance"` to change the
570
- association strategy, or use explicit profiles for landmarks. Direct association preserves the supplied seams;
571
- reindex also chooses a cyclic phase, while distance methods optimize ordered connections. See
572
- [`LoftOptions`](../reference/model/LoftOptions.md) for sampling and work limits.
573
-
574
- ## Sample a heightfield
575
-
576
- Build a relief tile from absolute Z heights over a rectangular XY grid.
577
- [`heightfield`](../reference/model/heightfield.md) returns a Solid for Booleans and placement during
578
- generation. Pure [`mesh.heightfield`](../reference/mesh/heightfield.md) accepts the same options
579
- and returns an indexed mesh without an engine. Pass it directly as a mesh part, or wrap it in
580
- [`mesh.immutable`](../reference/mesh/immutable.md) when returning it from a cached computation.
581
-
582
-
583
-
584
- ```ts
585
- import { heightfield } from "@metamesh/modeling";
586
- import { generate } from "@metamesh/project";
587
-
588
- export default generate(({ part }) => {
589
- return [
590
- part(
591
- "model",
592
- heightfield({
593
- coordinates: {
594
- x: [-20, -18, -14, -8, 0, 8, 14, 18, 20],
595
- y: [-12, -10, -6, 0, 6, 10, 12],
596
- },
597
- triangulation: "min-edge",
598
- height: ([x, y]) => 3 + 0.8 * Math.cos(x / 6) * Math.cos(y / 5),
599
- })
600
- ),
601
- ];
602
- });
603
- ```
604
-
605
-
606
-
607
- The uneven axes place more samples near the border. Coordinates are absolute millimetres, strictly
608
- increasing, and must remain distinct in Float32 storage. For a uniform grid, replace `coordinates`
609
- with `size: [40, 24]` and `segments: [40, 24]`; this centers the footprint unless `origin` supplies
610
- its lower-left corner. Choose one sampling form per call.
611
-
612
- `baseZ` defaults to zero. Every height is an absolute Z coordinate strictly above that base;
613
- the builder preserves the sampled heights without rescaling them. It closes the top with shared
614
- boundary walls and a flat underside.
615
-
616
- | `triangulation` | Selection per top cell |
617
- | ---------------- | ---------------------------------------------------------------------------- |
618
- | `"fixed"` | The default lower-left to upper-right diagonal |
619
- | `"min-edge"` | The shorter 3D diagonal, using the existing corner heights |
620
- | `"center-error"` | The diagonal whose interpolated center is closest to one extra height sample |
621
-
622
- All choices keep two triangles per cell and the same vertices. Center matching evaluates one
623
- additional physical midpoint per cell. Both selection policies use the fixed diagonal for ties.
624
- Choose sample spacing for the surface detail you need: these policies do not adapt the grid or
625
- guarantee accuracy throughout each cell. Explicit axes let your model refine selected regions
626
- while keeping allocation bounded.
627
- [`mesh.preflightHeightfield`](../reference/mesh/preflightHeightfield.md) reports output counts and
628
- checks limits without evaluating heights.
629
-
630
- ## Text from a Font parameter
631
-
632
- Use this recipe for a label, plaque, or raised lettering whose font remains adjustable.
633
-
634
- 1. Open **Model controls**, add a **Font** control with ID `font`, and choose its default face and
635
- weight. Outfit and JetBrains Mono are bundled starter fonts.
636
- 2. Choose **Apply & return** and use the generation program below in `model.ts`.
637
- Studio prepares the selected font before the program lays out and extrudes its text.
638
- 3. To make the wording adjustable, add a **Text** control with ID `label` and a non-empty default,
639
- then replace the literal `"MetaMesh"` with `params.label`.
640
-
641
-
642
-
643
- ```ts
644
- import { textSection } from "@metamesh/modeling";
645
- import { generate } from "@metamesh/project";
646
-
647
- export default generate(({ params, services, part }) => {
648
- // The host has loaded the exact selected font before generation.
649
- const layout = services.text.layout("MetaMesh", {
650
- fontSize: 8,
651
- font: params.font,
652
- letterSpacing: 0.15,
653
- });
654
- // textSection preserves counters, such as the enclosed hole in the letter a.
655
- return [part("label", textSection(layout).extrude({ height: 1.2 }))];
656
- });
657
- ```
658
99
 
659
- The poster uses a pinned bundled Outfit face and preserves the counters inside each letter.
100
+ ### [Resolution and inspection](resolution-and-inspection.md)
660
101
 
102
+ Model → checked result
661
103
 
104
+ Choose physical curve detail, understand preflight guarantees, and inspect completed geometry.
662
105
 
663
- `textSection(layout)` converts prepared vector curves into a filled section, preserving holes in
664
- letters. Extrude that section or combine it with other sections and solids. Use `layout.metrics`
665
- and its visible `bounds` to size a backing plate or reject text without visible outlines.
106
+ ![A sampled relief tile with a rippled surface](https://metamesh.studio/docs/develop/heightfield.webp)
666
107
 
667
- Check a positioned label with [`bounds.containsBounds()`](../reference/geometry/bounds2.md),
668
- using [`bounds2({ size })`](../reference/geometry/bounds2.md) for the available rectangle.
669
- Horizontal `align: "center"` centers advance width; visible ink can remain asymmetric.
670
- To resize the ink uniformly and center it inside a target, use
671
- [`fitTextLayout`](../reference/geometry/fitTextLayout.md) before `textSection`. It transforms
672
- the retained vector paths before sampling, keeping curve tolerance in final millimetres.
673
- `maxScale: 1` permits shrinking without enlargement. Choose a minimum readable letter height
674
- and write parameter-specific error messages for your model.
675
108
 
676
109
 
677
110
 
678
- ```ts
679
- import {
680
- bounds2,
681
- fitTextLayout,
682
- type FittedTextLayout,
683
- type VectorTextLayout,
684
- } from "@metamesh/modeling/geometry";
111
+ For vectors, sampled
112
+ boundaries, and profile correspondence, read [geometry values](geometry-values.md).
685
113
 
686
- export function labelFits(layout: VectorTextLayout): boolean {
687
- const ink = layout.metrics.bounds;
688
- return ink !== null && bounds2({ size: [40, 12] }).containsBounds(ink);
689
- }
114
+ ## Run and adapt an example
690
115
 
691
- export function fitLabel(layout: VectorTextLayout): FittedTextLayout {
692
- // Fit visible ink while preserving proportions and preventing enlargement.
693
- return fitTextLayout(layout, bounds2({ size: [40, 12] }), { maxScale: 1 });
694
- }
695
- ```
116
+ The guides identify their execution host. Most use a [Studio code Project](https://metamesh.studio/docs/develop/code-projects),
117
+ where Studio supplies typed controls and prepared services. A [standalone model](standalone-model.md)
118
+ uses the same shape operations with generation imported from `@metamesh/modeling`.
696
119
 
120
+ 1. Read the model beside its source, then inspect its optional interactive preview when orientation
121
+ or separate parts matter.
122
+ 2. Adapt the dimensions and connect them to [controls and validation](https://metamesh.studio/docs/develop/parameters-and-validation).
123
+ 3. Check the defaults, supported extremes, and optional features with
124
+ [resolution and inspection](resolution-and-inspection.md) before [exporting](https://metamesh.studio/docs/use/export-3mf).
697
125
 
698
-
699
- | Setting | Meaning |
700
- | --------------- | ------------------------------------------------------------------------------ |
701
- | `font` | The complete Font control value, including the exact face revision and weight |
702
- | `fontSize` | Em size in millimetres; visible capital height depends on the font |
703
- | `letterSpacing` | Extra millimetres between shaped glyph clusters |
704
- | `align` | Left, center, or right alignment using the text's advance |
705
- | `verticalAlign` | First-line baseline by default, or top, center, or bottom using visible bounds |
706
- | `lineHeight` | Baseline-spacing multiplier; omitted uses the font's natural line spacing |
707
-
708
- For a circular label, add a [`baseline`](../reference/text/VectorTextArcBaseline.md) with
709
- `kind: "arc"` and a positive `radius` in millimetres to the layout options. The baseline is centered
710
- at the XY origin; `centerAngle` chooses its alignment datum and `direction` chooses the
711
- reading direction. Each shaped glyph group rotates without bending. Circular text requires one
712
- line and baseline vertical alignment; its default horizontal alignment is centered. These helpers
713
- don't support arbitrary path text or automatic wrapping.
714
-
715
- Text uses positive Y upward and supports line breaks, with at most 512 UTF-16 units and 16 lines.
716
- Empty or whitespace-only text can be measured but cannot create a section. Return a parameter error
717
- for that expected input; a missing glyph also requires different wording or a font that supports it.
718
- See [`TextSectionOptions`](../reference/model/TextSectionOptions.md) for exact options.
719
-
720
- Studio loads declared fonts before generation. Export uses the captured visible mesh. Saving a Project
721
- preserves the exact selection, including its revision, without embedding font bytes. Fonts beyond
722
- the bundled starters can require internet; ordinary browser caching does not guarantee them offline.
723
- If loading fails, Studio preserves the selection and last valid model so you can retry or choose a
724
- replacement. Studio does not support custom font uploads.
725
-
726
- ## Solid inspection
727
-
728
- Use `solid.inspect()` during generation to check bounds, volume, and component count:
729
-
730
-
731
-
732
- ```ts
733
- import { box } from "@metamesh/modeling";
734
- import { generate } from "@metamesh/project";
735
-
736
- export default generate(({ part }) => {
737
- const result = box({ size: [40, 30, 5] });
738
- const measurements = result.inspect();
739
-
740
- if (measurements.bounds.min[2] < -2.5 || measurements.componentCount !== 1) {
741
- throw new Error("Unexpected placement or disconnected result.");
742
- }
743
-
744
- return [part("model", result)];
745
- });
746
- ```
747
-
748
-
749
-
750
- Use [`layoutRow`](../reference/geometry/layoutRow.md) to arrange pieces along +X with an explicit
751
- gap and place their minimum Y/Z at zero. Pass bounds after any intended rotation, then use the
752
- returned translations in `part` placement options so you can reuse the geometry.
753
-
754
-
755
-
756
- ```ts
757
- import { box, generate, transform3 } from "@metamesh/modeling";
758
- import { layoutRow } from "@metamesh/modeling/geometry";
759
-
760
- export const rowModel = generate<Record<never, never>>(({ part }) => {
761
- const pieces = [box({ size: [20, 10, 6] }), box({ size: [12, 16, 8] })];
762
- const positions = layoutRow(
763
- pieces.map((piece) => piece.inspect().bounds),
764
- { gap: 4 }
765
- );
766
- return pieces.map((geometry, index) =>
767
- part(`piece-${index}`, { geometry, transform: transform3().translate(positions[index]!) })
768
- );
769
- });
770
- ```
771
-
772
-
773
-
774
- Inspection reports measurements from the evaluated geometry. Before a result becomes available
775
- for preview or export, finalization checks that it's finite, closed, oriented, and reconstructable.
776
- Those checks don't certify manufacturability. Keep minimum walls, overhangs, fits, and parameter
777
- messages in your model's validation.
778
-
779
- After adapting a recipe, check its default, the largest and smallest supported dimensions, and
780
- every optional feature. Inspect the current result in Studio before exporting it. Continue with
781
- the [source and result contract](generation.md), or use the
782
- [Modeling API reference](../reference/model.md) for exact signatures and options.
126
+ Keep expensive unchanged work in [memoized helpers](generation.md#reuse-unchanged-work)
127
+ once the basic construction works. Mechanical fit needs a representative physical test as well as
128
+ valid generated geometry.