@metamesh/modeling 0.16.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 (881) hide show
  1. package/CHANGELOG.md +193 -0
  2. package/README.md +137 -142
  3. package/dist/api/engine.d.ts +128 -65
  4. package/dist/api/geometry.d.ts +327 -483
  5. package/dist/api/index.d.ts +537 -415
  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 +130 -87
  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 +94 -56
  14. package/dist/docs/guides/standalone-model.md +8 -7
  15. package/dist/docs/manifest.json +2941 -968
  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 +112 -0
  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 +112 -0
  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 +41 -0
  70. package/dist/docs/reference/geometry/CircularSamplingOptions.md +14 -0
  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 +16 -1
  206. package/dist/docs/reference/geometry/SvgRegionPreflight.md +16 -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 +1 -1
  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 +7 -6
  273. package/dist/docs/reference/geometry/bounds3.md +7 -6
  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 +8 -9
  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 +7 -4
  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 +12 -3
  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 +40 -0
  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 +110 -0
  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 +110 -0
  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 +77 -0
  558. package/dist/docs/reference/model/HoleCutterOverrun.md +35 -0
  559. package/dist/docs/reference/model/HoleCutterRecess.md +87 -0
  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 +9 -5
  569. package/dist/docs/reference/model/KnuckleHingeOptions.md +3 -3
  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 +2 -2
  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 +14 -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 +7 -6
  682. package/dist/docs/reference/model/bounds3.md +7 -6
  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 +6 -4
  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 +2 -2
  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 +8 -4
  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 +55 -0
  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 +3 -3
  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 +5 -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 +1 -1
  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 +1 -1
  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} +21 -9
  775. package/dist/engine/{operation-environment.js → operations/environment.js} +2 -2
  776. package/dist/engine/{extrusion-finishing.js → operations/extrusion-finishing.js} +8 -35
  777. package/dist/engine/operations/hole-cutter.js +148 -0
  778. package/dist/engine/{inspection-operations.js → operations/inspection.js} +6 -6
  779. package/dist/engine/operations/knuckle-hinge.js +128 -0
  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} +36 -24
  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} +9 -9
  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 +49 -11
  801. package/dist/geometry/bounds.js +0 -17
  802. package/dist/geometry/circular-sampling.js +45 -0
  803. package/dist/geometry/convex-offset.js +41 -0
  804. package/dist/geometry/heightfield.js +10 -12
  805. package/dist/{model → geometry}/immutable-buffer.js +28 -7
  806. package/dist/geometry/index.js +18 -23
  807. package/dist/geometry/loft/loft.js +11 -6
  808. package/dist/geometry/math/immutable-value.js +1 -1
  809. package/dist/geometry/mechanical/index.js +5 -5
  810. package/dist/geometry/mechanical/threads/bevel.js +24 -0
  811. package/dist/geometry/mechanical/{threads.js → threads/fit.js} +4 -4
  812. package/dist/geometry/mechanical/{thread-helices.js → threads/helices.js} +3 -3
  813. package/dist/geometry/mechanical/{thread-mesh-plan.js → threads/mesh-plan.js} +38 -53
  814. package/dist/geometry/mechanical/{thread-mesh.js → threads/mesh.js} +9 -9
  815. package/dist/geometry/mechanical/{thread-profiles.js → threads/profiles.js} +3 -3
  816. package/dist/geometry/mechanical/{thread-solids.js → threads/solids.js} +58 -89
  817. package/dist/geometry/mechanical/{thread-surface.js → threads/surface.js} +7 -8
  818. package/dist/geometry/mesh/mesh-centroid.js +3 -2
  819. package/dist/geometry/mesh/mesh-planar.js +27 -8
  820. package/dist/geometry/mesh/mesh-quality.js +2 -1
  821. package/dist/geometry/mesh/mesh-signature.js +7 -6
  822. package/dist/geometry/mesh/mesh-solid.js +2 -3
  823. package/dist/geometry/mesh/mesh-types.js +1 -0
  824. package/dist/geometry/mesh/mesh.js +13 -22
  825. package/dist/geometry/mesh-api.js +14 -0
  826. package/dist/geometry/primitive-resolvers.js +42 -14
  827. package/dist/geometry/profiles/primitives/circle.js +19 -0
  828. package/dist/geometry/profiles/{shapes.js → primitives/ellipse.js} +6 -10
  829. package/dist/geometry/profiles/{rectangle.js → primitives/rectangle.js} +14 -12
  830. package/dist/geometry/profiles/primitives/regular-polygon.js +33 -0
  831. package/dist/geometry/profiles/primitives/star.js +28 -0
  832. package/dist/geometry/revolve/revolve-mesh.js +1 -1
  833. package/dist/geometry/{svg-import.js → svg/import.js} +141 -59
  834. package/dist/geometry/svg/matrix.js +21 -0
  835. package/dist/geometry/sweeps/sweep-mesh.js +1 -1
  836. package/dist/geometry/transform3.js +29 -0
  837. package/dist/index.js +2 -1
  838. package/dist/model/diagnostic-path.js +26 -0
  839. package/dist/model/execution-binding.js +3 -3
  840. package/dist/model/generation.js +8 -2
  841. package/dist/model/geometry-recipes.js +1 -1
  842. package/dist/model/hole-cutter.js +1 -0
  843. package/dist/model/immutable-generation-data.js +33 -2
  844. package/dist/model/operations.js +35 -144
  845. package/dist/model/recipe-declaration.js +7 -2
  846. package/dist/model/shape-handles.js +30 -7
  847. package/dist/text/index.js +1 -1
  848. package/package.json +21 -11
  849. package/dist/docs/reference/engine/ModelSnapshot.md +0 -184
  850. package/dist/docs/reference/engine/SnapshotPart.md +0 -133
  851. package/dist/docs/reference/engine/validateModel.md +0 -48
  852. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +0 -24
  853. package/dist/docs/reference/geometry/ThreadedNutBevel.md +0 -14
  854. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +0 -61
  855. package/dist/docs/reference/geometry/boundsFromSize.md +0 -84
  856. package/dist/docs/reference/geometry/containsBounds.md +0 -73
  857. package/dist/docs/reference/geometry/extrudeMesh.md +0 -77
  858. package/dist/docs/reference/geometry/helicalThreadRidgeMesh.md +0 -72
  859. package/dist/docs/reference/geometry/helicalThreadSolidMesh.md +0 -106
  860. package/dist/docs/reference/geometry/meshBounds.md +0 -39
  861. package/dist/docs/reference/geometry/optimizePlanarPatches.md +0 -95
  862. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +0 -105
  863. package/dist/docs/reference/geometry/sweepMesh.md +0 -86
  864. package/dist/docs/reference/model/FinalizedModel.md +0 -131
  865. package/dist/docs/reference/model/FinalizedPart.md +0 -87
  866. package/dist/docs/reference/model/anchor.md +0 -47
  867. package/dist/docs/reference/model/castSegment.md +0 -40
  868. package/dist/docs/reference/model/categories/inspection.md +0 -29
  869. package/dist/docs/reference/model/components.md +0 -71
  870. package/dist/docs/reference/model/compose.md +0 -31
  871. package/dist/docs/reference/model/distance.md +0 -45
  872. package/dist/docs/reference/model/immutableMesh.md +0 -44
  873. package/dist/docs/reference/model/inspectSection.md +0 -38
  874. package/dist/docs/reference/model/inspectSolid.md +0 -38
  875. package/dist/docs/reference/model/isEmpty.md +0 -39
  876. package/dist/docs/reference/model/split.md +0 -54
  877. package/dist/docs/reference/model/splitByPlane.md +0 -66
  878. package/dist/engine/knuckle-hinge-operation.js +0 -85
  879. package/dist/geometry/profiles/profiles.js +0 -91
  880. /package/dist/engine/{primitive-profile-types.js → operations/primitives/profile-types.js} +0 -0
  881. /package/dist/geometry/profiles/{matched.js → match-profiles.js} +0 -0
