@metamesh/modeling 0.13.0 → 0.15.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 (740) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +67 -9
  3. package/dist/api/engine.d.ts +14 -7
  4. package/dist/api/geometry.d.ts +787 -447
  5. package/dist/api/index.d.ts +637 -250
  6. package/dist/api/text.d.ts +6 -4
  7. package/dist/docs/guides/concepts.md +135 -17
  8. package/dist/docs/guides/fonts.md +8 -0
  9. package/dist/docs/guides/fundamentals.md +8 -3
  10. package/dist/docs/guides/generation.md +6 -4
  11. package/dist/docs/guides/hosting.md +27 -14
  12. package/dist/docs/guides/recipes.md +82 -11
  13. package/dist/docs/manifest.json +1911 -856
  14. package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
  15. package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
  16. package/dist/docs/reference/engine/GenerationOptions.md +1 -1
  17. package/dist/docs/reference/engine/GeometryResource.md +1 -1
  18. package/dist/docs/reference/engine/ModelDependencies.md +1 -1
  19. package/dist/docs/reference/engine/ModelEngine.md +1 -1
  20. package/dist/docs/reference/engine/ModelEngineOptions.md +4 -8
  21. package/dist/docs/reference/engine/ModelSession.md +1 -1
  22. package/dist/docs/reference/engine/ModelSnapshot.md +20 -9
  23. package/dist/docs/reference/engine/SessionOptions.md +1 -1
  24. package/dist/docs/reference/engine/SnapshotPart.md +4 -4
  25. package/dist/docs/reference/engine/categories/host-lifecycle.md +2 -2
  26. package/dist/docs/reference/engine/createModelEngine.md +3 -3
  27. package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
  28. package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
  29. package/dist/docs/reference/engine/validateModel.md +1 -1
  30. package/dist/docs/reference/engine.md +2 -2
  31. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
  32. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +17 -4
  33. package/dist/docs/reference/geometry/{Anchor3.md → Anchor3-type.md} +9 -5
  34. package/dist/docs/reference/geometry/ArcCurve2.md +7 -7
  35. package/dist/docs/reference/geometry/ArcCurve3.md +9 -9
  36. package/dist/docs/reference/geometry/{AttachTransformOptions.md → AttachOptions.md} +14 -5
  37. package/dist/docs/reference/geometry/AxisAngleRotation3.md +6 -1
  38. package/dist/docs/reference/geometry/Bounds2.md +4 -4
  39. package/dist/docs/reference/geometry/Bounds3.md +4 -4
  40. package/dist/docs/reference/geometry/BoundsFit2.md +3 -3
  41. package/dist/docs/reference/geometry/BoundsFit3.md +3 -3
  42. package/dist/docs/reference/geometry/BoundsFitOptions.md +1 -1
  43. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +1 -1
  44. package/dist/docs/reference/geometry/BoxAnchorFace.md +8 -1
  45. package/dist/docs/reference/geometry/BoxAnchorOptions.md +8 -4
  46. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  47. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  48. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  49. package/dist/docs/reference/geometry/BoxOptions.md +10 -10
  50. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +1 -1
  51. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +1 -1
  52. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  53. package/dist/docs/reference/geometry/CircleContourOptions.md +1 -1
  54. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
  55. package/dist/docs/reference/geometry/CircularResolutionOptions.md +107 -0
  56. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +1 -1
  57. package/dist/docs/reference/geometry/ClearanceHoleFit.md +1 -1
  58. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +1 -1
  59. package/dist/docs/reference/geometry/Contour.md +3 -3
  60. package/dist/docs/reference/geometry/ContourCurve.md +1 -1
  61. package/dist/docs/reference/geometry/ContourPoint.md +1 -1
  62. package/dist/docs/reference/geometry/ContourSegment.md +1 -1
  63. package/dist/docs/reference/geometry/CorrespondingComponent.md +1 -1
  64. package/dist/docs/reference/geometry/CorrespondingContour.md +1 -1
  65. package/dist/docs/reference/geometry/CorrespondingProfile.md +1 -1
  66. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +1 -1
  67. package/dist/docs/reference/geometry/CubicBezierCurve2.md +6 -6
  68. package/dist/docs/reference/geometry/CubicBezierCurve3.md +6 -6
  69. package/dist/docs/reference/geometry/Curve2.md +1 -1
  70. package/dist/docs/reference/geometry/Curve3.md +1 -1
  71. package/dist/docs/reference/geometry/CurveSamplingOptions.md +5 -3
  72. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +3 -3
  73. package/dist/docs/reference/geometry/CylinderAnchorFace.md +8 -1
  74. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +9 -5
  75. package/dist/docs/reference/geometry/CylinderOptions.md +3 -3
  76. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +3 -3
  77. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +1 -1
  78. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +1 -1
  79. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +3 -3
  80. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +1 -1
  81. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +1 -1
  82. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +1 -1
  83. package/dist/docs/reference/geometry/CylindricalGearSpec.md +6 -6
  84. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  85. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  86. package/dist/docs/reference/geometry/EllipseContourOptions.md +3 -3
  87. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  88. package/dist/docs/reference/geometry/ExtrudeOptions.md +6 -6
  89. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +5 -5
  90. package/dist/docs/reference/geometry/FittedTextLayout.md +1 -1
  91. package/dist/docs/reference/geometry/Frame3.md +6 -6
  92. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  93. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  94. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  95. package/dist/docs/reference/geometry/GeometryResolution.md +14 -5
  96. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +1 -1
  97. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  98. package/dist/docs/reference/geometry/GridPatternOptions.md +11 -5
  99. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
  100. package/dist/docs/reference/geometry/HeightfieldOptions.md +5 -5
  101. package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
  102. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +5 -5
  103. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +6 -6
  104. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +1 -1
  105. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +7 -3
  106. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +6 -6
  107. package/dist/docs/reference/geometry/LineCurve2.md +4 -4
  108. package/dist/docs/reference/geometry/LineCurve3.md +4 -4
  109. package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -5
  110. package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
  111. package/dist/docs/reference/geometry/LoftMeshStation.md +4 -4
  112. package/dist/docs/reference/geometry/LoftOptions.md +1 -1
  113. package/dist/docs/reference/geometry/LoftPlacement.md +1 -1
  114. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +1 -1
  115. package/dist/docs/reference/geometry/MatchProfilesOptions.md +1 -1
  116. package/dist/docs/reference/geometry/MetricFastenerSize.md +1 -1
  117. package/dist/docs/reference/geometry/MetricFastenerStandard.md +1 -1
  118. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +1 -1
  119. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +1 -1
  120. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  121. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
  122. package/dist/docs/reference/geometry/Path2-type.md +192 -0
  123. package/dist/docs/reference/geometry/Path2Data.md +14 -0
  124. package/dist/docs/reference/geometry/Path2Input.md +15 -0
  125. package/dist/docs/reference/geometry/Path3-type.md +192 -0
  126. package/dist/docs/reference/geometry/Path3Data.md +14 -0
  127. package/dist/docs/reference/geometry/Path3Input.md +15 -0
  128. package/dist/docs/reference/geometry/PathFrame.md +5 -5
  129. package/dist/docs/reference/geometry/PathLocation.md +65 -0
  130. package/dist/docs/reference/geometry/PathNormalGuide.md +6 -5
  131. package/dist/docs/reference/geometry/PathOptions.md +34 -0
  132. package/dist/docs/reference/geometry/PathPatternOptions.md +3 -3
  133. package/dist/docs/reference/geometry/PathPlacement.md +4 -4
  134. package/dist/docs/reference/geometry/PathResamplingOptions.md +80 -0
  135. package/dist/docs/reference/geometry/Pivot2Options.md +26 -0
  136. package/dist/docs/reference/geometry/Pivot3Options.md +26 -0
  137. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +1 -1
  138. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +22 -22
  139. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +1 -1
  140. package/dist/docs/reference/geometry/PlanarPatchQuality.md +3 -3
  141. package/dist/docs/reference/geometry/{Polygon.md → PolygonData.md} +2 -2
  142. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +4 -4
  143. package/dist/docs/reference/geometry/PrimitiveAttachment.md +31 -0
  144. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +104 -0
  145. package/dist/docs/reference/geometry/PrintableThreadFit.md +1 -1
  146. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +1 -1
  147. package/dist/docs/reference/geometry/Profile.md +1 -1
  148. package/dist/docs/reference/geometry/ProfileComponent2.md +1 -1
  149. package/dist/docs/reference/geometry/ProfileContour2.md +1 -1
  150. package/dist/docs/reference/geometry/ProfileSpan2.md +3 -3
  151. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +3 -3
  152. package/dist/docs/reference/geometry/RackPitchDimensions.md +1 -1
  153. package/dist/docs/reference/geometry/RackPitchSpec.md +5 -5
  154. package/dist/docs/reference/geometry/RadialPatternOptions.md +17 -22
  155. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  156. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  157. package/dist/docs/reference/geometry/RectangleContourOptions.md +3 -3
  158. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +1 -1
  159. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +1 -1
  160. package/dist/docs/reference/geometry/RectangleProfileOptions.md +3 -3
  161. package/dist/docs/reference/geometry/RegionData.md +14 -0
  162. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
  163. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  164. package/dist/docs/reference/geometry/RevolveOptions.md +9 -4
  165. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  166. package/dist/docs/reference/geometry/RowLayoutOptions.md +1 -1
  167. package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
  168. package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
  169. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
  170. package/dist/docs/reference/geometry/SampledCurve2.md +4 -4
  171. package/dist/docs/reference/geometry/SampledCurve3.md +4 -4
  172. package/dist/docs/reference/geometry/SampledThreadHelices.md +3 -3
  173. package/dist/docs/reference/geometry/SideProfileCurve.md +1 -1
  174. package/dist/docs/reference/geometry/SideProfilePoint.md +1 -1
  175. package/dist/docs/reference/geometry/SideProfileSegment.md +1 -1
  176. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  177. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +3 -3
  178. package/dist/docs/reference/geometry/SphereOptions.md +3 -3
  179. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
  180. package/dist/docs/reference/geometry/StrokeCap.md +7 -0
  181. package/dist/docs/reference/geometry/StrokeJoin.md +7 -0
  182. package/dist/docs/reference/geometry/{StrokePathRegionOptions.md → StrokeOptions.md} +8 -8
  183. package/dist/docs/reference/geometry/SvgImportOptions.md +1 -1
  184. package/dist/docs/reference/geometry/SvgRegionPreflight.md +3 -3
  185. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +13 -13
  186. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +11 -11
  187. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +9 -9
  188. package/dist/docs/reference/geometry/SweepOptions.md +6 -6
  189. package/dist/docs/reference/geometry/SweepOrientation.md +7 -7
  190. package/dist/docs/reference/geometry/ThreadBevelOptions.md +1 -1
  191. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +5 -5
  192. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +1 -1
  193. package/dist/docs/reference/geometry/ThreadEndStyle.md +1 -1
  194. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +1 -1
  195. package/dist/docs/reference/geometry/ThreadHandedness.md +1 -1
  196. package/dist/docs/reference/geometry/ThreadHelixOptions.md +3 -3
  197. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
  198. package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
  199. package/dist/docs/reference/geometry/{ThreadProfile.md → ThreadProfile-type.md} +3 -3
  200. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
  201. package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
  202. package/dist/docs/reference/geometry/ThreadRole.md +1 -1
  203. package/dist/docs/reference/geometry/ThreadedNutBevel.md +1 -1
  204. package/dist/docs/reference/geometry/ThreadedNutOptions.md +6 -6
  205. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +1 -1
  206. package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
  207. package/dist/docs/reference/geometry/ThreadedRodOptions.md +6 -6
  208. package/dist/docs/reference/geometry/TorusOptions.md +8 -8
  209. package/dist/docs/reference/geometry/Transform2-type.md +255 -0
  210. package/dist/docs/reference/geometry/Transform2Input.md +19 -0
  211. package/dist/docs/reference/geometry/Transform2Matrix.md +14 -0
  212. package/dist/docs/reference/geometry/Transform3-type.md +295 -0
  213. package/dist/docs/reference/geometry/Transform3Input.md +19 -0
  214. package/dist/docs/reference/geometry/Transform3Matrix.md +17 -0
  215. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +5 -4
  216. package/dist/docs/reference/geometry/TriangleMesh.md +1 -1
  217. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +2 -2
  218. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +1 -1
  219. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
  220. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +3 -3
  221. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
  222. package/dist/docs/reference/geometry/TriangleMeshSignature.md +2 -2
  223. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +3 -3
  224. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
  225. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +1 -1
  226. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +1 -1
  227. package/dist/docs/reference/geometry/TubeOptions.md +8 -8
  228. package/dist/docs/reference/geometry/Vector2-type.md +269 -0
  229. package/dist/docs/reference/geometry/Vector2Input.md +19 -0
  230. package/dist/docs/reference/geometry/Vector2Tuple.md +14 -0
  231. package/dist/docs/reference/geometry/Vector3-type.md +281 -0
  232. package/dist/docs/reference/geometry/Vector3Input.md +19 -0
  233. package/dist/docs/reference/geometry/Vector3Tuple.md +14 -0
  234. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +3 -3
  235. package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
  236. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +1 -1
  237. package/dist/docs/reference/geometry/VectorTextMetrics.md +1 -1
  238. package/dist/docs/reference/geometry/VectorTextOptions.md +1 -1
  239. package/dist/docs/reference/geometry/add2.md +36 -0
  240. package/dist/docs/reference/geometry/add3.md +10 -6
  241. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +1 -1
  242. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +2 -2
  243. package/dist/docs/reference/geometry/{createAnchor3.md → anchor3.md} +13 -9
  244. package/dist/docs/reference/geometry/anchorFrame3.md +5 -5
  245. package/dist/docs/reference/geometry/applyTransformDirection3.md +11 -7
  246. package/dist/docs/reference/geometry/applyTransformPoint3.md +11 -7
  247. package/dist/docs/reference/geometry/attachmentTransform3.md +77 -0
  248. package/dist/docs/reference/geometry/boundsCenter.md +7 -7
  249. package/dist/docs/reference/geometry/boundsFromSize.md +7 -7
  250. package/dist/docs/reference/geometry/boundsSize.md +7 -7
  251. package/dist/docs/reference/geometry/boxAnchor3.md +10 -6
  252. package/dist/docs/reference/geometry/categories/bounds-layout.md +1 -1
  253. package/dist/docs/reference/geometry/categories/curves-paths.md +15 -10
  254. package/dist/docs/reference/geometry/categories/mechanical.md +6 -6
  255. package/dist/docs/reference/geometry/categories/meshes.md +3 -4
  256. package/dist/docs/reference/geometry/categories/pattern-placement.md +7 -7
  257. package/dist/docs/reference/geometry/categories/primitive-options.md +4 -4
  258. package/dist/docs/reference/geometry/categories/profiles-regions.md +5 -6
  259. package/dist/docs/reference/geometry/categories/resolution-errors.md +3 -2
  260. package/dist/docs/reference/geometry/categories/transforms-math.md +41 -12
  261. package/dist/docs/reference/geometry/categories/vector-import.md +5 -5
  262. package/dist/docs/reference/geometry/circleContour.md +1 -1
  263. package/dist/docs/reference/geometry/closeToAxis.md +4 -4
  264. package/dist/docs/reference/geometry/compensateThreadDiameters.md +1 -1
  265. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +5 -5
  266. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +5 -5
  267. package/dist/docs/reference/geometry/composeTransform3.md +10 -6
  268. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +10 -6
  269. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +8 -7
  270. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +4 -4
  271. package/dist/docs/reference/geometry/{createTriangleMeshSignature.md → computeTriangleMeshSignature.md} +4 -4
  272. package/dist/docs/reference/geometry/containsBounds.md +1 -1
  273. package/dist/docs/reference/geometry/contourContainsPoint.md +4 -4
  274. package/dist/docs/reference/geometry/cross2.md +36 -0
  275. package/dist/docs/reference/geometry/cross3.md +10 -6
  276. package/dist/docs/reference/geometry/cylinderAnchor3.md +10 -6
  277. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +1 -1
  278. package/dist/docs/reference/geometry/distance2.md +36 -0
  279. package/dist/docs/reference/geometry/distance3.md +36 -0
  280. package/dist/docs/reference/geometry/distributeAlongPath.md +8 -6
  281. package/dist/docs/reference/geometry/dot2.md +36 -0
  282. package/dist/docs/reference/geometry/dot3.md +9 -5
  283. package/dist/docs/reference/geometry/ellipseContour.md +1 -1
  284. package/dist/docs/reference/geometry/eulerTransform3.md +10 -6
  285. package/dist/docs/reference/geometry/extrudeMesh.md +8 -8
  286. package/dist/docs/reference/geometry/fitBounds.md +1 -1
  287. package/dist/docs/reference/geometry/fitTextLayout.md +1 -1
  288. package/dist/docs/reference/geometry/frameTransform3.md +8 -4
  289. package/dist/docs/reference/geometry/{getMetricClearanceHole.md → getMetricClearanceHoleDiameter.md} +3 -3
  290. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
  291. package/dist/docs/reference/geometry/gridPatternTransforms.md +5 -5
  292. package/dist/docs/reference/geometry/heightfieldMesh.md +1 -1
  293. package/dist/docs/reference/geometry/{buildHelicalThreadRidgeMesh.md → helicalThreadRidgeMesh.md} +5 -5
  294. package/dist/docs/reference/geometry/{buildHelicalThreadSolidMesh.md → helicalThreadSolidMesh.md} +5 -5
  295. package/dist/docs/reference/geometry/inverseTransform3.md +9 -5
  296. package/dist/docs/reference/geometry/isGeometryError.md +1 -1
  297. package/dist/docs/reference/geometry/joinTriangleMeshes.md +1 -1
  298. package/dist/docs/reference/geometry/layoutRow.md +4 -4
  299. package/dist/docs/reference/geometry/length2.md +30 -0
  300. package/dist/docs/reference/geometry/length3.md +8 -4
  301. package/dist/docs/reference/geometry/lerp2.md +42 -0
  302. package/dist/docs/reference/geometry/lerp3.md +10 -6
  303. package/dist/docs/reference/geometry/linearPatternTransforms.md +5 -5
  304. package/dist/docs/reference/geometry/loftMesh.md +2 -1
  305. package/dist/docs/reference/geometry/matchProfiles.md +1 -1
  306. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +3 -2
  307. package/dist/docs/reference/geometry/meshBounds.md +1 -1
  308. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +3 -3
  309. package/dist/docs/reference/geometry/normalize2.md +36 -0
  310. package/dist/docs/reference/geometry/normalize3.md +10 -6
  311. package/dist/docs/reference/geometry/normalizeContour.md +4 -4
  312. package/dist/docs/reference/geometry/normalizePolygon.md +5 -5
  313. package/dist/docs/reference/geometry/normalizeRegion.md +5 -5
  314. package/dist/docs/reference/geometry/optimizePlanarPatches.md +11 -11
  315. package/dist/docs/reference/geometry/path2.md +42 -0
  316. package/dist/docs/reference/geometry/path3.md +42 -0
  317. package/dist/docs/reference/geometry/pathPatternTransforms.md +8 -8
  318. package/dist/docs/reference/geometry/preflightHeightfield.md +1 -1
  319. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +3 -3
  320. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +3 -3
  321. package/dist/docs/reference/geometry/preflightSvgRegion.md +1 -1
  322. package/dist/docs/reference/geometry/preflightThreadedNut.md +3 -3
  323. package/dist/docs/reference/geometry/preflightThreadedRod.md +3 -3
  324. package/dist/docs/reference/geometry/projectOntoPlane3.md +10 -6
  325. package/dist/docs/reference/geometry/radialPatternTransforms.md +4 -20
  326. package/dist/docs/reference/geometry/rectangleContour.md +2 -2
  327. package/dist/docs/reference/geometry/rectangleProfile.md +2 -2
  328. package/dist/docs/reference/geometry/regionArea.md +4 -4
  329. package/dist/docs/reference/geometry/regionBounds.md +4 -4
  330. package/dist/docs/reference/geometry/regularPolygonContour.md +5 -5
  331. package/dist/docs/reference/geometry/resamplePolyline2.md +5 -5
  332. package/dist/docs/reference/geometry/resamplePolyline3.md +5 -5
  333. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +8 -4
  334. package/dist/docs/reference/geometry/resolveArcSegments.md +6 -6
  335. package/dist/docs/reference/geometry/resolveCircularSegments.md +6 -5
  336. package/dist/docs/reference/geometry/resolveCylindricalGear.md +1 -1
  337. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +1 -1
  338. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +6 -6
  339. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
  340. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  341. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +1 -1
  342. package/dist/docs/reference/geometry/resolveRackPitch.md +1 -1
  343. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +4 -4
  344. package/dist/docs/reference/geometry/reverseTriangleMesh.md +1 -1
  345. package/dist/docs/reference/geometry/revolveMesh.md +10 -10
  346. package/dist/docs/reference/geometry/rotate2.md +36 -0
  347. package/dist/docs/reference/geometry/rotationTransform3.md +10 -6
  348. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +8 -6
  349. package/dist/docs/reference/geometry/sampleContour.md +3 -3
  350. package/dist/docs/reference/geometry/sampleCurve2.md +3 -3
  351. package/dist/docs/reference/geometry/sampleCurve3.md +2 -2
  352. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
  353. package/dist/docs/reference/geometry/sampleHelix.md +5 -5
  354. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
  355. package/dist/docs/reference/geometry/sampleRackToothPath.md +4 -4
  356. package/dist/docs/reference/geometry/sampleSideProfile.md +6 -6
  357. package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
  358. package/dist/docs/reference/geometry/sampleThreadHelices.md +2 -2
  359. package/dist/docs/reference/geometry/scale2.md +36 -0
  360. package/dist/docs/reference/geometry/scale3.md +9 -5
  361. package/dist/docs/reference/geometry/scaleTransform3.md +10 -6
  362. package/dist/docs/reference/geometry/signedContourArea.md +1 -1
  363. package/dist/docs/reference/geometry/starContour.md +4 -4
  364. package/dist/docs/reference/geometry/strokeRegionData.md +63 -0
  365. package/dist/docs/reference/geometry/subtract2.md +36 -0
  366. package/dist/docs/reference/geometry/subtract3.md +10 -6
  367. package/dist/docs/reference/geometry/sweepMesh.md +9 -9
  368. package/dist/docs/reference/geometry/{createThreadProfile.md → threadProfile.md} +6 -6
  369. package/dist/docs/reference/geometry/transform2.md +38 -0
  370. package/dist/docs/reference/geometry/transform3.md +38 -0
  371. package/dist/docs/reference/geometry/transformDeterminant3.md +8 -4
  372. package/dist/docs/reference/geometry/transformRegionData.md +40 -0
  373. package/dist/docs/reference/geometry/transformTriangleMesh.md +6 -6
  374. package/dist/docs/reference/geometry/translationTransform3.md +10 -6
  375. package/dist/docs/reference/geometry/triangulateContour.md +1 -1
  376. package/dist/docs/reference/geometry/validateSolidMesh.md +2 -2
  377. package/dist/docs/reference/geometry/validateTransform3.md +9 -5
  378. package/dist/docs/reference/geometry/validateTriangleMesh.md +1 -1
  379. package/dist/docs/reference/geometry/vector2.md +31 -0
  380. package/dist/docs/reference/geometry/vector3.md +38 -0
  381. package/dist/docs/reference/geometry.md +3 -3
  382. package/dist/docs/reference/model/Anchor3.md +5 -5
  383. package/dist/docs/reference/model/AttachOptions.md +10 -5
  384. package/dist/docs/reference/model/Bounds2.md +4 -4
  385. package/dist/docs/reference/model/Bounds3.md +4 -4
  386. package/dist/docs/reference/model/BoxEdge.md +1 -1
  387. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  388. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  389. package/dist/docs/reference/model/BoxOptions.md +10 -10
  390. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  391. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  392. package/dist/docs/reference/model/CircleOptions.md +3 -3
  393. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
  394. package/dist/docs/reference/model/Computed.md +1 -1
  395. package/dist/docs/reference/model/ComputedValue.md +1 -1
  396. package/dist/docs/reference/model/Contour.md +3 -3
  397. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  398. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  399. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  400. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  401. package/dist/docs/reference/model/CylinderOptions.md +3 -3
  402. package/dist/docs/reference/model/DiagnosticOptions.md +1 -1
  403. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  404. package/dist/docs/reference/model/EllipseContourOptions.md +3 -3
  405. package/dist/docs/reference/model/EllipseOptions.md +3 -3
  406. package/dist/docs/reference/model/EndTreatments.md +1 -1
  407. package/dist/docs/reference/model/ExtrudeOptions.md +6 -6
  408. package/dist/docs/reference/model/FinalizedModel.md +18 -8
  409. package/dist/docs/reference/model/FinalizedPart.md +1 -1
  410. package/dist/docs/reference/model/Frame3.md +6 -6
  411. package/dist/docs/reference/model/GenerateCallback.md +1 -1
  412. package/dist/docs/reference/model/GenerateContext.md +5 -5
  413. package/dist/docs/reference/model/GeneratedPart.md +6 -6
  414. package/dist/docs/reference/model/GenerationDiagnostic.md +1 -1
  415. package/dist/docs/reference/model/GenerationError.md +1 -1
  416. package/dist/docs/reference/model/GeometryResolution.md +5 -5
  417. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  418. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  419. package/dist/docs/reference/model/GridPatternOptions.md +11 -5
  420. package/dist/docs/reference/model/HeightfieldOptions.md +5 -5
  421. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +3 -3
  422. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +1 -1
  423. package/dist/docs/reference/model/HullOptions.md +7 -7
  424. package/dist/docs/reference/model/ImmutableBuffer-type.md +1 -1
  425. package/dist/docs/reference/model/ImmutableTriangleMesh.md +1 -1
  426. package/dist/docs/reference/model/ImplicitOptions.md +4 -4
  427. package/dist/docs/reference/model/InternalThreadCutterOptions.md +4 -4
  428. package/dist/docs/reference/model/LinearPatternOptions.md +12 -5
  429. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  430. package/dist/docs/reference/model/LoftOptions.md +1 -1
  431. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  432. package/dist/docs/reference/model/LoftStation.md +4 -4
  433. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  434. package/dist/docs/reference/model/ModelProgram.md +1 -1
  435. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  436. package/dist/docs/reference/model/NumericArray.md +1 -1
  437. package/dist/docs/reference/model/PartGeometry.md +1 -1
  438. package/dist/docs/reference/model/PartOptions.md +6 -6
  439. package/dist/docs/reference/model/Path2-type.md +192 -0
  440. package/dist/docs/reference/model/Path2Data.md +14 -0
  441. package/dist/docs/reference/model/Path2Input.md +15 -0
  442. package/dist/docs/reference/model/Path3-type.md +192 -0
  443. package/dist/docs/reference/model/Path3Data.md +14 -0
  444. package/dist/docs/reference/model/Path3Input.md +15 -0
  445. package/dist/docs/reference/model/PathLocation.md +65 -0
  446. package/dist/docs/reference/model/PathNormalGuide.md +6 -5
  447. package/dist/docs/reference/model/PathOptions.md +34 -0
  448. package/dist/docs/reference/model/PathPatternOptions.md +3 -3
  449. package/dist/docs/reference/model/PathResamplingOptions.md +79 -0
  450. package/dist/docs/reference/model/PatternSource.md +2 -2
  451. package/dist/docs/reference/model/Pivot2Options.md +27 -0
  452. package/dist/docs/reference/model/Pivot3Options.md +27 -0
  453. package/dist/docs/reference/model/PlaneOptions.md +3 -3
  454. package/dist/docs/reference/model/{Polygon-type.md → PolygonData.md} +2 -2
  455. package/dist/docs/reference/model/PolygonOptions.md +85 -8
  456. package/dist/docs/reference/model/{PrimitivePlacement.md → PrimitiveAttachment.md} +7 -7
  457. package/dist/docs/reference/model/{PrimitivePlacementOptions.md → PrimitiveAttachmentOptions.md} +41 -20
  458. package/dist/docs/reference/model/PrintableThreadFit.md +1 -1
  459. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +1 -1
  460. package/dist/docs/reference/model/Profile.md +1 -1
  461. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  462. package/dist/docs/reference/model/ProfileContour2.md +1 -1
  463. package/dist/docs/reference/model/ProfileSpan2.md +3 -3
  464. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +3 -3
  465. package/dist/docs/reference/model/RadialPatternOptions.md +17 -22
  466. package/dist/docs/reference/model/RadialSizing.md +1 -1
  467. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  468. package/dist/docs/reference/model/RectangleContourOptions.md +3 -3
  469. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  470. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  471. package/dist/docs/reference/model/RectangleOptions.md +10 -10
  472. package/dist/docs/reference/model/{Region.md → RegionData.md} +4 -4
  473. package/dist/docs/reference/model/RegularPolygonOptions.md +5 -5
  474. package/dist/docs/reference/model/RevolveOptions.md +9 -4
  475. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  476. package/dist/docs/reference/model/Section.md +81 -40
  477. package/dist/docs/reference/model/SectionHullOptions.md +7 -7
  478. package/dist/docs/reference/model/SectionInspection.md +10 -10
  479. package/dist/docs/reference/model/{RegionOffsetJoin.md → SectionOffsetJoin.md} +3 -3
  480. package/dist/docs/reference/model/{RegionOffsetOptions.md → SectionOffsetOptions.md} +4 -4
  481. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  482. package/dist/docs/reference/model/Solid.md +66 -26
  483. package/dist/docs/reference/model/SolidInspection.md +7 -7
  484. package/dist/docs/reference/model/{SolidRayHit.md → SolidSegmentHit.md} +6 -6
  485. package/dist/docs/reference/model/SphereOptions.md +3 -3
  486. package/dist/docs/reference/model/StarOptions.md +10 -10
  487. package/dist/docs/reference/model/StrokeCap.md +16 -0
  488. package/dist/docs/reference/model/StrokeJoin.md +16 -0
  489. package/dist/docs/reference/model/StrokeOptions.md +91 -0
  490. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  491. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  492. package/dist/docs/reference/model/SvgSectionOptions.md +1 -1
  493. package/dist/docs/reference/model/SweepOptions.md +6 -6
  494. package/dist/docs/reference/model/SweepOrientation.md +7 -7
  495. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  496. package/dist/docs/reference/model/ThreadEndStyle.md +1 -1
  497. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +1 -1
  498. package/dist/docs/reference/model/ThreadHandedness.md +1 -1
  499. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +1 -1
  500. package/dist/docs/reference/model/ThreadLeadInShape.md +1 -1
  501. package/dist/docs/reference/model/ThreadProfile.md +3 -3
  502. package/dist/docs/reference/model/ThreadRidgeOptions.md +1 -1
  503. package/dist/docs/reference/model/ThreadedNutBevel.md +1 -1
  504. package/dist/docs/reference/model/ThreadedNutOptions.md +4 -4
  505. package/dist/docs/reference/model/ThreadedNutPreflight.md +1 -1
  506. package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
  507. package/dist/docs/reference/model/ThreadedRodOptions.md +4 -4
  508. package/dist/docs/reference/model/TorusOptions.md +8 -8
  509. package/dist/docs/reference/model/Transform2-type.md +256 -0
  510. package/dist/docs/reference/model/Transform2Input.md +20 -0
  511. package/dist/docs/reference/model/Transform2Matrix.md +15 -0
  512. package/dist/docs/reference/model/Transform3-type.md +296 -0
  513. package/dist/docs/reference/model/Transform3Input.md +20 -0
  514. package/dist/docs/reference/model/{Transform3.md → Transform3Matrix.md} +3 -3
  515. package/dist/docs/reference/model/TriangleMesh.md +1 -1
  516. package/dist/docs/reference/model/TriangleMeshAnalysis.md +2 -2
  517. package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
  518. package/dist/docs/reference/model/TubeOptions.md +8 -8
  519. package/dist/docs/reference/model/Vector2-type.md +270 -0
  520. package/dist/docs/reference/model/Vector2Input.md +20 -0
  521. package/dist/docs/reference/model/{Vector2.md → Vector2Tuple.md} +3 -3
  522. package/dist/docs/reference/model/Vector3-type.md +282 -0
  523. package/dist/docs/reference/model/Vector3Input.md +20 -0
  524. package/dist/docs/reference/model/{Vector3.md → Vector3Tuple.md} +3 -3
  525. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  526. package/dist/docs/reference/model/VectorTextMetrics.md +1 -1
  527. package/dist/docs/reference/model/anchor.md +1 -1
  528. package/dist/docs/reference/model/box.md +4 -4
  529. package/dist/docs/reference/model/castSegment.md +40 -0
  530. package/dist/docs/reference/model/categories/boolean-operations.md +4 -4
  531. package/dist/docs/reference/model/categories/bounded-surfaces.md +3 -3
  532. package/dist/docs/reference/model/categories/contracts.md +2 -2
  533. package/dist/docs/reference/model/categories/core-values-errors.md +5 -5
  534. package/dist/docs/reference/model/categories/explicit-profiles.md +3 -3
  535. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +2 -2
  536. package/dist/docs/reference/model/categories/generation.md +1 -1
  537. package/dist/docs/reference/model/categories/inspection.md +7 -8
  538. package/dist/docs/reference/model/categories/mesh-inspection.md +2 -2
  539. package/dist/docs/reference/model/categories/paths.md +33 -0
  540. package/dist/docs/reference/model/categories/primitives.md +3 -3
  541. package/dist/docs/reference/model/categories/resolution.md +2 -2
  542. package/dist/docs/reference/model/categories/sections.md +10 -8
  543. package/dist/docs/reference/model/categories/threads.md +5 -5
  544. package/dist/docs/reference/model/categories/transforms-placement.md +27 -13
  545. package/dist/docs/reference/model/circle.md +1 -1
  546. package/dist/docs/reference/model/components.md +10 -7
  547. package/dist/docs/reference/model/compose.md +1 -1
  548. package/dist/docs/reference/model/cylinder.md +1 -1
  549. package/dist/docs/reference/model/distance.md +2 -2
  550. package/dist/docs/reference/model/ellipse.md +1 -1
  551. package/dist/docs/reference/model/extrude.md +3 -3
  552. package/dist/docs/reference/model/generate.md +1 -1
  553. package/dist/docs/reference/model/gridPattern.md +4 -4
  554. package/dist/docs/reference/model/heightfield.md +2 -2
  555. package/dist/docs/reference/model/hull.md +2 -2
  556. package/dist/docs/reference/model/immutableBuffer.md +1 -1
  557. package/dist/docs/reference/model/immutableMesh.md +1 -1
  558. package/dist/docs/reference/model/implicit.md +3 -3
  559. package/dist/docs/reference/model/inspectSection.md +1 -1
  560. package/dist/docs/reference/model/inspectSolid.md +1 -1
  561. package/dist/docs/reference/model/internalThreadCutter.md +4 -4
  562. package/dist/docs/reference/model/intersect.md +1 -1
  563. package/dist/docs/reference/model/isEmpty.md +2 -2
  564. package/dist/docs/reference/model/linearPattern.md +4 -4
  565. package/dist/docs/reference/model/loft.md +1 -1
  566. package/dist/docs/reference/model/matchProfiles.md +2 -2
  567. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  568. package/dist/docs/reference/model/path2.md +42 -0
  569. package/dist/docs/reference/model/path3.md +42 -0
  570. package/dist/docs/reference/model/pathPattern.md +13 -12
  571. package/dist/docs/reference/model/polygon.md +4 -4
  572. package/dist/docs/reference/model/preflightInternalThreadCutter.md +3 -3
  573. package/dist/docs/reference/model/preflightThreadedNut.md +3 -3
  574. package/dist/docs/reference/model/preflightThreadedRod.md +3 -3
  575. package/dist/docs/reference/model/radialPattern.md +5 -37
  576. package/dist/docs/reference/model/rectangle.md +4 -4
  577. package/dist/docs/reference/model/regularPolygon.md +1 -1
  578. package/dist/docs/reference/model/revolve.md +5 -4
  579. package/dist/docs/reference/model/solidFromMesh.md +1 -1
  580. package/dist/docs/reference/model/sphere.md +1 -1
  581. package/dist/docs/reference/model/split.md +1 -1
  582. package/dist/docs/reference/model/splitByPlane.md +1 -1
  583. package/dist/docs/reference/model/star.md +4 -4
  584. package/dist/docs/reference/model/stroke.md +74 -0
  585. package/dist/docs/reference/model/svgPathSection.md +1 -1
  586. package/dist/docs/reference/model/svgSection.md +1 -1
  587. package/dist/docs/reference/model/sweep.md +7 -7
  588. package/dist/docs/reference/model/textSection.md +1 -1
  589. package/dist/docs/reference/model/threadRidge.md +2 -2
  590. package/dist/docs/reference/model/threadedNut.md +4 -4
  591. package/dist/docs/reference/model/threadedRod.md +4 -4
  592. package/dist/docs/reference/model/torus.md +3 -3
  593. package/dist/docs/reference/model/transform2.md +39 -0
  594. package/dist/docs/reference/model/transform3.md +39 -0
  595. package/dist/docs/reference/model/tube.md +3 -3
  596. package/dist/docs/reference/model/union.md +1 -1
  597. package/dist/docs/reference/model/vector2.md +32 -0
  598. package/dist/docs/reference/model/vector3.md +39 -0
  599. package/dist/docs/reference/model.md +9 -8
  600. package/dist/docs/reference/text/Bounds2.md +4 -4
  601. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
  602. package/dist/docs/reference/text/Vector2Tuple.md +7 -0
  603. package/dist/docs/reference/text/VectorFont.md +2 -2
  604. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  605. package/dist/docs/reference/text/VectorTextArcBaseline.md +3 -3
  606. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  607. package/dist/docs/reference/text/VectorTextLayoutOptions.md +1 -1
  608. package/dist/docs/reference/text/VectorTextMetrics.md +1 -1
  609. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  610. package/dist/docs/reference/text/categories/font-preparation.md +4 -4
  611. package/dist/docs/reference/text/prepareVectorFont.md +2 -2
  612. package/dist/docs/reference/text.md +1 -1
  613. package/dist/engine/construction-operations.js +31 -14
  614. package/dist/engine/deferred-context.js +11 -181
  615. package/dist/engine/execution.js +39 -8
  616. package/dist/engine/extrusion-finishing.js +1 -1
  617. package/dist/engine/index.js +6 -1
  618. package/dist/engine/inspection-operations.js +13 -11
  619. package/dist/engine/loft-operations.js +35 -14
  620. package/dist/engine/model-summary.js +8 -5
  621. package/dist/engine/native/material-components.js +305 -0
  622. package/dist/engine/native/regions.js +2 -1
  623. package/dist/engine/native/threads.js +3 -3
  624. package/dist/engine/native/transforms.js +11 -8
  625. package/dist/engine/operation-environment.js +2 -2
  626. package/dist/engine/pattern-operations.js +3 -3
  627. package/dist/engine/placement.js +2 -2
  628. package/dist/engine/primitive-anchors.js +17 -17
  629. package/dist/engine/primitive-operations.js +1 -1
  630. package/dist/engine/primitive-profiles.js +8 -7
  631. package/dist/engine/profile-mesh.js +7 -7
  632. package/dist/engine/recipe-realization.js +35 -21
  633. package/dist/engine/section-operations.js +52 -11
  634. package/dist/engine/session-graph.js +1 -1
  635. package/dist/engine/session-native.js +1 -1
  636. package/dist/engine/session-snapshot.js +17 -6
  637. package/dist/engine/session.js +13 -8
  638. package/dist/engine/shape-anchors.js +5 -11
  639. package/dist/engine/transform-operations.js +66 -49
  640. package/dist/geometry/anchors.js +40 -33
  641. package/dist/geometry/curves/sampling.js +14 -14
  642. package/dist/geometry/edge-finishing.js +1 -1
  643. package/dist/geometry/extrusion.js +13 -16
  644. package/dist/geometry/index.js +13 -10
  645. package/dist/geometry/loft/loft-simple-mesh.js +6 -6
  646. package/dist/geometry/loft/loft.js +22 -13
  647. package/dist/geometry/math/immutable-value.js +20 -0
  648. package/dist/geometry/math/vector-value.js +168 -0
  649. package/dist/geometry/math/vector2.js +80 -0
  650. package/dist/geometry/math/vector3.js +37 -7
  651. package/dist/geometry/mechanical/gear-motion.js +8 -5
  652. package/dist/geometry/mechanical/gears.js +38 -38
  653. package/dist/geometry/mechanical/index.js +3 -3
  654. package/dist/geometry/mechanical/standards.js +1 -1
  655. package/dist/geometry/mechanical/thread-helices.js +2 -3
  656. package/dist/geometry/mechanical/thread-mesh-plan.js +4 -5
  657. package/dist/geometry/mechanical/thread-mesh.js +7 -7
  658. package/dist/geometry/mechanical/thread-profiles.js +5 -5
  659. package/dist/geometry/mechanical/thread-solids.js +2 -2
  660. package/dist/geometry/mechanical/thread-surface.js +1 -1
  661. package/dist/geometry/mechanical/threads.js +8 -8
  662. package/dist/geometry/mesh/mesh-planar.js +25 -27
  663. package/dist/geometry/mesh/mesh-quality.js +5 -5
  664. package/dist/geometry/mesh/mesh-signature.js +13 -13
  665. package/dist/geometry/mesh/mesh-solid-intersections.js +5 -1
  666. package/dist/geometry/mesh/mesh-solid.js +7 -7
  667. package/dist/geometry/mesh/mesh.js +4 -15
  668. package/dist/geometry/paths/closest-point.js +63 -0
  669. package/dist/geometry/paths/frames.js +44 -14
  670. package/dist/geometry/paths/helix.js +16 -6
  671. package/dist/geometry/paths/path-value.js +252 -0
  672. package/dist/geometry/paths/planar.js +36 -23
  673. package/dist/geometry/paths/resampling.js +27 -5
  674. package/dist/geometry/patterns/placements.js +100 -27
  675. package/dist/geometry/patterns.js +2 -2
  676. package/dist/geometry/polygon-clipping.js +17 -0
  677. package/dist/geometry/primitive-resolution.js +4 -1
  678. package/dist/geometry/profiles/contour.js +6 -6
  679. package/dist/geometry/profiles/matched.js +4 -4
  680. package/dist/geometry/profiles/profiles.js +4 -4
  681. package/dist/geometry/profiles/rectangle.js +4 -4
  682. package/dist/geometry/profiles/side-profile.js +7 -7
  683. package/dist/geometry/profiles/span-sampling.js +1 -1
  684. package/dist/geometry/resolution.js +51 -39
  685. package/dist/geometry/revolve/revolve-mesh.js +12 -7
  686. package/dist/geometry/stroke-path.js +57 -68
  687. package/dist/geometry/svg/fill.js +7 -21
  688. package/dist/geometry/svg-import.js +23 -23
  689. package/dist/geometry/sweeps/options.js +5 -4
  690. package/dist/geometry/sweeps/orientation.js +5 -5
  691. package/dist/geometry/sweeps/stations.js +14 -14
  692. package/dist/geometry/sweeps/sweep-closed.js +5 -5
  693. package/dist/geometry/sweeps/sweep-mesh.js +9 -3
  694. package/dist/geometry/sweeps/sweep-open.js +4 -4
  695. package/dist/geometry/sweeps/validation.js +4 -7
  696. package/dist/geometry/transform-chain.js +172 -0
  697. package/dist/geometry/transform-geometry.js +27 -30
  698. package/dist/geometry/transform-matrix.js +14 -0
  699. package/dist/geometry/transform2.js +60 -0
  700. package/dist/geometry/transform3.js +70 -26
  701. package/dist/index.js +4 -0
  702. package/dist/model/execution-binding.js +10 -5
  703. package/dist/model/geometry-recipes.js +15 -0
  704. package/dist/{engine → model}/immutable-generation-data.js +88 -6
  705. package/dist/model/operation-dispatch.js +10 -3
  706. package/dist/model/operations.js +45 -35
  707. package/dist/model/recipe-declaration.js +199 -0
  708. package/dist/model/shape-handles.js +17 -5
  709. package/dist/text/index.js +15 -9
  710. package/dist/text/vector-text-layout.js +31 -26
  711. package/package.json +1 -1
  712. package/dist/docs/reference/geometry/Path2.md +0 -14
  713. package/dist/docs/reference/geometry/Path3.md +0 -14
  714. package/dist/docs/reference/geometry/PrimitivePlacement.md +0 -31
  715. package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +0 -83
  716. package/dist/docs/reference/geometry/Region.md +0 -14
  717. package/dist/docs/reference/geometry/StrokePathCap.md +0 -7
  718. package/dist/docs/reference/geometry/StrokePathJoin.md +0 -7
  719. package/dist/docs/reference/geometry/Transform3.md +0 -12
  720. package/dist/docs/reference/geometry/Vector2.md +0 -7
  721. package/dist/docs/reference/geometry/Vector3.md +0 -7
  722. package/dist/docs/reference/geometry/attachTransform.md +0 -73
  723. package/dist/docs/reference/geometry/cumulativePathLengths.md +0 -33
  724. package/dist/docs/reference/geometry/measureTriangleMesh.md +0 -55
  725. package/dist/docs/reference/geometry/pathLength.md +0 -33
  726. package/dist/docs/reference/geometry/rotateAroundAxis3.md +0 -38
  727. package/dist/docs/reference/geometry/strokePathRegion.md +0 -63
  728. package/dist/docs/reference/geometry/transformContour.md +0 -42
  729. package/dist/docs/reference/geometry/transformPath2.md +0 -40
  730. package/dist/docs/reference/geometry/transformPath3.md +0 -33
  731. package/dist/docs/reference/geometry/transformRegion.md +0 -40
  732. package/dist/docs/reference/model/Transform2.md +0 -15
  733. package/dist/docs/reference/model/fromRegion.md +0 -33
  734. package/dist/docs/reference/model/rayCast.md +0 -40
  735. package/dist/docs/reference/model/toRegion.md +0 -33
  736. package/dist/docs/reference/model/toTriangleMesh.md +0 -27
  737. package/dist/docs/reference/text/Vector2.md +0 -7
  738. package/dist/engine/geometry-recipes.js +0 -12
  739. package/dist/engine/pattern-transform.js +0 -9
  740. package/dist/geometry/paths/path.js +0 -32
