@metamesh/modeling 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (789) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +34 -18
  3. package/dist/api/engine.d.ts +217 -121
  4. package/dist/api/export.d.ts +123 -79
  5. package/dist/api/geometry.d.ts +406 -2102
  6. package/dist/api/index.d.ts +472 -1798
  7. package/dist/api/math.d.ts +315 -0
  8. package/dist/api/mechanical.d.ts +1041 -0
  9. package/dist/api/mesh.d.ts +360 -88
  10. package/dist/api/text.d.ts +24 -44
  11. package/dist/docs/guides/concepts.md +67 -33
  12. package/dist/docs/guides/exporting.md +88 -0
  13. package/dist/docs/guides/fonts.md +5 -3
  14. package/dist/docs/guides/fundamentals.md +12 -24
  15. package/dist/docs/guides/generation.md +24 -16
  16. package/dist/docs/guides/geometry-values.md +192 -134
  17. package/dist/docs/guides/hosting.md +51 -96
  18. package/dist/docs/guides/profiles-and-extrusion.md +159 -11
  19. package/dist/docs/guides/recipes.md +121 -28
  20. package/dist/docs/guides/resolution-and-inspection.md +43 -23
  21. package/dist/docs/guides/solid-joins.md +12 -2
  22. package/dist/docs/guides/standalone-model.md +4 -2
  23. package/dist/docs/guides/svg-and-text.md +76 -39
  24. package/dist/docs/guides/sweeps-and-lofts.md +88 -44
  25. package/dist/docs/guides/transforms-and-placement.md +113 -103
  26. package/dist/docs/guides/workers.md +166 -0
  27. package/dist/docs/manifest.json +4133 -4153
  28. package/dist/docs/reference/engine/GenerationOptions.md +2 -3
  29. package/dist/docs/reference/engine/GeometryResource.md +6 -6
  30. package/dist/docs/reference/engine/ModelDependencies.md +2 -2
  31. package/dist/docs/reference/engine/ModelEngine.md +2 -3
  32. package/dist/docs/reference/engine/ModelEngineOptions.md +2 -7
  33. package/dist/docs/reference/engine/ModelPart.md +6 -6
  34. package/dist/docs/reference/engine/ModelResult.md +2 -2
  35. package/dist/docs/reference/engine/ModelRunArguments.md +2 -2
  36. package/dist/docs/reference/engine/ModelRunOptions.md +2 -3
  37. package/dist/docs/reference/engine/ModelSession.md +2 -2
  38. package/dist/docs/reference/engine/SessionOptions.md +2 -3
  39. package/dist/docs/reference/engine/categories/host-lifecycle.md +9 -3
  40. package/dist/docs/reference/engine/checkModel.md +6 -2
  41. package/dist/docs/reference/engine/createModelEngine.md +5 -3
  42. package/dist/docs/reference/engine/defaultModelingLimits.md +4 -11
  43. package/dist/docs/reference/engine/modelingWasmUrl.md +2 -2
  44. package/dist/docs/reference/engine.md +7 -1
  45. package/dist/docs/reference/export/Export3mfOptions.md +2 -6
  46. package/dist/docs/reference/export/ExportDiagnostic.md +2 -14
  47. package/dist/docs/reference/export/ExportFormat.md +2 -14
  48. package/dist/docs/reference/export/ExportGeometry.md +3 -15
  49. package/dist/docs/reference/export/ExportGlbOptions.md +14 -18
  50. package/dist/docs/reference/export/ExportLimits.md +2 -14
  51. package/dist/docs/reference/export/ExportMaterial.md +2 -14
  52. package/dist/docs/reference/export/ExportOptions.md +2 -14
  53. package/dist/docs/reference/export/ExportPart.md +2 -14
  54. package/dist/docs/reference/export/ExportReport.md +2 -14
  55. package/dist/docs/reference/export/ExportSink.md +5 -15
  56. package/dist/docs/reference/export/ExportStlOptions.md +2 -6
  57. package/dist/docs/reference/export/ExportedFile.md +14 -26
  58. package/dist/docs/reference/export/categories/mesh-serialization.md +9 -3
  59. package/dist/docs/reference/export/defaultExportLimits.md +2 -2
  60. package/dist/docs/reference/export/export3mf.md +4 -6
  61. package/dist/docs/reference/export/exportGlb.md +8 -10
  62. package/dist/docs/reference/export/exportStl.md +4 -6
  63. package/dist/docs/reference/export/write3mf.md +6 -6
  64. package/dist/docs/reference/export/writeGlb.md +10 -10
  65. package/dist/docs/reference/export/writeStl.md +6 -6
  66. package/dist/docs/reference/export.md +9 -3
  67. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +4 -4
  68. package/dist/docs/reference/geometry/Anchor3-type.md +3 -7
  69. package/dist/docs/reference/geometry/Anchor3Options.md +70 -0
  70. package/dist/docs/reference/geometry/ArcCurve2.md +3 -3
  71. package/dist/docs/reference/geometry/ArcCurve3.md +3 -3
  72. package/dist/docs/reference/geometry/AttachOptions.md +4 -9
  73. package/dist/docs/reference/geometry/Bounds2-type.md +9 -30
  74. package/dist/docs/reference/geometry/Bounds2Data.md +2 -19
  75. package/dist/docs/reference/geometry/Bounds2Input.md +2 -10
  76. package/dist/docs/reference/geometry/Bounds2Options.md +2 -6
  77. package/dist/docs/reference/geometry/Bounds3-type.md +9 -30
  78. package/dist/docs/reference/geometry/Bounds3Data.md +2 -15
  79. package/dist/docs/reference/geometry/Bounds3Input.md +2 -10
  80. package/dist/docs/reference/geometry/Bounds3Options.md +2 -6
  81. package/dist/docs/reference/geometry/BoundsFit2.md +2 -2
  82. package/dist/docs/reference/geometry/BoundsFit3.md +2 -2
  83. package/dist/docs/reference/geometry/BoundsFitOptions.md +2 -2
  84. package/dist/docs/reference/geometry/BoxAnchorFace.md +3 -3
  85. package/dist/docs/reference/geometry/BoxAnchorOptions.md +3 -3
  86. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +3 -7
  87. package/dist/docs/reference/geometry/CircleContourOptions.md +3 -7
  88. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +3 -12
  89. package/dist/docs/reference/geometry/CircularResolutionOptions.md +2 -2
  90. package/dist/docs/reference/geometry/CircularSampling.md +2 -2
  91. package/dist/docs/reference/geometry/CircularSamplingOptions.md +2 -2
  92. package/dist/docs/reference/geometry/Contour.md +4 -9
  93. package/dist/docs/reference/geometry/ContourCurve.md +3 -3
  94. package/dist/docs/reference/geometry/ContourPoint.md +3 -3
  95. package/dist/docs/reference/geometry/ContourSegment.md +3 -3
  96. package/dist/docs/reference/geometry/CorrespondingComponent.md +3 -7
  97. package/dist/docs/reference/geometry/CorrespondingContour.md +3 -7
  98. package/dist/docs/reference/geometry/CorrespondingProfile.md +3 -7
  99. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +4 -8
  100. package/dist/docs/reference/geometry/CubicBezierCurve2.md +3 -3
  101. package/dist/docs/reference/geometry/CubicBezierCurve3.md +3 -3
  102. package/dist/docs/reference/geometry/Curve2.md +3 -3
  103. package/dist/docs/reference/geometry/Curve3.md +3 -3
  104. package/dist/docs/reference/geometry/CurveSamplingOptions.md +3 -11
  105. package/dist/docs/reference/geometry/CylinderAnchorFace.md +3 -3
  106. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +4 -4
  107. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +2 -2
  108. package/dist/docs/reference/geometry/EdgeTreatment.md +2 -6
  109. package/dist/docs/reference/geometry/EllipseContourOptions.md +3 -7
  110. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +9 -18
  111. package/dist/docs/reference/geometry/FittedTextLayout.md +2 -2
  112. package/dist/docs/reference/geometry/{Frame3.md → Frame3-type.md} +4 -11
  113. package/dist/docs/reference/geometry/Frame3Options.md +69 -0
  114. package/dist/docs/reference/geometry/GeometryError.md +2 -6
  115. package/dist/docs/reference/geometry/GeometryErrorCode.md +2 -6
  116. package/dist/docs/reference/geometry/GeometryErrorContext.md +2 -6
  117. package/dist/docs/reference/geometry/GeometryResolution.md +2 -10
  118. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +3 -11
  119. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +3 -11
  120. package/dist/docs/reference/geometry/GridPatternOptions.md +7 -9
  121. package/dist/docs/reference/geometry/ImmutableBuffer-type.md +2 -10
  122. package/dist/docs/reference/geometry/LineCurve2.md +3 -3
  123. package/dist/docs/reference/geometry/LineCurve3.md +3 -3
  124. package/dist/docs/reference/geometry/LinearPatternOptions.md +2 -6
  125. package/dist/docs/reference/geometry/LoftPlacement.md +13 -21
  126. package/dist/docs/reference/geometry/MatchProfilesOptions.md +3 -7
  127. package/dist/docs/reference/geometry/ModelingLimits.md +2 -14
  128. package/dist/docs/reference/geometry/NumericArray.md +2 -10
  129. package/dist/docs/reference/geometry/Path2-type.md +153 -12
  130. package/dist/docs/reference/geometry/Path2Data.md +3 -11
  131. package/dist/docs/reference/geometry/Path2Input.md +3 -11
  132. package/dist/docs/reference/geometry/Path3-type.md +153 -12
  133. package/dist/docs/reference/geometry/Path3Data.md +3 -11
  134. package/dist/docs/reference/geometry/Path3Input.md +3 -11
  135. package/dist/docs/reference/geometry/PathFrame.md +3 -3
  136. package/dist/docs/reference/geometry/PathLocation.md +3 -11
  137. package/dist/docs/reference/geometry/PathNormalGuide.md +4 -12
  138. package/dist/docs/reference/geometry/PathOptions.md +3 -7
  139. package/dist/docs/reference/geometry/PathPatternOptions.md +3 -7
  140. package/dist/docs/reference/geometry/PathPlacement.md +5 -5
  141. package/dist/docs/reference/geometry/PathResamplingOptions.md +3 -11
  142. package/dist/docs/reference/geometry/PathStation.md +87 -0
  143. package/dist/docs/reference/geometry/PathSubdivisionOptions.md +44 -0
  144. package/dist/docs/reference/geometry/Pivot2Options.md +3 -11
  145. package/dist/docs/reference/geometry/Pivot3Options.md +3 -11
  146. package/dist/docs/reference/geometry/PolygonData.md +4 -8
  147. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +3 -3
  148. package/dist/docs/reference/geometry/Profile.md +3 -4
  149. package/dist/docs/reference/geometry/ProfileComponent2.md +3 -7
  150. package/dist/docs/reference/geometry/ProfileContour2.md +3 -7
  151. package/dist/docs/reference/geometry/ProfileSpan2.md +3 -7
  152. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +5 -8
  153. package/dist/docs/reference/geometry/RadialPatternOptions.md +2 -6
  154. package/dist/docs/reference/geometry/RadialSizing.md +2 -6
  155. package/dist/docs/reference/geometry/RadialSizingOptions.md +2 -6
  156. package/dist/docs/reference/geometry/RectangleContourOptions.md +4 -7
  157. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +3 -7
  158. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +3 -7
  159. package/dist/docs/reference/geometry/RectangleProfileOptions.md +3 -3
  160. package/dist/docs/reference/geometry/RegionData.md +3 -7
  161. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
  162. package/dist/docs/reference/geometry/ResolvedGeometryResolution.md +71 -0
  163. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +2 -2
  164. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +2 -6
  165. package/dist/docs/reference/geometry/RowLayoutOptions.md +2 -2
  166. package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
  167. package/dist/docs/reference/geometry/SampleHelixOptions.md +3 -3
  168. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
  169. package/dist/docs/reference/geometry/SampledCurve2.md +3 -3
  170. package/dist/docs/reference/geometry/SampledCurve3.md +3 -3
  171. package/dist/docs/reference/geometry/SideProfileCurve.md +3 -3
  172. package/dist/docs/reference/geometry/SideProfilePoint.md +3 -3
  173. package/dist/docs/reference/geometry/SideProfileSegment.md +3 -3
  174. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +2 -6
  175. package/dist/docs/reference/geometry/SplineOptions.md +69 -0
  176. package/dist/docs/reference/geometry/StarContourOptions.md +7 -7
  177. package/dist/docs/reference/geometry/StrokeCap.md +2 -6
  178. package/dist/docs/reference/geometry/StrokeJoin.md +2 -6
  179. package/dist/docs/reference/geometry/StrokeOptions.md +3 -7
  180. package/dist/docs/reference/geometry/SvgImportOptions.md +4 -4
  181. package/dist/docs/reference/geometry/SvgRegionPreflight.md +2 -2
  182. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +2 -2
  183. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +2 -2
  184. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +2 -2
  185. package/dist/docs/reference/geometry/Transform2-type.md +3 -11
  186. package/dist/docs/reference/geometry/Transform2Data.md +3 -11
  187. package/dist/docs/reference/geometry/Transform2Input.md +3 -11
  188. package/dist/docs/reference/geometry/Transform3-type.md +4 -12
  189. package/dist/docs/reference/geometry/Transform3Data.md +3 -11
  190. package/dist/docs/reference/geometry/Transform3Input.md +6 -13
  191. package/dist/docs/reference/geometry/Vector2-type.md +3 -11
  192. package/dist/docs/reference/geometry/Vector2Data.md +3 -15
  193. package/dist/docs/reference/geometry/Vector2Input.md +3 -11
  194. package/dist/docs/reference/geometry/Vector3-type.md +27 -11
  195. package/dist/docs/reference/geometry/Vector3Data.md +3 -11
  196. package/dist/docs/reference/geometry/Vector3Input.md +3 -11
  197. package/dist/docs/reference/geometry/VectorTextLayout.md +2 -10
  198. package/dist/docs/reference/geometry/VectorTextMetrics.md +3 -11
  199. package/dist/docs/reference/geometry/anchor3.md +17 -26
  200. package/dist/docs/reference/geometry/anchorFrame3.md +6 -6
  201. package/dist/docs/reference/geometry/attachmentTransform3.md +8 -8
  202. package/dist/docs/reference/geometry/bounds2.md +6 -8
  203. package/dist/docs/reference/geometry/bounds3.md +4 -6
  204. package/dist/docs/reference/geometry/boundsCenter.md +2 -2
  205. package/dist/docs/reference/geometry/boundsSize.md +2 -2
  206. package/dist/docs/reference/geometry/boxAnchor3.md +3 -3
  207. package/dist/docs/reference/geometry/categories/bounds-layout.md +9 -3
  208. package/dist/docs/reference/geometry/categories/curves-paths.md +24 -13
  209. package/dist/docs/reference/geometry/categories/immutable-data.md +40 -0
  210. package/dist/docs/reference/geometry/categories/pattern-placement.md +10 -4
  211. package/dist/docs/reference/geometry/categories/primitive-options.md +8 -13
  212. package/dist/docs/reference/geometry/categories/profiles-regions.md +11 -5
  213. package/dist/docs/reference/geometry/categories/resolution-errors.md +8 -1
  214. package/dist/docs/reference/geometry/categories/transforms-math.md +20 -51
  215. package/dist/docs/reference/geometry/categories/vector-import.md +7 -4
  216. package/dist/docs/reference/geometry/circleContour.md +3 -3
  217. package/dist/docs/reference/geometry/closeToAxis.md +7 -3
  218. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +9 -6
  219. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +13 -6
  220. package/dist/docs/reference/geometry/contourContainsPoint.md +7 -3
  221. package/dist/docs/reference/geometry/cylinderAnchor3.md +5 -5
  222. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +3 -3
  223. package/dist/docs/reference/geometry/distributeAlongPath.md +16 -11
  224. package/dist/docs/reference/geometry/ellipseContour.md +3 -3
  225. package/dist/docs/reference/geometry/fitBounds.md +10 -2
  226. package/dist/docs/reference/geometry/fitTextLayout.md +5 -5
  227. package/dist/docs/reference/geometry/frame3.md +66 -0
  228. package/dist/docs/reference/geometry/gridPatternTransforms.md +6 -6
  229. package/dist/docs/reference/geometry/immutableBuffer.md +5 -7
  230. package/dist/docs/reference/geometry/isGeometryError.md +2 -6
  231. package/dist/docs/reference/geometry/layoutRow.md +4 -2
  232. package/dist/docs/reference/geometry/linearPatternTransforms.md +6 -6
  233. package/dist/docs/reference/geometry/matchProfiles.md +5 -3
  234. package/dist/docs/reference/geometry/normalizeContour.md +8 -4
  235. package/dist/docs/reference/geometry/normalizePolygon.md +5 -3
  236. package/dist/docs/reference/geometry/normalizeRegion.md +5 -3
  237. package/dist/docs/reference/geometry/path2.md +7 -7
  238. package/dist/docs/reference/geometry/path3.md +7 -7
  239. package/dist/docs/reference/geometry/pathPatternTransforms.md +12 -8
  240. package/dist/docs/reference/geometry/preflightSvgRegion.md +5 -5
  241. package/dist/docs/reference/geometry/radialPatternTransforms.md +5 -5
  242. package/dist/docs/reference/geometry/rectangleContour.md +3 -3
  243. package/dist/docs/reference/geometry/rectangleProfile.md +3 -4
  244. package/dist/docs/reference/geometry/regionArea.md +3 -3
  245. package/dist/docs/reference/geometry/regionBounds.md +6 -4
  246. package/dist/docs/reference/geometry/regularPolygonContour.md +3 -3
  247. package/dist/docs/reference/geometry/resamplePolyline2.md +7 -3
  248. package/dist/docs/reference/geometry/resamplePolyline3.md +7 -3
  249. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +5 -5
  250. package/dist/docs/reference/geometry/resolveArcSegments.md +8 -6
  251. package/dist/docs/reference/geometry/resolveCircularSampling.md +2 -2
  252. package/dist/docs/reference/geometry/resolveCircularSegments.md +5 -3
  253. package/dist/docs/reference/geometry/{resolveExtrusionDivisions.md → resolveExtrusionSlices.md} +16 -15
  254. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +5 -3
  255. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +3 -3
  256. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +12 -5
  257. package/dist/docs/reference/geometry/sampleContour.md +5 -5
  258. package/dist/docs/reference/geometry/sampleCurve2.md +7 -3
  259. package/dist/docs/reference/geometry/sampleCurve3.md +7 -3
  260. package/dist/docs/reference/geometry/sampleHelix.md +3 -3
  261. package/dist/docs/reference/geometry/sampleSideProfile.md +5 -5
  262. package/dist/docs/reference/geometry/sampleTextContours.md +3 -3
  263. package/dist/docs/reference/geometry/signedContourArea.md +5 -3
  264. package/dist/docs/reference/geometry/spline2.md +68 -0
  265. package/dist/docs/reference/geometry/spline3.md +62 -0
  266. package/dist/docs/reference/geometry/starContour.md +3 -3
  267. package/dist/docs/reference/geometry/strokeRegionData.md +8 -5
  268. package/dist/docs/reference/geometry/transform2.md +5 -7
  269. package/dist/docs/reference/geometry/transform3.md +23 -10
  270. package/dist/docs/reference/geometry/transformRegionData.md +7 -3
  271. package/dist/docs/reference/geometry/triangulateContour.md +6 -4
  272. package/dist/docs/reference/geometry/vector2.md +6 -8
  273. package/dist/docs/reference/geometry/vector3.md +8 -8
  274. package/dist/docs/reference/geometry.md +13 -18
  275. package/dist/docs/reference/{geometry → math}/AxisAngleRotation3.md +4 -5
  276. package/dist/docs/reference/math/IDENTITY_TRANSFORM3.md +20 -0
  277. package/dist/docs/reference/math/add2.md +38 -0
  278. package/dist/docs/reference/math/add3.md +46 -0
  279. package/dist/docs/reference/math/applyTransformDirection3.md +46 -0
  280. package/dist/docs/reference/math/applyTransformPoint3.md +44 -0
  281. package/dist/docs/reference/math/categories/tuple-matrix.md +67 -0
  282. package/dist/docs/reference/math/cross2.md +38 -0
  283. package/dist/docs/reference/math/cross3.md +44 -0
  284. package/dist/docs/reference/math/distance2.md +38 -0
  285. package/dist/docs/reference/math/distance3.md +38 -0
  286. package/dist/docs/reference/math/dot2.md +38 -0
  287. package/dist/docs/reference/math/dot3.md +44 -0
  288. package/dist/docs/reference/math/eulerTransform3.md +43 -0
  289. package/dist/docs/reference/math/inverseTransform3.md +36 -0
  290. package/dist/docs/reference/math/length2.md +32 -0
  291. package/dist/docs/reference/math/length3.md +32 -0
  292. package/dist/docs/reference/math/lerp2.md +46 -0
  293. package/dist/docs/reference/math/lerp3.md +46 -0
  294. package/dist/docs/reference/math/multiplyTransform3.md +46 -0
  295. package/dist/docs/reference/math/normalize2.md +45 -0
  296. package/dist/docs/reference/math/normalize3.md +45 -0
  297. package/dist/docs/reference/math/projectOntoPlane3.md +40 -0
  298. package/dist/docs/reference/math/rotate2.md +40 -0
  299. package/dist/docs/reference/math/rotationTransform3.md +56 -0
  300. package/dist/docs/reference/math/scale2.md +38 -0
  301. package/dist/docs/reference/math/scale3.md +44 -0
  302. package/dist/docs/reference/math/scaleTransform3.md +39 -0
  303. package/dist/docs/reference/math/subtract2.md +38 -0
  304. package/dist/docs/reference/math/subtract3.md +44 -0
  305. package/dist/docs/reference/math/transformDeterminant3.md +38 -0
  306. package/dist/docs/reference/math/translationTransform3.md +36 -0
  307. package/dist/docs/reference/math/validateRigidTransform3.md +38 -0
  308. package/dist/docs/reference/math/validateTransform3.md +48 -0
  309. package/dist/docs/reference/math.md +22 -0
  310. package/dist/docs/reference/{geometry → mechanical}/AcmeThreadProfileSpec.md +4 -13
  311. package/dist/docs/reference/{geometry → mechanical}/Bevel.md +3 -11
  312. package/dist/docs/reference/{geometry → mechanical}/BevelSize.md +3 -11
  313. package/dist/docs/reference/{geometry → mechanical}/ButtressPressureFlankSide.md +3 -11
  314. package/dist/docs/reference/{geometry → mechanical}/ButtressThreadProfileSpec.md +4 -13
  315. package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleDimensions.md +3 -3
  316. package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleFit.md +3 -3
  317. package/dist/docs/reference/{geometry → mechanical}/CompensatedThreadDiameters.md +3 -3
  318. package/dist/docs/reference/{geometry → mechanical}/CustomThreadProfileSpec.md +5 -15
  319. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearDimensions.md +3 -3
  320. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearMeshKind.md +3 -3
  321. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearOutlineOptions.md +5 -10
  322. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairDimensions.md +3 -3
  323. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionOptions.md +3 -3
  324. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionReport.md +3 -3
  325. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairSpec.md +3 -3
  326. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearSpec.md +3 -3
  327. package/dist/docs/reference/{geometry → mechanical}/InternalThreadCutterOptions.md +6 -13
  328. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeBaseSpec.md +3 -7
  329. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeDimensions.md +4 -5
  330. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeInterval.md +3 -3
  331. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSamplingOptions.md +5 -14
  332. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSpec.md +3 -7
  333. package/dist/docs/reference/{geometry → mechanical}/METRIC_FASTENER_STANDARDS.md +3 -3
  334. package/dist/docs/reference/{geometry → mechanical}/MetricFastenerSize.md +3 -3
  335. package/dist/docs/reference/{geometry → mechanical}/MetricFastenerStandard.md +3 -3
  336. package/dist/docs/reference/{geometry → mechanical}/MetricHexNutDimensions.md +3 -3
  337. package/dist/docs/reference/{geometry → mechanical}/MetricSocketCapHeadDimensions.md +3 -3
  338. package/dist/docs/reference/{geometry → mechanical}/PRINTABLE_THREAD_FIT_POLICIES.md +3 -3
  339. package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFit.md +3 -7
  340. package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFitPolicy.md +3 -7
  341. package/dist/docs/reference/{geometry → mechanical}/RackPitchDimensions.md +3 -3
  342. package/dist/docs/reference/{geometry → mechanical}/RackPitchSpec.md +3 -3
  343. package/dist/docs/reference/{geometry → mechanical}/SampledThreadHelices.md +4 -8
  344. package/dist/docs/reference/{geometry → mechanical}/SquareThreadProfileSpec.md +4 -13
  345. package/dist/docs/reference/{geometry → mechanical}/ThreadBevelOptions.md +3 -7
  346. package/dist/docs/reference/{geometry → mechanical}/ThreadCircularSegmentsOptions.md +5 -7
  347. package/dist/docs/reference/{geometry → mechanical}/ThreadCompensationOptions.md +4 -5
  348. package/dist/docs/reference/{geometry → mechanical}/ThreadEndStyle.md +3 -11
  349. package/dist/docs/reference/{geometry → mechanical}/ThreadEndTreatmentOptions.md +3 -11
  350. package/dist/docs/reference/{geometry → mechanical}/ThreadHandedness.md +3 -11
  351. package/dist/docs/reference/{geometry → mechanical}/ThreadHelixOptions.md +5 -7
  352. package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInEnvelope.md +3 -11
  353. package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInShape.md +3 -11
  354. package/dist/docs/reference/{geometry → mechanical}/ThreadProfile-type.md +5 -17
  355. package/dist/docs/reference/{geometry → mechanical}/ThreadProfileBaseSpec.md +4 -13
  356. package/dist/docs/reference/{geometry → mechanical}/ThreadProfileSpec.md +3 -11
  357. package/dist/docs/reference/{geometry → mechanical}/ThreadRidgeOptions.md +7 -18
  358. package/dist/docs/reference/{geometry → mechanical}/ThreadRole.md +3 -3
  359. package/dist/docs/reference/{geometry → mechanical}/ThreadSolidOptions.md +8 -15
  360. package/dist/docs/reference/{geometry → mechanical}/ThreadSolidPreflight.md +3 -11
  361. package/dist/docs/reference/{geometry → mechanical}/ThreadedNutOptions.md +7 -14
  362. package/dist/docs/reference/{geometry → mechanical}/ThreadedNutPreflight.md +3 -7
  363. package/dist/docs/reference/{geometry → mechanical}/ThreadedNutShape.md +3 -7
  364. package/dist/docs/reference/{geometry → mechanical}/ThreadedRodOptions.md +6 -13
  365. package/dist/docs/reference/{geometry → mechanical}/TrapezoidalThreadProfileSpec.md +4 -13
  366. package/dist/docs/reference/{geometry → mechanical}/TriangularThreadProfileSpec.md +4 -13
  367. package/dist/docs/reference/{geometry → mechanical}/categories/mechanical.md +8 -2
  368. package/dist/docs/reference/{geometry → mechanical}/compensateThreadDiameters.md +4 -4
  369. package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileAxially.md +12 -6
  370. package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileForFaceting.md +13 -3
  371. package/dist/docs/reference/{geometry → mechanical}/getMetricClearanceHoleDiameter.md +3 -3
  372. package/dist/docs/reference/{geometry → mechanical}/getMetricFastenerStandard.md +3 -3
  373. package/dist/docs/reference/{geometry → mechanical}/measureInternalCylindricalGearPairMotion.md +9 -7
  374. package/dist/docs/reference/{geometry → mechanical}/minimumCylindricalGearToothCountWithoutUndercut.md +5 -3
  375. package/dist/docs/reference/{geometry → mechanical}/preflightInternalThreadCutter.md +8 -6
  376. package/dist/docs/reference/{geometry → mechanical}/preflightThreadedNut.md +9 -7
  377. package/dist/docs/reference/{geometry → mechanical}/preflightThreadedRod.md +8 -6
  378. package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGear.md +5 -3
  379. package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGearPair.md +5 -3
  380. package/dist/docs/reference/{geometry → mechanical}/resolveKnuckleHinge.md +9 -7
  381. package/dist/docs/reference/{geometry → mechanical}/resolvePrintableThreadFitPolicy.md +5 -3
  382. package/dist/docs/reference/{geometry → mechanical}/resolveRackPitch.md +5 -3
  383. package/dist/docs/reference/{geometry → mechanical}/resolveThreadCircularSegments.md +7 -5
  384. package/dist/docs/reference/{geometry → mechanical}/sampleCylindricalGearOutline.md +9 -8
  385. package/dist/docs/reference/{geometry → mechanical}/sampleInternalCylindricalGearSpaceOutline.md +9 -8
  386. package/dist/docs/reference/{geometry → mechanical}/sampleRackToothPath.md +10 -8
  387. package/dist/docs/reference/{geometry → mechanical}/sampleThreadHelices.md +8 -6
  388. package/dist/docs/reference/{geometry → mechanical}/threadProfile.md +7 -3
  389. package/dist/docs/reference/mechanical.md +19 -0
  390. package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +128 -0
  391. package/dist/docs/reference/{geometry → mesh}/HeightfieldMeshLimits.md +5 -13
  392. package/dist/docs/reference/{geometry → mesh}/HeightfieldPreflight.md +3 -7
  393. package/dist/docs/reference/{geometry → mesh}/ImmutableTriangleMesh.md +5 -17
  394. package/dist/docs/reference/mesh/LoftMeshStation.md +32 -0
  395. package/dist/docs/reference/mesh/MeshRenderOptions.md +3 -3
  396. package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationFallbackReason.md +4 -8
  397. package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationOptions.md +4 -9
  398. package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationResult.md +4 -8
  399. package/dist/docs/reference/{geometry → mesh}/PlanarPatchQuality.md +4 -12
  400. package/dist/docs/reference/mesh/RenderMesh.md +19 -19
  401. package/dist/docs/reference/{geometry → mesh}/SolidMeshValidationOptions.md +4 -12
  402. package/dist/docs/reference/{geometry → mesh}/TriangleMesh.md +8 -12
  403. package/dist/docs/reference/{geometry → mesh}/TriangleMeshAnalysis.md +5 -14
  404. package/dist/docs/reference/{geometry → mesh}/TriangleMeshAnalysisOptions.md +4 -9
  405. package/dist/docs/reference/{geometry → mesh}/TriangleMeshInput.md +3 -7
  406. package/dist/docs/reference/{geometry → mesh}/TriangleMeshMeasurements.md +5 -14
  407. package/dist/docs/reference/{geometry → mesh}/TriangleMeshQualityOptions.md +4 -9
  408. package/dist/docs/reference/{geometry → mesh}/TriangleMeshQualityReport.md +3 -7
  409. package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignature.md +4 -9
  410. package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignatureOptions.md +3 -7
  411. package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignatureTolerances.md +3 -7
  412. package/dist/docs/reference/{geometry → mesh}/TriangleMeshTopologyAnalysis.md +5 -14
  413. package/dist/docs/reference/{geometry → mesh}/TriangleMeshValidationOptions.md +4 -9
  414. package/dist/docs/reference/mesh/analyze.md +26 -18
  415. package/dist/docs/reference/mesh/analyzeQuality.md +12 -12
  416. package/dist/docs/reference/mesh/bounds.md +5 -6
  417. package/dist/docs/reference/mesh/categories/operations.md +37 -4
  418. package/dist/docs/reference/mesh/centroid.md +5 -6
  419. package/dist/docs/reference/mesh/extrude.md +21 -20
  420. package/dist/docs/reference/mesh/heightfield.md +8 -8
  421. package/dist/docs/reference/mesh/immutable.md +7 -5
  422. package/dist/docs/reference/mesh/join.md +7 -7
  423. package/dist/docs/reference/mesh/loft.md +19 -18
  424. package/dist/docs/reference/mesh/optimizePlanarPatches.md +21 -21
  425. package/dist/docs/reference/mesh/preflightHeightfield.md +8 -8
  426. package/dist/docs/reference/mesh/preflightThreadSolid.md +22 -25
  427. package/dist/docs/reference/mesh/render.md +7 -5
  428. package/dist/docs/reference/mesh/reverse.md +7 -7
  429. package/dist/docs/reference/mesh/revolve.md +12 -14
  430. package/dist/docs/reference/mesh/signature.md +12 -12
  431. package/dist/docs/reference/mesh/sweep.md +96 -25
  432. package/dist/docs/reference/mesh/threadRidge.md +19 -18
  433. package/dist/docs/reference/mesh/threadSolid.md +23 -22
  434. package/dist/docs/reference/mesh/transform.md +8 -9
  435. package/dist/docs/reference/mesh/validate.md +11 -11
  436. package/dist/docs/reference/mesh/validateSolid.md +10 -10
  437. package/dist/docs/reference/mesh.md +8 -2
  438. package/dist/docs/reference/model/BoxEdge.md +23 -0
  439. package/dist/docs/reference/model/BoxEdgeSelection.md +27 -0
  440. package/dist/docs/reference/model/BoxEdgeTreatments.md +27 -0
  441. package/dist/docs/reference/{geometry → model}/BoxOptions.md +12 -12
  442. package/dist/docs/reference/model/CircleOptions.md +4 -5
  443. package/dist/docs/reference/model/CornerCutterOptions.md +93 -0
  444. package/dist/docs/reference/model/CornerCutterTreatment.md +53 -0
  445. package/dist/docs/reference/model/{HoleCutterOverrun.md → CutterOverrun.md} +8 -7
  446. package/dist/docs/reference/model/CylinderOptions.md +64 -0
  447. package/dist/docs/reference/model/DiagnosticOptions.md +2 -2
  448. package/dist/docs/reference/model/EdgeCutterOptions.md +129 -0
  449. package/dist/docs/reference/model/EllipseOptions.md +4 -5
  450. package/dist/docs/reference/model/EndTreatments.md +43 -0
  451. package/dist/docs/reference/model/ExtrudeOptions.md +153 -0
  452. package/dist/docs/reference/model/GenerateCallback.md +2 -2
  453. package/dist/docs/reference/model/GenerateContext.md +27 -3
  454. package/dist/docs/reference/model/GenerationDiagnostic.md +2 -2
  455. package/dist/docs/reference/model/GenerationError.md +2 -2
  456. package/dist/docs/reference/{geometry → model}/HeightfieldOptions.md +5 -23
  457. package/dist/docs/reference/model/HoleCutterOpening.md +27 -0
  458. package/dist/docs/reference/model/HoleCutterOptions.md +9 -22
  459. package/dist/docs/reference/model/HoleCutterRecess.md +5 -4
  460. package/dist/docs/reference/model/HullOptions.md +2 -3
  461. package/dist/docs/reference/model/ImmutableValue.md +2 -2
  462. package/dist/docs/reference/model/ImplicitOptions.md +3 -9
  463. package/dist/docs/reference/model/JoinOptions.md +2 -5
  464. package/dist/docs/reference/model/JoinTransition.md +2 -2
  465. package/dist/docs/reference/model/KnuckleHinge-type.md +2 -3
  466. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +2 -2
  467. package/dist/docs/reference/model/KnuckleHingeOptions.md +3 -5
  468. package/dist/docs/reference/model/KnuckleHingeWeb.md +2 -2
  469. package/dist/docs/reference/{geometry → model}/LoftCorrespondence.md +8 -11
  470. package/dist/docs/reference/{geometry → model}/LoftOptions.md +11 -16
  471. package/dist/docs/reference/model/LoftStation.md +4 -5
  472. package/dist/docs/reference/model/Memo.md +2 -2
  473. package/dist/docs/reference/model/ModelProgram.md +2 -2
  474. package/dist/docs/reference/model/PartDeclaration.md +4 -5
  475. package/dist/docs/reference/model/PartGeometry.md +3 -5
  476. package/dist/docs/reference/model/PartOptions.md +4 -5
  477. package/dist/docs/reference/model/PatternSource.md +4 -4
  478. package/dist/docs/reference/model/PlaneOptions.md +3 -7
  479. package/dist/docs/reference/model/PolygonOptions.md +2 -7
  480. package/dist/docs/reference/model/PrimitiveAttachment.md +50 -0
  481. package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +111 -0
  482. package/dist/docs/reference/model/RectangleOptions.md +21 -26
  483. package/dist/docs/reference/model/RegularPolygonOptions.md +4 -37
  484. package/dist/docs/reference/{geometry → model}/RevolveOptions.md +15 -24
  485. package/dist/docs/reference/model/Section.md +115 -53
  486. package/dist/docs/reference/model/SectionHullOptions.md +2 -3
  487. package/dist/docs/reference/model/SectionInspection.md +2 -6
  488. package/dist/docs/reference/model/SectionOffsetJoin.md +2 -2
  489. package/dist/docs/reference/model/SectionOffsetOptions.md +2 -3
  490. package/dist/docs/reference/model/Solid.md +24 -12
  491. package/dist/docs/reference/model/SolidInspection.md +2 -6
  492. package/dist/docs/reference/model/SolidSegmentHit.md +2 -6
  493. package/dist/docs/reference/model/SphereOptions.md +27 -0
  494. package/dist/docs/reference/model/StarOptions.md +21 -23
  495. package/dist/docs/reference/model/SvgOrigin.md +2 -2
  496. package/dist/docs/reference/model/SvgPathSectionOptions.md +3 -5
  497. package/dist/docs/reference/model/SvgSectionOptions.md +3 -6
  498. package/dist/docs/reference/model/SweepOptions.md +109 -0
  499. package/dist/docs/reference/model/SweepOrientation.md +119 -0
  500. package/dist/docs/reference/model/SweepTransformOptions.md +105 -0
  501. package/dist/docs/reference/model/TextSectionOptions.md +2 -7
  502. package/dist/docs/reference/{geometry → model}/TorusOptions.md +11 -10
  503. package/dist/docs/reference/model/TubeOptions.md +84 -0
  504. package/dist/docs/reference/model/box.md +11 -10
  505. package/dist/docs/reference/model/categories/boolean-operations.md +9 -3
  506. package/dist/docs/reference/model/categories/bounded-surfaces.md +13 -1
  507. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +26 -7
  508. package/dist/docs/reference/model/categories/generation.md +11 -3
  509. package/dist/docs/reference/model/categories/hinges.md +7 -1
  510. package/dist/docs/reference/model/categories/mesh-inspection.md +7 -1
  511. package/dist/docs/reference/model/categories/primitives.md +34 -6
  512. package/dist/docs/reference/model/categories/sections.md +8 -2
  513. package/dist/docs/reference/model/categories/threads.md +8 -5
  514. package/dist/docs/reference/model/categories/transforms-placement.md +15 -10
  515. package/dist/docs/reference/model/circle.md +7 -3
  516. package/dist/docs/reference/model/cornerCutter.md +88 -0
  517. package/dist/docs/reference/model/cylinder.md +6 -5
  518. package/dist/docs/reference/model/edgeCutter.md +91 -0
  519. package/dist/docs/reference/model/ellipse.md +7 -3
  520. package/dist/docs/reference/model/extrude.md +29 -23
  521. package/dist/docs/reference/model/generate.md +4 -2
  522. package/dist/docs/reference/model/gridPattern.md +11 -4
  523. package/dist/docs/reference/model/heightfield.md +5 -5
  524. package/dist/docs/reference/model/holeCutter.md +26 -12
  525. package/dist/docs/reference/model/hull.md +2 -2
  526. package/dist/docs/reference/model/implicit.md +3 -3
  527. package/dist/docs/reference/model/internalThreadCutter.md +32 -21
  528. package/dist/docs/reference/model/intersect.md +7 -3
  529. package/dist/docs/reference/model/join.md +6 -2
  530. package/dist/docs/reference/model/knuckleHinge.md +2 -3
  531. package/dist/docs/reference/model/linearPattern.md +11 -4
  532. package/dist/docs/reference/model/loft.md +28 -24
  533. package/dist/docs/reference/model/minkowskiSum.md +3 -3
  534. package/dist/docs/reference/model/pathPattern.md +17 -8
  535. package/dist/docs/reference/model/polygon.md +8 -3
  536. package/dist/docs/reference/model/radialPattern.md +11 -4
  537. package/dist/docs/reference/model/rectangle.md +11 -7
  538. package/dist/docs/reference/model/regularPolygon.md +7 -3
  539. package/dist/docs/reference/model/revolve.md +18 -12
  540. package/dist/docs/reference/model/solidFromMesh.md +10 -6
  541. package/dist/docs/reference/model/sphere.md +7 -6
  542. package/dist/docs/reference/model/star.md +11 -7
  543. package/dist/docs/reference/model/stroke.md +12 -8
  544. package/dist/docs/reference/model/svgPathSection.md +10 -4
  545. package/dist/docs/reference/model/svgSection.md +10 -4
  546. package/dist/docs/reference/model/sweep.md +102 -25
  547. package/dist/docs/reference/model/textSection.md +7 -3
  548. package/dist/docs/reference/model/threadRidge.md +16 -17
  549. package/dist/docs/reference/model/threadedNut.md +25 -22
  550. package/dist/docs/reference/model/threadedRod.md +21 -18
  551. package/dist/docs/reference/model/torus.md +13 -12
  552. package/dist/docs/reference/model/tube.md +6 -5
  553. package/dist/docs/reference/model/union.md +7 -3
  554. package/dist/docs/reference/model.md +10 -5
  555. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +2 -2
  556. package/dist/docs/reference/text/VectorFont.md +38 -34
  557. package/dist/docs/reference/text/VectorFontOptions.md +2 -2
  558. package/dist/docs/reference/{geometry → text}/VectorTextArcBaseline.md +2 -11
  559. package/dist/docs/reference/{geometry → text}/VectorTextLayoutOptions.md +3 -11
  560. package/dist/docs/reference/{geometry → text}/VectorTextOptions.md +2 -10
  561. package/dist/docs/reference/text/categories/font-preparation.md +10 -1
  562. package/dist/docs/reference/text/prepareVectorFont.md +4 -2
  563. package/dist/docs/reference/text.md +7 -1
  564. package/dist/engine/execution.js +5 -3
  565. package/dist/engine/finalization.js +5 -5
  566. package/dist/engine/index.js +9 -4
  567. package/dist/engine/native/adapter.js +1 -1
  568. package/dist/engine/native/construction-mesh.js +15 -5
  569. package/dist/engine/native/context.js +10 -7
  570. package/dist/engine/native/index.js +1 -1
  571. package/dist/engine/native/material-components.js +2 -2
  572. package/dist/engine/native/mesh-observation.js +1 -1
  573. package/dist/engine/native/regions.js +44 -24
  574. package/dist/engine/native/scoped-primitives.js +3 -3
  575. package/dist/engine/native/scoped-threads.js +1 -13
  576. package/dist/engine/native/threads.js +2 -2
  577. package/dist/engine/native/transforms.js +2 -2
  578. package/dist/engine/operations/construction.js +77 -27
  579. package/dist/engine/operations/context.js +13 -6
  580. package/dist/engine/operations/cutters.js +112 -0
  581. package/dist/engine/operations/environment.js +2 -2
  582. package/dist/engine/operations/extrusion-finishing.js +42 -16
  583. package/dist/engine/operations/hole-cutter.js +125 -114
  584. package/dist/engine/operations/join-collar-profile.js +19 -19
  585. package/dist/engine/operations/join.js +86 -73
  586. package/dist/engine/operations/knuckle-hinge.js +25 -20
  587. package/dist/engine/operations/loft.js +9 -16
  588. package/dist/engine/operations/mechanical.js +4 -15
  589. package/dist/engine/operations/primitives/anchors.js +23 -19
  590. package/dist/engine/operations/primitives/construction.js +38 -12
  591. package/dist/engine/operations/primitives/correspondence.js +2 -2
  592. package/dist/engine/operations/primitives/profile-mesh.js +41 -80
  593. package/dist/engine/operations/primitives/profiles.js +5 -5
  594. package/dist/engine/operations/sections.js +8 -8
  595. package/dist/engine/operations/transforms.js +19 -39
  596. package/dist/engine/placement.js +3 -3
  597. package/dist/engine/recipe-realization.js +86 -30
  598. package/dist/engine/session/declarations.js +98 -0
  599. package/dist/engine/session/dependencies.js +81 -28
  600. package/dist/engine/session/graph.js +39 -137
  601. package/dist/engine/session/parameters.js +78 -0
  602. package/dist/engine/session/session.js +2 -2
  603. package/dist/engine/session/snapshot-cache.js +2 -2
  604. package/dist/engine/shape-anchors.js +13 -6
  605. package/dist/export/3mf.js +9 -2
  606. package/dist/export/capture.js +10 -6
  607. package/dist/export/glb.js +7 -2
  608. package/dist/export/stl.js +21 -6
  609. package/dist/geometry/{bounds.js → bounds/operations.js} +3 -1
  610. package/dist/geometry/{bounds-value.js → bounds/value.js} +20 -16
  611. package/dist/geometry/curves/evaluation.js +5 -6
  612. package/dist/geometry/curves/sampling.js +30 -6
  613. package/dist/geometry/{extrusion.js → extrusion/controls.js} +58 -35
  614. package/dist/geometry/extrusion/mesh.js +92 -0
  615. package/dist/geometry/extrusion/stations.js +35 -0
  616. package/dist/geometry/extrusion/twisted-chamfer.js +265 -0
  617. package/dist/geometry/immutable-buffer.js +7 -1
  618. package/dist/geometry/index.js +24 -32
  619. package/dist/geometry/{model-limits.js → limits.js} +1 -1
  620. package/dist/geometry/loft/{loft-correspondence.js → correspondence.js} +31 -20
  621. package/dist/geometry/loft/{loft-geometry.js → geometry.js} +15 -17
  622. package/dist/geometry/loft/mesh.js +53 -0
  623. package/dist/geometry/loft/{loft-options.js → options.js} +13 -11
  624. package/dist/geometry/loft/{loft-simple-mesh.js → simple-mesh.js} +26 -17
  625. package/dist/geometry/math/interpolation.js +9 -0
  626. package/dist/geometry/math/vector-value.js +12 -3
  627. package/dist/geometry/math/vector2.js +18 -5
  628. package/dist/geometry/math/vector3.js +28 -5
  629. package/dist/geometry/math-api.js +4 -0
  630. package/dist/geometry/mechanical/gear-motion.js +7 -5
  631. package/dist/geometry/mechanical/gears.js +21 -4
  632. package/dist/geometry/mechanical/knuckle-hinge.js +7 -5
  633. package/dist/geometry/mechanical/threads/fit.js +8 -2
  634. package/dist/geometry/mechanical/threads/helices.js +4 -2
  635. package/dist/geometry/mechanical/threads/mesh-plan.js +4 -2
  636. package/dist/geometry/mechanical/threads/mesh.js +12 -9
  637. package/dist/geometry/mechanical/threads/profiles.js +18 -4
  638. package/dist/geometry/mechanical/threads/solids.js +11 -2
  639. package/dist/geometry/mechanical-api.js +10 -0
  640. package/dist/geometry/mesh/{mesh-centroid.js → centroid.js} +2 -1
  641. package/dist/geometry/{heightfield.js → mesh/heightfield.js} +9 -5
  642. package/dist/geometry/{join-geometry.js → mesh/join-layers.js} +53 -59
  643. package/dist/geometry/mesh/{mesh.js → operations.js} +11 -18
  644. package/dist/geometry/mesh/{mesh-planar.js → planar.js} +8 -18
  645. package/dist/geometry/mesh/{mesh-quality.js → quality.js} +10 -42
  646. package/dist/geometry/mesh/{mesh-render.js → render-buffers.js} +22 -7
  647. package/dist/geometry/mesh/{mesh-signature.js → signature.js} +1 -1
  648. package/dist/geometry/mesh/{mesh-solid-intersections.js → solid-intersections.js} +2 -0
  649. package/dist/geometry/mesh/{mesh-solid.js → solid.js} +4 -4
  650. package/dist/geometry/mesh/triangle-quality.js +42 -0
  651. package/dist/geometry/mesh/winding.js +11 -0
  652. package/dist/geometry/{numeric.js → mesh/write-vertex.js} +1 -1
  653. package/dist/geometry/mesh-api.js +12 -11
  654. package/dist/geometry/paths/distribution.js +43 -0
  655. package/dist/geometry/paths/editing.js +76 -0
  656. package/dist/geometry/paths/frames.js +16 -11
  657. package/dist/geometry/paths/helix.js +1 -1
  658. package/dist/geometry/paths/resampling.js +46 -61
  659. package/dist/geometry/paths/{planar.js → rounding.js} +8 -67
  660. package/dist/geometry/paths/spline.js +116 -0
  661. package/dist/geometry/paths/traversal.js +107 -0
  662. package/dist/geometry/paths/{path-value.js → value.js} +97 -18
  663. package/dist/geometry/patterns/placements.js +20 -29
  664. package/dist/geometry/{patterns.js → patterns/transforms.js} +11 -7
  665. package/dist/geometry/primitives/cutters.js +70 -0
  666. package/dist/geometry/{cylinder.js → primitives/cylinder.js} +4 -4
  667. package/dist/geometry/{edge-finishing.js → primitives/edges.js} +5 -5
  668. package/dist/geometry/{primitive-resolvers.js → primitives/resolvers.js} +9 -9
  669. package/dist/geometry/primitives/sampling.js +41 -0
  670. package/dist/geometry/profiles/contour.js +19 -7
  671. package/dist/geometry/profiles/{match-profiles.js → matching.js} +9 -6
  672. package/dist/geometry/profiles/primitives/circle.js +1 -1
  673. package/dist/geometry/profiles/primitives/ellipse.js +2 -2
  674. package/dist/geometry/profiles/primitives/rectangle.js +8 -8
  675. package/dist/geometry/profiles/primitives/star.js +1 -1
  676. package/dist/geometry/profiles/side-profile.js +8 -5
  677. package/dist/geometry/profiles/validation.js +1 -1
  678. package/dist/geometry/{polygon-clipping.js → regions/clipping.js} +1 -1
  679. package/dist/geometry/{convex-offset.js → regions/convex-offset.js} +1 -1
  680. package/dist/geometry/{region-offset.js → regions/offset.js} +7 -5
  681. package/dist/geometry/{regions.js → regions/operations.js} +59 -22
  682. package/dist/geometry/{stroke-path.js → regions/stroke.js} +46 -20
  683. package/dist/geometry/{loft/loft-triangulation.js → regions/triangulation.js} +35 -2
  684. package/dist/geometry/revolve/{revolve-mesh.js → mesh.js} +9 -10
  685. package/dist/geometry/{circular-sampling.js → sampling/circular.js} +3 -3
  686. package/dist/geometry/{sampling-limits.js → sampling/limits.js} +6 -2
  687. package/dist/geometry/{resolution.js → sampling/resolution.js} +15 -14
  688. package/dist/geometry/svg/fill.js +4 -3
  689. package/dist/geometry/svg/import.js +47 -64
  690. package/dist/geometry/svg/path.js +3 -3
  691. package/dist/geometry/sweep/closed.js +55 -0
  692. package/dist/geometry/sweep/mesh.js +30 -0
  693. package/dist/geometry/{sweeps/sweep-open.js → sweep/open.js} +9 -24
  694. package/dist/geometry/{sweeps → sweep}/orientation.js +14 -11
  695. package/dist/geometry/sweep/seam.js +30 -0
  696. package/dist/geometry/{sweeps → sweep}/stations.js +75 -10
  697. package/dist/geometry/sweep/transforms.js +30 -0
  698. package/dist/geometry/{sweeps → sweep}/validation.js +4 -4
  699. package/dist/geometry/{text-contours.js → text/contours.js} +3 -3
  700. package/dist/geometry/{text-fitting.js → text/fitting.js} +4 -3
  701. package/dist/geometry/text/layout.js +1 -0
  702. package/dist/geometry/{transform3.js → transforms/affine3.js} +31 -46
  703. package/dist/geometry/{anchors.js → transforms/anchors.js} +43 -24
  704. package/dist/geometry/{transform-geometry.js → transforms/apply.js} +8 -5
  705. package/dist/geometry/{transform2.js → transforms/dimensions.js} +23 -19
  706. package/dist/geometry/transforms/frame.js +64 -0
  707. package/dist/geometry/{transform-matrix.js → transforms/matrix-input.js} +8 -1
  708. package/dist/geometry/{transform-value.js → transforms/value.js} +29 -11
  709. package/dist/index.js +3 -9
  710. package/dist/model/cutters.js +1 -0
  711. package/dist/model/execution-binding.js +3 -3
  712. package/dist/model/generation.js +2 -0
  713. package/dist/model/immutable-generation-data.js +2 -0
  714. package/dist/model/operations.js +130 -94
  715. package/dist/model/recipe-declaration.js +5 -7
  716. package/dist/text/index.js +3 -0
  717. package/dist/text/vector-text-layout.js +1 -0
  718. package/package.json +15 -17
  719. package/dist/api/export-3mf.d.ts +0 -2
  720. package/dist/api/export-glb.d.ts +0 -2
  721. package/dist/api/export-stl.d.ts +0 -2
  722. package/dist/docs/reference/geometry/BoxEdge.md +0 -17
  723. package/dist/docs/reference/geometry/BoxEdgeSelection.md +0 -24
  724. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +0 -25
  725. package/dist/docs/reference/geometry/CylinderOptions.md +0 -63
  726. package/dist/docs/reference/geometry/EndTreatments.md +0 -44
  727. package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +0 -144
  728. package/dist/docs/reference/geometry/ExtrudeOptions.md +0 -156
  729. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +0 -25
  730. package/dist/docs/reference/geometry/LoftMeshStation.md +0 -41
  731. package/dist/docs/reference/geometry/PrimitiveAttachment.md +0 -39
  732. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +0 -114
  733. package/dist/docs/reference/geometry/SphereOptions.md +0 -25
  734. package/dist/docs/reference/geometry/SweepOptions.md +0 -127
  735. package/dist/docs/reference/geometry/SweepOrientation.md +0 -127
  736. package/dist/docs/reference/geometry/TubeOptions.md +0 -72
  737. package/dist/docs/reference/geometry/add2.md +0 -43
  738. package/dist/docs/reference/geometry/add3.md +0 -49
  739. package/dist/docs/reference/geometry/applyTransformDirection3.md +0 -52
  740. package/dist/docs/reference/geometry/applyTransformPoint3.md +0 -50
  741. package/dist/docs/reference/geometry/categories/meshes.md +0 -68
  742. package/dist/docs/reference/geometry/composeTransform3.md +0 -51
  743. package/dist/docs/reference/geometry/cross2.md +0 -43
  744. package/dist/docs/reference/geometry/cross3.md +0 -49
  745. package/dist/docs/reference/geometry/distance2.md +0 -43
  746. package/dist/docs/reference/geometry/distance3.md +0 -43
  747. package/dist/docs/reference/geometry/dot2.md +0 -43
  748. package/dist/docs/reference/geometry/dot3.md +0 -49
  749. package/dist/docs/reference/geometry/eulerTransform3.md +0 -49
  750. package/dist/docs/reference/geometry/frameTransform3.md +0 -55
  751. package/dist/docs/reference/geometry/inverseTransform3.md +0 -41
  752. package/dist/docs/reference/geometry/length2.md +0 -37
  753. package/dist/docs/reference/geometry/length3.md +0 -37
  754. package/dist/docs/reference/geometry/lerp2.md +0 -49
  755. package/dist/docs/reference/geometry/lerp3.md +0 -49
  756. package/dist/docs/reference/geometry/normalize2.md +0 -46
  757. package/dist/docs/reference/geometry/normalize3.md +0 -46
  758. package/dist/docs/reference/geometry/projectOntoPlane3.md +0 -43
  759. package/dist/docs/reference/geometry/rotate2.md +0 -43
  760. package/dist/docs/reference/geometry/rotationTransform3.md +0 -60
  761. package/dist/docs/reference/geometry/scale2.md +0 -43
  762. package/dist/docs/reference/geometry/scale3.md +0 -49
  763. package/dist/docs/reference/geometry/scaleTransform3.md +0 -45
  764. package/dist/docs/reference/geometry/subtract2.md +0 -43
  765. package/dist/docs/reference/geometry/subtract3.md +0 -49
  766. package/dist/docs/reference/geometry/transformDeterminant3.md +0 -43
  767. package/dist/docs/reference/geometry/translationTransform3.md +0 -42
  768. package/dist/docs/reference/geometry/validateRigidTransform3.md +0 -41
  769. package/dist/docs/reference/geometry/validateTransform3.md +0 -54
  770. package/dist/docs/reference/model/Profile.md +0 -30
  771. package/dist/docs/reference/model/categories/explicit-profiles.md +0 -21
  772. package/dist/docs/reference/model/matchProfiles.md +0 -48
  773. package/dist/docs/reference/model/preflightInternalThreadCutter.md +0 -93
  774. package/dist/docs/reference/model/preflightThreadedNut.md +0 -109
  775. package/dist/docs/reference/model/preflightThreadedRod.md +0 -93
  776. package/dist/engine/operations/patterns.js +0 -47
  777. package/dist/geometry/loft/loft.js +0 -105
  778. package/dist/geometry/mechanical/index.js +0 -14
  779. package/dist/geometry/primitive-resolution.js +0 -20
  780. package/dist/geometry/svg/index.js +0 -1
  781. package/dist/geometry/sweeps/options.js +0 -29
  782. package/dist/geometry/sweeps/sweep-closed.js +0 -96
  783. package/dist/geometry/sweeps/sweep-mesh.js +0 -32
  784. /package/dist/geometry/mechanical/{standards.js → fastener-standards.js} +0 -0
  785. /package/dist/geometry/mesh/{mesh-edge-table.js → edge-table.js} +0 -0
  786. /package/dist/geometry/mesh/{mesh-types.js → types.js} +0 -0
  787. /package/dist/geometry/mesh/{mesh-view-cache.js → view-cache.js} +0 -0
  788. /package/dist/geometry/{primitive-options.js → primitives/options.js} +0 -0
  789. /package/dist/geometry/{text-layout.js → sweep/options.js} +0 -0
