@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
@@ -30,43 +30,91 @@ export declare function anchor(shape: Solid | Section, name: string): Anchor3;
30
30
  */
31
31
  export declare interface Anchor3 {
32
32
  /** Unit outward normal used as the anchor's local +Z direction. */
33
- readonly direction: Vector3Tuple;
33
+ readonly direction: Vector3Data;
34
34
  /** World-space attachment position. */
35
- readonly position: Vector3Tuple;
35
+ readonly position: Vector3Data;
36
36
  /** Roll guide projected into the plane perpendicular to `direction`. */
37
- readonly up: Vector3Tuple;
37
+ readonly up: Vector3Data;
38
38
  }
39
39
 
40
- /**
41
- * Degree-based anchor attachment controls for a scoped solid.
42
- */
40
+ /** Options controlling how one anchor is attached to another. */
43
41
  export declare interface AttachOptions {
44
42
  /** Align outward directions face-to-face (`opposed`) or in parallel (`same`). */
45
43
  readonly alignment?: "opposed" | "same";
46
- /** Separation along the target anchor's outward direction in millimetres. */
44
+ /** Separation along the target anchor's outward direction in model units. */
47
45
  readonly gap?: number;
48
46
  /** Additional right-handed roll about the attached direction, in degrees. */
49
- readonly spinDegrees?: number;
47
+ readonly spin?: number;
50
48
  /** Optional numeric comparison overrides. */
51
49
  readonly tolerance?: GeometryToleranceOptions;
52
50
  }
53
51
 