@@ -11,6 +11,9 @@ export declare interface AcmeThreadProfileSpec extends ThreadProfileBaseSpec {
11
11
  readonly depth?: number;
12
12
  }
13
13
 
14
+ /** Adds two finite XY vectors component-wise. */
15
+ export declare const add2: (a: Vector2Tuple, b: Vector2Tuple) => Vector2Tuple;
16
+
14
17
  /**
15
18
  * Adds two finite XYZ vectors component-wise.
16
19
  * @example
@@ -18,10 +21,12 @@ export declare interface AcmeThreadProfileSpec extends ThreadProfileBaseSpec {
18
21
  * add3([1, 2, 3], [4, 5, 6]); // [5, 7, 9]
19
22
  * ```
20
23
  */
21
- export declare const add3: (a: Vector3, b: Vector3) => Vector3;
24
+ export declare const add3: (a: Vector3Tuple, b: Vector3Tuple) => Vector3Tuple;
22
25
 
23
26
  /** Controls full-circle sampling that must satisfy one or more topology alignments. */
24
27
  export declare interface AlignedCircularSegmentsOptions {
28
+ /** Radial sizing used by adaptive error and edge-length checks. Defaults to vertex. */
29
+ readonly sizing?: RadialSizing;
25
30
  /**
26
31
  * Non-empty alignment factors. Every value must be a positive safe integer; the returned count
27
32
  * is divisible by their checked least common multiple.
@@ -33,12 +38,12 @@ export declare interface AlignedCircularSegmentsOptions {
33
38
  * Additional full-circle segment floor, as a safe integer of at least three.
34
39
  * @defaultValue `3`
35
40
  */
36
- readonly minimumSegments?: number;
41
+ readonly minSegments?: number;
37
42
  /**
38
43
  * Exact full-circle segment count.
39
44
  *
40
45
  * This takes precedence over `resolution.circularSegments` and adaptive sampling, and must
41
- * already satisfy every alignment factor and `minimumSegments`.
46
+ * already satisfy every alignment factor and `minSegments`.
42
47
  */
43
48
  readonly segments?: number;
44
49
  /** Operation-level physical tessellation policy over the active model-wide policy. */
@@ -84,17 +89,37 @@ export declare function analyzeTriangleMeshQuality(
84
89
  */
85
90
  export declare interface Anchor3 {
86
91
  /** Unit outward normal used as the anchor's local +Z direction. */
87
- readonly direction: Vector3;
92
+ readonly direction: Vector3Tuple;
88
93
  /** World-space attachment position. */
89
- readonly position: Vector3;
94
+ readonly position: Vector3Tuple;
90
95
  /** Roll guide projected into the plane perpendicular to `direction`. */
91
- readonly up: Vector3;
96
+ readonly up: Vector3Tuple;
92
97
  }
93
98
 
99
+ /**
100
+ * Constructs a normalized immutable attachment anchor.
101
+ *
102
+ * `up` is projected onto the plane perpendicular to `direction`, removing small
103
+ * input drift while preserving its roll intent.
104
+ *
105
+ * @param position - Finite anchor point in model coordinates.
106
+ * @param direction - Non-zero outward attachment normal.
107
+ * @param up - Non-parallel roll reference; defaults to +Y.
108
+ * @param tolerance - Optional comparison overrides.
109
+ * @returns A frozen anchor with unit, orthogonal direction and up vectors.
110
+ * @throws {@link GeometryError} For non-finite or degenerate inputs.
111
+ */
112
+ export declare function anchor3(
113
+ position: Vector3Input,
114
+ direction: Vector3Input,
115
+ up?: Vector3Input,
116
+ tolerance?: GeometryToleranceOptions,
117
+ ): Anchor3;
118
+
94
119
  /**
95
120
  * Converts an anchor into a right-handed frame with direction as local +Z.
96
121
  *
97
- * @param anchor - Anchor created by {@link createAnchor3} or equivalent valid data.
122
+ * @param anchor - Anchor created by {@link anchor3} or equivalent valid data.
98
123
  * @param tolerance - Optional comparison overrides.
99
124
  * @returns A normalized right-handed frame at the anchor position.
100
125
  */
@@ -113,9 +138,9 @@ export declare function anchorFrame3(
113
138
  * @returns A fresh transformed direction.
114
139
  */
115
140
  export declare function applyTransformDirection3(
116
- transform: Transform3,
117
- direction: Vector3,
118
- ): Vector3;
141
+ transform: Transform3Matrix,
142
+ direction: Vector3Tuple,
143
+ ): Vector3Tuple;
119
144
 
120
145
  /**
121
146
  * Applies an affine transform to a point, including translation.
@@ -125,22 +150,22 @@ export declare function applyTransformDirection3(
125
150
  * @returns A fresh transformed point.
126
151
  */
127
152
  export declare function applyTransformPoint3(
128
- transform: Transform3,
129
- point: Vector3,
130
- ): Vector3;
153
+ transform: Transform3Matrix,
154
+ point: Vector3Tuple,
155
+ ): Vector3Tuple;
131
156
 
132
157
  /** Planar circular arc with counterclockwise degree angles. */
133
158
  export declare interface ArcCurve2 {
134
159
  /** Selects a circular arc in the XY plane. */
135
160
  readonly kind: "arc";
136
161
  /** Circle center in millimetres. */
137
- readonly center: Vector2;
162
+ readonly center: Vector2Tuple;
138
163
  /** Positive circular radius in millimetres. */
139
164
  readonly radius: number;
140
165
  /** Initial angle in degrees; defaults to zero. */
141
- readonly startDegrees?: number;
166
+ readonly startAngle?: number;
142
167
  /** Nonzero signed sweep in degrees, bounded to one complete turn. */
143
- readonly sweepDegrees: number;
168
+ readonly sweepAngle: number;
144
169
  }
145
170
 
146
171
  /** Spatial circular arc in the plane of two orthogonal unit directions. */
@@ -148,17 +173,17 @@ export declare interface ArcCurve3 {
148
173
  /** Selects a circular arc in the supplied plane. */
149
174
  readonly kind: "arc";
150
175
  /** Circle center in millimetres. */
151
- readonly center: Vector3;
176
+ readonly center: Vector3Tuple;
152
177
  /** Positive circular radius in millimetres. */
153
178
  readonly radius: number;
154
179
  /** Orthogonal unit direction at zero degrees. */
155
- readonly xAxis: Vector3;
180
+ readonly xAxis: Vector3Tuple;
156
181
  /** Orthogonal unit direction at positive ninety degrees. */
157
- readonly yAxis: Vector3;
182
+ readonly yAxis: Vector3Tuple;
158
183
  /** Initial angle in degrees; defaults to zero. */
159
- readonly startDegrees?: number;
184
+ readonly startAngle?: number;
160
185
  /** Nonzero signed sweep in degrees, bounded to one complete turn. */
161
- readonly sweepDegrees: number;
186
+ readonly sweepAngle: number;
162
187
  }
163
188
 
164
189
  /**
@@ -175,20 +200,20 @@ export declare interface ArcCurve3 {
175
200
  * @returns A frozen affine transform for the moving object.
176
201
  * @throws {@link GeometryError} For invalid anchors or non-finite options.
177
202
  */
178
- export declare function attachTransform(
203
+ export declare function attachmentTransform3(
179
204
  source: Anchor3,
180
205
  target: Anchor3,
181
- options?: AttachTransformOptions,
182
- ): Transform3;
206
+ options?: AttachOptions,
207
+ ): Transform3Matrix;
183
208
 
184
209
  /** Options controlling how one anchor is attached to another. */
185
- export declare interface AttachTransformOptions {
210
+ export declare interface AttachOptions {
186
211
  /** Align outward directions face-to-face (`opposed`) or in parallel (`same`). */
187
212
  readonly alignment?: "opposed" | "same";
188
213
  /** Separation along the target anchor's outward direction in model units. */
189
214
  readonly gap?: number;
190
- /** Additional right-handed roll about the attached direction, in radians. */
191
- readonly spinRadians?: number;
215
+ /** Additional right-handed roll about the attached direction, in degrees. */
216
+ readonly spin?: number;
192
217
  /** Optional numeric comparison overrides. */
193
218
  readonly tolerance?: GeometryToleranceOptions;
194
219
  }
@@ -213,31 +238,31 @@ export declare type AxisAngleRotation3 =
213
238
  /** Axis-aligned bounds in two-dimensional model space. */
214
239
  export declare interface Bounds2 {
215
240
  /** Inclusive maximum X/Y coordinates. */
216
- readonly max: Vector2;
241
+ readonly max: Vector2Tuple;
217
242
  /** Inclusive minimum X/Y coordinates. */
218
- readonly min: Vector2;
243
+ readonly min: Vector2Tuple;
219
244
  }
220
245
 
221
246
  /** Axis-aligned bounds in three-dimensional model space. */
222
247
  export declare interface Bounds3 {
223
248
  /** Inclusive maximum X/Y/Z coordinates. */
224
- readonly max: Vector3;
249
+ readonly max: Vector3Tuple;
225
250
  /** Inclusive minimum X/Y/Z coordinates. */
226
- readonly min: Vector3;
251
+ readonly min: Vector3Tuple;
227
252
  }
228
253
 
229
254
  /** Midpoint of finite XY bounds in millimetres. */
230
- export declare function boundsCenter(bounds: Bounds2): Vector2;
255
+ export declare function boundsCenter(bounds: Bounds2): Vector2Tuple;
231
256
 
232
257
  /** Midpoint of finite XYZ bounds in millimetres. */
233
- export declare function boundsCenter(bounds: Bounds3): Vector3;
258
+ export declare function boundsCenter(bounds: Bounds3): Vector3Tuple;
234
259
 
235
260
  /** A uniform XY scale followed by translation, and the resulting bounds. */
236
261
  export declare interface BoundsFit2 {
237
262
  /** Positive uniform scale. */
238
263
  readonly scale: number;
239
264
  /** Millimetre translation applied after scaling around the origin. */
240
- readonly position: Vector2;
265
+ readonly position: Vector2Tuple;
241
266
  /** Bounds after scaling and translation. */
242
267
  readonly bounds: Bounds2;
243
268
  }
@@ -247,7 +272,7 @@ export declare interface BoundsFit3 {
247
272
  /** Positive uniform scale. */
248
273
  readonly scale: number;
249
274
  /** Millimetre translation applied after scaling around the origin. */
250
- readonly position: Vector3;
275
+ readonly position: Vector3Tuple;
251
276
  /** Bounds after scaling and translation. */
252
277
  readonly bounds: Bounds3;
253
278
  }
@@ -260,13 +285,13 @@ export declare interface BoundsFitOptions {
260
285
 
261
286
  /** Creates immutable centered XY bounds from nonnegative dimensions in millimetres. */
262
287
  export declare function boundsFromSize(
263
- size: Vector2,
288
+ size: Vector2Tuple,
264
289
  options?: BoundsFromSizeOptions,
265
290
  ): Bounds2;
266
291
 
267
292
  /** Creates immutable centered XYZ bounds from nonnegative dimensions in millimetres. */
268
293
  export declare function boundsFromSize(
269
- size: Vector3,
294
+ size: Vector3Tuple,
270
295
  options?: BoundsFromSizeOptions,
271
296
  ): Bounds3;
272
297
 
@@ -277,10 +302,10 @@ export declare interface BoundsFromSizeOptions {
277
302
  }
278
303
 
279
304
  /** Inclusive XY dimensions in millimetres; zero extents are retained. */
280
- export declare function boundsSize(bounds: Bounds2): Vector2;
305
+ export declare function boundsSize(bounds: Bounds2): Vector2Tuple;
281
306
 
282
307
  /** Inclusive XYZ dimensions in millimetres; zero extents are retained. */
283
- export declare function boundsSize(bounds: Bounds3): Vector3;
308
+ export declare function boundsSize(bounds: Bounds3): Vector3Tuple;
284
309
 
285
310
  /** Creates an outward face-center anchor using the same local origin convention as box().
286
311
  * @remarks origin applies an explicit translation. For rotated components, transform the
@@ -295,13 +320,13 @@ export declare type BoxAnchorFace =
295
320
  /** Box dimensions and construction origin for one named face anchor. */
296
321
  export declare interface BoxAnchorOptions {
297
322
  /** XYZ dimensions, or one uniform dimension, in millimetres. */
298
- readonly size: number | Vector3;
323
+ readonly size: number | Vector3Tuple;
299
324
  /** Named outward face whose center is the attachment point. */
300
325
  readonly face: BoxAnchorFace;
301
326
  /** Centers the box around its construction origin; defaults to true, matching box(). */
302
327
  readonly center?: boolean;
303
328
  /** Construction origin; centered-box center or noncentered minimum corner. Defaults to zero. */
304
- readonly origin?: Vector3;
329
+ readonly origin?: Vector3Tuple;
305
330
  }
306
331
 
307
332
  /** Box edges use +Z top, +Y front and +X right; vertical names list front/back first. */
@@ -330,7 +355,7 @@ export declare type BoxEdgeTreatments = Readonly<
330
355
  /**
331
356
  * Dimensions, placement, and uniform or independently selected finishing for an axis-aligned box.
332
357
  */
333
- export declare interface BoxOptions extends PrimitivePlacement {
358
+ export declare interface BoxOptions extends PrimitiveAttachment {
334
359
  /** Explicit sampling ceilings for edge treatments, bounded by the host policy. */
335
360
  readonly limits?: Partial<GeometrySamplingLimits>;
336
361
  /**
@@ -339,33 +364,11 @@ export declare interface BoxOptions extends PrimitivePlacement {
339
364
  */
340
365
  readonly center?: boolean;
341
366
  /** Positive uniform size or explicit `[X, Y, Z]` extents in millimetres. */
342
- readonly size: number | Vector3;
367
+ readonly size: number | Vector3Tuple;
343
368
  /** Uniform treatment or independent disjoint nominal edge/group treatments. */
344
369
  readonly treatment?: EdgeTreatment | BoxEdgeTreatments;
345
370
  }
346
371
 
347
- /**
348
- * Builds closed thread-ridge components with every profile locked to the
349
- * shaft's radial/axial frame. The mesh is intended for union with its
350
- * minor-envelope cylinder and never owns WASM objects.
351
- */
352
- export declare function buildHelicalThreadRidgeMesh(
353
- options: HelicalThreadRidgeMeshOptions,
354
- ): TriangleMesh;
355
-
356
- /**
357
- * Builds one closed threaded cylinder without a ridge/core Boolean seam.
358
- *
359
- * Each circular facet includes its exact phase-shifted profile breakpoints, including duplicate-Z
360
- * samples for vertical flanks and blunt transitions. Adjacent variable grids are stitched as a
361
- * monotone strip, with optional intermediate rows bounded by physical `maxSegmentLength`. A
362
- * conservative pre-allocation estimate rejects excessive meshes before constructing position
363
- * arrays.
364
- */
365
- export declare function buildHelicalThreadSolidMesh(
366
- options: HelicalThreadSolidMeshOptions,
367
- ): TriangleMesh;
368
-
369
372
  /** Axial side carrying the near-normal pressure flank of a buttress thread. */
370
373
  export declare type ButtressPressureFlankSide = "negative" | "positive";
371
374
 
@@ -443,6 +446,12 @@ export declare interface CircularPrimitiveOptions {
443
446
  readonly resolution?: GeometryResolution;
444
447
  }
445
448
 
449
+ /** Circular sampling measured from the nominal inscribed or circumscribed radius. */
450
+ export declare interface CircularResolutionOptions extends GeometryResolution {
451
+ /** Vertex sizing bounds inward sagitta; face sizing bounds outward excess. Defaults to vertex. */
452
+ readonly sizing?: RadialSizing;
453
+ }
454
+
446
455
  /** Close, normal, and loose metric clearance-hole diameters in millimetres. */
447
456
  export declare interface ClearanceHoleDimensions {
448
457
  /** Close-fit clearance-hole diameter. */
@@ -464,7 +473,7 @@ export declare type ClearanceHoleFit = "close" | "normal" | "loose";
464
473
  * This is a solid-body closure, not a hollow-wall or mounting-bore construction.
465
474
  */
466
475
  export declare function closeToAxis(
467
- side: readonly Vector2[],
476
+ side: readonly Vector2Tuple[],
468
477
  limits?: Partial<GeometrySamplingLimits>,
469
478
  ): Contour;
470
479
 
@@ -531,9 +540,9 @@ export declare function compensateThreadProfileForFaceting(
531
540
  * @returns A new frozen transform equal to `after * before`.
532
541
  */
533
542
  export declare function composeTransform3(
534
- after: Transform3,
535
- before: Transform3,
536
- ): Transform3;
543
+ after: Transform3Matrix,
544
+ before: Transform3Matrix,
545
+ ): Transform3Matrix;
537
546
 
538
547
  /**
539
548
  * Builds rotation-minimizing frames for a non-duplicated closed path.
@@ -542,10 +551,13 @@ export declare function composeTransform3(
542
551
  * normal back to the first tangent measures seam holonomy; distributing that residual rotation
543
552
  * uniformly over all path intervals avoids a visible seam or accumulated frame flip.
544
553
  * The maxPathPoints ceiling (default 100000) bounds path points and frames.
554
+ * Requires closed path values; raw tuples are interpreted as closed and must omit their seam point.
555
+ * Invalid paths throw GeometryError.
556
+ * Nonfinite initial normals reject; finite parallel preferences select a canonical fallback.
545
557
  */
546
558
  export declare const computeClosedParallelTransportFrames: (
547
- path: readonly Vector3[],
548
- initialNormal?: Vector3,
559
+ input: Path3Input,
560
+ initialNormal?: Vector3Input,
549
561
  limits?: Partial<GeometrySamplingLimits>,
550
562
  ) => readonly PathFrame[];
551
563
 
@@ -553,10 +565,12 @@ export declare const computeClosedParallelTransportFrames: (
553
565
  * Builds rotation-minimizing frames by parallel-transporting the previous normal.
554
566
  * This avoids the sudden profile flips produced by picking a fresh up-vector per ring.
555
567
  * Paths exceeding maxPathPoints (default 100000) reject before frame allocation or guide evaluation.
568
+ * Requires open path values; raw tuples are interpreted as an open path. Invalid paths throw GeometryError.
569
+ * Nonfinite normals and guide results reject. A finite initial guide parallel to the tangent selects a canonical fallback.
556
570
  */
557
571
  export declare const computeParallelTransportFrames: (
558
- path: readonly Vector3[],
559
- initialNormal?: Vector3,
572
+ input: Path3Input,
573
+ initialNormal?: Vector3Input,
560
574
  normalGuide?: PathNormalGuide,
561
575
  limits?: Partial<GeometrySamplingLimits>,
562
576
  ) => readonly PathFrame[];
@@ -572,7 +586,24 @@ export declare const computeParallelTransportFrames: (
572
586
  */
573
587
  export declare function computeTriangleMeshCentroid(
574
588
  mesh: TriangleMesh,
575
- ): Vector3;
589
+ ): Vector3Tuple;
590
+
591
+ /**
592
+ * Creates an order-independent regression signature for a manufacturing mesh.
593
+ *
594
+ * The input must be non-empty, closed, consistently wound, and have no unreferenced vertices.
595
+ * Vertex and triangle order do not affect the fingerprint; winding, quantized geometry, and
596
+ * connectivity metrics do. The fingerprint is a regression aid, not a cryptographic digest.
597
+ *
598
+ * @param mesh - Closed oriented mesh to measure without mutation.
599
+ * @param options - Absolute quantization and complexity limits.
600
+ * @returns Compact counts, bounds, volume, topology, tolerances, and canonical fingerprint.
601
+ * @throws {@link GeometryError} When validation, topology, tolerance, or complexity checks fail.
602
+ */
603
+ export declare function computeTriangleMeshSignature(
604
+ mesh: TriangleMesh,
605
+ options?: TriangleMeshSignatureOptions,
606
+ ): TriangleMeshSignature;
576
607
 
577
608
  /** Tests actual XY containment, including touching boundaries; dimensions must match. */
578
609
  export declare function containsBounds(outer: Bounds2, inner: Bounds2): boolean;
@@ -586,12 +617,12 @@ export declare function containsBounds(outer: Bounds3, inner: Bounds3): boolean;
586
617
  * Polygon exteriors are counter-clockwise and holes are clockwise. Algorithms
587
618
  * may reject duplicate adjacent points or fewer than three effective vertices.
588
619
  */
589
- export declare type Contour = readonly Vector2[];
620
+ export declare type Contour = readonly Vector2Tuple[];
590
621
 
591
622
  /** Returns true when a point lies inside or on the boundary of a loop. */
592
623
  export declare function contourContainsPoint(
593
624
  loop: Contour,
594
- point: Vector2,
625
+ point: Vector2Tuple,
595
626
  ): boolean;
596
627
 
597
628
  /** One explicitly closed planar contour, independent of editor metadata and parameter contracts. */
@@ -661,58 +692,8 @@ export declare type CorrespondingProfileStation = LoftPlacement & {
661
692
  readonly profile: CorrespondingProfile;
662
693
  };
663
694
 
664
- /**
665
- * Constructs a normalized immutable attachment anchor.
666
- *
667
- * `up` is projected onto the plane perpendicular to `direction`, removing small
668
- * input drift while preserving its roll intent.
669
- *
670
- * @param position - Finite anchor point in model coordinates.
671
- * @param direction - Non-zero outward attachment normal.
672
- * @param up - Non-parallel roll reference; defaults to +Y.
673
- * @param tolerance - Optional comparison overrides.
674
- * @returns A frozen anchor with unit, orthogonal direction and up vectors.
675
- * @throws {@link GeometryError} For non-finite or degenerate inputs.
676
- */
677
- export declare function createAnchor3(
678
- position: Vector3,
679
- direction: Vector3,
680
- up?: Vector3,
681
- tolerance?: GeometryToleranceOptions,
682
- ): Anchor3;
683
-
684
- /**
685
- * Creates a periodic thread profile for the shaft-locked helical mesher.
686
- *
687
- * The open path spans one pitch. Radial zero is the major envelope; negative
688
- * values point toward the shaft. Custom paths must be finite, axially
689
- * non-decreasing, periodic at their endpoints, and reach radial zero.
690
- *
691
- * @example Printable triangular thread profile
692
- * ```ts
693
- * createThreadProfile({ kind: "triangular", pitch: 1.75 });
694
- * ```
695
- */
696
- export declare function createThreadProfile(
697
- spec: ThreadProfileSpec,
698
- ): ThreadProfile;
699
-
700
- /**
701
- * Creates an order-independent regression signature for a manufacturing mesh.
702
- *
703
- * The input must be non-empty, closed, consistently wound, and have no unreferenced vertices.
704
- * Vertex and triangle order do not affect the fingerprint; winding, quantized geometry, and
705
- * connectivity metrics do. The fingerprint is a regression aid, not a cryptographic digest.
706
- *
707
- * @param mesh - Closed oriented mesh to measure without mutation.
708
- * @param options - Absolute quantization and complexity limits.
709
- * @returns Compact counts, bounds, volume, topology, tolerances, and canonical fingerprint.
710
- * @throws {@link GeometryError} When validation, topology, tolerance, or complexity checks fail.
711
- */
712
- export declare function createTriangleMeshSignature(
713
- mesh: TriangleMesh,
714
- options?: TriangleMeshSignatureOptions,
715
- ): TriangleMeshSignature;
695
+ /** Returns the signed scalar cross product; positive means `b` is counter-clockwise from `a`. */
696
+ export declare const cross2: (a: Vector2Tuple, b: Vector2Tuple) => number;
716
697
 
717
698
  /**
718
699
  * Returns the right-handed cross product.
@@ -721,20 +702,20 @@ export declare function createTriangleMeshSignature(
721
702
  * cross3([1, 0, 0], [0, 1, 0]); // [0, 0, 1]
722
703
  * ```
723
704
  */
724
- export declare const cross3: (a: Vector3, b: Vector3) => Vector3;
705
+ export declare const cross3: (a: Vector3Tuple, b: Vector3Tuple) => Vector3Tuple;
725
706
 
726
707
  /** Planar cubic Bézier with explicit endpoint and control coordinates. */
727
708
  export declare interface CubicBezierCurve2 {
728
709
  /** Selects a cubic Bézier through two endpoints and two controls. */
729
710
  readonly kind: "cubic";
730
711
  /** Initial XY point in millimetres. */
731
- readonly start: Vector2;
712
+ readonly start: Vector2Tuple;
732
713
  /** First XY control point in millimetres. */
733
- readonly control1: Vector2;
714
+ readonly control1: Vector2Tuple;
734
715
  /** Second XY control point in millimetres. */
735
- readonly control2: Vector2;
716
+ readonly control2: Vector2Tuple;
736
717
  /** Final XY point in millimetres. */
737
- readonly end: Vector2;
718
+ readonly end: Vector2Tuple;
738
719
  }
739
720
 
740
721
  /**
@@ -744,21 +725,15 @@ export declare interface CubicBezierCurve3 {
744
725
  /** Selects a cubic Bézier through two endpoints and two controls. */
745
726
  readonly kind: "cubic";
746
727
  /** Initial XYZ point in millimetres. */
747
- readonly start: Vector3;
728
+ readonly start: Vector3Tuple;
748
729
  /** First XYZ control point in millimetres. */
749
- readonly control1: Vector3;
730
+ readonly control1: Vector3Tuple;
750
731
  /** Second XYZ control point in millimetres. */
751
- readonly control2: Vector3;
732
+ readonly control2: Vector3Tuple;
752
733
  /** Final XYZ point in millimetres. */
753
- readonly end: Vector3;
734
+ readonly end: Vector3Tuple;
754
735
  }
755
736
 
756
- /** Returns cumulative arc length for finite points under maxPathPoints (default 100000); rejects overflowing length. */
757
- export declare const cumulativePathLengths: (
758
- path: readonly Vector3[],
759
- limits?: Partial<GeometrySamplingLimits>,
760
- ) => readonly number[];
761
-
762
737
  /** Reusable planar curve definition. */
763
738
  export declare type Curve2 = LineCurve2 | ArcCurve2 | CubicBezierCurve2;
764
739
 
@@ -776,7 +751,7 @@ export declare interface CurveSamplingOptions {
776
751
  /** Millimetre sampling policy; circularSegments applies only to arcs. */
777
752
  readonly resolution?: GeometryResolution;
778
753
  /** Output vertex ceiling of at least two; may only lower limits.maxPathPoints. */
779
- readonly maximumVertices?: number;
754
+ readonly maxVertices?: number;
780
755
  /** Explicit sampling ceilings; omitted values use package defaults without ambient state. */
781
756
  readonly limits?: Partial<GeometrySamplingLimits>;
782
757
  }
@@ -789,7 +764,7 @@ export declare interface CustomThreadProfileSpec extends ThreadProfileBaseSpec {
789
764
  * Open path spanning exactly `[-pitch/2, pitch/2]`, with both endpoints on the minor envelope,
790
765
  * one connected ridge, one contiguous crest, and radial zero at the major envelope.
791
766
  */
792
- readonly points: readonly Vector2[];
767
+ readonly points: readonly Vector2Tuple[];
793
768
  }
794
769
 
795
770
  /** Creates a cap-center or radial-side anchor using cylinder()'s construction origin.
@@ -812,11 +787,11 @@ export declare interface CylinderAnchorOptions {
812
787
  /** Named outward face; side anchors lie halfway up the cylinder. */
813
788
  readonly face: CylinderAnchorFace;
814
789
  /** Side angle counter-clockwise from +X, in degrees; defaults to zero. */
815
- readonly angleDegrees?: number;
790
+ readonly angle?: number;
816
791
  /** Centers the cylinder along Z; defaults to true, matching cylinder(). */
817
792
  readonly center?: boolean;
818
793
  /** Construction origin; centered-axis midpoint or noncentered bottom axis. Defaults to zero. */
819
- readonly origin?: Vector3;
794
+ readonly origin?: Vector3Tuple;
820
795
  }
821
796
 
822
797
  /**
@@ -824,7 +799,7 @@ export declare interface CylinderAnchorOptions {
824
799
  */
825
800
  export declare type CylinderOptions = CircularPrimitiveOptions &
826
801
  RadialSizingOptions &
827
- PrimitivePlacement & {
802
+ PrimitiveAttachment & {
828
803
  /**
829
804
  * Centers the solid on the Z origin when `true`; otherwise its bottom is at `Z = 0`.
830
805
  * @defaultValue `true`
@@ -856,7 +831,7 @@ export declare interface CylindricalGearDimensions {
856
831
  /** Addendum above the pitch circle, in millimetres. */
857
832
  readonly addendum: number;
858
833
  /** Angular pitch between adjacent teeth, in radians. */
859
- readonly angularPitch: number;
834
+ readonly angularPitchRadians: number;
860
835
  /** Tangential backlash applied to this gear, in millimetres. */
861
836
  readonly backlash: number;
862
837
  /** Base-circle radius used by the involute, in millimetres. */
@@ -923,7 +898,7 @@ export declare interface CylindricalGearPairDimensions {
923
898
  /** Absolute driven-to-driver tooth-count ratio. */
924
899
  readonly ratio: number;
925
900
  /** Helix angle required on the driven member for conjugate teeth, in degrees. */
926
- readonly requiredDrivenHelixAngleDegrees: number;
901
+ readonly requiredDrivenHelixAngle: number;
927
902
  }
928
903
 
929
904
  /** Sampling controls for one coupled internal-gear tooth cycle. */
@@ -959,7 +934,7 @@ export declare interface CylindricalGearPairSpec {
959
934
  /**
960
935
  * Nominal dimensions for a standard full-depth cylindrical involute gear.
961
936
  *
962
- * Lengths use millimetres. `module` and `pressureAngleDegrees` are measured in
937
+ * Lengths use millimetres. `module` and `pressureAngle` are measured in
963
938
  * the normal plane; a non-zero signed helix angle is converted to transverse
964
939
  * pitch-plane dimensions. Positive and negative helix angles identify
965
940
  * opposite hands but produce the same 2D pitch geometry.
@@ -970,11 +945,11 @@ export declare interface CylindricalGearSpec {
970
945
  /** Dedendum clearance as a multiple of normal module; defaults to `0.25`. */
971
946
  readonly clearanceFactor?: number;
972
947
  /** Signed helix angle in degrees; zero creates a spur pitch system. */
973
- readonly helixAngleDegrees?: number;
948
+ readonly helixAngle?: number;
974
949
  /** Normal module in millimetres per tooth. */
975
950
  readonly module: number;
976
951
  /** Normal pressure angle in degrees; defaults to 20 degrees. */
977
- readonly pressureAngleDegrees?: number;
952
+ readonly pressureAngle?: number;
978
953
  /** Integer tooth count from 6 through 1,000; external profiles also enforce the no-undercut limit. */
979
954
  readonly toothCount: number;
980
955
  }
@@ -992,6 +967,12 @@ export declare const DEFAULT_GEOMETRY_TOLERANCE: Readonly<{
992
967
  /** Conservative defaults; trusted callers can supply larger explicit ceilings. */
993
968
  export declare const defaultGeometrySamplingLimits: GeometrySamplingLimits;
994
969
 
970
+ /** Returns Euclidean point distance without allocating an intermediate difference vector. */
971
+ export declare const distance2: (a: Vector2Tuple, b: Vector2Tuple) => number;
972
+
973
+ /** Returns Euclidean point distance without allocating an intermediate difference vector. */
974
+ export declare const distance3: (a: Vector3Tuple, b: Vector3Tuple) => number;
975
+
995
976
  /**
996
977
  * Places an exact item count at equal arc-length intervals along a sampled path.
997
978
  *
@@ -999,14 +980,19 @@ export declare const defaultGeometrySamplingLimits: GeometrySamplingLimits;
999
980
  * open paths include both endpoints when `count` is greater than one.
1000
981
  * Coordinates and total length must be finite. Input points and output placements are each
1001
982
  * limited by maxPathPoints (default 100000); exact counts exceeding that ceiling reject before length calculation.
983
+ * Closure defaults to the path value's metadata, or false for tuples. An explicit conflicting closure rejects.
984
+ * Invalid arguments and degenerate paths throw GeometryError.
1002
985
  */
1003
986
  export declare const distributeAlongPath: (
1004
- path: readonly Vector3[],
987
+ input: Path3Input,
1005
988
  count: number,
1006
- closed: boolean,
989
+ closed?: boolean,
1007
990
  limits?: Partial<GeometrySamplingLimits>,
1008
991
  ) => readonly PathPlacement[];
1009
992
 
993
+ /** Returns the scalar dot product. */
994
+ export declare const dot2: (a: Vector2Tuple, b: Vector2Tuple) => number;
995
+
1010
996
  /**
1011
997
  * Returns the scalar dot product.
1012
998
  * @example
@@ -1014,7 +1000,7 @@ export declare const distributeAlongPath: (
1014
1000
  * dot3([1, 0, 0], [0, 1, 0]); // 0
1015
1001
  * ```
1016
1002
  */
1017
- export declare const dot3: (a: Vector3, b: Vector3) => number;
1003
+ export declare const dot3: (a: Vector3Tuple, b: Vector3Tuple) => number;
1018
1004
 
1019
1005
  /**
1020
1006
  * Uniform finishing vocabulary shared by applicable solid edges and profile corners.
@@ -1042,13 +1028,13 @@ export declare type EllipseContourOptions = CircularPrimitiveOptions &
1042
1028
  (
1043
1029
  | {
1044
1030
  /** Positive XY radii in millimetres; mutually exclusive with size. */
1045
- readonly radius: Vector2;
1031
+ readonly radius: Vector2Tuple;
1046
1032
  /** Full XY extents are unavailable when radius is supplied. */
1047
1033
  readonly size?: never;
1048
1034
  }
1049
1035
  | {
1050
1036
  /** Positive full XY extents in millimetres; mutually exclusive with radius. */
1051
- readonly size: Vector2;
1037
+ readonly size: Vector2Tuple;
1052
1038
  /** XY radii are unavailable when size is supplied. */
1053
1039
  readonly radius?: never;
1054
1040
  }
@@ -1075,10 +1061,13 @@ export declare interface EndTreatments {
1075
1061
  * @returns A frozen row-major transform.
1076
1062
  * @throws {@link GeometryError} When an angle is non-finite.
1077
1063
  */
1078
- export declare function eulerTransform3(rotationDegrees: Vector3): Transform3;
1064
+ export declare function eulerTransform3(
1065
+ rotationDegrees: Vector3Tuple,
1066
+ ): Transform3Matrix;
1079
1067
 
1080
1068
  /**
1081
1069
  * Linearly extrudes one simple profile along +Z with robust ear-clipped caps.
1070
+ * Path2 profiles must be closed; raw point collections have an implicit closing edge.
1082
1071
  *
1083
1072
  * @example Extrude point data without an engine
1084
1073
  * ```ts
@@ -1087,7 +1076,7 @@ export declare function eulerTransform3(rotationDegrees: Vector3): Transform3;
1087
1076
  * ```
1088
1077
  */
1089
1078
  export declare function extrudeMesh(
1090
- profile: Contour,
1079
+ input: Path2Input,
1091
1080
  options: ExtrudeOptions,
1092
1081
  ): TriangleMesh;
1093
1082
 
@@ -1112,9 +1101,9 @@ export declare interface ExtrusionSamplingOptions {
1112
1101
  /** Operation-level physical policy over the nearest model scope. */
1113
1102
  readonly resolution?: GeometryResolution;
1114
1103
  /** Finite uniform or XY scale of the top profile; defaults to one. */
1115
- readonly scaleTop?: number | Vector2;
1104
+ readonly scaleTop?: number | Vector2Input;
1116
1105
  /** Finite rotation of the top profile about +Z, in degrees; defaults to zero. */
1117
- readonly twistDegrees?: number;
1106
+ readonly twist?: number;
1118
1107
  }
1119
1108
 
1120
1109
  /** Fits XY bounds uniformly and centers them in the target; zero source axes do not constrain scale. */
@@ -1161,13 +1150,13 @@ export declare function fitTextLayout(
1161
1150
  /** A right-handed orthonormal coordinate frame expressed in world coordinates. */
1162
1151
  export declare interface Frame3 {
1163
1152
  /** World-space origin of the local frame. */
1164
- readonly origin: Vector3;
1153
+ readonly origin: Vector3Tuple;
1165
1154
  /** Unit vector defining the local +X axis. */
1166
- readonly xAxis: Vector3;
1155
+ readonly xAxis: Vector3Tuple;
1167
1156
  /** Unit vector defining the local +Y axis. */
1168
- readonly yAxis: Vector3;
1157
+ readonly yAxis: Vector3Tuple;
1169
1158
  /** Unit vector defining the local +Z axis. */
1170
- readonly zAxis: Vector3;
1159
+ readonly zAxis: Vector3Tuple;
1171
1160
  }
1172
1161
 
1173
1162
  /**
@@ -1181,7 +1170,7 @@ export declare interface Frame3 {
1181
1170
  export declare function frameTransform3(
1182
1171
  frame: Frame3,
1183
1172
  tolerance?: GeometryToleranceOptions,
1184
- ): Transform3;
1173
+ ): Transform3Matrix;
1185
1174
 
1186
1175
  /**
1187
1176
  * Error raised when a geometry precondition or invariant is not satisfied.
@@ -1248,9 +1237,9 @@ export declare interface GeometryResolution {
1248
1237
  /** Optional maximum sampled edge length in millimetres. */
1249
1238
  readonly maxSegmentLength?: number;
1250
1239
  /** Upper safety bound for a full circle; defaults to the selected maxCircularSegments (512 by default). */
1251
- readonly maximumSegments?: number;
1240
+ readonly maxSegments?: number;
1252
1241
  /** Lower full-circle segment count; defaults to 16 or a lower selected circular ceiling. */
1253
- readonly minimumSegments?: number;
1242
+ readonly minSegments?: number;
1254
1243
  }
1255
1244
 
1256
1245
  /** Explicit allocation ceilings for pure sampling and host-owned modeling operations. */
@@ -1276,7 +1265,7 @@ export declare interface GeometryToleranceOptions {
1276
1265
  }
1277
1266
 
1278
1267
  /** Returns one recommended metric clearance-hole diameter in millimetres. */
1279
- export declare function getMetricClearanceHole(
1268
+ export declare function getMetricClearanceHoleDiameter(
1280
1269
  size: MetricFastenerSize,
1281
1270
  fit?: ClearanceHoleFit,
1282
1271
  ): number;
@@ -1288,8 +1277,9 @@ export declare function getMetricFastenerStandard(
1288
1277
 
1289
1278
  /**
1290
1279
  * XY or XYZ grid with X varying fastest. The first item starts at the local origin.
1280
+ * Dimension 2 restricts counts and spacing to XY; any frame must preserve the XY plane.
1291
1281
  */
1292
- export declare type GridPatternOptions = {
1282
+ export declare type GridPatternOptions<Dimension extends 2 | 3 = 3> = {
1293
1283
  /** Center the complete distribution around its local origin; defaults to false. */
1294
1284
  readonly center?: boolean;
1295
1285
  /** Optional right-handed local axes and origin for the grid. */
@@ -1297,22 +1287,24 @@ export declare type GridPatternOptions = {
1297
1287
  } & (
1298
1288
  | {
1299
1289
  /** Positive integer counts on X and Y. */
1300
- readonly count: Vector2;
1290
+ readonly count: Vector2Tuple;
1301
1291
  /** Signed millimetres between adjacent copies on X and Y. */
1302
- readonly spacing: Vector2;
1303
- }
1304
- | {
1305
- /** Positive integer counts on X, Y and Z. */
1306
- readonly count: Vector3;
1307
- /** Signed millimetres between adjacent copies on X, Y and Z. */
1308
- readonly spacing: Vector3;
1292
+ readonly spacing: Vector2Tuple;
1309
1293
  }
1294
+ | (Dimension extends 3
1295
+ ? {
1296
+ /** Positive integer counts on X, Y and Z. */
1297
+ readonly count: Vector3Tuple;
1298
+ /** Signed millimetres between adjacent copies on X, Y and Z. */
1299
+ readonly spacing: Vector3Tuple;
1300
+ }
1301
+ : never)
1310
1302
  );
1311
1303
 
1312
- /** XY or XYZ grid placements in millimetres, in X-fastest order. */
1304
+ /** Spatial XYZ matrices for an XY or XYZ grid, in X-fastest order. */
1313
1305
  export declare function gridPatternTransforms(
1314
1306
  options: GridPatternOptions,
1315
- ): readonly Transform3[];
1307
+ ): readonly Transform3Matrix[];
1316
1308
 
1317
1309
  /**
1318
1310
  * Builds a closed indexed mesh from a rectilinear top, matched boundary walls, and flat base.
@@ -1349,7 +1341,7 @@ export declare type HeightfieldMeshLimits = Partial<
1349
1341
  */
1350
1342
  export declare type HeightfieldOptions = {
1351
1343
  /** Absolute top Z at the supplied XY point. Every sample must be above baseZ. */
1352
- readonly height: (point: Vector2) => number;
1344
+ readonly height: (point: Vector2Tuple) => number;
1353
1345
  /** Flat bottom Z. Defaults to zero. */
1354
1346
  readonly baseZ?: number;
1355
1347
  /**
@@ -1362,11 +1354,11 @@ export declare type HeightfieldOptions = {
1362
1354
  } & (
1363
1355
  | {
1364
1356
  /** Positive XY footprint for uniform sampling. */
1365
- readonly size: Vector2;
1357
+ readonly size: Vector2Tuple;
1366
1358
  /** Exact positive integer X/Y interval counts. */
1367
1359
  readonly segments: readonly [x: number, y: number];
1368
1360
  /** Lower-left footprint XY. Omitted centers the footprint on XY. */
1369
- readonly origin?: Vector2;
1361
+ readonly origin?: Vector2Tuple;
1370
1362
  /** Explicit coordinates cannot be combined with uniform sampling. */
1371
1363
  readonly coordinates?: never;
1372
1364
  }
@@ -1402,6 +1394,15 @@ export declare interface HeightfieldPreflight {
1402
1394
  readonly byteCount: number;
1403
1395
  }
1404
1396
 
1397
+ /**
1398
+ * Builds closed thread-ridge components with every profile locked to the
1399
+ * shaft's radial/axial frame. The mesh is intended for union with its
1400
+ * minor-envelope cylinder and never owns WASM objects.
1401
+ */
1402
+ export declare function helicalThreadRidgeMesh(
1403
+ options: HelicalThreadRidgeMeshOptions,
1404
+ ): TriangleMesh;
1405
+
1405
1406
  /** Runtime-neutral options for the dedicated helical ridge mesher. */
1406
1407
  export declare interface HelicalThreadRidgeMeshOptions {
1407
1408
  /**
@@ -1418,7 +1419,7 @@ export declare interface HelicalThreadRidgeMeshOptions {
1418
1419
  /** Nominal major diameter before any caller-owned fit compensation. */
1419
1420
  readonly majorDiameter: number;
1420
1421
  /** Angular offset of the first start in degrees. Default: `0`. */
1421
- readonly phaseDegrees?: number;
1422
+ readonly phase?: number;
1422
1423
  /** Validated periodic profile repeated around the shaft. */
1423
1424
  readonly profile: ThreadProfile;
1424
1425
  /** Optional circular-resolution policy. */
@@ -1429,6 +1430,19 @@ export declare interface HelicalThreadRidgeMeshOptions {
1429
1430
  readonly tolerance?: GeometryToleranceOptions;
1430
1431
  }
1431
1432
 
1433
+ /**
1434
+ * Builds one closed threaded cylinder without a ridge/core Boolean seam.
1435
+ *
1436
+ * Each circular facet includes its exact phase-shifted profile breakpoints, including duplicate-Z
1437
+ * samples for vertical flanks and blunt transitions. Adjacent variable grids are stitched as a
1438
+ * monotone strip, with optional intermediate rows bounded by physical `maxSegmentLength`. A
1439
+ * conservative pre-allocation estimate rejects excessive meshes before constructing position
1440
+ * arrays.
1441
+ */
1442
+ export declare function helicalThreadSolidMesh(
1443
+ options: HelicalThreadSolidMeshOptions,
1444
+ ): TriangleMesh;
1445
+
1432
1446
  /** Options for a complete threaded-cylinder mesh; base semantics match the ridge builder. */
1433
1447
  export declare interface HelicalThreadSolidMeshOptions extends HelicalThreadRidgeMeshOptions {
1434
1448
  /** Apply a 45-degree radial bevel at the lower target face. */
@@ -1460,7 +1474,7 @@ export declare interface HelicalThreadSolidMeshPreflight {
1460
1474
  }
1461
1475
 
1462
1476
  /** Identity transform, safe to share because it is frozen. */
1463
- export declare const IDENTITY_TRANSFORM3: Transform3;
1477
+ export declare const IDENTITY_TRANSFORM3: Transform3Matrix;
1464
1478
 
1465
1479
  /** Options for a compensated internal-thread subtraction tool along +Z. */
1466
1480
  export declare interface InternalThreadCutterOptions
@@ -1479,7 +1493,9 @@ export declare interface InternalThreadCutterOptions
1479
1493
  * @param transform - Transform to invert.
1480
1494
  * @returns A new frozen transform whose composition with the input is identity.
1481
1495
  */
1482
- export declare function inverseTransform3(transform: Transform3): Transform3;
1496
+ export declare function inverseTransform3(
1497
+ transform: Transform3Matrix,
1498
+ ): Transform3Matrix;
1483
1499
 
1484
1500
  /**
1485
1501
  * Recognizes structured geometry errors from separately bundled Modeling copies in the same realm.
@@ -1509,20 +1525,35 @@ export declare function joinTriangleMeshes(
1509
1525
  export declare function layoutRow(
1510
1526
  bounds: readonly Bounds3[],
1511
1527
  options?: RowLayoutOptions,
1512
- ): readonly Vector3[];
1528
+ ): readonly Vector3Tuple[];
1529
+
1530
+ /** Returns Euclidean vector length in the vector's coordinate units. */
1531
+ export declare const length2: (vector: Vector2Tuple) => number;
1513
1532
 
1514
1533
  /** Returns Euclidean vector length in the vector's coordinate units. */
1515
- export declare const length3: (vector: Vector3) => number;
1534
+ export declare const length3: (vector: Vector3Tuple) => number;
1516
1535
 
1517
1536
  /** Linearly interpolates two vectors; `t` is dimensionless and may extrapolate. */
1518
- export declare const lerp3: (a: Vector3, b: Vector3, t: number) => Vector3;
1537
+ export declare const lerp2: (
1538
+ a: Vector2Tuple,
1539
+ b: Vector2Tuple,
1540
+ t: number,
1541
+ ) => Vector2Tuple;
1542
+
1543
+ /** Linearly interpolates two vectors; `t` is dimensionless and may extrapolate. */
1544
+ export declare const lerp3: (
1545
+ a: Vector3Tuple,
1546
+ b: Vector3Tuple,
1547
+ t: number,
1548
+ ) => Vector3Tuple;
1519
1549
 
1520
1550
  /**
1521
1551
  * Equal linear intervals determined by exactly two of count, spacing and total length.
1552
+ * Dimension defaults to 3; Section patterns use 2 and accept XY vector directions.
1522
1553
  */
1523
- export declare type LinearPatternOptions = {
1554
+ export declare type LinearPatternOptions<Dimension extends 2 | 3 = 3> = {
1524
1555
  /** Direction of repetition; magnitude is ignored. Defaults to +X. */
1525
- readonly direction?: Vector3;
1556
+ readonly direction?: Dimension extends 2 ? Vector2Input : Vector3Input;
1526
1557
  } & (
1527
1558
  | {
1528
1559
  /** Positive copy count, including the original. */
@@ -1550,19 +1581,19 @@ export declare type LinearPatternOptions = {
1550
1581
  }
1551
1582
  );
1552
1583
 
1553
- /** Equal linear placements in millimetres, including the original at the origin. */
1584
+ /** Spatial XYZ matrix placements in millimetres, including the original at the origin. */
1554
1585
  export declare function linearPatternTransforms(
1555
1586
  options: LinearPatternOptions,
1556
- ): readonly Transform3[];
1587
+ ): readonly Transform3Matrix[];
1557
1588
 
1558
1589
  /** Straight planar curve in millimetres. */
1559
1590
  export declare interface LineCurve2 {
1560
1591
  /** Selects straight interpolation between the two endpoints. */
1561
1592
  readonly kind: "line";
1562
1593
  /** Initial XY point in millimetres. */
1563
- readonly start: Vector2;
1594
+ readonly start: Vector2Tuple;
1564
1595
  /** Final XY point in millimetres. */
1565
- readonly end: Vector2;
1596
+ readonly end: Vector2Tuple;
1566
1597
  }
1567
1598
 
1568
1599
  /** Straight spatial curve in millimetres. */
@@ -1570,9 +1601,9 @@ export declare interface LineCurve3 {
1570
1601
  /** Selects straight interpolation between the two endpoints. */
1571
1602
  readonly kind: "line";
1572
1603
  /** Initial XYZ point in millimetres. */
1573
- readonly start: Vector3;
1604
+ readonly start: Vector3Tuple;
1574
1605
  /** Final XYZ point in millimetres. */
1575
- readonly end: Vector3;
1606
+ readonly end: Vector3Tuple;
1576
1607
  }
1577
1608
 
1578
1609
  /**
@@ -1599,6 +1630,7 @@ export declare type LoftCorrespondence =
1599
1630
  * Both ends use ear-clipped caps, supporting concave profiles without center fans.
1600
1631
  * Intermediate slices interpolate placed world vertices, never frame axes.
1601
1632
  * Transformed coordinates must fit finite Float32 mesh storage.
1633
+ * Path2 profiles must be closed; raw point collections are interpreted as closed.
1602
1634
  *
1603
1635
  * @example Loft with explicit point correspondence
1604
1636
  * ```ts
@@ -1614,8 +1646,8 @@ export declare function loftMesh(
1614
1646
 
1615
1647
  /** One point-data profile at a height or explicit right-handed spatial frame. */
1616
1648
  export declare type LoftMeshStation = LoftPlacement & {
1617
- /** Ordered finite XY boundary points with an implicit closing edge. */
1618
- readonly profile: Contour;
1649
+ /** Closed Path2 or ordered finite XY boundary points with an implicit closing edge. */
1650
+ readonly profile: Path2Input;
1619
1651
  };
1620
1652
 
1621
1653
  /**
@@ -1684,7 +1716,8 @@ export declare interface MatchProfilesOptions {
1684
1716
  /**
1685
1717
  * Measures sampled kinematic interference over one tooth cycle of an internal gear pair.
1686
1718
  *
1687
- * The driver and ring rotate in the same direction at their resolved tooth-count ratio. Each
1719
+ * The driver and ring start with half-tooth offsets for odd tooth counts, then rotate in the
1720
+ * same direction at their resolved tooth-count ratio. Each
1688
1721
  * sampled pinion outline is subtracted from the ring's center-and-space opening; remaining area is
1689
1722
  * solid overlap. This catches involute, tip, and trimming interference that a single assembled pose
1690
1723
  * misses. It is a deterministic model check, not a certified gear-rating calculation.
@@ -1694,21 +1727,6 @@ export declare function measureInternalCylindricalGearPairMotion(
1694
1727
  options?: CylindricalGearPairMotionOptions,
1695
1728
  ): CylindricalGearPairMotionReport;
1696
1729
 
1697
- /**
1698
- * Measures bounds, surface area, and signed volume without changing the mesh.
1699
- *
1700
- * Signed volume is meaningful for a consistently wound closed mesh. Set
1701
- * `requireClosed` when measurements will be used as manufacturing assertions.
1702
- *
1703
- * @param mesh - Mesh to validate and measure.
1704
- * @param options - Validation policy applied before measurement.
1705
- * @returns Immutable deterministic scalar and bounds measurements.
1706
- */
1707
- export declare function measureTriangleMesh(
1708
- mesh: TriangleMesh,
1709
- options?: TriangleMeshValidationOptions,
1710
- ): TriangleMeshMeasurements;
1711
-
1712
1730
  /**
1713
1731
  * Computes axis-aligned bounds for a non-empty mesh.
1714
1732
  *
@@ -1790,9 +1808,7 @@ export declare interface MetricSocketCapHeadDimensions {
1790
1808
  * count `z_v = z / cos³(beta)`, so increasing helix angle can reduce the physical tooth count.
1791
1809
  */
1792
1810
  export declare function minimumCylindricalGearToothCountWithoutUndercut(
1793
- spec?: Readonly<
1794
- Pick<CylindricalGearSpec, "helixAngleDegrees" | "pressureAngleDegrees">
1795
- >,
1811
+ spec?: Readonly<Pick<CylindricalGearSpec, "helixAngle" | "pressureAngle">>,
1796
1812
  ): number;
1797
1813
 
1798
1814
  /** Aggregate manufacturing output ceilings selected by a trusted host. */
@@ -1807,8 +1823,25 @@ export declare interface ModelingLimits extends GeometrySamplingLimits {
1807
1823
  readonly maxBytes: number;
1808
1824
  }
1809
1825
 
1810
- /** Normalizes a finite vector and rejects nonfinite lengths or lengths at or below `epsilon`. */
1811
- export declare const normalize3: (vector: Vector3, epsilon?: number) => Vector3;
1826
+ /**
1827
+ * Returns a unit vector; `epsilon` is a finite, non-negative length threshold (default `1e-12`).
1828
+ * Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
1829
+ * `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
1830
+ */
1831
+ export declare const normalize2: (
1832
+ vector: Vector2Tuple,
1833
+ epsilon?: number,
1834
+ ) => Vector2Tuple;
1835
+
1836
+ /**
1837
+ * Returns a unit vector; `epsilon` is a finite, non-negative length threshold (default `1e-12`).
1838
+ * Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
1839
+ * `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
1840
+ */
1841
+ export declare const normalize3: (
1842
+ vector: Vector3Tuple,
1843
+ epsilon?: number,
1844
+ ) => Vector3Tuple;
1812
1845
 
1813
1846
  /**
1814
1847
  * Cleans and validates one closed loop.
@@ -1819,7 +1852,7 @@ export declare const normalize3: (vector: Vector3, epsilon?: number) => Vector3;
1819
1852
  * returned unchanged when their winding and tolerance policy match.
1820
1853
  */
1821
1854
  export declare function normalizeContour(
1822
- input: readonly Vector2[],
1855
+ input: readonly Vector2Tuple[],
1823
1856
  counterClockwise: boolean,
1824
1857
  tolerance?: GeometryToleranceOptions,
1825
1858
  ): Contour;
@@ -1832,18 +1865,18 @@ export declare function normalizeContour(
1832
1865
  * may be returned unchanged under the same tolerance policy.
1833
1866
  */
1834
1867
  export declare function normalizePolygon(
1835
- polygon: Polygon,
1868
+ polygon: PolygonData,
1836
1869
  tolerance?: GeometryToleranceOptions,
1837
- ): Polygon;
1870
+ ): PolygonData;
1838
1871
 
1839
1872
  /**
1840
1873
  * Validates a disjoint explicit region and returns immutable normalized data.
1841
1874
  * Previously validated immutable results may be returned unchanged under the same tolerance policy.
1842
1875
  */
1843
1876
  export declare function normalizeRegion(
1844
- region: Region,
1877
+ region: RegionData,
1845
1878
  tolerance?: GeometryToleranceOptions,
1846
- ): Region;
1879
+ ): RegionData;
1847
1880
 
1848
1881
  /**
1849
1882
  * Improves pathological planar triangulation with bounded legal diagonal flips.
@@ -1863,31 +1896,101 @@ export declare function optimizePlanarPatches(
1863
1896
  options?: PlanarMeshOptimizationOptions,
1864
1897
  ): PlanarMeshOptimizationResult;
1865
1898
 
1866
- /** An ordered, open sequence of two-dimensional points. */
1867
- export declare type Path2 = readonly Vector2[];
1868
-
1869
- /**
1870
- * An ordered, open sequence of three-dimensional points.
1871
- */
1872
- export declare type Path3 = readonly Vector3[];
1899
+ /** Immutable directed XY polyline. Closure is explicit and does not imply a filled Section. */
1900
+ export declare interface Path2 {
1901
+ /** Coordinate dimension; identifies planar paths even when empty. */
1902
+ readonly dimension: 2;
1903
+ /** Whether traversal includes the last-to-first edge. */
1904
+ readonly closed: boolean;
1905
+ /** Returns frozen tuple coordinates; closure remains separate metadata. Repeated calls do not allocate. */
1906
+ toArray(): Path2Data;
1907
+ /** Total sampled edge length in model units, including the closing edge when closed. */
1908
+ length(): number;
1909
+ /** Axis-aligned bounds, or undefined for an empty path. */
1910
+ bounds(): Bounds2 | undefined;
1911
+ /** Finds the nearest edge location; requires at least two vertices. */
1912
+ closestPoint(point: Vector2Input): PathLocation<Vector2>;
1913
+ /** Applies an XY placement without reordering traversal, including after reflection. */
1914
+ transform(placement: Transform2Input): Path2;
1915
+ /** Reverses vertex order and traversal; neither the source nor its coordinates are mutated. */
1916
+ reverse(): Path2;
1917
+ /** Returns a path sampled at equal arc lengths. Corners may be bridged; closure is preserved. */
1918
+ resample(options?: PathResamplingOptions): Path2;
1919
+ }
1920
+
1921
+ /**
1922
+ * Snapshots finite XY coordinates as an immutable sampled path, independent of engine initialization.
1923
+ * Open paths may be empty or have one point; closed paths need three vertices and omit a duplicated
1924
+ * seam. Repeated adjacent vertices are retained. No winding normalization or filling is performed.
1925
+ * Malformed dimensions or topology throw INVALID_ARGUMENT; nonfinite coordinates or measurement
1926
+ * overflow throw NON_FINITE_VALUE; exhausted allocation ceilings throw COMPLEXITY_LIMIT GeometryError.
1927
+ * A path input retains its closure. Limits bound construction only; resampling takes its own limits.
1928
+ */
1929
+ export declare function path2(input: Path2Input, options?: PathOptions): Path2;
1930
+
1931
+ /** XY point tuples for interchange; closure is supplied by the consuming operation or Path2 value. */
1932
+ export declare type Path2Data = readonly Vector2Tuple[];
1933
+
1934
+ /** An immutable XY sampled path or a collection of XY tuples and fluent vectors. */
1935
+ export declare type Path2Input = Path2 | readonly Vector2Input[];
1936
+
1937
+ /** Immutable directed XYZ polyline; it represents sampled edges, not an analytic curve. */
1938
+ export declare interface Path3 {
1939
+ /** Coordinate dimension; identifies spatial paths even when empty. */
1940
+ readonly dimension: 3;
1941
+ /** Whether traversal includes the last-to-first edge. */
1942
+ readonly closed: boolean;
1943
+ /** Returns frozen tuple coordinates; closure remains separate metadata. Repeated calls do not allocate. */
1944
+ toArray(): Path3Data;
1945
+ /** Total sampled edge length in model units, including the closing edge when closed. */
1946
+ length(): number;
1947
+ /** Axis-aligned bounds, or undefined for an empty path. */
1948
+ bounds(): Bounds3 | undefined;
1949
+ /** Finds the nearest edge location; requires at least two vertices. */
1950
+ closestPoint(point: Vector3Input): PathLocation<Vector3>;
1951
+ /** Applies an XYZ placement without changing traversal order or closure. */
1952
+ transform(placement: Transform3Input): Path3;
1953
+ /** Reverses vertex order and traversal without mutating the source. */
1954
+ reverse(): Path3;
1955
+ /** Returns a path sampled at equal arc lengths. Corners may be bridged; closure is preserved. */
1956
+ resample(options?: PathResamplingOptions): Path3;
1957
+ }
1958
+
1959
+ /**
1960
+ * Snapshots finite XYZ coordinates as an immutable sampled path with the same closure, seam,
1961
+ * allocation and error rules as path2. Analytic curves must be sampled explicitly first.
1962
+ */
1963
+ export declare function path3(input: Path3Input, options?: PathOptions): Path3;
1964
+
1965
+ /**
1966
+ * XYZ point tuples for interchange; closure is supplied by the consuming operation or Path3 value.
1967
+ */
1968
+ export declare type Path3Data = readonly Vector3Tuple[];
1969
+
1970
+ /** An immutable XYZ sampled path or a collection of XYZ tuples and fluent vectors. */
1971
+ export declare type Path3Input = Path3 | readonly Vector3Input[];
1873
1972
 
1874
1973
  /** Orthonormal right-handed frame sampled along a path. */
1875
1974
  export declare interface PathFrame {
1876
1975
  /** Unit path tangent. */
1877
- readonly tangent: Vector3;
1976
+ readonly tangent: Vector3Tuple;
1878
1977
  /** Unit transported profile X axis. */
1879
- readonly normal: Vector3;
1978
+ readonly normal: Vector3Tuple;
1880
1979
  /** Unit profile Y axis equal to tangent × normal. */
1881
- readonly binormal: Vector3;
1980
+ readonly binormal: Vector3Tuple;
1882
1981
  }
1883
1982
 
1884
- /**
1885
- * Returns total sampled 3D path length, or zero for an empty path.
1886
- */
1887
- export declare const pathLength: (
1888
- path: readonly Vector3[],
1889
- limits?: Partial<GeometrySamplingLimits>,
1890
- ) => number;
1983
+ /** Nearest location on a sampled boundary, rather than inside a filled shape or on an analytic curve. */
1984
+ export declare interface PathLocation<Point extends Vector2 | Vector3> {
1985
+ /** Immutable position on the selected edge. */
1986
+ readonly point: Point;
1987
+ /** Euclidean distance from the query in model units. */
1988
+ readonly distance: number;
1989
+ /** Starting vertex of the selected edge; ties keep the first edge in traversal order. */
1990
+ readonly edgeIndex: number;
1991
+ /** Clamped fraction along that edge, not the whole path's normalized arc length. */
1992
+ readonly fraction: number;
1993
+ }
1891
1994
 
1892
1995
  /**
1893
1996
  * Supplies a profile-X orientation guide for each original normalized sweep station.
@@ -1897,17 +2000,25 @@ export declare const pathLength: (
1897
2000
  * @returns A finite guide vector that is not parallel to the local path tangent.
1898
2001
  */
1899
2002
  export declare type PathNormalGuide = (
1900
- point: Vector3,
2003
+ point: Vector3Tuple,
1901
2004
  index: number,
1902
- ) => Vector3;
2005
+ ) => Vector3Input;
2006
+
2007
+ /** Topology and allocation ceiling for an immutable sampled path. */
2008
+ export declare interface PathOptions {
2009
+ /** Connects the last vertex to the first; closed paths omit the repeated seam. Defaults to false. */
2010
+ readonly closed?: boolean;
2011
+ /** Construction point ceiling; defaults to package sampling limits. Later sampling has its own options. */
2012
+ readonly limits?: Partial<GeometrySamplingLimits>;
2013
+ }
1903
2014
 
1904
2015
  /** Equal physical arc-length placements along an open or implicitly closed sampled path. */
1905
2016
  export declare interface PathPatternOptions {
1906
2017
  /** Positive number of copies; open paths include both endpoints when greater than one. */
1907
2018
  readonly count: number;
1908
- /** Include the closing edge without duplicating the seam; defaults to false. */
2019
+ /** Raw point closure defaults to false; a path value supplies closure and rejects conflicts. */
1909
2020
  readonly closed?: boolean;
1910
- /** Preserve the source orientation, or align its +Z to the path tangent; defaults to fixed. */
2021
+ /** Preserve orientation, or align local +X for Sections / +Z for Solids to the tangent. Defaults to fixed. */
1911
2022
  readonly orientation?: "fixed" | "tangent";
1912
2023
  }
1913
2024
 
@@ -1917,17 +2028,35 @@ export declare interface PathPatternOptions {
1917
2028
  * Explicit sampling ceilings bound both input points and output placements.
1918
2029
  */
1919
2030
  export declare function pathPatternTransforms(
1920
- path: readonly Vector3[],
2031
+ path: Path3Input,
1921
2032
  options: PathPatternOptions,
1922
2033
  limits?: Partial<GeometrySamplingLimits>,
1923
- ): readonly Transform3[];
2034
+ ): readonly Transform3Matrix[];
1924
2035
 
1925
2036
  /** Position and unit tangent for one path-distributed item. */
1926
2037
  export declare interface PathPlacement {
1927
2038
  /** Interpolated point on the sampled path. */
1928
- readonly position: Vector3;
2039
+ readonly position: Vector3Tuple;
1929
2040
  /** Unit tangent of the path segment containing the placement. */
1930
- readonly tangent: Vector3;
2041
+ readonly tangent: Vector3Tuple;
2042
+ }
2043
+
2044
+ /** Equal arc-length sampling; the path itself owns whether its closing edge is included. */
2045
+ export declare interface PathResamplingOptions extends CurveSamplingOptions {
2046
+ /** Exact arc-length intervals; closed paths need at least three. Otherwise physical resolution or the effective source edge count controls sampling. */
2047
+ readonly segments?: number;
2048
+ }
2049
+
2050
+ /** A fixed XY point in world coordinates; omitted pivots use the coordinate origin. */
2051
+ export declare interface Pivot2Options {
2052
+ /** World-space point left fixed by rotation or scaling. */
2053
+ readonly pivot?: Vector2Input;
2054
+ }
2055
+
2056
+ /** A fixed XYZ point in world coordinates; omitted pivots use the coordinate origin. */
2057
+ export declare interface Pivot3Options {
2058
+ /** World-space point left fixed by rotation or scaling. */
2059
+ readonly pivot?: Vector3Input;
1931
2060
  }
1932
2061
 
1933
2062
  /** Stable reason why planar optimization returned the original mesh unchanged. */
@@ -1944,23 +2073,23 @@ export declare interface PlanarMeshOptimizationOptions extends TriangleMeshQuali
1944
2073
  * Maximum attempted edge evaluations. By default this is twenty times the initial candidate
1945
2074
  * edge count, capped at `1000000`.
1946
2075
  */
1947
- readonly maximumFlipAttempts?: number;
2076
+ readonly maxFlipAttempts?: number;
1948
2077
  /** Maximum times one edge may be reconsidered after neighbouring flips. Defaults to `12`. */
1949
- readonly maximumEdgeRevisits?: number;
2078
+ readonly maxEdgeRevisits?: number;
1950
2079
  /** Maximum triangles allowed in one selected patch. Defaults to `50000`. */
1951
- readonly maximumPatchTriangleCount?: number;
2080
+ readonly maxPatchTriangles?: number;
1952
2081
  /** Maximum cumulative triangles across selected patches. Defaults to `200000`. */
1953
- readonly maximumProcessedTriangleCount?: number;
2082
+ readonly maxProcessedTriangles?: number;
1954
2083
  /** Minimum triangles required before a planar patch is eligible. Defaults to `8`. */
1955
- readonly minimumPatchTriangleCount?: number;
2084
+ readonly minPatchTriangles?: number;
1956
2085
  /** Select patches whose worst normalized aspect ratio exceeds this value. Defaults to `12`. */
1957
- readonly triggerMaximumAspectRatio?: number;
2086
+ readonly triggerMaxAspectRatio?: number;
1958
2087
  /** Select patches whose largest per-vertex triangle share exceeds this ratio. Defaults to `0.2`. */
1959
- readonly triggerMaximumFanRatio?: number;
2088
+ readonly triggerMaxFanRatio?: number;
1960
2089
  /** Select patches whose largest vertex triangle incidence exceeds this value. Defaults to `16`. */
1961
- readonly triggerMaximumVertexTriangleIncidence?: number;
2090
+ readonly triggerMaxVertexTriangleIncidence?: number;
1962
2091
  /** Select patches whose smallest interior angle is below this many degrees. Defaults to `8`. */
1963
- readonly triggerMinimumAngleDegrees?: number;
2092
+ readonly triggerMinAngleDegrees?: number;
1964
2093
  }
1965
2094
 
1966
2095
  /** Outcome of bounded planar-patch optimization, including before/after diagnostics. */
@@ -2008,7 +2137,7 @@ export declare interface PlanarPatchQuality {
2008
2137
  /** Smallest interior triangle angle in degrees. */
2009
2138
  readonly minimumTriangleAngleDegrees: number;
2010
2139
  /** Consistently wound unit normal for the patch plane. */
2011
- readonly normal: Vector3;
2140
+ readonly normal: Vector3Tuple;
2012
2141
  /** Plane offset in `dot(normal, position) = planeOffset` form, in model units. */
2013
2142
  readonly planeOffset: number;
2014
2143
  /** Total patch area in squared model units. */
@@ -2026,7 +2155,7 @@ export declare interface PlanarPatchQuality {
2026
2155
  * their duplicated closing point. Holes must lie inside `outer` and must not
2027
2156
  * intersect each other or the exterior.
2028
2157
  */
2029
- export declare interface Polygon {
2158
+ export declare interface PolygonData {
2030
2159
  /** Clockwise interior boundaries, each omitting its duplicated closing point. */
2031
2160
  readonly holes: readonly Contour[];
2032
2161
  /** Counter-clockwise exterior boundary, omitting its duplicated closing point. */
@@ -2087,26 +2216,18 @@ export declare function preflightThreadedRod(
2087
2216
  options: ThreadedRodOptions,
2088
2217
  ): HelicalThreadSolidMeshPreflight;
2089
2218
 
2090
- /** Placement shared by solid and filled-section factories. */
2091
- export declare interface PrimitivePlacement {
2092
- /** Applied after local construction; Section placement must preserve the XY plane. */
2093
- readonly placement?: PrimitivePlacementOptions;
2219
+ /** Anchor attachment shared by solid and filled-section factories. */
2220
+ export declare interface PrimitiveAttachment {
2221
+ /** Applied after local construction; Section attachment must preserve the XY plane. */
2222
+ readonly attachment?: PrimitiveAttachmentOptions;
2094
2223
  }
2095
2224
 
2096
2225
  /** Maps an explicit or named shape-local attachment anchor onto a world-space anchor. */
2097
- export declare interface PrimitivePlacementOptions {
2226
+ export declare interface PrimitiveAttachmentOptions extends AttachOptions {
2098
2227
  /** Shape-local source frame or a named primitive anchor such as bottom. */
2099
2228
  readonly source: Anchor3 | string;
2100
2229
  /** World-space target frame in millimetres. */
2101
2230
  readonly target: Anchor3;
2102
- /** Align outward directions face-to-face or in parallel. Defaults to opposed. */
2103
- readonly alignment?: "opposed" | "same";
2104
- /** Finite separation along the target direction in millimetres. Defaults to zero. */
2105
- readonly gap?: number;
2106
- /** Finite additional roll around the attached direction in degrees. Defaults to zero. */
2107
- readonly spinDegrees?: number;
2108
- /** Explicit numeric comparison overrides for anchor normalization. */
2109
- readonly tolerance?: GeometryToleranceOptions;
2110
2231
  }
2111
2232
 
2112
2233
  /**
@@ -2178,7 +2299,7 @@ export declare interface ProfiledEdgeTreatment {
2178
2299
  * First coordinates decrease and second coordinates increase. Cylinder/extrusion ends use
2179
2300
  * cap inset first, side setback second; planar corners use incoming then outgoing edges.
2180
2301
  */
2181
- readonly profile: readonly Vector2[];
2302
+ readonly profile: readonly Vector2Tuple[];
2182
2303
  }
2183
2304
 
2184
2305
  /** An identified line, circular arc, or cubic Bézier between corresponding landmarks. */
@@ -2194,41 +2315,41 @@ export declare type ProfileSpan2 = {
2194
2315
  /** Selects a straight span. */
2195
2316
  readonly kind: "line";
2196
2317
  /** Start point in millimetres. */
2197
- readonly start: Vector2;
2318
+ readonly start: Vector2Tuple;
2198
2319
  /** End point in millimetres. */
2199
- readonly end: Vector2;
2320
+ readonly end: Vector2Tuple;
2200
2321
  }
2201
2322
  | {
2202
2323
  /** Selects the geometric curve or span family. */
2203
2324
  readonly kind: "arc";
2204
2325
  /** Center point in millimetres. */
2205
- readonly center: Vector2;
2326
+ readonly center: Vector2Tuple;
2206
2327
  /** Circular radius in millimetres. */
2207
2328
  readonly radius: number;
2208
2329
  /** Initial counterclockwise angle in degrees. */
2209
- readonly startDegrees: number;
2330
+ readonly startAngle: number;
2210
2331
  /** Signed counterclockwise angular sweep in degrees. */
2211
- readonly sweepDegrees: number;
2332
+ readonly sweepAngle: number;
2212
2333
  }
2213
2334
  | {
2214
2335
  /** Selects a cubic Bézier span with the same coordinates as CubicBezierCurve2. */
2215
2336
  readonly kind: "cubic";
2216
2337
  /** Start point in millimetres. */
2217
- readonly start: Vector2;
2338
+ readonly start: Vector2Tuple;
2218
2339
  /** First control point in millimetres. */
2219
- readonly control1: Vector2;
2340
+ readonly control1: Vector2Tuple;
2220
2341
  /** Second control point in millimetres. */
2221
- readonly control2: Vector2;
2342
+ readonly control2: Vector2Tuple;
2222
2343
  /** End point in millimetres. */
2223
- readonly end: Vector2;
2344
+ readonly end: Vector2Tuple;
2224
2345
  }
2225
2346
  );
2226
2347
 
2227
2348
  /** Removes the component parallel to a normalized plane normal. */
2228
2349
  export declare const projectOntoPlane3: (
2229
- vector: Vector3,
2230
- normal: Vector3,
2231
- ) => Vector3;
2350
+ vector: Vector3Tuple,
2351
+ normal: Vector3Tuple,
2352
+ ) => Vector3Tuple;
2232
2353
 
2233
2354
  /** Resolved pitch-line dimensions for a finite rack segment. */
2234
2355
  export declare interface RackPitchDimensions {
@@ -2259,37 +2380,41 @@ export declare interface RackPitchSpec {
2259
2380
  /** Dedendum clearance as a multiple of normal module; defaults to `0.25`. */
2260
2381
  readonly clearanceFactor?: number;
2261
2382
  /** Signed helix angle in degrees; zero creates a straight rack. */
2262
- readonly helixAngleDegrees?: number;
2383
+ readonly helixAngle?: number;
2263
2384
  /** Normal module in millimetres per tooth. */
2264
2385
  readonly module: number;
2265
2386
  /** Normal pressure angle in degrees; defaults to 20 degrees. */
2266
- readonly pressureAngleDegrees?: number;
2387
+ readonly pressureAngle?: number;
2267
2388
  /** Number of complete rack teeth represented by the segment. */
2268
2389
  readonly toothCount: number;
2269
2390
  }
2270
2391
 
2271
2392
  /**
2272
- * Options for repeating one solid around an axis through a center point.
2393
+ * Degree rotations about a fixed world-space pivot; XY patterns use the implicit +Z axis.
2273
2394
  */
2274
- export declare interface RadialPatternOptions {
2275
- /** Number of solids to return, including the original. */
2395
+ export declare type RadialPatternOptions<Dimension extends 2 | 3 = 3> = {
2396
+ /** Number of shapes to return, including the original. */
2276
2397
  readonly count: number;
2277
- /** Axis of the right-handed rotation. Its magnitude is ignored. */
2278
- readonly axis: Vector3;
2279
2398
  /** Signed rotation from one copy to the next, in degrees. */
2280
- readonly angleDegrees: number;
2281
- /** Rotation center in world coordinates. Defaults to the origin. */
2282
- readonly center?: Vector3;
2283
- }
2399
+ readonly angle: number;
2400
+ /** Fixed world-space rotation pivot; defaults to the coordinate origin. */
2401
+ readonly pivot?: Dimension extends 2 ? Vector2Input : Vector3Input;
2402
+ } & (Dimension extends 2
2403
+ ? {
2404
+ /** XY rotation uses +Z; an explicit spatial axis is unavailable. */
2405
+ readonly axis?: never;
2406
+ }
2407
+ : {
2408
+ /** Axis of the right-handed rotation. Its nonzero magnitude is ignored. */
2409
+ readonly axis: Vector3Input;
2410
+ });
2284
2411
 
2285
2412
  /** Rotations about an explicit axis; angles use degrees and the first placement is identity. */
2286
2413
  export declare function radialPatternTransforms(
2287
2414
  options: RadialPatternOptions,
2288
- ): readonly Transform3[];
2415
+ ): readonly Transform3Matrix[];
2289
2416
 
2290
- /**
2291
- * Radial dimensions refer to polygon vertices or compensate faceting to meet polygon faces.
2292
- */
2417
+ /** Radial dimensions refer to polygon vertices or compensate faceting to meet polygon faces. */
2293
2418
  export declare type RadialSizing = "vertex" | "face";
2294
2419
 
2295
2420
  /**
@@ -2319,7 +2444,7 @@ export declare function rectangleContour(
2319
2444
  */
2320
2445
  export declare interface RectangleContourOptions {
2321
2446
  /** Positive uniform size or explicit XY extents in millimetres. */
2322
- readonly size: number | Vector2;
2447
+ readonly size: number | Vector2Tuple;
2323
2448
  /** Center on XY; otherwise the minimum corner is the origin. Defaults to true. */
2324
2449
  readonly center?: boolean;
2325
2450
  /** Uniform treatment or four corner treatments. Exact round segments describe a complete circle and must divide by four. */
@@ -2362,9 +2487,6 @@ export declare interface RectangleProfileOptions extends RectangleContourOptions
2362
2487
  readonly id?: string;
2363
2488
  }
2364
2489
 
2365
- /** A two-dimensional region represented by disjoint filled polygons. */
2366
- export declare type Region = readonly Polygon[];
2367
-
2368
2490
  /**
2369
2491
  * Returns the total filled area of a normalized region in square millimetres.
2370
2492
  *
@@ -2375,10 +2497,13 @@ export declare type Region = readonly Polygon[];
2375
2497
  * @param region - Normalized disjoint polygons with CCW outers and clockwise holes.
2376
2498
  * @returns Total filled area in square millimetres.
2377
2499
  */
2378
- export declare function regionArea(region: Region): number;
2500
+ export declare function regionArea(region: RegionData): number;
2379
2501
 
2380
2502
  /** Returns finite axis-aligned bounds for a non-empty region. */
2381
- export declare function regionBounds(region: Region): Bounds2;
2503
+ export declare function regionBounds(region: RegionData): Bounds2;
2504
+
2505
+ /** A two-dimensional region represented by disjoint filled polygons. */
2506
+ export declare type RegionData = readonly PolygonData[];
2382
2507
 
2383
2508
  /**
2384
2509
  * Creates a centered CCW point loop with vertex or face radial sizing and an implicit seam.
@@ -2390,7 +2515,7 @@ export declare function regionBounds(region: Region): Bounds2;
2390
2515
  */
2391
2516
  export declare const regularPolygonContour: (
2392
2517
  options: RegularPolygonContourOptions,
2393
- ) => readonly Vector2[];
2518
+ ) => readonly Vector2Tuple[];
2394
2519
 
2395
2520
  /** Exact regular polygon dimensions and counterclockwise degree rotation. */
2396
2521
  export declare interface RegularPolygonContourOptions extends RadialSizingOptions {
@@ -2399,7 +2524,7 @@ export declare interface RegularPolygonContourOptions extends RadialSizingOption
2399
2524
  /** Exact side count from three through the selected profile sampling ceiling. */
2400
2525
  readonly sides: number;
2401
2526
  /** Counterclockwise rotation in degrees; defaults to zero with a vertex on +X. */
2402
- readonly rotationDegrees?: number;
2527
+ readonly rotation?: number;
2403
2528
  }
2404
2529
 
2405
2530
  /** Resamples a planar polyline with the same point, tangent, seam and budget guarantees as 3D.
@@ -2410,7 +2535,7 @@ export declare interface RegularPolygonContourOptions extends RadialSizingOption
2410
2535
  * ```
2411
2536
  */
2412
2537
  export declare function resamplePolyline2(
2413
- path: readonly Vector2[],
2538
+ path: readonly Vector2Tuple[],
2414
2539
  options?: PolylineResamplingOptions,
2415
2540
  ): SampledCurve2;
2416
2541
 
@@ -2426,7 +2551,7 @@ export declare function resamplePolyline2(
2426
2551
  * ```
2427
2552
  */
2428
2553
  export declare function resamplePolyline3(
2429
- path: readonly Vector3[],
2554
+ path: readonly Vector3Tuple[],
2430
2555
  options?: PolylineResamplingOptions,
2431
2556
  ): SampledCurve3;
2432
2557
 
@@ -2436,7 +2561,7 @@ export declare function resamplePolyline3(
2436
2561
  * `alignTo` must be non-empty and contain only positive safe integers. Its checked least common
2437
2562
  * multiple defines the alignment grid. An exact `segments` value wins over
2438
2563
  * `resolution.circularSegments` and adaptive sampling, but is never rounded: it must already be
2439
- * aligned and meet `minimumSegments`. Adaptive counts are rounded upward and fail with
2564
+ * aligned and meet `minSegments`. Adaptive counts are rounded upward and fail with
2440
2565
  * `COMPLEXITY_LIMIT` when the aligned result exceeds the configured safety cap.
2441
2566
  *
2442
2567
  * @param radius - Positive circle radius in millimetres used for adaptive physical sampling.
@@ -2463,7 +2588,7 @@ export declare function resolveAlignedCircularSegments(
2463
2588
  * the reusable BOSL2-style convention while retaining at least one segment.
2464
2589
  *
2465
2590
  * @param radius - Arc radius in millimetres.
2466
- * @param angleDegrees - Non-zero signed sweep angle no greater than 360 degrees in magnitude.
2591
+ * @param angle - Non-zero signed sweep angle no greater than 360 degrees in magnitude.
2467
2592
  * @param policy - Optional operation-level policy over the active model scope.
2468
2593
  * @returns Segment count for the requested arc span.
2469
2594
  * @throws {@link GeometryError} when radius, angle, or resolution policy is invalid, or the
@@ -2477,8 +2602,8 @@ export declare function resolveAlignedCircularSegments(
2477
2602
  */
2478
2603
  export declare function resolveArcSegments(
2479
2604
  radius: number,
2480
- angleDegrees: number,
2481
- policy?: GeometryResolution,
2605
+ angle: number,
2606
+ policy?: CircularResolutionOptions,
2482
2607
  limits?: Partial<GeometrySamplingLimits>,
2483
2608
  ): number;
2484
2609
 
@@ -2486,7 +2611,8 @@ export declare function resolveArcSegments(
2486
2611
  * Resolves a deterministic full-circle segment count for one radius.
2487
2612
  *
2488
2613
  * An exact `circularSegments` value wins. Otherwise the smallest regular polygon satisfying both
2489
- * physical error criteria is used. A safety cap that would violate either criterion raises
2614
+ * physical error criteria is used. Face sizing bounds the circumscribed polygon's outward
2615
+ * excess and actual edge length. A safety cap that would violate either criterion raises
2490
2616
  * `COMPLEXITY_LIMIT` rather than silently reducing quality.
2491
2617
  *
2492
2618
  * @param radius - Circle radius in millimetres.
@@ -2504,7 +2630,7 @@ export declare function resolveArcSegments(
2504
2630
  */
2505
2631
  export declare function resolveCircularSegments(
2506
2632
  radius: number,
2507
- policy?: GeometryResolution,
2633
+ policy?: CircularResolutionOptions,
2508
2634
  limits?: Partial<GeometrySamplingLimits>,
2509
2635
  ): number;
2510
2636
 
@@ -2559,7 +2685,7 @@ export declare interface ResolvedGeometryTolerance {
2559
2685
  * @returns Number of intermediate copies, excluding the two end profiles.
2560
2686
  */
2561
2687
  export declare function resolveExtrusionDivisions(
2562
- profile: Contour | Region,
2688
+ profile: Contour | RegionData,
2563
2689
  height: number,
2564
2690
  options?: ExtrusionSamplingOptions,
2565
2691
  ): number;
@@ -2600,7 +2726,7 @@ export declare function resolveRackPitch(
2600
2726
  * Resolves a role-independent, start-aligned facet count from the larger female mating envelope.
2601
2727
  *
2602
2728
  * An exact `circularSegments` value must already be divisible by `starts`; it is never silently
2603
- * raised. Adaptive policies align upward and fail if that would exceed `maximumSegments`.
2729
+ * raised. Adaptive policies align upward and fail if that would exceed `maxSegments`.
2604
2730
  */
2605
2731
  export declare function resolveThreadCircularSegments(
2606
2732
  options: ThreadCircularSegmentsOptions,
@@ -2623,6 +2749,7 @@ export declare function reverseTriangleMesh(mesh: TriangleMesh): TriangleMesh;
2623
2749
  * vertices and zero-area quads. Profile edges that lie entirely on the axis
2624
2750
  * collapse to the solid's interior and are intentionally omitted.
2625
2751
  * Profile coordinates must fit finite Float32 mesh storage.
2752
+ * Path2 profiles must be closed; raw point collections have an implicit closing edge.
2626
2753
  *
2627
2754
  * @param profile - Closed CCW `[radius, z]` profile without a duplicated seam point.
2628
2755
  * @param options - Optional physical or exact circumferential sampling controls. Defaults to `{}`.
@@ -2631,11 +2758,11 @@ export declare function reverseTriangleMesh(mesh: TriangleMesh): TriangleMesh;
2631
2758
  * @example Partial revolution with end caps
2632
2759
  * ```ts
2633
2760
  * // Each point is [radius, Z]; the profile seam is implicit.
2634
- * revolveMesh([[0, 0], [12, 0], [8, 20], [0, 20]], { revolveDegrees: 270 });
2761
+ * revolveMesh([[0, 0], [12, 0], [8, 20], [0, 20]], { degrees: 270 });
2635
2762
  * ```
2636
2763
  */
2637
2764
  export declare const revolveMesh: (
2638
- profile: readonly Vector2[],
2765
+ input: Path2Input,
2639
2766
  options?: RevolveOptions,
2640
2767
  ) => TriangleMesh;
2641
2768
 
@@ -2644,22 +2771,26 @@ export declare const revolveMesh: (
2644
2771
  */
2645
2772
  export declare interface RevolveOptions extends CircularPrimitiveOptions {
2646
2773
  /**
2647
- * Positive angular sweep no greater than 360 degrees; partial revolutions have end caps.
2774
+ * Positive sweep in degrees, no greater than 360. Defaults to a full revolution;
2775
+ * smaller sweeps form partial revolutions with end caps.
2648
2776
  * Segment counts describe a complete circle and scale to this angular span. Native filled
2649
2777
  * revolutions require at least three sweep intervals: adaptive sampling refines to that floor,
2650
2778
  * while exact counts that imply fewer intervals reject. Pure revolveMesh supports one interval.
2779
+ * @defaultValue `360`
2651
2780
  */
2652
- readonly revolveDegrees?: number;
2781
+ readonly degrees?: number;
2653
2782
  /** Explicit output and sampling allocation ceilings. */
2654
2783
  readonly limits?: Partial<ModelingLimits>;
2655
2784
  }
2656
2785
 
2657
- /** Rotates a vector right-handed around an axis by `angle` radians. */
2658
- export declare const rotateAroundAxis3: (
2659
- vector: Vector3,
2660
- axis: Vector3,
2661
- angle: number,
2662
- ) => Vector3;
2786
+ /**
2787
+ * Rotates a finite vector counter-clockwise in XY by `degrees` about the origin.
2788
+ * Throws `NON_FINITE_VALUE` for nonfinite coordinates, angles, or derived coordinates.
2789
+ */
2790
+ export declare const rotate2: (
2791
+ vector: Vector2Tuple,
2792
+ degrees: number,
2793
+ ) => Vector2Tuple;
2663
2794
 
2664
2795
  /**
2665
2796
  * Creates a right-handed axis-angle rotation transform.
@@ -2670,10 +2801,10 @@ export declare const rotateAroundAxis3: (
2670
2801
  * @returns A frozen row-major transform.
2671
2802
  */
2672
2803
  export declare function rotationTransform3(
2673
- axis: Vector3,
2804
+ axis: Vector3Tuple,
2674
2805
  angle: AxisAngleRotation3,
2675
2806
  tolerance?: GeometryToleranceOptions,
2676
- ): Transform3;
2807
+ ): Transform3Matrix;
2677
2808
 
2678
2809
  /**
2679
2810
  * Replaces each vertex of a non-duplicated closed polyline with a sampled
@@ -2683,13 +2814,14 @@ export declare function rotationTransform3(
2683
2814
  * 45% of adjacent segment lengths to prevent neighboring corners from crossing.
2684
2815
  * The returned path does not duplicate its closing point.
2685
2816
  * Coordinates and radius must be finite; input and output are each limited by maxPathPoints (default 100000).
2817
+ * Requires a closed path value; raw tuples are interpreted as closed. Invalid inputs throw GeometryError.
2686
2818
  */
2687
2819
  export declare const roundClosedPolylinePath: (
2688
- points: readonly Vector3[],
2820
+ input: Path3Input,
2689
2821
  radius: number,
2690
2822
  segmentsPerCorner: number,
2691
2823
  limits?: Partial<GeometrySamplingLimits>,
2692
- ) => readonly Vector3[];
2824
+ ) => readonly Vector3Tuple[];
2693
2825
 
2694
2826
  /**
2695
2827
  * A circular edge or corner roundover with explicit physical sampling.
@@ -2716,7 +2848,7 @@ export declare interface RowLayoutOptions {
2716
2848
  * coordinate range are required. No native engine, SDK, or ambient resolution is used.
2717
2849
  *
2718
2850
  * @param curve - Closed contour in millimetres unless positive scales convert its coordinates.
2719
- * @param options - Physical resolution and unique vertex budget; defaults to 4096 vertices.
2851
+ * @param options - Physical resolution and unique vertex budget; defaults to min(4096, maxProfilePoints).
2720
2852
  * @returns Frozen counterclockwise loop in millimetres, without a repeated seam endpoint.
2721
2853
  * @throws {@link GeometryError} for invalid data, topology, scale, or exceeded sampling budgets.
2722
2854
  *
@@ -2746,7 +2878,7 @@ export declare interface SampleContourOptions {
2746
2878
  /** Physical policy evaluated after scaling, using the shared curve sampler. */
2747
2879
  readonly resolution?: GeometryResolution;
2748
2880
  /** Unique output vertex ceiling, at least three, within maxProfilePoints. Defaults to min(4096, maxProfilePoints). */
2749
- readonly maximumVertices?: number;
2881
+ readonly maxVertices?: number;
2750
2882
  /** Selected profile and per-segment path ceilings; omitted values use package defaults. */
2751
2883
  readonly limits?: Partial<GeometrySamplingLimits>;
2752
2884
  }
@@ -2756,7 +2888,7 @@ export declare interface SampleContourOptions {
2756
2888
  * frozen. At stationary tangents, outgoing secants are preferred and endpoints use a backward fallback.
2757
2889
  * @example
2758
2890
  * ```ts
2759
- * const turn = sampleCurve2({kind: "arc", center: [0,0], radius: 10, sweepDegrees: 90});
2891
+ * const turn = sampleCurve2({kind: "arc", center: [0,0], radius: 10, sweepAngle: 90});
2760
2892
  * ```
2761
2893
  */
2762
2894
  export declare function sampleCurve2(
@@ -2793,9 +2925,9 @@ export declare function sampleCylindricalGearOutline(
2793
2925
  /** Immutable planar points and corresponding directed unit tangents. */
2794
2926
  export declare interface SampledCurve2 {
2795
2927
  /** Curves retain both endpoints, including full-circle seams; closed resampling omits its seam. */
2796
- readonly points: readonly Vector2[];
2928
+ readonly points: readonly Vector2Tuple[];
2797
2929
  /** Directed unit vectors; stationary derivatives use the nearest usable direction. */
2798
- readonly tangents: readonly Vector2[];
2930
+ readonly tangents: readonly Vector2Tuple[];
2799
2931
  }
2800
2932
 
2801
2933
  /**
@@ -2803,9 +2935,9 @@ export declare interface SampledCurve2 {
2803
2935
  */
2804
2936
  export declare interface SampledCurve3 {
2805
2937
  /** Curves retain both endpoints, including full-circle seams; closed resampling omits its seam. */
2806
- readonly points: readonly Vector3[];
2938
+ readonly points: readonly Vector3Tuple[];
2807
2939
  /** Directed unit vectors; stationary derivatives use the nearest usable direction. */
2808
- readonly tangents: readonly Vector3[];
2940
+ readonly tangents: readonly Vector3Tuple[];
2809
2941
  }
2810
2942
 
2811
2943
  /** Sampled paths plus conventional pitch and lead measurements. */
@@ -2813,7 +2945,7 @@ export declare interface SampledThreadHelices {
2813
2945
  /** Axial advance over one revolution, equal to `pitch * starts`. */
2814
2946
  readonly lead: number;
2815
2947
  /** One immutable sampled path for each thread start. */
2816
- readonly paths: readonly Path3[];
2948
+ readonly paths: readonly Path3Data[];
2817
2949
  /** Adjacent axial thread spacing in millimetres. */
2818
2950
  readonly pitch: number;
2819
2951
  /** Number of revolutions represented by each path. */
@@ -2824,6 +2956,7 @@ export declare interface SampledThreadHelices {
2824
2956
  * Creates `segments + 1` points including exact helix endpoints from finite positive dimensions.
2825
2957
  * Integrated weights must remain finite. The maxPathPoints ceiling defaults to 100000; excessive
2826
2958
  * exact counts reject before evaluating axial weights or allocating sample arrays.
2959
+ * Invalid inputs use GeometryError; exceptions thrown by axialWeight propagate unchanged.
2827
2960
  */
2828
2961
  export declare const sampleHelix: ({
2829
2962
  turns,
@@ -2832,7 +2965,7 @@ export declare const sampleHelix: ({
2832
2965
  segments,
2833
2966
  limits,
2834
2967
  axialWeight,
2835
- }: SampleHelixOptions) => readonly Vector3[];
2968
+ }: SampleHelixOptions) => readonly Vector3Tuple[];
2836
2969
 
2837
2970
  /** Options for a sampled +Z helix with millimetre dimensions. */
2838
2971
  export declare interface SampleHelixOptions {
@@ -2877,7 +3010,7 @@ export declare function sampleInternalCylindricalGearSpaceOutline(
2877
3010
  export declare function sampleRackToothPath(
2878
3011
  spec: RackPitchSpec,
2879
3012
  limits?: Partial<GeometrySamplingLimits>,
2880
- ): Path2;
3013
+ ): Path2Data;
2881
3014
 
2882
3015
  /**
2883
3016
  * Samples 1–31 line/cubic segments into a deeply immutable open [radius,height] polyline.
@@ -2888,7 +3021,7 @@ export declare function sampleRackToothPath(
2888
3021
  * no axis closure, winding normalization, or manufacturing repair is performed.
2889
3022
  *
2890
3023
  * @param curve - Open outline in millimetres unless the positive scales convert its coordinates.
2891
- * @param options - Physical resolution and output budget; defaults to 4096 vertices.
3024
+ * @param options - Physical resolution and output budget; defaults to min(4096, maxProfilePoints).
2892
3025
  * @returns Frozen open polyline in millimetres, ordered from lowest to highest anchor.
2893
3026
  * @throws {@link GeometryError} for invalid coordinates, order, scale, or exceeded subdivision budget.
2894
3027
  *
@@ -2903,7 +3036,7 @@ export declare function sampleRackToothPath(
2903
3036
  export declare function sampleSideProfile(
2904
3037
  curve: SideProfileCurve,
2905
3038
  options?: SampleSideProfileOptions,
2906
- ): readonly Vector2[];
3039
+ ): readonly Vector2Tuple[];
2907
3040
 
2908
3041
  /** Physical scaling and bounded adaptive subdivision for an open profile. */
2909
3042
  export declare interface SampleSideProfileOptions {
@@ -2914,7 +3047,7 @@ export declare interface SampleSideProfileOptions {
2914
3047
  /** Shared physical policy, evaluated after scaling; exact circular counts do not affect curves. */
2915
3048
  readonly resolution?: GeometryResolution;
2916
3049
  /** Maximum output vertex count within maxProfilePoints. Defaults to the smaller of 4096 and that ceiling. */
2917
- readonly maximumVertices?: number;
3050
+ readonly maxVertices?: number;
2918
3051
  /** Explicit profile and circular allocation ceilings. */
2919
3052
  readonly limits?: Partial<GeometrySamplingLimits>;
2920
3053
  }
@@ -2942,6 +3075,12 @@ export declare function sampleThreadHelices(
2942
3075
  options: ThreadHelixOptions,
2943
3076
  ): SampledThreadHelices;
2944
3077
 
3078
+ /** Multiplies a vector by a dimensionless scalar. */
3079
+ export declare const scale2: (
3080
+ vector: Vector2Tuple,
3081
+ scale: number,
3082
+ ) => Vector2Tuple;
3083
+
2945
3084
  /**
2946
3085
  * Multiplies a vector by a dimensionless scalar.
2947
3086
  * @example
@@ -2949,7 +3088,10 @@ export declare function sampleThreadHelices(
2949
3088
  * scale3([1, 2, 3], 2); // [2, 4, 6]
2950
3089
  * ```
2951
3090
  */
2952
- export declare const scale3: (vector: Vector3, scale: number) => Vector3;
3091
+ export declare const scale3: (
3092
+ vector: Vector3Tuple,
3093
+ scale: number,
3094
+ ) => Vector3Tuple;
2953
3095
 
2954
3096
  /**
2955
3097
  * Creates an immutable axis-aligned scale transform.
@@ -2960,7 +3102,9 @@ export declare const scale3: (vector: Vector3, scale: number) => Vector3;
2960
3102
  * @param factors - Finite, non-zero XYZ scale factors.
2961
3103
  * @returns A frozen row-major transform.
2962
3104
  */
2963
- export declare function scaleTransform3(factors: Vector3): Transform3;
3105
+ export declare function scaleTransform3(
3106
+ factors: Vector3Tuple,
3107
+ ): Transform3Matrix;
2964
3108
 
2965
3109
  /** An open radius/height outline; consumers own closure, mounting geometry, and wall policy. */
2966
3110
  export declare interface SideProfileCurve {
@@ -3017,7 +3161,7 @@ export declare interface SmoothEdgeTreatment {
3017
3161
  /** Bounded floating-point intersection and shell-orientation validation settings. */
3018
3162
  export declare interface SolidMeshValidationOptions {
3019
3163
  /** Work ceiling for spatial comparisons and containment tests; defaults to 2,000,000 and may only lower it. */
3020
- readonly maximumTests?: number;
3164
+ readonly maxTests?: number;
3021
3165
  /** Distance comparison policy in millimetres; near contacts reject conservatively. */
3022
3166
  readonly tolerance?: GeometryToleranceOptions;
3023
3167
  }
@@ -3026,7 +3170,7 @@ export declare interface SolidMeshValidationOptions {
3026
3170
  * Exactly one radius or diameter, placement, and tessellation for an origin-centered sphere.
3027
3171
  */
3028
3172
  export declare type SphereOptions = CircularPrimitiveOptions &
3029
- PrimitivePlacement &
3173
+ PrimitiveAttachment &
3030
3174
  (
3031
3175
  | {
3032
3176
  /** Positive radius in millimetres; mutually exclusive with diameter. */
@@ -3066,43 +3210,49 @@ export declare const starContour: (
3066
3210
  points: number,
3067
3211
  innerRadius?: number,
3068
3212
  limits?: Partial<GeometrySamplingLimits>,
3069
- ) => readonly Vector2[];
3213
+ ) => readonly Vector2Tuple[];
3070
3214
 
3071
3215
  /** End-cap treatment for an open stroked path. */
3072
- export declare type StrokePathCap = "butt" | "round" | "square";
3216
+ export declare type StrokeCap = "butt" | "round" | "square";
3073
3217
 
3074
3218
  /** Join treatment where adjacent stroked path segments meet. */
3075
- export declare type StrokePathJoin = "bevel" | "miter" | "round";
3076
-
3077
- /**
3078
- * Converts a sampled millimetre path into the filled region covered by a centered stroke.
3079
- *
3080
- * Closed paths omit a duplicated seam point. Zero-length sampled segments are ignored, while the
3081
- * effective path must still contain visible length. Round caps and joins use deterministic physical
3082
- * resolution. Bevels fill the outer corner triangle; miters extend the outer edges to their
3083
- * intersection, falling back to bevels above SVG's default miter limit of 4.
3084
- */
3085
- export declare function strokePathRegion(
3086
- path: Path2,
3087
- options: StrokePathRegionOptions,
3088
- ): Region;
3219
+ export declare type StrokeJoin = "bevel" | "miter" | "round";
3089
3220
 
3090
- /** Physical stroke and topology controls for {@link strokePathRegion}. */
3091
- export declare interface StrokePathRegionOptions {
3221
+ /** Physical stroke and topology controls shared by pure regions and native Sections. */
3222
+ export declare interface StrokeOptions {
3092
3223
  /** Explicit path, circular and expanded-profile allocation ceilings. */
3093
3224
  readonly limits?: Partial<GeometrySamplingLimits>;
3094
- /** Treat the path as a closed non-duplicated loop. Default: `false`. */
3225
+ /** Raw point closure defaults to false; a Path2 supplies its closure and rejects conflicts. */
3095
3226
  readonly closed?: boolean;
3096
3227
  /** End-cap treatment for an open path. Ignored for closed paths. Default: `butt`. */
3097
- readonly cap?: StrokePathCap;
3228
+ readonly cap?: StrokeCap;
3098
3229
  /** Corner treatment; miters exceeding SVG's default limit of 4 become bevels. Default: `miter`. */
3099
- readonly join?: StrokePathJoin;
3230
+ readonly join?: StrokeJoin;
3100
3231
  /** Physical tessellation policy for round caps and joins. */
3101
3232
  readonly resolution?: GeometryResolution;
3102
3233
  /** Positive total stroke width in millimetres, centered on the sampled path. */
3103
3234
  readonly width: number;
3104
3235
  }
3105
3236
 
3237
+ /**
3238
+ * Converts a sampled millimetre path into the filled region covered by a centered stroke.
3239
+ *
3240
+ * Closed paths omit a duplicated seam point. Zero-length sampled segments are ignored, while the
3241
+ * effective path must still contain visible length. Round caps and joins use deterministic physical
3242
+ * resolution. Bevels fill the outer corner triangle; miters extend the outer edges to their
3243
+ * intersection, falling back to bevels above SVG's default miter limit of 4.
3244
+ */
3245
+ export declare function strokeRegionData(
3246
+ path: Path2Input,
3247
+ options: StrokeOptions,
3248
+ ): RegionData;
3249
+
3250
+ /** Subtracts `b` from `a` component-wise. */
3251
+ export declare const subtract2: (
3252
+ a: Vector2Tuple,
3253
+ b: Vector2Tuple,
3254
+ ) => Vector2Tuple;
3255
+
3106
3256
  /**
3107
3257
  * Subtracts `b` from `a`.
3108
3258
  * @example
@@ -3110,7 +3260,10 @@ export declare interface StrokePathRegionOptions {
3110
3260
  * subtract3([4, 5, 6], [1, 2, 3]); // [3, 3, 3]
3111
3261
  * ```
3112
3262
  */
3113
- export declare const subtract3: (a: Vector3, b: Vector3) => Vector3;
3263
+ export declare const subtract3: (
3264
+ a: Vector3Tuple,
3265
+ b: Vector3Tuple,
3266
+ ) => Vector3Tuple;
3114
3267
 
3115
3268
  /** Sampling controls for deterministic SVG-to-region conversion. */
3116
3269
  export declare interface SvgImportOptions {
@@ -3134,7 +3287,7 @@ export declare interface SvgRegionPreflight {
3134
3287
  /** Appearance-preserving cleanup observed during parsing and normalization. */
3135
3288
  readonly repairs: SvgRegionPreflightRepairs;
3136
3289
  /** Canonical millimetre, Y-up geometry. */
3137
- readonly region: Region;
3290
+ readonly region: RegionData;
3138
3291
  /** Bounded source and flattening complexity measurements. */
3139
3292
  readonly source: SvgRegionPreflightSourceMetrics;
3140
3293
  }
@@ -3146,45 +3299,45 @@ export declare interface SvgRegionPreflightGeometryMetrics {
3146
3299
  /** Millimetre bounds, or `null` when no painted region remains. */
3147
3300
  readonly bounds: Bounds2 | null;
3148
3301
  /** Disconnected filled polygons in the final region. */
3149
- readonly components: number;
3302
+ readonly componentCount: number;
3150
3303
  /** Exterior and hole boundary count in the final region. */
3151
- readonly contours: number;
3304
+ readonly contourCount: number;
3152
3305
  /** Interior boundary count in the final region. */
3153
- readonly holes: number;
3306
+ readonly holeCount: number;
3154
3307
  /** Shortest final boundary edge in millimetres, or `null` for an empty region. */
3155
3308
  readonly minEdgeLength: number | null;
3156
3309
  /** Final boundary edges shorter than the conservative 0.01 mm indicator. */
3157
- readonly shortEdges: number;
3310
+ readonly shortEdgeCount: number;
3158
3311
  /** Components with less than 0.01 square millimetres of filled area. */
3159
- readonly tinyIslands: number;
3312
+ readonly tinyIslandCount: number;
3160
3313
  /** Non-duplicated boundary vertices in the final normalized region. */
3161
- readonly vertices: number;
3314
+ readonly vertexCount: number;
3162
3315
  }
3163
3316
 
3164
3317
  /** Visible, appearance-preserving cleanup counters from bounded SVG import. */
3165
3318
  export declare interface SvgRegionPreflightRepairs {
3166
3319
  /** Graphics elements with neither a visible fill nor a positive-width visible stroke. */
3167
- readonly invisibleElements: number;
3320
+ readonly invisibleElementCount: number;
3168
3321
  /** Open filled subpaths closed by SVG fill semantics without closing their strokes. */
3169
- readonly implicitFilledClosures: number;
3322
+ readonly implicitFilledClosureCount: number;
3170
3323
  /** Visibly painted elements whose fill and stroke both resolved to empty geometry. */
3171
- readonly emptyElements: number;
3324
+ readonly emptyElementCount: number;
3172
3325
  /** Consecutive repeated flattened vertices discarded before topology resolution. */
3173
- readonly removedDuplicateVertices: number;
3326
+ readonly removedDuplicateVertexCount: number;
3174
3327
  /** Explicit repeated seam vertices removed from otherwise closed contours. */
3175
- readonly removedSeamVertices: number;
3328
+ readonly removedSeamVertexCount: number;
3176
3329
  }
3177
3330
 
3178
3331
  /** Bounded source-complexity facts collected while parsing one SVG document. */
3179
3332
  export declare interface SvgRegionPreflightSourceMetrics {
3180
3333
  /** UTF-8 source size, capped at 256 KiB before parsing. */
3181
- readonly bytes: number;
3334
+ readonly byteCount: number;
3182
3335
  /** Renderable shape elements, capped at 500; containers and metadata are excluded. */
3183
- readonly elements: number;
3336
+ readonly elementCount: number;
3184
3337
  /** Flattened vertices emitted before fill, stroke, and clipping operations. */
3185
- readonly emittedVertices: number;
3338
+ readonly emittedVertexCount: number;
3186
3339
  /** Path endpoints and control vertices parsed before adaptive flattening. */
3187
- readonly parsedVertices: number;
3340
+ readonly parsedVertexCount: number;
3188
3341
  }
3189
3342
 
3190
3343
  /**
@@ -3199,8 +3352,8 @@ export declare interface SvgRegionPreflightSourceMetrics {
3199
3352
  * ```
3200
3353
  */
3201
3354
  export declare function sweepMesh(
3202
- profile: Contour,
3203
- path: readonly Vector3[],
3355
+ profile: Path2Input,
3356
+ path: Path3Input,
3204
3357
  options?: SweepOptions,
3205
3358
  ): TriangleMesh;
3206
3359
 
@@ -3208,7 +3361,7 @@ export declare function sweepMesh(
3208
3361
  * Controls shared by pure mesh construction and filled modeling sweeps.
3209
3362
  */
3210
3363
  export declare interface SweepOptions {
3211
- /** Join the path's last station to its first. Open paths retain watertight end caps. */
3364
+ /** Raw point closure defaults to false; a Path3 supplies its closure and rejects conflicts. */
3212
3365
  readonly closed?: boolean;
3213
3366
  /** Explicit output and sampling allocation ceilings. */
3214
3367
  readonly limits?: Partial<ModelingLimits>;
@@ -3217,11 +3370,11 @@ export declare interface SweepOptions {
3217
3370
  /** Physical sampling of nonzero twist; inserted stations retain authored station controls. */
3218
3371
  readonly resolution?: GeometryResolution;
3219
3372
  /** Total additional profile rotation in degrees, with progression selected by twistBy. */
3220
- readonly twistDegrees?: number;
3373
+ readonly twist?: number;
3221
3374
  /** Twist advances by physical path length (default), or normalized authored station position, including a closed seam gap. */
3222
3375
  readonly twistBy?: "length" | "stations";
3223
3376
  /** Positive uniform/XY scale, or one XY pair per path station. Defaults to one. */
3224
- readonly scale?: number | Vector2 | readonly Vector2[];
3377
+ readonly scale?: number | Vector2Input | readonly Vector2Input[];
3225
3378
  /** Corresponding point-index advance at a rotationally equivalent closed seam. */
3226
3379
  readonly seamProfileOffset?: number;
3227
3380
  }
@@ -3234,13 +3387,13 @@ export declare type SweepOrientation =
3234
3387
  /** Minimizes frame rotation by parallel transport. */
3235
3388
  readonly kind: "transport";
3236
3389
  /** Initial profile +X guide, projected perpendicular to the first tangent. */
3237
- readonly initialNormal?: Vector3;
3390
+ readonly initialNormal?: Vector3Input;
3238
3391
  }
3239
3392
  | {
3240
3393
  /** Projects one fixed world-space normal at every path station. */
3241
3394
  readonly kind: "fixed-normal";
3242
3395
  /** Directed profile +X guide; must not be parallel to any local tangent. */
3243
- readonly normal: Vector3;
3396
+ readonly normal: Vector3Input;
3244
3397
  }
3245
3398
  | {
3246
3399
  /** Uses an explicitly directed normal callback at each original normalized station. */
@@ -3279,7 +3432,7 @@ export declare interface ThreadCircularSegmentsOptions {
3279
3432
  * This keeps a compensated male/female pair on one role-independent grid when an internal
3280
3433
  * cutter has an enlarged entrance bevel. Default: `0`.
3281
3434
  */
3282
- readonly maximumRadialOutset?: number;
3435
+ readonly maxRadialOutset?: number;
3283
3436
  /** Validated mating profile whose pitch and flank capacities govern tessellation. */
3284
3437
  readonly profile: ThreadProfile;
3285
3438
  /** Physical or exact circular resolution policy. */
@@ -3419,7 +3572,7 @@ export declare interface ThreadHelixOptions {
3419
3572
  /** Total sampled axial length in millimetres. */
3420
3573
  readonly length: number;
3421
3574
  /** Angular offset of the first start in degrees. Default: `0`. */
3422
- readonly phaseDegrees?: number;
3575
+ readonly phase?: number;
3423
3576
  /** Adjacent axial thread spacing in millimetres. */
3424
3577
  readonly pitch: number;
3425
3578
  /** Radial distance from the +Z axis in millimetres. */
@@ -3451,11 +3604,25 @@ export declare interface ThreadProfile {
3451
3604
  /** Adjacent axial thread spacing in millimetres. */
3452
3605
  readonly pitch: number;
3453
3606
  /** Immutable open `[axial, radial]` path spanning one pitch. */
3454
- readonly points: readonly Vector2[];
3607
+ readonly points: readonly Vector2Tuple[];
3455
3608
  /** Axial width of the flat at the minor envelope. */
3456
3609
  readonly rootFlatWidth: number;
3457
3610
  }
3458
3611
 
3612
+ /**
3613
+ * Creates a periodic thread profile for the shaft-locked helical mesher.
3614
+ *
3615
+ * The open path spans one pitch. Radial zero is the major envelope; negative
3616
+ * values point toward the shaft. Custom paths must be finite, axially
3617
+ * non-decreasing, periodic at their endpoints, and reach radial zero.
3618
+ *
3619
+ * @example Printable triangular thread profile
3620
+ * ```ts
3621
+ * threadProfile({ kind: "triangular", pitch: 1.75 });
3622
+ * ```
3623
+ */
3624
+ export declare function threadProfile(spec: ThreadProfileSpec): ThreadProfile;
3625
+
3459
3626
  /** Fields shared by all thread profile specifications. */
3460
3627
  export declare interface ThreadProfileBaseSpec {
3461
3628
  /** Adjacent axial thread spacing in millimetres. */
@@ -3481,7 +3648,7 @@ export declare type ThreadRole = "male" | "female";
3481
3648
  /**
3482
3649
  * Dimensions and independent ring/profile tessellation for a torus around the Z axis.
3483
3650
  */
3484
- export declare interface TorusOptions extends PrimitivePlacement {
3651
+ export declare interface TorusOptions extends PrimitiveAttachment {
3485
3652
  /** Explicit sampling ceilings, bounded by the host policy. */
3486
3653
  readonly limits?: Partial<GeometrySamplingLimits>;
3487
3654
  /** Radius from the Z axis to the profile center, in millimetres; greater than `minorRadius`. */
@@ -3496,13 +3663,116 @@ export declare interface TorusOptions extends PrimitivePlacement {
3496
3663
  readonly resolution?: GeometryResolution;
3497
3664
  }
3498
3665
 
3666
+ /** Immutable reusable XY placement. Methods apply in written order; angles are degrees. */
3667
+ export declare interface Transform2 {
3668
+ /** Applies a translation in model units after this placement. */
3669
+ translate(offset: Vector2Input): Transform2;
3670
+ /** Rotates counterclockwise in degrees about an optional world-space pivot (default origin). */
3671
+ rotate(degrees: number, options?: Pivot2Options): Transform2;
3672
+ /** Scales about an optional world-space pivot; finite nonzero factors may reflect. */
3673
+ scale(factors: number | Vector2Input, options?: Pivot2Options): Transform2;
3674
+ /** Applies this placement first, then `next`; neither operand is mutated. */
3675
+ andThen(next: Transform2Input): Transform2;
3676
+ /** Returns the inverse; singular and numerically unstable transforms throw GeometryError. */
3677
+ inverse(): Transform2;
3678
+ /** Transforms a finite point, including translation. Returns a fresh immutable vector. */
3679
+ applyPoint(point: Vector2Input): Vector2;
3680
+ /** Transforms a finite direction, excluding translation and retaining scale. This is not a normal transform. */
3681
+ applyDirection(direction: Vector2Input): Vector2;
3682
+ /** Applies the inverse transpose and normalizes. Ignores translation; rejects zero normals. */
3683
+ applyNormal(normal: Vector2Input): Vector2;
3684
+ /** Returns the frozen canonical row-major 3x3 matrix for interchange. */
3685
+ toMatrix(): Transform2Matrix;
3686
+ /** Embeds this placement in XYZ, leaving Z unchanged, for solids and 3D paths. */
3687
+ to3D(): Transform3;
3688
+ }
3689
+
3690
+ /**
3691
+ * Creates an immutable XY transform, identity by default. Matrices are copied and validated.
3692
+ * Pass it directly to Section.transform() and planar data helpers; to3D() explicitly crosses into XYZ.
3693
+ * Zero scales and singular matrices throw GeometryError; negative scales reflect.
3694
+ *
3695
+ * @example
3696
+ * ```ts
3697
+ * const placement = transform2().rotate(90).translate([10, 0]);
3698
+ * placement.applyPoint([1, 0]).toArray(); // approximately [10, 1]
3699
+ * ```
3700
+ */
3701
+ export declare function transform2(matrix?: Transform2Matrix): Transform2;
3702
+
3703
+ /** An immutable XY transform or its canonical row-major matrix for interchange. */
3704
+ export declare type Transform2Input = Transform2 | Transform2Matrix;
3705
+
3706
+ /**
3707
+ * A row-major affine 3x3 XY matrix applied to column vectors.
3708
+ * Translation occupies indices 2 and 5; the final row is `[0, 0, 1]`.
3709
+ */
3710
+ export declare type Transform2Matrix = readonly [
3711
+ m00: number,
3712
+ m01: number,
3713
+ m02: number,
3714
+ m10: number,
3715
+ m11: number,
3716
+ m12: number,
3717
+ m20: number,
3718
+ m21: number,
3719
+ m22: number,
3720
+ ];
3721
+
3722
+ /** Immutable reusable XYZ placement. Methods apply in written order; angles are degrees. */
3723
+ export declare interface Transform3 {
3724
+ /** Applies a translation in model units after this placement. */
3725
+ translate(offset: Vector3Input): Transform3;
3726
+ /** Rotates about global X, then Y, then Z in degrees, about an optional world-space pivot. */
3727
+ rotate(degrees: Vector3Input, options?: Pivot3Options): Transform3;
3728
+ /** Rotates right-handed in degrees about a nonzero axis and optional world-space pivot. */
3729
+ rotateAxis(
3730
+ axis: Vector3Input,
3731
+ degrees: number,
3732
+ options?: Pivot3Options,
3733
+ ): Transform3;
3734
+ /** Scales about an optional world-space pivot; finite nonzero factors may reflect. */
3735
+ scale(factors: number | Vector3Input, options?: Pivot3Options): Transform3;
3736
+ /** Applies this placement first, then `next`; equivalent to composeTransform3(next, current). */
3737
+ andThen(next: Transform3Input): Transform3;
3738
+ /** Returns the inverse; singular and numerically unstable transforms throw GeometryError. */
3739
+ inverse(): Transform3;
3740
+ /** Transforms a finite point, including translation. Returns a fresh immutable vector. */
3741
+ applyPoint(point: Vector3Input): Vector3;
3742
+ /** Transforms a finite direction, excluding translation and retaining scale. This is not a normal transform. */
3743
+ applyDirection(direction: Vector3Input): Vector3;
3744
+ /** Applies the inverse transpose and normalizes. Ignores translation; rejects zero normals. */
3745
+ applyNormal(normal: Vector3Input): Vector3;
3746
+ /** Returns the frozen canonical row-major 4x4 matrix for interchange. */
3747
+ toMatrix(): Transform3Matrix;
3748
+ /** Restricts to XY; throws GeometryError for a plane change or singular XY restriction. */
3749
+ to2D(): Transform2;
3750
+ }
3751
+
3752
+ /**
3753
+ * Creates an immutable XYZ transform, identity by default. Matrices are copied and validated.
3754
+ * Calls apply in written order; rotations use degrees and pivots use current world coordinates.
3755
+ * Zero scales, singular matrices, nonfinite inputs and zero rotation axes throw GeometryError.
3756
+ * Use frameTransform3(frame) as the input for existing orthonormal frame placement.
3757
+ *
3758
+ * @example
3759
+ * ```ts
3760
+ * const placement = transform3().rotate([0, 0, 90]).translate([10, 0, 0]);
3761
+ * placement.applyPoint([1, 0, 0]).toArray(); // approximately [10, 1, 0]
3762
+ * ```
3763
+ */
3764
+ export declare function transform3(matrix?: Transform3Matrix): Transform3;
3765
+
3766
+ /** An immutable XYZ transform or its canonical row-major matrix for interchange. */
3767
+ export declare type Transform3Input = Transform3 | Transform3Matrix;
3768
+
3499
3769
  /**
3500
3770
  * A row-major affine 4x4 matrix applied to column vectors.
3501
3771
  *
3502
3772
  * Translation occupies indices 3, 7, and 11. The final row must be
3503
3773
  * `[0, 0, 0, 1]` within the active geometry tolerance.
3504
3774
  */
3505
- export declare type Transform3 = readonly [
3775
+ export declare type Transform3Matrix = readonly [
3506
3776
  m00: number,
3507
3777
  m01: number,
3508
3778
  m02: number,
@@ -3521,17 +3791,6 @@ export declare type Transform3 = readonly [
3521
3791
  m33: number,
3522
3792
  ];
3523
3793
 
3524
- /**
3525
- * Transforms a closed loop and preserves its original winding convention.
3526
- *
3527
- * Reflections reverse the point order automatically through normalization.
3528
- */
3529
- export declare function transformContour(
3530
- loop: Contour,
3531
- transform: Transform3,
3532
- tolerance?: GeometryToleranceOptions,
3533
- ): Contour;
3534
-
3535
3794
  /**
3536
3795
  * Returns the determinant of a transform's linear 3x3 component.
3537
3796
  *
@@ -3540,27 +3799,19 @@ export declare function transformContour(
3540
3799
  * @param transform - Valid affine transform.
3541
3800
  * @returns Signed linear determinant.
3542
3801
  */
3543
- export declare function transformDeterminant3(transform: Transform3): number;
3802
+ export declare function transformDeterminant3(
3803
+ transform: Transform3Matrix,
3804
+ ): number;
3544
3805
 
3545
- /** Applies an XY-plane-preserving affine transform to a 2D path. */
3546
- export declare function transformPath2(
3547
- path: Path2,
3548
- transform: Transform3,
3549
- tolerance?: GeometryToleranceOptions,
3550
- ): Path2;
3551
-
3552
- /** Applies an affine transform to a 3D path without mutating its points. */
3553
- export declare function transformPath3(
3554
- path: Path3,
3555
- transform: Transform3,
3556
- ): Path3;
3557
-
3558
- /** Transforms an explicit outer/hole region with reflection-safe winding correction. */
3559
- export declare function transformRegion(
3560
- region: Region,
3561
- transform: Transform3,
3806
+ /**
3807
+ * Transforms serialized polygon data with reflection-safe winding, without an engine.
3808
+ * Use Section.transform(placement) when authoring filled geometry; this utility serves pure data preparation.
3809
+ */
3810
+ export declare function transformRegionData(
3811
+ region: RegionData,
3812
+ transform: Transform2Input,
3562
3813
  tolerance?: GeometryToleranceOptions,
3563
- ): Region;
3814
+ ): RegionData;
3564
3815
 
3565
3816
  /**
3566
3817
  * Applies an affine transform to a mesh and preserves outward face orientation.
@@ -3569,12 +3820,12 @@ export declare function transformRegion(
3569
3820
  * automatically reverses every triangle. Singular transforms are rejected.
3570
3821
  *
3571
3822
  * @param mesh - Mesh to transform without mutation.
3572
- * @param transform - Row-major affine transform.
3823
+ * @param placement - Immutable spatial placement or canonical row-major affine matrix.
3573
3824
  * @returns A mesh with fresh transformed positions and copied or reversed indices.
3574
3825
  */
3575
3826
  export declare function transformTriangleMesh(
3576
3827
  mesh: TriangleMesh,
3577
- transform: Transform3,
3828
+ placement: Transform3Input,
3578
3829
  ): TriangleMesh;
3579
3830
 
3580
3831
  /**
@@ -3583,7 +3834,9 @@ export declare function transformTriangleMesh(
3583
3834
  * @param offset - Finite XYZ translation in model units.
3584
3835
  * @returns A frozen row-major transform.
3585
3836
  */
3586
- export declare function translationTransform3(offset: Vector3): Transform3;
3837
+ export declare function translationTransform3(
3838
+ offset: Vector3Tuple,
3839
+ ): Transform3Matrix;
3587
3840
 
3588
3841
  /** Trapezoidal thread profile with a configurable included angle. */
3589
3842
  export declare interface TrapezoidalThreadProfileSpec extends ThreadProfileBaseSpec {
@@ -3595,10 +3848,11 @@ export declare interface TrapezoidalThreadProfileSpec extends ThreadProfileBaseS
3595
3848
  */
3596
3849
  readonly depth?: number;
3597
3850
  /**
3598
- * Included flank angle in degrees. Use `90` for printable 45-degree slopes.
3851
+ * Full angle between the flanks in degrees, from `0` inclusive to `180` exclusive.
3852
+ * Each flank uses half this angle from the radial direction; `90` gives 45-degree slopes.
3599
3853
  * @defaultValue `30`
3600
3854
  */
3601
- readonly threadAngle?: number;
3855
+ readonly includedAngle?: number;
3602
3856
  }
3603
3857
 
3604
3858
  /**
@@ -3615,7 +3869,7 @@ export declare interface TriangleMesh {
3615
3869
  * Measurements and optional edge-connected topology from one validated mesh traversal.
3616
3870
  */
3617
3871
  export declare interface TriangleMeshAnalysis extends TriangleMeshMeasurements {
3618
- /** Number of referenced edge-connected components when `includeTopology` is requested. */
3872
+ /** Number of referenced edge-connected boundary shells when `includeTopology` is requested; cavities count separately. */
3619
3873
  readonly connectedComponentCount?: number;
3620
3874
  /** Number of distinct indexed undirected edges when `includeTopology` is requested. */
3621
3875
  readonly edgeCount?: number;
@@ -3648,7 +3902,7 @@ export declare interface TriangleMeshMeasurements {
3648
3902
  /** Options controlling bounded triangle-mesh quality analysis. */
3649
3903
  export declare interface TriangleMeshQualityOptions {
3650
3904
  /** Maximum number of triangles inspected. Defaults to `200000`. */
3651
- readonly maximumTriangleCount?: number;
3905
+ readonly maxTriangles?: number;
3652
3906
  /** Numeric comparison overrides; model coordinates are interpreted in their existing units. */
3653
3907
  readonly tolerance?: GeometryToleranceOptions;
3654
3908
  }
@@ -3691,7 +3945,7 @@ export declare interface TriangleMeshQualityReport {
3691
3945
  export declare interface TriangleMeshSignature {
3692
3946
  /** Axis-aligned bounds quantized by `tolerances.position`. */
3693
3947
  readonly bounds: Bounds3;
3694
- /** Number of edge-connected closed components. */
3948
+ /** Number of edge-connected closed boundary shells; cavities count separately. */
3695
3949
  readonly connectedComponentCount: number;
3696
3950
  /** Total orientable genus across all connected components. */
3697
3951
  readonly genus: number;
@@ -3710,7 +3964,7 @@ export declare interface TriangleMeshSignature {
3710
3964
  /** Options controlling deterministic triangle-mesh regression signatures. */
3711
3965
  export declare interface TriangleMeshSignatureOptions {
3712
3966
  /** Maximum accepted triangle count. Defaults to 200,000. */
3713
- readonly maximumTriangleCount?: number;
3967
+ readonly maxTriangles?: number;
3714
3968
  /** Position and bounds quantization in model units. Defaults to `1e-5`. */
3715
3969
  readonly positionTolerance?: number;
3716
3970
  /** Signed-volume quantization in cubic model units. Defaults to `1e-4`. */
@@ -3760,7 +4014,7 @@ export declare function triangulateContour(loop: Contour): Uint32Array;
3760
4014
  * Dimensions, placement, and tessellation for a hollow Z-axis tube.
3761
4015
  */
3762
4016
  export declare interface TubeOptions
3763
- extends CircularPrimitiveOptions, PrimitivePlacement {
4017
+ extends CircularPrimitiveOptions, PrimitiveAttachment {
3764
4018
  /**
3765
4019
  * Centers the tube on the Z origin when `true`; otherwise its bottom is at `Z = 0`.
3766
4020
  * @defaultValue `true`
@@ -3802,9 +4056,9 @@ export declare function validateSolidMesh(
3802
4056
  * @throws {@link GeometryError} For non-finite, non-affine, or singular matrices.
3803
4057
  */
3804
4058
  export declare function validateTransform3(
3805
- transform: Transform3,
4059
+ transform: Transform3Matrix,
3806
4060
  tolerance?: GeometryToleranceOptions,
3807
- ): Transform3;
4061
+ ): Transform3Matrix;
3808
4062
 
3809
4063
  /**
3810
4064
  * Validates mesh buffers, indices, triangle area, and optionally closed topology.
@@ -3823,11 +4077,97 @@ export declare function validateTriangleMesh(
3823
4077
  options?: TriangleMeshValidationOptions,
3824
4078
  ): TriangleMesh;
3825
4079
 
4080
+ /** Immutable XY arithmetic; vector operations return new values and measurements return numbers. */
4081
+ export declare interface Vector2 {
4082
+ /** X coordinate in the vector's coordinate units. */
4083
+ readonly x: number;
4084
+ /** Y coordinate in the vector's coordinate units. */
4085
+ readonly y: number;
4086
+ /** Adds another vector component-wise. */
4087
+ add(other: Vector2Input): Vector2;
4088
+ /** Subtracts another vector component-wise. */
4089
+ subtract(other: Vector2Input): Vector2;
4090
+ /** Multiplies by a finite dimensionless scalar. */
4091
+ scale(factor: number): Vector2;
4092
+ /** Returns a unit vector; rejects length at or below finite nonnegative `epsilon` (default `1e-12`). */
4093
+ normalize(epsilon?: number): Vector2;
4094
+ /** Interpolates toward another vector by finite dimensionless `t`; extrapolation is allowed. */
4095
+ lerp(other: Vector2Input, t: number): Vector2;
4096
+ /** Returns the scalar dot product. */
4097
+ dot(other: Vector2Input): number;
4098
+ /** Returns the signed scalar cross product; positive means the other vector is counterclockwise. */
4099
+ cross(other: Vector2Input): number;
4100
+ /** Returns Euclidean length in the vector's coordinate units. */
4101
+ length(): number;
4102
+ /** Returns Euclidean distance to another vector in the same coordinate units. */
4103
+ distance(other: Vector2Input): number;
4104
+ /** Returns this value's frozen readonly tuple for interchange; repeated calls do not allocate. */
4105
+ toArray(): Vector2Tuple;
4106
+ }
4107
+
4108
+ /**
4109
+ * Creates immutable XY arithmetic from a finite tuple or vector, snapshotting the coordinates.
4110
+ * Values and results are finite. Invalid dimensions throw `INVALID_ARGUMENT`; nonfinite coordinates
4111
+ * and overflow throw `NON_FINITE_VALUE` GeometryError.
4112
+ * Use transform2().applyDirection(value) for rotations and nonuniform scaling.
4113
+ */
4114
+ export declare function vector2(input: Vector2Input): Vector2;
4115
+
4116
+ /** An XY tuple or immutable fluent vector accepted by vector operations. */
4117
+ export declare type Vector2Input = Vector2Tuple | Vector2;
4118
+
3826
4119
  /** A two-dimensional Cartesian vector or point. */
3827
- export declare type Vector2 = readonly [x: number, y: number];
4120
+ export declare type Vector2Tuple = readonly [x: number, y: number];
4121
+
4122
+ /** Immutable XYZ arithmetic; vector operations return new values and measurements return numbers. */
4123
+ export declare interface Vector3 {
4124
+ /** X coordinate in the vector's coordinate units. */
4125
+ readonly x: number;
4126
+ /** Y coordinate in the vector's coordinate units. */
4127
+ readonly y: number;
4128
+ /** Z coordinate in the vector's coordinate units. */
4129
+ readonly z: number;
4130
+ /** Adds another vector component-wise. */
4131
+ add(other: Vector3Input): Vector3;
4132
+ /** Subtracts another vector component-wise. */
4133
+ subtract(other: Vector3Input): Vector3;
4134
+ /** Multiplies by a finite dimensionless scalar. */
4135
+ scale(factor: number): Vector3;
4136
+ /** Returns a unit vector; rejects length at or below finite nonnegative `epsilon` (default `1e-12`). */
4137
+ normalize(epsilon?: number): Vector3;
4138
+ /** Interpolates toward another vector by finite dimensionless `t`; extrapolation is allowed. */
4139
+ lerp(other: Vector3Input, t: number): Vector3;
4140
+ /** Returns the scalar dot product. */
4141
+ dot(other: Vector3Input): number;
4142
+ /** Returns the right-handed cross product as a new vector. */
4143
+ cross(other: Vector3Input): Vector3;
4144
+ /** Returns Euclidean length in the vector's coordinate units. */
4145
+ length(): number;
4146
+ /** Returns Euclidean distance to another vector in the same coordinate units. */
4147
+ distance(other: Vector3Input): number;
4148
+ /** Returns this value's frozen readonly tuple for interchange; repeated calls do not allocate. */
4149
+ toArray(): Vector3Tuple;
4150
+ }
4151
+
4152
+ /**
4153
+ * Creates immutable XYZ arithmetic from a finite tuple or vector, snapshotting the coordinates.
4154
+ * Values and results are finite. Invalid dimensions throw `INVALID_ARGUMENT`; nonfinite coordinates
4155
+ * and overflow throw `NON_FINITE_VALUE` GeometryError.
4156
+ * Use transform3().applyDirection(value) for rotations and nonuniform scaling.
4157
+ *
4158
+ * @example
4159
+ * ```ts
4160
+ * const direction = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
4161
+ * const alignment = direction.dot([0, 0, 1]);
4162
+ * ```
4163
+ */
4164
+ export declare function vector3(input: Vector3Input): Vector3;
4165
+
4166
+ /** An XYZ tuple or immutable fluent vector accepted by vector operations. */
4167
+ export declare type Vector3Input = Vector3Tuple | Vector3;
3828
4168
 
3829
4169
  /** A three-dimensional Cartesian vector or point. */
3830
- export declare type Vector3 = readonly [x: number, y: number, z: number];
4170
+ export declare type Vector3Tuple = readonly [x: number, y: number, z: number];
3831
4171
 
3832
4172
  /** A circular baseline centered at the XY origin, with rigid shaped glyph groups. */
3833
4173
  export declare interface VectorTextArcBaseline {
@@ -3836,7 +4176,7 @@ export declare interface VectorTextArcBaseline {
3836
4176
  /** Baseline radius in millimetres, greater than zero and at most 10000. */
3837
4177
  readonly radius: number;
3838
4178
  /** Alignment datum in degrees counterclockwise from +X; defaults to 90. */
3839
- readonly centerAngleDegrees?: number;
4179
+ readonly centerAngle?: number;
3840
4180
  /** Reading direction around the circle; defaults to clockwise. */
3841
4181
  readonly direction?: "clockwise" | "counterclockwise";
3842
4182
  }