@@ -2,8 +2,16 @@
2
2
 
3
3
  Choose primitives, extrude filled outlines, revolve radial profiles, and finish their rims.
4
4
 
5
- Start with a primitive when it already describes the material. For a plate, gasket, cup, or knob,
6
- solve the filled cross section first, then add depth or revolve it around an axis.
5
+ Start with a primitive when it already describes the material.
6
+
7
+
8
+
9
+ **Solve the cross section first**
10
+
11
+ For a plate or gasket, make the filled outline and add depth. For a cup or knob, describe its
12
+ radial section and revolve it. Keep the simplest representation until you need the next dimension.
13
+
14
+
7
15
 
8
16
  Run the examples in a [Studio code Project](https://metamesh.studio/docs/develop/code-projects), where Studio supplies
9
17
  typed controls and prepared services. For a local model, follow the
@@ -18,7 +26,8 @@ separate named part so you can inspect it in the interactive preview.
18
26
 
19
27
 
20
28
  ```ts
21
- import { ellipse, regularPolygon, sphere, star, torus, transform3, tube } from "@metamesh/modeling";
29
+ import { ellipse, regularPolygon, sphere, star, torus, tube } from "@metamesh/modeling";
30
+ import { transform3 } from "@metamesh/modeling/geometry";
22
31
  import { generate } from "@metamesh/project";
23
32
 
24
33
  export default generate(({ part }) => {
@@ -90,7 +99,7 @@ export default generate(({ part }) => {
90
99
  // Positive offset expands material: the outer edge grows and the hole shrinks.
91
100
  const rimmedPlate = plate.subtract(hole).offset(1.2);
92
101
  // Keep the plate centered about Z = 0 for later symmetric placement.
93
- return [part("model", rimmedPlate.extrude({ height: 5, center: true }))];
102
+ return part("model", rimmedPlate.extrude({ height: 5, center: true }));
94
103
  });
95
104
  ```
96
105
 
@@ -104,8 +113,15 @@ must have the same dimension. Use collection `union(shapes)` or `intersect(shape
104
113
  `section.offset(distance)` offsets the filled material. `section.extrude({ height })` preserves
105
114
  holes and places the bottom at zero unless `center: true` is requested.
106
115
 
107
- Ordinary extrusion also accepts `twist` and `scaleTop`. Keep those operations separate from
108
- enabled end treatments, which require a straight extrusion.
116
+ `twist` rotates the top around +Z in degrees. `scale` sets its final scale factor: `0.5` finishes at half
117
+ size, while `[0.5, 1]` halves profile-local X and preserves Y. Scale factors interpolate from one
118
+ with height and apply before twist. Uniform `scale: 0` closes a single simple outline at an apex; holes
119
+ and disconnected islands cannot share that apex. Negative scales and a pair with only one zero
120
+ component reject.
121
+
122
+ Use physical `resolution` for ordinary quality control. Explicit `slices: 20` selects 20 longitudinal
123
+ intervals and 21 layers before end treatments. Chamfered ends can follow a twist; enabled end
124
+ treatments require unit `scale` and insert additional rings where needed.
109
125
 
110
126
  Positive offset grows material on every boundary: this example grows the outside by `1.2 mm` and
111
127
  reduces the hole radius from `4 mm` to `2.8 mm`. If the final bore must remain `8 mm` in diameter,
@@ -138,7 +154,7 @@ export default generate(({ part }) => {
138
154
  [0, 4],
139
155
  ]);
140
156
  // A full revolution creates the floor, tapered wall, and open top together.
141
- return [part("model", wall.revolve())];
157
+ return part("model", wall.revolve());
142
158
  });
143
159
  ```
144
160
 
@@ -183,7 +199,7 @@ export default generate(({ part }) => {
183
199
  spacing: [13, 12],
184
200
  });
185
201
  // Mirror the completed housing across the plane with normal +X.
186
- return [part("model", housing.subtract(perforations).mirror([1, 0, 0]))];
202
+ return part("model", housing.subtract(perforations).mirror([1, 0, 0]));
187
203
  });