@@ -0,0 +1,41 @@
1
+ import { GeometryError } from "./errors.js";
2
+ /** @internal Parallel-edge offsets shared by convex extrusion rims and pocket entries. */
3
+ export function convexContourOffsets(points, operation) {
4
+ const fail = (message) => {
5
+ throw new GeometryError("INVALID_ARGUMENT", message, { operation });
6
+ };
7
+ if (points.length < 3)
8
+ fail("A convex contour needs at least three vertices.");
9
+ const edges = points.map((point, index) => {
10
+ const next = points[(index + 1) % points.length];
11
+ const dx = next[0] - point[0], dy = next[1] - point[1];
12
+ const length = Math.hypot(dx, dy);
13
+ if (!(length > 0) || !Number.isFinite(length))
14
+ fail("Contours must have distinct finite vertices.");
15
+ return [dx / length, dy / length];
16
+ });
17
+ const miters = edges.map((edge, index) => {
18
+ const previous = edges[(index + edges.length - 1) % edges.length];
19
+ const turn = previous[0] * edge[1] - previous[1] * edge[0];
20
+ if (!(turn > 1e-12))
21
+ fail("Entry and end treatments require a strictly convex counterclockwise contour without collinear vertices.");
22
+ const denominator = 1 + previous[0] * edge[0] + previous[1] * edge[1];
23
+ return [(-previous[1] - edge[1]) / denominator, (previous[0] + edge[0]) / denominator];
24
+ });
25
+ return {
26
+ magnification: miters.reduce((maximum, [x, y]) => Math.max(maximum, Math.hypot(x, y)), 1),
27
+ offset(inset) {
28
+ const result = points.map(([x, y], index) => [
29
+ x + miters[index][0] * inset,
30
+ y + miters[index][1] * inset,
31
+ ]);
32
+ for (let index = 0; index < result.length; index++) {
33
+ const point = result[index], next = result[(index + 1) % result.length], edge = edges[index];
34
+ if (!point.every(Number.isFinite) ||
35
+ !((next[0] - point[0]) * edge[0] + (next[1] - point[1]) * edge[1] > 0))
36
+ fail("Treatment offset collapses or reverses a contour edge.");
37
+ }
38
+ return result;
39
+ },
40
+ };
41
+ }
@@ -1,4 +1,5 @@
1
1
  import { GeometryError } from "./errors.js";
