@metamesh/modeling 0.14.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 (716) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +25 -10
  3. package/dist/api/engine.d.ts +11 -4
  4. package/dist/api/geometry.d.ts +345 -341
  5. package/dist/api/index.d.ts +262 -144
  6. package/dist/api/text.d.ts +3 -1
  7. package/dist/docs/guides/concepts.md +22 -7
  8. package/dist/docs/guides/fundamentals.md +8 -5
  9. package/dist/docs/guides/hosting.md +21 -11
  10. package/dist/docs/guides/recipes.md +42 -21
  11. package/dist/docs/manifest.json +710 -507
  12. package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
  13. package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
  14. package/dist/docs/reference/engine/GenerationOptions.md +1 -1
  15. package/dist/docs/reference/engine/GeometryResource.md +1 -1
  16. package/dist/docs/reference/engine/ModelDependencies.md +1 -1
  17. package/dist/docs/reference/engine/ModelEngine.md +1 -1
  18. package/dist/docs/reference/engine/ModelEngineOptions.md +4 -8
  19. package/dist/docs/reference/engine/ModelSession.md +1 -1
  20. package/dist/docs/reference/engine/ModelSnapshot.md +20 -9
  21. package/dist/docs/reference/engine/SessionOptions.md +1 -1
  22. package/dist/docs/reference/engine/SnapshotPart.md +2 -2
  23. package/dist/docs/reference/engine/categories/host-lifecycle.md +2 -2
  24. package/dist/docs/reference/engine/createModelEngine.md +3 -3
  25. package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
  26. package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
  27. package/dist/docs/reference/engine/validateModel.md +1 -1
  28. package/dist/docs/reference/engine.md +2 -2
  29. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
  30. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +4 -4
  31. package/dist/docs/reference/geometry/{Anchor3.md → Anchor3-type.md} +1 -1
  32. package/dist/docs/reference/geometry/ArcCurve2.md +5 -5
  33. package/dist/docs/reference/geometry/ArcCurve3.md +5 -5
  34. package/dist/docs/reference/geometry/{AttachTransformOptions.md → AttachOptions.md} +10 -5
  35. package/dist/docs/reference/geometry/AxisAngleRotation3.md +1 -1
  36. package/dist/docs/reference/geometry/Bounds2.md +1 -1
  37. package/dist/docs/reference/geometry/Bounds3.md +1 -1
  38. package/dist/docs/reference/geometry/BoundsFit2.md +1 -1
  39. package/dist/docs/reference/geometry/BoundsFit3.md +1 -1
  40. package/dist/docs/reference/geometry/BoundsFitOptions.md +1 -1
  41. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +1 -1
  42. package/dist/docs/reference/geometry/BoxAnchorFace.md +1 -1
  43. package/dist/docs/reference/geometry/BoxAnchorOptions.md +1 -1
  44. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  45. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  46. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  47. package/dist/docs/reference/geometry/BoxOptions.md +8 -8
  48. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +1 -1
  49. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +1 -1
  50. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  51. package/dist/docs/reference/geometry/CircleContourOptions.md +1 -1
  52. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
  53. package/dist/docs/reference/geometry/CircularResolutionOptions.md +7 -7
  54. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +1 -1
  55. package/dist/docs/reference/geometry/ClearanceHoleFit.md +1 -1
  56. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +1 -1
  57. package/dist/docs/reference/geometry/Contour.md +1 -1
  58. package/dist/docs/reference/geometry/ContourCurve.md +1 -1
  59. package/dist/docs/reference/geometry/ContourPoint.md +1 -1
  60. package/dist/docs/reference/geometry/ContourSegment.md +1 -1
  61. package/dist/docs/reference/geometry/CorrespondingComponent.md +1 -1
  62. package/dist/docs/reference/geometry/CorrespondingContour.md +1 -1
  63. package/dist/docs/reference/geometry/CorrespondingProfile.md +1 -1
  64. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +1 -1
  65. package/dist/docs/reference/geometry/CubicBezierCurve2.md +1 -1
  66. package/dist/docs/reference/geometry/CubicBezierCurve3.md +1 -1
  67. package/dist/docs/reference/geometry/Curve2.md +1 -1
  68. package/dist/docs/reference/geometry/Curve3.md +1 -1
  69. package/dist/docs/reference/geometry/CurveSamplingOptions.md +5 -3
  70. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +1 -1
  71. package/dist/docs/reference/geometry/CylinderAnchorFace.md +1 -1
  72. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +3 -3
  73. package/dist/docs/reference/geometry/CylinderOptions.md +3 -3
  74. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +3 -3
  75. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +1 -1
  76. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +1 -1
  77. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +3 -3
  78. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +1 -1
  79. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +1 -1
  80. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +1 -1
  81. package/dist/docs/reference/geometry/CylindricalGearSpec.md +6 -6
  82. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  83. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  84. package/dist/docs/reference/geometry/EllipseContourOptions.md +1 -1
  85. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  86. package/dist/docs/reference/geometry/ExtrudeOptions.md +6 -6
  87. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +5 -5
  88. package/dist/docs/reference/geometry/FittedTextLayout.md +1 -1
  89. package/dist/docs/reference/geometry/Frame3.md +1 -1
  90. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  91. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  92. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  93. package/dist/docs/reference/geometry/GeometryResolution.md +5 -5
  94. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +1 -1
  95. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  96. package/dist/docs/reference/geometry/GridPatternOptions.md +9 -3
  97. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
  98. package/dist/docs/reference/geometry/HeightfieldOptions.md +1 -1
  99. package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
  100. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +5 -5
  101. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +6 -6
  102. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +1 -1
  103. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +1 -1
  104. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +6 -6
  105. package/dist/docs/reference/geometry/LineCurve2.md +1 -1
  106. package/dist/docs/reference/geometry/LineCurve3.md +1 -1
  107. package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -5
  108. package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
  109. package/dist/docs/reference/geometry/LoftMeshStation.md +4 -4
  110. package/dist/docs/reference/geometry/LoftOptions.md +1 -1
  111. package/dist/docs/reference/geometry/LoftPlacement.md +1 -1
  112. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +1 -1
  113. package/dist/docs/reference/geometry/MatchProfilesOptions.md +1 -1
  114. package/dist/docs/reference/geometry/MetricFastenerSize.md +1 -1
  115. package/dist/docs/reference/geometry/MetricFastenerStandard.md +1 -1
  116. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +1 -1
  117. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +1 -1
  118. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  119. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
  120. package/dist/docs/reference/geometry/Path2-type.md +192 -0
  121. package/dist/docs/reference/geometry/Path2Data.md +14 -0
  122. package/dist/docs/reference/geometry/Path2Input.md +15 -0
  123. package/dist/docs/reference/geometry/Path3-type.md +192 -0
  124. package/dist/docs/reference/geometry/Path3Data.md +14 -0
  125. package/dist/docs/reference/geometry/Path3Input.md +15 -0
  126. package/dist/docs/reference/geometry/PathFrame.md +1 -1
  127. package/dist/docs/reference/geometry/PathLocation.md +65 -0
  128. package/dist/docs/reference/geometry/PathNormalGuide.md +4 -3
  129. package/dist/docs/reference/geometry/PathOptions.md +34 -0
  130. package/dist/docs/reference/geometry/PathPatternOptions.md +3 -3
  131. package/dist/docs/reference/geometry/PathPlacement.md +1 -1
  132. package/dist/docs/reference/geometry/PathResamplingOptions.md +80 -0
  133. package/dist/docs/reference/geometry/Pivot2Options.md +1 -1
  134. package/dist/docs/reference/geometry/Pivot3Options.md +1 -1
  135. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +1 -1
  136. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +22 -22
  137. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +1 -1
  138. package/dist/docs/reference/geometry/PlanarPatchQuality.md +1 -1
  139. package/dist/docs/reference/geometry/PolygonData.md +1 -1
  140. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +4 -4
  141. package/dist/docs/reference/geometry/PrimitiveAttachment.md +31 -0
  142. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +104 -0
  143. package/dist/docs/reference/geometry/PrintableThreadFit.md +1 -1
  144. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +1 -1
  145. package/dist/docs/reference/geometry/Profile.md +1 -1
  146. package/dist/docs/reference/geometry/ProfileComponent2.md +1 -1
  147. package/dist/docs/reference/geometry/ProfileContour2.md +1 -1
  148. package/dist/docs/reference/geometry/ProfileSpan2.md +2 -2
  149. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +1 -1
  150. package/dist/docs/reference/geometry/RackPitchDimensions.md +1 -1
  151. package/dist/docs/reference/geometry/RackPitchSpec.md +5 -5
  152. package/dist/docs/reference/geometry/RadialPatternOptions.md +17 -22
  153. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  154. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  155. package/dist/docs/reference/geometry/RectangleContourOptions.md +1 -1
  156. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +1 -1
  157. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +1 -1
  158. package/dist/docs/reference/geometry/RectangleProfileOptions.md +1 -1
  159. package/dist/docs/reference/geometry/RegionData.md +1 -1
  160. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
  161. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  162. package/dist/docs/reference/geometry/RevolveOptions.md +9 -4
  163. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  164. package/dist/docs/reference/geometry/RowLayoutOptions.md +1 -1
  165. package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
  166. package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
  167. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
  168. package/dist/docs/reference/geometry/SampledCurve2.md +1 -1
  169. package/dist/docs/reference/geometry/SampledCurve3.md +1 -1
  170. package/dist/docs/reference/geometry/SampledThreadHelices.md +3 -3
  171. package/dist/docs/reference/geometry/SideProfileCurve.md +1 -1
  172. package/dist/docs/reference/geometry/SideProfilePoint.md +1 -1
  173. package/dist/docs/reference/geometry/SideProfileSegment.md +1 -1
  174. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  175. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +3 -3
  176. package/dist/docs/reference/geometry/SphereOptions.md +3 -3
  177. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
  178. package/dist/docs/reference/geometry/StrokeCap.md +7 -0
  179. package/dist/docs/reference/geometry/StrokeJoin.md +7 -0
  180. package/dist/docs/reference/geometry/{StrokePathRegionOptions.md → StrokeOptions.md} +7 -7
  181. package/dist/docs/reference/geometry/SvgImportOptions.md +1 -1
  182. package/dist/docs/reference/geometry/SvgRegionPreflight.md +1 -1
  183. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +13 -13
  184. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +11 -11
  185. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +9 -9
  186. package/dist/docs/reference/geometry/SweepOptions.md +6 -6
  187. package/dist/docs/reference/geometry/SweepOrientation.md +7 -7
  188. package/dist/docs/reference/geometry/ThreadBevelOptions.md +1 -1
  189. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +5 -5
  190. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +1 -1
  191. package/dist/docs/reference/geometry/ThreadEndStyle.md +1 -1
  192. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +1 -1
  193. package/dist/docs/reference/geometry/ThreadHandedness.md +1 -1
  194. package/dist/docs/reference/geometry/ThreadHelixOptions.md +3 -3
  195. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
  196. package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
  197. package/dist/docs/reference/geometry/{ThreadProfile.md → ThreadProfile-type.md} +1 -1
  198. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
  199. package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
  200. package/dist/docs/reference/geometry/ThreadRole.md +1 -1
  201. package/dist/docs/reference/geometry/ThreadedNutBevel.md +1 -1
  202. package/dist/docs/reference/geometry/ThreadedNutOptions.md +6 -6
  203. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +1 -1
  204. package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
  205. package/dist/docs/reference/geometry/ThreadedRodOptions.md +6 -6
  206. package/dist/docs/reference/geometry/TorusOptions.md +8 -8
  207. package/dist/docs/reference/geometry/Transform2-type.md +1 -1
  208. package/dist/docs/reference/geometry/Transform2Input.md +1 -1
  209. package/dist/docs/reference/geometry/Transform2Matrix.md +1 -1
  210. package/dist/docs/reference/geometry/Transform3-type.md +1 -1
  211. package/dist/docs/reference/geometry/Transform3Input.md +1 -1
  212. package/dist/docs/reference/geometry/Transform3Matrix.md +1 -1
  213. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +5 -4
  214. package/dist/docs/reference/geometry/TriangleMesh.md +1 -1
  215. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +2 -2
  216. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +1 -1
  217. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
  218. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +3 -3
  219. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
  220. package/dist/docs/reference/geometry/TriangleMeshSignature.md +2 -2
  221. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +3 -3
  222. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
  223. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +1 -1
  224. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +1 -1
  225. package/dist/docs/reference/geometry/TubeOptions.md +8 -8
  226. package/dist/docs/reference/geometry/Vector2-type.md +1 -1
  227. package/dist/docs/reference/geometry/Vector2Input.md +1 -1
  228. package/dist/docs/reference/geometry/Vector2Tuple.md +1 -1
  229. package/dist/docs/reference/geometry/Vector3-type.md +1 -1
  230. package/dist/docs/reference/geometry/Vector3Input.md +1 -1
  231. package/dist/docs/reference/geometry/Vector3Tuple.md +1 -1
  232. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +3 -3
  233. package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
  234. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +1 -1
  235. package/dist/docs/reference/geometry/VectorTextMetrics.md +1 -1
  236. package/dist/docs/reference/geometry/VectorTextOptions.md +1 -1
  237. package/dist/docs/reference/geometry/add2.md +1 -1
  238. package/dist/docs/reference/geometry/add3.md +1 -1
  239. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +1 -1
  240. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +2 -2
  241. package/dist/docs/reference/geometry/{createAnchor3.md → anchor3.md} +9 -9
  242. package/dist/docs/reference/geometry/anchorFrame3.md +5 -5
  243. package/dist/docs/reference/geometry/applyTransformDirection3.md +1 -1
  244. package/dist/docs/reference/geometry/applyTransformPoint3.md +1 -1
  245. package/dist/docs/reference/geometry/{attachTransform.md → attachmentTransform3.md} +13 -13
  246. package/dist/docs/reference/geometry/boundsCenter.md +1 -1
  247. package/dist/docs/reference/geometry/boundsFromSize.md +1 -1
  248. package/dist/docs/reference/geometry/boundsSize.md +1 -1
  249. package/dist/docs/reference/geometry/boxAnchor3.md +4 -4
  250. package/dist/docs/reference/geometry/categories/bounds-layout.md +1 -1
  251. package/dist/docs/reference/geometry/categories/curves-paths.md +15 -13
  252. package/dist/docs/reference/geometry/categories/mechanical.md +6 -6
  253. package/dist/docs/reference/geometry/categories/meshes.md +3 -4
  254. package/dist/docs/reference/geometry/categories/pattern-placement.md +6 -6
  255. package/dist/docs/reference/geometry/categories/primitive-options.md +4 -4
  256. package/dist/docs/reference/geometry/categories/profiles-regions.md +2 -3
  257. package/dist/docs/reference/geometry/categories/resolution-errors.md +1 -1
  258. package/dist/docs/reference/geometry/categories/transforms-math.md +5 -5
  259. package/dist/docs/reference/geometry/categories/vector-import.md +5 -5
  260. package/dist/docs/reference/geometry/circleContour.md +1 -1
  261. package/dist/docs/reference/geometry/closeToAxis.md +1 -1
  262. package/dist/docs/reference/geometry/compensateThreadDiameters.md +1 -1
  263. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +5 -5
  264. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +5 -5
  265. package/dist/docs/reference/geometry/composeTransform3.md +1 -1
  266. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +10 -6
  267. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +8 -7
  268. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +1 -1
  269. package/dist/docs/reference/geometry/{createTriangleMeshSignature.md → computeTriangleMeshSignature.md} +4 -4
  270. package/dist/docs/reference/geometry/containsBounds.md +1 -1
  271. package/dist/docs/reference/geometry/contourContainsPoint.md +1 -1
  272. package/dist/docs/reference/geometry/cross2.md +1 -1
  273. package/dist/docs/reference/geometry/cross3.md +1 -1
  274. package/dist/docs/reference/geometry/cylinderAnchor3.md +5 -5
  275. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +1 -1
  276. package/dist/docs/reference/geometry/distance2.md +1 -1
  277. package/dist/docs/reference/geometry/distance3.md +1 -1
  278. package/dist/docs/reference/geometry/distributeAlongPath.md +8 -6
  279. package/dist/docs/reference/geometry/dot2.md +1 -1
  280. package/dist/docs/reference/geometry/dot3.md +1 -1
  281. package/dist/docs/reference/geometry/ellipseContour.md +1 -1
  282. package/dist/docs/reference/geometry/eulerTransform3.md +1 -1
  283. package/dist/docs/reference/geometry/extrudeMesh.md +8 -8
  284. package/dist/docs/reference/geometry/fitBounds.md +1 -1
  285. package/dist/docs/reference/geometry/fitTextLayout.md +1 -1
  286. package/dist/docs/reference/geometry/frameTransform3.md +1 -1
  287. package/dist/docs/reference/geometry/{getMetricClearanceHole.md → getMetricClearanceHoleDiameter.md} +3 -3
  288. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
  289. package/dist/docs/reference/geometry/gridPatternTransforms.md +2 -2
  290. package/dist/docs/reference/geometry/heightfieldMesh.md +1 -1
  291. package/dist/docs/reference/geometry/{buildHelicalThreadRidgeMesh.md → helicalThreadRidgeMesh.md} +5 -5
  292. package/dist/docs/reference/geometry/{buildHelicalThreadSolidMesh.md → helicalThreadSolidMesh.md} +5 -5
  293. package/dist/docs/reference/geometry/inverseTransform3.md +1 -1
  294. package/dist/docs/reference/geometry/isGeometryError.md +1 -1
  295. package/dist/docs/reference/geometry/joinTriangleMeshes.md +1 -1
  296. package/dist/docs/reference/geometry/layoutRow.md +1 -1
  297. package/dist/docs/reference/geometry/length2.md +1 -1
  298. package/dist/docs/reference/geometry/length3.md +1 -1
  299. package/dist/docs/reference/geometry/lerp2.md +1 -1
  300. package/dist/docs/reference/geometry/lerp3.md +1 -1
  301. package/dist/docs/reference/geometry/linearPatternTransforms.md +2 -2
  302. package/dist/docs/reference/geometry/loftMesh.md +2 -1
  303. package/dist/docs/reference/geometry/matchProfiles.md +1 -1
  304. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +1 -1
  305. package/dist/docs/reference/geometry/meshBounds.md +1 -1
  306. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +3 -3
  307. package/dist/docs/reference/geometry/normalize2.md +1 -1
  308. package/dist/docs/reference/geometry/normalize3.md +1 -1
  309. package/dist/docs/reference/geometry/normalizeContour.md +1 -1
  310. package/dist/docs/reference/geometry/normalizePolygon.md +1 -1
  311. package/dist/docs/reference/geometry/normalizeRegion.md +1 -1
  312. package/dist/docs/reference/geometry/optimizePlanarPatches.md +11 -11
  313. package/dist/docs/reference/geometry/path2.md +42 -0
  314. package/dist/docs/reference/geometry/path3.md +42 -0
  315. package/dist/docs/reference/geometry/pathPatternTransforms.md +6 -6
  316. package/dist/docs/reference/geometry/preflightHeightfield.md +1 -1
  317. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +3 -3
  318. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +3 -3
  319. package/dist/docs/reference/geometry/preflightSvgRegion.md +1 -1
  320. package/dist/docs/reference/geometry/preflightThreadedNut.md +3 -3
  321. package/dist/docs/reference/geometry/preflightThreadedRod.md +3 -3
  322. package/dist/docs/reference/geometry/projectOntoPlane3.md +1 -1
  323. package/dist/docs/reference/geometry/radialPatternTransforms.md +1 -17
  324. package/dist/docs/reference/geometry/rectangleContour.md +1 -1
  325. package/dist/docs/reference/geometry/rectangleProfile.md +1 -1
  326. package/dist/docs/reference/geometry/regionArea.md +1 -1
  327. package/dist/docs/reference/geometry/regionBounds.md +1 -1
  328. package/dist/docs/reference/geometry/regularPolygonContour.md +2 -2
  329. package/dist/docs/reference/geometry/resamplePolyline2.md +2 -2
  330. package/dist/docs/reference/geometry/resamplePolyline3.md +2 -2
  331. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +4 -4
  332. package/dist/docs/reference/geometry/resolveArcSegments.md +4 -4
  333. package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
  334. package/dist/docs/reference/geometry/resolveCylindricalGear.md +1 -1
  335. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +1 -1
  336. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +3 -3
  337. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
  338. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  339. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +1 -1
  340. package/dist/docs/reference/geometry/resolveRackPitch.md +1 -1
  341. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +4 -4
  342. package/dist/docs/reference/geometry/reverseTriangleMesh.md +1 -1
  343. package/dist/docs/reference/geometry/revolveMesh.md +10 -10
  344. package/dist/docs/reference/geometry/rotate2.md +1 -1
  345. package/dist/docs/reference/geometry/rotationTransform3.md +1 -1
  346. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +6 -4
  347. package/dist/docs/reference/geometry/sampleContour.md +3 -3
  348. package/dist/docs/reference/geometry/sampleCurve2.md +3 -3
  349. package/dist/docs/reference/geometry/sampleCurve3.md +2 -2
  350. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
  351. package/dist/docs/reference/geometry/sampleHelix.md +2 -2
  352. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
  353. package/dist/docs/reference/geometry/sampleRackToothPath.md +4 -4
  354. package/dist/docs/reference/geometry/sampleSideProfile.md +3 -3
  355. package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
  356. package/dist/docs/reference/geometry/sampleThreadHelices.md +2 -2
  357. package/dist/docs/reference/geometry/scale2.md +1 -1
  358. package/dist/docs/reference/geometry/scale3.md +1 -1
  359. package/dist/docs/reference/geometry/scaleTransform3.md +1 -1
  360. package/dist/docs/reference/geometry/signedContourArea.md +1 -1
  361. package/dist/docs/reference/geometry/starContour.md +1 -1
  362. package/dist/docs/reference/geometry/strokeRegionData.md +63 -0
  363. package/dist/docs/reference/geometry/subtract2.md +1 -1
  364. package/dist/docs/reference/geometry/subtract3.md +1 -1
  365. package/dist/docs/reference/geometry/sweepMesh.md +9 -9
  366. package/dist/docs/reference/geometry/{createThreadProfile.md → threadProfile.md} +6 -6
  367. package/dist/docs/reference/geometry/transform2.md +1 -1
  368. package/dist/docs/reference/geometry/transform3.md +1 -1
  369. package/dist/docs/reference/geometry/transformDeterminant3.md +1 -1
  370. package/dist/docs/reference/geometry/transformRegionData.md +1 -1
  371. package/dist/docs/reference/geometry/transformTriangleMesh.md +6 -6
  372. package/dist/docs/reference/geometry/translationTransform3.md +1 -1
  373. package/dist/docs/reference/geometry/triangulateContour.md +1 -1
  374. package/dist/docs/reference/geometry/validateSolidMesh.md +2 -2
  375. package/dist/docs/reference/geometry/validateTransform3.md +1 -1
  376. package/dist/docs/reference/geometry/validateTriangleMesh.md +1 -1
  377. package/dist/docs/reference/geometry/vector2.md +1 -1
  378. package/dist/docs/reference/geometry/vector3.md +1 -1
  379. package/dist/docs/reference/geometry.md +2 -2
  380. package/dist/docs/reference/model/Anchor3.md +1 -1
  381. package/dist/docs/reference/model/AttachOptions.md +10 -5
  382. package/dist/docs/reference/model/Bounds2.md +1 -1
  383. package/dist/docs/reference/model/Bounds3.md +1 -1
  384. package/dist/docs/reference/model/BoxEdge.md +1 -1
  385. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  386. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  387. package/dist/docs/reference/model/BoxOptions.md +8 -8
  388. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  389. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  390. package/dist/docs/reference/model/CircleOptions.md +3 -3
  391. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
  392. package/dist/docs/reference/model/Computed.md +1 -1
  393. package/dist/docs/reference/model/ComputedValue.md +1 -1
  394. package/dist/docs/reference/model/Contour.md +1 -1
  395. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  396. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  397. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  398. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  399. package/dist/docs/reference/model/CylinderOptions.md +3 -3
  400. package/dist/docs/reference/model/DiagnosticOptions.md +1 -1
  401. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  402. package/dist/docs/reference/model/EllipseContourOptions.md +1 -1
  403. package/dist/docs/reference/model/EllipseOptions.md +3 -3
  404. package/dist/docs/reference/model/EndTreatments.md +1 -1
  405. package/dist/docs/reference/model/ExtrudeOptions.md +6 -6
  406. package/dist/docs/reference/model/FinalizedModel.md +18 -8
  407. package/dist/docs/reference/model/FinalizedPart.md +1 -1
  408. package/dist/docs/reference/model/Frame3.md +1 -1
  409. package/dist/docs/reference/model/GenerateCallback.md +1 -1
  410. package/dist/docs/reference/model/GenerateContext.md +1 -1
  411. package/dist/docs/reference/model/GeneratedPart.md +1 -1
  412. package/dist/docs/reference/model/GenerationDiagnostic.md +1 -1
  413. package/dist/docs/reference/model/GenerationError.md +1 -1
  414. package/dist/docs/reference/model/GeometryResolution.md +5 -5
  415. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  416. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  417. package/dist/docs/reference/model/GridPatternOptions.md +9 -3
  418. package/dist/docs/reference/model/HeightfieldOptions.md +1 -1
  419. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +3 -3
  420. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +1 -1
  421. package/dist/docs/reference/model/HullOptions.md +5 -5
  422. package/dist/docs/reference/model/ImmutableBuffer-type.md +1 -1
  423. package/dist/docs/reference/model/ImmutableTriangleMesh.md +1 -1
  424. package/dist/docs/reference/model/ImplicitOptions.md +1 -1
  425. package/dist/docs/reference/model/InternalThreadCutterOptions.md +4 -4
  426. package/dist/docs/reference/model/LinearPatternOptions.md +12 -5
  427. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  428. package/dist/docs/reference/model/LoftOptions.md +1 -1
  429. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  430. package/dist/docs/reference/model/LoftStation.md +3 -3
  431. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  432. package/dist/docs/reference/model/ModelProgram.md +1 -1
  433. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  434. package/dist/docs/reference/model/NumericArray.md +1 -1
  435. package/dist/docs/reference/model/PartGeometry.md +1 -1
  436. package/dist/docs/reference/model/PartOptions.md +1 -1
  437. package/dist/docs/reference/model/Path2-type.md +192 -0
  438. package/dist/docs/reference/model/Path2Data.md +14 -0
  439. package/dist/docs/reference/model/Path2Input.md +15 -0
  440. package/dist/docs/reference/model/Path3-type.md +192 -0
  441. package/dist/docs/reference/model/Path3Data.md +14 -0
  442. package/dist/docs/reference/model/Path3Input.md +15 -0
  443. package/dist/docs/reference/model/PathLocation.md +65 -0
  444. package/dist/docs/reference/model/PathNormalGuide.md +4 -3
  445. package/dist/docs/reference/model/PathOptions.md +34 -0
  446. package/dist/docs/reference/model/PathPatternOptions.md +3 -3
  447. package/dist/docs/reference/model/PathResamplingOptions.md +79 -0
  448. package/dist/docs/reference/model/PatternSource.md +1 -1
  449. package/dist/docs/reference/model/Pivot2Options.md +1 -1
  450. package/dist/docs/reference/model/Pivot3Options.md +1 -1
  451. package/dist/docs/reference/model/PlaneOptions.md +3 -3
  452. package/dist/docs/reference/model/PolygonData.md +1 -1
  453. package/dist/docs/reference/model/PolygonOptions.md +8 -8
  454. package/dist/docs/reference/model/{PrimitivePlacement.md → PrimitiveAttachment.md} +7 -7
  455. package/dist/docs/reference/model/{PrimitivePlacementOptions.md → PrimitiveAttachmentOptions.md} +41 -20
  456. package/dist/docs/reference/model/PrintableThreadFit.md +1 -1
  457. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +1 -1
  458. package/dist/docs/reference/model/Profile.md +1 -1
  459. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  460. package/dist/docs/reference/model/ProfileContour2.md +1 -1
  461. package/dist/docs/reference/model/ProfileSpan2.md +2 -2
  462. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +1 -1
  463. package/dist/docs/reference/model/RadialPatternOptions.md +17 -22
  464. package/dist/docs/reference/model/RadialSizing.md +1 -1
  465. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  466. package/dist/docs/reference/model/RectangleContourOptions.md +1 -1
  467. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  468. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  469. package/dist/docs/reference/model/RectangleOptions.md +8 -8
  470. package/dist/docs/reference/model/RegionData.md +1 -1
  471. package/dist/docs/reference/model/RegularPolygonOptions.md +5 -5
  472. package/dist/docs/reference/model/RevolveOptions.md +9 -4
  473. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  474. package/dist/docs/reference/model/Section.md +12 -11
  475. package/dist/docs/reference/model/SectionHullOptions.md +5 -5
  476. package/dist/docs/reference/model/SectionInspection.md +7 -7
  477. package/dist/docs/reference/model/SectionOffsetJoin.md +1 -1
  478. package/dist/docs/reference/model/SectionOffsetOptions.md +1 -1
  479. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  480. package/dist/docs/reference/model/Solid.md +23 -6
  481. package/dist/docs/reference/model/SolidInspection.md +4 -4
  482. package/dist/docs/reference/model/{SolidRayHit.md → SolidSegmentHit.md} +3 -3
  483. package/dist/docs/reference/model/SphereOptions.md +3 -3
  484. package/dist/docs/reference/model/StarOptions.md +10 -10
  485. package/dist/docs/reference/model/{StrokePathCap.md → StrokeCap.md} +3 -3
  486. package/dist/docs/reference/model/{StrokePathJoin.md → StrokeJoin.md} +3 -3
  487. package/dist/docs/reference/model/StrokeOptions.md +6 -6
  488. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  489. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  490. package/dist/docs/reference/model/SvgSectionOptions.md +1 -1
  491. package/dist/docs/reference/model/SweepOptions.md +6 -6
  492. package/dist/docs/reference/model/SweepOrientation.md +7 -7
  493. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  494. package/dist/docs/reference/model/ThreadEndStyle.md +1 -1
  495. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +1 -1
  496. package/dist/docs/reference/model/ThreadHandedness.md +1 -1
  497. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +1 -1
  498. package/dist/docs/reference/model/ThreadLeadInShape.md +1 -1
  499. package/dist/docs/reference/model/ThreadProfile.md +1 -1
  500. package/dist/docs/reference/model/ThreadRidgeOptions.md +1 -1
  501. package/dist/docs/reference/model/ThreadedNutBevel.md +1 -1
  502. package/dist/docs/reference/model/ThreadedNutOptions.md +4 -4
  503. package/dist/docs/reference/model/ThreadedNutPreflight.md +1 -1
  504. package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
  505. package/dist/docs/reference/model/ThreadedRodOptions.md +4 -4
  506. package/dist/docs/reference/model/TorusOptions.md +8 -8
  507. package/dist/docs/reference/model/Transform2-type.md +1 -1
  508. package/dist/docs/reference/model/Transform2Input.md +1 -1
  509. package/dist/docs/reference/model/Transform2Matrix.md +1 -1
  510. package/dist/docs/reference/model/Transform3-type.md +1 -1
  511. package/dist/docs/reference/model/Transform3Input.md +1 -1
  512. package/dist/docs/reference/model/Transform3Matrix.md +1 -1
  513. package/dist/docs/reference/model/TriangleMesh.md +1 -1
  514. package/dist/docs/reference/model/TriangleMeshAnalysis.md +2 -2
  515. package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
  516. package/dist/docs/reference/model/TubeOptions.md +8 -8
  517. package/dist/docs/reference/model/Vector2-type.md +1 -1
  518. package/dist/docs/reference/model/Vector2Input.md +1 -1
  519. package/dist/docs/reference/model/Vector2Tuple.md +1 -1
  520. package/dist/docs/reference/model/Vector3-type.md +1 -1
  521. package/dist/docs/reference/model/Vector3Input.md +1 -1
  522. package/dist/docs/reference/model/Vector3Tuple.md +1 -1
  523. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  524. package/dist/docs/reference/model/VectorTextMetrics.md +1 -1
  525. package/dist/docs/reference/model/anchor.md +1 -1
  526. package/dist/docs/reference/model/box.md +3 -3
  527. package/dist/docs/reference/model/castSegment.md +40 -0
  528. package/dist/docs/reference/model/categories/boolean-operations.md +1 -1
  529. package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -1
  530. package/dist/docs/reference/model/categories/contracts.md +2 -2
  531. package/dist/docs/reference/model/categories/core-values-errors.md +1 -1
  532. package/dist/docs/reference/model/categories/explicit-profiles.md +2 -2
  533. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +2 -2
  534. package/dist/docs/reference/model/categories/generation.md +1 -1
  535. package/dist/docs/reference/model/categories/inspection.md +4 -5
  536. package/dist/docs/reference/model/categories/mesh-inspection.md +2 -2
  537. package/dist/docs/reference/model/categories/paths.md +33 -0
  538. package/dist/docs/reference/model/categories/primitives.md +2 -2
  539. package/dist/docs/reference/model/categories/resolution.md +2 -2
  540. package/dist/docs/reference/model/categories/sections.md +3 -4
  541. package/dist/docs/reference/model/categories/threads.md +5 -5
  542. package/dist/docs/reference/model/categories/transforms-placement.md +8 -8
  543. package/dist/docs/reference/model/circle.md +1 -1
  544. package/dist/docs/reference/model/components.md +6 -6
  545. package/dist/docs/reference/model/compose.md +1 -1
  546. package/dist/docs/reference/model/cylinder.md +1 -1
  547. package/dist/docs/reference/model/distance.md +1 -1
  548. package/dist/docs/reference/model/ellipse.md +1 -1
  549. package/dist/docs/reference/model/extrude.md +3 -3
  550. package/dist/docs/reference/model/generate.md +1 -1
  551. package/dist/docs/reference/model/gridPattern.md +4 -4
  552. package/dist/docs/reference/model/heightfield.md +1 -1
  553. package/dist/docs/reference/model/hull.md +1 -1
  554. package/dist/docs/reference/model/immutableBuffer.md +1 -1
  555. package/dist/docs/reference/model/immutableMesh.md +1 -1
  556. package/dist/docs/reference/model/implicit.md +1 -1
  557. package/dist/docs/reference/model/inspectSection.md +1 -1
  558. package/dist/docs/reference/model/inspectSolid.md +1 -1
  559. package/dist/docs/reference/model/internalThreadCutter.md +4 -4
  560. package/dist/docs/reference/model/intersect.md +1 -1
  561. package/dist/docs/reference/model/isEmpty.md +1 -1
  562. package/dist/docs/reference/model/linearPattern.md +4 -4
  563. package/dist/docs/reference/model/loft.md +1 -1
  564. package/dist/docs/reference/model/matchProfiles.md +2 -2
  565. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  566. package/dist/docs/reference/model/path2.md +42 -0
  567. package/dist/docs/reference/model/path3.md +42 -0
  568. package/dist/docs/reference/model/pathPattern.md +13 -12
  569. package/dist/docs/reference/model/polygon.md +4 -4
  570. package/dist/docs/reference/model/preflightInternalThreadCutter.md +3 -3
  571. package/dist/docs/reference/model/preflightThreadedNut.md +3 -3
  572. package/dist/docs/reference/model/preflightThreadedRod.md +3 -3
  573. package/dist/docs/reference/model/radialPattern.md +5 -37
  574. package/dist/docs/reference/model/rectangle.md +3 -3
  575. package/dist/docs/reference/model/regularPolygon.md +1 -1
  576. package/dist/docs/reference/model/revolve.md +5 -4
  577. package/dist/docs/reference/model/solidFromMesh.md +1 -1
  578. package/dist/docs/reference/model/sphere.md +1 -1
  579. package/dist/docs/reference/model/split.md +1 -1
  580. package/dist/docs/reference/model/splitByPlane.md +1 -1
  581. package/dist/docs/reference/model/star.md +4 -4
  582. package/dist/docs/reference/model/stroke.md +8 -8
  583. package/dist/docs/reference/model/svgPathSection.md +1 -1
  584. package/dist/docs/reference/model/svgSection.md +1 -1
  585. package/dist/docs/reference/model/sweep.md +7 -7
  586. package/dist/docs/reference/model/textSection.md +1 -1
  587. package/dist/docs/reference/model/threadRidge.md +2 -2
  588. package/dist/docs/reference/model/threadedNut.md +4 -4
  589. package/dist/docs/reference/model/threadedRod.md +4 -4
  590. package/dist/docs/reference/model/torus.md +3 -3
  591. package/dist/docs/reference/model/transform2.md +1 -1
  592. package/dist/docs/reference/model/transform3.md +1 -1
  593. package/dist/docs/reference/model/tube.md +3 -3
  594. package/dist/docs/reference/model/union.md +1 -1
  595. package/dist/docs/reference/model/vector2.md +1 -1
  596. package/dist/docs/reference/model/vector3.md +1 -1
  597. package/dist/docs/reference/model.md +3 -2
  598. package/dist/docs/reference/text/Bounds2.md +1 -1
  599. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
  600. package/dist/docs/reference/text/Vector2Tuple.md +1 -1
  601. package/dist/docs/reference/text/VectorFont.md +2 -2
  602. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  603. package/dist/docs/reference/text/VectorTextArcBaseline.md +3 -3
  604. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  605. package/dist/docs/reference/text/VectorTextLayoutOptions.md +1 -1
  606. package/dist/docs/reference/text/VectorTextMetrics.md +1 -1
  607. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  608. package/dist/docs/reference/text/categories/font-preparation.md +3 -3
  609. package/dist/docs/reference/text/prepareVectorFont.md +2 -2
  610. package/dist/docs/reference/text.md +1 -1
  611. package/dist/engine/construction-operations.js +31 -14
  612. package/dist/engine/execution.js +39 -8
  613. package/dist/engine/extrusion-finishing.js +1 -1
  614. package/dist/engine/index.js +6 -1
  615. package/dist/engine/inspection-operations.js +13 -11
  616. package/dist/engine/loft-operations.js +35 -14
  617. package/dist/engine/model-summary.js +8 -5
  618. package/dist/engine/native/material-components.js +305 -0
  619. package/dist/engine/native/regions.js +2 -1
  620. package/dist/engine/native/threads.js +3 -3
  621. package/dist/engine/native/transforms.js +5 -7
  622. package/dist/engine/operation-environment.js +2 -2
  623. package/dist/engine/pattern-operations.js +1 -1
  624. package/dist/engine/placement.js +2 -2
  625. package/dist/engine/primitive-anchors.js +17 -17
  626. package/dist/engine/primitive-operations.js +1 -1
  627. package/dist/engine/primitive-profiles.js +7 -7
  628. package/dist/engine/profile-mesh.js +7 -7
  629. package/dist/engine/recipe-realization.js +6 -0
  630. package/dist/engine/section-operations.js +33 -8
  631. package/dist/engine/session-snapshot.js +14 -4
  632. package/dist/engine/session.js +10 -5
  633. package/dist/engine/shape-anchors.js +3 -3
  634. package/dist/engine/transform-operations.js +24 -24
  635. package/dist/geometry/anchors.js +40 -33
  636. package/dist/geometry/curves/sampling.js +14 -14
  637. package/dist/geometry/edge-finishing.js +1 -1
  638. package/dist/geometry/extrusion.js +13 -16
  639. package/dist/geometry/index.js +9 -10
  640. package/dist/geometry/loft/loft-simple-mesh.js +6 -6
  641. package/dist/geometry/loft/loft.js +22 -13
  642. package/dist/geometry/math/immutable-value.js +1 -1
  643. package/dist/geometry/mechanical/gear-motion.js +3 -3
  644. package/dist/geometry/mechanical/gears.js +38 -38
  645. package/dist/geometry/mechanical/index.js +3 -3
  646. package/dist/geometry/mechanical/standards.js +1 -1
  647. package/dist/geometry/mechanical/thread-helices.js +2 -3
  648. package/dist/geometry/mechanical/thread-mesh-plan.js +4 -5
  649. package/dist/geometry/mechanical/thread-mesh.js +7 -7
  650. package/dist/geometry/mechanical/thread-profiles.js +5 -5
  651. package/dist/geometry/mechanical/thread-solids.js +2 -2
  652. package/dist/geometry/mechanical/thread-surface.js +1 -1
  653. package/dist/geometry/mechanical/threads.js +8 -8
  654. package/dist/geometry/mesh/mesh-planar.js +25 -27
  655. package/dist/geometry/mesh/mesh-quality.js +5 -5
  656. package/dist/geometry/mesh/mesh-signature.js +13 -13
  657. package/dist/geometry/mesh/mesh-solid.js +7 -7
  658. package/dist/geometry/mesh/mesh.js +4 -15
  659. package/dist/geometry/paths/closest-point.js +8 -19
  660. package/dist/geometry/paths/frames.js +41 -11
  661. package/dist/geometry/paths/helix.js +16 -6
  662. package/dist/geometry/paths/path-value.js +252 -0
  663. package/dist/geometry/paths/planar.js +36 -23
  664. package/dist/geometry/paths/resampling.js +27 -5
  665. package/dist/geometry/patterns/placements.js +100 -27
  666. package/dist/geometry/patterns.js +2 -2
  667. package/dist/geometry/polygon-clipping.js +17 -0
  668. package/dist/geometry/profiles/contour.js +6 -6
  669. package/dist/geometry/profiles/matched.js +4 -4
  670. package/dist/geometry/profiles/profiles.js +4 -4
  671. package/dist/geometry/profiles/rectangle.js +4 -4
  672. package/dist/geometry/profiles/side-profile.js +7 -7
  673. package/dist/geometry/profiles/span-sampling.js +1 -1
  674. package/dist/geometry/resolution.js +34 -34
  675. package/dist/geometry/revolve/revolve-mesh.js +12 -7
  676. package/dist/geometry/stroke-path.js +12 -27
  677. package/dist/geometry/svg/fill.js +7 -21
  678. package/dist/geometry/svg-import.js +23 -23
  679. package/dist/geometry/sweeps/options.js +5 -4
  680. package/dist/geometry/sweeps/orientation.js +5 -5
  681. package/dist/geometry/sweeps/stations.js +10 -10
  682. package/dist/geometry/sweeps/sweep-closed.js +2 -2
  683. package/dist/geometry/sweeps/sweep-mesh.js +9 -3
  684. package/dist/geometry/sweeps/sweep-open.js +1 -1
  685. package/dist/geometry/sweeps/validation.js +4 -7
  686. package/dist/geometry/transform-geometry.js +7 -14
  687. package/dist/index.js +1 -0
  688. package/dist/model/execution-binding.js +3 -3
  689. package/dist/model/geometry-recipes.js +1 -1
  690. package/dist/model/immutable-generation-data.js +66 -6
  691. package/dist/model/operations.js +25 -26
  692. package/dist/model/recipe-declaration.js +13 -7
  693. package/dist/model/shape-handles.js +2 -1
  694. package/dist/text/index.js +15 -9
  695. package/dist/text/vector-text-layout.js +31 -26
  696. package/package.json +1 -1
  697. package/dist/docs/reference/geometry/ClosestPointOnPathOptions.md +0 -34
  698. package/dist/docs/reference/geometry/ClosestPointOnPathResult.md +0 -65
  699. package/dist/docs/reference/geometry/Path2.md +0 -14
  700. package/dist/docs/reference/geometry/Path3.md +0 -14
  701. package/dist/docs/reference/geometry/PrimitivePlacement.md +0 -31
  702. package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +0 -83
  703. package/dist/docs/reference/geometry/StrokePathCap.md +0 -7
  704. package/dist/docs/reference/geometry/StrokePathJoin.md +0 -7
  705. package/dist/docs/reference/geometry/closestPointOnPath.md +0 -110
  706. package/dist/docs/reference/geometry/cumulativePathLengths.md +0 -33
  707. package/dist/docs/reference/geometry/measureTriangleMesh.md +0 -55
  708. package/dist/docs/reference/geometry/pathLength.md +0 -33
  709. package/dist/docs/reference/geometry/strokePathRegion.md +0 -63
  710. package/dist/docs/reference/geometry/transformContour.md +0 -42
  711. package/dist/docs/reference/geometry/transformPath2.md +0 -40
  712. package/dist/docs/reference/geometry/transformPath3.md +0 -33
  713. package/dist/docs/reference/model/Path2.md +0 -20
  714. package/dist/docs/reference/model/rayCast.md +0 -40
  715. package/dist/docs/reference/model/toTriangleMesh.md +0 -27
  716. package/dist/geometry/paths/path.js +0 -32
