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