188
204
  ```
189
205
 
@@ -202,7 +218,87 @@ feature can remain in the options object when switched off.
202
218
  The bores use `diameter: [8, 6]` and `13 × 12 mm` spacing to leave material between them. Check
203
219
  the widest cutter diameter and the outer wall when changing either value. In this example the
204
220
  tool's top chamfer lies above the housing; it shapes the cutter end, not the finished hole's rim.
205
- Use an explicitly shaped cutting profile if the finished mouth needs a countersink.
221
+ Use `holeCutter.openings` when the finished mouth needs a roundover, chamfer, or screw seat.
222
+
223
+ ## Shape openings and local edges
224
+
225
+
226
+
227
+ ```ts
228
+ import { box, cornerCutter, edgeCutter, holeCutter, tube } from "@metamesh/modeling";
229
+ import { transform3 } from "@metamesh/modeling/geometry";
230
+ import { generate } from "@metamesh/project";
231
+
232
+ const treatment = { kind: "round", radius: 2 } as const;
233
+ const edge = (length: number) => edgeCutter({ length, treatment });
234
+
235
+ // Three matching edges and their corner share the positive XYZ material octant.
236
+ const plate = box({ size: [40, 24, 8], center: false }).subtract([
237
+ edge(8),
238
+ edge(40).rotate([0, -90, 0]).translate([40, 0, 0]),
239
+ edge(24).rotate([90, 0, 0]).translate([0, 24, 0]),
240
+ cornerCutter({ treatment }),
241
+ holeCutter({
242
+ diameter: 10,
243
+ height: 8,
244
+ sizing: "face",
245
+ openings: {
246
+ top: { kind: "round", radius: 1 },
247
+ bottom: { kind: "smooth", distance: 0.5 },
248
+ },
249
+ // Numerical overlap is independent of the nominal bore and mouth dimensions.
250
+ overrun: { top: 0.05, bottom: 0.05 },
251
+ }).translate([24, 12, 0]),
252
+ ]);
253
+
254
+ const sleeve = tube({
255
+ outerDiameter: 20,
256
+ innerDiameter: 12,
257
+ height: 8,
258
+ center: false,
259
+ ends: {
260
+ top: { kind: "round", radius: 0.75 },
261
+ bottom: { kind: "chamfer", distance: 0.4 },
262
+ },
263
+ });
264
+
265
+ export default generate(({ part }) => [
266
+ part("plate", { geometry: plate, transform: transform3().translate([-20, -12, 0]) }),
267
+ part("sleeve", { geometry: sleeve, transform: transform3().translate([32, 0, 0]) }),
268
+ ]);
269
+ ```
270
+
271
+ Opening treatments widen the mouth while preserving the bore. Explicit edge and corner cutters remove local material; tube ends finish both rims.
272
+
273
+
274
+
275
+ `holeCutter` accepts a circular `diameter` or an existing Section `profile`. Its nominal interval
276
+ is Z=0 to `height`. Set `openings.top` and `openings.bottom` independently with the shared
277
+ `round`, `chamfer`, `smooth`, or sampled `profile` treatments. Circular openings also accept
278
+ `counterbore` and `countersink`, using explicit seat dimensions. Each end accepts one treatment.
279
+ For blind pockets, leave the floor end plain and extend only the open end.
280
+
281
+ The first treatment setback widens the mouth; the second reaches into the hole along its axis.
282
+ Both opening depths must leave a positive untreated throat. Circular roundovers use a radius
283
+ in the radial/axial section. Treated Section pockets require one strictly convex contour without
284
+ holes; plain and zero-treated pockets accept arbitrary Section topology.
285
+
286
+ `overrun` extends the terminal cross section beyond the nominal end without changing the
287
+ opening dimensions. Both extensions default to zero. Set overrun independently from the
288
+ clearance already included in the bore or pocket dimensions.
289
+
290
+ `edgeCutter` places the sharp reference edge at XY=0 and runs along +Z from zero to `length`.
291
+ The material wedge runs counterclockwise from +X through `angle` degrees (default 90).
292
+ Use existing transforms, anchors, and patterns to position the cutter, then subtract it.
293
+ `cornerCutter` complements matching cuts where three perpendicular material faces meet in the
294
+ positive XYZ octant. It accepts a spherical `round` or equal-setback `chamfer`; arbitrary edge
295
+ profiles do not define a unique three-face corner surface. Numerical `excess` extends outside
296
+ the reference faces and defaults to 0.05 mm, independently of the finished treatment.
297
+ Perpendicular round edges and spherical corners use a common native sampling lattice. Matching
298
+ treatments meet on the same vertices; full-circle facet requests round up to a multiple of four.
299
+
300
+ These cutters use explicit construction datums. They do not select edges in an existing mesh or
301
+ infer the mating surface. Keep each complete treatment inside the intended local material.
206
302
 
207
303
  ## Finish a profile with a hole
208
304
 
@@ -240,13 +336,65 @@ Finishing options share `round` (radius), `chamfer` (setbacks), `smooth` (cubic
240
336
  `profile` points:
241
337
 
242
338
  - Boxes select disjoint named edges or groups; rectangles select individual corners.
243
- - Cylinder/frustum and straight extrusion rims use independent `ends.bottom` and `ends.top`.
339
+ - Cylinder/frustum, tube, and straight extrusion rims use independent `ends.bottom` and `ends.top`.
340
+ Tube end treatments finish both the outer rim and bore mouth and must retain a positive wall.
244
341
  - Straight extrusions admit concave outlines, holes, and disconnected material components when
245
342
  every source boundary survives the treatment without contact, collapse, or topology changes.
246
343
  One treatment applies to every material boundary at that end; inward material trimming expands
247
- hole mouths. Enabled treatments exclude twist, top scaling, and exact divisions.
344
+ hole mouths. Enabled treatments require unit `scale`. Explicit `slices` controls the base
345
+ longitudinal grid; treatment and refinement rings may increase the final layer count.
248
346
  - Zero radius, zero chamfer/smooth distance, or an all-zero distance pair leaves a feature untreated.
249
347
  Other setback pairs require two positive values; negative and nonfinite amounts reject.
250
348
  - Disabled extrusion end treatments retain ordinary support, including holes and twist.
251
349
 
252
350
  For a local connection between completed solids, use [solid joins](solid-joins.md).
351
+
352
+ ## Chamfer a twisted extrusion
353
+
354
+
355
+
356
+ ```ts
357
+ import { rectangle } from "@metamesh/modeling";
358
+ import { transform3 } from "@metamesh/modeling/geometry";
359
+ import { generate } from "@metamesh/project";
360
+
361
+ const core = rectangle({ size: 20 });
362
+ const sleeve = rectangle({ size: 27 }).subtract(rectangle({ size: 20.7 }));
363
+ const chamfer = { kind: "chamfer", distance: 0.7 } as const;
364
+ const options = {
365
+ height: 70,
366
+ twist: 180,
367
+ slices: 20,
368
+ ends: { bottom: chamfer, top: chamfer },
369
+ resolution: { maxChordError: 0.025 },
370
+ };
371
+
372
+ export default generate(({ part }) => [
373
+ part("core", { geometry: core.extrude(options), color: "#E9B45D" }),
374
+ part("sleeve", {
375
+ geometry: sleeve.extrude(options),
376
+ color: "#2D8490",
377
+ transform: transform3().translate([40, 0, 0]),
378
+ }),
379
+ ]);
380
+ ```
381
+
382
+ Chamfer the finished twisted rims, including the sleeve bore, through the same extrusion options.
383
+
384
+
385
+
386
+ Build the sleeve's complete filled section before extrusion. The same `ends` options finish its
387
+ outside and bore, preserving matching corners without separate cutters or independently offset lofts.
388
+
389
+ For a chamfer, `distance: 0.7` sets equal setbacks on the cap and the finished wall. A pair sets
390
+ `[cap, wall]`. The wall distance is measured from the rim in a normal section through the helical
391
+ wall; it is a straight-line distance, rather than axial depth or surface arc length. Equal distances
392
+ give 45° on perpendicular walls; a twisted wall can give a different angle around the rim.
393
+
394
+ Twisted ends support `chamfer`. Rounded, smooth, and custom-profile ends require zero twist.
395
+ Use `maxChordError` and optional `maxSegmentLength` for physical sampling. `slices` selects the
396
+ base longitudinal intervals; additional treatment rings and physical refinement resolve the rim.
397
+ Without explicit `slices`, extrusion resolution chooses the base schedule. This example requests
398
+ 20 intervals and lets the chamfer add the rings it needs.
399
+ Keep enough material between the two ends and between neighboring boundaries. Large twists over
400
+ a short chamfer collar can fold normal sections and reject; reduce the twist or the setback.
@@ -1,35 +1,128 @@
1
1
  # Modeling recipes
2
2
 
3
- Choose a worked modeling technique for profiles, sweeps, placement, joins, SVG, text, or inspection.
3
+ Choose an illustrated construction technique by the part you want to make.
4
4
 
5
- Choose the result you want to make, then open its worked guide. Illustrated examples pair a
6
- rendered model with the source executed by the optional interactive preview.
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.
7
7
 
8
- Run the examples in a [Studio code Project](https://metamesh.studio/docs/develop/code-projects), where Studio supplies
9
- controls and prepared services. For local execution, follow the
10
- [standalone workflow](standalone-model.md) and use its host entry point.
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.
11
10
 
12
11
  ## Choose a technique
13
12
 
14
- | You want to | Start with |
15
- | -------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
16
- | Choose between filled shapes, boundary points, and matching profiles | [Geometry values and representations](geometry-values.md) |
17
- | Make a plate, gasket, cup, or treated housing | [Profiles, primitives, extrusion, and revolution](profiles-and-extrusion.md) |
18
- | Route a tube, connect cross sections, or build a relief | [Sweeps, lofts, and heightfields](sweeps-and-lofts.md) |
19
- | Place repeated features or align mating parts | [Transforms, patterns, and anchors](transforms-and-placement.md) |
20
- | Blend or bevel a mounting feature into a base | [Solid joins](solid-joins.md) |
21
- | Turn artwork or lettering into material | [SVG and exact-font text](svg-and-text.md) |
22
- | Choose curve detail and check dimensions or topology | [Resolution and inspection](resolution-and-inspection.md) |
23
- | Make a threaded rod and matching nut | [Printable threads](https://metamesh.studio/docs/develop/printable-threads) |
24
- | Coordinate a pinion, wheel, or rack | [Gear geometry](https://metamesh.studio/docs/develop/gear-geometry) |
25
-
26
- ## Adapt and check
27
-
28
- All dimensions are millimetres, angles are degrees, and +Z is up. Begin with ordinary synchronous
29
- generation, then add [memoization](generation.md#reuse-unchanged-work) when
30
- expensive work can stay unchanged across parameter edits.
31
-
32
- Connect the source to [controls and validation](https://metamesh.studio/docs/develop/parameters-and-validation). Check
33
- the default, supported extremes, and optional features; inspect the latest result before
34
- [exporting it](https://metamesh.studio/docs/use/export-3mf). For manufacturing fit, verify a representative part with
35
- the material and process you intend to use.
13
+
14
+
15
+
16
+ ### [Profiles and extrusion](profiles-and-extrusion.md)
17
+
18
+ Outline → solid
19
+
20
+ Extrude plates and gaskets, revolve cups, and finish housings and rims.
21
+
22
+ ![A tapered cup with an open top and closed floor](https://metamesh.studio/docs/develop/section-revolve.webp)
23
+
24
+
25
+
26
+
27
+
28
+ ### [Sweeps, lofts, and reliefs](sweeps-and-lofts.md)
29
+
30
+ Path or stations → solid
31
+
32
+ Route a ribbon, blend changing profiles, or sample a surface over an XY grid.
33
+
34
+ ![A transition between rounded rectangular sections](https://metamesh.studio/docs/develop/section-loft.webp)
35
+
36
+
37
+
38
+
39
+
40
+ ### [Transforms and placement](transforms-and-placement.md)
41
+
42
+ One feature → coordinated parts
43
+
44
+ Repeat features, share placements, and align parts by their anchors.
45
+
46
+ ![A radial hub with six repeated arms](https://metamesh.studio/docs/develop/primitive-array.webp)
47
+
48
+
49
+
50
+
51
+
52
+ ### [Solid joins](solid-joins.md)
53
+
54
+ Base + feature → connection
55
+
56
+ Connect a separately modeled boss or rib with a smooth or straight transition.
57
+
58
+ ![A mounting boss blended into a flat base](https://metamesh.studio/docs/develop/solid-join.webp)
59
+
60
+
61
+
62
+
63
+
64
+ ### [SVG and lettering](svg-and-text.md)
65
+
66
+ Artwork → material
67
+
68
+ Extrude painted SVG shapes or exact-font lettering and fit the visible outlines.
69
+
70
+ ![A scalloped badge with a star-shaped opening](https://metamesh.studio/docs/develop/svg-document-extrusion.webp)
71
+
72
+
73
+
74
+
75
+
76
+ ### [Printable threads](https://metamesh.studio/docs/develop/printable-threads)
77
+
78
+ Shared dimensions → mating parts
79
+
80
+ Make a threaded rod and nut with shared profiles, end treatments, and fit allowances.
81
+
82
+ ![A threaded rod and matching nut](https://metamesh.studio/docs/modeling-guides/printable-threads/threaded-parts.webp)
83
+
84
+
85
+
86
+
87
+
88
+ ### [Gear geometry](https://metamesh.studio/docs/develop/gear-geometry)
89
+
90
+ Pitch + tooth count → gear pair
91
+
92
+ Resolve dimensions, sample tooth outlines, and place a pinion, wheel, or rack.
93
+
94
+ ![A golden pinion and blue wheel with meshing teeth](https://metamesh.studio/docs/develop/gear-pair.webp)
95
+
96
+
97
+
98
+
99
+
100
+ ### [Resolution and inspection](resolution-and-inspection.md)
101
+
102
+ Model → checked result
103
+
104
+ Choose physical curve detail, understand preflight guarantees, and inspect completed geometry.
105
+
106
+ ![A sampled relief tile with a rippled surface](https://metamesh.studio/docs/develop/heightfield.webp)
107
+
108
+
109
+
110
+
111
+ For vectors, sampled
112
+ boundaries, and profile correspondence, read [geometry values](geometry-values.md).
113
+
114
+ ## Run and adapt an example
115
+
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`.
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).
125
+
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.
@@ -10,8 +10,8 @@ does not establish a suitable manufacturing fit.
10
10
 
