@metamesh/modeling 0.15.0 → 0.17.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 (719) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +54 -6
  3. package/dist/api/engine.d.ts +4 -3
  4. package/dist/api/geometry.d.ts +608 -266
  5. package/dist/api/index.d.ts +516 -110
  6. package/dist/api/text.d.ts +6 -6
  7. package/dist/docs/guides/concepts.md +298 -106
  8. package/dist/docs/guides/fonts.md +9 -8
  9. package/dist/docs/guides/fundamentals.md +17 -21
  10. package/dist/docs/guides/generation.md +24 -23
  11. package/dist/docs/guides/hosting.md +25 -20
  12. package/dist/docs/guides/recipes.md +68 -36
  13. package/dist/docs/guides/standalone-model.md +42 -0
  14. package/dist/docs/manifest.json +1034 -296
  15. package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
  16. package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
  17. package/dist/docs/reference/engine/GenerationOptions.md +1 -1
  18. package/dist/docs/reference/engine/GeometryResource.md +1 -1
  19. package/dist/docs/reference/engine/ModelDependencies.md +1 -1
  20. package/dist/docs/reference/engine/ModelEngine.md +1 -1
  21. package/dist/docs/reference/engine/ModelEngineOptions.md +1 -1
  22. package/dist/docs/reference/engine/ModelSession.md +1 -1
  23. package/dist/docs/reference/engine/ModelSnapshot.md +2 -2
  24. package/dist/docs/reference/engine/SessionOptions.md +1 -1
  25. package/dist/docs/reference/engine/SnapshotPart.md +7 -4
  26. package/dist/docs/reference/engine/categories/host-lifecycle.md +8 -3
  27. package/dist/docs/reference/engine/createModelEngine.md +1 -1
  28. package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
  29. package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
  30. package/dist/docs/reference/engine/validateModel.md +1 -1
  31. package/dist/docs/reference/engine.md +6 -2
  32. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +5 -1
  33. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +1 -1
  34. package/dist/docs/reference/geometry/Anchor3-type.md +6 -5
  35. package/dist/docs/reference/geometry/ArcCurve2.md +7 -3
  36. package/dist/docs/reference/geometry/ArcCurve3.md +9 -5
  37. package/dist/docs/reference/geometry/AttachOptions.md +2 -1
  38. package/dist/docs/reference/geometry/AxisAngleRotation3.md +2 -1
  39. package/dist/docs/reference/geometry/Bounds2-type.md +127 -0
  40. package/dist/docs/reference/geometry/Bounds2Data.md +45 -0
  41. package/dist/docs/reference/geometry/Bounds2Input.md +21 -0
  42. package/dist/docs/reference/geometry/Bounds2Options.md +72 -0
  43. package/dist/docs/reference/geometry/Bounds3-type.md +127 -0
  44. package/dist/docs/reference/geometry/Bounds3Data.md +45 -0
  45. package/dist/docs/reference/geometry/Bounds3Input.md +21 -0
  46. package/dist/docs/reference/geometry/Bounds3Options.md +72 -0
  47. package/dist/docs/reference/geometry/BoundsFit2.md +6 -5
  48. package/dist/docs/reference/geometry/BoundsFit3.md +6 -5
  49. package/dist/docs/reference/geometry/BoundsFitOptions.md +2 -1
  50. package/dist/docs/reference/geometry/BoxAnchorFace.md +2 -1
  51. package/dist/docs/reference/geometry/BoxAnchorOptions.md +5 -4
  52. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  53. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  54. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  55. package/dist/docs/reference/geometry/BoxOptions.md +3 -3
  56. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +8 -1
  57. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +5 -1
  58. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  59. package/dist/docs/reference/geometry/CircleContourOptions.md +5 -1
  60. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
  61. package/dist/docs/reference/geometry/CircularResolutionOptions.md +1 -1
  62. package/dist/docs/reference/geometry/CircularSampling.md +41 -0
  63. package/dist/docs/reference/geometry/CircularSamplingOptions.md +14 -0
  64. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +6 -1
  65. package/dist/docs/reference/geometry/ClearanceHoleFit.md +8 -1
  66. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +6 -1
  67. package/dist/docs/reference/geometry/Contour.md +10 -4
  68. package/dist/docs/reference/geometry/ContourCurve.md +5 -1
  69. package/dist/docs/reference/geometry/ContourPoint.md +6 -1
  70. package/dist/docs/reference/geometry/ContourSegment.md +5 -1
  71. package/dist/docs/reference/geometry/CorrespondingComponent.md +5 -1
  72. package/dist/docs/reference/geometry/CorrespondingContour.md +5 -1
  73. package/dist/docs/reference/geometry/CorrespondingProfile.md +5 -1
  74. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +5 -1
  75. package/dist/docs/reference/geometry/CubicBezierCurve2.md +10 -6
  76. package/dist/docs/reference/geometry/CubicBezierCurve3.md +10 -6
  77. package/dist/docs/reference/geometry/Curve2.md +5 -1
  78. package/dist/docs/reference/geometry/Curve3.md +5 -1
  79. package/dist/docs/reference/geometry/CurveSamplingOptions.md +5 -1
  80. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +7 -3
  81. package/dist/docs/reference/geometry/CylinderAnchorFace.md +2 -1
  82. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +4 -3
  83. package/dist/docs/reference/geometry/CylinderOptions.md +1 -1
  84. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +6 -1
  85. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +8 -1
  86. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +5 -1
  87. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +5 -1
  88. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +5 -1
  89. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +6 -1
  90. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +5 -1
  91. package/dist/docs/reference/geometry/CylindricalGearSpec.md +6 -1
  92. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  93. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  94. package/dist/docs/reference/geometry/EllipseContourOptions.md +7 -3
  95. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  96. package/dist/docs/reference/geometry/ExtrudeOptions.md +5 -1
  97. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +5 -1
  98. package/dist/docs/reference/geometry/FittedTextLayout.md +7 -3
  99. package/dist/docs/reference/geometry/Frame3.md +10 -6
  100. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  101. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  102. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  103. package/dist/docs/reference/geometry/GeometryResolution.md +1 -1
  104. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +5 -1
  105. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  106. package/dist/docs/reference/geometry/GridPatternOptions.md +4 -4
  107. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +5 -1
  108. package/dist/docs/reference/geometry/HeightfieldOptions.md +9 -5
  109. package/dist/docs/reference/geometry/HeightfieldPreflight.md +9 -4
  110. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +5 -1
  111. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +5 -1
  112. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +7 -2
  113. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +4 -3
  114. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +5 -1
  115. package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +82 -0
  116. package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +148 -0
  117. package/dist/docs/reference/geometry/KnuckleHingeInterval.md +46 -0
  118. package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +51 -0
  119. package/dist/docs/reference/geometry/KnuckleHingeSpec.md +22 -0
  120. package/dist/docs/reference/geometry/LineCurve2.md +8 -4
  121. package/dist/docs/reference/geometry/LineCurve3.md +8 -4
  122. package/dist/docs/reference/geometry/LinearPatternOptions.md +1 -1
  123. package/dist/docs/reference/geometry/LoftCorrespondence.md +6 -1
  124. package/dist/docs/reference/geometry/LoftMeshStation.md +5 -1
  125. package/dist/docs/reference/geometry/LoftOptions.md +5 -1
  126. package/dist/docs/reference/geometry/LoftPlacement.md +5 -1
  127. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +5 -1
  128. package/dist/docs/reference/geometry/MatchProfilesOptions.md +5 -1
  129. package/dist/docs/reference/geometry/MetricFastenerSize.md +9 -2
  130. package/dist/docs/reference/geometry/MetricFastenerStandard.md +5 -1
  131. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +6 -1
  132. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +6 -1
  133. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  134. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +5 -1
  135. package/dist/docs/reference/geometry/Path2-type.md +12 -8
  136. package/dist/docs/reference/geometry/Path2Data.md +40 -4
  137. package/dist/docs/reference/geometry/Path2Input.md +8 -3
  138. package/dist/docs/reference/geometry/Path3-type.md +12 -8
  139. package/dist/docs/reference/geometry/Path3Data.md +40 -4
  140. package/dist/docs/reference/geometry/Path3Input.md +8 -3
  141. package/dist/docs/reference/geometry/PathFrame.md +9 -5
  142. package/dist/docs/reference/geometry/PathLocation.md +5 -1
  143. package/dist/docs/reference/geometry/PathNormalGuide.md +8 -4
  144. package/dist/docs/reference/geometry/PathOptions.md +5 -1
  145. package/dist/docs/reference/geometry/PathPatternOptions.md +1 -1
  146. package/dist/docs/reference/geometry/PathPlacement.md +8 -4
  147. package/dist/docs/reference/geometry/PathResamplingOptions.md +5 -1
  148. package/dist/docs/reference/geometry/Pivot2Options.md +2 -1
  149. package/dist/docs/reference/geometry/Pivot3Options.md +2 -1
  150. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +8 -1
  151. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +5 -1
  152. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +5 -1
  153. package/dist/docs/reference/geometry/PlanarPatchQuality.md +7 -3
  154. package/dist/docs/reference/geometry/PolygonData.md +7 -2
  155. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +5 -1
  156. package/dist/docs/reference/geometry/PrimitiveAttachment.md +1 -1
  157. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +1 -1
  158. package/dist/docs/reference/geometry/PrintableThreadFit.md +8 -1
  159. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +6 -1
  160. package/dist/docs/reference/geometry/Profile.md +8 -2
  161. package/dist/docs/reference/geometry/ProfileComponent2.md +5 -1
  162. package/dist/docs/reference/geometry/ProfileContour2.md +8 -2
  163. package/dist/docs/reference/geometry/ProfileSpan2.md +7 -3
  164. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +3 -3
  165. package/dist/docs/reference/geometry/RackPitchDimensions.md +6 -1
  166. package/dist/docs/reference/geometry/RackPitchSpec.md +6 -1
  167. package/dist/docs/reference/geometry/RadialPatternOptions.md +1 -1
  168. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  169. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  170. package/dist/docs/reference/geometry/RectangleContourOptions.md +7 -3
  171. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +5 -1
  172. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +5 -1
  173. package/dist/docs/reference/geometry/RectangleProfileOptions.md +7 -3
  174. package/dist/docs/reference/geometry/RegionData.md +6 -2
  175. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +5 -1
  176. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  177. package/dist/docs/reference/geometry/RevolveOptions.md +5 -1
  178. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  179. package/dist/docs/reference/geometry/RowLayoutOptions.md +2 -1
  180. package/dist/docs/reference/geometry/SampleContourOptions.md +5 -1
  181. package/dist/docs/reference/geometry/SampleHelixOptions.md +5 -1
  182. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +5 -1
  183. package/dist/docs/reference/geometry/SampledCurve2.md +8 -4
  184. package/dist/docs/reference/geometry/SampledCurve3.md +8 -4
  185. package/dist/docs/reference/geometry/SampledThreadHelices.md +7 -3
  186. package/dist/docs/reference/geometry/SideProfileCurve.md +5 -1
  187. package/dist/docs/reference/geometry/SideProfilePoint.md +6 -1
  188. package/dist/docs/reference/geometry/SideProfileSegment.md +5 -1
  189. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  190. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +5 -1
  191. package/dist/docs/reference/geometry/SphereOptions.md +1 -1
  192. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +5 -1
  193. package/dist/docs/reference/geometry/StrokeCap.md +8 -1
  194. package/dist/docs/reference/geometry/StrokeJoin.md +8 -1
  195. package/dist/docs/reference/geometry/StrokeOptions.md +5 -1
  196. package/dist/docs/reference/geometry/SvgImportOptions.md +20 -1
  197. package/dist/docs/reference/geometry/SvgRegionPreflight.md +21 -2
  198. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +7 -3
  199. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +6 -1
  200. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +6 -1
  201. package/dist/docs/reference/geometry/SweepOptions.md +5 -1
  202. package/dist/docs/reference/geometry/SweepOrientation.md +5 -1
  203. package/dist/docs/reference/geometry/ThreadBevelOptions.md +5 -1
  204. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +5 -1
  205. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +5 -1
  206. package/dist/docs/reference/geometry/ThreadEndStyle.md +8 -1
  207. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +5 -1
  208. package/dist/docs/reference/geometry/ThreadHandedness.md +8 -1
  209. package/dist/docs/reference/geometry/ThreadHelixOptions.md +5 -1
  210. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +8 -1
  211. package/dist/docs/reference/geometry/ThreadLeadInShape.md +8 -1
  212. package/dist/docs/reference/geometry/ThreadProfile-type.md +7 -3
  213. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +5 -1
  214. package/dist/docs/reference/geometry/ThreadProfileSpec.md +5 -1
  215. package/dist/docs/reference/geometry/ThreadRole.md +8 -1
  216. package/dist/docs/reference/geometry/ThreadedNutBevel.md +8 -1
  217. package/dist/docs/reference/geometry/ThreadedNutOptions.md +5 -1
  218. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +7 -3
  219. package/dist/docs/reference/geometry/ThreadedNutShape.md +8 -1
  220. package/dist/docs/reference/geometry/ThreadedRodOptions.md +5 -1
  221. package/dist/docs/reference/geometry/TorusOptions.md +1 -1
  222. package/dist/docs/reference/geometry/Transform2-type.md +6 -5
  223. package/dist/docs/reference/geometry/Transform2Data.md +15 -0
  224. package/dist/docs/reference/geometry/Transform2Input.md +4 -3
  225. package/dist/docs/reference/geometry/Transform3-type.md +6 -5
  226. package/dist/docs/reference/geometry/Transform3Data.md +18 -0
  227. package/dist/docs/reference/geometry/Transform3Input.md +4 -3
  228. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +5 -1
  229. package/dist/docs/reference/geometry/TriangleMesh.md +6 -1
  230. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +7 -3
  231. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +5 -1
  232. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +7 -3
  233. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +5 -1
  234. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +5 -1
  235. package/dist/docs/reference/geometry/TriangleMeshSignature.md +7 -3
  236. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +6 -1
  237. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +6 -1
  238. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +5 -1
  239. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +5 -1
  240. package/dist/docs/reference/geometry/TubeOptions.md +1 -1
  241. package/dist/docs/reference/geometry/Vector2-type.md +6 -5
  242. package/dist/docs/reference/geometry/Vector2Data.md +15 -0
  243. package/dist/docs/reference/geometry/Vector2Input.md +4 -3
  244. package/dist/docs/reference/geometry/Vector3-type.md +6 -5
  245. package/dist/docs/reference/geometry/Vector3Data.md +15 -0
  246. package/dist/docs/reference/geometry/Vector3Input.md +4 -3
  247. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +6 -1
  248. package/dist/docs/reference/geometry/VectorTextLayout.md +5 -1
  249. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +7 -3
  250. package/dist/docs/reference/geometry/VectorTextMetrics.md +7 -3
  251. package/dist/docs/reference/geometry/VectorTextOptions.md +5 -1
  252. package/dist/docs/reference/geometry/add2.md +7 -6
  253. package/dist/docs/reference/geometry/add3.md +7 -6
  254. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +5 -1
  255. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +5 -1
  256. package/dist/docs/reference/geometry/anchor3.md +2 -1
  257. package/dist/docs/reference/geometry/anchorFrame3.md +5 -1
  258. package/dist/docs/reference/geometry/applyTransformDirection3.md +8 -7
  259. package/dist/docs/reference/geometry/applyTransformPoint3.md +8 -7
  260. package/dist/docs/reference/geometry/attachmentTransform3.md +5 -4
  261. package/dist/docs/reference/geometry/bounds2.md +39 -0
  262. package/dist/docs/reference/geometry/bounds3.md +39 -0
  263. package/dist/docs/reference/geometry/boundsCenter.md +12 -11
  264. package/dist/docs/reference/geometry/boundsSize.md +12 -11
  265. package/dist/docs/reference/geometry/boxAnchor3.md +4 -3
  266. package/dist/docs/reference/geometry/categories/bounds-layout.md +25 -9
  267. package/dist/docs/reference/geometry/categories/curves-paths.md +21 -9
  268. package/dist/docs/reference/geometry/categories/mechanical.md +22 -10
  269. package/dist/docs/reference/geometry/categories/meshes.md +16 -7
  270. package/dist/docs/reference/geometry/categories/pattern-placement.md +6 -4
  271. package/dist/docs/reference/geometry/categories/primitive-options.md +8 -2
  272. package/dist/docs/reference/geometry/categories/profiles-regions.md +21 -12
  273. package/dist/docs/reference/geometry/categories/resolution-errors.md +8 -3
  274. package/dist/docs/reference/geometry/categories/transforms-math.md +21 -12
  275. package/dist/docs/reference/geometry/categories/vector-import.md +11 -5
  276. package/dist/docs/reference/geometry/circleContour.md +5 -1
  277. package/dist/docs/reference/geometry/closeToAxis.md +14 -5
  278. package/dist/docs/reference/geometry/compensateThreadDiameters.md +5 -1
  279. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +5 -1
  280. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +5 -1
  281. package/dist/docs/reference/geometry/composeTransform3.md +7 -6
  282. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +5 -1
  283. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +11 -2
  284. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +13 -5
  285. package/dist/docs/reference/geometry/computeTriangleMeshSignature.md +5 -1
  286. package/dist/docs/reference/geometry/contourContainsPoint.md +8 -4
  287. package/dist/docs/reference/geometry/cross2.md +6 -5
  288. package/dist/docs/reference/geometry/cross3.md +7 -6
  289. package/dist/docs/reference/geometry/cylinderAnchor3.md +3 -2
  290. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +5 -1
  291. package/dist/docs/reference/geometry/distance2.md +6 -5
  292. package/dist/docs/reference/geometry/distance3.md +6 -5
  293. package/dist/docs/reference/geometry/distributeAlongPath.md +5 -1
  294. package/dist/docs/reference/geometry/dot2.md +6 -5
  295. package/dist/docs/reference/geometry/dot3.md +6 -5
  296. package/dist/docs/reference/geometry/ellipseContour.md +5 -1
  297. package/dist/docs/reference/geometry/eulerTransform3.md +7 -6
  298. package/dist/docs/reference/geometry/extrudeMesh.md +5 -1
  299. package/dist/docs/reference/geometry/fitBounds.md +10 -9
  300. package/dist/docs/reference/geometry/fitTextLayout.md +13 -5
  301. package/dist/docs/reference/geometry/frameTransform3.md +5 -4
  302. package/dist/docs/reference/geometry/getMetricClearanceHoleDiameter.md +5 -1
  303. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +5 -1
  304. package/dist/docs/reference/geometry/gridPatternTransforms.md +4 -4
  305. package/dist/docs/reference/geometry/heightfieldMesh.md +11 -2
  306. package/dist/docs/reference/geometry/helicalThreadRidgeMesh.md +5 -1
  307. package/dist/docs/reference/geometry/helicalThreadSolidMesh.md +5 -1
  308. package/dist/docs/reference/geometry/inverseTransform3.md +6 -5
  309. package/dist/docs/reference/geometry/isGeometryError.md +5 -2
  310. package/dist/docs/reference/geometry/joinTriangleMeshes.md +5 -1
  311. package/dist/docs/reference/geometry/layoutRow.md +11 -7
  312. package/dist/docs/reference/geometry/length2.md +5 -4
  313. package/dist/docs/reference/geometry/length3.md +5 -4
  314. package/dist/docs/reference/geometry/lerp2.md +7 -6
  315. package/dist/docs/reference/geometry/lerp3.md +7 -6
  316. package/dist/docs/reference/geometry/linearPatternTransforms.md +4 -4
  317. package/dist/docs/reference/geometry/loftMesh.md +5 -1
  318. package/dist/docs/reference/geometry/matchProfiles.md +11 -2
  319. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +5 -1
  320. package/dist/docs/reference/geometry/meshBounds.md +8 -4
  321. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +5 -1
  322. package/dist/docs/reference/geometry/normalize2.md +10 -6
  323. package/dist/docs/reference/geometry/normalize3.md +10 -6
  324. package/dist/docs/reference/geometry/normalizeContour.md +8 -4
  325. package/dist/docs/reference/geometry/normalizePolygon.md +5 -1
  326. package/dist/docs/reference/geometry/normalizeRegion.md +5 -1
  327. package/dist/docs/reference/geometry/optimizePlanarPatches.md +5 -1
  328. package/dist/docs/reference/geometry/path2.md +14 -2
  329. package/dist/docs/reference/geometry/path3.md +8 -1
  330. package/dist/docs/reference/geometry/pathPatternTransforms.md +9 -5
  331. package/dist/docs/reference/geometry/preflightHeightfield.md +11 -2
  332. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +11 -2
  333. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +13 -2
  334. package/dist/docs/reference/geometry/preflightSvgRegion.md +24 -2
  335. package/dist/docs/reference/geometry/preflightThreadedNut.md +12 -2
  336. package/dist/docs/reference/geometry/preflightThreadedRod.md +12 -2
  337. package/dist/docs/reference/geometry/projectOntoPlane3.md +7 -6
  338. package/dist/docs/reference/geometry/radialPatternTransforms.md +4 -4
  339. package/dist/docs/reference/geometry/rectangleContour.md +10 -3
  340. package/dist/docs/reference/geometry/rectangleProfile.md +10 -2
  341. package/dist/docs/reference/geometry/regionArea.md +5 -1
  342. package/dist/docs/reference/geometry/regionBounds.md +8 -4
  343. package/dist/docs/reference/geometry/regularPolygonContour.md +8 -4
  344. package/dist/docs/reference/geometry/resamplePolyline2.md +8 -4
  345. package/dist/docs/reference/geometry/resamplePolyline3.md +8 -4
  346. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +1 -1
  347. package/dist/docs/reference/geometry/resolveArcSegments.md +1 -1
  348. package/dist/docs/reference/geometry/resolveCircularSampling.md +40 -0
  349. package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
  350. package/dist/docs/reference/geometry/resolveCylindricalGear.md +5 -1
  351. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +5 -1
  352. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +5 -1
  353. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +5 -1
  354. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  355. package/dist/docs/reference/geometry/resolveKnuckleHinge.md +59 -0
  356. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +5 -1
  357. package/dist/docs/reference/geometry/resolveRackPitch.md +5 -1
  358. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +5 -1
  359. package/dist/docs/reference/geometry/reverseTriangleMesh.md +5 -1
  360. package/dist/docs/reference/geometry/revolveMesh.md +5 -1
  361. package/dist/docs/reference/geometry/rotate2.md +6 -5
  362. package/dist/docs/reference/geometry/rotationTransform3.md +7 -6
  363. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +8 -4
  364. package/dist/docs/reference/geometry/sampleContour.md +12 -2
  365. package/dist/docs/reference/geometry/sampleCurve2.md +6 -3
  366. package/dist/docs/reference/geometry/sampleCurve3.md +5 -1
  367. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +5 -1
  368. package/dist/docs/reference/geometry/sampleHelix.md +13 -5
  369. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +5 -1
  370. package/dist/docs/reference/geometry/sampleRackToothPath.md +8 -4
  371. package/dist/docs/reference/geometry/sampleSideProfile.md +15 -5
  372. package/dist/docs/reference/geometry/sampleTextContours.md +5 -1
  373. package/dist/docs/reference/geometry/sampleThreadHelices.md +5 -1
  374. package/dist/docs/reference/geometry/scale2.md +6 -5
  375. package/dist/docs/reference/geometry/scale3.md +6 -5
  376. package/dist/docs/reference/geometry/scaleTransform3.md +7 -6
  377. package/dist/docs/reference/geometry/signedContourArea.md +5 -1
  378. package/dist/docs/reference/geometry/starContour.md +8 -4
  379. package/dist/docs/reference/geometry/strokeRegionData.md +5 -1
  380. package/dist/docs/reference/geometry/subtract2.md +7 -6
  381. package/dist/docs/reference/geometry/subtract3.md +7 -6
  382. package/dist/docs/reference/geometry/sweepMesh.md +5 -1
  383. package/dist/docs/reference/geometry/threadProfile.md +5 -1
  384. package/dist/docs/reference/geometry/transform2.md +14 -7
  385. package/dist/docs/reference/geometry/transform3.md +16 -7
  386. package/dist/docs/reference/geometry/transformDeterminant3.md +5 -4
  387. package/dist/docs/reference/geometry/transformRegionData.md +5 -1
  388. package/dist/docs/reference/geometry/transformTriangleMesh.md +5 -1
  389. package/dist/docs/reference/geometry/translationTransform3.md +7 -6
  390. package/dist/docs/reference/geometry/triangulateContour.md +5 -1
  391. package/dist/docs/reference/geometry/validateSolidMesh.md +9 -2
  392. package/dist/docs/reference/geometry/validateTransform3.md +6 -5
  393. package/dist/docs/reference/geometry/validateTriangleMesh.md +5 -1
  394. package/dist/docs/reference/geometry/vector2.md +10 -2
  395. package/dist/docs/reference/geometry/vector3.md +10 -2
  396. package/dist/docs/reference/geometry.md +7 -5
  397. package/dist/docs/reference/model/Anchor3.md +6 -5
  398. package/dist/docs/reference/model/AttachOptions.md +2 -1
  399. package/dist/docs/reference/model/Bounds2-type.md +125 -0
  400. package/dist/docs/reference/model/Bounds2Data.md +44 -0
  401. package/dist/docs/reference/model/Bounds2Input.md +19 -0
  402. package/dist/docs/reference/model/Bounds2Options.md +70 -0
  403. package/dist/docs/reference/model/Bounds3-type.md +125 -0
  404. package/dist/docs/reference/model/Bounds3Data.md +44 -0
  405. package/dist/docs/reference/model/Bounds3Input.md +19 -0
  406. package/dist/docs/reference/model/Bounds3Options.md +70 -0
  407. package/dist/docs/reference/model/BoxEdge.md +1 -1
  408. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  409. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  410. package/dist/docs/reference/model/BoxOptions.md +3 -3
  411. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  412. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  413. package/dist/docs/reference/model/CircleOptions.md +1 -1
  414. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
  415. package/dist/docs/reference/model/Computed.md +6 -1
  416. package/dist/docs/reference/model/ComputedValue.md +5 -1
  417. package/dist/docs/reference/model/Contour.md +6 -4
  418. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  419. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  420. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  421. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  422. package/dist/docs/reference/model/CylinderOptions.md +1 -1
  423. package/dist/docs/reference/model/DiagnosticOptions.md +6 -1
  424. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  425. package/dist/docs/reference/model/EllipseContourOptions.md +3 -3
  426. package/dist/docs/reference/model/EllipseOptions.md +1 -1
  427. package/dist/docs/reference/model/EndTreatments.md +1 -1
  428. package/dist/docs/reference/model/ExtrudeOptions.md +1 -1
  429. package/dist/docs/reference/model/FinalizedModel.md +3 -3
  430. package/dist/docs/reference/model/FinalizedPart.md +1 -1
  431. package/dist/docs/reference/model/Frame3.md +6 -6
  432. package/dist/docs/reference/model/GenerateCallback.md +5 -1
  433. package/dist/docs/reference/model/GenerateContext.md +5 -1
  434. package/dist/docs/reference/model/GeneratedPart.md +5 -1
  435. package/dist/docs/reference/model/GenerationDiagnostic.md +6 -1
  436. package/dist/docs/reference/model/GenerationError.md +5 -1
  437. package/dist/docs/reference/model/GeometryResolution.md +1 -1
  438. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  439. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  440. package/dist/docs/reference/model/GridPatternOptions.md +5 -4
  441. package/dist/docs/reference/model/HeightfieldOptions.md +5 -5
  442. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +2 -1
  443. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +3 -2
  444. package/dist/docs/reference/model/HoleCutterOptions.md +77 -0
  445. package/dist/docs/reference/model/HoleCutterOverrun.md +35 -0
  446. package/dist/docs/reference/model/HoleCutterRecess.md +87 -0
  447. package/dist/docs/reference/model/HullOptions.md +1 -1
  448. package/dist/docs/reference/model/ImmutableBuffer-type.md +5 -1
  449. package/dist/docs/reference/model/ImmutableTriangleMesh.md +5 -1
  450. package/dist/docs/reference/model/ImplicitOptions.md +6 -6
  451. package/dist/docs/reference/model/InternalThreadCutterOptions.md +2 -1
  452. package/dist/docs/reference/model/KnuckleHinge-type.md +47 -0
  453. package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +77 -0
  454. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +38 -0
  455. package/dist/docs/reference/model/KnuckleHingeOptions.md +38 -0
  456. package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +47 -0
  457. package/dist/docs/reference/model/KnuckleHingeSpec.md +18 -0
  458. package/dist/docs/reference/model/KnuckleHingeWeb.md +53 -0
  459. package/dist/docs/reference/model/LinearPatternOptions.md +2 -1
  460. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  461. package/dist/docs/reference/model/LoftOptions.md +1 -1
  462. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  463. package/dist/docs/reference/model/LoftStation.md +1 -1
  464. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  465. package/dist/docs/reference/model/ModelProgram.md +5 -1
  466. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  467. package/dist/docs/reference/model/NumericArray.md +8 -1
  468. package/dist/docs/reference/model/PartGeometry.md +5 -1
  469. package/dist/docs/reference/model/PartOptions.md +5 -1
  470. package/dist/docs/reference/model/Path2-type.md +12 -8
  471. package/dist/docs/reference/model/Path2Data.md +40 -4
  472. package/dist/docs/reference/model/Path2Input.md +8 -3
  473. package/dist/docs/reference/model/Path3-type.md +12 -8
  474. package/dist/docs/reference/model/Path3Data.md +40 -4
  475. package/dist/docs/reference/model/Path3Input.md +8 -3
  476. package/dist/docs/reference/model/PathLocation.md +5 -1
  477. package/dist/docs/reference/model/PathNormalGuide.md +4 -4
  478. package/dist/docs/reference/model/PathOptions.md +5 -1
  479. package/dist/docs/reference/model/PathPatternOptions.md +2 -1
  480. package/dist/docs/reference/model/PathResamplingOptions.md +5 -1
  481. package/dist/docs/reference/model/PatternSource.md +2 -1
  482. package/dist/docs/reference/model/Pivot2Options.md +2 -1
  483. package/dist/docs/reference/model/Pivot3Options.md +2 -1
  484. package/dist/docs/reference/model/PlaneOptions.md +1 -1
  485. package/dist/docs/reference/model/PolygonData.md +3 -2
  486. package/dist/docs/reference/model/PolygonOptions.md +1 -1
  487. package/dist/docs/reference/model/PrimitiveAttachment.md +2 -1
  488. package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +2 -1
  489. package/dist/docs/reference/model/PrintableThreadFit.md +2 -1
  490. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +2 -1
  491. package/dist/docs/reference/model/Profile.md +4 -2
  492. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  493. package/dist/docs/reference/model/ProfileContour2.md +4 -2
  494. package/dist/docs/reference/model/ProfileSpan2.md +3 -3
  495. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +3 -3
  496. package/dist/docs/reference/model/RadialPatternOptions.md +2 -1
  497. package/dist/docs/reference/model/RadialSizing.md +1 -1
  498. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  499. package/dist/docs/reference/model/RectangleContourOptions.md +3 -3
  500. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  501. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  502. package/dist/docs/reference/model/RectangleOptions.md +3 -3
  503. package/dist/docs/reference/model/RegionData.md +2 -2
  504. package/dist/docs/reference/model/RegularPolygonOptions.md +1 -1
  505. package/dist/docs/reference/model/RevolveOptions.md +1 -1
  506. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  507. package/dist/docs/reference/model/Section.md +9 -2
  508. package/dist/docs/reference/model/SectionHullOptions.md +1 -1
  509. package/dist/docs/reference/model/SectionInspection.md +4 -4
  510. package/dist/docs/reference/model/SectionOffsetJoin.md +1 -1
  511. package/dist/docs/reference/model/SectionOffsetOptions.md +1 -1
  512. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  513. package/dist/docs/reference/model/Solid.md +9 -2
  514. package/dist/docs/reference/model/SolidInspection.md +4 -4
  515. package/dist/docs/reference/model/SolidSegmentHit.md +4 -4
  516. package/dist/docs/reference/model/SphereOptions.md +1 -1
  517. package/dist/docs/reference/model/StarOptions.md +1 -1
  518. package/dist/docs/reference/model/StrokeCap.md +1 -1
  519. package/dist/docs/reference/model/StrokeJoin.md +1 -1
  520. package/dist/docs/reference/model/StrokeOptions.md +1 -1
  521. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  522. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  523. package/dist/docs/reference/model/SvgSectionOptions.md +14 -1
  524. package/dist/docs/reference/model/SweepOptions.md +1 -1
  525. package/dist/docs/reference/model/SweepOrientation.md +1 -1
  526. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  527. package/dist/docs/reference/model/ThreadEndStyle.md +2 -1
  528. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +2 -1
  529. package/dist/docs/reference/model/ThreadHandedness.md +2 -1
  530. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +2 -1
  531. package/dist/docs/reference/model/ThreadLeadInShape.md +2 -1
  532. package/dist/docs/reference/model/ThreadProfile.md +4 -3
  533. package/dist/docs/reference/model/ThreadRidgeOptions.md +2 -1
  534. package/dist/docs/reference/model/ThreadedNutBevel.md +2 -1
  535. package/dist/docs/reference/model/ThreadedNutOptions.md +2 -1
  536. package/dist/docs/reference/model/ThreadedNutPreflight.md +4 -3
  537. package/dist/docs/reference/model/ThreadedNutShape.md +2 -1
  538. package/dist/docs/reference/model/ThreadedRodOptions.md +2 -1
  539. package/dist/docs/reference/model/TorusOptions.md +1 -1
  540. package/dist/docs/reference/model/Transform2-type.md +6 -5
  541. package/dist/docs/reference/model/Transform2Data.md +16 -0
  542. package/dist/docs/reference/model/Transform2Input.md +4 -3
  543. package/dist/docs/reference/model/Transform3-type.md +6 -5
  544. package/dist/docs/reference/model/Transform3Data.md +19 -0
  545. package/dist/docs/reference/model/Transform3Input.md +4 -3
  546. package/dist/docs/reference/model/TriangleMesh.md +1 -1
  547. package/dist/docs/reference/model/TriangleMeshAnalysis.md +3 -3
  548. package/dist/docs/reference/model/TriangleMeshMeasurements.md +3 -3
  549. package/dist/docs/reference/model/TubeOptions.md +1 -1
  550. package/dist/docs/reference/model/Vector2-type.md +6 -5
  551. package/dist/docs/reference/model/{Vector2Tuple.md → Vector2Data.md} +3 -3
  552. package/dist/docs/reference/model/Vector2Input.md +4 -3
  553. package/dist/docs/reference/model/Vector3-type.md +6 -5
  554. package/dist/docs/reference/model/{Vector3Tuple.md → Vector3Data.md} +3 -3
  555. package/dist/docs/reference/model/Vector3Input.md +4 -3
  556. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  557. package/dist/docs/reference/model/VectorTextMetrics.md +3 -3
  558. package/dist/docs/reference/model/anchor.md +2 -1
  559. package/dist/docs/reference/model/bounds2.md +37 -0
  560. package/dist/docs/reference/model/bounds3.md +37 -0
  561. package/dist/docs/reference/model/box.md +2 -2
  562. package/dist/docs/reference/model/castSegment.md +1 -1
  563. package/dist/docs/reference/model/categories/boolean-operations.md +10 -3
  564. package/dist/docs/reference/model/categories/bounded-surfaces.md +5 -3
  565. package/dist/docs/reference/model/categories/bounds.md +38 -0
  566. package/dist/docs/reference/model/categories/contracts.md +4 -2
  567. package/dist/docs/reference/model/categories/core-values-errors.md +11 -11
  568. package/dist/docs/reference/model/categories/explicit-profiles.md +6 -4
  569. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +12 -3
  570. package/dist/docs/reference/model/categories/generation.md +11 -2
  571. package/dist/docs/reference/model/categories/hinges.md +38 -0
  572. package/dist/docs/reference/model/categories/inspection.md +9 -2
  573. package/dist/docs/reference/model/categories/mesh-inspection.md +5 -3
  574. package/dist/docs/reference/model/categories/paths.md +15 -7
  575. package/dist/docs/reference/model/categories/primitives.md +14 -4
  576. package/dist/docs/reference/model/categories/resolution.md +4 -2
  577. package/dist/docs/reference/model/categories/sections.md +10 -5
  578. package/dist/docs/reference/model/categories/threads.md +10 -7
  579. package/dist/docs/reference/model/categories/transforms-placement.md +17 -9
  580. package/dist/docs/reference/model/circle.md +1 -1
  581. package/dist/docs/reference/model/components.md +1 -1
  582. package/dist/docs/reference/model/compose.md +1 -1
  583. package/dist/docs/reference/model/cylinder.md +1 -1
  584. package/dist/docs/reference/model/distance.md +1 -1
  585. package/dist/docs/reference/model/ellipse.md +1 -1
  586. package/dist/docs/reference/model/extrude.md +1 -1
  587. package/dist/docs/reference/model/generate.md +5 -1
  588. package/dist/docs/reference/model/gridPattern.md +2 -1
  589. package/dist/docs/reference/model/heightfield.md +5 -2
  590. package/dist/docs/reference/model/holeCutter.md +45 -0
  591. package/dist/docs/reference/model/hull.md +1 -1
  592. package/dist/docs/reference/model/immutableBuffer.md +5 -1
  593. package/dist/docs/reference/model/immutableMesh.md +5 -1
  594. package/dist/docs/reference/model/implicit.md +3 -3
  595. package/dist/docs/reference/model/inspectSection.md +1 -1
  596. package/dist/docs/reference/model/inspectSolid.md +1 -1
  597. package/dist/docs/reference/model/internalThreadCutter.md +2 -1
  598. package/dist/docs/reference/model/intersect.md +1 -1
  599. package/dist/docs/reference/model/isEmpty.md +1 -1
  600. package/dist/docs/reference/model/knuckleHinge.md +47 -0
  601. package/dist/docs/reference/model/linearPattern.md +2 -1
  602. package/dist/docs/reference/model/loft.md +1 -1
  603. package/dist/docs/reference/model/matchProfiles.md +1 -1
  604. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  605. package/dist/docs/reference/model/path2.md +14 -2
  606. package/dist/docs/reference/model/path3.md +8 -1
  607. package/dist/docs/reference/model/pathPattern.md +2 -1
  608. package/dist/docs/reference/model/polygon.md +5 -2
  609. package/dist/docs/reference/model/preflightInternalThreadCutter.md +8 -2
  610. package/dist/docs/reference/model/preflightThreadedNut.md +8 -2
  611. package/dist/docs/reference/model/preflightThreadedRod.md +8 -2
  612. package/dist/docs/reference/model/radialPattern.md +2 -1
  613. package/dist/docs/reference/model/rectangle.md +5 -2
  614. package/dist/docs/reference/model/regularPolygon.md +1 -1
  615. package/dist/docs/reference/model/revolve.md +1 -1
  616. package/dist/docs/reference/model/solidFromMesh.md +1 -1
  617. package/dist/docs/reference/model/sphere.md +1 -1
  618. package/dist/docs/reference/model/split.md +1 -1
  619. package/dist/docs/reference/model/splitByPlane.md +1 -1
  620. package/dist/docs/reference/model/star.md +1 -1
  621. package/dist/docs/reference/model/stroke.md +1 -1
  622. package/dist/docs/reference/model/svgPathSection.md +1 -1
  623. package/dist/docs/reference/model/svgSection.md +5 -1
  624. package/dist/docs/reference/model/sweep.md +1 -1
  625. package/dist/docs/reference/model/textSection.md +1 -1
  626. package/dist/docs/reference/model/threadRidge.md +2 -1
  627. package/dist/docs/reference/model/threadedNut.md +2 -1
  628. package/dist/docs/reference/model/threadedRod.md +2 -1
  629. package/dist/docs/reference/model/torus.md +1 -1
  630. package/dist/docs/reference/model/transform2.md +14 -7
  631. package/dist/docs/reference/model/transform3.md +16 -7
  632. package/dist/docs/reference/model/tube.md +1 -1
  633. package/dist/docs/reference/model/union.md +1 -1
  634. package/dist/docs/reference/model/vector2.md +10 -2
  635. package/dist/docs/reference/model/vector3.md +10 -2
  636. package/dist/docs/reference/model.md +15 -8
  637. package/dist/docs/reference/text/Bounds2Data.md +34 -0
  638. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
  639. package/dist/docs/reference/text/Vector2Data.md +7 -0
  640. package/dist/docs/reference/text/VectorFont.md +7 -7
  641. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  642. package/dist/docs/reference/text/VectorTextArcBaseline.md +1 -1
  643. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  644. package/dist/docs/reference/text/VectorTextLayoutOptions.md +3 -3
  645. package/dist/docs/reference/text/VectorTextMetrics.md +3 -3
  646. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  647. package/dist/docs/reference/text/categories/font-preparation.md +6 -4
  648. package/dist/docs/reference/text/prepareVectorFont.md +1 -1
  649. package/dist/docs/reference/text.md +4 -2
  650. package/dist/engine/construction-operations.js +1 -1
  651. package/dist/engine/extrusion-finishing.js +2 -29
  652. package/dist/engine/hole-cutter-operation.js +148 -0
  653. package/dist/engine/knuckle-hinge-operation.js +128 -0
  654. package/dist/engine/loft-operations.js +1 -1
  655. package/dist/engine/mechanical-operations.js +3 -1
  656. package/dist/engine/modeling-context.js +20 -1
  657. package/dist/engine/primitive-operations.js +19 -6
  658. package/dist/engine/recipe-realization.js +4 -2
  659. package/dist/engine/section-operations.js +2 -2
  660. package/dist/engine/transform-operations.js +3 -3
  661. package/dist/geometry/bounds-value.js +121 -0
  662. package/dist/geometry/bounds.js +10 -25
  663. package/dist/geometry/circular-sampling.js +45 -0
  664. package/dist/geometry/convex-offset.js +41 -0
  665. package/dist/geometry/curves/sampling.js +1 -2
  666. package/dist/geometry/errors.js +1 -0
  667. package/dist/geometry/heightfield.js +12 -1
  668. package/dist/geometry/index.js +5 -2
  669. package/dist/geometry/math/immutable-value.js +1 -1
  670. package/dist/geometry/math/vector-value.js +11 -3
  671. package/dist/geometry/math/vector2.js +1 -0
  672. package/dist/geometry/math/vector3.js +1 -0
  673. package/dist/geometry/mechanical/index.js +1 -0
  674. package/dist/geometry/mechanical/knuckle-hinge.js +110 -0
  675. package/dist/geometry/mechanical/thread-mesh-plan.js +7 -2
  676. package/dist/geometry/mechanical/thread-solids.js +29 -4
  677. package/dist/geometry/mesh/mesh-centroid.js +1 -0
  678. package/dist/geometry/mesh/mesh-solid.js +1 -0
  679. package/dist/geometry/paths/frames.js +1 -0
  680. package/dist/geometry/paths/helix.js +1 -0
  681. package/dist/geometry/paths/path-value.js +43 -27
  682. package/dist/geometry/paths/resampling.js +2 -2
  683. package/dist/geometry/patterns/placements.js +3 -3
  684. package/dist/geometry/patterns.js +3 -1
  685. package/dist/geometry/profiles/contour.js +1 -0
  686. package/dist/geometry/profiles/matched.js +1 -0
  687. package/dist/geometry/profiles/profiles.js +3 -23
  688. package/dist/geometry/profiles/rectangle.js +10 -1
  689. package/dist/geometry/profiles/side-profile.js +2 -0
  690. package/dist/geometry/svg/matrix.js +21 -0
  691. package/dist/geometry/svg-import.js +140 -52
  692. package/dist/geometry/sweeps/options.js +1 -1
  693. package/dist/geometry/text-fitting.js +1 -0
  694. package/dist/geometry/transform-matrix.js +1 -1
  695. package/dist/geometry/{transform-chain.js → transform-value.js} +24 -15
  696. package/dist/index.js +2 -1
  697. package/dist/model/execution-binding.js +1 -1
  698. package/dist/model/geometry-recipes.js +1 -1
  699. package/dist/model/hole-cutter.js +1 -0
  700. package/dist/model/immutable-generation-data.js +4 -12
  701. package/dist/model/knuckle-hinge.js +1 -0
  702. package/dist/model/operations.js +78 -3
  703. package/dist/model/recipe-declaration.js +11 -2
  704. package/package.json +1 -1
  705. package/dist/docs/reference/geometry/Bounds2.md +0 -39
  706. package/dist/docs/reference/geometry/Bounds3.md +0 -39
  707. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +0 -23
  708. package/dist/docs/reference/geometry/Transform2Matrix.md +0 -14
  709. package/dist/docs/reference/geometry/Transform3Matrix.md +0 -17
  710. package/dist/docs/reference/geometry/Vector2Tuple.md +0 -14
  711. package/dist/docs/reference/geometry/Vector3Tuple.md +0 -14
  712. package/dist/docs/reference/geometry/boundsFromSize.md +0 -83
  713. package/dist/docs/reference/geometry/containsBounds.md +0 -72
  714. package/dist/docs/reference/model/Bounds2.md +0 -39
  715. package/dist/docs/reference/model/Bounds3.md +0 -39
  716. package/dist/docs/reference/model/Transform2Matrix.md +0 -15
  717. package/dist/docs/reference/model/Transform3Matrix.md +0 -18
  718. package/dist/docs/reference/text/Bounds2.md +0 -34
  719. package/dist/docs/reference/text/Vector2Tuple.md +0 -7
