@metamesh/modeling 0.17.0 → 0.18.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 (871) hide show
  1. package/CHANGELOG.md +153 -0
  2. package/README.md +137 -163
  3. package/dist/api/engine.d.ts +128 -65
  4. package/dist/api/geometry.d.ts +246 -457
  5. package/dist/api/index.d.ts +394 -419
  6. package/dist/api/mesh.d.ts +460 -0
  7. package/dist/api/text.d.ts +1 -1
  8. package/dist/docs/guides/concepts.md +126 -86
  9. package/dist/docs/guides/fonts.md +11 -10
  10. package/dist/docs/guides/fundamentals.md +30 -29
  11. package/dist/docs/guides/generation.md +44 -31
  12. package/dist/docs/guides/hosting.md +122 -46
  13. package/dist/docs/guides/recipes.md +65 -54
  14. package/dist/docs/guides/standalone-model.md +8 -7
  15. package/dist/docs/manifest.json +2740 -902
  16. package/dist/docs/reference/engine/Export3mfOptions.md +19 -2
  17. package/dist/docs/reference/engine/ExportMeshPart.md +5 -39
  18. package/dist/docs/reference/engine/GenerationOptions.md +4 -3
  19. package/dist/docs/reference/engine/GeometryResource.md +13 -13
  20. package/dist/docs/reference/engine/ModelDependencies.md +1 -1
  21. package/dist/docs/reference/engine/ModelEngine.md +26 -23
  22. package/dist/docs/reference/engine/ModelEngineOptions.md +6 -1
  23. package/dist/docs/reference/engine/ModelPart.md +108 -0
  24. package/dist/docs/reference/engine/ModelResult.md +175 -0
  25. package/dist/docs/reference/engine/ModelRunArguments.md +28 -0
  26. package/dist/docs/reference/engine/ModelRunOptions.md +104 -0
  27. package/dist/docs/reference/engine/ModelSession.md +16 -16
  28. package/dist/docs/reference/engine/ModelingLimits.md +121 -0
  29. package/dist/docs/reference/engine/SessionOptions.md +13 -8
  30. package/dist/docs/reference/engine/categories/host-lifecycle.md +25 -15
  31. package/dist/docs/reference/engine/checkModel.md +43 -0
  32. package/dist/docs/reference/engine/createModelEngine.md +4 -13
  33. package/dist/docs/reference/engine/defaultModelingLimits.md +8 -1
  34. package/dist/docs/reference/engine/export3mf.md +55 -0
  35. package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
  36. package/dist/docs/reference/engine.md +8 -15
  37. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
  38. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +1 -1
  39. package/dist/docs/reference/geometry/Anchor3-type.md +1 -1
  40. package/dist/docs/reference/geometry/ArcCurve2.md +1 -1
  41. package/dist/docs/reference/geometry/ArcCurve3.md +1 -1
  42. package/dist/docs/reference/geometry/AttachOptions.md +1 -1
  43. package/dist/docs/reference/geometry/AxisAngleRotation3.md +1 -1
  44. package/dist/docs/reference/geometry/Bevel.md +18 -0
  45. package/dist/docs/reference/geometry/BevelSize.md +14 -0
  46. package/dist/docs/reference/geometry/Bounds2-type.md +1 -1
  47. package/dist/docs/reference/geometry/Bounds2Data.md +1 -1
  48. package/dist/docs/reference/geometry/Bounds2Input.md +1 -1
  49. package/dist/docs/reference/geometry/Bounds2Options.md +48 -8
  50. package/dist/docs/reference/geometry/Bounds3-type.md +1 -1
  51. package/dist/docs/reference/geometry/Bounds3Data.md +1 -1
  52. package/dist/docs/reference/geometry/Bounds3Input.md +1 -1
  53. package/dist/docs/reference/geometry/Bounds3Options.md +48 -8
  54. package/dist/docs/reference/geometry/BoundsFit2.md +1 -1
  55. package/dist/docs/reference/geometry/BoundsFit3.md +1 -1
  56. package/dist/docs/reference/geometry/BoundsFitOptions.md +1 -1
  57. package/dist/docs/reference/geometry/BoxAnchorFace.md +1 -1
  58. package/dist/docs/reference/geometry/BoxAnchorOptions.md +4 -4
  59. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  60. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  61. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  62. package/dist/docs/reference/geometry/BoxOptions.md +3 -3
  63. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +1 -1
  64. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +1 -1
  65. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  66. package/dist/docs/reference/geometry/CircleContourOptions.md +1 -1
  67. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -3
  68. package/dist/docs/reference/geometry/CircularResolutionOptions.md +1 -1
  69. package/dist/docs/reference/geometry/CircularSampling.md +1 -1
  70. package/dist/docs/reference/geometry/CircularSamplingOptions.md +1 -1
  71. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +1 -1
  72. package/dist/docs/reference/geometry/ClearanceHoleFit.md +1 -1
  73. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +1 -1
  74. package/dist/docs/reference/geometry/Contour.md +1 -1
  75. package/dist/docs/reference/geometry/ContourCurve.md +1 -1
  76. package/dist/docs/reference/geometry/ContourPoint.md +1 -1
  77. package/dist/docs/reference/geometry/ContourSegment.md +1 -1
  78. package/dist/docs/reference/geometry/CorrespondingComponent.md +1 -1
  79. package/dist/docs/reference/geometry/CorrespondingContour.md +1 -1
  80. package/dist/docs/reference/geometry/CorrespondingProfile.md +1 -1
  81. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +1 -1
  82. package/dist/docs/reference/geometry/CubicBezierCurve2.md +1 -1
  83. package/dist/docs/reference/geometry/CubicBezierCurve3.md +1 -1
  84. package/dist/docs/reference/geometry/Curve2.md +1 -1
  85. package/dist/docs/reference/geometry/Curve3.md +1 -1
  86. package/dist/docs/reference/geometry/CurveSamplingOptions.md +1 -1
  87. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +1 -1
  88. package/dist/docs/reference/geometry/CylinderAnchorFace.md +1 -1
  89. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +3 -3
  90. package/dist/docs/reference/geometry/CylinderOptions.md +1 -1
  91. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +1 -1
  92. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +1 -1
  93. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +1 -1
  94. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +1 -1
  95. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +1 -1
  96. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +1 -1
  97. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +1 -1
  98. package/dist/docs/reference/geometry/CylindricalGearSpec.md +1 -1
  99. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  100. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  101. package/dist/docs/reference/geometry/EllipseContourOptions.md +3 -3
  102. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  103. package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +130 -0
  104. package/dist/docs/reference/geometry/ExtrudeOptions.md +17 -9
  105. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +3 -3
  106. package/dist/docs/reference/geometry/FittedTextLayout.md +1 -1
  107. package/dist/docs/reference/geometry/Frame3.md +1 -1
  108. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  109. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  110. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  111. package/dist/docs/reference/geometry/GeometryResolution.md +1 -1
  112. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +1 -1
  113. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  114. package/dist/docs/reference/geometry/GridPatternOptions.md +1 -1
  115. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
  116. package/dist/docs/reference/geometry/HeightfieldOptions.md +3 -2
  117. package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
  118. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +1 -1
  119. package/dist/docs/reference/geometry/ImmutableBuffer-type.md +108 -0
  120. package/dist/docs/reference/geometry/ImmutableTriangleMesh.md +43 -0
  121. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +52 -83
  122. package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +1 -1
  123. package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +1 -1
  124. package/dist/docs/reference/geometry/KnuckleHingeInterval.md +1 -1
  125. package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +1 -1
  126. package/dist/docs/reference/geometry/KnuckleHingeSpec.md +1 -1
  127. package/dist/docs/reference/geometry/LineCurve2.md +1 -1
  128. package/dist/docs/reference/geometry/LineCurve3.md +1 -1
  129. package/dist/docs/reference/geometry/LinearPatternOptions.md +1 -1
  130. package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
  131. package/dist/docs/reference/geometry/LoftMeshStation.md +1 -1
  132. package/dist/docs/reference/geometry/LoftOptions.md +3 -3
  133. package/dist/docs/reference/geometry/LoftPlacement.md +1 -1
  134. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +1 -1
  135. package/dist/docs/reference/geometry/MatchProfilesOptions.md +1 -1
  136. package/dist/docs/reference/geometry/MetricFastenerSize.md +1 -1
  137. package/dist/docs/reference/geometry/MetricFastenerStandard.md +1 -1
  138. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +1 -1
  139. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +1 -1
  140. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  141. package/dist/docs/reference/geometry/NumericArray.md +14 -0
  142. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
  143. package/dist/docs/reference/geometry/Path2-type.md +1 -1
  144. package/dist/docs/reference/geometry/Path2Data.md +1 -1
  145. package/dist/docs/reference/geometry/Path2Input.md +1 -1
  146. package/dist/docs/reference/geometry/Path3-type.md +1 -1
  147. package/dist/docs/reference/geometry/Path3Data.md +1 -1
  148. package/dist/docs/reference/geometry/Path3Input.md +1 -1
  149. package/dist/docs/reference/geometry/PathFrame.md +1 -1
  150. package/dist/docs/reference/geometry/PathLocation.md +1 -1
  151. package/dist/docs/reference/geometry/PathNormalGuide.md +1 -1
  152. package/dist/docs/reference/geometry/PathOptions.md +1 -1
  153. package/dist/docs/reference/geometry/PathPatternOptions.md +1 -1
  154. package/dist/docs/reference/geometry/PathPlacement.md +1 -1
  155. package/dist/docs/reference/geometry/PathResamplingOptions.md +1 -1
  156. package/dist/docs/reference/geometry/Pivot2Options.md +1 -1
  157. package/dist/docs/reference/geometry/Pivot3Options.md +1 -1
  158. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +1 -1
  159. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +1 -1
  160. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +1 -1
  161. package/dist/docs/reference/geometry/PlanarPatchQuality.md +1 -1
  162. package/dist/docs/reference/geometry/PolygonData.md +1 -1
  163. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +1 -1
  164. package/dist/docs/reference/geometry/PrimitiveAttachment.md +1 -3
  165. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +1 -1
  166. package/dist/docs/reference/geometry/PrintableThreadFit.md +1 -1
  167. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +1 -1
  168. package/dist/docs/reference/geometry/Profile.md +1 -1
  169. package/dist/docs/reference/geometry/ProfileComponent2.md +1 -1
  170. package/dist/docs/reference/geometry/ProfileContour2.md +1 -1
  171. package/dist/docs/reference/geometry/ProfileSpan2.md +1 -1
  172. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +1 -1
  173. package/dist/docs/reference/geometry/RackPitchDimensions.md +1 -1
  174. package/dist/docs/reference/geometry/RackPitchSpec.md +1 -1
  175. package/dist/docs/reference/geometry/RadialPatternOptions.md +1 -1
  176. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  177. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  178. package/dist/docs/reference/geometry/RectangleContourOptions.md +3 -3
  179. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +1 -1
  180. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +1 -1
  181. package/dist/docs/reference/geometry/RectangleProfileOptions.md +3 -3
  182. package/dist/docs/reference/geometry/RegionData.md +1 -1
  183. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +1 -1
  184. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  185. package/dist/docs/reference/geometry/RevolveOptions.md +2 -2
  186. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  187. package/dist/docs/reference/geometry/RowLayoutOptions.md +1 -1
  188. package/dist/docs/reference/geometry/SampleContourOptions.md +1 -1
  189. package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
  190. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +1 -1
  191. package/dist/docs/reference/geometry/SampledCurve2.md +1 -1
  192. package/dist/docs/reference/geometry/SampledCurve3.md +1 -1
  193. package/dist/docs/reference/geometry/SampledThreadHelices.md +1 -1
  194. package/dist/docs/reference/geometry/SideProfileCurve.md +1 -1
  195. package/dist/docs/reference/geometry/SideProfilePoint.md +1 -1
  196. package/dist/docs/reference/geometry/SideProfileSegment.md +1 -1
  197. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  198. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +1 -1
  199. package/dist/docs/reference/geometry/SphereOptions.md +1 -1
  200. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
  201. package/dist/docs/reference/geometry/StarContourOptions.md +74 -0
  202. package/dist/docs/reference/geometry/StrokeCap.md +1 -1
  203. package/dist/docs/reference/geometry/StrokeJoin.md +1 -1
  204. package/dist/docs/reference/geometry/StrokeOptions.md +1 -1
  205. package/dist/docs/reference/geometry/SvgImportOptions.md +1 -1
  206. package/dist/docs/reference/geometry/SvgRegionPreflight.md +1 -1
  207. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +1 -1
  208. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +1 -1
  209. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +1 -1
  210. package/dist/docs/reference/geometry/SweepOptions.md +1 -1
  211. package/dist/docs/reference/geometry/SweepOrientation.md +1 -1
  212. package/dist/docs/reference/geometry/ThreadBevelOptions.md +7 -30
  213. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +1 -1
  214. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +1 -1
  215. package/dist/docs/reference/geometry/ThreadEndStyle.md +1 -1
  216. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +1 -1
  217. package/dist/docs/reference/geometry/ThreadHandedness.md +1 -1
  218. package/dist/docs/reference/geometry/ThreadHelixOptions.md +1 -1
  219. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
  220. package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
  221. package/dist/docs/reference/geometry/ThreadProfile-type.md +2 -2
  222. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
  223. package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
  224. package/dist/docs/reference/geometry/{HelicalThreadRidgeMeshOptions.md → ThreadRidgeOptions.md} +4 -4
  225. package/dist/docs/reference/geometry/ThreadRole.md +1 -1
  226. package/dist/docs/reference/geometry/{HelicalThreadSolidMeshOptions.md → ThreadSolidOptions.md} +18 -65
  227. package/dist/docs/reference/geometry/{HelicalThreadSolidMeshPreflight.md → ThreadSolidPreflight.md} +2 -2
  228. package/dist/docs/reference/geometry/ThreadedNutOptions.md +75 -86
  229. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +18 -6
  230. package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
  231. package/dist/docs/reference/geometry/ThreadedRodOptions.md +52 -83
  232. package/dist/docs/reference/geometry/TorusOptions.md +1 -1
  233. package/dist/docs/reference/geometry/Transform2-type.md +1 -1
  234. package/dist/docs/reference/geometry/Transform2Data.md +1 -1
  235. package/dist/docs/reference/geometry/Transform2Input.md +1 -1
  236. package/dist/docs/reference/geometry/Transform3-type.md +1 -1
  237. package/dist/docs/reference/geometry/Transform3Data.md +1 -1
  238. package/dist/docs/reference/geometry/Transform3Input.md +1 -1
  239. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +1 -1
  240. package/dist/docs/reference/geometry/TriangleMesh.md +3 -8
  241. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +10 -4
  242. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +2 -2
  243. package/dist/docs/reference/geometry/TriangleMeshInput.md +19 -0
  244. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
  245. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +1 -1
  246. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
  247. package/dist/docs/reference/geometry/TriangleMeshSignature.md +3 -3
  248. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +1 -1
  249. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
  250. package/dist/docs/reference/geometry/TriangleMeshTopologyAnalysis.md +131 -0
  251. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +1 -1
  252. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +1 -1
  253. package/dist/docs/reference/geometry/TubeOptions.md +10 -86
  254. package/dist/docs/reference/geometry/Vector2-type.md +1 -1
  255. package/dist/docs/reference/geometry/Vector2Data.md +1 -1
  256. package/dist/docs/reference/geometry/Vector2Input.md +1 -1
  257. package/dist/docs/reference/geometry/Vector3-type.md +1 -1
  258. package/dist/docs/reference/geometry/Vector3Data.md +1 -1
  259. package/dist/docs/reference/geometry/Vector3Input.md +1 -1
  260. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +1 -1
  261. package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
  262. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +3 -3
  263. package/dist/docs/reference/geometry/VectorTextMetrics.md +1 -1
  264. package/dist/docs/reference/geometry/VectorTextOptions.md +1 -1
  265. package/dist/docs/reference/geometry/add2.md +1 -1
  266. package/dist/docs/reference/geometry/add3.md +1 -1
  267. package/dist/docs/reference/geometry/anchor3.md +1 -1
  268. package/dist/docs/reference/geometry/anchorFrame3.md +1 -1
  269. package/dist/docs/reference/geometry/applyTransformDirection3.md +1 -1
  270. package/dist/docs/reference/geometry/applyTransformPoint3.md +1 -1
  271. package/dist/docs/reference/geometry/attachmentTransform3.md +1 -1
  272. package/dist/docs/reference/geometry/bounds2.md +4 -4
  273. package/dist/docs/reference/geometry/bounds3.md +4 -4
  274. package/dist/docs/reference/geometry/boundsCenter.md +1 -1
  275. package/dist/docs/reference/geometry/boundsSize.md +1 -1
  276. package/dist/docs/reference/geometry/boxAnchor3.md +3 -3
  277. package/dist/docs/reference/geometry/categories/bounds-layout.md +3 -3
  278. package/dist/docs/reference/geometry/categories/curves-paths.md +2 -2
  279. package/dist/docs/reference/geometry/categories/mechanical.md +8 -10
  280. package/dist/docs/reference/geometry/categories/meshes.md +19 -32
  281. package/dist/docs/reference/geometry/categories/pattern-placement.md +2 -2
  282. package/dist/docs/reference/geometry/categories/primitive-options.md +3 -3
  283. package/dist/docs/reference/geometry/categories/profiles-regions.md +5 -4
  284. package/dist/docs/reference/geometry/categories/resolution-errors.md +3 -3
  285. package/dist/docs/reference/geometry/categories/transforms-math.md +3 -2
  286. package/dist/docs/reference/geometry/categories/vector-import.md +3 -3
  287. package/dist/docs/reference/geometry/circleContour.md +1 -1
  288. package/dist/docs/reference/geometry/closeToAxis.md +1 -1
  289. package/dist/docs/reference/geometry/compensateThreadDiameters.md +1 -1
  290. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +1 -1
  291. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +1 -1
  292. package/dist/docs/reference/geometry/composeTransform3.md +1 -1
  293. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +1 -1
  294. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +1 -1
  295. package/dist/docs/reference/geometry/contourContainsPoint.md +1 -1
  296. package/dist/docs/reference/geometry/cross2.md +1 -1
  297. package/dist/docs/reference/geometry/cross3.md +1 -1
  298. package/dist/docs/reference/geometry/cylinderAnchor3.md +2 -2
  299. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +1 -1
  300. package/dist/docs/reference/geometry/distance2.md +1 -1
  301. package/dist/docs/reference/geometry/distance3.md +1 -1
  302. package/dist/docs/reference/geometry/distributeAlongPath.md +1 -1
  303. package/dist/docs/reference/geometry/dot2.md +1 -1
  304. package/dist/docs/reference/geometry/dot3.md +1 -1
  305. package/dist/docs/reference/geometry/ellipseContour.md +1 -1
  306. package/dist/docs/reference/geometry/eulerTransform3.md +1 -1
  307. package/dist/docs/reference/geometry/fitBounds.md +1 -1
  308. package/dist/docs/reference/geometry/fitTextLayout.md +1 -1
  309. package/dist/docs/reference/geometry/frameTransform3.md +1 -1
  310. package/dist/docs/reference/geometry/getMetricClearanceHoleDiameter.md +1 -1
  311. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
  312. package/dist/docs/reference/geometry/gridPatternTransforms.md +1 -1
  313. package/dist/docs/reference/geometry/immutableBuffer.md +49 -0
  314. package/dist/docs/reference/geometry/inverseTransform3.md +1 -1
  315. package/dist/docs/reference/geometry/isGeometryError.md +1 -1
  316. package/dist/docs/reference/geometry/layoutRow.md +1 -1
  317. package/dist/docs/reference/geometry/length2.md +1 -1
  318. package/dist/docs/reference/geometry/length3.md +1 -1
  319. package/dist/docs/reference/geometry/lerp2.md +1 -1
  320. package/dist/docs/reference/geometry/lerp3.md +1 -1
  321. package/dist/docs/reference/geometry/linearPatternTransforms.md +1 -1
  322. package/dist/docs/reference/geometry/matchProfiles.md +1 -1
  323. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +1 -1
  324. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +1 -1
  325. package/dist/docs/reference/geometry/normalize2.md +1 -1
  326. package/dist/docs/reference/geometry/normalize3.md +1 -1
  327. package/dist/docs/reference/geometry/normalizeContour.md +1 -1
  328. package/dist/docs/reference/geometry/normalizePolygon.md +1 -1
  329. package/dist/docs/reference/geometry/normalizeRegion.md +1 -1
  330. package/dist/docs/reference/geometry/path2.md +1 -1
  331. package/dist/docs/reference/geometry/path3.md +1 -1
  332. package/dist/docs/reference/geometry/pathPatternTransforms.md +1 -1
  333. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +18 -25
  334. package/dist/docs/reference/geometry/preflightSvgRegion.md +1 -1
  335. package/dist/docs/reference/geometry/preflightThreadedNut.md +24 -26
  336. package/dist/docs/reference/geometry/preflightThreadedRod.md +18 -25
  337. package/dist/docs/reference/geometry/projectOntoPlane3.md +1 -1
  338. package/dist/docs/reference/geometry/radialPatternTransforms.md +1 -1
  339. package/dist/docs/reference/geometry/rectangleContour.md +10 -5
  340. package/dist/docs/reference/geometry/rectangleProfile.md +2 -2
  341. package/dist/docs/reference/geometry/regionArea.md +1 -1
  342. package/dist/docs/reference/geometry/regionBounds.md +1 -1
  343. package/dist/docs/reference/geometry/regularPolygonContour.md +2 -2
  344. package/dist/docs/reference/geometry/resamplePolyline2.md +1 -1
  345. package/dist/docs/reference/geometry/resamplePolyline3.md +1 -1
  346. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +1 -1
  347. package/dist/docs/reference/geometry/resolveArcSegments.md +1 -1
  348. package/dist/docs/reference/geometry/resolveCircularSampling.md +1 -1
  349. package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
  350. package/dist/docs/reference/geometry/resolveCylindricalGear.md +1 -1
  351. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +1 -1
  352. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +1 -1
  353. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
  354. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  355. package/dist/docs/reference/geometry/resolveKnuckleHinge.md +1 -1
  356. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +1 -1
  357. package/dist/docs/reference/geometry/resolveRackPitch.md +1 -1
  358. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +1 -1
  359. package/dist/docs/reference/geometry/rotate2.md +1 -1
  360. package/dist/docs/reference/geometry/rotationTransform3.md +1 -1
  361. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +1 -1
  362. package/dist/docs/reference/geometry/sampleContour.md +1 -1
  363. package/dist/docs/reference/geometry/sampleCurve2.md +1 -1
  364. package/dist/docs/reference/geometry/sampleCurve3.md +1 -1
  365. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
  366. package/dist/docs/reference/geometry/sampleHelix.md +1 -1
  367. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
  368. package/dist/docs/reference/geometry/sampleRackToothPath.md +1 -1
  369. package/dist/docs/reference/geometry/sampleSideProfile.md +1 -1
  370. package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
  371. package/dist/docs/reference/geometry/sampleThreadHelices.md +1 -1
  372. package/dist/docs/reference/geometry/scale2.md +1 -1
  373. package/dist/docs/reference/geometry/scale3.md +1 -1
  374. package/dist/docs/reference/geometry/scaleTransform3.md +1 -1
  375. package/dist/docs/reference/geometry/signedContourArea.md +1 -1
  376. package/dist/docs/reference/geometry/starContour.md +17 -15
  377. package/dist/docs/reference/geometry/strokeRegionData.md +1 -1
  378. package/dist/docs/reference/geometry/subtract2.md +1 -1
  379. package/dist/docs/reference/geometry/subtract3.md +1 -1
  380. package/dist/docs/reference/geometry/threadProfile.md +1 -1
  381. package/dist/docs/reference/geometry/transform2.md +1 -1
  382. package/dist/docs/reference/geometry/transform3.md +1 -1
  383. package/dist/docs/reference/geometry/transformDeterminant3.md +1 -1
  384. package/dist/docs/reference/geometry/transformRegionData.md +1 -1
  385. package/dist/docs/reference/geometry/translationTransform3.md +1 -1
  386. package/dist/docs/reference/geometry/triangulateContour.md +1 -1
  387. package/dist/docs/reference/geometry/validateRigidTransform3.md +35 -0
  388. package/dist/docs/reference/geometry/validateTransform3.md +1 -1
  389. package/dist/docs/reference/geometry/vector2.md +1 -1
  390. package/dist/docs/reference/geometry/vector3.md +1 -1
  391. package/dist/docs/reference/geometry.md +9 -9
  392. package/dist/docs/reference/mesh/AcmeThreadProfileSpec.md +79 -0
  393. package/dist/docs/reference/mesh/Bevel.md +18 -0
  394. package/dist/docs/reference/mesh/BevelSize.md +14 -0
  395. package/dist/docs/reference/mesh/Bounds2.md +125 -0
  396. package/dist/docs/reference/mesh/Bounds2Data.md +43 -0
  397. package/dist/docs/reference/mesh/Bounds2Input.md +19 -0
  398. package/dist/docs/reference/mesh/Bounds3.md +125 -0
  399. package/dist/docs/reference/mesh/Bounds3Data.md +43 -0
  400. package/dist/docs/reference/mesh/Bounds3Input.md +19 -0
  401. package/dist/docs/reference/mesh/ButtressPressureFlankSide.md +14 -0
  402. package/dist/docs/reference/mesh/ButtressThreadProfileSpec.md +97 -0
  403. package/dist/docs/reference/mesh/CircularPrimitiveOptions.md +60 -0
  404. package/dist/docs/reference/mesh/CurveSamplingOptions.md +69 -0
  405. package/dist/docs/reference/mesh/CustomThreadProfileSpec.md +77 -0
  406. package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +129 -0
  407. package/dist/docs/reference/mesh/ExtrusionSamplingOptions.md +81 -0
  408. package/dist/docs/reference/mesh/Frame3.md +62 -0
  409. package/dist/docs/reference/mesh/GeometryResolution.md +74 -0
  410. package/dist/docs/reference/mesh/GeometrySamplingLimits.md +66 -0
  411. package/dist/docs/reference/mesh/GeometryToleranceOptions.md +46 -0
  412. package/dist/docs/reference/mesh/HeightfieldMeshLimits.md +18 -0
  413. package/dist/docs/reference/mesh/HeightfieldOptions.md +72 -0
  414. package/dist/docs/reference/mesh/HeightfieldPreflight.md +58 -0
  415. package/dist/docs/reference/mesh/ImmutableBuffer.md +108 -0
  416. package/dist/docs/reference/mesh/ImmutableTriangleMesh.md +43 -0
  417. package/dist/docs/reference/mesh/LoftCorrespondence.md +24 -0
  418. package/dist/docs/reference/mesh/LoftMeshStation.md +31 -0
  419. package/dist/docs/reference/mesh/LoftOptions.md +88 -0
  420. package/dist/docs/reference/mesh/LoftPlacement.md +70 -0
  421. package/dist/docs/reference/mesh/ModelingLimits.md +130 -0
  422. package/dist/docs/reference/mesh/NumericArray.md +14 -0
  423. package/dist/docs/reference/mesh/Path2.md +197 -0
  424. package/dist/docs/reference/mesh/Path2Data.md +50 -0
  425. package/dist/docs/reference/mesh/Path2Input.md +20 -0
  426. package/dist/docs/reference/mesh/Path3.md +197 -0
  427. package/dist/docs/reference/mesh/Path3Data.md +50 -0
  428. package/dist/docs/reference/mesh/Path3Input.md +20 -0
  429. package/dist/docs/reference/mesh/PathLocation.md +69 -0
  430. package/dist/docs/reference/mesh/PathNormalGuide.md +43 -0
  431. package/dist/docs/reference/mesh/PathResamplingOptions.md +84 -0
  432. package/dist/docs/reference/mesh/Pivot2Options.md +26 -0
  433. package/dist/docs/reference/mesh/Pivot3Options.md +26 -0
  434. package/dist/docs/reference/mesh/PlanarMeshOptimizationFallbackReason.md +14 -0
  435. package/dist/docs/reference/mesh/PlanarMeshOptimizationOptions.md +160 -0
  436. package/dist/docs/reference/mesh/PlanarMeshOptimizationResult.md +124 -0
  437. package/dist/docs/reference/mesh/PlanarPatchQuality.md +194 -0
  438. package/dist/docs/reference/mesh/RevolveOptions.md +91 -0
  439. package/dist/docs/reference/mesh/SolidMeshValidationOptions.md +38 -0
  440. package/dist/docs/reference/mesh/SquareThreadProfileSpec.md +79 -0
  441. package/dist/docs/reference/mesh/SweepOptions.md +113 -0
  442. package/dist/docs/reference/mesh/SweepOrientation.md +113 -0
  443. package/dist/docs/reference/mesh/ThreadEndStyle.md +14 -0
  444. package/dist/docs/reference/mesh/ThreadEndTreatmentOptions.md +117 -0
  445. package/dist/docs/reference/mesh/ThreadHandedness.md +14 -0
  446. package/dist/docs/reference/mesh/ThreadLeadInEnvelope.md +14 -0
  447. package/dist/docs/reference/mesh/ThreadLeadInShape.md +14 -0
  448. package/dist/docs/reference/mesh/ThreadProfile.md +86 -0
  449. package/dist/docs/reference/mesh/ThreadProfileBaseSpec.md +53 -0
  450. package/dist/docs/reference/mesh/ThreadProfileSpec.md +23 -0
  451. package/dist/docs/reference/{model/HelicalThreadRidgeMeshOptions.md → mesh/ThreadRidgeOptions.md} +14 -10
  452. package/dist/docs/reference/mesh/ThreadSolidOptions.md +222 -0
  453. package/dist/docs/reference/mesh/ThreadSolidPreflight.md +58 -0
  454. package/dist/docs/reference/mesh/Transform2.md +256 -0
  455. package/dist/docs/reference/mesh/Transform2Data.md +14 -0
  456. package/dist/docs/reference/mesh/Transform2Input.md +19 -0
  457. package/dist/docs/reference/mesh/Transform3.md +296 -0
  458. package/dist/docs/reference/mesh/Transform3Data.md +17 -0
  459. package/dist/docs/reference/mesh/Transform3Input.md +19 -0
  460. package/dist/docs/reference/mesh/TrapezoidalThreadProfileSpec.md +96 -0
  461. package/dist/docs/reference/mesh/TriangleMesh.md +34 -0
  462. package/dist/docs/reference/mesh/TriangleMeshAnalysis.md +129 -0
  463. package/dist/docs/reference/mesh/TriangleMeshAnalysisOptions.md +79 -0
  464. package/dist/docs/reference/mesh/TriangleMeshInput.md +19 -0
  465. package/dist/docs/reference/mesh/TriangleMeshMeasurements.md +79 -0
  466. package/dist/docs/reference/mesh/TriangleMeshQualityOptions.md +43 -0
  467. package/dist/docs/reference/mesh/TriangleMeshQualityReport.md +194 -0
  468. package/dist/docs/reference/mesh/TriangleMeshSignature.md +111 -0
  469. package/dist/docs/reference/mesh/TriangleMeshSignatureOptions.md +46 -0
  470. package/dist/docs/reference/mesh/TriangleMeshSignatureTolerances.md +34 -0
  471. package/dist/docs/reference/mesh/TriangleMeshTopologyAnalysis.md +131 -0
  472. package/dist/docs/reference/mesh/TriangleMeshValidationOptions.md +55 -0
  473. package/dist/docs/reference/mesh/TriangularThreadProfileSpec.md +95 -0
  474. package/dist/docs/reference/mesh/Vector2.md +270 -0
  475. package/dist/docs/reference/mesh/Vector2Data.md +14 -0
  476. package/dist/docs/reference/mesh/Vector2Input.md +19 -0
  477. package/dist/docs/reference/mesh/Vector3.md +282 -0
  478. package/dist/docs/reference/mesh/Vector3Data.md +14 -0
  479. package/dist/docs/reference/mesh/Vector3Input.md +19 -0
  480. package/dist/docs/reference/mesh/analyze.md +96 -0
  481. package/dist/docs/reference/{geometry/analyzeTriangleMeshQuality.md → mesh/analyzeQuality.md} +9 -9
  482. package/dist/docs/reference/mesh/bounds.md +39 -0
  483. package/dist/docs/reference/mesh/categories/operations.md +147 -0
  484. package/dist/docs/reference/{geometry/computeTriangleMeshCentroid.md → mesh/centroid.md} +7 -7
  485. package/dist/docs/reference/mesh/extrude.md +73 -0
  486. package/dist/docs/reference/{geometry/heightfieldMesh.md → mesh/heightfield.md} +7 -8
  487. package/dist/docs/reference/mesh/immutable.md +47 -0
  488. package/dist/docs/reference/{geometry/joinTriangleMeshes.md → mesh/join.md} +7 -6
  489. package/dist/docs/reference/{geometry/loftMesh.md → mesh/loft.md} +15 -15
  490. package/dist/docs/reference/mesh/optimizePlanarPatches.md +96 -0
  491. package/dist/docs/reference/{geometry → mesh}/preflightHeightfield.md +5 -6
  492. package/dist/docs/reference/mesh/preflightThreadSolid.md +90 -0
  493. package/dist/docs/reference/{geometry/reverseTriangleMesh.md → mesh/reverse.md} +6 -5
  494. package/dist/docs/reference/{geometry/revolveMesh.md → mesh/revolve.md} +13 -13
  495. package/dist/docs/reference/{geometry/computeTriangleMeshSignature.md → mesh/signature.md} +11 -11
  496. package/dist/docs/reference/mesh/sweep.md +86 -0
  497. package/dist/docs/reference/mesh/threadRidge.md +72 -0
  498. package/dist/docs/reference/mesh/threadSolid.md +90 -0
  499. package/dist/docs/reference/{geometry/transformTriangleMesh.md → mesh/transform.md} +7 -6
  500. package/dist/docs/reference/{geometry/validateTriangleMesh.md → mesh/validate.md} +17 -11
  501. package/dist/docs/reference/{geometry/validateSolidMesh.md → mesh/validateSolid.md} +15 -9
  502. package/dist/docs/reference/mesh.md +21 -0
  503. package/dist/docs/reference/model/AcmeThreadProfileSpec.md +80 -0
  504. package/dist/docs/reference/model/Anchor3.md +1 -1
  505. package/dist/docs/reference/model/AttachOptions.md +1 -1
  506. package/dist/docs/reference/model/Bevel.md +19 -0
  507. package/dist/docs/reference/model/{ThreadedNutBevel.md → BevelSize.md} +4 -4
  508. package/dist/docs/reference/model/Bounds2-type.md +1 -1
  509. package/dist/docs/reference/model/Bounds2Data.md +1 -1
  510. package/dist/docs/reference/model/Bounds2Input.md +1 -1
  511. package/dist/docs/reference/model/Bounds2Options.md +48 -8
  512. package/dist/docs/reference/model/Bounds3-type.md +1 -1
  513. package/dist/docs/reference/model/Bounds3Data.md +1 -1
  514. package/dist/docs/reference/model/Bounds3Input.md +1 -1
  515. package/dist/docs/reference/model/Bounds3Options.md +48 -8
  516. package/dist/docs/reference/model/BoxEdge.md +1 -1
  517. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  518. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  519. package/dist/docs/reference/model/BoxOptions.md +3 -3
  520. package/dist/docs/reference/model/ButtressPressureFlankSide.md +15 -0
  521. package/dist/docs/reference/model/ButtressThreadProfileSpec.md +98 -0
  522. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  523. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  524. package/dist/docs/reference/model/CircleOptions.md +1 -1
  525. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -3
  526. package/dist/docs/reference/model/Computed.md +7 -3
  527. package/dist/docs/reference/model/ComputedValue.md +1 -1
  528. package/dist/docs/reference/model/Contour.md +1 -1
  529. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  530. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  531. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  532. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  533. package/dist/docs/reference/model/CurveSamplingOptions.md +68 -0
  534. package/dist/docs/reference/model/CustomThreadProfileSpec.md +78 -0
  535. package/dist/docs/reference/model/CylinderOptions.md +1 -1
  536. package/dist/docs/reference/model/DiagnosticOptions.md +15 -1
  537. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  538. package/dist/docs/reference/model/EllipseContourOptions.md +3 -3
  539. package/dist/docs/reference/model/EllipseOptions.md +1 -1
  540. package/dist/docs/reference/model/EndTreatments.md +1 -1
  541. package/dist/docs/reference/model/ExtrudeMeshOptions.md +133 -0
  542. package/dist/docs/reference/model/ExtrudeOptions.md +17 -8
  543. package/dist/docs/reference/model/ExtrusionSamplingOptions.md +84 -0
  544. package/dist/docs/reference/model/Frame3.md +1 -1
  545. package/dist/docs/reference/model/GenerateCallback.md +5 -5
  546. package/dist/docs/reference/model/GenerateContext.md +15 -63
  547. package/dist/docs/reference/model/GenerationDiagnostic.md +13 -1
  548. package/dist/docs/reference/model/GenerationError.md +1 -1
  549. package/dist/docs/reference/model/GeometryError.md +102 -0
  550. package/dist/docs/reference/model/GeometryErrorCode.md +15 -0
  551. package/dist/docs/reference/model/GeometryErrorContext.md +35 -0
  552. package/dist/docs/reference/model/GeometryResolution.md +1 -1
  553. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  554. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  555. package/dist/docs/reference/model/GridPatternOptions.md +1 -1
  556. package/dist/docs/reference/model/HeightfieldOptions.md +3 -2
  557. package/dist/docs/reference/model/HoleCutterOptions.md +1 -1
  558. package/dist/docs/reference/model/HoleCutterOverrun.md +1 -1
  559. package/dist/docs/reference/model/HoleCutterRecess.md +1 -1
  560. package/dist/docs/reference/model/HullOptions.md +1 -1
  561. package/dist/docs/reference/model/ImmutableBuffer-type.md +27 -3
  562. package/dist/docs/reference/model/ImmutableTriangleMesh.md +8 -3
  563. package/dist/docs/reference/model/ImmutableValue.md +20 -0
  564. package/dist/docs/reference/model/ImplicitOptions.md +1 -1
  565. package/dist/docs/reference/model/InternalThreadCutterOptions.md +54 -84
  566. package/dist/docs/reference/model/KnuckleHinge-type.md +1 -1
  567. package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +1 -1
  568. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +1 -1
  569. package/dist/docs/reference/model/KnuckleHingeOptions.md +1 -1
  570. package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +1 -1
  571. package/dist/docs/reference/model/KnuckleHingeSpec.md +1 -1
  572. package/dist/docs/reference/model/KnuckleHingeWeb.md +1 -1
  573. package/dist/docs/reference/model/LinearPatternOptions.md +1 -1
  574. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  575. package/dist/docs/reference/model/LoftOptions.md +3 -3
  576. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  577. package/dist/docs/reference/model/LoftStation.md +1 -1
  578. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  579. package/dist/docs/reference/model/ModelProgram.md +2 -2
  580. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  581. package/dist/docs/reference/model/NumericArray.md +1 -1
  582. package/dist/docs/reference/model/{GeneratedPart.md → PartDeclaration.md} +8 -23
  583. package/dist/docs/reference/model/PartGeometry.md +2 -2
  584. package/dist/docs/reference/model/PartOptions.md +8 -19
  585. package/dist/docs/reference/model/Path2-type.md +1 -1
  586. package/dist/docs/reference/model/Path2Data.md +1 -1
  587. package/dist/docs/reference/model/Path2Input.md +1 -1
  588. package/dist/docs/reference/model/Path3-type.md +1 -1
  589. package/dist/docs/reference/model/Path3Data.md +1 -1
  590. package/dist/docs/reference/model/Path3Input.md +1 -1
  591. package/dist/docs/reference/model/PathLocation.md +1 -1
  592. package/dist/docs/reference/model/PathNormalGuide.md +1 -1
  593. package/dist/docs/reference/model/PathOptions.md +1 -1
  594. package/dist/docs/reference/model/PathPatternOptions.md +1 -1
  595. package/dist/docs/reference/model/PathResamplingOptions.md +7 -6
  596. package/dist/docs/reference/model/PatternSource.md +1 -1
  597. package/dist/docs/reference/model/Pivot2Options.md +1 -1
  598. package/dist/docs/reference/model/Pivot3Options.md +1 -1
  599. package/dist/docs/reference/model/PlaneOptions.md +1 -1
  600. package/dist/docs/reference/model/PolygonData.md +1 -1
  601. package/dist/docs/reference/model/PolygonOptions.md +1 -1
  602. package/dist/docs/reference/model/PrimitiveAttachment.md +1 -3
  603. package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +1 -1
  604. package/dist/docs/reference/model/PrintableThreadFit.md +1 -1
  605. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +1 -1
  606. package/dist/docs/reference/model/Profile.md +1 -1
  607. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  608. package/dist/docs/reference/model/ProfileContour2.md +1 -1
  609. package/dist/docs/reference/model/ProfileSpan2.md +1 -1
  610. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +1 -1
  611. package/dist/docs/reference/model/RadialPatternOptions.md +1 -1
  612. package/dist/docs/reference/model/RadialSizing.md +1 -1
  613. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  614. package/dist/docs/reference/model/RectangleContourOptions.md +3 -3
  615. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  616. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  617. package/dist/docs/reference/model/RectangleOptions.md +3 -3
  618. package/dist/docs/reference/model/RegionData.md +1 -1
  619. package/dist/docs/reference/model/RegularPolygonOptions.md +1 -1
  620. package/dist/docs/reference/model/RevolveOptions.md +2 -2
  621. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  622. package/dist/docs/reference/model/Section.md +131 -6
  623. package/dist/docs/reference/model/SectionHullOptions.md +1 -1
  624. package/dist/docs/reference/model/SectionInspection.md +5 -17
  625. package/dist/docs/reference/model/SectionOffsetJoin.md +1 -1
  626. package/dist/docs/reference/model/SectionOffsetOptions.md +1 -1
  627. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  628. package/dist/docs/reference/model/Solid.md +245 -8
  629. package/dist/docs/reference/model/SolidInspection.md +5 -17
  630. package/dist/docs/reference/model/SolidSegmentHit.md +5 -1
  631. package/dist/docs/reference/model/SphereOptions.md +1 -1
  632. package/dist/docs/reference/model/SquareThreadProfileSpec.md +80 -0
  633. package/dist/docs/reference/model/StarContourOptions.md +81 -0
  634. package/dist/docs/reference/model/StarOptions.md +38 -16
  635. package/dist/docs/reference/model/StrokeCap.md +1 -1
  636. package/dist/docs/reference/model/StrokeJoin.md +1 -1
  637. package/dist/docs/reference/model/StrokeOptions.md +1 -1
  638. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  639. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  640. package/dist/docs/reference/model/SvgSectionOptions.md +1 -1
  641. package/dist/docs/reference/model/SweepOptions.md +1 -1
  642. package/dist/docs/reference/model/SweepOrientation.md +1 -1
  643. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  644. package/dist/docs/reference/model/ThreadBevelOptions.md +35 -0
  645. package/dist/docs/reference/model/ThreadEndStyle.md +1 -1
  646. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +1 -1
  647. package/dist/docs/reference/model/ThreadHandedness.md +1 -1
  648. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +1 -1
  649. package/dist/docs/reference/model/ThreadLeadInShape.md +1 -1
  650. package/dist/docs/reference/model/ThreadProfile.md +2 -2
  651. package/dist/docs/reference/model/ThreadProfileBaseSpec.md +54 -0
  652. package/dist/docs/reference/model/ThreadProfileSpec.md +24 -0
  653. package/dist/docs/reference/model/ThreadRidgeOptions.md +126 -4
  654. package/dist/docs/reference/model/{HelicalThreadSolidMeshPreflight.md → ThreadSolidPreflight.md} +2 -2
  655. package/dist/docs/reference/model/ThreadedNutOptions.md +75 -86
  656. package/dist/docs/reference/model/ThreadedNutPreflight.md +18 -6
  657. package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
  658. package/dist/docs/reference/model/ThreadedRodOptions.md +54 -84
  659. package/dist/docs/reference/model/TorusOptions.md +1 -1
  660. package/dist/docs/reference/model/Transform2-type.md +1 -1
  661. package/dist/docs/reference/model/Transform2Data.md +1 -1
  662. package/dist/docs/reference/model/Transform2Input.md +1 -1
  663. package/dist/docs/reference/model/Transform3-type.md +1 -1
  664. package/dist/docs/reference/model/Transform3Data.md +1 -1
  665. package/dist/docs/reference/model/Transform3Input.md +1 -1
  666. package/dist/docs/reference/model/TrapezoidalThreadProfileSpec.md +97 -0
  667. package/dist/docs/reference/model/TriangleMesh.md +3 -11
  668. package/dist/docs/reference/model/TriangleMeshAnalysis.md +10 -4
  669. package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
  670. package/dist/docs/reference/model/TriangleMeshTopologyAnalysis.md +131 -0
  671. package/dist/docs/reference/model/TriangularThreadProfileSpec.md +96 -0
  672. package/dist/docs/reference/model/TubeOptions.md +10 -86
  673. package/dist/docs/reference/model/Vector2-type.md +1 -1
  674. package/dist/docs/reference/model/Vector2Data.md +1 -1
  675. package/dist/docs/reference/model/Vector2Input.md +1 -1
  676. package/dist/docs/reference/model/Vector3-type.md +1 -1
  677. package/dist/docs/reference/model/Vector3Data.md +1 -1
  678. package/dist/docs/reference/model/Vector3Input.md +1 -1
  679. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  680. package/dist/docs/reference/model/VectorTextMetrics.md +1 -1
  681. package/dist/docs/reference/model/bounds2.md +4 -4
  682. package/dist/docs/reference/model/bounds3.md +4 -4
  683. package/dist/docs/reference/model/box.md +2 -2
  684. package/dist/docs/reference/model/categories/boolean-operations.md +6 -10
  685. package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -1
  686. package/dist/docs/reference/model/categories/bounds.md +2 -2
  687. package/dist/docs/reference/model/categories/contracts.md +3 -5
  688. package/dist/docs/reference/model/categories/core-values-errors.md +17 -3
  689. package/dist/docs/reference/model/categories/explicit-profiles.md +1 -1
  690. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +10 -8
  691. package/dist/docs/reference/model/categories/generation.md +8 -8
  692. package/dist/docs/reference/model/categories/hinges.md +1 -1
  693. package/dist/docs/reference/model/categories/mesh-inspection.md +15 -6
  694. package/dist/docs/reference/model/categories/paths.md +4 -3
  695. package/dist/docs/reference/model/categories/primitives.md +5 -5
  696. package/dist/docs/reference/model/categories/resolution.md +1 -1
  697. package/dist/docs/reference/model/categories/sections.md +4 -3
  698. package/dist/docs/reference/model/categories/threads.md +16 -6
  699. package/dist/docs/reference/model/categories/transforms-placement.md +2 -3
  700. package/dist/docs/reference/model/circle.md +1 -1
  701. package/dist/docs/reference/model/cylinder.md +1 -1
  702. package/dist/docs/reference/model/ellipse.md +1 -1
  703. package/dist/docs/reference/model/extrude.md +5 -4
  704. package/dist/docs/reference/model/generate.md +4 -4
  705. package/dist/docs/reference/model/gridPattern.md +1 -1
  706. package/dist/docs/reference/model/heightfield.md +1 -1
  707. package/dist/docs/reference/model/holeCutter.md +12 -2
  708. package/dist/docs/reference/model/hull.md +1 -1
  709. package/dist/docs/reference/model/immutableBuffer.md +5 -4
  710. package/dist/docs/reference/model/implicit.md +1 -1
  711. package/dist/docs/reference/model/internalThreadCutter.md +12 -20
  712. package/dist/docs/reference/model/intersect.md +3 -3
  713. package/dist/docs/reference/model/isGeometryError.md +34 -0
  714. package/dist/docs/reference/model/knuckleHinge.md +2 -2
  715. package/dist/docs/reference/model/linearPattern.md +1 -1
  716. package/dist/docs/reference/model/loft.md +6 -5
  717. package/dist/docs/reference/model/matchProfiles.md +1 -1
  718. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  719. package/dist/docs/reference/model/path2.md +1 -1
  720. package/dist/docs/reference/model/path3.md +1 -1
  721. package/dist/docs/reference/model/pathPattern.md +1 -1
  722. package/dist/docs/reference/model/polygon.md +1 -1
  723. package/dist/docs/reference/model/preflightInternalThreadCutter.md +15 -23
  724. package/dist/docs/reference/model/preflightThreadedNut.md +22 -25
  725. package/dist/docs/reference/model/preflightThreadedRod.md +15 -23
  726. package/dist/docs/reference/model/radialPattern.md +1 -1
  727. package/dist/docs/reference/model/rectangle.md +2 -2
  728. package/dist/docs/reference/model/regularPolygon.md +1 -1
  729. package/dist/docs/reference/model/revolve.md +6 -5
  730. package/dist/docs/reference/model/solidFromMesh.md +7 -6
  731. package/dist/docs/reference/model/sphere.md +1 -1
  732. package/dist/docs/reference/model/star.md +7 -7
  733. package/dist/docs/reference/model/stroke.md +1 -1
  734. package/dist/docs/reference/model/svgPathSection.md +1 -1
  735. package/dist/docs/reference/model/svgSection.md +1 -1
  736. package/dist/docs/reference/model/sweep.md +5 -4
  737. package/dist/docs/reference/model/textSection.md +1 -1
  738. package/dist/docs/reference/model/threadRidge.md +14 -14
  739. package/dist/docs/reference/model/threadedNut.md +22 -25
  740. package/dist/docs/reference/model/threadedRod.md +12 -20
  741. package/dist/docs/reference/model/torus.md +1 -1
  742. package/dist/docs/reference/model/transform2.md +1 -1
  743. package/dist/docs/reference/model/transform3.md +1 -1
  744. package/dist/docs/reference/model/tube.md +1 -36
  745. package/dist/docs/reference/model/union.md +3 -3
  746. package/dist/docs/reference/model/vector2.md +1 -1
  747. package/dist/docs/reference/model/vector3.md +1 -1
  748. package/dist/docs/reference/model.md +15 -19
  749. package/dist/docs/reference/text/Bounds2Data.md +1 -1
  750. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +2 -2
  751. package/dist/docs/reference/text/Vector2Data.md +1 -1
  752. package/dist/docs/reference/text/VectorFont.md +7 -7
  753. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  754. package/dist/docs/reference/text/VectorTextArcBaseline.md +1 -1
  755. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  756. package/dist/docs/reference/text/VectorTextLayoutOptions.md +3 -3
  757. package/dist/docs/reference/text/VectorTextMetrics.md +1 -1
  758. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  759. package/dist/docs/reference/text/categories/font-preparation.md +3 -3
  760. package/dist/docs/reference/text/prepareVectorFont.md +1 -1
  761. package/dist/docs/reference/text.md +4 -4
  762. package/dist/engine/execution.js +10 -6
  763. package/dist/engine/export-3mf.js +22 -115
  764. package/dist/engine/finalization.js +10 -10
  765. package/dist/engine/index.js +25 -31
  766. package/dist/engine/model-parts.js +8 -0
  767. package/dist/engine/model-summary.js +5 -5
  768. package/dist/engine/native/index.js +1 -1
  769. package/dist/engine/native/material-components.js +3 -3
  770. package/dist/engine/native/operations.js +0 -7
  771. package/dist/engine/native/scoped-primitives.js +5 -4
  772. package/dist/engine/native/threads.js +14 -14
  773. package/dist/engine/{construction-operations.js → operations/construction.js} +25 -23
  774. package/dist/engine/{modeling-context.js → operations/context.js} +10 -10
  775. package/dist/engine/{operation-environment.js → operations/environment.js} +2 -2
  776. package/dist/engine/{extrusion-finishing.js → operations/extrusion-finishing.js} +7 -7
  777. package/dist/engine/{hole-cutter-operation.js → operations/hole-cutter.js} +3 -3
  778. package/dist/engine/{inspection-operations.js → operations/inspection.js} +6 -6
  779. package/dist/engine/{knuckle-hinge-operation.js → operations/knuckle-hinge.js} +4 -4
  780. package/dist/engine/{loft-operations.js → operations/loft.js} +13 -12
  781. package/dist/engine/{mechanical-operations.js → operations/mechanical.js} +2 -2
  782. package/dist/engine/{pattern-operations.js → operations/patterns.js} +4 -4
  783. package/dist/engine/{primitive-anchors.js → operations/primitives/anchors.js} +9 -4
  784. package/dist/engine/{primitive-operations.js → operations/primitives/construction.js} +18 -19
  785. package/dist/engine/{primitive-correspondence.js → operations/primitives/correspondence.js} +4 -4
  786. package/dist/engine/{profile-mesh.js → operations/primitives/profile-mesh.js} +12 -12
  787. package/dist/engine/{primitive-profiles.js → operations/primitives/profiles.js} +7 -7
  788. package/dist/engine/{section-operations.js → operations/sections.js} +8 -8
  789. package/dist/engine/{transform-operations.js → operations/transforms.js} +8 -8
  790. package/dist/engine/placement.js +3 -4
  791. package/dist/engine/recipe-realization.js +1 -1
  792. package/dist/engine/serialize-3mf.js +116 -0
  793. package/dist/engine/{deferred-context.js → session/deferred-context.js} +4 -4
  794. package/dist/engine/{model-dependencies.js → session/dependencies.js} +1 -1
  795. package/dist/engine/{session-graph.js → session/graph.js} +13 -11
  796. package/dist/engine/{session-native.js → session/native-cache.js} +1 -1
  797. package/dist/engine/{session.js → session/session.js} +16 -10
  798. package/dist/engine/{session-snapshot.js → session/snapshot-cache.js} +29 -59
  799. package/dist/geometry/anchors.js +4 -11
  800. package/dist/geometry/bounds-value.js +20 -10
  801. package/dist/geometry/heightfield.js +10 -12
  802. package/dist/{model → geometry}/immutable-buffer.js +28 -7
  803. package/dist/geometry/index.js +16 -22
  804. package/dist/geometry/loft/loft.js +11 -6
  805. package/dist/geometry/mechanical/index.js +5 -5
  806. package/dist/geometry/mechanical/threads/bevel.js +24 -0
  807. package/dist/geometry/mechanical/{threads.js → threads/fit.js} +4 -4
  808. package/dist/geometry/mechanical/{thread-helices.js → threads/helices.js} +3 -3
  809. package/dist/geometry/mechanical/{thread-mesh-plan.js → threads/mesh-plan.js} +38 -53
  810. package/dist/geometry/mechanical/{thread-mesh.js → threads/mesh.js} +9 -9
  811. package/dist/geometry/mechanical/{thread-profiles.js → threads/profiles.js} +3 -3
  812. package/dist/geometry/mechanical/{thread-solids.js → threads/solids.js} +58 -89
  813. package/dist/geometry/mechanical/{thread-surface.js → threads/surface.js} +7 -8
  814. package/dist/geometry/mesh/mesh-centroid.js +3 -2
  815. package/dist/geometry/mesh/mesh-planar.js +27 -8
  816. package/dist/geometry/mesh/mesh-quality.js +2 -1
  817. package/dist/geometry/mesh/mesh-signature.js +7 -6
  818. package/dist/geometry/mesh/mesh-solid.js +2 -3
  819. package/dist/geometry/mesh/mesh-types.js +1 -0
  820. package/dist/geometry/mesh/mesh.js +13 -22
  821. package/dist/geometry/mesh-api.js +14 -0
  822. package/dist/geometry/primitive-resolvers.js +42 -14
  823. package/dist/geometry/profiles/primitives/circle.js +19 -0
  824. package/dist/geometry/profiles/{shapes.js → primitives/ellipse.js} +6 -10
  825. package/dist/geometry/profiles/{rectangle.js → primitives/rectangle.js} +14 -12
  826. package/dist/geometry/profiles/primitives/regular-polygon.js +33 -0
  827. package/dist/geometry/profiles/primitives/star.js +28 -0
  828. package/dist/geometry/revolve/revolve-mesh.js +1 -1
  829. package/dist/geometry/{svg-import.js → svg/import.js} +10 -10
  830. package/dist/geometry/sweeps/sweep-mesh.js +1 -1
  831. package/dist/geometry/transform3.js +29 -0
  832. package/dist/index.js +2 -1
  833. package/dist/model/diagnostic-path.js +26 -0
  834. package/dist/model/execution-binding.js +3 -3
  835. package/dist/model/generation.js +8 -2
  836. package/dist/model/geometry-recipes.js +1 -1
  837. package/dist/model/immutable-generation-data.js +33 -2
  838. package/dist/model/operations.js +14 -144
  839. package/dist/model/recipe-declaration.js +6 -2
  840. package/dist/model/shape-handles.js +30 -7
  841. package/dist/text/index.js +1 -1
  842. package/package.json +21 -11
  843. package/dist/docs/reference/engine/ModelSnapshot.md +0 -184
  844. package/dist/docs/reference/engine/SnapshotPart.md +0 -133
  845. package/dist/docs/reference/engine/validateModel.md +0 -48
  846. package/dist/docs/reference/geometry/ThreadedNutBevel.md +0 -14
  847. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +0 -61
  848. package/dist/docs/reference/geometry/extrudeMesh.md +0 -77
  849. package/dist/docs/reference/geometry/helicalThreadRidgeMesh.md +0 -72
  850. package/dist/docs/reference/geometry/helicalThreadSolidMesh.md +0 -106
  851. package/dist/docs/reference/geometry/meshBounds.md +0 -39
  852. package/dist/docs/reference/geometry/optimizePlanarPatches.md +0 -95
  853. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +0 -105
  854. package/dist/docs/reference/geometry/sweepMesh.md +0 -86
  855. package/dist/docs/reference/model/FinalizedModel.md +0 -131
  856. package/dist/docs/reference/model/FinalizedPart.md +0 -87
  857. package/dist/docs/reference/model/anchor.md +0 -47
  858. package/dist/docs/reference/model/castSegment.md +0 -40
  859. package/dist/docs/reference/model/categories/inspection.md +0 -29
  860. package/dist/docs/reference/model/components.md +0 -71
  861. package/dist/docs/reference/model/compose.md +0 -31
  862. package/dist/docs/reference/model/distance.md +0 -45
  863. package/dist/docs/reference/model/immutableMesh.md +0 -44
  864. package/dist/docs/reference/model/inspectSection.md +0 -38
  865. package/dist/docs/reference/model/inspectSolid.md +0 -38
  866. package/dist/docs/reference/model/isEmpty.md +0 -39
  867. package/dist/docs/reference/model/split.md +0 -54
  868. package/dist/docs/reference/model/splitByPlane.md +0 -66
  869. package/dist/geometry/profiles/profiles.js +0 -71
  870. /package/dist/engine/{primitive-profile-types.js → operations/primitives/profile-types.js} +0 -0
  871. /package/dist/geometry/profiles/{matched.js → match-profiles.js} +0 -0