11
11
  MetaMesh uses a right-handed coordinate system with **+Z up**. Authored dimensions and curve
12
12
  tolerances are millimetres; angular arguments such as `rotate` use degrees.
13
- Pure [`rotate2`](../reference/geometry/rotate2.md) and transform-value rotations also take degrees.
14
- The low-level [`rotationTransform3`](../reference/geometry/rotationTransform3.md) constructor
13
+ Pure [`rotate2`](../reference/math/rotate2.md) and transform-value rotations also take degrees.
14
+ The low-level [`rotationTransform3`](../reference/math/rotationTransform3.md) constructor
15
15
  requires an explicit `{ degrees }` or `{ radians }` angle.
16
16
 
17
17
  `GeometryResolution` controls sampled curves in physical space. Defaults are a `0.05 mm` maximum
@@ -44,21 +44,31 @@ different things, so read what its report covers:
44
44
  SVG geometry, returning a normalized region and import diagnostics. Its counts measure the region
45
45
  at the selected resolution; they do not predict later mesh allocation.
46
46
 
47
- The `/geometry` and `mesh` preflights run without an engine and use explicit options or package defaults.
48
- The root [`preflightThreadedRod`](../reference/model/preflightThreadedRod.md),
49
- [`preflightInternalThreadCutter`](../reference/model/preflightInternalThreadCutter.md), and
50
- [`preflightThreadedNut`](../reference/model/preflightThreadedNut.md) require active synchronous
51
- model execution and use the host's resolution and limits.
47
+ Preflights are pure calculations: they run without an engine and use explicit options or package
48
+ defaults. Threaded-part preflights live in `/geometry/mechanical`, including
49
+ [`preflightThreadedRod`](../reference/mechanical/preflightThreadedRod.md),
50
+ [`preflightInternalThreadCutter`](../reference/mechanical/preflightInternalThreadCutter.md), and
51
+ [`preflightThreadedNut`](../reference/mechanical/preflightThreadedNut.md).
52
52
 