54
- /** Axis-aligned bounds in two-dimensional model space. */
55
- export declare interface Bounds2 {
52
+ /** Immutable finite XY bounds in millimetres, with tuple coordinates for data interoperability. */
53
+ export declare interface Bounds2 extends Bounds2Data {
54
+ /** Returns nonnegative X/Y dimensions in millimetres, including zero extents. */
55
+ size(): Vector2;
56
+ /** Returns the midpoint in millimetres. */
57
+ center(): Vector2;
58
+ /** Tests positioned XY containment, including touching boundaries. */
59
+ containsBounds(other: Bounds2Input): boolean;
60
+ /** Returns this value's frozen plain record; repeated calls do not allocate. */
61
+ toData(): Bounds2Data;
62
+ }
63
+
64
+ /**
65
+ * Snapshots finite ordered XY bounds in millimetres as an immutable fluent value.
66
+ *
67
+ * Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
68
+ * overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
69
+ * Compiled Generator packages passing these values to host recipes or computed data require
70
+ * runtime 8.0.0 or newer in major 8.
71
+ */
72
+ export declare function bounds2(input: Bounds2Input): Bounds2;
73
+
74
+ /** Plain axis-aligned XY bounds for interchange; use bounds2 for immutable measurement methods. */
75
+ export declare interface Bounds2Data {
56
76
  /** Inclusive maximum X/Y coordinates. */
57
- readonly max: Vector2Tuple;
77
+ readonly max: Vector2Data;
58
78
  /** Inclusive minimum X/Y coordinates. */
59
- readonly min: Vector2Tuple;
79
+ readonly min: Vector2Data;
80
+ }
81
+
82
+ /** An immutable XY bounds value or its plain min/max representation. */
83
+ export declare type Bounds2Input = Bounds2 | Bounds2Data;
84
+
85
+ /** Immutable finite XYZ bounds in millimetres, with tuple coordinates for data interoperability. */
86
+ export declare interface Bounds3 extends Bounds3Data {
87
+ /** Returns nonnegative X/Y/Z dimensions in millimetres, including zero extents. */
88
+ size(): Vector3;
89
+ /** Returns the midpoint in millimetres. */
90
+ center(): Vector3;
91
+ /** Tests positioned XYZ containment, including touching boundaries. */
92
+ containsBounds(other: Bounds3Input): boolean;
93
+ /** Returns this value's frozen plain record; repeated calls do not allocate. */
94
+ toData(): Bounds3Data;
60
95
  }
61
96
 
62
- /** Axis-aligned bounds in three-dimensional model space. */
63
- export declare interface Bounds3 {
97
+ /**
98
+ * Snapshots finite ordered XYZ bounds in millimetres as an immutable fluent value.
99
+ *
100
+ * Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
101
+ * overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
102
+ * Compiled Generator packages passing these values to host recipes or computed data require
103
+ * runtime 8.0.0 or newer in major 8.
104
+ */
105
+ export declare function bounds3(input: Bounds3Input): Bounds3;
106
+
107
+ /** Plain axis-aligned XYZ bounds for interchange; use bounds3 for immutable measurement methods. */
108
+ export declare interface Bounds3Data {
64
109
  /** Inclusive maximum X/Y/Z coordinates. */
65
- readonly max: Vector3Tuple;
110
+ readonly max: Vector3Data;
66
111
  /** Inclusive minimum X/Y/Z coordinates. */
67
- readonly min: Vector3Tuple;
112
+ readonly min: Vector3Data;
68
113
  }
69
114
 
115
+ /** An immutable XYZ bounds value or its plain min/max representation. */
116
+ export declare type Bounds3Input = Bounds3 | Bounds3Data;
117
+
70
118
  /**
71
119
  * Axis-aligned box with uniform or disjoint named edge/group treatments.
72
120
  *
@@ -103,7 +151,7 @@ export declare type BoxEdgeTreatments = Readonly<
103
151
  /**
104
152
  * Dimensions, placement, and uniform or independently selected finishing for an axis-aligned box.
105
153
  */
106
- export declare interface BoxOptions extends PrimitivePlacement {
154
+ export declare interface BoxOptions extends PrimitiveAttachment {
107
155
  /** Explicit sampling ceilings for edge treatments, bounded by the host policy. */
108
156
  readonly limits?: Partial<GeometrySamplingLimits>;
109
157
  /**
@@ -112,7 +160,7 @@ export declare interface BoxOptions extends PrimitivePlacement {
112
160
  */
113
161
  readonly center?: boolean;
114
162
  /** Positive uniform size or explicit `[X, Y, Z]` extents in millimetres. */
115
- readonly size: number | Vector3Tuple;
163
+ readonly size: number | Vector3Data;
116
164
  /** Uniform treatment or independent disjoint nominal edge/group treatments. */
117
165
  readonly treatment?: EdgeTreatment | BoxEdgeTreatments;
118
166
  }
@@ -137,6 +185,13 @@ declare interface ButtressThreadProfileSpec extends ThreadProfileBaseSpec {
137
185
  readonly pressureFlankSide?: ButtressPressureFlankSide;
138
186
  }
139
187
 
188
+ /** Copies intersections along the finite directed origin-to-endpoint segment. */
189
+ export declare function castSegment(
190
+ solid: Solid,
191
+ origin: Vector3Input,
192
+ endpoint: Vector3Input,
193
+ ): readonly SolidSegmentHit[];
194
+
140
195
  /**
141
196
  * A planar edge or corner chamfer with equal or independent surface setbacks.
142
197
  */
@@ -180,7 +235,7 @@ export declare type CircleContourOptions = CircularPrimitiveOptions &
180
235
  /**
181
236
  * Circular dimensions with exactly one nominal radius or diameter.
182
237
  */
183
- export declare type CircleOptions = CircleContourOptions & PrimitivePlacement;
238
+ export declare type CircleOptions = CircleContourOptions & PrimitiveAttachment;
184
239
 
185
240
  /**
186
241
  * Tessellation controls shared by circular primitives across Geometry entry points.
@@ -200,11 +255,11 @@ export declare interface CircularPrimitiveOptions {
200
255
  }
201
256
 
202
257
  /**
203
- * Observes a solid's disconnected surface shells as session-restricted solid selections.
258
+ * Observes disconnected material pieces as session-restricted solid selections.
204
259
  *
205
- * For solids without enclosed cavities, these shells are the disconnected material islands.
206
- * Enclosed cavities produce separate inward shells with negative signed volume; these cannot
207
- * be finalized alone as manufacturing parts. This does not cut connected geometry.
260
+ * Each piece retains its enclosed cavities. A sealed hollow box is one component; adding a loose
261
+ * ball inside its cavity produces two. Recombining the pieces preserves the original material.
262
+ * This does not cut connected geometry. Containment is bounded to 2,000,000 comparisons.
208
263
  * Selection order and cardinality depend on evaluated topology. Results and recipes using them
209
264
  * can only be evaluated in this session; composition itself requires no engine.
210
265
  *
@@ -241,12 +296,16 @@ declare const computedBrand: unique symbol;
241
296
  export declare type ComputedValue<T> = T | Computed<T>;
242
297
 
243
298
  /**
244
- * A closed two-dimensional boundary whose first point is not repeated at the end.
299
+ * A sampled closed two-dimensional boundary whose first point is not repeated at the end.
245
300
  *
246
301
  * Polygon exteriors are counter-clockwise and holes are clockwise. Algorithms
247
302
  * may reject duplicate adjacent points or fewer than three effective vertices.
303
+ * Use PolygonData to assign an exterior and its holes, or ProfileContour2 for identified curve spans.
304
+ *
305
+ * @see {@link PolygonData}
306
+ * @see [ProfileContour2](/docs/reference/geometry/ProfileContour2)
248
307
  */
249
- export declare type Contour = readonly Vector2Tuple[];
308
+ export declare type Contour = readonly Vector2Data[];
250
309
 
251
310
  /** One sampled component retaining contour identities and logical point correspondence. */
252
311
  export declare interface CorrespondingComponent {
@@ -280,6 +339,20 @@ export declare type CorrespondingProfileStation = LoftPlacement & {
280
339
  readonly profile: CorrespondingProfile;
281
340
  };
282
341
 
342
+ /**
343
+ * Explicit physical sampling and allocation policy for reusable curves.
344
+ */
345
+ declare interface CurveSamplingOptions {
346
+ /** Exact segment count overrides physical criteria; curve parameters are spaced uniformly. */
347
+ readonly segments?: number;
348
+ /** Millimetre sampling policy; circularSegments applies only to arcs. */
349
+ readonly resolution?: GeometryResolution;
350
+ /** Output vertex ceiling of at least two; may only lower limits.maxPathPoints. */
351
+ readonly maxVertices?: number;
352
+ /** Explicit sampling ceilings; omitted values use package defaults without ambient state. */
353
+ readonly limits?: Partial<GeometrySamplingLimits>;
354
+ }
355
+
283
356
  /** Caller-defined periodic axial/radial profile in millimetres. */
284
357
  declare interface CustomThreadProfileSpec extends ThreadProfileBaseSpec {
285
358
  /** Selects a caller-defined periodic profile. */
@@ -288,7 +361,7 @@ declare interface CustomThreadProfileSpec extends ThreadProfileBaseSpec {
288
361
  * Open path spanning exactly `[-pitch/2, pitch/2]`, with both endpoints on the minor envelope,
289
362
  * one connected ridge, one contiguous crest, and radial zero at the major envelope.
290
363
  */
291
- readonly points: readonly Vector2Tuple[];
364
+ readonly points: readonly Vector2Data[];
292
365
  }
293
366
 
294
367
  /**
@@ -311,7 +384,7 @@ export declare function cylinder(options: CylinderOptions): Solid;
311
384
  */
312
385
  export declare type CylinderOptions = CircularPrimitiveOptions &
313
386
  RadialSizingOptions &
314
- PrimitivePlacement & {
387
+ PrimitiveAttachment & {
315
388
  /**
316
389
  * Centers the solid on the Z origin when `true`; otherwise its bottom is at `Z = 0`.
317
390
  * @defaultValue `true`
@@ -385,13 +458,13 @@ export declare type EllipseContourOptions = CircularPrimitiveOptions &
385
458
  (
386
459
  | {
387
460
  /** Positive XY radii in millimetres; mutually exclusive with size. */
388
- readonly radius: Vector2Tuple;
461
+ readonly radius: Vector2Data;
389
462
  /** Full XY extents are unavailable when radius is supplied. */
390
463
  readonly size?: never;
391
464
  }
392
465
  | {
393
466
  /** Positive full XY extents in millimetres; mutually exclusive with radius. */
394
- readonly size: Vector2Tuple;
467
+ readonly size: Vector2Data;
395
468
  /** XY radii are unavailable when size is supplied. */
396
469
  readonly radius?: never;
397
470
  }
@@ -400,7 +473,8 @@ export declare type EllipseContourOptions = CircularPrimitiveOptions &
400
473
  /**
401
474
  * Ellipse dimensions in local XY, with exactly one radii or full-size tuple.
402
475
  */
403
- export declare type EllipseOptions = EllipseContourOptions & PrimitivePlacement;
476
+ export declare type EllipseOptions = EllipseContourOptions &
477
+ PrimitiveAttachment;
404
478
 
405
479
  /**
406
480
  * Independent inward finishing on primitive or straight convex extrusion ends.
@@ -452,9 +526,9 @@ declare interface ExtrusionSamplingOptions {
452
526
  /** Operation-level physical policy over the nearest model scope. */
453
527
  readonly resolution?: GeometryResolution;
454
528
  /** Finite uniform or XY scale of the top profile; defaults to one. */
455
- readonly scaleTop?: number | Vector2Tuple;
529
+ readonly scaleTop?: number | Vector2Input;
456
530
  /** Finite rotation of the top profile about +Z, in degrees; defaults to zero. */
457
- readonly twistDegrees?: number;
531
+ readonly twist?: number;
458
532
  }
459
533
 
460
534
  /** Finalized manufacturing snapshot. Its arrays are independent of all native values. */
@@ -462,22 +536,24 @@ export declare interface FinalizedModel {
462
536
  /** Ordered finalized manufacturing parts with copied transferable arrays. */
463
537
  readonly parts: readonly FinalizedPart[];
464
538
  /** Axis-aligned XYZ bounds in millimetres. */
465
- readonly bounds: Bounds3;
539
+ readonly bounds: Bounds3Data;
466
540
  /** Aggregate counts, unique backing storage, volume, and execution timings. */
467
541
  readonly stats: {
542
+ /** Number of declared output parts, including repeated geometry instances. */
543
+ readonly partCount: number;
468
544
  /** Aggregate position-buffer vertex count. */
469
- readonly vertices: number;
545
+ readonly vertexCount: number;
470
546
  /** Aggregate indexed triangle count. */
471
- readonly triangles: number;
547
+ readonly triangleCount: number;
472
548
  /** Signed enclosed volume of all selected parts in cubic millimetres. */
473
549
  readonly volumeMm3: number;
474
550
  /** Unique transferable backing-buffer bytes, counted once across all parts. */
475
- readonly bytes: number;
551
+ readonly byteCount: number;
476
552
  /** Synchronous callback duration in milliseconds. */
477
553
  readonly buildMs: number;
478
554
  /** Manufacturing validation and buffer finalization duration in milliseconds. */
479
555
  readonly finalizationMs: number;
480
- /** Total callback and finalization duration in milliseconds. */
556
+ /** Total generation duration, including cache retention and native cleanup, in milliseconds. */
481
557
  readonly generationMs: number;
482
558
  };
483
559
  }
@@ -495,13 +571,13 @@ export declare interface FinalizedPart extends TriangleMesh {
495
571
  /** A right-handed orthonormal coordinate frame expressed in world coordinates. */
496
572
  export declare interface Frame3 {
497
573
  /** World-space origin of the local frame. */
498
- readonly origin: Vector3Tuple;
574
+ readonly origin: Vector3Data;
499
575
  /** Unit vector defining the local +X axis. */
500
- readonly xAxis: Vector3Tuple;
576
+ readonly xAxis: Vector3Data;
501
577
  /** Unit vector defining the local +Y axis. */
502
- readonly yAxis: Vector3Tuple;
578
+ readonly yAxis: Vector3Data;
503
579
  /** Unit vector defining the local +Z axis. */
504
- readonly zAxis: Vector3Tuple;
580
+ readonly zAxis: Vector3Data;
505
581
  }
506
582
 
507
583
  /**
@@ -589,9 +665,9 @@ export declare interface GeometryResolution {
589
665
  /** Optional maximum sampled edge length in millimetres. */
590
666
  readonly maxSegmentLength?: number;
591
667
  /** Upper safety bound for a full circle; defaults to the selected maxCircularSegments (512 by default). */
592
- readonly maximumSegments?: number;
668
+ readonly maxSegments?: number;
593
669
  /** Lower full-circle segment count; defaults to 16 or a lower selected circular ceiling. */
594
- readonly minimumSegments?: number;
670
+ readonly minSegments?: number;
595
671
  }
596
672
 
597
673
  /** Explicit allocation ceilings for pure sampling and host-owned modeling operations. */
@@ -629,16 +705,17 @@ export declare function gridPattern(
629
705
  options: GridPatternOptions,
630
706
  ): readonly Solid[];
631
707
 
632
- /** Repeats a filled Section on a grid; placements must preserve its XY plane. */
708
+ /** Repeats a filled Section on an XY grid; any explicit frame must preserve the XY plane. */
633
709
  export declare function gridPattern(
634
710
  source: PatternSource<Section>,
635
- options: GridPatternOptions,
711
+ options: GridPatternOptions<2>,
636
712
  ): readonly Section[];
637
713
 
638
714
  /**
639
715
  * XY or XYZ grid with X varying fastest. The first item starts at the local origin.
716
+ * Dimension 2 restricts counts and spacing to XY; any frame must preserve the XY plane.
640
717
  */
641
- export declare type GridPatternOptions = {
718
+ export declare type GridPatternOptions<Dimension extends 2 | 3 = 3> = {
642
719
  /** Center the complete distribution around its local origin; defaults to false. */
643
720
  readonly center?: boolean;
644
721
  /** Optional right-handed local axes and origin for the grid. */
@@ -646,20 +723,23 @@ export declare type GridPatternOptions = {
646
723
  } & (
647
724
  | {
648
725
  /** Positive integer counts on X and Y. */
649
- readonly count: Vector2Tuple;
726
+ readonly count: Vector2Data;
650
727
  /** Signed millimetres between adjacent copies on X and Y. */
651
- readonly spacing: Vector2Tuple;
652
- }
653
- | {
654
- /** Positive integer counts on X, Y and Z. */
655
- readonly count: Vector3Tuple;
656
- /** Signed millimetres between adjacent copies on X, Y and Z. */
657
- readonly spacing: Vector3Tuple;
728
+ readonly spacing: Vector2Data;
658
729
  }
730
+ | (Dimension extends 3
731
+ ? {
732
+ /** Positive integer counts on X, Y and Z. */
733
+ readonly count: Vector3Data;
734
+ /** Signed millimetres between adjacent copies on X, Y and Z. */
735
+ readonly spacing: Vector3Data;
736
+ }
737
+ : never)
659
738
  );
660
739
 
661
740
  /**
662
741
  * Closed rectilinear top above a flat base, with uniform or explicit XY coordinates.
742
+ *
663
743
  * Samples each grid height once; center-error triangulation also samples each cell centre.
664
744
  * The retained callback must capture independent immutable inputs, not live session readers or parameters.
665
745
  *
@@ -684,7 +764,7 @@ export declare function heightfield(options: HeightfieldOptions): Solid;
684
764
  */
685
765
  export declare type HeightfieldOptions = {
686
766
  /** Absolute top Z at the supplied XY point. Every sample must be above baseZ. */
687
- readonly height: (point: Vector2Tuple) => number;
767
+ readonly height: (point: Vector2Data) => number;
688
768
  /** Flat bottom Z. Defaults to zero. */
689
769
  readonly baseZ?: number;
690
770
  /**
@@ -697,11 +777,11 @@ export declare type HeightfieldOptions = {
697
777
  } & (
698
778
  | {
699
779
  /** Positive XY footprint for uniform sampling. */
700
- readonly size: Vector2Tuple;
780
+ readonly size: Vector2Data;
701
781
  /** Exact positive integer X/Y interval counts. */
702
782
  readonly segments: readonly [x: number, y: number];
703
783
  /** Lower-left footprint XY. Omitted centers the footprint on XY. */
704
- readonly origin?: Vector2Tuple;
784
+ readonly origin?: Vector2Data;
705
785
  /** Explicit coordinates cannot be combined with uniform sampling. */
706
786
  readonly coordinates?: never;
707
787
  }
@@ -741,7 +821,7 @@ export declare interface HelicalThreadRidgeMeshOptions {
741
821
  /** Nominal major diameter before any caller-owned fit compensation. */
742
822
  readonly majorDiameter: number;
743
823
  /** Angular offset of the first start in degrees. Default: `0`. */
744
- readonly phaseDegrees?: number;
824
+ readonly phase?: number;
745
825
  /** Validated periodic profile repeated around the shaft. */
746
826
  readonly profile: ThreadProfile;
747
827
  /** Optional circular-resolution policy. */
@@ -752,7 +832,7 @@ export declare interface HelicalThreadRidgeMeshOptions {
752
832
  readonly tolerance?: GeometryToleranceOptions;
753
833
  }
754
834
 
755
- /** Conservative allocation facts resolved before constructing a direct thread solid mesh. */
835
+ /** Selected sampling counts and conservative allocation estimates, before thread mesh construction. */
756
836
  export declare interface HelicalThreadSolidMeshPreflight {
757
837
  /** Uniform axial intervals required only by a requested physical segment-length limit. */
758
838
  readonly axialIntervals: number;
@@ -783,7 +863,7 @@ export declare function hull(options: SectionHullOptions): Section;
783
863
  export declare type HullOptions =
784
864
  | {
785
865
  /** Finite millimetre XYZ points to include in the convex hull. */
786
- readonly points: readonly Vector3Tuple[];
866
+ readonly points: readonly Vector3Input[];
787
867
  /** Point input excludes solid input. */
788
868
  readonly solids?: never;
789
869
  }
@@ -859,9 +939,9 @@ export declare function implicit(options: ImplicitOptions): Solid;
859
939
  /** Positive-inside sampling, bounded to 4M native BCC grid slots and 8M field calls. */
860
940
  export declare interface ImplicitOptions {
861
941
  /** Positive-inside scalar field evaluated at finite XYZ points. */
862
- readonly field: (point: Vector3Tuple) => number;
942
+ readonly field: (point: Vector3Data) => number;
863
943
  /** Axis-aligned XYZ bounds in millimetres. */
864
- readonly bounds: Bounds3;
944
+ readonly bounds: Bounds3Data;
865
945
  /** Positive sampling edge length in millimetres. */
866
946
  readonly edgeLength: number;
867
947
  /** Field isosurface value; defaults to zero. */
@@ -898,8 +978,8 @@ export declare function inspectSolid(solid: Solid): SolidInspection;
898
978
  * @example Internal thread
899
979
  * ```ts
900
980
  * import { cylinder, internalThreadCutter } from "@metamesh/modeling";
901
- * import { createThreadProfile } from "@metamesh/modeling/geometry";
902
- * const profile = createThreadProfile({ kind: "triangular", pitch: 1.75 });
981
+ * import { threadProfile } from "@metamesh/modeling/geometry";
982
+ * const profile = threadProfile({ kind: "triangular", pitch: 1.75 });
903
983
  * const body = cylinder({ diameter: 20, height: 12, center: false });
904
984
  * const cutter = internalThreadCutter({ nominalMajorDiameter: 12, length: 12, profile });
905
985
  * body.subtract([cutter]);
@@ -949,6 +1029,122 @@ export declare function intersect(sections: readonly Section[]): Section;
949
1029
  */
950
1030
  export declare function isEmpty(shape: Solid | Section): boolean;
951
1031
 
1032
+ /** Portable local geometry; consumers own plates, holes, part declarations, and final placement. */
1033
+ export declare interface KnuckleHinge {
1034
+ /** Alternating A intervals, including the integral shaft in print-in-place and lift-off modes. */
1035
+ readonly halfA: Solid;
1036
+ /** Alternating B intervals with a face-sized running bore. */
1037
+ readonly halfB: Solid;
1038
+ /** Centered +X pin axis with +Z roll guide; opening and lift-off withdrawal are caller transforms. */
1039
+ readonly axis: Anchor3;
1040
+ }
1041
+
1042
+ /**
1043
+ * Declares separate knuckle-joint halves along the centered +X pin axis, in millimetres.
1044
+ *
1045
+ * A starts at negative X. Attach independent webs or use barrels only; caller geometry connects
1046
+ * otherwise disconnected intervals. Returns portable recipes without initializing the engine.
1047
+ * Unspecified resolution inherits the evaluating session. Axis direction is +X with +Z up.
1048
+ *
1049
+ * Barrel end chamfers affect outer rims only; webs have square edges. Consumers own plates, screw holes,
1050
+ * pin retention, fit policy, and part placement. Added mounting material must preserve the bores.
1051
+ * No opening range or collision freedom is implied for arbitrary caller attachments.
1052
+ * Compiled Generator packages using this operation require runtime 8.0.0 or newer in major 8.
1053
+ *
1054
+ * @example Integral-pin hinge with two mounting webs
1055
+ * ```ts
1056
+ * const joint = knuckleHinge({
1057
+ * mode: "print-in-place", length: 30, knuckleCount: 3,
1058
+ * barrelDiameter: 10, pinDiameter: 3, radialClearance: 0.3, axialGap: 0.4,
1059
+ * halfA: { web: { direction: "positive-y", reach: 8, zMin: -5, thickness: 2 } },
1060
+ * halfB: { web: { direction: "negative-y", reach: 8, zMin: -5, thickness: 2 } },
1061
+ * });
1062
+ * ```
1063
+ */
1064
+ export declare function knuckleHinge(
1065
+ options: KnuckleHingeOptions,
1066
+ ): KnuckleHinge;
1067
+
1068
+ /** Shared knuckle-joint dimensions in millimetres, independent of mounting geometry. */
1069
+ export declare interface KnuckleHingeBaseSpec {
1070
+ /** Total extent along the +X pin axis, centered at the origin. */
1071
+ readonly length: number;
1072
+ /** Number of equal alternating intervals, starting with half A. */
1073
+ readonly knuckleCount: number;
1074
+ /** Outside vertex-sized barrel diameter. */
1075
+ readonly barrelDiameter: number;
1076
+ /** Vertex-sized shaft diameter, including an externally supplied shaft. */
1077
+ readonly pinDiameter: number;
1078
+ /** Nonnegative per-side radial allowance; bores circumscribe this running envelope. */
1079
+ readonly radialClearance: number;
1080
+ /** Nonnegative total air gap between each neighboring pair of knuckle ends. */
1081
+ readonly axialGap: number;
1082
+ }
1083
+
1084
+ /** Optional mounting and outer-rim treatment for one knuckle owner. */
1085
+ export declare interface KnuckleHingeHalfOptions {
1086
+ /** Omit for barrels only. Each interval receives one web; disconnected intervals need caller geometry. */
1087
+ readonly web?: KnuckleHingeWeb;
1088
+ /** 45° setback in millimetres at both ends of every barrel; defaults to 0. */
1089
+ readonly barrelChamfer?: number;
1090
+ }
1091
+
1092
+ /** Joint declaration with independent attachments; unspecified sampling inherits the evaluating host. */
1093
+ export declare type KnuckleHingeOptions = KnuckleHingeSpec &
1094
+ KnuckleHingeSamplingOptions & {
1095
+ /** Optional attachment and rim treatment for A, which owns an integral pin when present. */
1096
+ readonly halfA?: KnuckleHingeHalfOptions;
1097
+ /** Optional attachment and rim treatment for B, which always carries a running bore. */
1098
+ readonly halfB?: KnuckleHingeHalfOptions;
1099
+ };
1100
+
1101
+ /** Shared circular sampling for barrels, shafts, and bores. */
1102
+ export declare interface KnuckleHingeSamplingOptions {
1103
+ /** Exact full-circle count, divisible by four and at least four; overrides adaptive sampling. */
1104
+ readonly segments?: number;
1105
+ /** Physical tessellation policy. Exact circular counts must also be divisible by four. */
1106
+ readonly resolution?: GeometryResolution;
1107
+ /** Explicit allocation ceilings; defaults to the pure geometry sampling limits. */
1108
+ readonly limits?: Partial<GeometrySamplingLimits>;
1109
+ }
1110
+
1111
+ /**
1112
+ * Knuckle-joint construction modes and interval ownership.
1113
+ *
1114
+ * Print-in-place requires an odd count of at least three: A owns both
1115
+ * end anchors and the entire shaft. Inserted-pin bores both halves and supplies no shaft.
1116
+ * Lift-off requires exactly two intervals; A's integral pin enters B without a far anchor.
1117
+ */
1118
+ export declare type KnuckleHingeSpec = KnuckleHingeBaseSpec &
1119
+ (
1120
+ | {
1121
+ /** Captive integral shaft or bores for an externally supplied pin. */
1122
+ readonly mode: "print-in-place" | "inserted-pin";
1123
+ /** Engagement applies only to lift-off construction. */
1124
+ readonly pinEngagement?: never;
1125
+ }
1126
+ | {
1127
+ /** Detachable socket on a finite integral pin. */
1128
+ readonly mode: "lift-off";
1129
+ /** Lift-off has one fixed interval and one removable interval. */
1130
+ readonly knuckleCount: 2;
1131
+ /** Positive axial engagement into B, no greater than its knuckle length. */
1132
+ readonly pinEngagement: number;
1133
+ }
1134
+ );
1135
+
1136
+ /** Rectangular connection from the axis into a caller-owned mounting body, in millimetres. */
1137
+ export declare interface KnuckleHingeWeb {
1138
+ /** Direction from the pin axis; independently chosen for each half. */
1139
+ readonly direction: "positive-y" | "negative-y";
1140
+ /** Positive distance from the axis to the web's far edge. Overlap into the mounting body. */
1141
+ readonly reach: number;
1142
+ /** Lower-face Z coordinate in the pin-centered frame, in millimetres. Must overlap the barrel's interior. */
1143
+ readonly zMin: number;
1144
+ /** Positive thickness along +Z. Webs have square edges and span their own barrel intervals. */
1145
+ readonly thickness: number;
1146
+ }
1147
+
952
1148
  /**
953
1149
  * Repeats one solid along a normalized direction.
954
1150
  *
@@ -962,18 +1158,19 @@ export declare function linearPattern(
962
1158
  options: LinearPatternOptions,
963
1159
  ): readonly Solid[];
964
1160
 
965
- /** Repeats a filled Section; every placement must preserve its XY plane. */
1161
+ /** Repeats a filled Section along an XY direction, defaulting to +X. */
966
1162
  export declare function linearPattern(
967
1163
  source: PatternSource<Section>,
968
- options: LinearPatternOptions,
1164
+ options: LinearPatternOptions<2>,
969
1165
  ): readonly Section[];
970
1166
 
971
1167
  /**
972
1168
  * Equal linear intervals determined by exactly two of count, spacing and total length.
1169
+ * Dimension defaults to 3; Section patterns use 2 and accept XY vector directions.
973
1170
  */
974
- export declare type LinearPatternOptions = {
1171
+ export declare type LinearPatternOptions<Dimension extends 2 | 3 = 3> = {
975
1172
  /** Direction of repetition; magnitude is ignored. Defaults to +X. */
976
- readonly direction?: Vector3Tuple;
1173
+ readonly direction?: Dimension extends 2 ? Vector2Input : Vector3Input;
977
1174
  } & (
978
1175
  | {
979
1176
  /** Positive copy count, including the original. */
@@ -1079,10 +1276,13 @@ export declare type LoftPlacement =
1079
1276
  */
1080
1277
  export declare type LoftStation = LoftPlacement & {
1081
1278
  /** Filled Section recipe or ordered XY boundary point data. */
1082
- readonly profile: Section | Contour;
1279
+ readonly profile: Section | Path2Input;
1083
1280
  };
1084
1281
 
1085
- /** Explicit family matching on a shared physical span grid using session or operation resolution. */
1282
+ /**
1283
+ * Matches a profile family using operation settings over host resolution and limits.
1284
+ * Requires active synchronous model execution. Use Geometry's matchProfiles for standalone preparation.
1285
+ */
1086
1286
  export declare function matchProfiles(
1087
1287
  profiles: readonly Profile[],
1088
1288
  options?: MatchProfilesOptions,
@@ -1138,8 +1338,110 @@ export declare interface PartOptions {
1138
1338
  readonly color?: string;
1139
1339
  }
1140
1340
 
1141
- /** An ordered, open sequence of two-dimensional points. */
1142
- export declare type Path2 = readonly Vector2Tuple[];
1341
+ /** Immutable directed XY polyline. Closure is explicit and does not imply a filled Section. */
1342
+ export declare interface Path2 {
1343
+ /** Coordinate dimension; identifies planar paths even when empty. */
1344
+ readonly dimension: 2;
1345
+ /** Whether traversal includes the last-to-first edge. */
1346
+ readonly closed: boolean;
1347
+ /** Returns complete deeply frozen path data, including dimension and closure. Repeated calls do not allocate. */
1348
+ toData(): Path2Data;
1349
+ /** Total sampled edge length in model units, including the closing edge when closed. */
1350
+ length(): number;
1351
+ /** Immutable axis-aligned bounds, or undefined for an empty path. */
1352
+ bounds(): Bounds2 | undefined;
1353
+ /** Finds the nearest edge location; requires at least two vertices. */
1354
+ closestPoint(point: Vector2Input): PathLocation<Vector2>;
1355
+ /** Applies an XY placement without reordering traversal, including after reflection. */
1356
+ transform(placement: Transform2Input): Path2;
1357
+ /** Reverses vertex order and traversal; neither the source nor its coordinates are mutated. */
1358
+ reverse(): Path2;
1359
+ /** Returns a path sampled at equal arc lengths. Corners may be bridged; closure is preserved. */
1360
+ resample(options?: PathResamplingOptions): Path2;
1361
+ }
1362
+
1363
+ /**
1364
+ * Snapshots finite XY coordinates as an immutable sampled path, independent of engine initialization.
1365
+ *
1366
+ * Open paths may be empty or have one point; closed paths need three vertices and omit a duplicated
1367
+ * seam. Repeated adjacent vertices are retained. No winding normalization or filling is performed.
1368
+ * Malformed dimensions or topology throw INVALID_ARGUMENT; nonfinite coordinates or measurement
1369
+ * overflow throw NON_FINITE_VALUE; exhausted allocation ceilings throw COMPLEXITY_LIMIT GeometryError.
1370
+ * A path input retains its closure. Limits bound construction only; resampling takes its own limits.
1371
+ *
1372
+ * Use `toData()` for a frozen record that restores coordinates, closure, and dimension together.
1373
+ */
1374
+ export declare function path2(input: Path2Input, options?: PathOptions): Path2;
1375
+
1376
+ /** Complete plain XY path representation, including topology and empty-path dimensional identity. */
1377
+ export declare interface Path2Data {
1378
+ /** Coordinate dimension, retained even when points is empty. */
1379
+ readonly dimension: 2;
1380
+ /** Frozen or caller-owned XY coordinates; closed paths omit a duplicated seam. */
1381
+ readonly points: readonly Vector2Data[];
1382
+ /** Whether traversal includes the last-to-first edge. */
1383
+ readonly closed: boolean;
1384
+ }
1385
+
1386
+ /** A matching path value, complete plain path data, or a collection of vectors. */
1387
+ export declare type Path2Input = Path2 | Path2Data | readonly Vector2Input[];
1388
+
1389
+ /** Immutable directed XYZ polyline; it represents sampled edges, not an analytic curve. */
1390
+ export declare interface Path3 {
1391
+ /** Coordinate dimension; identifies spatial paths even when empty. */
1392
+ readonly dimension: 3;
1393
+ /** Whether traversal includes the last-to-first edge. */
1394
+ readonly closed: boolean;
1395
+ /** Returns complete deeply frozen path data, including dimension and closure. Repeated calls do not allocate. */
1396
+ toData(): Path3Data;
1397
+ /** Total sampled edge length in model units, including the closing edge when closed. */
1398
+ length(): number;
1399
+ /** Immutable axis-aligned bounds, or undefined for an empty path. */
1400
+ bounds(): Bounds3 | undefined;
1401
+ /** Finds the nearest edge location; requires at least two vertices. */
1402
+ closestPoint(point: Vector3Input): PathLocation<Vector3>;
1403
+ /** Applies an XYZ placement without changing traversal order or closure. */
1404
+ transform(placement: Transform3Input): Path3;
1405
+ /** Reverses vertex order and traversal without mutating the source. */
1406
+ reverse(): Path3;
1407
+ /** Returns a path sampled at equal arc lengths. Corners may be bridged; closure is preserved. */
1408
+ resample(options?: PathResamplingOptions): Path3;
1409
+ }
1410
+
1411
+ /**
1412
+ * Snapshots finite XYZ coordinates as an immutable sampled path with the same closure, seam,
1413
+ * allocation and error rules as path2. Analytic curves must be sampled explicitly first.
1414
+ *
1415
+ * Use `toData()` for a frozen record that restores coordinates, closure, and dimension together.
1416
+ *
1417
+ * @see {@link path2} for shared construction rules.
1418
+ */
1419
+ export declare function path3(input: Path3Input, options?: PathOptions): Path3;
1420
+
1421
+ /** Complete plain XYZ path representation, including topology and empty-path dimensional identity. */
1422
+ export declare interface Path3Data {
1423
+ /** Coordinate dimension, retained even when points is empty. */
1424
+ readonly dimension: 3;
1425
+ /** Frozen or caller-owned XYZ coordinates; closed paths omit a duplicated seam. */
1426
+ readonly points: readonly Vector3Data[];
1427
+ /** Whether traversal includes the last-to-first edge. */
1428
+ readonly closed: boolean;
1429
+ }
1430
+
1431
+ /** A matching path value, complete plain path data, or a collection of vectors. */
1432
+ export declare type Path3Input = Path3 | Path3Data | readonly Vector3Input[];
1433
+
1434
+ /** Nearest location on a sampled boundary, rather than inside a filled shape or on an analytic curve. */
1435
+ export declare interface PathLocation<Point extends Vector2 | Vector3> {
1436
+ /** Immutable position on the selected edge. */
1437
+ readonly point: Point;
1438
+ /** Euclidean distance from the query in model units. */
1439
+ readonly distance: number;
1440
+ /** Starting vertex of the selected edge; ties keep the first edge in traversal order. */
1441
+ readonly edgeIndex: number;
1442
+ /** Clamped fraction along that edge, not the whole path's normalized arc length. */
1443
+ readonly fraction: number;
1444
+ }
1143
1445
 
1144
1446
  /**
1145
1447
  * Supplies a profile-X orientation guide for each original normalized sweep station.
@@ -1149,9 +1451,17 @@ export declare type Path2 = readonly Vector2Tuple[];
1149
1451
  * @returns A finite guide vector that is not parallel to the local path tangent.
1150
1452
  */
1151
1453
  export declare type PathNormalGuide = (
1152
- point: Vector3Tuple,
1454
+ point: Vector3Data,
1153
1455
  index: number,
1154
- ) => Vector3Tuple;
1456
+ ) => Vector3Input;
1457
+
1458
+ /** Topology and allocation ceiling for an immutable sampled path. */
1459
+ export declare interface PathOptions {
1460
+ /** Connects the last vertex to the first; closed paths omit the repeated seam. Defaults to false. */
1461
+ readonly closed?: boolean;
1462
+ /** Construction point ceiling; defaults to package sampling limits. Later sampling has its own options. */
1463
+ readonly limits?: Partial<GeometrySamplingLimits>;
1464
+ }
1155
1465
 
1156
1466
  /**
1157
1467
  * Physical arc-length copies along a sampled path, with optional tangent orientation.
@@ -1163,17 +1473,17 @@ export declare type PathNormalGuide = (
1163
1473
  */
1164
1474
  export declare function pathPattern(
1165
1475
  source: PatternSource,
1166
- path: readonly Vector3Tuple[],
1476
+ path: Path3Input,
1167
1477
  options: PathPatternOptions,
1168
1478
  ): readonly Solid[];
1169
1479
 
1170
1480
  /**
1171
- * Repeats a filled Section along a sampled XY path at Z=0. Fixed orientation preserves XY;
1172
- * tangent orientation maps +Z to the tangent and rejects when that leaves the plane.
1481
+ * Repeats a filled Section along a sampled XY path. Tangent orientation maps local +X
1482
+ * to the path tangent counterclockwise, preserving the XY plane.
1173
1483
  */
1174
1484
  export declare function pathPattern(
1175
1485
  source: PatternSource<Section>,
1176
- path: readonly Vector3Tuple[],
1486
+ path: Path2Input,
1177
1487
  options: PathPatternOptions,
1178
1488
  ): readonly Section[];
1179
1489
 
@@ -1181,12 +1491,18 @@ export declare function pathPattern(
1181
1491
  export declare interface PathPatternOptions {
1182
1492
  /** Positive number of copies; open paths include both endpoints when greater than one. */
1183
1493
  readonly count: number;
1184
- /** Include the closing edge without duplicating the seam; defaults to false. */
1494
+ /** Raw point closure defaults to false; a path value supplies closure and rejects conflicts. */
1185
1495
  readonly closed?: boolean;
1186
- /** Preserve the source orientation, or align its +Z to the path tangent; defaults to fixed. */
1496
+ /** Preserve orientation, or align local +X for Sections / +Z for Solids to the tangent. Defaults to fixed. */
1187
1497
  readonly orientation?: "fixed" | "tangent";
1188
1498
  }
1189
1499
 
1500
+ /** Equal arc-length sampling; the path itself owns whether its closing edge is included. */
1501
+ export declare interface PathResamplingOptions extends CurveSamplingOptions {
1502
+ /** Exact arc-length intervals; closed paths need at least three. Otherwise physical resolution or the effective source edge count controls sampling. */
1503
+ readonly segments?: number;
1504
+ }
1505
+
1190
1506
  /**
1191
1507
  * One immutable shape, or a synchronous factory called once per copy in index order.
1192
1508
  */
@@ -1208,13 +1524,14 @@ export declare interface Pivot3Options {
1208
1524
  /** A world-space cutting plane, retaining the half-space in the normal's direction. */
1209
1525
  export declare interface PlaneOptions {
1210
1526
  /** Finite nonzero plane normal; magnitude does not affect the plane. */
1211
- readonly normal: Vector3Tuple;
1527
+ readonly normal: Vector3Input;
1212
1528
  /** Signed millimetre distance from the origin along the unit normal. Defaults to zero. */
1213
1529
  readonly offset?: number;
1214
1530
  }
1215
1531
 
1216
1532
  /**
1217
1533
  * Fills one closed millimetre XY outline, explicit outer/hole topology, or compound contours.
1534
+ *
1218
1535
  * Closing edges are implicit. Compound contours use nonzero fill unless selected otherwise.
1219
1536
  * Explicit topology must be simple and disjoint; compound winding may resolve overlaps.
1220
1537
  *
@@ -1223,14 +1540,17 @@ export declare interface PlaneOptions {
1223
1540
  * polygon([[0, 0], [20, 0], [10, 12]]).extrude({ height: 3 });
1224
1541
  * ```
1225
1542
  */
1226
- export declare function polygon(input: Contour | PolygonOptions): Section;
1543
+ export declare function polygon(input: Path2Input | PolygonOptions): Section;
1227
1544
 
1228
1545
  /**
1229
- * One bounded two-dimensional polygon.
1546
+ * One filled two-dimensional polygon with an exterior and optional holes.
1230
1547
  *
1231
1548
  * `outer` is counter-clockwise and each hole is clockwise. Boundary arrays omit
1232
1549
  * their duplicated closing point. Holes must lie inside `outer` and must not
1233
1550
  * intersect each other or the exterior.
1551
+ *
1552
+ * @see {@link Contour}
1553
+ * @see {@link RegionData}
1234
1554
  */
1235
1555
  export declare interface PolygonData {
1236
1556
  /** Clockwise interior boundaries, each omitting its duplicated closing point. */
@@ -1243,9 +1563,9 @@ export declare interface PolygonData {
1243
1563
  export declare type PolygonOptions =
1244
1564
  | {
1245
1565
  /** One simple exterior boundary, normalized to counterclockwise winding. */
1246
- readonly outer: Contour;
1566
+ readonly outer: Path2Input;
1247
1567
  /** Disjoint simple holes inside the exterior; normalized to clockwise winding. */
1248
- readonly holes?: readonly Contour[];
1568
+ readonly holes?: readonly Path2Input[];
1249
1569
  /** Explicit topology excludes compound contours. */
1250
1570
  readonly contours?: never;
1251
1571
  /** Explicit topology determines fill without a winding rule. */
@@ -1255,7 +1575,7 @@ export declare type PolygonOptions =
1255
1575
  }
1256
1576
  | {
1257
1577
  /** Compound boundaries; may overlap or contain holes according to the fill rule. */
1258
- readonly contours: readonly Contour[];
1578
+ readonly contours: readonly Path2Input[];
1259
1579
  /** Winding interpretation; defaults to nonzero. An empty list creates an empty Section. */
1260
1580
  readonly fillRule?: "nonzero" | "evenodd";
1261
1581
  /** Compound contours exclude explicit topology. */
@@ -1278,41 +1598,57 @@ export declare type PolygonOptions =
1278
1598
  readonly fillRule?: never;
1279
1599
  };
1280
1600
 
1281
- /** Allocation-free internal-thread facts. */
1601
+ /**
1602
+ * Checks compensated cutter dimensions and conservative mesh estimates against host output limits.
1603
+ *
1604
+ * Requires active synchronous model execution and uses its resolution and limits. Estimates include
1605
+ * the one-pitch extension beyond each requested face, without mesh buffers or native objects.
1606
+ * Mesh validity, native construction, and aggregate output limits are checked later.
1607
+ *
1608
+ * @see {@link internalThreadCutter}
1609
+ */
1282
1610
  export declare function preflightInternalThreadCutter(
1283
1611
  options: InternalThreadCutterOptions,
1284
1612
  ): HelicalThreadSolidMeshPreflight;
1285
1613
 
1286
- /** Allocation-free nut/cutter facts. */
1614
+ /**
1615
+ * Checks nut dimensions, chamfers, end-face wall, and the extended compensated cutter's allocation plan.
1616
+ *
1617
+ * Requires active synchronous model execution and uses its resolution and limits, without mesh
1618
+ * buffers or native objects. Returned thread estimates cover the cutter, excluding the body and
1619
+ * Boolean result. Mesh validity, native construction, and aggregate output limits are checked later.
1620
+ *
1621
+ * @see {@link threadedNut}
1622
+ */
1287
1623
  export declare function preflightThreadedNut(
1288
1624
  options: ThreadedNutOptions,
1289
1625
  ): ThreadedNutPreflight;
1290
1626
 
1291
- /** Allocation-free external-thread facts. */
1627
+ /**
1628
+ * Checks compensated rod dimensions and conservative mesh estimates against host output limits.
1629
+ *
1630
+ * Requires active synchronous model execution and uses its resolution and limits. Returns selected
1631
+ * sampling and conservative row/triangle estimates without mesh buffers or native objects.
1632
+ * Mesh validity, native construction, and aggregate output limits are checked later.
1633
+ *
1634
+ * @see {@link threadedRod}
1635
+ */
1292
1636
  export declare function preflightThreadedRod(
1293
1637
  options: ThreadedRodOptions,
1294
1638
  ): HelicalThreadSolidMeshPreflight;
1295
1639
 
1296
- /** Placement shared by solid and filled-section factories. */
1297
- export declare interface PrimitivePlacement {
1298
- /** Applied after local construction; Section placement must preserve the XY plane. */
1299
- readonly placement?: PrimitivePlacementOptions;
1640
+ /** Anchor attachment shared by solid and filled-section factories. */
1641
+ export declare interface PrimitiveAttachment {
1642
+ /** Applied after local construction; Section attachment must preserve the XY plane. */
1643
+ readonly attachment?: PrimitiveAttachmentOptions;
1300
1644
  }
1301
1645
 
1302
1646
  /** Maps an explicit or named shape-local attachment anchor onto a world-space anchor. */
1303
- export declare interface PrimitivePlacementOptions {
1647
+ export declare interface PrimitiveAttachmentOptions extends AttachOptions {
1304
1648
  /** Shape-local source frame or a named primitive anchor such as bottom. */
1305
1649
  readonly source: Anchor3 | string;
1306
1650
  /** World-space target frame in millimetres. */
1307
1651
  readonly target: Anchor3;
1308
- /** Align outward directions face-to-face or in parallel. Defaults to opposed. */
1309
- readonly alignment?: "opposed" | "same";
1310
- /** Finite separation along the target direction in millimetres. Defaults to zero. */
1311
- readonly gap?: number;
1312
- /** Finite additional roll around the attached direction in degrees. Defaults to zero. */
1313
- readonly spinDegrees?: number;
1314
- /** Explicit numeric comparison overrides for anchor normalization. */
1315
- readonly tolerance?: GeometryToleranceOptions;
1316
1652
  }
1317
1653
 
1318
1654
  /**
@@ -1336,7 +1672,13 @@ export declare interface PrintableThreadFitPolicy {
1336
1672
  readonly maleRadialInset: number;
1337
1673
  }
1338
1674
 
1339
- /** An explicit component/contour/span topology, before shared family sampling. */
1675
+ /**
1676
+ * An explicit component/contour/span topology, before shared family sampling with matchProfiles.
1677
+ * Component, contour and span identities establish correspondence across a loft or sweep family.
1678
+ *
1679
+ * @see {@link CorrespondingProfile}
1680
+ * @see {@link matchProfiles}
1681
+ */
1340
1682
  export declare interface Profile {
1341
1683
  /** Ordered components with explicit contour identities. */
1342
1684
  readonly components: readonly ProfileComponent2[];
@@ -1352,7 +1694,13 @@ export declare interface ProfileComponent2 {
1352
1694
  readonly holes: readonly ProfileContour2[];
1353
1695
  }
1354
1696
 
1355
- /** Ordered, closed spans. Outer winding is CCW and hole winding is CW. */
1697
+ /**
1698
+ * An identified closed boundary of curve spans, before shared family sampling.
1699
+ * Outer winding is CCW and hole winding is CW. matchProfiles retains span identities in sampled contours.
1700
+ *
1701
+ * @see {@link Contour} for sampled point coordinates.
1702
+ * @see {@link CorrespondingContour} for sampled coordinates with correspondence metadata.
1703
+ */
1356
1704
  export declare interface ProfileContour2 {
1357
1705
  /** Stable canonical lowercase identity; unique within the containing topology or output. */
1358
1706
  readonly id: string;
@@ -1369,7 +1717,7 @@ export declare interface ProfiledEdgeTreatment {
1369
1717
  * First coordinates decrease and second coordinates increase. Cylinder/extrusion ends use
1370
1718
  * cap inset first, side setback second; planar corners use incoming then outgoing edges.
1371
1719
  */
1372
- readonly profile: readonly Vector2Tuple[];
1720
+ readonly profile: readonly Vector2Data[];
1373
1721
  }
1374
1722
 
1375
1723
  /** An identified line, circular arc, or cubic Bézier between corresponding landmarks. */
@@ -1385,33 +1733,33 @@ export declare type ProfileSpan2 = {
1385
1733
  /** Selects a straight span. */
1386
1734
  readonly kind: "line";
1387
1735
  /** Start point in millimetres. */
1388
- readonly start: Vector2Tuple;
1736
+ readonly start: Vector2Data;
1389
1737
  /** End point in millimetres. */
1390
- readonly end: Vector2Tuple;
1738
+ readonly end: Vector2Data;
1391
1739
  }
1392
1740
  | {
1393
1741
  /** Selects the geometric curve or span family. */
1394
1742
  readonly kind: "arc";
1395
1743
  /** Center point in millimetres. */
1396
- readonly center: Vector2Tuple;
1744
+ readonly center: Vector2Data;
1397
1745
  /** Circular radius in millimetres. */
1398
1746
  readonly radius: number;
1399
1747
  /** Initial counterclockwise angle in degrees. */
1400
- readonly startDegrees: number;
1748
+ readonly startAngle: number;
1401
1749
  /** Signed counterclockwise angular sweep in degrees. */
1402
- readonly sweepDegrees: number;
1750
+ readonly sweepAngle: number;
1403
1751
  }
1404
1752
  | {
1405
1753
  /** Selects a cubic Bézier span with the same coordinates as CubicBezierCurve2. */
1406
1754
  readonly kind: "cubic";
1407
1755
  /** Start point in millimetres. */
1408
- readonly start: Vector2Tuple;
1756
+ readonly start: Vector2Data;
1409
1757
  /** First control point in millimetres. */
1410
- readonly control1: Vector2Tuple;
1758
+ readonly control1: Vector2Data;
1411
1759
  /** Second control point in millimetres. */
1412
- readonly control2: Vector2Tuple;
1760
+ readonly control2: Vector2Data;
1413
1761
  /** End point in millimetres. */
1414
- readonly end: Vector2Tuple;
1762
+ readonly end: Vector2Data;
1415
1763
  }
1416
1764
  );
1417
1765
 
@@ -1421,7 +1769,7 @@ export declare type ProfileSpan2 = {
1421
1769
  * @example Six copies around Z
1422
1770
  * ```ts
1423
1771
  * const pin = cylinder({ height: 6, radius: 2 }).translate([12, 0, 0]);
1424
- * radialPattern(pin, { count: 6, axis: [0, 0, 1], angleDegrees: 60 });
1772
+ * radialPattern(pin, { count: 6, axis: [0, 0, 1], angle: 60 });
1425
1773
  * ```
1426
1774
  */
1427
1775
  export declare function radialPattern(
@@ -1429,25 +1777,31 @@ export declare function radialPattern(
1429
1777
  options: RadialPatternOptions,
1430
1778
  ): readonly Solid[];
1431
1779
 
1432
- /** Repeats a filled Section about an axis; placements must preserve its XY plane. */
1780
+ /** Repeats a filled Section counterclockwise about a fixed XY pivot, using the implicit +Z axis. */
1433
1781
  export declare function radialPattern(
1434
1782
  source: PatternSource<Section>,
1435
- options: RadialPatternOptions,
1783
+ options: RadialPatternOptions<2>,
1436
1784
  ): readonly Section[];
1437
1785
 
1438
1786
  /**
1439
- * Options for repeating one solid around an axis through a center point.
1787
+ * Degree rotations about a fixed world-space pivot; XY patterns use the implicit +Z axis.
1440
1788
  */
1441
- export declare interface RadialPatternOptions {
1442
- /** Number of solids to return, including the original. */
1789
+ export declare type RadialPatternOptions<Dimension extends 2 | 3 = 3> = {
1790
+ /** Number of shapes to return, including the original. */
1443
1791
  readonly count: number;
1444
- /** Axis of the right-handed rotation. Its magnitude is ignored. */
1445
- readonly axis: Vector3Tuple;
1446
1792
  /** Signed rotation from one copy to the next, in degrees. */
1447
- readonly angleDegrees: number;
1448
- /** Rotation center in world coordinates. Defaults to the origin. */
1449
- readonly center?: Vector3Tuple;
1450
- }
1793
+ readonly angle: number;
1794
+ /** Fixed world-space rotation pivot; defaults to the coordinate origin. */
1795
+ readonly pivot?: Dimension extends 2 ? Vector2Input : Vector3Input;
1796
+ } & (Dimension extends 2
1797
+ ? {
1798
+ /** XY rotation uses +Z; an explicit spatial axis is unavailable. */
1799
+ readonly axis?: never;
1800
+ }
1801
+ : {
1802
+ /** Axis of the right-handed rotation. Its nonzero magnitude is ignored. */
1803
+ readonly axis: Vector3Input;
1804
+ });
1451
1805
 
1452
1806
  /** Radial dimensions refer to polygon vertices or compensate faceting to meet polygon faces. */
1453
1807
  export declare type RadialSizing = "vertex" | "face";
@@ -1462,16 +1816,12 @@ export declare interface RadialSizingOptions {
1462
1816
  readonly sizing?: RadialSizing;
1463
1817
  }
1464
1818
 
1465
- /** Copies intersections along the finite directed origin-to-endpoint segment. */
1466
- export declare function rayCast(
1467
- solid: Solid,
1468
- origin: Vector3Tuple,
1469
- endpoint: Vector3Tuple,
1470
- ): readonly SolidRayHit[];
1471
-
1472
1819
  /**
1473
1820
  * Filled rectangular section with uniform or independently treated corners.
1474
1821
  *
1822
+ * Use [rectangleContour](/docs/reference/geometry/rectangleContour) for sampled boundary coordinates,
1823
+ * or [rectangleProfile](/docs/reference/geometry/rectangleProfile) to retain identified loft landmarks.
1824
+ *
1475
1825
  * @example Round the corners
1476
1826
  * ```ts
1477
1827
  * rectangle({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
@@ -1484,7 +1834,7 @@ export declare function rectangle(options: RectangleOptions): Section;
1484
1834
  */
1485
1835
  export declare interface RectangleContourOptions {
1486
1836
  /** Positive uniform size or explicit XY extents in millimetres. */
1487
- readonly size: number | Vector2Tuple;
1837
+ readonly size: number | Vector2Data;
1488
1838
  /** Center on XY; otherwise the minimum corner is the origin. Defaults to true. */
1489
1839
  readonly center?: boolean;
1490
1840
  /** Uniform treatment or four corner treatments. Exact round segments describe a complete circle and must divide by four. */
@@ -1513,9 +1863,14 @@ export declare type RectangleCornerTreatments = readonly [
1513
1863
  * Rectangle dimensions, placement and uniform or per-corner treatment.
1514
1864
  */
1515
1865
  export declare interface RectangleOptions
1516
- extends RectangleContourOptions, PrimitivePlacement {}
1866
+ extends RectangleContourOptions, PrimitiveAttachment {}
1517
1867
 
1518
- /** A two-dimensional region represented by disjoint filled polygons. */
1868
+ /**
1869
+ * A two-dimensional region represented by disjoint filled polygons.
1870
+ * Each PolygonData owns one exterior and its holes; an empty region contains no material.
1871
+ *
1872
+ * @see {@link PolygonData}
1873
+ */
1519
1874
  export declare type RegionData = readonly PolygonData[];
1520
1875
 
1521
1876
  /**
@@ -1532,13 +1887,13 @@ export declare function regularPolygon(options: RegularPolygonOptions): Section;
1532
1887
  * Regular polygon dimensions, radial convention and degree rotation.
1533
1888
  */
1534
1889
  export declare type RegularPolygonOptions = RadialSizingOptions &
1535
- PrimitivePlacement & {
1890
+ PrimitiveAttachment & {
1536
1891
  /** Positive nominal radius in millimetres, interpreted according to sizing. */
1537
1892
  readonly radius: number;
1538
1893
  /** Exact integer side count from three through 100000. */
1539
1894
  readonly sides: number;
1540
1895
  /** Counterclockwise rotation in degrees; defaults to zero with a vertex on +X. */
1541
- readonly rotationDegrees?: number;
1896
+ readonly rotation?: number;
1542
1897
  };
1543
1898
 
1544
1899
  /**
@@ -1552,7 +1907,7 @@ export declare type RegularPolygonOptions = RadialSizingOptions &
1552
1907
  *
1553
1908
  * // Contour coordinates are [radius, Z].
1554
1909
  * const [profile] = matchProfiles([rectangleProfile({ size: [4, 16], center: false })]);
1555
- * revolve(profile!, { revolveDegrees: 270 });
1910
+ * revolve(profile!, { degrees: 270 });
1556
1911
  * ```
1557
1912
  */
1558
1913
  export declare function revolve(
@@ -1565,12 +1920,14 @@ export declare function revolve(
1565
1920
  */
1566
1921
  export declare interface RevolveOptions extends CircularPrimitiveOptions {
1567
1922
  /**
1568
- * Positive angular sweep no greater than 360 degrees; partial revolutions have end caps.
1923
+ * Positive sweep in degrees, no greater than 360. Defaults to a full revolution;
1924
+ * smaller sweeps form partial revolutions with end caps.
1569
1925
  * Segment counts describe a complete circle and scale to this angular span. Native filled
1570
1926
  * revolutions require at least three sweep intervals: adaptive sampling refines to that floor,
1571
1927
  * while exact counts that imply fewer intervals reject. Pure revolveMesh supports one interval.
1928
+ * @defaultValue `360`
1572
1929
  */
1573
- readonly revolveDegrees?: number;
1930
+ readonly degrees?: number;
1574
1931
  /** Explicit output and sampling allocation ceilings. */
1575
1932
  readonly limits?: Partial<ModelingLimits>;
1576
1933
  }
@@ -1586,7 +1943,9 @@ export declare interface RoundedEdgeTreatment extends CircularPrimitiveOptions {
1586
1943
  }
1587
1944
 
1588
1945
  /**
1589
- * Immutable deferred filled XY section recipe. Construction and composition require no engine.
1946
+ * Immutable deferred filled XY section recipe.
1947
+ *
1948
+ * Construction and composition require no engine.
1590
1949
  * Ordinary recipes may be reused across sessions regardless of where constructed.
1591
1950
  * Observed components and recipes using them can only be evaluated in their originating session.
1592
1951
  * Methods leave the source unchanged; observations require a synchronous model execution.
@@ -1661,11 +2020,7 @@ export declare interface Section {
1661
2020
  /**
1662
2021
  * Sweeps this filled section using the selected frame policy and degree twist.
1663
2022
  */
1664
- sweep(
1665
- this: Section,
1666
- path: readonly Vector3Tuple[],
1667
- options?: SweepOptions,
1668
- ): Solid;
2023
+ sweep(this: Section, path: Path3Input, options?: SweepOptions): Solid;
1669
2024
  }
1670
2025
 
1671
2026
  declare const sectionBrand: unique symbol;
@@ -1674,7 +2029,7 @@ declare const sectionBrand: unique symbol;
1674
2029
  export declare type SectionHullOptions =
1675
2030
  | {
1676
2031
  /** At least three finite millimetre XY points spanning positive area. */
1677
- readonly points: readonly Vector2Tuple[];
2032
+ readonly points: readonly Vector2Input[];
1678
2033
  /** Point input excludes section input. */
1679
2034
  readonly sections?: never;
1680
2035
  }
@@ -1695,15 +2050,15 @@ export declare interface SectionInspection {
1695
2050
  /** Filled section area in square millimetres. */
1696
2051
  readonly area: number;
1697
2052
  /** Number of extracted outer and hole contours. */
1698
- readonly contours: number;
2053
+ readonly contourCount: number;
1699
2054
  /** Inclusive maximum coordinates in millimetres. */
1700
- readonly max: Vector2Tuple;
2055
+ readonly max: Vector2Data;
1701
2056
  /** Inclusive minimum coordinates in millimetres. */
1702
- readonly min: Vector2Tuple;
2057
+ readonly min: Vector2Data;
1703
2058
  /** Number of disconnected filled section components. */
1704
- readonly parts: number;
2059
+ readonly componentCount: number;
1705
2060
  /** Number of native section vertices. */
1706
- readonly vertices: number;
2061
+ readonly vertexCount: number;
1707
2062
  }
1708
2063
 
1709
2064
  /** Clipper2 join styles accepted by robust region offsets. */
@@ -1736,7 +2091,9 @@ export declare interface SmoothEdgeTreatment {
1736
2091
  }
1737
2092
 
1738
2093
  /**
1739
- * Immutable deferred solid recipe. Construction and composition require no engine.
2094
+ * Immutable deferred solid recipe.
2095
+ *
2096
+ * Construction and composition require no engine.
1740
2097
  * Ordinary recipes may be reused across sessions regardless of where constructed.
1741
2098
  * Explicit resolution settings are captured; unspecified settings inherit the evaluating host's defaults.
1742
2099
  * Observed components and recipes using them can only be evaluated in their originating session.
@@ -1777,6 +2134,8 @@ export declare interface Solid {
1777
2134
  mirror(this: Solid, normal: Vector3Input): Solid;
1778
2135
  /** Applies a reusable XYZ placement or canonical row-major matrix. */
1779
2136
  transform(this: Solid, placement: Transform3Input): Solid;
2137
+ /** Copies manufacturing mesh buffers for interchange; requires an active model execution. */
2138
+ toTriangleMesh(this: Solid): TriangleMesh;
1780
2139
  /**
1781
2140
  * Robust difference; an empty cutter array preserves the source.
1782
2141
  */
@@ -1801,8 +2160,8 @@ export declare interface Solid {
1801
2160
  target: Anchor3,
1802
2161
  options?: AttachOptions,
1803
2162
  ): Solid;
1804
- /** Replaces native tolerance on an immutable copy; zero selects the kernel minimum. */
1805
- setTolerance(this: Solid, tolerance: number): Solid;
2163
+ /** Returns an immutable copy with this native tolerance; zero selects the kernel minimum. */
2164
+ withTolerance(this: Solid, tolerance: number): Solid;
1806
2165
  /** Projects this solid into a filled XY section. */
1807
2166
  projectSection(this: Solid): Section;
1808
2167
  /** Takes a filled horizontal slice at Z millimetres. */
@@ -1835,11 +2194,11 @@ export declare interface SolidInspection {
1835
2194
  /** Whether this native solid contains no material. */
1836
2195
  readonly isEmpty: boolean;
1837
2196
  /** Inclusive maximum coordinates in millimetres. */
1838
- readonly max: Vector3Tuple;
2197
+ readonly max: Vector3Data;
1839
2198
  /** Inclusive minimum coordinates in millimetres. */
1840
- readonly min: Vector3Tuple;
1841
- /** Number of connected surface shells; inward cavity shells count separately. */
1842
- readonly parts: number;
2199
+ readonly min: Vector3Data;
2200
+ /** Number of disconnected material components, each retaining enclosed cavities. */
2201
+ readonly componentCount: number;
1843
2202
  /** Enclosed native solid volume in cubic millimetres. */
1844
2203
  readonly volume: number;
1845
2204
  /** Total native surface area in square millimetres. */
@@ -1849,15 +2208,15 @@ export declare interface SolidInspection {
1849
2208
  }
1850
2209
 
1851
2210
  /** Copied surface intersection from a finite directed segment. Distance is in millimetres. */
1852
- export declare interface SolidRayHit {
2211
+ export declare interface SolidSegmentHit {
1853
2212
  /** Copied numeric native face identity. */
1854
2213
  readonly faceId: number;
1855
- /** Distance from the ray origin in millimetres. */
2214
+ /** Distance from the segment origin in millimetres. */
1856
2215
  readonly distance: number;
1857
2216
  /** Intersection position in millimetres. */
1858
- readonly position: Vector3Tuple;
2217
+ readonly position: Vector3Data;
1859
2218
  /** Outward unit surface normal at the intersection. */
1860
- readonly normal: Vector3Tuple;
2219
+ readonly normal: Vector3Data;
1861
2220
  }
1862
2221
 
1863
2222
  /**
@@ -1874,7 +2233,7 @@ export declare function sphere(options: SphereOptions): Solid;
1874
2233
  * Exactly one radius or diameter, placement, and tessellation for an origin-centered sphere.
1875
2234
  */
1876
2235
  export declare type SphereOptions = CircularPrimitiveOptions &
1877
- PrimitivePlacement &
2236
+ PrimitiveAttachment &
1878
2237
  (
1879
2238
  | {
1880
2239
  /** Positive radius in millimetres; mutually exclusive with diameter. */
@@ -1960,7 +2319,7 @@ export declare function star(options: StarOptions): Section;
1960
2319
  /**
1961
2320
  * Alternating outer and inner vertices, centered on the XY origin.
1962
2321
  */
1963
- export declare interface StarOptions extends PrimitivePlacement {
2322
+ export declare interface StarOptions extends PrimitiveAttachment {
1964
2323
  /** Explicit sampling ceilings, bounded by the host policy. */
1965
2324
  readonly limits?: Partial<GeometrySamplingLimits>;
1966
2325
  /** Positive outer vertex radius in millimetres. */
@@ -1970,13 +2329,13 @@ export declare interface StarOptions extends PrimitivePlacement {
1970
2329
  /** Integer outer point count from three through 50000. */
1971
2330
  readonly points: number;
1972
2331
  /** Initial counterclockwise rotation in degrees; defaults to zero. */
1973
- readonly rotationDegrees?: number;
2332
+ readonly rotation?: number;
1974
2333
  }
1975
2334
 
1976
2335
  /**
1977
2336
  * Creates a centered-width native Section along a sampled XY path.
1978
2337
  *
1979
- * Shares caps, joins and physical sampling with Geometry's strokePathRegion. Native union
2338
+ * Shares caps, joins and physical sampling with Geometry's strokeRegionData. Native union
1980
2339
  * resolves overlapping stroke primitives. Session resolution and resource ceilings apply;
1981
2340
  * closed paths omit the duplicated seam. Returns an immutable deferred recipe.
1982
2341
  *
@@ -1985,30 +2344,33 @@ export declare interface StarOptions extends PrimitivePlacement {
1985
2344
  * stroke([[0, 0], [20, 0], [20, 10]], { width: 3, join: "round", cap: "round" }).extrude({ height: 2 });
1986
2345
  * ```
1987
2346
  */
1988
- export declare function stroke(path: Path2, options: StrokeOptions): Section;
2347
+ export declare function stroke(
2348
+ path: Path2Input,
2349
+ options: StrokeOptions,
2350
+ ): Section;
2351
+
2352
+ /** End-cap treatment for an open stroked path. */
2353
+ export declare type StrokeCap = "butt" | "round" | "square";
2354
+
2355
+ /** Join treatment where adjacent stroked path segments meet. */
2356
+ export declare type StrokeJoin = "bevel" | "miter" | "round";
1989
2357
 
1990
2358
  /** Physical stroke and topology controls shared by pure regions and native Sections. */
1991
2359
  export declare interface StrokeOptions {
1992
2360
  /** Explicit path, circular and expanded-profile allocation ceilings. */
1993
2361
  readonly limits?: Partial<GeometrySamplingLimits>;
1994
- /** Treat the path as a closed non-duplicated loop. Default: `false`. */
2362
+ /** Raw point closure defaults to false; a Path2 supplies its closure and rejects conflicts. */
1995
2363
  readonly closed?: boolean;
1996
2364
  /** End-cap treatment for an open path. Ignored for closed paths. Default: `butt`. */
1997
- readonly cap?: StrokePathCap;
2365
+ readonly cap?: StrokeCap;
1998
2366
  /** Corner treatment; miters exceeding SVG's default limit of 4 become bevels. Default: `miter`. */
1999
- readonly join?: StrokePathJoin;
2367
+ readonly join?: StrokeJoin;
2000
2368
  /** Physical tessellation policy for round caps and joins. */
2001
2369
  readonly resolution?: GeometryResolution;
2002
2370
  /** Positive total stroke width in millimetres, centered on the sampled path. */
2003
2371
  readonly width: number;
2004
2372
  }
2005
2373
 
2006
- /** End-cap treatment for an open stroked path. */
2007
- export declare type StrokePathCap = "butt" | "round" | "square";
2008
-
2009
- /** Join treatment where adjacent stroked path segments meet. */
2010
- export declare type StrokePathJoin = "bevel" | "miter" | "round";
2011
-
2012
2374
  /** Placement of painted SVG geometry after SVG Y-axis inversion. */
2013
2375
  export declare type SvgOrigin = "center" | "document";
2014
2376
 
@@ -2086,7 +2448,7 @@ export declare interface SvgSectionOptions {
2086
2448
  */
2087
2449
  export declare function sweep(
2088
2450
  shape: CorrespondingProfile,
2089
- path: readonly Vector3Tuple[],
2451
+ path: Path3Input,
2090
2452
  options?: SweepOptions,
2091
2453
  ): Solid;
2092
2454
 
@@ -2094,7 +2456,7 @@ export declare function sweep(
2094
2456
  * Controls shared by pure mesh construction and filled modeling sweeps.
2095
2457
  */
2096
2458
  export declare interface SweepOptions {
2097
- /** Join the path's last station to its first. Open paths retain watertight end caps. */
2459
+ /** Raw point closure defaults to false; a Path3 supplies its closure and rejects conflicts. */
2098
2460
  readonly closed?: boolean;
2099
2461
  /** Explicit output and sampling allocation ceilings. */
2100
2462
  readonly limits?: Partial<ModelingLimits>;
@@ -2103,11 +2465,11 @@ export declare interface SweepOptions {
2103
2465
  /** Physical sampling of nonzero twist; inserted stations retain authored station controls. */
2104
2466
  readonly resolution?: GeometryResolution;
2105
2467
  /** Total additional profile rotation in degrees, with progression selected by twistBy. */
2106
- readonly twistDegrees?: number;
2468
+ readonly twist?: number;
2107
2469
  /** Twist advances by physical path length (default), or normalized authored station position, including a closed seam gap. */
2108
2470
  readonly twistBy?: "length" | "stations";
2109
2471
  /** Positive uniform/XY scale, or one XY pair per path station. Defaults to one. */
2110
- readonly scale?: number | Vector2Tuple | readonly Vector2Tuple[];
2472
+ readonly scale?: number | Vector2Input | readonly Vector2Input[];
2111
2473
  /** Corresponding point-index advance at a rotationally equivalent closed seam. */
2112
2474
  readonly seamProfileOffset?: number;
2113
2475
  }
@@ -2120,13 +2482,13 @@ export declare type SweepOrientation =
2120
2482
  /** Minimizes frame rotation by parallel transport. */
2121
2483
  readonly kind: "transport";
2122
2484
  /** Initial profile +X guide, projected perpendicular to the first tangent. */
2123
- readonly initialNormal?: Vector3Tuple;
2485
+ readonly initialNormal?: Vector3Input;
2124
2486
  }
2125
2487
  | {
2126
2488
  /** Projects one fixed world-space normal at every path station. */
2127
2489
  readonly kind: "fixed-normal";
2128
2490
  /** Directed profile +X guide; must not be parallel to any local tangent. */
2129
- readonly normal: Vector3Tuple;
2491
+ readonly normal: Vector3Input;
2130
2492
  }
2131
2493
  | {
2132
2494
  /** Uses an explicitly directed normal callback at each original normalized station. */
@@ -2184,9 +2546,9 @@ declare interface ThreadBevelOptions {
2184
2546
  * @example Threaded nut
2185
2547
  * ```ts
2186
2548
  * import { threadedNut } from "@metamesh/modeling";
2187
- * import { createThreadProfile } from "@metamesh/modeling/geometry";
2549
+ * import { threadProfile } from "@metamesh/modeling/geometry";
2188
2550
  *
2189
- * const profile = createThreadProfile({ kind: "triangular", pitch: 1.75 });
2551
+ * const profile = threadProfile({ kind: "triangular", pitch: 1.75 });
2190
2552
  * threadedNut({ nominalMajorDiameter: 12, thickness: 8, width: 20, shape: "hex", profile, fit: "normal" });
2191
2553
  * ```
2192
2554
  */
@@ -2219,7 +2581,7 @@ export declare interface ThreadedNutOptions extends Omit<
2219
2581
  readonly width: number;
2220
2582
  }
2221
2583
 
2222
- /** Allocation-free body, cutter, and end-face facts resolved for a threaded nut. */
2584
+ /** Resolved body and end-face dimensions plus conservative allocation estimates for the thread cutter. */
2223
2585
  export declare interface ThreadedNutPreflight {
2224
2586
  /** Polygon segment count used by the nut body. */
2225
2587
  readonly bodySegments: number;
@@ -2231,7 +2593,7 @@ export declare interface ThreadedNutPreflight {
2231
2593
  readonly minimumBodyFaceInradius: number;
2232
2594
  /** Smallest radial wall left between the body and cutter at either requested face. */
2233
2595
  readonly minimumFaceWall: number;
2234
- /** Conservative allocation facts for the exact extended internal-thread cutter mesh. */
2596
+ /** Conservative allocation estimates for the extended cutter; excludes the body and Boolean result. */
2235
2597
  readonly thread: HelicalThreadSolidMeshPreflight;
2236
2598
  /** Start-aligned circular facet count used by the compensated thread cutter. */
2237
2599
  readonly threadCircularSegments: number;
@@ -2248,9 +2610,9 @@ export declare type ThreadedNutShape = "hex" | "round" | "square";
2248
2610
  * @example Threaded rod
2249
2611
  * ```ts
2250
2612
  * import { threadedRod } from "@metamesh/modeling";
2251
- * import { createThreadProfile } from "@metamesh/modeling/geometry";
2613
+ * import { threadProfile } from "@metamesh/modeling/geometry";
2252
2614
  *
2253
- * const profile = createThreadProfile({ kind: "triangular", pitch: 1.75 });
2615
+ * const profile = threadProfile({ kind: "triangular", pitch: 1.75 });
2254
2616
  * threadedRod({ nominalMajorDiameter: 12, length: 24, profile, fit: "normal" });
2255
2617
  * ```
2256
2618
  */
@@ -2333,7 +2695,7 @@ export declare interface ThreadProfile {
2333
2695
  /** Adjacent axial thread spacing in millimetres. */
2334
2696
  readonly pitch: number;
2335
2697
  /** Immutable open `[axial, radial]` path spanning one pitch. */
2336
- readonly points: readonly Vector2Tuple[];
2698
+ readonly points: readonly Vector2Data[];
2337
2699
  /** Axial width of the flat at the minor envelope. */
2338
2700
  readonly rootFlatWidth: number;
2339
2701
  }
@@ -2376,7 +2738,7 @@ export declare function torus(options: TorusOptions): Solid;
2376
2738
  /**
2377
2739
  * Dimensions and independent ring/profile tessellation for a torus around the Z axis.
2378
2740
  */
2379
- export declare interface TorusOptions extends PrimitivePlacement {
2741
+ export declare interface TorusOptions extends PrimitiveAttachment {
2380
2742
  /** Explicit sampling ceilings, bounded by the host policy. */
2381
2743
  readonly limits?: Partial<GeometrySamplingLimits>;
2382
2744
  /** Radius from the Z axis to the profile center, in millimetres; greater than `minorRadius`. */
@@ -2391,9 +2753,6 @@ export declare interface TorusOptions extends PrimitivePlacement {
2391
2753
  readonly resolution?: GeometryResolution;
2392
2754
  }
2393
2755
 
2394
- /** Copies a handle to manufacturing mesh buffers. */
2395
- export declare function toTriangleMesh(solid: Solid): TriangleMesh;
2396
-
2397
2756
  /** Immutable reusable XY placement. Methods apply in written order; angles are degrees. */
2398
2757
  export declare interface Transform2 {
2399
2758
  /** Applies a translation in model units after this placement. */
@@ -2413,32 +2772,33 @@ export declare interface Transform2 {
2413
2772
  /** Applies the inverse transpose and normalizes. Ignores translation; rejects zero normals. */
2414
2773
  applyNormal(normal: Vector2Input): Vector2;
2415
2774
  /** Returns the frozen canonical row-major 3x3 matrix for interchange. */
2416
- toMatrix(): Transform2Matrix;
2775
+ toData(): Transform2Data;
2417
2776
  /** Embeds this placement in XYZ, leaving Z unchanged, for solids and 3D paths. */
2418
2777
  to3D(): Transform3;
2419
2778
  }
2420
2779
 
2421
2780
  /**
2422
- * Creates an immutable XY transform, identity by default. Matrices are copied and validated.
2781
+ * Creates an immutable XY transform, identity by default.
2782
+ *
2783
+ * Values and data are copied and validated.
2423
2784
  * Pass it directly to Section.transform() and planar data helpers; to3D() explicitly crosses into XYZ.
2424
2785
  * Zero scales and singular matrices throw GeometryError; negative scales reflect.
2425
2786
  *
2787
+ * Use `toData()` for frozen matrix interchange.
2788
+ *
2426
2789
  * @example
2427
2790
  * ```ts
2428
2791
  * const placement = transform2().rotate(90).translate([10, 0]);
2429
- * placement.applyPoint([1, 0]).toArray(); // approximately [10, 1]
2792
+ * placement.applyPoint([1, 0]).toData(); // approximately [10, 1]
2430
2793
  * ```
2431
2794
  */
2432
- export declare function transform2(matrix?: Transform2Matrix): Transform2;
2433
-
2434
- /** An immutable XY transform or its canonical row-major matrix for interchange. */
2435
- export declare type Transform2Input = Transform2 | Transform2Matrix;
2795
+ export declare function transform2(input?: Transform2Input): Transform2;
2436
2796
 
2437
2797
  /**
2438
2798
  * A row-major affine 3x3 XY matrix applied to column vectors.
2439
2799
  * Translation occupies indices 2 and 5; the final row is `[0, 0, 1]`.
2440
2800
  */
2441
- export declare type Transform2Matrix = readonly [
2801
+ export declare type Transform2Data = readonly [
2442
2802
  m00: number,
2443
2803
  m01: number,
2444
2804
  m02: number,
@@ -2450,6 +2810,9 @@ export declare type Transform2Matrix = readonly [
2450
2810
  m22: number,
2451
2811
  ];
2452
2812
 
2813
+ /** An immutable XY transform or its canonical row-major matrix for interchange. */
2814
+ export declare type Transform2Input = Transform2 | Transform2Data;
2815
+
2453
2816
  /** Immutable reusable XYZ placement. Methods apply in written order; angles are degrees. */
2454
2817
  export declare interface Transform3 {
2455
2818
  /** Applies a translation in model units after this placement. */
@@ -2475,27 +2838,29 @@ export declare interface Transform3 {
2475
2838
  /** Applies the inverse transpose and normalizes. Ignores translation; rejects zero normals. */
2476
2839
  applyNormal(normal: Vector3Input): Vector3;
2477
2840
  /** Returns the frozen canonical row-major 4x4 matrix for interchange. */
2478
- toMatrix(): Transform3Matrix;
2841
+ toData(): Transform3Data;
2479
2842
  /** Restricts to XY; throws GeometryError for a plane change or singular XY restriction. */
2480
2843
  to2D(): Transform2;
2481
2844
  }
2482
2845
 
2483
2846
  /**
2484
- * Creates an immutable XYZ transform, identity by default. Matrices are copied and validated.
2847
+ * Creates an immutable XYZ transform, identity by default.
2848
+ *
2849
+ * Values and data are copied and validated.
2485
2850
  * Calls apply in written order; rotations use degrees and pivots use current world coordinates.
2486
2851
  * Zero scales, singular matrices, nonfinite inputs and zero rotation axes throw GeometryError.
2487
2852
  * Use frameTransform3(frame) as the input for existing orthonormal frame placement.
2488
2853
  *
2854
+ * Use `toData()` for frozen matrix interchange.
2855
+ * [composeTransform3](/docs/reference/geometry/composeTransform3) takes matrices in after, before order.
2856
+ *
2489
2857
  * @example
2490
2858
  * ```ts
2491
2859
  * const placement = transform3().rotate([0, 0, 90]).translate([10, 0, 0]);
2492
- * placement.applyPoint([1, 0, 0]).toArray(); // approximately [10, 1, 0]
2860
+ * placement.applyPoint([1, 0, 0]).toData(); // approximately [10, 1, 0]
2493
2861
  * ```
2494
2862
  */
2495
- export declare function transform3(matrix?: Transform3Matrix): Transform3;
2496
-
2497
- /** An immutable XYZ transform or its canonical row-major matrix for interchange. */
2498
- export declare type Transform3Input = Transform3 | Transform3Matrix;
2863
+ export declare function transform3(input?: Transform3Input): Transform3;
2499
2864
 
2500
2865
  /**
2501
2866
  * A row-major affine 4x4 matrix applied to column vectors.
@@ -2503,7 +2868,7 @@ export declare type Transform3Input = Transform3 | Transform3Matrix;
2503
2868
  * Translation occupies indices 3, 7, and 11. The final row must be
2504
2869
  * `[0, 0, 0, 1]` within the active geometry tolerance.
2505
2870
  */
2506
- export declare type Transform3Matrix = readonly [
2871
+ export declare type Transform3Data = readonly [
2507
2872
  m00: number,
2508
2873
  m01: number,
2509
2874
  m02: number,
@@ -2522,6 +2887,9 @@ export declare type Transform3Matrix = readonly [
2522
2887
  m33: number,
2523
2888
  ];
2524
2889
 
2890
+ /** An immutable XYZ transform or its canonical row-major matrix for interchange. */
2891
+ export declare type Transform3Input = Transform3 | Transform3Data;
2892
+
2525
2893
  /** Trapezoidal thread profile with a configurable included angle. */
2526
2894
  declare interface TrapezoidalThreadProfileSpec extends ThreadProfileBaseSpec {
2527
2895
  /** Selects the trapezoidal profile family. */
@@ -2532,10 +2900,11 @@ declare interface TrapezoidalThreadProfileSpec extends ThreadProfileBaseSpec {
2532
2900
  */
2533
2901
  readonly depth?: number;
2534
2902
  /**
2535
- * Included flank angle in degrees. Use `90` for printable 45-degree slopes.
2903
+ * Full angle between the flanks in degrees, from `0` inclusive to `180` exclusive.
2904
+ * Each flank uses half this angle from the radial direction; `90` gives 45-degree slopes.
2536
2905
  * @defaultValue `30`
2537
2906
  */
2538
- readonly threadAngle?: number;
2907
+ readonly includedAngle?: number;
2539
2908
  }
2540
2909
 
2541
2910
  /**
@@ -2552,7 +2921,7 @@ export declare interface TriangleMesh {
2552
2921
  * Measurements and optional edge-connected topology from one validated mesh traversal.
2553
2922
  */
2554
2923
  export declare interface TriangleMeshAnalysis extends TriangleMeshMeasurements {
2555
- /** Number of referenced edge-connected components when `includeTopology` is requested. */
2924
+ /** Number of referenced edge-connected boundary shells when `includeTopology` is requested; cavities count separately. */
2556
2925
  readonly connectedComponentCount?: number;
2557
2926
  /** Number of distinct indexed undirected edges when `includeTopology` is requested. */
2558
2927
  readonly edgeCount?: number;
@@ -2563,7 +2932,7 @@ export declare interface TriangleMeshAnalysis extends TriangleMeshMeasurements {
2563
2932
  */
2564
2933
  export declare interface TriangleMeshMeasurements {
2565
2934
  /** Axis-aligned bounds. */
2566
- readonly bounds: Bounds3;
2935
+ readonly bounds: Bounds3Data;
2567
2936
  /** Signed enclosed volume; positive values correspond to outward winding. */
2568
2937
  readonly signedVolume: number;
2569
2938
  /** Sum of all triangle areas in squared model units. */
@@ -2606,7 +2975,7 @@ export declare function tube(options: TubeOptions): Solid;
2606
2975
  * Dimensions, placement, and tessellation for a hollow Z-axis tube.
2607
2976
  */
2608
2977
  export declare interface TubeOptions
2609
- extends CircularPrimitiveOptions, PrimitivePlacement {
2978
+ extends CircularPrimitiveOptions, PrimitiveAttachment {
2610
2979
  /**
2611
2980
  * Centers the tube on the Z origin when `true`; otherwise its bottom is at `Z = 0`.
2612
2981
  * @defaultValue `true`
@@ -2660,22 +3029,26 @@ export declare interface Vector2 {
2660
3029
  /** Returns Euclidean distance to another vector in the same coordinate units. */
2661
3030
  distance(other: Vector2Input): number;
2662
3031
  /** Returns this value's frozen readonly tuple for interchange; repeated calls do not allocate. */
2663
- toArray(): Vector2Tuple;
3032
+ toData(): Vector2Data;
2664
3033
  }
2665
3034
 
2666
3035
  /**
2667
3036
  * Creates immutable XY arithmetic from a finite tuple or vector, snapshotting the coordinates.
3037
+ *
2668
3038
  * Values and results are finite. Invalid dimensions throw `INVALID_ARGUMENT`; nonfinite coordinates
2669
3039
  * and overflow throw `NON_FINITE_VALUE` GeometryError.
2670
3040
  * Use transform2().applyDirection(value) for rotations and nonuniform scaling.
3041
+ *
3042
+ * Use `toData()` for frozen tuple interchange, or
3043
+ * [normalize2](/docs/reference/geometry/normalize2) for tuple-based normalization in numerical loops.
2671
3044
  */
2672
3045
  export declare function vector2(input: Vector2Input): Vector2;
2673
3046
 
2674
- /** An XY tuple or immutable fluent vector accepted by vector operations. */
2675
- export declare type Vector2Input = Vector2Tuple | Vector2;
2676
-
2677
3047
  /** A two-dimensional Cartesian vector or point. */
2678
- export declare type Vector2Tuple = readonly [x: number, y: number];
3048
+ export declare type Vector2Data = readonly [x: number, y: number];
3049
+
3050
+ /** An XY tuple or immutable fluent vector accepted by vector operations. */
3051
+ export declare type Vector2Input = Vector2Data | Vector2;
2679
3052
 
2680
3053
  /** Immutable XYZ arithmetic; vector operations return new values and measurements return numbers. */
2681
3054
  export declare interface Vector3 {
@@ -2704,15 +3077,19 @@ export declare interface Vector3 {
2704
3077
  /** Returns Euclidean distance to another vector in the same coordinate units. */
2705
3078
  distance(other: Vector3Input): number;
2706
3079
  /** Returns this value's frozen readonly tuple for interchange; repeated calls do not allocate. */
2707
- toArray(): Vector3Tuple;
3080
+ toData(): Vector3Data;
2708
3081
  }
2709
3082
 
2710
3083
  /**
2711
3084
  * Creates immutable XYZ arithmetic from a finite tuple or vector, snapshotting the coordinates.
3085
+ *
2712
3086
  * Values and results are finite. Invalid dimensions throw `INVALID_ARGUMENT`; nonfinite coordinates
2713
3087
  * and overflow throw `NON_FINITE_VALUE` GeometryError.
2714
3088
  * Use transform3().applyDirection(value) for rotations and nonuniform scaling.
2715
3089
  *
3090
+ * Use `toData()` for frozen tuple interchange, or
3091
+ * [normalize3](/docs/reference/geometry/normalize3) for tuple-based normalization in numerical loops.
3092
+ *
2716
3093
  * @example
2717
3094
  * ```ts
2718
3095
  * const direction = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
@@ -2721,11 +3098,11 @@ export declare interface Vector3 {
2721
3098
  */
2722
3099
  export declare function vector3(input: Vector3Input): Vector3;
2723
3100
 
2724
- /** An XYZ tuple or immutable fluent vector accepted by vector operations. */
2725
- export declare type Vector3Input = Vector3Tuple | Vector3;
2726
-
2727
3101
  /** A three-dimensional Cartesian vector or point. */
2728
- export declare type Vector3Tuple = readonly [x: number, y: number, z: number];
3102
+ export declare type Vector3Data = readonly [x: number, y: number, z: number];
3103
+
3104
+ /** An XYZ tuple or immutable fluent vector accepted by vector operations. */
3105
+ export declare type Vector3Input = Vector3Data | Vector3;
2729
3106
 
2730
3107
  /**
2731
3108
  * Immutable vector layout with no browser, font parser, or kernel ownership.
@@ -2740,7 +3117,7 @@ export declare interface VectorTextLayout {
2740
3117
  /** Text measurements from the same immutable layout that supplies geometry and SVG outlines. */
2741
3118
  export declare interface VectorTextMetrics {
2742
3119
  /** Visible curve bounds after alignment, or null when the text has no ink. */
2743
- readonly bounds: Bounds2 | null;
3120
+ readonly bounds: Bounds2Data | null;
2744
3121
  /** Unaligned logical advance and negative baseline displacement in mm; arcs retain [arc length, 0]. */
2745
3122
  readonly advance: readonly [number, number];
2746
3123
  /** Maximum logical line advance in millimetres, including spaces; arc length on circular baselines. */