@@ -1,9 +1,10 @@
1
1
  /** Thread input resolution, end/bevel boundaries, and allocation preflight. */
2
- import { GeometryError } from "../errors.js";
3
- import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "../model-limits.js";
4
- import { resolveCircularSegments, resolveGeometryResolution, } from "../resolution.js";
5
- import { resolveGeometryTolerance } from "../tolerance.js";
6
- import { assertFiniteThreadNumber, createThreadRidgeSection, freezeThreadProfilePoints, MAX_THREAD_PROFILE_POINTS, } from "./thread-profiles.js";
2
+ import { GeometryError } from "../../errors.js";
3
+ import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "../../model-limits.js";
4
+ import { resolveCircularSegments, resolveGeometryResolution, } from "../../resolution.js";
5
+ import { resolveGeometryTolerance } from "../../tolerance.js";
6
+ import { resolveBevel } from "./bevel.js";
7
+ import { assertFiniteThreadNumber, createThreadRidgeSection, freezeThreadProfilePoints, MAX_THREAD_PROFILE_POINTS, } from "./profiles.js";
7
8
  const validateMeshingProfile = (profile, linearTolerance, operation) => {
8
9
  const pitch = assertFiniteThreadNumber(profile.pitch, "profile.pitch", operation);
9
10
  const depth = assertFiniteThreadNumber(profile.depth, "profile.depth", operation);
@@ -74,7 +75,7 @@ const reindexThreadSectionForMajorEnvelope = (section, pitch, linearTolerance, o
74
75
  return Object.freeze({ phaseOffset: cutPoint + pitch / 2, section: reindexed });
75
76
  };
76
77
  /** @internal Resolves shared ridge and solid sampling before construction. */
77
- export const resolveHelicalThreadMeshOptions = (options, operation, circularSamplingRadius) => {
78
+ export const resolveHelicalThreadMeshOptions = (options, operation, circularSamplingRadius, reservations = [0, 0]) => {
78
79
  const diameter = assertFiniteThreadNumber(options.majorDiameter, "majorDiameter", operation);
79
80
  const length = assertFiniteThreadNumber(options.length, "length", operation);
80
81
  assertFiniteThreadNumber(options.profile.pitch, "profile.pitch", operation);
@@ -103,8 +104,8 @@ export const resolveHelicalThreadMeshOptions = (options, operation, circularSamp
103
104
  operation,
104
105
  });
105
106
  }
106
- const bottomBoundary = bottom === "standard" ? 0 : endLength;
107
- const topBoundary = top === "standard" ? length : length - endLength;
107
+ const bottomBoundary = bottom === "standard" ? 0 : Math.max(endLength, reservations[0]);
108
+ const topBoundary = top === "standard" ? length : length - Math.max(endLength, reservations[1]);
108
109
  const usable = topBoundary - bottomBoundary;
109
110
  if (!(diameter - 2 * options.profile.depth > tolerance.linear)) {
110
111
  throw new GeometryError("INVALID_ARGUMENT", "A positive minor diameter is required.", {
@@ -185,6 +186,7 @@ export const resolveHelicalThreadMeshOptions = (options, operation, circularSamp
185
186
  });
186
187
  }
187
188
  return {
189
+ bevel: [0, 0],
188
190
  bottom,
189
191
  bottomBoundary,
190
192
  bottomLeadFullCenter,
@@ -215,19 +217,14 @@ export const resolveHelicalThreadMeshOptions = (options, operation, circularSamp
215
217
  };
216
218
  /** @internal Resolves the active radial bevel boundary at one axial station. */
217
219
  export const threadSurfaceBevelBoundaryAt = (axial, profile, resolved, options) => {
218
- const bottomBevelSize = Math.min(options.bevelBottomSize ?? options.bevelSize ?? profile.depth, resolved.length / 2);
219
- const topBevelSize = Math.min(options.bevelTopSize ?? options.bevelSize ?? profile.depth, resolved.length / 2);
220
+ const [bottomBevelSize, topBevelSize] = resolved.bevel;
220
221
  const bevelOffset = options.bevelOffset ?? 0;
221
222
  const bottomFace = bevelOffset;
222
223
  const topFace = resolved.length - bevelOffset;
223
224
  // Include the zero-depth stations here so callers can solve the exact point where a linear
224
225
  // thread flank first meets the bevel. Applying the boundary at zero depth remains a no-op.
225
- const bottomApplies = options.bevelBottom === true &&
226
- bottomBevelSize > 0 &&
227
- axial <= bottomFace + bottomBevelSize + resolved.tolerance.linear;
228
- const topApplies = options.bevelTop === true &&
229
- topBevelSize > 0 &&
230
- axial >= topFace - topBevelSize - resolved.tolerance.linear;
226
+ const bottomApplies = bottomBevelSize > 0 && axial <= bottomFace + bottomBevelSize + resolved.tolerance.linear;
227
+ const topApplies = topBevelSize > 0 && axial >= topFace - topBevelSize - resolved.tolerance.linear;
231
228
  if (!bottomApplies && !topApplies)
232
229
  return undefined;
233
230
  const bottomDepth = bottomApplies
@@ -265,14 +262,9 @@ export const requirePositiveThreadSurfaceRadius = (radius, resolved, operation)
265
262
  }
266
263
  };
267
264
  const resolveMaximumThreadSurfaceRadius = (options, diameter, length, operation) => {
268
- const bevelSize = assertFiniteThreadNumber(options.bevelSize ?? options.profile.depth, "bevelSize", operation);
269
- const bottomBevelSize = assertFiniteThreadNumber(options.bevelBottomSize ?? bevelSize, "bevelBottomSize", operation);
270
- const topBevelSize = assertFiniteThreadNumber(options.bevelTopSize ?? bevelSize, "bevelTopSize", operation);
265
+ const [bottomBevelSize, topBevelSize] = resolveBevel(options.bevel, [options.profile.depth, options.profile.depth], [0, 0], operation);
271
266
  const bevelOffset = assertFiniteThreadNumber(options.bevelOffset ?? 0, "bevelOffset", operation);
272
- if (bevelSize < 0 ||
273
- bottomBevelSize < 0 ||
274
- topBevelSize < 0 ||
275
- bevelOffset < 0 ||
267
+ if (bevelOffset < 0 ||
276
268
  bevelOffset * 2 > length ||
277
269
  (options.bevelMode !== undefined &&
278
270
  options.bevelMode !== "inset" &&
@@ -286,39 +278,33 @@ const resolveMaximumThreadSurfaceRadius = (options, diameter, length, operation)
286
278
  return majorRadius;
287
279
  const outsetRadius = (style, size) => (style === "blunt" ? majorRadius : majorRadius - options.profile.depth) +
288
280
  Math.min(size, length / 2);
289
- return Math.max(majorRadius, options.bevelBottom === true
281
+ return Math.max(majorRadius, bottomBevelSize > 0
290
282
  ? outsetRadius(options.ends?.bottom ?? "blunt", bottomBevelSize)
291
- : majorRadius, options.bevelTop === true
292
- ? outsetRadius(options.ends?.top ?? "blunt", topBevelSize)
293
- : majorRadius);
283
+ : majorRadius, topBevelSize > 0 ? outsetRadius(options.ends?.top ?? "blunt", topBevelSize) : majorRadius);
294
284
  };
295
285
  /** @internal Resolves the solid's sampling and conservative allocation plan. */
296
286
  export const resolveHelicalThreadSolidMeshPreflight = (options, operation) => {
297
- const requestedEndLength = options.ends?.endLength ?? 0;
298
- const sharedBevelSize = options.bevelSize ?? options.profile.depth;
299
- const bottomBevelSize = options.bevelBottomSize ?? sharedBevelSize;
300
- const topBevelSize = options.bevelTopSize ?? sharedBevelSize;
301
- const bluntBevelReservation = Math.max(options.bevelBottom === true && (options.ends?.bottom ?? "blunt") === "blunt"
302
- ? bottomBevelSize
303
- : 0, options.bevelTop === true && (options.ends?.top ?? "blunt") === "blunt" ? topBevelSize : 0);
304
- const effectiveBluntBevelReservation = Math.min(bluntBevelReservation, options.length / 2);
305
- const resolvedOptions = effectiveBluntBevelReservation > 0
306
- ? {
307
- ...options,
308
- ends: {
309
- ...options.ends,
310
- endLength: Math.max(requestedEndLength, effectiveBluntBevelReservation),
311
- },
312
- }
313
- : options;
314
- const resolved = resolveHelicalThreadMeshOptions(resolvedOptions, operation, (diameter, length) => resolveMaximumThreadSurfaceRadius(resolvedOptions, diameter, length, operation));
287
+ const sizes = resolveBevel(options.bevel, [options.profile.depth, options.profile.depth], [0, 0], operation);
288
+ const bottomBevelSize = Math.min(sizes[0], options.length / 2);
289
+ const topBevelSize = Math.min(sizes[1], options.length / 2);
290
+ const offset = options.bevelOffset ?? 0;
291
+ const base = resolveHelicalThreadMeshOptions(options, operation, (diameter, length) => resolveMaximumThreadSurfaceRadius(options, diameter, length, operation), [
292
+ bottomBevelSize > 0 && (options.ends?.bottom ?? "blunt") === "blunt"
293
+ ? offset + bottomBevelSize
294
+ : 0,
295
+ topBevelSize > 0 && (options.ends?.top ?? "blunt") === "blunt" ? offset + topBevelSize : 0,
296
+ ]);
297
+ const resolved = {
298
+ ...base,
299
+ bevel: [bottomBevelSize, topBevelSize],
300
+ };
315
301
  if ((options.bevelMode ?? "inset") === "inset") {
316
302
  const majorRadius = resolved.diameter / 2;
317
- if (options.bevelBottom === true) {
318
- requirePositiveThreadSurfaceRadius(applyThreadSurfaceBevel(majorRadius, 0, options.profile, resolved, resolvedOptions), resolved, operation);
303
+ if (bottomBevelSize > 0) {
304
+ requirePositiveThreadSurfaceRadius(applyThreadSurfaceBevel(majorRadius, 0, options.profile, resolved, options), resolved, operation);
319
305
  }
320
- if (options.bevelTop === true) {
321
- requirePositiveThreadSurfaceRadius(applyThreadSurfaceBevel(majorRadius, resolved.length, options.profile, resolved, resolvedOptions), resolved, operation);
306
+ if (topBevelSize > 0) {
307
+ requirePositiveThreadSurfaceRadius(applyThreadSurfaceBevel(majorRadius, resolved.length, options.profile, resolved, options), resolved, operation);
322
308
  }
323
309
  }
324
310
  const resolution = resolveGeometryResolution(options.resolution, options.limits);
@@ -354,9 +340,8 @@ export const resolveHelicalThreadSolidMeshPreflight = (options, operation) => {
354
340
  * `circularSegments` is the selected count; row and triangle counts are conservative estimates.
355
341
  * Successful preflight leaves generated coordinate and topology checks to mesh construction.
356
342
  *
357
- * @see {@link helicalThreadSolidMesh}
343
+ * See `mesh.threadSolid` for standalone mesh construction.
358
344
  */
359
- export function preflightHelicalThreadSolidMesh(options) {
360
- return resolveHelicalThreadSolidMeshPreflight(options, "preflightHelicalThreadSolidMesh")
361
- .preflight;
345
+ export function preflightThreadSolidMesh(options) {
346
+ return resolveHelicalThreadSolidMeshPreflight(options, "preflightThreadSolidMesh").preflight;
362
347
  }
@@ -1,9 +1,9 @@
1
1
  /** Closed ridge and complete-solid mesh construction from resolved thread plans. */
2
- import { triangulateContour } from "../loft/loft.js";
3
- import { analyzeTriangleMesh, joinTriangleMeshes, reverseTriangleMesh, validateTriangleMesh, } from "../mesh/mesh.js";
4
- import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../model-limits.js";
5
- import { resolveHelicalThreadMeshOptions, resolveHelicalThreadSolidMeshPreflight, } from "./thread-mesh-plan.js";
6
- import { buildThreadSurfaceColumn, stitchThreadSurfaceColumns } from "./thread-surface.js";
2
+ import { triangulateContour } from "../../loft/loft.js";
3
+ import { analyzeTriangleMesh, joinTriangleMeshes, reverseTriangleMesh, validateTriangleMesh, } from "../../mesh/mesh.js";
4
+ import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../../model-limits.js";
5
+ import { resolveHelicalThreadMeshOptions, resolveHelicalThreadSolidMeshPreflight, } from "./mesh-plan.js";
6
+ import { buildThreadSurfaceColumn, stitchThreadSurfaceColumns } from "./surface.js";
7
7
  const MINIMUM_TAPERED_RIDGE_HEIGHT = 0.0005;
8
8
  const buildThreadRidgeComponent = (options) => {
9
9
  const { profile } = options;
@@ -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 helicalThreadSolidMesh(options) {
78
- const operation = "helicalThreadSolidMesh";
77
+ export function threadSolidMesh(options) {
78
+ const operation = "threadSolidMesh";
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));
@@ -113,8 +113,8 @@ export function helicalThreadSolidMesh(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 helicalThreadRidgeMesh(options) {
117
- const operation = "helicalThreadRidgeMesh";
116
+ export function threadRidgeMesh(options) {
117
+ const operation = "threadRidgeMesh";
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];
@@ -1,7 +1,7 @@
1
1
  /** Periodic thread profiles and axial/radial fit compensation. */
2
- import { GeometryError } from "../errors.js";
3
- import { triangulateContour } from "../loft/loft.js";
4
- import { resolveGeometryTolerance } from "../tolerance.js";
2
+ import { GeometryError } from "../../errors.js";
3
+ import { triangulateContour } from "../../loft/loft.js";
4
+ import { resolveGeometryTolerance } from "../../tolerance.js";
5
5
  const BUTTRESS_DEFAULT_DEPTH_RATIO = 0.66271;
6
6
  const BUTTRESS_CREST_FLAT_RATIO = 0.16316;
7
7
  const BUTTRESS_PRESSURE_ANGLE_RADIANS = (7 * Math.PI) / 180;
@@ -1,24 +1,17 @@
1
- import { GeometryError } from "../errors.js";
2
- import { resolveCircularSegments } from "../resolution.js";
3
- import { resolveGeometryTolerance } from "../tolerance.js";
4
- import { compensateThreadDiameters, preflightHelicalThreadSolidMesh, resolveThreadCircularSegments, } from "./index.js";
5
- import { compensateThreadProfileForFaceting, scaleThreadProfileRadially, } from "./thread-profiles.js";
1
+ import { GeometryError } from "../../errors.js";
2
+ import { resolveCircularSegments } from "../../resolution.js";
3
+ import { resolveGeometryTolerance } from "../../tolerance.js";
4
+ import { compensateThreadDiameters, preflightThreadSolidMesh, resolveThreadCircularSegments, } from "../index.js";
5
+ import { resolveBevel } from "./bevel.js";
6
+ import { compensateThreadProfileForFaceting, scaleThreadProfileRadially } from "./profiles.js";
6
7
  const THREAD_FACETING_MARGIN = 0.001;
7
- const resolveCompensatedThreadBevelSize = (options, role, compensated, style) => {
8
- if (options.bevelSize !== undefined)
9
- return options.bevelSize;
8
+ const resolveCompensatedThreadBevelSize = (role, compensated, style, depth) => {
10
9
  if (style !== "blunt")
11
- return options.profile.depth;
10
+ return depth;
12
11
  const envelopeDiameter = role === "female" ? compensated.majorDiameter : compensated.minorDiameter;
13
12
  return envelopeDiameter / 12;
14
13
  };
15
14
  export const resolveCompensatedThreadSolidMesh = (options, role) => {
16
- if (options.bevelSize !== undefined &&
17
- (!Number.isFinite(options.bevelSize) || options.bevelSize < 0)) {
18
- throw new GeometryError("INVALID_ARGUMENT", "Thread bevel size must be finite and non-negative.", {
19
- operation: "threadedSolid",
20
- });
21
- }
22
15
  const compensated = compensateThreadDiameters({
23
16
  nominalMajorDiameter: options.nominalMajorDiameter,
24
17
  threadDepth: options.profile.depth,
@@ -36,16 +29,18 @@ export const resolveCompensatedThreadSolidMesh = (options, role) => {
36
29
  const requestedEnds = options.ends ?? {};
37
30
  const bottomStyle = requestedEnds.bottom ?? "blunt";
38
31
  const topStyle = requestedEnds.top ?? "blunt";
39
- const bottomBevelSize = resolveCompensatedThreadBevelSize(options, role, compensated, bottomStyle);
40
- const topBevelSize = resolveCompensatedThreadBevelSize(options, role, compensated, topStyle);
41
- const femaleBottomBevelSize = resolveCompensatedThreadBevelSize(options, "female", compensatedFemale, bottomStyle);
42
- const femaleTopBevelSize = resolveCompensatedThreadBevelSize(options, "female", compensatedFemale, topStyle);
32
+ const automatic = (dimensions, selectedRole) => [
33
+ resolveCompensatedThreadBevelSize(selectedRole, dimensions, bottomStyle, options.profile.depth),
34
+ resolveCompensatedThreadBevelSize(selectedRole, dimensions, topStyle, options.profile.depth),
35
+ ];
36
+ const bevel = resolveBevel(options.bevel, automatic(compensated, role), [0, 0], "threadedSolid");
37
+ const femaleBevel = resolveBevel(options.bevel, automatic(compensatedFemale, "female"), [0, 0], "threadedSolid");
43
38
  const starts = options.starts ?? 1;
44
39
  const hypotheticalFemaleLength = options.length + options.profile.pitch * 2;
45
40
  const femaleBevelOutset = (style, size) => style === "blunt"
46
41
  ? Math.min(size, hypotheticalFemaleLength / 2)
47
42
  : Math.max(0, Math.min(size, hypotheticalFemaleLength / 2) - options.profile.depth);
48
- const maxRadialOutset = Math.max(options.bevelBottom === true ? femaleBevelOutset(bottomStyle, femaleBottomBevelSize) : 0, options.bevelTop === true ? femaleBevelOutset(topStyle, femaleTopBevelSize) : 0);
43
+ const maxRadialOutset = Math.max(femaleBevelOutset(bottomStyle, femaleBevel[0]), femaleBevelOutset(topStyle, femaleBevel[1]));
49
44
  const segments = resolveThreadCircularSegments({
50
45
  nominalMajorDiameter: options.nominalMajorDiameter,
51
46
  profile: options.profile,
@@ -73,7 +68,7 @@ export const resolveCompensatedThreadSolidMesh = (options, role) => {
73
68
  // translated cutter still starts and stops its thread at the caller's requested coordinates.
74
69
  const ends = {
75
70
  ...requestedEnds,
76
- endLength: Math.max(requestedEnds.endLength ?? 0, options.bevelBottom === true && bottomStyle === "blunt" ? bottomBevelSize : 0, options.bevelTop === true && topStyle === "blunt" ? topBevelSize : 0) + axialExtension,
71
+ endLength: (requestedEnds.endLength ?? 0) + axialExtension,
77
72
  leadInEnvelope: role === "female" ? "major" : "minor",
78
73
  };
79
74
  return Object.freeze({
@@ -85,17 +80,14 @@ export const resolveCompensatedThreadSolidMesh = (options, role) => {
85
80
  majorDiameter,
86
81
  length: workingLength,
87
82
  resolution,
88
- bevelBottomSize: bottomBevelSize,
83
+ bevel,
89
84
  bevelMode: role === "female" ? "outset" : "inset",
90
85
  bevelOffset: axialExtension,
91
- bevelTopSize: topBevelSize,
92
- ...(options.bevelBottom === undefined ? {} : { bevelBottom: options.bevelBottom }),
93
- ...(options.bevelTop === undefined ? {} : { bevelTop: options.bevelTop }),
94
86
  ends,
95
87
  }),
96
88
  });
97
89
  };
98
- const preflightCompensatedThreadSolid = (options, role) => preflightHelicalThreadSolidMesh(resolveCompensatedThreadSolidMesh(options, role).meshOptions);
90
+ const preflightCompensatedThreadSolid = (options, role) => preflightThreadSolidMesh(resolveCompensatedThreadSolidMesh(options, role).meshOptions);
99
91
  /**
100
92
  * Resolves compensated rod dimensions and checks conservative mesh estimates against output limits.
101
93
  *
@@ -103,8 +95,8 @@ const preflightCompensatedThreadSolid = (options, role) => preflightHelicalThrea
103
95
  * host execution. It creates planning data without mesh buffers or native objects; returned row
104
96
  * and triangle counts are estimates. Mesh validity and native construction are checked later.
105
97
  *
106
- * @see {@link preflightHelicalThreadSolidMesh}
107
- * @see {@link helicalThreadSolidMesh}
98
+ * See `mesh.preflightThreadSolid` for standalone mesh estimates.
99
+ * See `mesh.threadSolid` for standalone mesh construction.
108
100
  */
109
101
  export function preflightThreadedRodSolid(options) {
110
102
  return preflightCompensatedThreadSolid(options, "male");
@@ -117,8 +109,8 @@ export function preflightThreadedRodSolid(options) {
117
109
  * creates planning data without mesh buffers or native objects. Row and triangle counts are
118
110
  * estimates; mesh validity and native construction are checked later.
119
111
  *
120
- * @see {@link preflightHelicalThreadSolidMesh}
121
- * @see {@link helicalThreadSolidMesh}
112
+ * See `mesh.preflightThreadSolid` for standalone mesh estimates.
113
+ * See `mesh.threadSolid` for standalone mesh construction.
122
114
  */
123
115
  export function preflightInternalThreadCutterSolid(options) {
124
116
  return preflightCompensatedThreadSolid(options, "female");
@@ -137,27 +129,12 @@ export const resolveThreadedNutSolid = (options, operation) => {
137
129
  if (!Number.isFinite(options.thickness) || !(options.thickness > 0)) {
138
130
  throwInvalidNutScalar("thickness", "thickness", "finite and greater than zero", operation);
139
131
  }
140
- if (options.chamferSize !== undefined &&
141
- (!Number.isFinite(options.chamferSize) || options.chamferSize < 0)) {
142
- throwInvalidNutScalar("chamfer size", "chamferSize", "finite and non-negative", operation);
143
- }
144
132
  if (options.shape !== "hex" && options.shape !== "round" && options.shape !== "square") {
145
133
  throw new GeometryError("INVALID_ARGUMENT", "Unsupported threaded nut shape.", {
146
134
  operation,
147
135
  details: { parameter: "shape" },
148
136
  });
149
137
  }
150
- const bevel = options.bevel ?? "automatic";
151
- if (bevel !== "automatic" &&
152
- bevel !== "both" &&
153
- bevel !== "inside" &&
154
- bevel !== "none" &&
155
- bevel !== "outside") {
156
- throw new GeometryError("INVALID_ARGUMENT", "Unsupported threaded nut bevel selection.", {
157
- operation,
158
- details: { parameter: "bevel" },
159
- });
160
- }
161
138
  const segments = options.shape === "hex"
162
139
  ? 6
163
140
  : options.shape === "square"
@@ -165,73 +142,65 @@ export const resolveThreadedNutSolid = (options, operation) => {
165
142
  : resolveCircularSegments(options.width / 2, options.bodyResolution ?? options.resolution, options.limits);
166
143
  const sideCosine = Math.cos(Math.PI / segments);
167
144
  const outerRadius = options.shape === "round" ? options.width / 2 : options.width / (2 * sideCosine);
168
- const inside = bevel === "both" || bevel === "inside" || bevel === "automatic";
169
- const outside = bevel === "both" || bevel === "outside" || bevel === "automatic";
170
- const chamferSize = options.chamferSize ?? Math.min(options.profile.depth, options.thickness / 4);
171
- if (!Number.isFinite(chamferSize) || chamferSize < 0) {
172
- throwInvalidNutScalar("chamfer size", "chamferSize", "finite and non-negative", operation);
173
- }
174
- if ((inside || outside) && chamferSize > 0 && chamferSize * 2 >= options.thickness) {
175
- throw new GeometryError("DEGENERATE_GEOMETRY", "Threaded nut chamfer size must be smaller than half the body thickness.", {
176
- operation,
177
- details: {
178
- chamferSize,
179
- parameter: "chamferSize",
180
- reason: "insufficient-axial-space",
181
- thickness: options.thickness,
182
- },
183
- });
145
+ const autoSize = Math.min(options.profile.depth, options.thickness / 4);
146
+ const automatic = [autoSize, autoSize];
147
+ const innerBevel = resolveBevel(options.innerBevel, automatic, automatic, operation, "innerBevel");
148
+ const outerBevel = resolveBevel(options.outerBevel, automatic, automatic, operation, "outerBevel");
149
+ for (const [parameter, sizes] of [
150
+ ["innerBevel", innerBevel],
151
+ ["outerBevel", outerBevel],
152
+ ]) {
153
+ if (sizes[0] + sizes[1] >= options.thickness) {
154
+ throw new GeometryError("DEGENERATE_GEOMETRY", "Nut bevels must leave a positive axial band.", {
155
+ operation,
156
+ details: { parameter, reason: "insufficient-axial-space", thickness: options.thickness },
157
+ });
158
+ }
184
159
  }
185
- const bevelBottom = outside && !options.flushBuildPlateBottom && chamferSize > 0;
186
- const bevelTop = outside && chamferSize > 0;
187
- const cutter = resolveCompensatedThreadSolidMesh({
188
- ...options,
189
- length: options.thickness,
190
- bevelBottom: inside,
191
- bevelTop: inside,
192
- bevelSize: chamferSize,
193
- }, "female");
194
- const plainBodyFaceInradius = outerRadius * sideCosine;
195
- const chamferedBodyFaceInradius = (outerRadius - chamferSize) * sideCosine;
196
- const bottomBodyFaceInradius = bevelBottom ? chamferedBodyFaceInradius : plainBodyFaceInradius;
197
- const topBodyFaceInradius = bevelTop ? chamferedBodyFaceInradius : plainBodyFaceInradius;
160
+ const cutter = resolveCompensatedThreadSolidMesh({ ...options, length: options.thickness, bevel: innerBevel }, "female");
161
+ const bodyFaceInradius = (size) => (outerRadius - size) * sideCosine;
162
+ const bottomBodyFaceInradius = bodyFaceInradius(outerBevel[0]);
163
+ const topBodyFaceInradius = bodyFaceInradius(outerBevel[1]);
198
164
  const minimumBodyFaceInradius = Math.min(bottomBodyFaceInradius, topBodyFaceInradius);
199
165
  const cutterMajorRadius = cutter.meshOptions.majorDiameter / 2;
200
- const cutterFaceRadiusFor = (style) => inside
201
- ? cutterMajorRadius +
202
- (style === "blunt" ? chamferSize : Math.max(0, chamferSize - options.profile.depth))
203
- : cutterMajorRadius;
204
- const bottomCutterFaceRadius = cutterFaceRadiusFor(options.ends?.bottom ?? "blunt");
205
- const topCutterFaceRadius = cutterFaceRadiusFor(options.ends?.top ?? "blunt");
166
+ const cutterFaceRadiusFor = (style, size) => cutterMajorRadius + (style === "blunt" ? size : Math.max(0, size - options.profile.depth));
167
+ const bottomCutterFaceRadius = cutterFaceRadiusFor(options.ends?.bottom ?? "blunt", innerBevel[0]);
168
+ const topCutterFaceRadius = cutterFaceRadiusFor(options.ends?.top ?? "blunt", innerBevel[1]);
206
169
  const cutterFaceRadius = Math.max(bottomCutterFaceRadius, topCutterFaceRadius);
207
- const minimumFaceWall = Math.min(bottomBodyFaceInradius - bottomCutterFaceRadius, topBodyFaceInradius - topCutterFaceRadius);
170
+ const bottomFaceWall = bottomBodyFaceInradius - bottomCutterFaceRadius;
171
+ const topFaceWall = topBodyFaceInradius - topCutterFaceRadius;
172
+ const minimumFaceWall = Math.min(bottomFaceWall, topFaceWall);
208
173
  const requiredFaceWall = Math.max(THREAD_FACETING_MARGIN, resolveGeometryTolerance(Math.max(options.width, options.thickness, cutter.meshOptions.majorDiameter), options.tolerance).linear);
209
174
  if (!(minimumFaceWall > requiredFaceWall)) {
210
- const chamferIsActive = (inside || outside) && chamferSize > 0;
175
+ const end = bottomFaceWall <= topFaceWall ? 0 : 1;
176
+ const parameter = outerBevel[end] > 0 ? "outerBevel" : innerBevel[end] > 0 ? "innerBevel" : "width";
177
+ const chamferIsActive = parameter !== "width";
211
178
  throw new GeometryError("DEGENERATE_GEOMETRY", chamferIsActive
212
179
  ? "Threaded nut chamfer must leave a positive end-face annulus around the compensated thread."
213
180
  : "Threaded nut width must leave a positive end-face annulus around the compensated thread.", {
214
181
  operation,
215
182
  details: {
216
- chamferSize,
183
+ innerBottomBevel: innerBevel[0],
184
+ innerTopBevel: innerBevel[1],
185
+ outerBottomBevel: outerBevel[0],
186
+ outerTopBevel: outerBevel[1],
217
187
  cutterFaceRadius,
218
188
  minimumBodyFaceInradius,
219
189
  minimumFaceWall,
220
- parameter: chamferIsActive ? "chamferSize" : "width",
190
+ parameter,
221
191
  reason: "insufficient-face-annulus",
222
192
  requiredFaceWall,
223
193
  },
224
194
  });
225
195
  }
226
- const thread = preflightHelicalThreadSolidMesh(cutter.meshOptions);
196
+ const thread = preflightThreadSolidMesh(cutter.meshOptions);
227
197
  return Object.freeze({
228
- bevelBottom,
229
- bevelTop,
230
198
  cutter,
231
199
  outerRadius,
232
200
  preflight: Object.freeze({
233
201
  bodySegments: segments,
234
- chamferSize,
202
+ innerBevel,
203
+ outerBevel,
235
204
  cutterFaceRadius,
236
205
  minimumBodyFaceInradius,
237
206
  minimumFaceWall,
@@ -248,7 +217,7 @@ export const resolveThreadedNutSolid = (options, operation) => {
248
217
  * `thread` contains conservative cutter estimates, excluding the body and Boolean result.
249
218
  * Successful preflight leaves mesh validity, native construction, and manufacturing fit to later checks.
250
219
  *
251
- * @see {@link preflightHelicalThreadSolidMesh}
220
+ * See `mesh.preflightThreadSolid` for standalone mesh estimates.
252
221
  */
253
222
  export function preflightThreadedNutSolid(options) {
254
223
  return resolveThreadedNutSolid(options, "preflightThreadedNutSolid").preflight;
@@ -1,6 +1,6 @@
1
1
  /** Periodic surface columns and their phase-aware zipper stitching. */
2
- import { cross3, dot3, length3, subtract3 } from "../math/vector3.js";
3
- import { applyThreadSurfaceBevel, requirePositiveThreadSurfaceRadius, threadSurfaceBevelBoundaryAt, } from "./thread-mesh-plan.js";
2
+ import { cross3, dot3, length3, subtract3 } from "../../math/vector3.js";
3
+ import { applyThreadSurfaceBevel, requirePositiveThreadSurfaceRadius, threadSurfaceBevelBoundaryAt, } from "./mesh-plan.js";
4
4
  const threadLeadInScale = (progress, shape, leadInLength) => {
5
5
  if (shape === "cut")
6
6
  return progress > 0 ? { height: 1, width: 1 } : { height: 0, width: 1 };
@@ -140,20 +140,19 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
140
140
  };
141
141
  add(0);
142
142
  add(resolved.length);
143
- const bottomBevelSize = Math.min(options.bevelBottomSize ?? options.bevelSize ?? profile.depth, resolved.length / 2);
144
- const topBevelSize = Math.min(options.bevelTopSize ?? options.bevelSize ?? profile.depth, resolved.length / 2);
143
+ const [bottomBevelSize, topBevelSize] = resolved.bevel;
145
144
  const fixedSamples = [resolved.bottomBoundary, resolved.topBoundary];
146
145
  if (resolved.bottom === "tapered")
147
146
  fixedSamples.push(resolved.bottomBoundary + profile.depth);
148
147
  if (resolved.top === "tapered")
149
148
  fixedSamples.push(resolved.topBoundary - profile.depth);
150
- if (options.bevelBottom === true) {
149
+ if (bottomBevelSize > 0) {
151
150
  fixedSamples.push(bevelOffset, bevelOffset + bottomBevelSize);
152
151
  }
153
- if (options.bevelTop === true) {
152
+ if (topBevelSize > 0) {
154
153
  fixedSamples.push(resolved.length - bevelOffset - topBevelSize, resolved.length - bevelOffset);
155
154
  }
156
- if (options.bevelBottom === true && options.bevelTop === true) {
155
+ if (bottomBevelSize > 0 && topBevelSize > 0) {
157
156
  const bottomBevelEnd = bevelOffset + bottomBevelSize;
158
157
  const topBevelStart = resolved.length - bevelOffset - topBevelSize;
159
158
  if (bottomBevelEnd >= topBevelStart) {
@@ -348,7 +347,7 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
348
347
  let previousZ;
349
348
  for (const sample of sampled) {
350
349
  const radius = radiusAt(sample, sample.z);
351
- requirePositiveThreadSurfaceRadius(radius, resolved, "helicalThreadSolidMesh");
350
+ requirePositiveThreadSurfaceRadius(radius, resolved, "threadSolidMesh");
352
351
  if (previousRadius !== undefined &&
353
352
  previousZ !== undefined &&
354
353
  Math.abs(sample.z - previousZ) <= resolved.tolerance.linear &&
@@ -1,17 +1,18 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { immutableMeshView } from "../immutable-buffer.js";
2
3
  import { analyzeTriangleMesh } from "./mesh.js";
3
4
  /**
4
5
  * Computes the uniform-density volume centroid of an oriented closed solid, including cavity shells.
5
6
  *
6
7
  * Coordinates are millimetres. Indexed closure and positive aggregate volume are required; callers
7
- * may use validateSolidMesh first when geometric intersections and shell orientation are untrusted.
8
+ * may use mesh.validateSolid first when geometric intersections and shell orientation are untrusted.
8
9
  * Fresh mutable input is inspected on every call, and buffers are never changed.
9
10
  *
10
11
  * @param mesh - Consistently oriented closed mesh with positive enclosed volume.
11
12
  * @returns A fresh immutable XYZ volume centroid.
12
13
  */
13
14
  export function computeTriangleMeshCentroid(mesh) {
14
- const source = { positions: mesh.positions, indices: mesh.indices };
15
+ const source = immutableMeshView(mesh);
15
16
  const facts = analyzeTriangleMesh(source, { requireClosed: true });
16
17
  if (!(facts.signedVolume > 0))
17
18
  throw new GeometryError("INVALID_TOPOLOGY", "A volume centroid requires positive oriented volume.", { operation: "computeTriangleMeshCentroid" });
@@ -1,4 +1,5 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { immutableMeshView, isImmutableBuffer } from "../immutable-buffer.js";
2
3
  import { buildTriangleMeshQualityAnalysis, } from "./mesh-quality.js";
3
4
  const DEFAULT_MAXIMUM_FLIP_ATTEMPTS = 1_000_000;
4
5
  const DEFAULT_MAXIMUM_PATCH_TRIANGLE_COUNT = 50_000;
@@ -165,19 +166,37 @@ const fallbackReasonForCandidate = (before, after, boundaryEdgeKeys) => {
165
166
  * The operation changes indices only: it never moves, adds, welds, or removes vertices; never
166
167
  * crosses a coplanar-patch boundary; and never changes the face count. Each accepted flip improves
167
168
  * a deterministic ordering of triangle angles, aspect ratio, diagonal locality, and local
168
- * incidence/valence concentration. Unsupported input or a failed final integrity check returns the
169
- * exact original mesh object. Malformed buffers and the configured analysis complexity limit throw.
169
+ * incidence/valence concentration. Unsupported input or a failed final integrity check preserves the
170
+ * original raw mesh object. Immutable inputs produce owned raw output buffers, including unchanged
171
+ * results. Malformed buffers and the configured analysis complexity limit throw.
170
172
  *
171
173
  * @param mesh - Closed, consistently wound indexed triangle mesh in arbitrary consistent units.
172
174
  * @param options - Patch eligibility, numeric tolerance, and deterministic work bounds.
173
175
  * @returns Optimized connectivity and before/after diagnostics, or an unchanged safe fallback.
174
176
  */
175
177
  export function optimizePlanarPatches(mesh, options = {}) {
176
- const source = { positions: mesh.positions, indices: mesh.indices };
178
+ const { positions, indices } = mesh;
179
+ const immutable = isImmutableBuffer(positions) || isImmutableBuffer(indices);
180
+ const source = immutableMeshView({ positions, indices });
181
+ const result = optimizePlanarMesh(source, options);
182
+ // Raw numerical outputs may alias caller-owned raw inputs, never immutable private storage.
183
+ return !immutable
184
+ ? result.changed
185
+ ? result
186
+ : { ...result, mesh: mesh }
187
+ : {
188
+ ...result,
189
+ mesh: {
190
+ positions: new Float32Array(result.mesh.positions),
191
+ indices: new Uint32Array(result.mesh.indices),
192
+ },
193
+ };
194
+ }
195
+ function optimizePlanarMesh(source, options) {
177
196
  const resolved = resolveOptions(options);
178
197
  const before = buildTriangleMeshQualityAnalysis(source, options);
179
198
  if (!before.report.isClosedOrientedManifold) {
180
- return unchangedResult(mesh, before.report, 0, false, "input-not-closed-oriented-manifold");
199
+ return unchangedResult(source, before.report, 0, false, "input-not-closed-oriented-manifold");
181
200
  }
182
201
  const selectedPatchIds = new Set();
183
202
  const boundaryEdgeKeys = new Set();
@@ -199,7 +218,7 @@ export function optimizePlanarPatches(mesh, options = {}) {
199
218
  boundaryEdgeKeys.add(key);
200
219
  }
201
220
  if (selectedPatchIds.size === 0) {
202
- return unchangedResult(mesh, before.report, skippedPatchCount, budgetExhausted);
221
+ return unchangedResult(source, before.report, skippedPatchCount, budgetExhausted);
203
222
  }
204
223
  const triangles = before.faces.map(({ vertices }) => [...vertices]);
205
224
  const edges = new Map();
@@ -226,7 +245,7 @@ export function optimizePlanarPatches(mesh, options = {}) {
226
245
  const maxFlipAttempts = resolved.maxFlipAttempts ??
227
246
  Math.min(DEFAULT_MAXIMUM_FLIP_ATTEMPTS, initialEdges.length * ATTEMPTS_PER_INITIAL_EDGE);
228
247
  if (maxFlipAttempts === 0) {
229
- return unchangedResult(mesh, before.report, skippedPatchCount, budgetExhausted);
248
+ return unchangedResult(source, before.report, skippedPatchCount, budgetExhausted);
230
249
  }
231
250
  const queue = initialEdges.map(({ key }) => key);
232
251
  const queued = new Set(queue);
@@ -382,7 +401,7 @@ export function optimizePlanarPatches(mesh, options = {}) {
382
401
  if (queueOffset < queue.length)
383
402
  budgetExhausted = true;
384
403
  if (flipCount === 0) {
385
- return unchangedResult(mesh, before.report, skippedPatchCount, budgetExhausted);
404
+ return unchangedResult(source, before.report, skippedPatchCount, budgetExhausted);
386
405
  }
387
406
  const indices = new Uint32Array(source.indices.length);
388
407
  for (let faceIndex = 0; faceIndex < triangles.length; faceIndex += 1) {
@@ -392,7 +411,7 @@ export function optimizePlanarPatches(mesh, options = {}) {
392
411
  const after = buildTriangleMeshQualityAnalysis(candidate, options);
393
412
  const fallbackReason = fallbackReasonForCandidate(before, after, boundaryEdgeKeys);
394
413
  if (fallbackReason !== undefined) {
395
- return unchangedResult(mesh, before.report, skippedPatchCount, budgetExhausted, fallbackReason);
414
+ return unchangedResult(source, before.report, skippedPatchCount, budgetExhausted, fallbackReason);
396
415
  }
397
416
  return {
398
417
  after: after.report,
@@ -1,4 +1,5 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { immutableMeshView } from "../immutable-buffer.js";
2
3
  import { resolveGeometryTolerance, } from "../tolerance.js";
3
4
  const DEFAULT_MAXIMUM_TRIANGLE_COUNT = 200_000;
4
5
  const FLOAT32_EPSILON = 2 ** -23;
@@ -235,7 +236,7 @@ const buildPatchAnalysis = (faces, edges, faceIndices, id) => {
235
236
  };
236
237
  /** @internal */
237
238
  export function buildTriangleMeshQualityAnalysis(mesh, options = {}) {
238
- const source = { positions: mesh.positions, indices: mesh.indices };
239
+ const source = immutableMeshView(mesh);
239
240
  const maxTriangles = positiveInteger(options.maxTriangles ?? DEFAULT_MAXIMUM_TRIANGLE_COUNT, "Maximum analyzed triangle count");
240
241
  structurallyValidateMesh(source, maxTriangles);
241
242
  const { bounds, extent } = meshBoundsAndExtent(source.positions);