53
- Passing a preflight covers only its documented checks. Construction can still fail while running
54
- callbacks, meshing, or evaluating native geometry. Constructors enforce their limits even when
55
- you skip a preflight; use one when its plan or diagnostics help you make a decision.
53
+ Inside generation, pass the callback's effective `resolution` and `limits` to a preflight or
54
+ [`matchProfiles`](../reference/geometry/matchProfiles.md) when its sampling and work budget must
55
+ agree with the host. A pure helper never reads an ambient session.
56
+
57
+
58
+
59
+ **Preflight is a plan, not a finished part**
60
+
61
+ Passing covers only the report's documented checks. Callbacks, meshing, or native evaluation can
62
+ still fail. Run representative inputs and inspect the completed geometry.
63
+
64
+
65
+
66
+ Constructors enforce their limits even when you skip preflight. Use a report when its sampling
67
+ plan or diagnostics help you make a decision.
56
68
 
57
69
  ## Lifecycle and inspection
58
70
 
59
- Studio or your standalone host handles initialization, cleanup, finalization, Worker recovery,
60
- preview, and file delivery. Don't manually delete `Section` or `Solid` values. Use
61
- `shape.inspect()` for bounds, topology counts, area, and volume.
71
+ Use `shape.inspect()` for bounds, topology counts, area, and volume.
62
72
  Its immutable extrema are nested under `facts.bounds.min` and `facts.bounds.max`.