@@ -33,22 +33,22 @@ const freezePoints = (points) => {
33
33
  * count `z_v = z / cos³(beta)`, so increasing helix angle can reduce the physical tooth count.
34
34
  */
35
35
  export function minimumCylindricalGearToothCountWithoutUndercut(spec = {}) {
36
- const pressureAngleDegrees = finite(spec.pressureAngleDegrees ?? DEFAULT_PRESSURE_ANGLE_DEGREES, "Pressure angle", "minimumCylindricalGearToothCountWithoutUndercut");
37
- const helixAngleDegrees = finite(spec.helixAngleDegrees ?? 0, "Helix angle", "minimumCylindricalGearToothCountWithoutUndercut");
38
- if (!(pressureAngleDegrees > 0 && pressureAngleDegrees < 45)) {
36
+ const pressureAngle = finite(spec.pressureAngle ?? DEFAULT_PRESSURE_ANGLE_DEGREES, "Pressure angle", "minimumCylindricalGearToothCountWithoutUndercut");
37
+ const helixAngle = finite(spec.helixAngle ?? 0, "Helix angle", "minimumCylindricalGearToothCountWithoutUndercut");
38
+ if (!(pressureAngle > 0 && pressureAngle < 45)) {
39
39
  throw new GeometryError("INVALID_ARGUMENT", "Pressure angle must be greater than 0 and less than 45 degrees.", {
40
40
  operation: "minimumCylindricalGearToothCountWithoutUndercut",
41
- details: { pressureAngleDegrees },
41
+ details: { pressureAngle },
42
42
  });
43
43
  }
44
- if (!(Math.abs(helixAngleDegrees) < 45)) {
44
+ if (!(Math.abs(helixAngle) < 45)) {
45
45
  throw new GeometryError("INVALID_ARGUMENT", "The absolute helix angle must be less than 45 degrees.", {
46
46
  operation: "minimumCylindricalGearToothCountWithoutUndercut",
47
- details: { helixAngleDegrees },
47
+ details: { helixAngle },
48
48
  });
49
49
  }
50
- const pressureAngleRadians = degreesToRadians(pressureAngleDegrees);
51
- const helixAngleRadians = degreesToRadians(helixAngleDegrees);
50
+ const pressureAngleRadians = degreesToRadians(pressureAngle);
51
+ const helixAngleRadians = degreesToRadians(helixAngle);
52
52
  const exact = (2 * Math.cos(helixAngleRadians) ** 3) / Math.sin(pressureAngleRadians) ** 2;
53
53
  // Exact boundary cases such as alpha=30° should not round up because of floating-point noise.
54
54
  return Math.ceil(exact - Math.max(1, Math.abs(exact)) * 1e-12);
@@ -64,7 +64,7 @@ const resolveSimpleInvoluteProfileFacts = (dimensions, operation) => {
64
64
  const halfAngleAtTip = halfAngleAt(dimensions.outsideRadius);
65
65
  if (!(startRadius <= dimensions.outsideRadius) ||
66
66
  !(halfAngleAtTip > 0) ||
67
- !(halfAngleAtStart < dimensions.angularPitch / 2)) {
67
+ !(halfAngleAtStart < dimensions.angularPitchRadians / 2)) {
68
68
  throw new GeometryError("DEGENERATE_GEOMETRY", "The selected tooth proportions cannot form a simple involute outline.", {
69
69
  operation,
70
70
  details: { halfAngleAtStart, halfAngleAtTip, startRadius },
@@ -73,7 +73,7 @@ const resolveSimpleInvoluteProfileFacts = (dimensions, operation) => {
73
73
  return Object.freeze({ halfAngleAt, halfAngleAtStart, halfAngleAtTip, startRadius });
74
74
  };
75
75
  const internalCylindricalGearSpaceDimensions = (dimensions) => {
76
- const circularPitch = dimensions.angularPitch * dimensions.pitchRadius;
76
+ const circularPitch = dimensions.angularPitchRadians * dimensions.pitchRadius;
77
77
  return Object.freeze({
78
78
  ...dimensions,
79
79
  outsideRadius: dimensions.pitchRadius + dimensions.dedendum,
@@ -90,8 +90,8 @@ const internalCylindricalGearSpaceDimensions = (dimensions) => {
90
90
  const resolveCylindricalGearDimensions = (spec, profile) => {
91
91
  const toothCount = finite(spec.toothCount, "Tooth count");
92
92
  const module = finite(spec.module, "Module");
93
- const pressureAngleDegrees = finite(spec.pressureAngleDegrees ?? DEFAULT_PRESSURE_ANGLE_DEGREES, "Pressure angle");
94
- const helixAngleDegrees = finite(spec.helixAngleDegrees ?? 0, "Helix angle");
93
+ const pressureAngle = finite(spec.pressureAngle ?? DEFAULT_PRESSURE_ANGLE_DEGREES, "Pressure angle");
94
+ const helixAngle = finite(spec.helixAngle ?? 0, "Helix angle");
95
95
  const backlash = finite(spec.backlash ?? 0, "Backlash");
96
96
  const clearanceFactor = finite(spec.clearanceFactor ?? DEFAULT_CLEARANCE_FACTOR, "Clearance factor");
97
97
  if (!Number.isInteger(toothCount) || toothCount < 6 || toothCount > MAXIMUM_TOOTH_COUNT) {
@@ -103,29 +103,29 @@ const resolveCylindricalGearDimensions = (spec, profile) => {
103
103
  details: { module },
104
104
  });
105
105
  }
106
- if (!(pressureAngleDegrees > 0 && pressureAngleDegrees < 45)) {
107
- throw new GeometryError("INVALID_ARGUMENT", "Pressure angle must be greater than 0 and less than 45 degrees.", { operation: "resolveCylindricalGear", details: { pressureAngleDegrees } });
106
+ if (!(pressureAngle > 0 && pressureAngle < 45)) {
107
+ throw new GeometryError("INVALID_ARGUMENT", "Pressure angle must be greater than 0 and less than 45 degrees.", { operation: "resolveCylindricalGear", details: { pressureAngle } });
108
108
  }
109
- if (!(Math.abs(helixAngleDegrees) < 45)) {
110
- throw new GeometryError("INVALID_ARGUMENT", "The absolute helix angle must be less than 45 degrees.", { operation: "resolveCylindricalGear", details: { helixAngleDegrees } });
109
+ if (!(Math.abs(helixAngle) < 45)) {
110
+ throw new GeometryError("INVALID_ARGUMENT", "The absolute helix angle must be less than 45 degrees.", { operation: "resolveCylindricalGear", details: { helixAngle } });
111
111
  }
112
112
  if (backlash < 0 || clearanceFactor < 0) {
113
113
  throw new GeometryError("INVALID_ARGUMENT", "Backlash and clearance factor must be non-negative.", { operation: "resolveCylindricalGear" });
114
114
  }
115
- const pressureAngleRadians = degreesToRadians(pressureAngleDegrees);
116
- const helixAngleRadians = degreesToRadians(helixAngleDegrees);
115
+ const pressureAngleRadians = degreesToRadians(pressureAngle);
116
+ const helixAngleRadians = degreesToRadians(helixAngle);
117
117
  const minimumToothCountWithoutUndercut = minimumCylindricalGearToothCountWithoutUndercut({
118
- helixAngleDegrees,
119
- pressureAngleDegrees,
118
+ helixAngle,
119
+ pressureAngle,
120
120
  });
121
121
  const virtualToothCount = toothCount / Math.cos(helixAngleRadians) ** 3;
122
122
  if (profile === "external" && toothCount < minimumToothCountWithoutUndercut) {
123
- throw new GeometryError("INVALID_ARGUMENT", `An unshifted full-depth external involute at ${pressureAngleDegrees}° pressure angle and ${Math.abs(helixAngleDegrees)}° helix angle requires at least ${minimumToothCountWithoutUndercut} teeth to avoid undercut; profile shift is not supported.`, {
123
+ throw new GeometryError("INVALID_ARGUMENT", `An unshifted full-depth external involute at ${pressureAngle}° pressure angle and ${Math.abs(helixAngle)}° helix angle requires at least ${minimumToothCountWithoutUndercut} teeth to avoid undercut; profile shift is not supported.`, {
124
124
  operation: "resolveCylindricalGear",
125
125
  details: {
126
- helixAngleDegrees,
126
+ helixAngle,
127
127
  minimumToothCountWithoutUndercut,
128
- pressureAngleDegrees,
128
+ pressureAngle,
129
129
  toothCount,
130
130
  virtualToothCount,
131
131
  },
@@ -151,7 +151,7 @@ const resolveCylindricalGearDimensions = (spec, profile) => {
151
151
  }
152
152
  const dimensions = Object.freeze({
153
153
  addendum,
154
- angularPitch: (Math.PI * 2) / toothCount,
154
+ angularPitchRadians: (Math.PI * 2) / toothCount,
155
155
  backlash,
156
156
  baseRadius: pitchRadius * Math.cos(transversePressureAngleRadians),
157
157
  dedendum,
@@ -199,12 +199,12 @@ export function resolveCylindricalGearPair(spec) {
199
199
  // separate tip/interference constraints are checked by the pair and coupled-motion validators.
200
200
  const driven = resolveCylindricalGearDimensions(spec.driven, spec.mesh);
201
201
  const epsilon = 1e-10;
202
- const driverHelixDegrees = spec.driver.helixAngleDegrees ?? 0;
203
- const drivenHelixDegrees = spec.driven.helixAngleDegrees ?? 0;
204
- const requiredDrivenHelixAngleDegrees = spec.mesh === "external" ? -driverHelixDegrees : driverHelixDegrees;
202
+ const driverHelixDegrees = spec.driver.helixAngle ?? 0;
203
+ const drivenHelixDegrees = spec.driven.helixAngle ?? 0;
204
+ const requiredDrivenHelixAngle = spec.mesh === "external" ? -driverHelixDegrees : driverHelixDegrees;
205
205
  if (Math.abs(driver.module - driven.module) > epsilon ||
206
206
  Math.abs(driver.pressureAngleRadians - driven.pressureAngleRadians) > epsilon ||
207
- Math.abs(drivenHelixDegrees - requiredDrivenHelixAngleDegrees) > epsilon) {
207
+ Math.abs(drivenHelixDegrees - requiredDrivenHelixAngle) > epsilon) {
208
208
  throw new GeometryError("INVALID_ARGUMENT", "Mating gears must share normal module and pressure angle with conjugate helix hands.", { operation: "resolveCylindricalGearPair" });
209
209
  }
210
210
  if (spec.mesh === "internal" && driven.pitchRadius <= driver.outsideRadius) {
@@ -218,7 +218,7 @@ export function resolveCylindricalGearPair(spec) {
218
218
  driven,
219
219
  drivenDirection: spec.mesh === "external" ? -1 : 1,
220
220
  ratio: driven.toothCount / driver.toothCount,
221
- requiredDrivenHelixAngleDegrees,
221
+ requiredDrivenHelixAngle,
222
222
  });
223
223
  }
224
224
  const exactSampleCount = (value, label, minimum, maximum, operation) => {
@@ -345,7 +345,7 @@ const sampleResolvedCylindricalGearOutline = (dimensions, options, operation) =>
345
345
  const { halfAngleAt, halfAngleAtStart, halfAngleAtTip, startRadius } = resolveSimpleInvoluteProfileFacts(dimensions, operation);
346
346
  const limits = resolveGeometrySamplingLimits(options.limits);
347
347
  const resolution = resolveGeometryResolution(options.resolution, limits);
348
- const rootArcAngle = dimensions.angularPitch / 2 - halfAngleAtStart;
348
+ const rootArcAngle = dimensions.angularPitchRadians / 2 - halfAngleAtStart;
349
349
  const rootArcSamples = options.rootArcSamples === undefined
350
350
  ? resolveAdaptiveArcSamples(dimensions.rootRadius, rootArcAngle, resolution, limits)
351
351
  : exactSampleCount(options.rootArcSamples, "Root arc samples", 1, limits.maxCircularSegments, operation);
@@ -361,10 +361,12 @@ const sampleResolvedCylindricalGearOutline = (dimensions, options, operation) =>
361
361
  : exactSampleCount(options.flankSamples, "Flank samples", 2, maximumFlankSamples, operation);
362
362
  const estimatedPoints = dimensions.toothCount * (flankSamples * 2 + fixedPerTooth);
363
363
  assertSamplingCount(estimatedPoints, operation, limits.maxProfilePoints);
364
- const points = [polarPoint(dimensions.rootRadius, -dimensions.angularPitch / 2)];
364
+ const points = [
365
+ polarPoint(dimensions.rootRadius, -dimensions.angularPitchRadians / 2),
366
+ ];
365
367
  for (let tooth = 0; tooth < dimensions.toothCount; tooth += 1) {
366
- const centerAngle = tooth * dimensions.angularPitch;
367
- const valleyBefore = centerAngle - dimensions.angularPitch / 2;
368
+ const centerAngle = tooth * dimensions.angularPitchRadians;
369
+ const valleyBefore = centerAngle - dimensions.angularPitchRadians / 2;
368
370
  const leftRootAngle = centerAngle - halfAngleAtStart;
369
371
  for (let sample = 1; sample <= rootArcSamples; sample += 1) {
370
372
  const amount = sample / rootArcSamples;
@@ -391,7 +393,7 @@ const sampleResolvedCylindricalGearOutline = (dimensions, options, operation) =>
391
393
  if (startRadius > dimensions.rootRadius) {
392
394
  points.push(polarPoint(dimensions.rootRadius, rightRootAngle));
393
395
  }
394
- const valleyAfter = centerAngle + dimensions.angularPitch / 2;
396
+ const valleyAfter = centerAngle + dimensions.angularPitchRadians / 2;
395
397
  for (let sample = 1; sample <= rootArcSamples; sample += 1) {
396
398
  const amount = sample / rootArcSamples;
397
399
  points.push(polarPoint(dimensions.rootRadius, rightRootAngle + (valleyAfter - rightRootAngle) * amount));
@@ -431,11 +433,9 @@ export function resolveRackPitch(spec) {
431
433
  const reference = resolveCylindricalGear({
432
434
  ...(spec.backlash === undefined ? {} : { backlash: spec.backlash }),
433
435
  ...(spec.clearanceFactor === undefined ? {} : { clearanceFactor: spec.clearanceFactor }),
434
- ...(spec.helixAngleDegrees === undefined ? {} : { helixAngleDegrees: spec.helixAngleDegrees }),
436
+ ...(spec.helixAngle === undefined ? {} : { helixAngle: spec.helixAngle }),
435
437
  module: spec.module,
436
- ...(spec.pressureAngleDegrees === undefined
437
- ? {}
438
- : { pressureAngleDegrees: spec.pressureAngleDegrees }),
438
+ ...(spec.pressureAngle === undefined ? {} : { pressureAngle: spec.pressureAngle }),
439
439
  // Rack pitch facts do not depend on this cylindrical reference count. Use the maximum so the
440
440
  // reference remains undercut-free for every supported normal pressure and helix angle.
441
441
  toothCount: MAXIMUM_TOOTH_COUNT,
@@ -5,9 +5,9 @@
5
5
  */
6
6
  export { minimumCylindricalGearToothCountWithoutUndercut, resolveCylindricalGear, resolveCylindricalGearPair, resolveRackPitch, sampleCylindricalGearOutline, sampleInternalCylindricalGearSpaceOutline, sampleRackToothPath, } from "./gears.js";
7
7
  export { measureInternalCylindricalGearPairMotion } from "./gear-motion.js";
8
- export { buildHelicalThreadRidgeMesh, buildHelicalThreadSolidMesh } from "./thread-mesh.js";
9
- export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, createThreadProfile, } from "./thread-profiles.js";
8
+ export { helicalThreadRidgeMesh, helicalThreadSolidMesh } from "./thread-mesh.js";
9
+ export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, threadProfile, } from "./thread-profiles.js";
10
10
  export { preflightHelicalThreadSolidMesh } from "./thread-mesh-plan.js";
11
11
  export { sampleConventionalThreadHelices as sampleThreadHelices } from "./thread-helices.js";
12
12
  export { compensateThreadDiameters, PRINTABLE_THREAD_FIT_POLICIES, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./threads.js";
13
- export { getMetricClearanceHole, getMetricFastenerStandard, METRIC_FASTENER_STANDARDS, } from "./standards.js";
13
+ export { getMetricClearanceHoleDiameter, getMetricFastenerStandard, METRIC_FASTENER_STANDARDS, } from "./standards.js";
@@ -50,7 +50,7 @@ export function getMetricFastenerStandard(size) {
50
50
  return METRIC_FASTENER_STANDARDS[size];
51
51
  }
52
52
  /** Returns one recommended metric clearance-hole diameter in millimetres. */
53
- export function getMetricClearanceHole(size, fit = "normal") {
53
+ export function getMetricClearanceHoleDiameter(size, fit = "normal") {
54
54
  const holes = getMetricFastenerStandard(size).clearanceHoles;
55
55
  const diameter = fit === "close"
56
56
  ? holes.close
@@ -29,10 +29,9 @@ export function sampleConventionalThreadHelices(options) {
29
29
  const count = Math.max(1, Math.ceil(turns * density));
30
30
  assertSamplingCount(starts * (count + 1), operation, resolveGeometrySamplingLimits(options.limits).maxPathPoints);
31
31
  const direction = handedness === "right" ? 1 : -1;
32
- const phase = assertFiniteThreadNumber((assertFiniteThreadNumber(options.phaseDegrees ?? 0, "phaseDegrees", operation) * Math.PI) /
33
- 180, "phase", operation);
32
+ const phaseRadians = assertFiniteThreadNumber((assertFiniteThreadNumber(options.phase ?? 0, "phase", operation) * Math.PI) / 180, "phase", operation);
34
33
  const paths = Object.freeze(Array.from({ length: starts }, (_, start) => {
35
- const initial = phase + (direction * 2 * Math.PI * start) / starts;
34
+ const initial = phaseRadians + (direction * 2 * Math.PI * start) / starts;
36
35
  return Object.freeze(Array.from({ length: count + 1 }, (_, index) => {
37
36
  const t = index / count;
38
37
  const z = length * t;
@@ -133,9 +133,9 @@ export const resolveHelicalThreadMeshOptions = (options, operation, circularSamp
133
133
  throw new GeometryError("INVALID_ARGUMENT", "Exact circularSegments must be divisible by the requested thread starts.", { operation, details: { circularSegments: base, starts } });
134
134
  }
135
135
  const segments = Math.ceil(base / starts) * starts;
136
- const maximumSegments = resolution.maximumSegments;
137
- if (segments > maximumSegments) {
138
- throw new GeometryError("COMPLEXITY_LIMIT", "Start-aligned thread tessellation exceeds the configured segment safety limit.", { operation, details: { maximumSegments, segments } });
136
+ const maxSegments = resolution.maxSegments;
137
+ if (segments > maxSegments) {
138
+ throw new GeometryError("COMPLEXITY_LIMIT", "Start-aligned thread tessellation exceeds the configured segment safety limit.", { operation, details: { maxSegments, segments } });
139
139
  }
140
140
  const handedness = options.handedness ?? "right";
141
141
  if (handedness !== "left" && handedness !== "right")
@@ -199,8 +199,7 @@ export const resolveHelicalThreadMeshOptions = (options, operation, circularSamp
199
199
  leadInLength,
200
200
  leadInShape,
201
201
  length,
202
- phase: (assertFiniteThreadNumber(options.phaseDegrees ?? 0, "phaseDegrees", operation) * Math.PI) /
203
- 180,
202
+ phase: (assertFiniteThreadNumber(options.phase ?? 0, "phase", operation) * Math.PI) / 180,
204
203
  section,
205
204
  segments,
206
205
  starts,
@@ -1,6 +1,6 @@
1
1
  /** Closed ridge and complete-solid mesh construction from resolved thread plans. */
2
2
  import { triangulateContour } from "../loft/loft.js";
3
- import { joinTriangleMeshes, measureTriangleMesh, reverseTriangleMesh, validateTriangleMesh, } from "../mesh/mesh.js";
3
+ import { analyzeTriangleMesh, joinTriangleMeshes, reverseTriangleMesh, validateTriangleMesh, } from "../mesh/mesh.js";
4
4
  import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../model-limits.js";
5
5
  import { resolveHelicalThreadMeshOptions, resolveHelicalThreadSolidMeshPreflight, } from "./thread-mesh-plan.js";
6
6
  import { buildThreadSurfaceColumn, stitchThreadSurfaceColumns } from "./thread-surface.js";
@@ -61,7 +61,7 @@ const buildThreadRidgeComponent = (options) => {
61
61
  indices: new Uint32Array(indices),
62
62
  };
63
63
  validateTriangleMesh(mesh, { requireClosed: true });
64
- if (measureTriangleMesh(mesh, { requireClosed: true }).signedVolume < 0)
64
+ if (analyzeTriangleMesh(mesh, { requireClosed: true }).signedVolume < 0)
65
65
  mesh = reverseTriangleMesh(mesh);
66
66
  return mesh;
67
67
  };
@@ -74,8 +74,8 @@ const buildThreadRidgeComponent = (options) => {
74
74
  * conservative pre-allocation estimate rejects excessive meshes before constructing position
75
75
  * arrays.
76
76
  */
77
- export function buildHelicalThreadSolidMesh(options) {
78
- const operation = "buildHelicalThreadSolidMesh";
77
+ export function helicalThreadSolidMesh(options) {
78
+ const operation = "helicalThreadSolidMesh";
79
79
  const { maximumAxialSegmentLength, resolved } = resolveHelicalThreadSolidMeshPreflight(options, operation);
80
80
  const positions = [];
81
81
  const columns = Array.from({ length: resolved.segments }, (_, column) => buildThreadSurfaceColumn(options.profile, resolved, options, resolved.phase + (column * 2 * Math.PI) / resolved.segments, maximumAxialSegmentLength, positions));
@@ -103,7 +103,7 @@ export function buildHelicalThreadSolidMesh(options) {
103
103
  indices: new Uint32Array(indices),
104
104
  };
105
105
  validateTriangleMesh(mesh, { requireClosed: true });
106
- if (measureTriangleMesh(mesh, { requireClosed: true }).signedVolume < 0) {
106
+ if (analyzeTriangleMesh(mesh, { requireClosed: true }).signedVolume < 0) {
107
107
  mesh = reverseTriangleMesh(mesh);
108
108
  }
109
109
  return mesh;
@@ -113,8 +113,8 @@ export function buildHelicalThreadSolidMesh(options) {
113
113
  * shaft's radial/axial frame. The mesh is intended for union with its
114
114
  * minor-envelope cylinder and never owns WASM objects.
115
115
  */
116
- export function buildHelicalThreadRidgeMesh(options) {
117
- const operation = "buildHelicalThreadRidgeMesh";
116
+ export function helicalThreadRidgeMesh(options) {
117
+ const operation = "helicalThreadRidgeMesh";
118
118
  const resolved = resolveHelicalThreadMeshOptions(options, operation);
119
119
  const z0 = resolved.bottomBoundary - resolved.section[0][0];
120
120
  const z1 = resolved.topBoundary - resolved.section.at(-1)[0];
@@ -237,11 +237,11 @@ const standardProfile = (kind, pitch, depth, root, crest, leftRun, rightRun) =>
237
237
  *
238
238
  * @example Printable triangular thread profile
239
239
  * ```ts
240
- * createThreadProfile({ kind: "triangular", pitch: 1.75 });
240
+ * threadProfile({ kind: "triangular", pitch: 1.75 });
241
241
  * ```
242
242
  */
243
- export function createThreadProfile(spec) {
244
- const operation = "createThreadProfile";
243
+ export function threadProfile(spec) {
244
+ const operation = "threadProfile";
245
245
  const pitch = assertFiniteThreadNumber(spec.pitch, "pitch", operation);
246
246
  const tolerance = resolveGeometryTolerance(Math.abs(pitch), spec.tolerance);
247
247
  if (!(pitch > tolerance.linear))
@@ -358,9 +358,9 @@ export function createThreadProfile(spec) {
358
358
  }
359
359
  const includedAngle = spec.kind === "acme"
360
360
  ? 29
361
- : assertFiniteThreadNumber(spec.threadAngle ?? 30, "threadAngle", operation);
361
+ : assertFiniteThreadNumber(spec.includedAngle ?? 30, "includedAngle", operation);
362
362
  if (includedAngle < 0 || includedAngle >= 180) {
363
- throw new GeometryError("INVALID_ARGUMENT", "threadAngle must be at least 0 degrees and below 180 degrees.", { operation });
363
+ throw new GeometryError("INVALID_ARGUMENT", "includedAngle must be at least 0 degrees and below 180 degrees.", { operation });
364
364
  }
365
365
  const halfIncludedAngle = includedAngle / 2;
366
366
  const flankRun = depth * (halfIncludedAngle === 45 ? 1 : Math.tan((halfIncludedAngle * Math.PI) / 180));
@@ -45,12 +45,12 @@ export const resolveCompensatedThreadSolidMesh = (options, role) => {
45
45
  const femaleBevelOutset = (style, size) => style === "blunt"
46
46
  ? Math.min(size, hypotheticalFemaleLength / 2)
47
47
  : Math.max(0, Math.min(size, hypotheticalFemaleLength / 2) - options.profile.depth);
48
- const maximumRadialOutset = Math.max(options.bevelBottom === true ? femaleBevelOutset(bottomStyle, femaleBottomBevelSize) : 0, options.bevelTop === true ? femaleBevelOutset(topStyle, femaleTopBevelSize) : 0);
48
+ const maxRadialOutset = Math.max(options.bevelBottom === true ? femaleBevelOutset(bottomStyle, femaleBottomBevelSize) : 0, options.bevelTop === true ? femaleBevelOutset(topStyle, femaleTopBevelSize) : 0);
49
49
  const segments = resolveThreadCircularSegments({
50
50
  nominalMajorDiameter: options.nominalMajorDiameter,
51
51
  profile: options.profile,
52
52
  starts,
53
- maximumRadialOutset,
53
+ maxRadialOutset,
54
54
  ...(options.limits === undefined ? {} : { limits: options.limits }),
55
55
  ...(options.fit === undefined ? {} : { fit: options.fit }),
56
56
  ...(options.resolution === undefined ? {} : { resolution: options.resolution }),
@@ -348,7 +348,7 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
348
348
  let previousZ;
349
349
  for (const sample of sampled) {
350
350
  const radius = radiusAt(sample, sample.z);
351
- requirePositiveThreadSurfaceRadius(radius, resolved, "buildHelicalThreadSolidMesh");
351
+ requirePositiveThreadSurfaceRadius(radius, resolved, "helicalThreadSolidMesh");
352
352
  if (previousRadius !== undefined &&
353
353
  previousZ !== undefined &&
354
354
  Math.abs(sample.z - previousZ) <= resolved.tolerance.linear &&
@@ -81,17 +81,17 @@ export function compensateThreadDiameters(options) {
81
81
  * Resolves a role-independent, start-aligned facet count from the larger female mating envelope.
82
82
  *
83
83
  * An exact `circularSegments` value must already be divisible by `starts`; it is never silently
84
- * raised. Adaptive policies align upward and fail if that would exceed `maximumSegments`.
84
+ * raised. Adaptive policies align upward and fail if that would exceed `maxSegments`.
85
85
  */
86
86
  export function resolveThreadCircularSegments(options) {
87
87
  const operation = "resolveThreadCircularSegments";
88
88
  const nominalMajorDiameter = finite(options.nominalMajorDiameter, "Nominal major diameter");
89
- const maximumRadialOutset = finite(options.maximumRadialOutset ?? 0, "Maximum radial outset");
89
+ const maxRadialOutset = finite(options.maxRadialOutset ?? 0, "Maximum radial outset");
90
90
  const pitch = finite(options.profile.pitch, "Profile pitch");
91
91
  const starts = finite(options.starts ?? 1, "Starts");
92
92
  if (!(nominalMajorDiameter > 0) ||
93
93
  !(pitch > 0) ||
94
- maximumRadialOutset < 0 ||
94
+ maxRadialOutset < 0 ||
95
95
  !Number.isInteger(starts) ||
96
96
  starts < 1 ||
97
97
  starts > 32) {
@@ -100,22 +100,22 @@ export function resolveThreadCircularSegments(options) {
100
100
  const policy = resolvePrintableThreadFitPolicy(options.fit);
101
101
  const resolution = resolveGeometryResolution(options.resolution, options.limits);
102
102
  const femaleMajorDiameter = nominalMajorDiameter + policy.femaleRadialOutset * 2;
103
- const maximumFemaleRadius = femaleMajorDiameter / 2 + maximumRadialOutset;
103
+ const maximumFemaleRadius = femaleMajorDiameter / 2 + maxRadialOutset;
104
104
  const effectiveRadius = Math.hypot(Math.PI * maximumFemaleRadius * 2, pitch * starts) / (Math.PI * 2);
105
105
  const baseSegments = resolveCircularSegments(effectiveRadius, options.resolution, options.limits);
106
106
  if (resolution.circularSegments !== undefined && baseSegments % starts !== 0) {
107
107
  throw new GeometryError("INVALID_ARGUMENT", "Exact circularSegments must be divisible by the requested thread starts.", { operation, details: { circularSegments: baseSegments, starts } });
108
108
  }
109
109
  let segments = Math.ceil(baseSegments / starts) * starts;
110
- if (segments > resolution.maximumSegments) {
111
- throw new GeometryError("COMPLEXITY_LIMIT", "Start-aligned thread tessellation exceeds the configured segment safety limit.", { operation, details: { maximumSegments: resolution.maximumSegments, segments } });
110
+ if (segments > resolution.maxSegments) {
111
+ throw new GeometryError("COMPLEXITY_LIMIT", "Start-aligned thread tessellation exceeds the configured segment safety limit.", { operation, details: { maxSegments: resolution.maxSegments, segments } });
112
112
  }
113
113
  // Physical circle error is only the lower bound for a mating thread grid. Independently
114
114
  // triangulated male and female helices also need enough angular facets to distribute their full
115
115
  // phase-span allowance without consuming either profile's crest or root flats. Adaptive policies
116
116
  // therefore refine by complete start-aligned steps; an exact caller override remains exact and
117
117
  // fails instead of being silently changed.
118
- while (segments <= resolution.maximumSegments) {
118
+ while (segments <= resolution.maxSegments) {
119
119
  try {
120
120
  compensateThreadProfileForFaceting(options.profile, policy.axialBacklash, "male", starts, segments);
121
121
  compensateThreadProfileForFaceting(options.profile, policy.axialBacklash, "female", starts, segments);
@@ -132,6 +132,6 @@ export function resolveThreadCircularSegments(options) {
132
132
  }
133
133
  throw new GeometryError("COMPLEXITY_LIMIT", "Mating thread faceting requires more segments than the configured safety limit.", {
134
134
  operation,
135
- details: { maximumSegments: resolution.maximumSegments, starts },
135
+ details: { maxSegments: resolution.maxSegments, starts },
136
136
  });
137
137
  }
@@ -41,29 +41,27 @@ const positiveFinite = (value, label) => {
41
41
  return value;
42
42
  };
43
43
  const resolveOptions = (options) => {
44
- const triggerMaximumFanRatio = options.triggerMaximumFanRatio ?? DEFAULT_TRIGGER_MAXIMUM_FAN_RATIO;
45
- if (!Number.isFinite(triggerMaximumFanRatio) ||
46
- triggerMaximumFanRatio < 0 ||
47
- triggerMaximumFanRatio > 1) {
44
+ const triggerMaxFanRatio = options.triggerMaxFanRatio ?? DEFAULT_TRIGGER_MAXIMUM_FAN_RATIO;
45
+ if (!Number.isFinite(triggerMaxFanRatio) || triggerMaxFanRatio < 0 || triggerMaxFanRatio > 1) {
48
46
  throw new GeometryError("INVALID_ARGUMENT", "Maximum fan ratio trigger must be finite and between zero and one.");
49
47
  }
50
- const triggerMinimumAngleDegrees = positiveFinite(options.triggerMinimumAngleDegrees ?? DEFAULT_TRIGGER_MINIMUM_ANGLE_DEGREES, "Minimum angle trigger");
51
- if (triggerMinimumAngleDegrees >= 180) {
48
+ const triggerMinAngleDegrees = positiveFinite(options.triggerMinAngleDegrees ?? DEFAULT_TRIGGER_MINIMUM_ANGLE_DEGREES, "Minimum angle trigger");
49
+ if (triggerMinAngleDegrees >= 180) {
52
50
  throw new GeometryError("INVALID_ARGUMENT", "Minimum angle trigger must be below 180 degrees.");
53
51
  }
54
52
  return {
55
- maximumEdgeRevisits: positiveInteger(options.maximumEdgeRevisits ?? DEFAULT_MAXIMUM_EDGE_REVISITS, "Maximum edge revisits"),
56
- maximumFlipAttempts: options.maximumFlipAttempts === undefined
53
+ maxEdgeRevisits: positiveInteger(options.maxEdgeRevisits ?? DEFAULT_MAXIMUM_EDGE_REVISITS, "Maximum edge revisits"),
54
+ maxFlipAttempts: options.maxFlipAttempts === undefined
57
55
  ? undefined
58
- : positiveInteger(options.maximumFlipAttempts, "Maximum flip attempts"),
59
- maximumPatchTriangleCount: positiveInteger(options.maximumPatchTriangleCount ?? DEFAULT_MAXIMUM_PATCH_TRIANGLE_COUNT, "Maximum patch triangle count"),
60
- maximumProcessedTriangleCount: positiveInteger(options.maximumProcessedTriangleCount ?? DEFAULT_MAXIMUM_PROCESSED_TRIANGLE_COUNT, "Maximum processed triangle count"),
61
- minimumPatchTriangleCount: positiveInteger(options.minimumPatchTriangleCount ?? DEFAULT_MINIMUM_PATCH_TRIANGLE_COUNT, "Minimum patch triangle count"),
62
- triggerMaximumAspectRatio: positiveFinite(options.triggerMaximumAspectRatio ?? DEFAULT_TRIGGER_MAXIMUM_ASPECT_RATIO, "Maximum aspect-ratio trigger"),
63
- triggerMaximumFanRatio,
64
- triggerMaximumVertexTriangleIncidence: positiveInteger(options.triggerMaximumVertexTriangleIncidence ??
56
+ : positiveInteger(options.maxFlipAttempts, "Maximum flip attempts"),
57
+ maxPatchTriangles: positiveInteger(options.maxPatchTriangles ?? DEFAULT_MAXIMUM_PATCH_TRIANGLE_COUNT, "Maximum patch triangle count"),
58
+ maxProcessedTriangles: positiveInteger(options.maxProcessedTriangles ?? DEFAULT_MAXIMUM_PROCESSED_TRIANGLE_COUNT, "Maximum processed triangle count"),
59
+ minPatchTriangles: positiveInteger(options.minPatchTriangles ?? DEFAULT_MINIMUM_PATCH_TRIANGLE_COUNT, "Minimum patch triangle count"),
60
+ triggerMaxAspectRatio: positiveFinite(options.triggerMaxAspectRatio ?? DEFAULT_TRIGGER_MAXIMUM_ASPECT_RATIO, "Maximum aspect-ratio trigger"),
61
+ triggerMaxFanRatio,
62
+ triggerMaxVertexTriangleIncidence: positiveInteger(options.triggerMaxVertexTriangleIncidence ??
65
63
  DEFAULT_TRIGGER_MAXIMUM_VERTEX_TRIANGLE_INCIDENCE, "Maximum vertex triangle-incidence trigger"),
66
- triggerMinimumAngleDegrees,
64
+ triggerMinAngleDegrees,
67
65
  };
68
66
  };
69
67
  const pairQuality = (positions, first, second) => {
@@ -118,11 +116,11 @@ const localConcentrationPotential = (vertices, incidence, valence, changes = new
118
116
  };
119
117
  const isTriggeredPatch = (patch, options) => {
120
118
  const report = patch.report;
121
- return (report.triangleCount >= options.minimumPatchTriangleCount &&
122
- (report.minimumTriangleAngleDegrees < options.triggerMinimumAngleDegrees ||
123
- report.maximumTriangleAspectRatio > options.triggerMaximumAspectRatio ||
124
- report.maximumVertexTriangleIncidence > options.triggerMaximumVertexTriangleIncidence ||
125
- report.fanRatio > options.triggerMaximumFanRatio));
119
+ return (report.triangleCount >= options.minPatchTriangles &&
120
+ (report.minimumTriangleAngleDegrees < options.triggerMinAngleDegrees ||
121
+ report.maximumTriangleAspectRatio > options.triggerMaxAspectRatio ||
122
+ report.maximumVertexTriangleIncidence > options.triggerMaxVertexTriangleIncidence ||
123
+ report.fanRatio > options.triggerMaxFanRatio));
126
124
  };
127
125
  const unchangedResult = (mesh, report, skippedPatchCount, budgetExhausted, fallbackReason) => ({
128
126
  after: report,
@@ -189,8 +187,8 @@ export function optimizePlanarPatches(mesh, options = {}) {
189
187
  for (const patch of before.patches) {
190
188
  if (!isTriggeredPatch(patch, resolved))
191
189
  continue;
192
- if (patch.report.triangleCount > resolved.maximumPatchTriangleCount ||
193
- selectedTriangleCount + patch.report.triangleCount > resolved.maximumProcessedTriangleCount) {
190
+ if (patch.report.triangleCount > resolved.maxPatchTriangles ||
191
+ selectedTriangleCount + patch.report.triangleCount > resolved.maxProcessedTriangles) {
194
192
  skippedPatchCount += 1;
195
193
  budgetExhausted = true;
196
194
  continue;
@@ -225,9 +223,9 @@ export function optimizePlanarPatches(mesh, options = {}) {
225
223
  const initialEdges = [...edges.values()]
226
224
  .filter(isCandidateEdge)
227
225
  .sort((left, right) => left.first - right.first || left.second - right.second);
228
- const maximumFlipAttempts = resolved.maximumFlipAttempts ??
226
+ const maxFlipAttempts = resolved.maxFlipAttempts ??
229
227
  Math.min(DEFAULT_MAXIMUM_FLIP_ATTEMPTS, initialEdges.length * ATTEMPTS_PER_INITIAL_EDGE);
230
- if (maximumFlipAttempts === 0) {
228
+ if (maxFlipAttempts === 0) {
231
229
  return unchangedResult(mesh, before.report, skippedPatchCount, budgetExhausted);
232
230
  }
233
231
  const queue = initialEdges.map(({ key }) => key);
@@ -281,14 +279,14 @@ export function optimizePlanarPatches(mesh, options = {}) {
281
279
  }
282
280
  const sorted = [...candidates.values()].sort((left, right) => left.first - right.first || left.second - right.second);
283
281
  for (const { key } of sorted) {
284
- if (queued.has(key) || (revisitCounts.get(key) ?? 0) >= resolved.maximumEdgeRevisits) {
282
+ if (queued.has(key) || (revisitCounts.get(key) ?? 0) >= resolved.maxEdgeRevisits) {
285
283
  continue;
286
284
  }
287
285
  queued.add(key);
288
286
  queue.push(key);
289
287
  }
290
288
  };
291
- while (queueOffset < queue.length && attemptCount < maximumFlipAttempts) {
289
+ while (queueOffset < queue.length && attemptCount < maxFlipAttempts) {
292
290
  const key = queue[queueOffset++];
293
291
  queued.delete(key);
294
292
  const revisits = (revisitCounts.get(key) ?? 0) + 1;
@@ -39,7 +39,7 @@ const positiveInteger = (value, label) => {
39
39
  }
40
40
  return value;
41
41
  };
42
- const structurallyValidateMesh = (mesh, maximumTriangleCount) => {
42
+ const structurallyValidateMesh = (mesh, maxTriangles) => {
43
43
  if (!(mesh.positions instanceof Float32Array) || !(mesh.indices instanceof Uint32Array)) {
44
44
  throw new GeometryError("INVALID_MESH", "Triangle meshes require Float32Array positions and Uint32Array indices.");
45
45
  }
@@ -50,8 +50,8 @@ const structurallyValidateMesh = (mesh, maximumTriangleCount) => {
50
50
  throw new GeometryError("INVALID_MESH", "Mesh indices must contain complete triangles.");
51
51
  }
52
52
  const triangleCount = mesh.indices.length / 3;
53
- if (triangleCount > maximumTriangleCount) {
54
- throw new GeometryError("COMPLEXITY_LIMIT", `Mesh quality analysis is limited to ${maximumTriangleCount} triangles.`);
53
+ if (triangleCount > maxTriangles) {
54
+ throw new GeometryError("COMPLEXITY_LIMIT", `Mesh quality analysis is limited to ${maxTriangles} triangles.`);
55
55
  }
56
56
  for (let index = 0; index < mesh.positions.length; index += 1) {
57
57
  if (!Number.isFinite(mesh.positions[index])) {
@@ -236,8 +236,8 @@ const buildPatchAnalysis = (faces, edges, faceIndices, id) => {
236
236
  /** @internal */
237
237
  export function buildTriangleMeshQualityAnalysis(mesh, options = {}) {
238
238
  const source = { positions: mesh.positions, indices: mesh.indices };
239
- const maximumTriangleCount = positiveInteger(options.maximumTriangleCount ?? DEFAULT_MAXIMUM_TRIANGLE_COUNT, "Maximum analyzed triangle count");
240
- structurallyValidateMesh(source, maximumTriangleCount);
239
+ const maxTriangles = positiveInteger(options.maxTriangles ?? DEFAULT_MAXIMUM_TRIANGLE_COUNT, "Maximum analyzed triangle count");
240
+ structurallyValidateMesh(source, maxTriangles);
241
241
  const { bounds, extent } = meshBoundsAndExtent(source.positions);
242
242
  const tolerance = resolveGeometryTolerance(extent, options.tolerance);
243
243
  const planarLinearTolerance = Math.max(tolerance.linear, Math.max(extent, 1) * FLOAT32_EPSILON * 8);
@@ -6,7 +6,7 @@ const DEFAULT_MAXIMUM_TRIANGLE_COUNT = 200_000;
6
6
  const validatePositiveTolerance = (value, name) => {
7
7
  if (!Number.isFinite(value) || value <= 0) {
8
8
  throw new GeometryError("INVALID_TOLERANCE", `${name} must be finite and greater than zero.`, {
9
- operation: "createTriangleMeshSignature",
9
+ operation: "computeTriangleMeshSignature",
10
10
  details: { [name]: value },
11
11
  });
12
12
  }
@@ -17,7 +17,7 @@ const quantizedInteger = (value, tolerance, name) => {
17
17
  const quantized = scaled < 0 ? -Math.round(-scaled) : Math.round(scaled);
18
18
  if (!Number.isSafeInteger(quantized)) {
19
19
  throw new GeometryError("INVALID_TOLERANCE", `${name} cannot be represented safely at the requested signature tolerance.`, {
20
- operation: "createTriangleMeshSignature",
20
+ operation: "computeTriangleMeshSignature",
21
21
  details: { tolerance, value },
22
22
  });
23
23
  }
@@ -70,23 +70,23 @@ const hashCanonicalKeys = (header, groups) => {
70
70
  * @returns Compact counts, bounds, volume, topology, tolerances, and canonical fingerprint.
71
71
  * @throws {@link GeometryError} When validation, topology, tolerance, or complexity checks fail.
72
72
  */
73
- export function createTriangleMeshSignature(mesh, options = {}) {
73
+ export function computeTriangleMeshSignature(mesh, options = {}) {
74
74
  const source = { positions: mesh.positions, indices: mesh.indices };
75
- const maximumTriangleCount = options.maximumTriangleCount ?? DEFAULT_MAXIMUM_TRIANGLE_COUNT;
76
- if (!Number.isSafeInteger(maximumTriangleCount) || maximumTriangleCount <= 0) {
77
- throw new GeometryError("INVALID_ARGUMENT", "maximumTriangleCount must be a positive safe integer.", {
78
- operation: "createTriangleMeshSignature",
79
- details: { maximumTriangleCount },
75
+ const maxTriangles = options.maxTriangles ?? DEFAULT_MAXIMUM_TRIANGLE_COUNT;
76
+ if (!Number.isSafeInteger(maxTriangles) || maxTriangles <= 0) {
77
+ throw new GeometryError("INVALID_ARGUMENT", "maxTriangles must be a positive safe integer.", {
78
+ operation: "computeTriangleMeshSignature",
79
+ details: { maxTriangles },
80
80
  });
81
81
  }
82
82
  if (!(source.positions instanceof Float32Array) || !(source.indices instanceof Uint32Array)) {
83
83
  validateTriangleMesh(source, { requireClosed: true });
84
84
  }
85
85
  const triangleCount = source.indices.length / 3;
86
- if (triangleCount > maximumTriangleCount) {
87
- throw new GeometryError("COMPLEXITY_LIMIT", `Mesh signature analysis is limited to ${maximumTriangleCount} triangles; received ${triangleCount}.`, {
88
- operation: "createTriangleMeshSignature",
89
- details: { maximumTriangleCount, triangleCount },
86
+ if (triangleCount > maxTriangles) {
87
+ throw new GeometryError("COMPLEXITY_LIMIT", `Mesh signature analysis is limited to ${maxTriangles} triangles; received ${triangleCount}.`, {
88
+ operation: "computeTriangleMeshSignature",
89
+ details: { maxTriangles, triangleCount },
90
90
  });
91
91
  }
92
92
  const positionTolerance = validatePositiveTolerance(options.positionTolerance ?? DEFAULT_POSITION_TOLERANCE, "positionTolerance");
@@ -98,7 +98,7 @@ export function createTriangleMeshSignature(mesh, options = {}) {
98
98
  const twiceGenus = connectedComponentCount * 2 - eulerCharacteristic;
99
99
  if (twiceGenus < 0 || twiceGenus % 2 !== 0) {
100
100
  throw new GeometryError("INVALID_TOPOLOGY", "Closed mesh topology does not describe orientable vertex-manifold components.", {
101
- operation: "createTriangleMeshSignature",
101
+ operation: "computeTriangleMeshSignature",
102
102
  details: { connectedComponentCount, edgeCount, eulerCharacteristic },
103
103
  });
104
104
  }