@@ -1,9 +1,9 @@
1
- /** Axis-aligned bounds in two-dimensional model space. */
2
- export declare interface Bounds2 {
1
+ /** Plain axis-aligned XY bounds for interchange; use bounds2 for immutable measurement methods. */
2
+ export declare interface Bounds2Data {
3
3
  /** Inclusive maximum X/Y coordinates. */
4
- readonly max: Vector2Tuple;
4
+ readonly max: Vector2Data;
5
5
  /** Inclusive minimum X/Y coordinates. */
6
- readonly min: Vector2Tuple;
6
+ readonly min: Vector2Data;
7
7
  }
8
8
 
9
9
  /** Limits apply before parsing or shaping untrusted font data. */
@@ -27,7 +27,7 @@ export declare function prepareVectorFont(
27
27
  ): Promise<VectorFont>;
28
28
 
29
29
  /** A two-dimensional Cartesian vector or point. */
30
- export declare type Vector2Tuple = readonly [x: number, y: number];
30
+ export declare type Vector2Data = readonly [x: number, y: number];
31
31
 
32
32
  /**
33
33
  * A prepared font owns its parsed bytes; keep handles local to their Worker or invocation.
@@ -93,7 +93,7 @@ export declare interface VectorTextLayoutOptions extends VectorTextOptions {
93
93
  /** Text measurements from the same immutable layout that supplies geometry and SVG outlines. */
94
94
  export declare interface VectorTextMetrics {
95
95
  /** Visible curve bounds after alignment, or null when the text has no ink. */
96
- readonly bounds: Bounds2 | null;
96
+ readonly bounds: Bounds2Data | null;
97
97
  /** Unaligned logical advance and negative baseline displacement in mm; arcs retain [arc length, 0]. */
98
98
  readonly advance: readonly [number, number];
99
99
  /** Maximum logical line advance in millimetres, including spaces; arc length on circular baselines. */
@@ -1,8 +1,9 @@
1
1
  # Geometry API concepts
2
2
 
3
- Choose the public Modeling modules, understand geometry and lifecycle conventions, and use them in Studio or a standalone Node or Worker host.
3
+ Choose shapes, paths, profiles, and modules, then compose immutable geometry with clear sampling and preflight limits.
4
4
 
5
- Import modeling functions from the package root:
5
+ Use Sections for filled 2D shapes, Solids for 3D material, and paths or profiles for boundaries
6
+ and correspondence. Import modeling functions from the package root:
6
7
 
7
8
 
8
9
 
@@ -13,9 +14,30 @@ import { generate } from "@metamesh/project";
13
14
 
14
15
 
15
16
 
16
- Studio supplies this API and its runtime to code Projects. Standalone applications use the same
17
- values in a generation program. The [Model API reference](../reference/model.md) provides
18
- exact signatures; this guide explains how the concepts fit together.
17
+ Studio supplies the API and runtime to code Projects. Standalone applications use the same
18
+ values in a generation program. Use the [Model API reference](../reference/model.md) for exact
19
+ signatures.
20
+
21
+ ## Choose a modeling path
22
+
23
+ | Starting intent | Construction | Main decision |
24
+ | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
25
+ | A block, cylinder, sphere, or cone | Primitives and [solid Booleans](fundamentals.md#choose-the-boolean-by-the-material-you-want) | Combine material or remove it with cutters |
26
+ | A plate, gasket, logo, or outline with holes | A filled `Section`, section Booleans or offsets, then [extrusion](recipes.md#section-hole-offset-and-extrusion) | Solve the outline before adding thickness |
27
+ | A hollow sleeve with a flange, cup, or knob | [Revolve a closed radial profile](recipes.md#revolve-a-radial-profile) around +Z | Describe the material, including walls and bores, in radius/height coordinates |
28
+ | A routed strip or tube | [Sweep a section along a path](recipes.md#rotation-minimizing-path-sweep) | Choose section orientation and the closed seam |
29
+ | A transition between different cross sections | [Loft corresponding boundaries](recipes.md#matched-section-loft) | Match landmarks and holes between stations |
30
+ | Repeated holes or features | [Patterns and placement](recipes.md#primitive-booleans-and-repeated-placement) | Position one feature before repeating it |
31
+ | Separate mating parts | [Explicit anchors](recipes.md#named-anchors-and-custom-frames) and [shared thread settings](https://metamesh.studio/docs/develop/printable-threads) | Share a mating datum and clearance decisions |
32
+
33
+ Combine these constructions as needed: join a flange to a sleeve, then bore either with a
34
+ repeated cutter. Prefer an existing primitive when it fits; use `tube` for a concentric straight
35
+ sleeve.
36
+
37
+ Start with synchronous generation and return named parts. Geometry values are immutable recipes
38
+ that the host evaluates. Add `computed` when expensive work stays unchanged across edits. See
39
+ [generation and parameter changes](generation.md#start-with-generate) and the
40
+ [standalone CLI entry contract](https://metamesh.studio/docs/develop/agent-authoring#model-entries).
19
41
 
20
42
  ## Choose the module for your host
21
43
 
@@ -26,36 +48,33 @@ exact signatures; this guide explains how the concepts fit together.
26
48
  | [`@metamesh/modeling/engine`](../reference/engine.md) | Standalone initialization, model finalization, and 3MF export | Your Node application or browser Worker |
27
49
  | [`@metamesh/modeling/text`](../reference/text.md) | Prepare exact font bytes and vector layouts outside Studio | Your host acquires the font bytes |
28
50
 
29
- Construct immutable shapes, vectors, paths, and transforms in ordinary TypeScript and reuse them in
30
- synchronous generation. A host evaluates geometry and owns observations and export. Add pure
31
- geometry helpers for custom calculations.
51
+ Construct shapes, vectors, paths, and transforms in ordinary TypeScript and reuse them in
52
+ synchronous generation. The host owns evaluation, observations, and export.
32
53
 
33
54
  ## Use Modeling outside Studio
34
55
 
35
- Follow [Run Modeling in your application](hosting.md)
56
+ Start with a [complete standalone model](standalone-model.md), or follow
57
+ [Run Modeling in your application](hosting.md)
36
58
  to initialize the engine, build a model, load WASM, and export its completed snapshot.
37
59
  For lettering, [prepare exact font bytes](fonts.md) before building.
38
60
 
39
61
  ## Geometry vocabulary
40
62
 
41
- The public API names values by modeling role:
42
-
43
- - `Path2` and `Path3` are immutable sampled trajectories created by `path2` and `path3`.
44
- Each owns its closure, traversal order, and finite coordinates.
45
- - `Path2Data` and `Path3Data` are tuple collections for path interchange.
46
- - A `Contour` is plain point data for a closed 2D boundary, without a repeated closing point.
47
- - `PolygonData` contains one outer contour and its holes. `RegionData` is the plain serialized
48
- representation of filled 2D geometry, including disconnected polygons.
49
- - A `Profile` specifies identified components, contours and spans for a related shape family.
50
- - A `CorrespondingProfile` contains the shared sampled landmarks produced by `matchProfiles`.
51
- - A `Section` is a filled 2D shape used for section Booleans, offsets, extrusion, revolution,
52
- sweeps, and lofts.
53
- - A `Solid` is a valid three-dimensional result that can participate in solid Booleans and become
54
- model output.
55
- - An `Anchor3` is an explicit local frame used to place one solid against another.
56
- - `Vector2` and `Vector3` are immutable arithmetic values created by `vector2` and `vector3`.
57
- - `Vector2Tuple` and `Vector3Tuple` are fixed numeric tuples for coordinate interchange and kernels.
58
- - `Bounds2` and `Bounds3` contain finite minimum and maximum tuples for measurements and placement.
63
+ Choose the representation by the information you need to retain:
64
+
65
+ | Representation | Retains | Typical use |
66
+ | -------------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------ |
67
+ | `Vector2` / `Vector3` | Immutable finite coordinates and arithmetic methods | Readable calculations |
68
+ | `Path2` / `Path3` | Sampled points, traversal order, and closure | Trajectories and boundary queries |
69
+ | `Contour` | One closed boundary's point tuples, without a repeated endpoint | Custom calculations and meshing |
70
+ | `PolygonData` / `RegionData` | One exterior plus holes / a collection of filled polygons | Serialized filled topology |
71
+ | `Profile` / `ProfileContour2` | Identified family topology / one closed boundary of identified spans | Correspondence across related shapes |
72
+ | `CorrespondingProfile` | Shared sampled landmarks from `matchProfiles` | Loft or sweep stations |
73
+ | `Section` / `Solid` | Immutable filled 2D / 3D recipes | Booleans and model construction |
74
+ | `Vector2Data` / `Vector3Data`, `Path2Data` / `Path3Data` | Vector tuples and complete path records | Interchange and numerical kernels |
75
+ | `Bounds2` / `Bounds3` | Immutable axis-aligned extents and measurement methods | Containment and placement queries |
76
+ | `Bounds2Data` / `Bounds3Data` | Plain min/max coordinates | Measurements and interchange |
77
+ | `Anchor3` | An attachment frame | Relative placement |
59
78
 
60
79
  `Section` and `Solid` are opaque immutable recipes. Construction and composition need no engine;
61
80
  ordinary recipes can be reused across sessions regardless of where they were constructed.
@@ -64,33 +83,28 @@ host's defaults. The host owns evaluation caches and native kernel values. `comp
64
83
  observation: its selected shapes, and recipes using them, can only be evaluated in the originating
65
84
  session because component identity depends on evaluated topology.
66
85
 
67
- Ordinary models use root Sections for shapes, Booleans, extrusion, sweeps, and lofts. The pure
68
- `/geometry` entry supplies point data through `circleContour`, `rectangleContour`, and other contour factories
69
- when custom calculations or mesh construction need it. `rectangle`, `rectangleContour`, and
70
- `rectangleProfile` share size, center, corner treatment, and sampling options; their result type
71
- reflects the operation's role.
72
-
73
- Use [`polygon(points)`](../reference/model/polygon.md) to fill one contour. The explicit
74
- `polygon({ outer, holes })` form validates exterior/hole topology and normalizes winding.
75
- `polygon({ contours, fillRule })` resolves compound paths with `"nonzero"` fill by default or
76
- explicit `"evenodd"` fill. Use `polygon({ polygons: data })` for existing `RegionData`.
77
- Every form returns the same `Section` type as `circle` or `rectangle`; subsequent Booleans may
78
- produce holes or disconnected components. `section.toRegionData()` observes the evaluated shape
79
- inside synchronous generation. Keep serialized point data for interchange or pure preparation.
80
-
81
- Use `path2(points, { closed: true })` for a reusable boundary. Its `length()` includes the closing
82
- edge, and `closestPoint(query)` returns a fluent point, distance, edge index, and fraction within
83
- that edge. Queries measure the sampled boundary; they do not measure a filled interior or an
84
- underlying analytic curve. Chain `transform`, `reverse`, and equal-distance `resample` to create
85
- new paths. Closed paths omit the duplicated endpoint. Open paths may be empty; their bounds are
86
- `undefined`, and closest-point queries need at least two points.
87
-
88
- Pass paths directly to `polygon`, `stroke`, sweeps, and path patterns in the matching dimension.
89
- `polygon(path)` requires a closed planar value and establishes exterior/hole winding. A path's
90
- transform preserves traversal even after reflection. Individual vector inputs and authored point
91
- collections accept fluent vectors as well as tuples; serialized data contracts remain tuple-only.
92
- `toArray()` returns frozen tuples for interchange and does not encode closure. Keep the path value
93
- when passing closure between operations.
86
+ Use Sections from the root module for Booleans, extrusion, sweeps, and lofts. Use `/geometry`
87
+ contour factories such as `circleContour` and `rectangleContour` when custom calculations or
88
+ meshing need point data. These rectangle factories share size, center, corner treatment, and
89
+ sampling options:
90
+
91
+ | You need | Choose | Result |
92
+ | ------------------------------------------------- | --------------------------------------------------------------- | --------- |
93
+ | Filled material for Booleans or extrusion | [`rectangle`](../reference/model/rectangle.md) | `Section` |
94
+ | Sampled boundary coordinates | [`rectangleContour`](../reference/geometry/rectangleContour.md) | `Contour` |
95
+ | Stable edge and corner identities across stations | [`rectangleProfile`](../reference/geometry/rectangleProfile.md) | `Profile` |
96
+
97
+ [`polygon`](../reference/model/polygon.md) fills boundaries in four forms:
98
+
99
+ - `polygon(points)` fills one contour.
100
+ - `polygon({ outer, holes })` validates exterior/hole topology and normalizes winding.
101
+ - `polygon({ contours, fillRule })` resolves compound paths with `"nonzero"` fill by default or
102
+ explicit `"evenodd"` fill.
103
+ - `polygon({ polygons: data })` accepts existing `RegionData`.
104
+
105
+ Each returns a `Section`, like `circle` or `rectangle`. Later Booleans may produce holes or
106
+ disconnected components. Use `section.toRegionData()` inside synchronous generation to observe
107
+ the evaluated shape; keep serialized point data for interchange or pure preparation.
94
108
 
95
109
  `rectangleProfile({ size: [width, height], treatment: { kind: "round", radius }, id })` describes
96
110
  identified spans for custom geometry. Prepare a complete explicit family with `matchProfiles`
@@ -101,16 +115,96 @@ Identified spans also accept cubic Béziers with the same endpoints and controls
101
115
  grid; physical sampling refines every member before choosing the family count. Collapsed spans
102
116
  retain repeated logical slots, while the completed loft removes degenerate faces.
103
117
 
104
- ## Choose a modeling path
118
+ ## Choose fluent values or standalone algorithms
119
+
120
+ Use methods for ordinary composition and queries on a value, such as `path.transform(...)`,
121
+ `path.closestPoint(...)`, or `vector.normalize()`. Use standalone algorithms for specialized
122
+ outputs, such as [`computeParallelTransportFrames`](../reference/geometry/computeParallelTransportFrames.md),
123
+ [`sweepMesh`](../reference/geometry/sweepMesh.md), or
124
+ [`resolveCylindricalGear`](../reference/geometry/resolveCylindricalGear.md).
125
+
126
+ ### Fluent vector and tuple arithmetic
127
+
128
+ Tuple kernels remain useful in numerical loops. The same arithmetic can be written in either form:
129
+
130
+
131
+
132
+ ```ts
133
+ import { vector3 } from "@metamesh/modeling";
134
+ import { add3, normalize3, scale3 } from "@metamesh/modeling/geometry";
135
+
136
+ export const fluentDirection = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
137
+ export const tupleDirection = scale3(normalize3(add3([1, 2, 3], [4, 0, 0])), 10);
138
+ // fluentDirection.toData() and tupleDirection contain the same coordinates.
139
+ ```
140
+
141
+
142
+
143
+ Fluent vectors validate finite inputs and results and allocate immutable values. Basic tuple
144
+ arithmetic such as `add3` avoids those wrappers and assumes valid inputs; overflow can produce
145
+ nonfinite results. Individual kernels document additional checks, such as zero-length rejection
146
+ in `normalize3`.
147
+
148
+ ## Value and data naming
149
+
150
+ Modeling values use domain names such as `Vector2`, `Transform2`, `Path2`, and `Bounds2`.
151
+ Their plain representations consistently use `Data`: `Vector2Data`, `Transform2Data`,
152
+ `Path2Data`, and `Bounds2Data`. Each value exposes `toData()` for a stable, deeply frozen
153
+ representation, and its factory accepts that data again. `Input` types describe accepted values,
154
+ data, and any supported construction shorthand.
155
+
156
+ Vector data is a coordinate tuple, transform data a canonical matrix, bounds data a min/max record,
157
+ and path data a record with `dimension`, `points`, and `closed`. Use `path.toData().points`
158
+ when a numerical algorithm needs only coordinates; use the full record to retain topology.
159
+ Options, reports, geometry descriptors, and recipes keep their descriptive contracts. Use
160
+ `toTriangleMesh()` or `toRegionData()` during active host execution to evaluate a Solid as a mesh
161
+ or a Section as a region.
162
+
163
+ ## Query paths and preserve closure
164
+
165
+ Use `path2(points, { closed: true })` or `path3(points, { closed: true })` for a reusable boundary.
166
+ `length()` includes the closing edge. [`closestPoint`](../reference/geometry/Path3-type.md#closestpoint)
167
+ returns a [`PathLocation`](../reference/geometry/PathLocation.md): a fluent `point`, `distance` in
168
+ millimetres, `edgeIndex`, and clamped `fraction` within that edge. Equal-distance ties select the
169
+ first edge in traversal order. The fraction is local to an edge; it is not a whole-path or analytic
170
+ curve parameter.
171
+
172
+ ### Path coordinate round trip
173
+
174
+
175
+
176
+ ```ts
177
+ import { path3 } from "@metamesh/modeling";
178
+
179
+ export const boundary = path3(
180
+ [
181
+ [0, 0, 0],
182
+ [10, 0, 0],
183
+ [10, 10, 0],
184
+ [0, 10, 0],
185
+ ],
186
+ { closed: true }
187
+ );
188
+ export const nearest = boundary.closestPoint([-2, 5, 0]);
189
+ // point: [0, 5, 0], distance: 2, edgeIndex: 3, fraction: 0.5
190
+ export const restoredPath = path3(boundary.toData());
191
+ // Both paths include the closing edge and have length 40 mm.
192
+ ```
193
+
105
194
 
106
- | Starting intent | Typical operations |
107
- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
108
- | A block, cylinder, sphere, or cone | Primitive solids, transforms, then [solid Booleans](fundamentals.md#choose-the-boolean-by-the-material-you-want) |
109
- | A plate, gasket, logo, or profile | Build a `Section`, use section Booleans or offsets, then [extrude](recipes.md#section-hole-offset-and-extrusion) |
110
- | A rotational part | [Revolve a closed radial profile](recipes.md#revolve-a-radial-profile) around +Z |
111
- | A tube or routed shape | [Sweep one supported section](recipes.md#rotation-minimizing-path-sweep) along an open or closed path |
112
- | A transition between profiles | [Loft corresponding boundaries](recipes.md#matched-section-loft) with holes |
113
- | Repeated or mating parts | [Patterns](recipes.md#primitive-booleans-and-repeated-placement), [explicit anchors](recipes.md#named-anchors-and-custom-frames), and [reusable thread settings](https://metamesh.studio/docs/develop/printable-threads) |
195
+
196
+ `toData()` returns a deeply frozen record with `dimension`, `points`, and `closed`. Pass the path
197
+ value directly where supported, or restore the full record with `path2(data)` or `path3(data)`.
198
+ Closed paths omit the duplicated endpoint. Open paths may be empty; their bounds are `undefined`,
199
+ and nearest-edge queries require at least two vertices. Queries measure the sampled boundary,
200
+ not a filled interior or underlying analytic curve.
201
+
202
+ Chain `transform`, `reverse`, and equal-distance `resample` to create new paths. Transforming a path
203
+ preserves traversal even after reflection. `polygon(path)` requires a closed planar value and
204
+ establishes exterior/hole winding; `stroke`, sweeps, and path patterns accept paths in the matching
205
+ dimension. Authored point collections accept fluent vectors or tuples; serialized data uses tuples.
206
+
207
+ ## Compose modeling operations
114
208
 
115
209
  Name meaningful intermediate values and choose a curve tolerance that preserves the required
116
210
  shape. Many high-resolution Boolean operands increase generation time.
@@ -120,30 +214,35 @@ filled Section and `box({ size: [24, 16, 6] })` creates a Solid. `union` and `in
120
214
  combine same-dimensional arrays. `shape.subtract(cutters)` accepts an array of same-dimensional
121
215
  cutters. `section.offset(distance, options)` stays in the filled XY plane.
122
216
 
123
- `section.extrude({ height, twist, scaleTop })` adds +Z depth, with its bottom at zero unless
124
- `center: true` is requested. `section.revolve({ degrees })` rotates radial/Z geometry around
125
- +Z. `loft` pairs retained landmarks in compatible primitive Sections, including zero and fully
126
- rounded rectangle corners, and circle/ellipse stations transitioning to rectangles. This also works
127
- after invertible XY transforms with consistent handedness. It accepts explicit corresponding
128
- Profile stations for custom topology. Boolean Sections and point contours need a selected
129
- `correspondence` method (`"direct"`, `"reindex"`, `"fast-distance"`, or `"distance"`) or explicit
130
- profiles; Boolean contour order does not establish semantic correspondence.
131
- `section.sweep(path, options)` supports open or closed paths,
132
- degree twist, uniform/XY/per-station scales and an explicit compatible closed seam.
217
+ - `section.extrude({ height, twist, scaleTop })` adds +Z depth, with its bottom at zero unless
218
+ `center: true` is requested.
219
+ - `section.revolve({ degrees })` rotates radial/Z geometry around +Z.
220
+ - `loft` pairs retained landmarks in compatible primitive Sections, including zero and fully
221
+ rounded rectangle corners, and circle/ellipse stations transitioning to rectangles. Invertible
222
+ XY transforms must keep consistent handedness. Use corresponding Profile stations for custom
223
+ topology. Boolean Sections and point contours need a `correspondence` method (`"direct"`,
224
+ `"reindex"`, `"fast-distance"`, or `"distance"`) or explicit profiles; contour order alone does
225
+ not establish semantic correspondence.
226
+ - `section.sweep(path, options)` supports open or closed paths, degree twist, uniform/XY/per-station
227
+ scales, and an explicit compatible closed seam.
133
228
 
134
229
  ## Coordinates, units, and resolution
135
230
 
136
231
  MetaMesh uses a right-handed coordinate system with **+Z up**. Authored dimensions and curve
137
232
  tolerances are millimetres; angular arguments such as `rotate` use degrees.
138
- Pure [`rotate2`](../reference/geometry/rotate2.md) and transform-chain rotations also take degrees.
233
+ Pure [`rotate2`](../reference/geometry/rotate2.md) and transform-value rotations also take degrees.
139
234
  The low-level [`rotationTransform3`](../reference/geometry/rotationTransform3.md) constructor
140
235
  requires an explicit `{ degrees }` or `{ radians }` angle.
141
236
 
142
- `GeometryResolution` controls sampled curves in physical space. The default maximum chord error is
143
- `0.05 mm`, with 16–512 segments for a complete circle and no default maximum segment length. An
144
- operation-specific `segments` or `circularSegments` value takes priority, followed by its local
145
- `resolution`, and then host session defaults. A shape does not carry a sampling policy into later
146
- operations; pass the policy explicitly where needed.
237
+ `GeometryResolution` controls sampled curves in physical space. Defaults are a `0.05 mm` maximum
238
+ chord error, 16–512 segments per complete circle, and no maximum segment length. Settings apply
239
+ in this order:
240
+
241
+ 1. An operation-specific `segments` or `circularSegments` count.
242
+ 2. The operation's local `resolution`.
243
+ 3. Host session defaults.
244
+
245
+ A shape does not carry its sampling policy into later operations; pass it explicitly where needed.
147
246
 
148
247
  Use an exact segment count for intentionally faceted geometry or when two sampled contours must
149
248
  match point for point. Use physical chord and segment limits for ordinary printable curves. If a
@@ -154,16 +253,17 @@ returning a coarser shape.
154
253
  `sizing: "vertex"` uses the specified vertex radius; `"face"` compensates faceting so the faces
155
254
  meet the nominal radius. `circle` and `cylinder` support the same radial convention.
156
255
 
157
- Finishing shares `round` (radius), `chamfer` (setbacks), `smooth` (cubic setbacks), and exact
158
- `profile` points across applicable box edges, rectangle corners, and cylinder/extrusion ends.
159
- Boxes can select disjoint named edges or groups; rectangles can select individual corners.
160
- Cylinder/frustum and straight convex extrusion rims use independent `ends.bottom` and `ends.top`.
161
- Zero rounding radius, zero chamfer/smooth distance, or an all-zero distance pair leaves the
162
- selected feature untreated. Other setback pairs must have two positive values; negative and
163
- nonfinite amounts reject. Disabled extrusion end treatments retain ordinary extrusion support,
164
- including holes and twist.
165
- `attachment` maps a named or explicit shape-local anchor to a world anchor after local
166
- construction, using alignment, millimetre gap and degree spin. Section placement must stay in XY.
256
+ Finishing options share `round` (radius), `chamfer` (setbacks), `smooth` (cubic setbacks), and exact
257
+ `profile` points:
258
+
259
+ - Boxes select disjoint named edges or groups; rectangles select individual corners.
260
+ - Cylinder/frustum and straight convex extrusion rims use independent `ends.bottom` and `ends.top`.
261
+ - Zero radius, zero chamfer/smooth distance, or an all-zero distance pair leaves a feature untreated.
262
+ Other setback pairs require two positive values; negative and nonfinite amounts reject.
263
+ - Disabled extrusion end treatments retain ordinary support, including holes and twist.
264
+
265
+ `attachment` maps a shape-local anchor to a world anchor after construction, using alignment,
266
+ millimetre gap, and degree spin. It accepts named or explicit anchors; Sections must stay in XY.
167
267
 
168
268
  ## Reuse a transform across shapes and coordinates
169
269
 
@@ -186,7 +286,7 @@ export const placedDirection = placement.applyDirection([10, 0, 0]); // approxim
186
286
 
187
287
 
188
288
  Pass a transform directly to `solid.transform(placement)`, `section.transform(placement)` and
189
- matching path helpers. `toMatrix()` supplies a canonical matrix when another system needs it.
289
+ matching path helpers. `toData()` supplies a canonical matrix when another system needs it.
190
290
  Construct the placement once and reuse it across point collections.
191
291
 
192
292
  `current.andThen(next)` applies `current` first and `next` second, accepting another chain or a
@@ -196,23 +296,43 @@ return new chains, so shared placements can branch safely.
196
296
  Use `rotate(degrees, { pivot })` or `scale(factors, { pivot })` to work around a world-space pivot after
197
297
  the preceding operations. In 3D, `rotate` takes XYZ Euler degrees, applied about global X, Y, then
198
298
  Z; `rotateAxis(axis, degrees, { pivot })` normalizes its nonzero axis. Omitted pivots use the
199
- coordinate origin. Uniform and per-axis scales
200
- must be finite and nonzero; negative factors reflect. Nonfinite inputs, invalid axes, and singular
201
- matrices throw `GeometryError`.
299
+ coordinate origin. Uniform and per-axis scales must be finite and nonzero; negative factors reflect.
300
+ Nonfinite inputs, invalid axes, and singular matrices throw `GeometryError`.
202
301
 
203
302
  `applyPoint` includes translation. `applyDirection` excludes translation and preserves scale;
204
303
  its result is not normalized. `applyNormal` applies the inverse transpose and returns a unit normal,
205
304
  including under nonuniform scaling; it rejects zero normals. All three return fluent vectors.
206
305
 
207
- `Transform2` works directly with Sections and pure XY helpers; its `Transform2Matrix` is the same
306
+ `Transform2` works directly with Sections and pure XY helpers; its `Transform2Data` is the same
208
307
  canonical 3x3 representation throughout. Use `to3D()` when that XY placement
209
308
  also needs to position a Solid or 3D path. The reverse `to2D()` conversion rejects transforms
210
309
  that move the XY plane or collapse its dimensions; it does not project 3D points.
211
310
  See the [2D placement recipe](recipes.md#reuse-a-2d-placement).
212
311
 
312
+ ### Transform composition order
313
+
213
314
  For low-level matrix interoperability, the factories accept existing canonical matrices. Use
214
315
  `transform3(frameTransform3(frame))` for an orthonormal frame. The raw constructors and
215
- `composeTransform3(after, before)` remain available; composition applies `before` first.
316
+ `composeTransform3(after, before)` remain available; composition applies `before` first:
317
+
318
+
319
+
320
+ ```ts
321
+ import { transform3 } from "@metamesh/modeling";
322
+ import { applyTransformPoint3, composeTransform3 } from "@metamesh/modeling/geometry";
323
+
324
+ const current = transform3().rotate([0, 0, 90]);
325
+ const next = transform3().translate([20, 0, 5]);
326
+ export const chainedPoint = current.andThen(next).applyPoint([10, 0, 0]);
327
+ export const composedPoint = applyTransformPoint3(
328
+ composeTransform3(next.toData(), current.toData()),
329
+ [10, 0, 0]
330
+ ); // Both results are approximately [20, 10, 5].
331
+ export const reversedPoint = next.andThen(current).applyPoint([10, 0, 0]);
332
+ // approximately [0, 30, 5]
333
+ ```
334
+
335
+
216
336
 
217
337
  ## Calculate with vectors
218
338
 
@@ -229,7 +349,7 @@ export const alignment = direction.dot([0, 0, 1]); // number
229
349
 
230
350
 
231
351
 
232
- Values snapshot their input and operations return new values. `toArray()` returns the value's
352
+ Values snapshot their input and operations return new values. `toData()` returns the value's
233
353
  frozen coordinate tuple without allocating another copy. Normalization rejects zero-length vectors;
234
354
  nonfinite coordinates, scalar parameters and overflowing results throw `GeometryError`.
235
355
 
@@ -247,11 +367,60 @@ export const perpendicular = normal.dot(tangent); // approximately 0
247
367
 
248
368
 
249
369
 
250
- The tuple arithmetic kernels remain available for dense numerical loops. Fluent values add
251
- validation and immutable object allocation; they are an authoring convenience, not a speedup.
252
- Fluent math, shape transforms and part placement accept vector values directly; geometry
253
- specifications and point collections use canonical tuples.
254
- Keep simple coordinate expressions and equations intrinsic to the model beside the model.
370
+ Fluent math, shape transforms, and part placement accept vector values directly. Serialized
371
+ geometry and low-level kernels use tuples. Keep model-specific equations beside the model.
372
+
373
+ ## Measure and compare bounds
374
+
375
+ Use [`bounds2`](../reference/geometry/bounds2.md) and
376
+ [`bounds3`](../reference/geometry/bounds3.md) for immutable axis-aligned bounds. `size()` and
377
+ `center()` return fluent vectors. `containsBounds(other)` tests positioned containment in the
378
+ same coordinate frame, including touching boundaries. It does not establish a manufacturing fit.
379
+
380
+
381
+
382
+ ```ts
383
+ import { bounds3 } from "@metamesh/modeling";
384
+ import {
385
+ extrudeMesh,
386
+ fitBounds,
387
+ layoutRow,
388
+ meshBounds,
389
+ rectangleContour,
390
+ } from "@metamesh/modeling/geometry";
391
+
392
+ export const envelope = bounds3({ min: [-10, -5, 0], max: [10, 5, 8] });
393
+ export const size = envelope.size(); // Vector3: [20, 10, 8] mm
394
+ export const center = envelope.center(); // Vector3: [0, 0, 4] mm
395
+
396
+ const mesh = extrudeMesh(rectangleContour({ size: [12, 6] }), { height: 4 });
397
+ // Mesh measurements are plain data. Wrap once for fluent queries.
398
+ export const measured = bounds3(meshBounds(mesh));
399
+ export const fits = envelope.containsBounds(measured); // true
400
+ export const data = measured.toData(); // Frozen { min, max } record for interchange.
401
+
402
+ // Collection and placement algorithms accept bounds values directly.
403
+ export const fitting = fitBounds(measured, envelope, { maxScale: 1 });
404
+ export const positions = layoutRow([measured, envelope], { gap: 2 });
405
+ ```
406
+
407
+
408
+
409
+ Factories snapshot finite, ordered coordinates with finite extents; zero extents are valid.
410
+ Alternatively construct from nonnegative dimensions with `bounds2({ size: [30, 18] })` or
411
+ `bounds3({ size: [30, 18, 8], center: false })`. Size construction centers on the origin by default;
412
+ size and min/max construction are mutually exclusive.
413
+ `min` and `max` are frozen tuples, and `toData()` returns the value's stable frozen plain record.
414
+ Path `bounds()` queries return matching fluent bounds, or `undefined` for an empty path.
415
+ Mesh and region measurements, inspection results, and engine snapshots retain plain
416
+ `Bounds2Data` or `Bounds3Data`; wrap a measurement when you need fluent queries.
417
+ Compiled Generator packages passing bounds values to host recipes or computed data require
418
+ runtime `9.0.0` or newer in major 9.
419
+
420
+ Keep [`fitBounds`](../reference/geometry/fitBounds.md) and
421
+ [`layoutRow`](../reference/geometry/layoutRow.md) as standalone algorithms: they compute placement
422
+ reports and collection layouts. Both accept values or plain records. Supply bounds after any
423
+ intended rotation; an axis-aligned box alone does not describe the underlying shape.
255
424
 
256
425
  ## SVG sections: fills and strokes are different inputs
257
426
 
@@ -296,13 +465,36 @@ one profile and fit policy across mating parts, then prove them with a short cal
296
465
  Follow [Build printable threads](https://metamesh.studio/docs/develop/printable-threads) for the illustrated workflow,
297
466
  complete source, profile and fit choices, end treatments, and links into the exact API contracts.
298
467
 
468
+ ## Check preflight guarantees
469
+
470
+ Preflights expose operation-specific checks and reports. Read their return contracts before
471
+ using a successful result as a guarantee:
472
+
473
+ - [`preflightHeightfield`](../reference/geometry/preflightHeightfield.md) checks grid dimensions,
474
+ coordinate precision, and allocation limits. It returns exact output-buffer vertex, triangle,
475
+ and byte counts without evaluating heights.
476
+ - [`preflightHelicalThreadSolidMesh`](../reference/geometry/preflightHelicalThreadSolidMesh.md)
477
+ and related thread preflights check dimensions, sampling, and conservative allocation estimates.
478
+ They return the sampling plan without constructing the final mesh or native solid.
479
+ - [`preflightSvgRegion`](../reference/geometry/preflightSvgRegion.md) parses and samples supported
480
+ SVG geometry, returning a normalized region and import diagnostics. Its counts measure the region
481
+ at the selected resolution; they do not predict later mesh allocation.
482
+
483
+ The `/geometry` preflights run without an engine and use explicit options or package defaults.
484
+ The root [`preflightThreadedRod`](../reference/model/preflightThreadedRod.md),
485
+ [`preflightInternalThreadCutter`](../reference/model/preflightInternalThreadCutter.md), and
486
+ [`preflightThreadedNut`](../reference/model/preflightThreadedNut.md) require active synchronous
487
+ model execution and use the host's resolution and limits.
488
+
489
+ Passing a preflight covers its documented checks. Construction can still fail during callback
490
+ evaluation, meshing, or native evaluation. Constructors enforce their applicable limits even when
491
+ you omit an explicit preflight; preflight is an optional planning and diagnostics step.
492
+
299
493
  ## Lifecycle and inspection
300
494
 
301
- Studio or your standalone engine owns geometry initialization, cleanup, and mesh finalization.
302
- The host owns Worker recovery, preview, and file delivery. Do not manually delete `Section` or `Solid`
303
- values. Use
304
- `inspectSection()` and `inspectSolid()` for supported bounds, topology counts, area, and volume
305
- measurements.
495
+ Studio or your standalone host owns initialization, cleanup, finalization, Worker recovery,
496
+ preview, and file delivery. Do not manually delete `Section` or `Solid` values. Use
497
+ `inspectSection()` and `inspectSolid()` for bounds, topology counts, area, and volume.
306
498
 
307
499
  Observations, including `section.toRegionData()`, require the host's active synchronous generation.
308
500
  Constructing or composing a recipe outside generation does not evaluate it.
@@ -2,9 +2,9 @@
2
2
 
3
3
  Prepare licensed font bytes and a reusable text layout before building a model outside Studio.
4
4
 
5
- Your host acquires exact licensed font bytes before synchronous generation.
6
- Studio authors use the [Font control recipe](recipes.md#text-from-a-font-parameter);
7
- standalone applications use the optional `@metamesh/modeling/text` entry point.
5
+ Load font bytes before synchronous generation. Your application supplies bytes for a font you
6
+ are licensed to use and prepares them through the optional `@metamesh/modeling/text` entry point.
7
+ In Studio, use the [Font control recipe](recipes.md#text-from-a-font-parameter).
8
8
 
9
9
  ## Install font support
10
10
 
@@ -44,11 +44,12 @@ export async function makeLabelLayout(fontBytes: Uint8Array): Promise<{
44
44
 
45
45
 
46
46
 
47
- Call `makeLabelLayout(fontBytes)` with the acquired bytes. It returns a `layout` and a separate
48
- `svg` string. The layout contains paths and metrics in Y-up millimetres. Pass the returned `layout` to
49
- [`textSection`](../reference/model/textSection.md) inside generation, then extrude its filled
50
- section with the ordinary modeling operations. A host can prepare layouts ahead of time or inject
51
- a deterministic text service and cache layouts with `computed`.
47
+ Call `makeLabelLayout(fontBytes)` with your font bytes. It returns a `layout` with paths and metrics
48
+ in Y-up millimetres, plus a separate `svg` string.
49
+
50
+ Pass the `layout` to [`textSection`](../reference/model/textSection.md) inside generation, then
51
+ extrude the filled section. Prepare layouts ahead of time, or supply a deterministic text service
52
+ and cache layouts with `computed`.
52
53
 
53
54
  The same layout options support horizontal lines or one circular line through
54
55
  [`VectorTextArcBaseline`](../reference/text/VectorTextArcBaseline.md). The