63
73
  Native `componentCount` counts disconnected material components. Mesh analysis and signatures use
64
74
  `shellCount` for surfaces connected by shared indexed edges: one sealed hollow body has one material
@@ -88,21 +98,25 @@ same queries inside its synchronous generation callback:
88
98
 
89
99
 
90
100
  ```ts
91
- import { box } from "@metamesh/modeling";
101
+ import { box, cylinder } from "@metamesh/modeling";
92
102
  import { generate } from "@metamesh/project";
93
103
 
94
104
  export default generate(({ part }) => {
95
- const result = box({ size: [40, 30, 5] });
96
- const measurements = result.inspect();
105
+ const plate = box({ size: [40, 30, 5] });
106
+ const bore = cylinder({ diameter: 10, height: 7 });
107
+ const result = plate.subtract(bore);
108
+ const facts = result.inspect();
97
109
 
98
- if (measurements.bounds.min[2] < -2.5 || measurements.componentCount !== 1) {
99
- throw new Error("Unexpected placement or disconnected result.");
110
+ if (facts.bounds.min[2] !== -2.5 || facts.componentCount !== 1) {
111
+ throw new Error("Expected one connected plate centered on Z.");
100
112
  }
101
113
 
102
- return [part("model", result)];
114
+ return part("plate", result);
103
115
  });
104
116
  ```