2
+ import { vector2Data } from "./math/vector-value.js";
2
3
  import { validateTriangleMesh } from "./mesh/mesh.js";
3
4
  import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "./model-limits.js";
4
5
  import { writeMeshVertex } from "./numeric.js";
@@ -33,21 +34,18 @@ function planHeightfield(options, limits) {
33
34
  yAt = (index) => coordinates.y[index];
34
35
  }
35
36
  else {
36
- if (!Array.isArray(options.size) ||
37
- options.size.length !== 2 ||
38
- !options.size.every((value) => Number.isFinite(value) && value > 0) ||
37
+ const size = vector2Data(options.size);
38
+ const origin = options.origin === undefined ? undefined : vector2Data(options.origin);
39
+ if (!size.every((value) => Number.isFinite(value) && value > 0) ||
39
40
  !Array.isArray(options.segments) ||
40
41
  options.segments.length !== 2 ||
41
42
  !options.segments.every((value) => Number.isSafeInteger(value) && value > 0) ||
42
- (options.origin !== undefined &&
43
- (!Array.isArray(options.origin) ||
44
- options.origin.length !== 2 ||
45
- !options.origin.every(Number.isFinite)))) {
43
+ (origin !== undefined && !origin.every(Number.isFinite))) {
46
44
  throw new GeometryError("INVALID_ARGUMENT", "Uniform heightfields need a finite positive footprint, integer intervals, and finite origin.", { operation });
47
45
  }
48
46
  [x, y] = options.segments;
49
- const [width, depth] = options.size;
50
- const [originX, originY] = options.origin ?? [-width / 2, -depth / 2];
47
+ const [width, depth] = size;
48
+ const [originX, originY] = origin ?? [-width / 2, -depth / 2];
51
49
  xAt = (index) => originX + (width * index) / x;
52
50
  yAt = (index) => originY + (depth * index) / y;
53
51
  }
@@ -84,7 +82,7 @@ function planHeightfield(options, limits) {
84
82
  * Successful preflight leaves height values, Float32 base storage, and generated mesh validity to
85
83
  * construction. `byteCount` covers position and index buffers, not total working memory.
86
84
  *
87
- * @see {@link heightfieldMesh}
85
+ * @see `mesh.heightfield`
88
86
  */
89
87
  export function preflightHeightfield(options, limits = {}) {
90
88
  return planHeightfield(options, limits).facts;
@@ -96,11 +94,11 @@ export function preflightHeightfield(options, limits = {}) {
96
94
  * Top winding is +Z, the base is -Z, and sides face outward. Coordinates and heights must fit
97
95
  * Float32 storage. Explicit axes are captured before sampling; shared wall vertices prevent cracks.
98
96
  *
99
- * @see {@link preflightHeightfield}
97
+ * @see `mesh.preflightHeightfield`
100
98
  *
101
99
  * @example Sample a closed wavy mesh
102
100
  * ```ts
103
- * heightfieldMesh({
101
+ * mesh.heightfield({
104
102
  * size: [30, 20], segments: [24, 16],
105
103
  * height: ([x, y]) => 3 + Math.cos(x / 5) * Math.cos(y / 5),
106
104
  * });
@@ -1,6 +1,7 @@
1
1
  const constructors = { Float32Array, Float64Array, Uint32Array, Uint8Array, Int32Array };
2
- const protocol = Symbol.for("@metamesh/modeling/immutable-buffer/1");
2
+ const protocol = Symbol.for("@metamesh/modeling/immutable-buffer/2");
3
3
  const storage = new WeakMap();
4
+ const ownedBuffers = new WeakMap();
4
5
  const adopted = new WeakMap();
5
6
  /**
6
7
  * Copies numeric data once into private storage. This pure helper needs no active generation.
@@ -10,6 +11,7 @@ const adopted = new WeakMap();
10
11
  * const heights = immutableBuffer(new Float32Array([2, 4, 6]));
11
12
  * const count = heights.length;
12
13
  * const first = heights.at(0);
14
+ * const doubled = Array.from(heights, (height) => height * 2);
13
15
  * const editable = heights.copy();
14
16
  * editable[0] = 8; // heights still contains 2, 4, 6.
15
17
  * ```
@@ -18,8 +20,19 @@ export function immutableBuffer(source) {
18
20
  const entry = Object.entries(constructors).find(([, constructor]) => source instanceof constructor);
19
21
  if (entry === undefined)
20
22
  throw new TypeError("immutableBuffer requires a supported numeric typed array.");
21
- const [kind, constructor] = entry;
23
+ const constructor = entry[1];
22
24
  const owned = new constructor(source);
25
+ return ownImmutableBuffer(owned);
26
+ }
27
+ /** Wraps storage whose exclusive mutable ownership has already been captured by the host. */
28
+ export function ownImmutableBuffer(owned) {
29
+ const previous = ownedBuffers.get(owned);
30
+ if (previous !== undefined)
31
+ return previous;
32
+ const entry = Object.entries(constructors).find(([, constructor]) => owned instanceof constructor);
33
+ if (entry === undefined)
34
+ throw new TypeError("Unsupported owned numeric storage.");
35
+ const [kind, constructor] = entry;
23
36
  const length = owned.length;
24
37
  const result = Object.freeze({
25
38
  [protocol]: kind,
@@ -29,18 +42,20 @@ export function immutableBuffer(source) {
29
42
  return Number.isInteger(offset) && offset >= 0 && offset < length ? owned[offset] : undefined;
30
43
  },
31
44
  copy: () => new constructor(owned),
45
+ [Symbol.iterator]: () => owned.values(),
32
46
  });
33
47
  storage.set(result, owned);
48
+ ownedBuffers.set(owned, result);
34
49
  return result;
35
50
  }
36
51
  /**
37
52
  * Copies mesh buffers into immutable data; geometric validation still occurs when modeling or finalizing.
38
53
  * @example
39
54
  * ```ts
40
- * import { generate, immutableMesh } from "@metamesh/modeling";
41
- * import { heightfieldMesh } from "@metamesh/modeling/geometry";
55
+ * import { generate } from "@metamesh/modeling";
56
+ * import * as mesh from "@metamesh/modeling/geometry/mesh";
42
57
  * const model = generate(({ computed, part }) => {
43
- * const surface = computed("surface", () => immutableMesh(heightfieldMesh({
58
+ * const surface = computed("surface", () => mesh.immutable(mesh.heightfield({
44
59
  * size: [10, 10], segments: [8, 8], height: () => 2,
45
60
  * })));
46
61
  * return [part("surface", surface)];
@@ -50,7 +65,7 @@ export function immutableBuffer(source) {
50
65
  export function immutableMesh(mesh) {
51
66
  const { positions, indices } = mesh;
52
67
  if (!(positions instanceof Float32Array) || !(indices instanceof Uint32Array))
53
- throw new TypeError("immutableMesh requires Float32 positions and Uint32 indices.");
68
+ throw new TypeError("mesh.immutable requires Float32 positions and Uint32 indices.");
54
69
  return Object.freeze({
55
70
  positions: immutableBuffer(positions),
56
71
  indices: immutableBuffer(indices),
@@ -75,7 +90,8 @@ export function isImmutableBuffer(value) {
75
90
  Number.isSafeInteger(length) &&
76
91
  length >= 0 &&
77
92
  typeof field("at") === "function" &&
78
- typeof field("copy") === "function");
93
+ typeof field("copy") === "function" &&
94
+ typeof field(Symbol.iterator) === "function");
79
95
  }
80
96
  /** Adopts separately bundled factories once, copying before trusting their storage or methods. */
81
97
  export function adoptImmutableBuffer(buffer) {
@@ -104,6 +120,11 @@ export function immutableBufferView(buffer) {
104
120
  /** Normalizes trusted modeling/finalization inputs without copying or exposing storage publicly. */
105
121
  export function immutableMeshView(mesh) {
106
122
  const { positions, indices } = mesh;
123
+ if (positions instanceof Float32Array &&
124
+ indices instanceof Uint32Array &&
125
+ Object.getOwnPropertyDescriptor(mesh, "positions")?.value === positions &&
126
+ Object.getOwnPropertyDescriptor(mesh, "indices")?.value === indices)
127
+ return mesh;
107
128
  return {
108
129
  positions: isImmutableBuffer(positions) ? immutableBufferView(positions) : positions,
109
130
  indices: isImmutableBuffer(indices) ? immutableBufferView(indices) : indices,
@@ -1,18 +1,16 @@
1
1
  /** Pure geometry foundations without host initialization. @packageDocumentation */
2
2
  export { bounds2, bounds3, } from "./bounds-value.js";
3
- export { boundsFromSize, boundsSize, boundsCenter, containsBounds, fitBounds, layoutRow, } from "./bounds.js";
3
+ export { boundsSize, boundsCenter, fitBounds, layoutRow, } from "./bounds.js";
4
+ export { resolveCircularSampling, } from "./circular-sampling.js";
4
5
  export { fitTextLayout } from "./text-fitting.js";
5
6
  export { gridPatternTransforms, linearPatternTransforms, radialPatternTransforms, pathPatternTransforms, } from "./patterns.js";
6
- export { validateSolidMesh } from "./mesh/mesh-solid.js";
7
- export { computeTriangleMeshCentroid } from "./mesh/mesh-centroid.js";
8
- export { matchProfiles, } from "./profiles/matched.js";
9
- export { heightfieldMesh, preflightHeightfield, } from "./heightfield.js";
10
- export { preflightThreadedRodSolid as preflightThreadedRod, preflightInternalThreadCutterSolid as preflightInternalThreadCutter, preflightThreadedNutSolid as preflightThreadedNut, } from "./mechanical/thread-solids.js";
7
+ export { matchProfiles, } from "./profiles/match-profiles.js";
8
+ export { preflightThreadedRodSolid as preflightThreadedRod, preflightInternalThreadCutterSolid as preflightInternalThreadCutter, preflightThreadedNutSolid as preflightThreadedNut, } from "./mechanical/threads/solids.js";
11
9
  export { anchorFrame3, attachmentTransform3, boxAnchor3, anchor3, cylinderAnchor3, } from "./anchors.js";
12
10
  export { defaultGeometrySamplingLimits, resolveGeometrySamplingLimits, } from "./sampling-limits.js";
13
11
  export { GeometryError, isGeometryError, } from "./errors.js";
14
12
  export { resolveExtrusionDivisions, } from "./extrusion.js";
15
- export { extrudeMesh, loftMesh, triangulateContour, } from "./loft/loft.js";
13
+ export { triangulateContour, } from "./loft/loft.js";
16
14
  export { transform2, transform3, } from "./transform-value.js";
17
15
  export { vector2, vector3, } from "./math/vector-value.js";
18
16
  export { add2, subtract2, scale2, dot2, cross2, length2, distance2, normalize2, lerp2, rotate2, } from "./math/vector2.js";
@@ -20,34 +18,31 @@ export { add3, cross3, dot3, length3, distance3, lerp3, normalize3, projectOntoP
20
18
  export { minimumCylindricalGearToothCountWithoutUndercut, resolveCylindricalGear, resolveCylindricalGearPair, resolveRackPitch, sampleCylindricalGearOutline, sampleInternalCylindricalGearSpaceOutline, sampleRackToothPath, } from "./mechanical/gears.js";
21
19
  export { measureInternalCylindricalGearPairMotion, } from "./mechanical/gear-motion.js";
22
20
  export { METRIC_FASTENER_STANDARDS, getMetricClearanceHoleDiameter, getMetricFastenerStandard, } from "./mechanical/standards.js";
23
- export { helicalThreadRidgeMesh, helicalThreadSolidMesh } from "./mechanical/thread-mesh.js";
24
- export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, threadProfile, } from "./mechanical/thread-profiles.js";
25
- export { preflightHelicalThreadSolidMesh, } from "./mechanical/thread-mesh-plan.js";
26
- export { sampleConventionalThreadHelices as sampleThreadHelices, } from "./mechanical/thread-helices.js";
27
- export { PRINTABLE_THREAD_FIT_POLICIES, compensateThreadDiameters, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./mechanical/threads.js";
28
- export { analyzeTriangleMesh, joinTriangleMeshes, meshBounds, reverseTriangleMesh, transformTriangleMesh, validateTriangleMesh, } from "./mesh/mesh.js";
29
- export { computeTriangleMeshSignature, } from "./mesh/mesh-signature.js";
30
- export { optimizePlanarPatches, } from "./mesh/mesh-planar.js";
31
- export { analyzeTriangleMeshQuality, } from "./mesh/mesh-quality.js";
21
+ export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, threadProfile, } from "./mechanical/threads/profiles.js";
22
+ export {} from "./mechanical/threads/mesh-plan.js";
23
+ export { sampleConventionalThreadHelices as sampleThreadHelices, } from "./mechanical/threads/helices.js";
24
+ export { PRINTABLE_THREAD_FIT_POLICIES, compensateThreadDiameters, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./mechanical/threads/fit.js";
32
25
  export { computeClosedParallelTransportFrames, computeParallelTransportFrames, } from "./paths/frames.js";
33
26
  export { sampleHelix } from "./paths/helix.js";
34
27
  export { path2, path3, } from "./paths/path-value.js";
35
28
  export { distributeAlongPath, roundClosedPolylinePath, } from "./paths/planar.js";
36
- export { circleContour, rectangleContour, regularPolygonContour, starContour, } from "./profiles/profiles.js";
29
+ export { circleContour } from "./profiles/primitives/circle.js";
30
+ export { rectangleContour } from "./profiles/primitives/rectangle.js";
31
+ export { regularPolygonContour, } from "./profiles/primitives/regular-polygon.js";
32
+ export { starContour } from "./profiles/primitives/star.js";
37
33
  export { closeToAxis, sampleSideProfile, } from "./profiles/side-profile.js";
38
34
  export { sampleContour, } from "./profiles/contour.js";
39
- export { ellipseContour } from "./profiles/shapes.js";
40
- export { rectangleProfile, } from "./profiles/rectangle.js";
35
+ export { ellipseContour } from "./profiles/primitives/ellipse.js";
36
+ export { rectangleProfile, } from "./profiles/primitives/rectangle.js";
41
37
  export { contourContainsPoint, normalizeContour, normalizePolygon, normalizeRegion, regionArea, regionBounds, signedContourArea, } from "./regions.js";
42
38
  export { resolveAlignedCircularSegments, resolveArcSegments, resolveCircularSegments, } from "./resolution.js";
43
- export { revolveMesh } from "./revolve/revolve-mesh.js";
44
- export { preflightSvgRegion, } from "./svg-import.js";
39
+ export { preflightSvgRegion, } from "./svg/import.js";
45
40
  export { strokeRegionData, } from "./stroke-path.js";
46
- export { sweepMesh } from "./sweeps/sweep-mesh.js";
47
41
  export { DEFAULT_GEOMETRY_TOLERANCE, resolveGeometryTolerance, } from "./tolerance.js";
48
42
  export { transformRegionData } from "./transform-geometry.js";
49
- export { IDENTITY_TRANSFORM3, applyTransformDirection3, applyTransformPoint3, composeTransform3, eulerTransform3, frameTransform3, inverseTransform3, rotationTransform3, scaleTransform3, transformDeterminant3, translationTransform3, validateTransform3, } from "./transform3.js";
43
+ export { IDENTITY_TRANSFORM3, applyTransformDirection3, applyTransformPoint3, composeTransform3, eulerTransform3, frameTransform3, inverseTransform3, rotationTransform3, scaleTransform3, transformDeterminant3, translationTransform3, validateTransform3, validateRigidTransform3, } from "./transform3.js";
50
44
  export { sampleTextContours } from "./text-contours.js";
51
45
  export { sampleCurve2, sampleCurve3 } from "./curves/sampling.js";
52
46
  export { resamplePolyline2, resamplePolyline3, } from "./paths/resampling.js";
53
47
  export { resolveKnuckleHinge, } from "./mechanical/knuckle-hinge.js";
48
+ export { immutableBuffer, } from "./immutable-buffer.js";
@@ -10,7 +10,7 @@ export { triangulateContour } from "./loft-triangulation.js";
10
10
  /**
11
11
  * Lofts simple point loops at z heights or explicit right-handed frames, in input order.
12
12
  *
13
- * An explicit correspondence method is required. CCW-normalized loops retain their
13
+ * Correspondence defaults to direct. CCW-normalized loops retain their
14
14
  * seam and original vertices; unequal counts gain subdivisions or repeated fan slots.
15
15
  * Both ends use ear-clipped caps, supporting concave profiles without center fans.
16
16
  * Intermediate slices interpolate placed world vertices, never frame axes.
@@ -21,12 +21,14 @@ export { triangulateContour } from "./loft-triangulation.js";
21
21
  * ```ts
22
22
  * const bottom = rectangleContour({ size: [20, 12] });
23
23
  * const top = rectangleContour({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
24
- * loftMesh([{ profile: bottom, z: 0 }, { profile: top, z: 30 }], { correspondence: "reindex" });
24
+ * mesh.loft([{ profile: bottom, z: 0 }, { profile: top, z: 30 }], { correspondence: "reindex" });
25
25
  * ```
26
26
  */
27
- export function loftMesh(stations, options) {
28
- if (options?.correspondence === undefined)
29
- throw new GeometryError("INVALID_ARGUMENT", "Point-loop lofts require an explicit correspondence method.", { operation: "loftMesh" });
27
+ export function loftMesh(stations, options = {}) {
28
+ if (typeof options !== "object" || options === null || Array.isArray(options))
29
+ throw new GeometryError("INVALID_ARGUMENT", "Loft options must be an object.", {
30
+ operation: "loftMesh",
31
+ });
30
32
  const limits = resolveModelingLimits(options.limits);
31
33
  if (!Array.isArray(stations) || stations.length < 2)
32
34
  throw new GeometryError("INVALID_ARGUMENT", "Loft requires at least two stations.", {
@@ -53,16 +55,19 @@ export function loftMesh(stations, options) {
53
55
  /**
54
56
  * Linearly extrudes one simple profile along +Z with robust ear-clipped caps.
55
57
  * Path2 profiles must be closed; raw point collections have an implicit closing edge.
58
+ * End treatments are unsupported and reject at runtime. Use Section.extrude for finished ends.
56
59
  *
57
60
  * @example Extrude point data without an engine
58
61
  * ```ts
59
62
  * const outline = rectangleContour({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
60
- * extrudeMesh(outline, { height: 8 });
63
+ * mesh.extrude(outline, { height: 8 });
61
64
  * ```
62
65
  */
63
66
  export function extrudeMesh(input, options) {
64
67
  const { height } = options;
65
68
  const { center, scales, twist } = resolveExtrusionControls(height, options, "extrudeMesh");
69
+ if ("ends" in options)
70
+ throw new GeometryError("INVALID_ARGUMENT", "extrudeMesh does not support end treatments. Use Section.extrude instead.", { operation: "extrudeMesh" });
66
71
  if (!Number.isFinite(height) || height <= 0) {
67
72
  throw new GeometryError("INVALID_ARGUMENT", "Extrusion height must be finite and positive.", {
68
73
  operation: "extrudeMesh",
@@ -1,5 +1,5 @@
1
1
  // A versioned realm protocol lets separately bundled authoring values cross the host boundary.
2
- const immutableMath = Symbol.for("@metamesh/modeling/immutable-math/8");
2
+ const immutableMath = Symbol.for("@metamesh/modeling/immutable-math/9");
3
3
  /**
4
4
  * Brands and freezes only this constructor's prototype. Pure-annotated callers let bundlers
5
5
  * discard unused classes without dropping initialization for classes that remain reachable.
@@ -5,10 +5,10 @@
5
5
  */
6
6
  export { minimumCylindricalGearToothCountWithoutUndercut, resolveCylindricalGear, resolveCylindricalGearPair, resolveRackPitch, sampleCylindricalGearOutline, sampleInternalCylindricalGearSpaceOutline, sampleRackToothPath, } from "./gears.js";
7
7
  export { measureInternalCylindricalGearPairMotion } from "./gear-motion.js";
8
- export { helicalThreadRidgeMesh, helicalThreadSolidMesh } from "./thread-mesh.js";
9
- export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, threadProfile, } from "./thread-profiles.js";
10
- export { preflightHelicalThreadSolidMesh } from "./thread-mesh-plan.js";
11
- export { sampleConventionalThreadHelices as sampleThreadHelices } from "./thread-helices.js";
12
- export { compensateThreadDiameters, PRINTABLE_THREAD_FIT_POLICIES, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./threads.js";
8
+ export { threadRidgeMesh, threadSolidMesh } from "./threads/mesh.js";
9
+ export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, threadProfile, } from "./threads/profiles.js";
10
+ export { preflightThreadSolidMesh } from "./threads/mesh-plan.js";
11
+ export { sampleConventionalThreadHelices as sampleThreadHelices } from "./threads/helices.js";
12
+ export { compensateThreadDiameters, PRINTABLE_THREAD_FIT_POLICIES, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./threads/fit.js";
13
13
  export { getMetricClearanceHoleDiameter, getMetricFastenerStandard, METRIC_FASTENER_STANDARDS, } from "./standards.js";
14
14
  export { resolveKnuckleHinge, } from "./knuckle-hinge.js";
@@ -0,0 +1,24 @@
1
+ import { GeometryError } from "../../errors.js";
2
+ /** @internal Validates and captures factory-specific automatic bevel sizes. */
3
+ export function resolveBevel(value, automatic, defaults, operation, parameter = "bevel") {
4
+ if (value === undefined)
5
+ return Object.freeze([defaults[0], defaults[1]]);
6
+ const invalid = () => {
7
+ throw new GeometryError("INVALID_ARGUMENT", `${parameter} must be a nonnegative finite size, "auto", or a [bottom, top] pair.`, {
8
+ operation,
9
+ details: { parameter },
10
+ });
11
+ };
12
+ const pair = Array.isArray(value) ? value : [value, value];
13
+ if (pair.length !== 2)
14
+ invalid();
15
+ const size = (index) => {
16
+ const item = pair[index];
17
+ if (item === "auto")
18
+ return automatic[index];
19
+ if (typeof item !== "number" || !Number.isFinite(item) || item < 0)
20
+ return invalid();
21
+ return item;
22
+ };
23
+ return Object.freeze([size(0), size(1)]);
24
+ }
@@ -1,7 +1,7 @@
1
- import { GeometryError } from "../errors.js";
2
- import { resolveCircularSegments, resolveGeometryResolution, } from "../resolution.js";
3
- import { resolveGeometryTolerance } from "../tolerance.js";
4
- import { compensateThreadProfileForFaceting } from "./thread-profiles.js";
1
+ import { GeometryError } from "../../errors.js";
2
+ import { resolveCircularSegments, resolveGeometryResolution, } from "../../resolution.js";
3
+ import { resolveGeometryTolerance } from "../../tolerance.js";
4
+ import { compensateThreadProfileForFaceting } from "./profiles.js";
5
5
  const frozenFit = (maleRadialInset, femaleRadialOutset, axialBacklash) => Object.freeze({ axialBacklash, femaleRadialOutset, maleRadialInset });
6
6
  /**
7
7
  * Conservative baseline print-fit policies in millimetres.
@@ -1,7 +1,7 @@
1
1
  /** Conventional thread helix sampling, independent of surface construction. */
2
- import { GeometryError } from "../errors.js";
3
- import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
4
- import { assertFiniteThreadNumber } from "./thread-profiles.js";
2
+ import { GeometryError } from "../../errors.js";
3
+ import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../../sampling-limits.js";
4
+ import { assertFiniteThreadNumber } from "./profiles.js";
5
5
  /**
6
6
  * Samples evenly phased thread helices with finite `lead = pitch * starts`.
7
7
  * All starts together respect maxPathPoints (default 100000); excessive counts fail before allocation.
@@ -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;