105
117
 
118
+ Inspect the cut block during generation, then return the same checked geometry as a part.
119
+
106
120
 
107
121
 
108
122
  Use [`layoutRow`](../reference/geometry/layoutRow.md) to arrange pieces along +X with an explicit
@@ -112,21 +126,27 @@ returned translations in `part` placement options so you can reuse the geometry.
112
126
 
113
127
 
114
128
  ```ts
115
- import { box, generate, transform3 } from "@metamesh/modeling";
116
- import { layoutRow } from "@metamesh/modeling/geometry";
129
+ import { box, generate } from "@metamesh/modeling";
130
+ import { layoutRow, transform3 } from "@metamesh/modeling/geometry";
117
131
 
118
- export const rowModel = generate<Record<never, never>>(({ part }) => {
132
+ export default generate<Record<never, never>>(({ part }) => {
119
133
  const pieces = [box({ size: [20, 10, 6] }), box({ size: [12, 16, 8] })];
120
134
  const positions = layoutRow(
121
135
  pieces.map((piece) => piece.inspect().bounds),
122
136
  { gap: 4 }
123
137
  );
124
138
  return pieces.map((geometry, index) =>
125
- part(`piece-${index}`, { geometry, transform: transform3().translate(positions[index]!) })
139
+ part(`piece-${index}`, {
140
+ geometry,
141
+ transform: transform3().translate(positions[index]!),
142
+ color: index === 0 ? "#f6ad55" : "#60a5fa",
143
+ })
126
144
  );
127
145
  });
128
146
  ```
129
147
 
148
+ Use each part’s evaluated bounds to place its geometry along +X with a deliberate gap.
149
+
130
150
 
131
151
 
132
152
  Check the default, smallest and largest supported dimensions, and every optional feature after
@@ -31,7 +31,7 @@ const feature = cylinder({
31
31
  cylinder({ diameter: 4, height: 16, center: false }).rotate([90, 0, 0]).translate([0, 8, 12])
32
32
  )
33
33
  // Boolean geometry defines its own datum; the collar below the cross-bore stays straight.
34
- .withAnchors({ mount: anchor3([0, 0, 2], [0, 0, -1]) });
34
+ .withAnchors({ mount: anchor3({ position: [0, 0, 2], direction: [0, 0, -1] }) });
35
35
 
36
36
  const mount = base.join(feature, {
37
37
  source: "mount",
@@ -50,6 +50,15 @@ and a straight collar remains below the cross-bore. The Boolean-composed feature
50
50
  `mount` datum with its outward normal pointing toward the base. `source: "mount"` resolves that
51
51
  datum when the join evaluates, so the completed recipe can be declared before an engine exists.
52
52
 
53
+
54
+
55
+ **Place the feature before joining**
56
+
57
+ A join adds the root transition to an already positioned feature. Check the collar and support
58
+ requirements below; joining does not close a gap or move the feature into place.
59
+
60
+
61
+
53
62
  The result has no inherited anchors. Define result datums with `withAnchors` when later work needs them.
54
63
 
55
64
  ## Define the connection
@@ -83,7 +92,8 @@ must be positive, or both zero to disable added blending while still validating
83
92
 
84
93
 
85
94
  ```ts
86
- import { box, transform3 } from "@metamesh/modeling";
95
+ import { box } from "@metamesh/modeling";
96
+ import { transform3 } from "@metamesh/modeling/geometry";
87
97
  import { generate } from "@metamesh/project";
88
98
 
89
99
  const base = box({ size: [24, 20, 4] });
@@ -22,6 +22,8 @@ export default generate<Record<never, never>>(({ part }) => {
22
22
  });
23
23
  ```
24
24
 
25
+ The centered 6 mm plate is cut by an 8 mm tall cylinder so the hole crosses both faces.
26
+
25
27
 
26
28
 
27
29
  The cutter extends beyond both faces of the centered plate. `part("plate", ...)` gives the output
@@ -29,7 +31,7 @@ a stable ID so you can identify the plate in the result. This model takes an emp
29
31
 
30
32
  ## Check and run
31
33
 
32
- With [Modeling and the CLI installed](https://metamesh.studio/docs/develop/agent-authoring#install-and-discover-the-environment),
34
+ With [Modeling and the CLI installed](https://metamesh.studio/docs/develop/cli#install-and-discover-the-environment),
33
35
  check the source and generate a captured result:
34
36
 
35
37
  ```bash
@@ -37,7 +39,7 @@ pnpm exec metamesh typecheck model.ts --kind model
37
39
  pnpm exec metamesh run model.ts --kind model
38
40
  ```
39
41
 
40
- Continue with [inspection and rendering](https://metamesh.studio/docs/develop/agent-authoring#inspect-the-captured-result),
42
+ Continue with [inspection and rendering](https://metamesh.studio/docs/develop/cli#inspect-the-captured-result),
41
43
  or [host the program in your application](hosting.md).
42
44
  When you're ready for a different shape, the
43
45
  [construction chooser](recipes.md#choose-a-technique) helps you pick an approach.