@metamesh/modeling 0.12.0 → 0.14.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 (699) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +103 -72
  3. package/dist/api/engine.d.ts +123 -97
  4. package/dist/api/geometry.d.ts +4232 -3307
  5. package/dist/api/index.d.ts +2758 -2268
  6. package/dist/api/text.d.ts +119 -107
  7. package/dist/docs/guides/concepts.md +300 -0
  8. package/dist/docs/guides/fonts.md +59 -0
  9. package/dist/docs/guides/fundamentals.md +137 -0
  10. package/dist/docs/guides/generation.md +223 -0
  11. package/dist/docs/guides/hosting.md +91 -0
  12. package/dist/docs/guides/recipes.md +718 -0
  13. package/dist/docs/manifest.json +10703 -0
  14. package/dist/docs/reference/engine/Export3mfOptions.md +29 -0
  15. package/dist/docs/reference/engine/ExportMeshPart.md +65 -0
  16. package/dist/docs/reference/engine/GenerationOptions.md +62 -0
  17. package/dist/docs/reference/engine/GeometryResource.md +77 -0
  18. package/dist/docs/reference/engine/ModelDependencies.md +41 -0
  19. package/dist/docs/reference/engine/ModelEngine.md +103 -0
  20. package/dist/docs/reference/engine/ModelEngineOptions.md +33 -0
  21. package/dist/docs/reference/engine/ModelSession.md +96 -0
  22. package/dist/docs/reference/engine/ModelSnapshot.md +173 -0
  23. package/dist/docs/reference/engine/SessionOptions.md +123 -0
  24. package/dist/docs/reference/engine/SnapshotPart.md +130 -0
  25. package/dist/docs/reference/engine/categories/host-lifecycle.md +37 -0
  26. package/dist/docs/reference/engine/createModelEngine.md +56 -0
  27. package/dist/docs/reference/engine/defaultModelingLimits.md +7 -0
  28. package/dist/docs/reference/engine/modelingWasmUrl.md +7 -0
  29. package/dist/docs/reference/engine/validateModel.md +48 -0
  30. package/dist/docs/reference/engine.md +25 -0
  31. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +75 -0
  32. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +92 -0
  33. package/dist/docs/reference/geometry/Anchor3.md +53 -0
  34. package/dist/docs/reference/geometry/ArcCurve2.md +70 -0
  35. package/dist/docs/reference/geometry/ArcCurve3.md +94 -0
  36. package/dist/docs/reference/geometry/AttachTransformOptions.md +62 -0
  37. package/dist/docs/reference/geometry/AxisAngleRotation3.md +66 -0
  38. package/dist/docs/reference/geometry/Bounds2.md +39 -0
  39. package/dist/docs/reference/geometry/Bounds3.md +39 -0
  40. package/dist/docs/reference/geometry/BoundsFit2.md +52 -0
  41. package/dist/docs/reference/geometry/BoundsFit3.md +52 -0
  42. package/dist/docs/reference/geometry/BoundsFitOptions.md +23 -0
  43. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +23 -0
  44. package/dist/docs/reference/geometry/BoxAnchorFace.md +14 -0
  45. package/dist/docs/reference/geometry/BoxAnchorOptions.md +63 -0
  46. package/dist/docs/reference/geometry/BoxEdge.md +7 -0
  47. package/dist/docs/reference/geometry/BoxEdgeSelection.md +14 -0
  48. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +15 -0
  49. package/dist/docs/reference/geometry/BoxOptions.md +87 -0
  50. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +7 -0
  51. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +93 -0
  52. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +29 -0
  53. package/dist/docs/reference/geometry/CircleContourOptions.md +15 -0
  54. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +59 -0
  55. package/dist/docs/reference/geometry/CircularResolutionOptions.md +107 -0
  56. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +41 -0
  57. package/dist/docs/reference/geometry/ClearanceHoleFit.md +7 -0
  58. package/dist/docs/reference/geometry/ClosestPointOnPathOptions.md +34 -0
  59. package/dist/docs/reference/geometry/ClosestPointOnPathResult.md +65 -0
  60. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +53 -0
  61. package/dist/docs/reference/geometry/Contour.md +17 -0
  62. package/dist/docs/reference/geometry/ContourCurve.md +35 -0
  63. package/dist/docs/reference/geometry/ContourPoint.md +29 -0
  64. package/dist/docs/reference/geometry/ContourSegment.md +86 -0
  65. package/dist/docs/reference/geometry/CorrespondingComponent.md +46 -0
  66. package/dist/docs/reference/geometry/CorrespondingContour.md +46 -0
  67. package/dist/docs/reference/geometry/CorrespondingProfile.md +22 -0
  68. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +27 -0
  69. package/dist/docs/reference/geometry/CubicBezierCurve2.md +70 -0
  70. package/dist/docs/reference/geometry/CubicBezierCurve3.md +70 -0
  71. package/dist/docs/reference/geometry/Curve2.md +16 -0
  72. package/dist/docs/reference/geometry/Curve3.md +16 -0
  73. package/dist/docs/reference/geometry/CurveSamplingOptions.md +64 -0
  74. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +73 -0
  75. package/dist/docs/reference/geometry/CylinderAnchorFace.md +14 -0
  76. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +87 -0
  77. package/dist/docs/reference/geometry/CylinderOptions.md +53 -0
  78. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +209 -0
  79. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +7 -0
  80. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +71 -0
  81. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +82 -0
  82. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +34 -0
  83. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +41 -0
  84. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +47 -0
  85. package/dist/docs/reference/geometry/CylindricalGearSpec.md +82 -0
  86. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -0
  87. package/dist/docs/reference/geometry/EdgeTreatment.md +17 -0
  88. package/dist/docs/reference/geometry/EllipseContourOptions.md +15 -0
  89. package/dist/docs/reference/geometry/EndTreatments.md +34 -0
  90. package/dist/docs/reference/geometry/ExtrudeOptions.md +134 -0
  91. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +77 -0
  92. package/dist/docs/reference/geometry/FittedTextLayout.md +60 -0
  93. package/dist/docs/reference/geometry/Frame3.md +58 -0
  94. package/dist/docs/reference/geometry/GeometryError.md +97 -0
  95. package/dist/docs/reference/geometry/GeometryErrorCode.md +7 -0
  96. package/dist/docs/reference/geometry/GeometryErrorContext.md +29 -0
  97. package/dist/docs/reference/geometry/GeometryResolution.md +74 -0
  98. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +62 -0
  99. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +41 -0
  100. package/dist/docs/reference/geometry/GridPatternOptions.md +42 -0
  101. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +14 -0
  102. package/dist/docs/reference/geometry/HeightfieldOptions.md +67 -0
  103. package/dist/docs/reference/geometry/HeightfieldPreflight.md +53 -0
  104. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +141 -0
  105. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +265 -0
  106. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +53 -0
  107. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +18 -0
  108. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +242 -0
  109. package/dist/docs/reference/geometry/LineCurve2.md +46 -0
  110. package/dist/docs/reference/geometry/LineCurve3.md +46 -0
  111. package/dist/docs/reference/geometry/LinearPatternOptions.md +30 -0
  112. package/dist/docs/reference/geometry/LoftCorrespondence.md +19 -0
  113. package/dist/docs/reference/geometry/LoftMeshStation.md +27 -0
  114. package/dist/docs/reference/geometry/LoftOptions.md +84 -0
  115. package/dist/docs/reference/geometry/LoftPlacement.md +66 -0
  116. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +18 -0
  117. package/dist/docs/reference/geometry/MatchProfilesOptions.md +35 -0
  118. package/dist/docs/reference/geometry/MetricFastenerSize.md +7 -0
  119. package/dist/docs/reference/geometry/MetricFastenerStandard.md +72 -0
  120. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +29 -0
  121. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +41 -0
  122. package/dist/docs/reference/geometry/ModelingLimits.md +126 -0
  123. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +17 -0
  124. package/dist/docs/reference/geometry/Path2.md +14 -0
  125. package/dist/docs/reference/geometry/Path3.md +14 -0
  126. package/dist/docs/reference/geometry/PathFrame.md +46 -0
  127. package/dist/docs/reference/geometry/PathNormalGuide.md +38 -0
  128. package/dist/docs/reference/geometry/PathPatternOptions.md +46 -0
  129. package/dist/docs/reference/geometry/PathPlacement.md +34 -0
  130. package/dist/docs/reference/geometry/Pivot2Options.md +26 -0
  131. package/dist/docs/reference/geometry/Pivot3Options.md +26 -0
  132. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +7 -0
  133. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +156 -0
  134. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +120 -0
  135. package/dist/docs/reference/geometry/PlanarPatchQuality.md +190 -0
  136. package/dist/docs/reference/geometry/PolygonData.md +38 -0
  137. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +92 -0
  138. package/dist/docs/reference/geometry/PrimitivePlacement.md +31 -0
  139. package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +83 -0
  140. package/dist/docs/reference/geometry/PrintableThreadFit.md +7 -0
  141. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +45 -0
  142. package/dist/docs/reference/geometry/Profile.md +22 -0
  143. package/dist/docs/reference/geometry/ProfileComponent2.md +46 -0
  144. package/dist/docs/reference/geometry/ProfileContour2.md +34 -0
  145. package/dist/docs/reference/geometry/ProfileSpan2.md +47 -0
  146. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +36 -0
  147. package/dist/docs/reference/geometry/RackPitchDimensions.md +113 -0
  148. package/dist/docs/reference/geometry/RackPitchSpec.md +77 -0
  149. package/dist/docs/reference/geometry/RadialPatternOptions.md +62 -0
  150. package/dist/docs/reference/geometry/RadialSizing.md +7 -0
  151. package/dist/docs/reference/geometry/RadialSizingOptions.md +40 -0
  152. package/dist/docs/reference/geometry/RectangleContourOptions.md +66 -0
  153. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +34 -0
  154. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +14 -0
  155. package/dist/docs/reference/geometry/RectangleProfileOptions.md +94 -0
  156. package/dist/docs/reference/geometry/RegionData.md +14 -0
  157. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +84 -0
  158. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +65 -0
  159. package/dist/docs/reference/geometry/RevolveOptions.md +82 -0
  160. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +91 -0
  161. package/dist/docs/reference/geometry/RowLayoutOptions.md +23 -0
  162. package/dist/docs/reference/geometry/SampleContourOptions.md +71 -0
  163. package/dist/docs/reference/geometry/SampleHelixOptions.md +95 -0
  164. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +71 -0
  165. package/dist/docs/reference/geometry/SampledCurve2.md +34 -0
  166. package/dist/docs/reference/geometry/SampledCurve3.md +34 -0
  167. package/dist/docs/reference/geometry/SampledThreadHelices.md +58 -0
  168. package/dist/docs/reference/geometry/SideProfileCurve.md +35 -0
  169. package/dist/docs/reference/geometry/SideProfilePoint.md +29 -0
  170. package/dist/docs/reference/geometry/SideProfileSegment.md +86 -0
  171. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +71 -0
  172. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +34 -0
  173. package/dist/docs/reference/geometry/SphereOptions.md +15 -0
  174. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +75 -0
  175. package/dist/docs/reference/geometry/StrokePathCap.md +7 -0
  176. package/dist/docs/reference/geometry/StrokePathJoin.md +7 -0
  177. package/dist/docs/reference/geometry/StrokePathRegionOptions.md +85 -0
  178. package/dist/docs/reference/geometry/SvgImportOptions.md +60 -0
  179. package/dist/docs/reference/geometry/SvgRegionPreflight.md +61 -0
  180. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +118 -0
  181. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +65 -0
  182. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +53 -0
  183. package/dist/docs/reference/geometry/SweepOptions.md +109 -0
  184. package/dist/docs/reference/geometry/SweepOrientation.md +109 -0
  185. package/dist/docs/reference/geometry/ThreadBevelOptions.md +53 -0
  186. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +100 -0
  187. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +73 -0
  188. package/dist/docs/reference/geometry/ThreadEndStyle.md +7 -0
  189. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +113 -0
  190. package/dist/docs/reference/geometry/ThreadHandedness.md +7 -0
  191. package/dist/docs/reference/geometry/ThreadHelixOptions.md +120 -0
  192. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +7 -0
  193. package/dist/docs/reference/geometry/ThreadLeadInShape.md +7 -0
  194. package/dist/docs/reference/geometry/ThreadProfile.md +82 -0
  195. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +49 -0
  196. package/dist/docs/reference/geometry/ThreadProfileSpec.md +19 -0
  197. package/dist/docs/reference/geometry/ThreadRole.md +7 -0
  198. package/dist/docs/reference/geometry/ThreadedNutBevel.md +7 -0
  199. package/dist/docs/reference/geometry/ThreadedNutOptions.md +269 -0
  200. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +94 -0
  201. package/dist/docs/reference/geometry/ThreadedNutShape.md +7 -0
  202. package/dist/docs/reference/geometry/ThreadedRodOptions.md +242 -0
  203. package/dist/docs/reference/geometry/TorusOptions.md +105 -0
  204. package/dist/docs/reference/geometry/Transform2-type.md +255 -0
  205. package/dist/docs/reference/geometry/Transform2Input.md +19 -0
  206. package/dist/docs/reference/geometry/Transform2Matrix.md +14 -0
  207. package/dist/docs/reference/geometry/Transform3-type.md +295 -0
  208. package/dist/docs/reference/geometry/Transform3Input.md +19 -0
  209. package/dist/docs/reference/geometry/Transform3Matrix.md +17 -0
  210. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +91 -0
  211. package/dist/docs/reference/geometry/TriangleMesh.md +34 -0
  212. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +119 -0
  213. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +75 -0
  214. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +75 -0
  215. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +39 -0
  216. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +190 -0
  217. package/dist/docs/reference/geometry/TriangleMeshSignature.md +107 -0
  218. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +41 -0
  219. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +29 -0
  220. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +51 -0
  221. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +91 -0
  222. package/dist/docs/reference/geometry/TubeOptions.md +138 -0
  223. package/dist/docs/reference/geometry/Vector2-type.md +269 -0
  224. package/dist/docs/reference/geometry/Vector2Input.md +19 -0
  225. package/dist/docs/reference/geometry/Vector2Tuple.md +14 -0
  226. package/dist/docs/reference/geometry/Vector3-type.md +281 -0
  227. package/dist/docs/reference/geometry/Vector3Input.md +19 -0
  228. package/dist/docs/reference/geometry/Vector3Tuple.md +14 -0
  229. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +53 -0
  230. package/dist/docs/reference/geometry/VectorTextLayout.md +39 -0
  231. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +111 -0
  232. package/dist/docs/reference/geometry/VectorTextMetrics.md +94 -0
  233. package/dist/docs/reference/geometry/VectorTextOptions.md +50 -0
  234. package/dist/docs/reference/geometry/add2.md +36 -0
  235. package/dist/docs/reference/geometry/add3.md +42 -0
  236. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +57 -0
  237. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +52 -0
  238. package/dist/docs/reference/geometry/anchorFrame3.md +40 -0
  239. package/dist/docs/reference/geometry/applyTransformDirection3.md +45 -0
  240. package/dist/docs/reference/geometry/applyTransformPoint3.md +43 -0
  241. package/dist/docs/reference/geometry/attachTransform.md +77 -0
  242. package/dist/docs/reference/geometry/boundsCenter.md +62 -0
  243. package/dist/docs/reference/geometry/boundsFromSize.md +83 -0
  244. package/dist/docs/reference/geometry/boundsSize.md +62 -0
  245. package/dist/docs/reference/geometry/boxAnchor3.md +52 -0
  246. package/dist/docs/reference/geometry/buildHelicalThreadRidgeMesh.md +68 -0
  247. package/dist/docs/reference/geometry/buildHelicalThreadSolidMesh.md +102 -0
  248. package/dist/docs/reference/geometry/categories/bounds-layout.md +35 -0
  249. package/dist/docs/reference/geometry/categories/curves-paths.md +66 -0
  250. package/dist/docs/reference/geometry/categories/mechanical.md +101 -0
  251. package/dist/docs/reference/geometry/categories/meshes.md +73 -0
  252. package/dist/docs/reference/geometry/categories/pattern-placement.md +34 -0
  253. package/dist/docs/reference/geometry/categories/primitive-options.md +36 -0
  254. package/dist/docs/reference/geometry/categories/profiles-regions.md +74 -0
  255. package/dist/docs/reference/geometry/categories/resolution-errors.md +47 -0
  256. package/dist/docs/reference/geometry/categories/transforms-math.md +92 -0
  257. package/dist/docs/reference/geometry/categories/vector-import.md +40 -0
  258. package/dist/docs/reference/geometry/circleContour.md +33 -0
  259. package/dist/docs/reference/geometry/closeToAxis.md +34 -0
  260. package/dist/docs/reference/geometry/closestPointOnPath.md +110 -0
  261. package/dist/docs/reference/geometry/compensateThreadDiameters.md +51 -0
  262. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +42 -0
  263. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +56 -0
  264. package/dist/docs/reference/geometry/composeTransform3.md +44 -0
  265. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +45 -0
  266. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +47 -0
  267. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +31 -0
  268. package/dist/docs/reference/geometry/containsBounds.md +72 -0
  269. package/dist/docs/reference/geometry/contourContainsPoint.md +33 -0
  270. package/dist/docs/reference/geometry/createAnchor3.md +67 -0
  271. package/dist/docs/reference/geometry/createThreadProfile.md +37 -0
  272. package/dist/docs/reference/geometry/createTriangleMeshSignature.md +60 -0
  273. package/dist/docs/reference/geometry/cross2.md +36 -0
  274. package/dist/docs/reference/geometry/cross3.md +42 -0
  275. package/dist/docs/reference/geometry/cumulativePathLengths.md +33 -0
  276. package/dist/docs/reference/geometry/cylinderAnchor3.md +60 -0
  277. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +14 -0
  278. package/dist/docs/reference/geometry/distance2.md +36 -0
  279. package/dist/docs/reference/geometry/distance3.md +36 -0
  280. package/dist/docs/reference/geometry/distributeAlongPath.md +51 -0
  281. package/dist/docs/reference/geometry/dot2.md +36 -0
  282. package/dist/docs/reference/geometry/dot3.md +42 -0
  283. package/dist/docs/reference/geometry/ellipseContour.md +33 -0
  284. package/dist/docs/reference/geometry/eulerTransform3.md +42 -0
  285. package/dist/docs/reference/geometry/extrudeMesh.md +73 -0
  286. package/dist/docs/reference/geometry/fitBounds.md +95 -0
  287. package/dist/docs/reference/geometry/fitTextLayout.md +57 -0
  288. package/dist/docs/reference/geometry/frameTransform3.md +48 -0
  289. package/dist/docs/reference/geometry/getMetricClearanceHole.md +33 -0
  290. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +27 -0
  291. package/dist/docs/reference/geometry/gridPatternTransforms.md +31 -0
  292. package/dist/docs/reference/geometry/heightfieldMesh.md +43 -0
  293. package/dist/docs/reference/geometry/inverseTransform3.md +34 -0
  294. package/dist/docs/reference/geometry/isGeometryError.md +26 -0
  295. package/dist/docs/reference/geometry/joinTriangleMeshes.md +36 -0
  296. package/dist/docs/reference/geometry/layoutRow.md +43 -0
  297. package/dist/docs/reference/geometry/length2.md +30 -0
  298. package/dist/docs/reference/geometry/length3.md +30 -0
  299. package/dist/docs/reference/geometry/lerp2.md +42 -0
  300. package/dist/docs/reference/geometry/lerp3.md +42 -0
  301. package/dist/docs/reference/geometry/linearPatternTransforms.md +31 -0
  302. package/dist/docs/reference/geometry/loftMesh.md +72 -0
  303. package/dist/docs/reference/geometry/matchProfiles.md +51 -0
  304. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +48 -0
  305. package/dist/docs/reference/geometry/measureTriangleMesh.md +55 -0
  306. package/dist/docs/reference/geometry/meshBounds.md +35 -0
  307. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +29 -0
  308. package/dist/docs/reference/geometry/normalize2.md +36 -0
  309. package/dist/docs/reference/geometry/normalize3.md +36 -0
  310. package/dist/docs/reference/geometry/normalizeContour.md +45 -0
  311. package/dist/docs/reference/geometry/normalizePolygon.md +37 -0
  312. package/dist/docs/reference/geometry/normalizeRegion.md +33 -0
  313. package/dist/docs/reference/geometry/optimizePlanarPatches.md +91 -0
  314. package/dist/docs/reference/geometry/pathLength.md +33 -0
  315. package/dist/docs/reference/geometry/pathPatternTransforms.md +57 -0
  316. package/dist/docs/reference/geometry/preflightHeightfield.md +34 -0
  317. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +96 -0
  318. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +85 -0
  319. package/dist/docs/reference/geometry/preflightSvgRegion.md +56 -0
  320. package/dist/docs/reference/geometry/preflightThreadedNut.md +96 -0
  321. package/dist/docs/reference/geometry/preflightThreadedRod.md +85 -0
  322. package/dist/docs/reference/geometry/projectOntoPlane3.md +36 -0
  323. package/dist/docs/reference/geometry/radialPatternTransforms.md +47 -0
  324. package/dist/docs/reference/geometry/rectangleContour.md +49 -0
  325. package/dist/docs/reference/geometry/rectangleProfile.md +53 -0
  326. package/dist/docs/reference/geometry/regionArea.md +34 -0
  327. package/dist/docs/reference/geometry/regionBounds.md +27 -0
  328. package/dist/docs/reference/geometry/regularPolygonContour.md +53 -0
  329. package/dist/docs/reference/geometry/resamplePolyline2.md +64 -0
  330. package/dist/docs/reference/geometry/resamplePolyline3.md +67 -0
  331. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +83 -0
  332. package/dist/docs/reference/geometry/resolveArcSegments.md +67 -0
  333. package/dist/docs/reference/geometry/resolveCircularSegments.md +62 -0
  334. package/dist/docs/reference/geometry/resolveCylindricalGear.md +31 -0
  335. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +31 -0
  336. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +74 -0
  337. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +26 -0
  338. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +59 -0
  339. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +27 -0
  340. package/dist/docs/reference/geometry/resolveRackPitch.md +27 -0
  341. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +59 -0
  342. package/dist/docs/reference/geometry/reverseTriangleMesh.md +30 -0
  343. package/dist/docs/reference/geometry/revolveMesh.md +76 -0
  344. package/dist/docs/reference/geometry/rotate2.md +36 -0
  345. package/dist/docs/reference/geometry/rotationTransform3.md +53 -0
  346. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +50 -0
  347. package/dist/docs/reference/geometry/sampleContour.md +77 -0
  348. package/dist/docs/reference/geometry/sampleCurve2.md +61 -0
  349. package/dist/docs/reference/geometry/sampleCurve3.md +61 -0
  350. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +58 -0
  351. package/dist/docs/reference/geometry/sampleHelix.md +41 -0
  352. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +59 -0
  353. package/dist/docs/reference/geometry/sampleRackToothPath.md +39 -0
  354. package/dist/docs/reference/geometry/sampleSideProfile.md +73 -0
  355. package/dist/docs/reference/geometry/sampleTextContours.md +53 -0
  356. package/dist/docs/reference/geometry/sampleThreadHelices.md +63 -0
  357. package/dist/docs/reference/geometry/scale2.md +36 -0
  358. package/dist/docs/reference/geometry/scale3.md +42 -0
  359. package/dist/docs/reference/geometry/scaleTransform3.md +38 -0
  360. package/dist/docs/reference/geometry/signedContourArea.md +26 -0
  361. package/dist/docs/reference/geometry/starContour.md +51 -0
  362. package/dist/docs/reference/geometry/strokePathRegion.md +63 -0
  363. package/dist/docs/reference/geometry/subtract2.md +36 -0
  364. package/dist/docs/reference/geometry/subtract3.md +42 -0
  365. package/dist/docs/reference/geometry/sweepMesh.md +82 -0
  366. package/dist/docs/reference/geometry/transform2.md +38 -0
  367. package/dist/docs/reference/geometry/transform3.md +38 -0
  368. package/dist/docs/reference/geometry/transformContour.md +42 -0
  369. package/dist/docs/reference/geometry/transformDeterminant3.md +36 -0
  370. package/dist/docs/reference/geometry/transformPath2.md +40 -0
  371. package/dist/docs/reference/geometry/transformPath3.md +33 -0
  372. package/dist/docs/reference/geometry/transformRegionData.md +40 -0
  373. package/dist/docs/reference/geometry/transformTriangleMesh.md +42 -0
  374. package/dist/docs/reference/geometry/translationTransform3.md +35 -0
  375. package/dist/docs/reference/geometry/triangulateContour.md +26 -0
  376. package/dist/docs/reference/geometry/validateSolidMesh.md +52 -0
  377. package/dist/docs/reference/geometry/validateTransform3.md +47 -0
  378. package/dist/docs/reference/geometry/validateTriangleMesh.md +59 -0
  379. package/dist/docs/reference/geometry/vector2.md +31 -0
  380. package/dist/docs/reference/geometry/vector3.md +38 -0
  381. package/dist/docs/reference/geometry.md +30 -0
  382. package/dist/docs/reference/model/Anchor3.md +54 -0
  383. package/dist/docs/reference/model/AttachOptions.md +63 -0
  384. package/dist/docs/reference/model/Bounds2.md +39 -0
  385. package/dist/docs/reference/model/Bounds3.md +39 -0
  386. package/dist/docs/reference/model/BoxEdge.md +15 -0
  387. package/dist/docs/reference/model/BoxEdgeSelection.md +19 -0
  388. package/dist/docs/reference/model/BoxEdgeTreatments.md +20 -0
  389. package/dist/docs/reference/model/BoxOptions.md +92 -0
  390. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +35 -0
  391. package/dist/docs/reference/model/CircleContourOptions.md +21 -0
  392. package/dist/docs/reference/model/CircleOptions.md +21 -0
  393. package/dist/docs/reference/model/CircularPrimitiveOptions.md +64 -0
  394. package/dist/docs/reference/model/Computed.md +35 -0
  395. package/dist/docs/reference/model/ComputedValue.md +20 -0
  396. package/dist/docs/reference/model/Contour.md +22 -0
  397. package/dist/docs/reference/model/CorrespondingComponent.md +46 -0
  398. package/dist/docs/reference/model/CorrespondingContour.md +46 -0
  399. package/dist/docs/reference/model/CorrespondingProfile.md +22 -0
  400. package/dist/docs/reference/model/CorrespondingProfileStation.md +27 -0
  401. package/dist/docs/reference/model/CylinderOptions.md +58 -0
  402. package/dist/docs/reference/model/DiagnosticOptions.md +23 -0
  403. package/dist/docs/reference/model/EdgeTreatment.md +22 -0
  404. package/dist/docs/reference/model/EllipseContourOptions.md +21 -0
  405. package/dist/docs/reference/model/EllipseOptions.md +21 -0
  406. package/dist/docs/reference/model/EndTreatments.md +39 -0
  407. package/dist/docs/reference/model/ExtrudeOptions.md +140 -0
  408. package/dist/docs/reference/model/FinalizedModel.md +121 -0
  409. package/dist/docs/reference/model/FinalizedPart.md +87 -0
  410. package/dist/docs/reference/model/Frame3.md +63 -0
  411. package/dist/docs/reference/model/GenerateCallback.md +37 -0
  412. package/dist/docs/reference/model/GenerateContext.md +277 -0
  413. package/dist/docs/reference/model/GeneratedPart.md +93 -0
  414. package/dist/docs/reference/model/GenerationDiagnostic.md +41 -0
  415. package/dist/docs/reference/model/GenerationError.md +54 -0
  416. package/dist/docs/reference/model/GeometryResolution.md +70 -0
  417. package/dist/docs/reference/model/GeometrySamplingLimits.md +62 -0
  418. package/dist/docs/reference/model/GeometryToleranceOptions.md +46 -0
  419. package/dist/docs/reference/model/GridPatternOptions.md +43 -0
  420. package/dist/docs/reference/model/HeightfieldOptions.md +67 -0
  421. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +140 -0
  422. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +58 -0
  423. package/dist/docs/reference/model/HullOptions.md +72 -0
  424. package/dist/docs/reference/model/ImmutableBuffer-type.md +80 -0
  425. package/dist/docs/reference/model/ImmutableTriangleMesh.md +34 -0
  426. package/dist/docs/reference/model/ImplicitOptions.md +83 -0
  427. package/dist/docs/reference/model/InternalThreadCutterOptions.md +245 -0
  428. package/dist/docs/reference/model/LinearPatternOptions.md +31 -0
  429. package/dist/docs/reference/model/LoftCorrespondence.md +27 -0
  430. package/dist/docs/reference/model/LoftOptions.md +91 -0
  431. package/dist/docs/reference/model/LoftPlacement.md +73 -0
  432. package/dist/docs/reference/model/LoftStation.md +35 -0
  433. package/dist/docs/reference/model/MatchProfilesOptions.md +35 -0
  434. package/dist/docs/reference/model/ModelProgram.md +44 -0
  435. package/dist/docs/reference/model/ModelingLimits.md +126 -0
  436. package/dist/docs/reference/model/NumericArray.md +7 -0
  437. package/dist/docs/reference/model/PartGeometry.md +16 -0
  438. package/dist/docs/reference/model/PartOptions.md +65 -0
  439. package/dist/docs/reference/model/Path2.md +20 -0
  440. package/dist/docs/reference/model/PathNormalGuide.md +45 -0
  441. package/dist/docs/reference/model/PathPatternOptions.md +47 -0
  442. package/dist/docs/reference/model/PatternSource.md +26 -0
  443. package/dist/docs/reference/model/Pivot2Options.md +27 -0
  444. package/dist/docs/reference/model/Pivot3Options.md +27 -0
  445. package/dist/docs/reference/model/PlaneOptions.md +39 -0
  446. package/dist/docs/reference/model/PolygonData.md +43 -0
  447. package/dist/docs/reference/model/PolygonOptions.md +189 -0
  448. package/dist/docs/reference/model/PrimitivePlacement.md +40 -0
  449. package/dist/docs/reference/model/PrimitivePlacementOptions.md +88 -0
  450. package/dist/docs/reference/model/PrintableThreadFit.md +14 -0
  451. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +50 -0
  452. package/dist/docs/reference/model/Profile.md +22 -0
  453. package/dist/docs/reference/model/ProfileComponent2.md +46 -0
  454. package/dist/docs/reference/model/ProfileContour2.md +34 -0
  455. package/dist/docs/reference/model/ProfileSpan2.md +47 -0
  456. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +41 -0
  457. package/dist/docs/reference/model/RadialPatternOptions.md +63 -0
  458. package/dist/docs/reference/model/RadialSizing.md +15 -0
  459. package/dist/docs/reference/model/RadialSizingOptions.md +40 -0
  460. package/dist/docs/reference/model/RectangleContourOptions.md +72 -0
  461. package/dist/docs/reference/model/RectangleCornerTreatment.md +40 -0
  462. package/dist/docs/reference/model/RectangleCornerTreatments.md +20 -0
  463. package/dist/docs/reference/model/RectangleOptions.md +107 -0
  464. package/dist/docs/reference/model/RegionData.md +19 -0
  465. package/dist/docs/reference/model/RegularPolygonOptions.md +53 -0
  466. package/dist/docs/reference/model/RevolveOptions.md +89 -0
  467. package/dist/docs/reference/model/RoundedEdgeTreatment.md +96 -0
  468. package/dist/docs/reference/model/Section.md +490 -0
  469. package/dist/docs/reference/model/SectionHullOptions.md +72 -0
  470. package/dist/docs/reference/model/SectionInspection.md +98 -0
  471. package/dist/docs/reference/model/SectionOffsetJoin.md +16 -0
  472. package/dist/docs/reference/model/SectionOffsetOptions.md +65 -0
  473. package/dist/docs/reference/model/SmoothEdgeTreatment.md +76 -0
  474. package/dist/docs/reference/model/Solid.md +373 -0
  475. package/dist/docs/reference/model/SolidInspection.md +98 -0
  476. package/dist/docs/reference/model/SolidRayHit.md +58 -0
  477. package/dist/docs/reference/model/SphereOptions.md +20 -0
  478. package/dist/docs/reference/model/StarOptions.md +98 -0
  479. package/dist/docs/reference/model/StrokeOptions.md +91 -0
  480. package/dist/docs/reference/model/StrokePathCap.md +16 -0
  481. package/dist/docs/reference/model/StrokePathJoin.md +16 -0
  482. package/dist/docs/reference/model/SvgOrigin.md +16 -0
  483. package/dist/docs/reference/model/SvgPathSectionOptions.md +78 -0
  484. package/dist/docs/reference/model/SvgSectionOptions.md +66 -0
  485. package/dist/docs/reference/model/SweepOptions.md +116 -0
  486. package/dist/docs/reference/model/SweepOrientation.md +116 -0
  487. package/dist/docs/reference/model/TextSectionOptions.md +41 -0
  488. package/dist/docs/reference/model/ThreadEndStyle.md +14 -0
  489. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +117 -0
  490. package/dist/docs/reference/model/ThreadHandedness.md +14 -0
  491. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +14 -0
  492. package/dist/docs/reference/model/ThreadLeadInShape.md +14 -0
  493. package/dist/docs/reference/model/ThreadProfile.md +86 -0
  494. package/dist/docs/reference/model/ThreadRidgeOptions.md +18 -0
  495. package/dist/docs/reference/model/ThreadedNutBevel.md +14 -0
  496. package/dist/docs/reference/model/ThreadedNutOptions.md +273 -0
  497. package/dist/docs/reference/model/ThreadedNutPreflight.md +98 -0
  498. package/dist/docs/reference/model/ThreadedNutShape.md +14 -0
  499. package/dist/docs/reference/model/ThreadedRodOptions.md +245 -0
  500. package/dist/docs/reference/model/TorusOptions.md +110 -0
  501. package/dist/docs/reference/model/Transform2-type.md +256 -0
  502. package/dist/docs/reference/model/Transform2Input.md +20 -0
  503. package/dist/docs/reference/model/Transform2Matrix.md +15 -0
  504. package/dist/docs/reference/model/Transform3-type.md +296 -0
  505. package/dist/docs/reference/model/Transform3Input.md +20 -0
  506. package/dist/docs/reference/model/Transform3Matrix.md +18 -0
  507. package/dist/docs/reference/model/TriangleMesh.md +42 -0
  508. package/dist/docs/reference/model/TriangleMeshAnalysis.md +123 -0
  509. package/dist/docs/reference/model/TriangleMeshMeasurements.md +79 -0
  510. package/dist/docs/reference/model/TubeOptions.md +143 -0
  511. package/dist/docs/reference/model/Vector2-type.md +270 -0
  512. package/dist/docs/reference/model/Vector2Input.md +20 -0
  513. package/dist/docs/reference/model/Vector2Tuple.md +15 -0
  514. package/dist/docs/reference/model/Vector3-type.md +282 -0
  515. package/dist/docs/reference/model/Vector3Input.md +20 -0
  516. package/dist/docs/reference/model/Vector3Tuple.md +15 -0
  517. package/dist/docs/reference/model/VectorTextLayout.md +40 -0
  518. package/dist/docs/reference/model/VectorTextMetrics.md +100 -0
  519. package/dist/docs/reference/model/anchor.md +46 -0
  520. package/dist/docs/reference/model/box.md +62 -0
  521. package/dist/docs/reference/model/categories/boolean-operations.md +37 -0
  522. package/dist/docs/reference/model/categories/bounded-surfaces.md +26 -0
  523. package/dist/docs/reference/model/categories/contracts.md +16 -0
  524. package/dist/docs/reference/model/categories/core-values-errors.md +30 -0
  525. package/dist/docs/reference/model/categories/explicit-profiles.md +32 -0
  526. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +42 -0
  527. package/dist/docs/reference/model/categories/generation.md +44 -0
  528. package/dist/docs/reference/model/categories/inspection.md +23 -0
  529. package/dist/docs/reference/model/categories/mesh-inspection.md +29 -0
  530. package/dist/docs/reference/model/categories/primitives.md +61 -0
  531. package/dist/docs/reference/model/categories/resolution.md +18 -0
  532. package/dist/docs/reference/model/categories/sections.md +62 -0
  533. package/dist/docs/reference/model/categories/threads.md +50 -0
  534. package/dist/docs/reference/model/categories/transforms-placement.md +57 -0
  535. package/dist/docs/reference/model/circle.md +39 -0
  536. package/dist/docs/reference/model/components.md +71 -0
  537. package/dist/docs/reference/model/compose.md +31 -0
  538. package/dist/docs/reference/model/cylinder.md +52 -0
  539. package/dist/docs/reference/model/distance.md +45 -0
  540. package/dist/docs/reference/model/ellipse.md +39 -0
  541. package/dist/docs/reference/model/extrude.md +83 -0
  542. package/dist/docs/reference/model/generate.md +46 -0
  543. package/dist/docs/reference/model/gridPattern.md +80 -0
  544. package/dist/docs/reference/model/heightfield.md +40 -0
  545. package/dist/docs/reference/model/hull.md +74 -0
  546. package/dist/docs/reference/model/immutableBuffer.md +44 -0
  547. package/dist/docs/reference/model/immutableMesh.md +40 -0
  548. package/dist/docs/reference/model/implicit.md +47 -0
  549. package/dist/docs/reference/model/inspectSection.md +38 -0
  550. package/dist/docs/reference/model/inspectSolid.md +38 -0
  551. package/dist/docs/reference/model/internalThreadCutter.md +100 -0
  552. package/dist/docs/reference/model/intersect.md +70 -0
  553. package/dist/docs/reference/model/isEmpty.md +39 -0
  554. package/dist/docs/reference/model/linearPattern.md +80 -0
  555. package/dist/docs/reference/model/loft.md +137 -0
  556. package/dist/docs/reference/model/matchProfiles.md +42 -0
  557. package/dist/docs/reference/model/minkowskiSum.md +37 -0
  558. package/dist/docs/reference/model/pathPattern.md +118 -0
  559. package/dist/docs/reference/model/polygon.md +40 -0
  560. package/dist/docs/reference/model/preflightInternalThreadCutter.md +89 -0
  561. package/dist/docs/reference/model/preflightThreadedNut.md +100 -0
  562. package/dist/docs/reference/model/preflightThreadedRod.md +89 -0
  563. package/dist/docs/reference/model/radialPattern.md +113 -0
  564. package/dist/docs/reference/model/rayCast.md +40 -0
  565. package/dist/docs/reference/model/rectangle.md +59 -0
  566. package/dist/docs/reference/model/regularPolygon.md +39 -0
  567. package/dist/docs/reference/model/revolve.md +74 -0
  568. package/dist/docs/reference/model/solidFromMesh.md +42 -0
  569. package/dist/docs/reference/model/sphere.md +42 -0
  570. package/dist/docs/reference/model/split.md +54 -0
  571. package/dist/docs/reference/model/splitByPlane.md +66 -0
  572. package/dist/docs/reference/model/star.md +63 -0
  573. package/dist/docs/reference/model/stroke.md +74 -0
  574. package/dist/docs/reference/model/svgPathSection.md +65 -0
  575. package/dist/docs/reference/model/svgSection.md +64 -0
  576. package/dist/docs/reference/model/sweep.md +92 -0
  577. package/dist/docs/reference/model/textSection.md +57 -0
  578. package/dist/docs/reference/model/threadRidge.md +72 -0
  579. package/dist/docs/reference/model/threadedNut.md +110 -0
  580. package/dist/docs/reference/model/threadedRod.md +99 -0
  581. package/dist/docs/reference/model/toTriangleMesh.md +27 -0
  582. package/dist/docs/reference/model/torus.md +70 -0
  583. package/dist/docs/reference/model/transform2.md +39 -0
  584. package/dist/docs/reference/model/transform3.md +39 -0
  585. package/dist/docs/reference/model/tube.md +77 -0
  586. package/dist/docs/reference/model/union.md +72 -0
  587. package/dist/docs/reference/model/vector2.md +32 -0
  588. package/dist/docs/reference/model/vector3.md +39 -0
  589. package/dist/docs/reference/model.md +39 -0
  590. package/dist/docs/reference/text/Bounds2.md +34 -0
  591. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -0
  592. package/dist/docs/reference/text/Vector2Tuple.md +7 -0
  593. package/dist/docs/reference/text/VectorFont.md +186 -0
  594. package/dist/docs/reference/text/VectorFontOptions.md +17 -0
  595. package/dist/docs/reference/text/VectorTextArcBaseline.md +53 -0
  596. package/dist/docs/reference/text/VectorTextLayout.md +34 -0
  597. package/dist/docs/reference/text/VectorTextLayoutOptions.md +111 -0
  598. package/dist/docs/reference/text/VectorTextMetrics.md +94 -0
  599. package/dist/docs/reference/text/VectorTextOptions.md +50 -0
  600. package/dist/docs/reference/text/categories/font-preparation.md +38 -0
  601. package/dist/docs/reference/text/prepareVectorFont.md +46 -0
  602. package/dist/docs/reference/text.md +21 -0
  603. package/dist/engine/construction-operations.js +10 -3
  604. package/dist/engine/deferred-context.js +11 -172
  605. package/dist/engine/execution.js +1 -1
  606. package/dist/engine/export-3mf.js +2 -2
  607. package/dist/engine/finalization.js +3 -3
  608. package/dist/engine/loft-operations.js +4 -4
  609. package/dist/engine/native/adapter.js +1 -1
  610. package/dist/engine/native/regions.js +9 -9
  611. package/dist/engine/native/transforms.js +6 -1
  612. package/dist/engine/pattern-operations.js +24 -13
  613. package/dist/engine/placement.js +2 -2
  614. package/dist/engine/primitive-operations.js +10 -10
  615. package/dist/engine/primitive-profiles.js +1 -0
  616. package/dist/engine/profile-mesh.js +7 -7
  617. package/dist/engine/recipe-realization.js +29 -21
  618. package/dist/engine/section-operations.js +44 -17
  619. package/dist/engine/session-graph.js +6 -4
  620. package/dist/engine/session-native.js +1 -1
  621. package/dist/engine/session-snapshot.js +3 -2
  622. package/dist/engine/session.js +4 -5
  623. package/dist/engine/shape-anchors.js +3 -9
  624. package/dist/engine/transform-operations.js +42 -25
  625. package/dist/geometry/bounds.js +117 -0
  626. package/dist/geometry/cylinder.js +5 -1
  627. package/dist/geometry/edge-finishing.js +2 -2
  628. package/dist/geometry/heightfield.js +1 -1
  629. package/dist/geometry/index.js +20 -13
  630. package/dist/geometry/{loft-correspondence.js → loft/loft-correspondence.js} +3 -3
  631. package/dist/geometry/{loft-geometry.js → loft/loft-geometry.js} +8 -8
  632. package/dist/geometry/{loft-options.js → loft/loft-options.js} +2 -2
  633. package/dist/geometry/{loft-simple-mesh.js → loft/loft-simple-mesh.js} +6 -6
  634. package/dist/geometry/{loft-triangulation.js → loft/loft-triangulation.js} +6 -6
  635. package/dist/geometry/{loft.js → loft/loft.js} +8 -8
  636. package/dist/geometry/math/immutable-value.js +20 -0
  637. package/dist/geometry/math/vector-value.js +168 -0
  638. package/dist/geometry/math/vector2.js +80 -0
  639. package/dist/geometry/math/vector3.js +42 -8
  640. package/dist/geometry/mechanical/gear-motion.js +7 -4
  641. package/dist/geometry/mechanical/gears.js +2 -2
  642. package/dist/geometry/mechanical/thread-mesh.js +3 -3
  643. package/dist/geometry/mechanical/thread-profiles.js +2 -2
  644. package/dist/geometry/mechanical/thread-surface.js +14 -5
  645. package/dist/geometry/{mesh-centroid.js → mesh/mesh-centroid.js} +1 -1
  646. package/dist/geometry/{mesh-planar.js → mesh/mesh-planar.js} +1 -1
  647. package/dist/geometry/{mesh-quality.js → mesh/mesh-quality.js} +2 -2
  648. package/dist/geometry/{mesh-signature.js → mesh/mesh-signature.js} +2 -2
  649. package/dist/geometry/{mesh-solid-intersections.js → mesh/mesh-solid-intersections.js} +5 -1
  650. package/dist/geometry/{mesh-solid.js → mesh/mesh-solid.js} +2 -2
  651. package/dist/geometry/{mesh.js → mesh/mesh.js} +7 -8
  652. package/dist/geometry/paths/closest-point.js +74 -0
  653. package/dist/geometry/paths/frames.js +7 -8
  654. package/dist/geometry/patterns/options.js +1 -0
  655. package/dist/{engine/pattern-placements.js → geometry/patterns/placements.js} +22 -8
  656. package/dist/geometry/patterns.js +25 -0
  657. package/dist/geometry/primitive-resolution.js +4 -1
  658. package/dist/geometry/primitive-resolvers.js +9 -9
  659. package/dist/geometry/profiles/contour.js +3 -3
  660. package/dist/geometry/profiles/matched.js +3 -3
  661. package/dist/geometry/profiles/profiles.js +10 -10
  662. package/dist/geometry/profiles/rectangle.js +7 -7
  663. package/dist/geometry/profiles/shapes.js +9 -9
  664. package/dist/geometry/profiles/side-profile.js +37 -0
  665. package/dist/geometry/regions.js +15 -15
  666. package/dist/geometry/resolution.js +17 -5
  667. package/dist/geometry/revolve/revolve-mesh.js +5 -5
  668. package/dist/geometry/stroke-path.js +50 -46
  669. package/dist/geometry/svg/errors.js +0 -3
  670. package/dist/geometry/svg/fill.js +7 -7
  671. package/dist/geometry/svg/index.js +1 -1
  672. package/dist/geometry/svg/matrix.js +0 -114
  673. package/dist/geometry/svg/parser.js +1 -439
  674. package/dist/geometry/svg-import.js +3 -3
  675. package/dist/geometry/sweeps/stations.js +4 -4
  676. package/dist/geometry/sweeps/sweep-closed.js +4 -4
  677. package/dist/geometry/sweeps/sweep-mesh.js +1 -1
  678. package/dist/geometry/sweeps/sweep-open.js +6 -6
  679. package/dist/geometry/sweeps/validation.js +2 -2
  680. package/dist/geometry/text-fitting.js +85 -0
  681. package/dist/geometry/tolerance.js +2 -2
  682. package/dist/geometry/transform-chain.js +172 -0
  683. package/dist/geometry/transform-geometry.js +31 -27
  684. package/dist/geometry/transform-matrix.js +14 -0
  685. package/dist/geometry/transform2.js +60 -0
  686. package/dist/geometry/transform3.js +70 -26
  687. package/dist/index.js +3 -0
  688. package/dist/model/execution-binding.js +10 -5
  689. package/dist/model/generation.js +1 -1
  690. package/dist/model/geometry-recipes.js +15 -0
  691. package/dist/{engine → model}/immutable-generation-data.js +25 -3
  692. package/dist/model/operation-contracts.js +1 -0
  693. package/dist/model/operation-dispatch.js +13 -0
  694. package/dist/model/operations.js +40 -59
  695. package/dist/model/recipe-declaration.js +193 -0
  696. package/dist/model/shape-handles.js +15 -4
  697. package/package.json +10 -8
  698. package/dist/engine/geometry-recipes.js +0 -12
  699. /package/dist/geometry/{mesh-edge-table.js → mesh/mesh-edge-table.js} +0 -0
@@ -0,0 +1,168 @@
1
+ import { GeometryError } from "../errors.js";
2
+ import { immutableMathClass } from "./immutable-value.js";
3
+ import { add2, cross2, distance2, dot2, length2, lerp2, normalize2, scale2, subtract2, } from "./vector2.js";
4
+ import { add3, cross3, distance3, dot3, length3, lerp3, normalize3, scale3, subtract3, } from "./vector3.js";
5
+ const finite = (value, operation) => {
6
+ if (!Number.isFinite(value)) {
7
+ throw new GeometryError("NON_FINITE_VALUE", "Vector coordinates and results must be finite.", {
8
+ operation,
9
+ });
10
+ }
11
+ return value;
12
+ };
13
+ const validateCoordinates = (values, operation) => {
14
+ for (const coordinate of values)
15
+ finite(coordinate, operation);
16
+ };
17
+ const operand2 = (input, operation) => {
18
+ const values = vector2Data(input);
19
+ validateCoordinates(values, operation);
20
+ return values;
21
+ };
22
+ const operand3 = (input, operation) => {
23
+ const values = vector3Data(input);
24
+ validateCoordinates(values, operation);
25
+ return values;
26
+ };
27
+ function invalidVector(dimensions) {
28
+ throw new GeometryError("INVALID_ARGUMENT", `Expected a ${dimensions}D vector or coordinate tuple.`, {
29
+ operation: `vector${dimensions}`,
30
+ });
31
+ }
32
+ const tupleData = (input, dimensions) => {
33
+ if (typeof input !== "object" || input === null)
34
+ return invalidVector(dimensions);
35
+ let values = input;
36
+ if (!Array.isArray(input)) {
37
+ const method = Reflect.get(input, "toArray");
38
+ if (typeof method !== "function")
39
+ return invalidVector(dimensions);
40
+ values = Reflect.apply(method, input, []);
41
+ }
42
+ if (!Array.isArray(values) || values.length !== dimensions)
43
+ return invalidVector(dimensions);
44
+ return values;
45
+ };
46
+ /** Internal tuple view; validates dimension and shape without allocating or checking finiteness. */
47
+ export const vector2Data = (input) => tupleData(input, 2);
48
+ /** Internal tuple view; validates dimension and shape without allocating or checking finiteness. */
49
+ export const vector3Data = (input) => tupleData(input, 3);
50
+ const PlanarVector = /* @__PURE__ */ immutableMathClass(class PlanarVector {
51
+ values;
52
+ constructor(values, operation = "vector2") {
53
+ this.values = values;
54
+ validateCoordinates(values, operation);
55
+ Object.freeze(values);
56
+ Object.freeze(this);
57
+ }
58
+ get x() {
59
+ return this.values[0];
60
+ }
61
+ get y() {
62
+ return this.values[1];
63
+ }
64
+ add(other) {
65
+ return new PlanarVector(add2(this.values, operand2(other, "vector2.add")), "vector2.add");
66
+ }
67
+ subtract(other) {
68
+ return new PlanarVector(subtract2(this.values, operand2(other, "vector2.subtract")), "vector2.subtract");
69
+ }
70
+ scale(factor) {
71
+ return new PlanarVector(scale2(this.values, finite(factor, "vector2.scale")), "vector2.scale");
72
+ }
73
+ normalize(epsilon) {
74
+ return new PlanarVector(normalize2(this.values, epsilon), "vector2.normalize");
75
+ }
76
+ lerp(other, t) {
77
+ return new PlanarVector(lerp2(this.values, operand2(other, "vector2.lerp"), finite(t, "vector2.lerp")), "vector2.lerp");
78
+ }
79
+ dot(other) {
80
+ return finite(dot2(this.values, operand2(other, "vector2.dot")), "vector2.dot");
81
+ }
82
+ cross(other) {
83
+ return finite(cross2(this.values, operand2(other, "vector2.cross")), "vector2.cross");
84
+ }
85
+ length() {
86
+ return finite(length2(this.values), "vector2.length");
87
+ }
88
+ distance(other) {
89
+ return finite(distance2(this.values, operand2(other, "vector2.distance")), "vector2.distance");
90
+ }
91
+ toArray() {
92
+ return this.values;
93
+ }
94
+ });
95
+ const SpatialVector = /* @__PURE__ */ immutableMathClass(class SpatialVector {
96
+ values;
97
+ constructor(values, operation = "vector3") {
98
+ this.values = values;
99
+ validateCoordinates(values, operation);
100
+ Object.freeze(values);
101
+ Object.freeze(this);
102
+ }
103
+ get x() {
104
+ return this.values[0];
105
+ }
106
+ get y() {
107
+ return this.values[1];
108
+ }
109
+ get z() {
110
+ return this.values[2];
111
+ }
112
+ add(other) {
113
+ return new SpatialVector(add3(this.values, operand3(other, "vector3.add")), "vector3.add");
114
+ }
115
+ subtract(other) {
116
+ return new SpatialVector(subtract3(this.values, operand3(other, "vector3.subtract")), "vector3.subtract");
117
+ }
118
+ scale(factor) {
119
+ return new SpatialVector(scale3(this.values, finite(factor, "vector3.scale")), "vector3.scale");
120
+ }
121
+ normalize(epsilon) {
122
+ return new SpatialVector(normalize3(this.values, epsilon), "vector3.normalize");
123
+ }
124
+ lerp(other, t) {
125
+ return new SpatialVector(lerp3(this.values, operand3(other, "vector3.lerp"), finite(t, "vector3.lerp")), "vector3.lerp");
126
+ }
127
+ dot(other) {
128
+ return finite(dot3(this.values, operand3(other, "vector3.dot")), "vector3.dot");
129
+ }
130
+ cross(other) {
131
+ return new SpatialVector(cross3(this.values, operand3(other, "vector3.cross")), "vector3.cross");
132
+ }
133
+ length() {
134
+ return finite(length3(this.values), "vector3.length");
135
+ }
136
+ distance(other) {
137
+ return finite(distance3(this.values, operand3(other, "vector3.distance")), "vector3.distance");
138
+ }
139
+ toArray() {
140
+ return this.values;
141
+ }
142
+ });
143
+ /**
144
+ * Creates immutable XY arithmetic from a finite tuple or vector, snapshotting the coordinates.
145
+ * Values and results are finite. Invalid dimensions throw `INVALID_ARGUMENT`; nonfinite coordinates
146
+ * and overflow throw `NON_FINITE_VALUE` GeometryError.
147
+ * Use transform2().applyDirection(value) for rotations and nonuniform scaling.
148
+ */
149
+ export function vector2(input) {
150
+ const values = operand2(input, "vector2");
151
+ return new PlanarVector([values[0], values[1]]);
152
+ }
153
+ /**
154
+ * Creates immutable XYZ arithmetic from a finite tuple or vector, snapshotting the coordinates.
155
+ * Values and results are finite. Invalid dimensions throw `INVALID_ARGUMENT`; nonfinite coordinates
156
+ * and overflow throw `NON_FINITE_VALUE` GeometryError.
157
+ * Use transform3().applyDirection(value) for rotations and nonuniform scaling.
158
+ *
159
+ * @example
160
+ * ```ts
161
+ * const direction = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
162
+ * const alignment = direction.dot([0, 0, 1]);
163
+ * ```
164
+ */
165
+ export function vector3(input) {
166
+ const values = operand3(input, "vector3");
167
+ return new SpatialVector([values[0], values[1], values[2]]);
168
+ }
@@ -0,0 +1,80 @@
1
+ import { GeometryError } from "../errors.js";
2
+ /** Adds two finite XY vectors component-wise. */
3
+ export const add2 = (a, b) => [a[0] + b[0], a[1] + b[1]];
4
+ /** Subtracts `b` from `a` component-wise. */
5
+ export const subtract2 = (a, b) => [
6
+ a[0] - b[0],
7
+ a[1] - b[1],
8
+ ];
9
+ /** Multiplies a vector by a dimensionless scalar. */
10
+ export const scale2 = (vector, scale) => [
11
+ vector[0] * scale,
12
+ vector[1] * scale,
13
+ ];
14
+ /** Returns the scalar dot product. */
15
+ export const dot2 = (a, b) => a[0] * b[0] + a[1] * b[1];
16
+ /** Returns the signed scalar cross product; positive means `b` is counter-clockwise from `a`. */
17
+ export const cross2 = (a, b) => a[0] * b[1] - a[1] * b[0];
18
+ /** Returns Euclidean vector length in the vector's coordinate units. */
19
+ export const length2 = (vector) => Math.hypot(vector[0], vector[1]);
20
+ /** Returns Euclidean point distance without allocating an intermediate difference vector. */
21
+ export const distance2 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1]);
22
+ /**
23
+ * Returns a unit vector; `epsilon` is a finite, non-negative length threshold (default `1e-12`).
24
+ * Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
25
+ * `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
26
+ */
27
+ export const normalize2 = (vector, epsilon = 1e-12) => {
28
+ const operation = "normalize2";
29
+ if (!Number.isFinite(epsilon) || epsilon < 0) {
30
+ throw new GeometryError("INVALID_TOLERANCE", "epsilon must be finite and non-negative.", {
31
+ operation,
32
+ });
33
+ }
34
+ const length = length2(vector);
35
+ if (!Number.isFinite(length)) {
36
+ throw new GeometryError("NON_FINITE_VALUE", "Cannot normalize a vector without finite length.", {
37
+ operation,
38
+ });
39
+ }
40
+ if (length <= epsilon) {
41
+ throw new GeometryError("DEGENERATE_GEOMETRY", "Cannot normalize a zero-length vector.", {
42
+ operation,
43
+ });
44
+ }
45
+ // Subnormal lengths lose relative precision; rescale only this rare case before division.
46
+ if (length < 2 ** -1022) {
47
+ const maximum = Math.max(Math.abs(vector[0]), Math.abs(vector[1]));
48
+ const x = vector[0] / maximum;
49
+ const y = vector[1] / maximum;
50
+ const scaledLength = Math.hypot(x, y);
51
+ return [x / scaledLength, y / scaledLength];
52
+ }
53
+ return [vector[0] / length, vector[1] / length];
54
+ };
55
+ /** Linearly interpolates two vectors; `t` is dimensionless and may extrapolate. */
56
+ export const lerp2 = (a, b, t) => add2(a, scale2(subtract2(b, a), t));
57
+ /**
58
+ * Rotates a finite vector counter-clockwise in XY by `degrees` about the origin.
59
+ * Throws `NON_FINITE_VALUE` for nonfinite coordinates, angles, or derived coordinates.
60
+ */
61
+ export const rotate2 = (vector, degrees) => {
62
+ if (!Number.isFinite(vector[0]) || !Number.isFinite(vector[1]) || !Number.isFinite(degrees)) {
63
+ throw new GeometryError("NON_FINITE_VALUE", "Rotation coordinates and angle must be finite.", {
64
+ operation: "rotate2",
65
+ });
66
+ }
67
+ const radians = degrees * (Math.PI / 180);
68
+ const cosine = Math.cos(radians);
69
+ const sine = Math.sin(radians);
70
+ const rotated = [
71
+ vector[0] * cosine - vector[1] * sine,
72
+ vector[0] * sine + vector[1] * cosine,
73
+ ];
74
+ if (!Number.isFinite(rotated[0]) || !Number.isFinite(rotated[1])) {
75
+ throw new GeometryError("NON_FINITE_VALUE", "Rotated coordinates must remain finite.", {
76
+ operation: "rotate2",
77
+ });
78
+ }
79
+ return rotated;
80
+ };
@@ -1,3 +1,4 @@
1
+ import { GeometryError } from "../errors.js";
1
2
  /**
2
3
  * Adds two finite XYZ vectors component-wise.
3
4
  * @example
@@ -5,7 +6,11 @@
5
6
  * add3([1, 2, 3], [4, 5, 6]); // [5, 7, 9]
6
7
  * ```
7
8
  */
8
- export const add3 = (a, b) => [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
9
+ export const add3 = (a, b) => [
10
+ a[0] + b[0],
11
+ a[1] + b[1],
12
+ a[2] + b[2],
13
+ ];
9
14
  /**
10
15
  * Subtracts `b` from `a`.
11
16
  * @example
@@ -13,7 +18,11 @@ export const add3 = (a, b) => [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
13
18
  * subtract3([4, 5, 6], [1, 2, 3]); // [3, 3, 3]
14
19
  * ```
15
20
  */
16
- export const subtract3 = (a, b) => [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
21
+ export const subtract3 = (a, b) => [
22
+ a[0] - b[0],
23
+ a[1] - b[1],
24
+ a[2] - b[2],
25
+ ];
17
26
  /**
18
27
  * Multiplies a vector by a dimensionless scalar.
19
28
  * @example
@@ -48,23 +57,48 @@ export const cross3 = (a, b) => [
48
57
  ];
49
58
  /** Returns Euclidean vector length in the vector's coordinate units. */
50
59
  export const length3 = (vector) => Math.hypot(vector[0], vector[1], vector[2]);
51
- /** Normalizes a finite vector and rejects nonfinite lengths or lengths at or below `epsilon`. */
60
+ /** Returns Euclidean point distance without allocating an intermediate difference vector. */
61
+ export const distance3 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
62
+ /**
63
+ * Returns a unit vector; `epsilon` is a finite, non-negative length threshold (default `1e-12`).
64
+ * Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
65
+ * `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
66
+ */
52
67
  export const normalize3 = (vector, epsilon = 1e-12) => {
68
+ const operation = "normalize3";
69
+ if (!Number.isFinite(epsilon) || epsilon < 0) {
70
+ throw new GeometryError("INVALID_TOLERANCE", "epsilon must be finite and non-negative.", {
71
+ operation,
72
+ });
73
+ }
53
74
  const length = length3(vector);
54
75
  if (!Number.isFinite(length)) {
55
- throw new Error("Cannot normalize a vector without finite length.");
76
+ throw new GeometryError("NON_FINITE_VALUE", "Cannot normalize a vector without finite length.", {
77
+ operation,
78
+ });
56
79
  }
57
80
  if (length <= epsilon) {
58
- throw new Error("Cannot normalize a zero-length vector.");
81
+ throw new GeometryError("DEGENERATE_GEOMETRY", "Cannot normalize a zero-length vector.", {
82
+ operation,
83
+ });
84
+ }
85
+ // Subnormal lengths lose relative precision; rescale only this rare case before division.
86
+ if (length < 2 ** -1022) {
87
+ const maximum = Math.max(Math.abs(vector[0]), Math.abs(vector[1]), Math.abs(vector[2]));
88
+ const x = vector[0] / maximum;
89
+ const y = vector[1] / maximum;
90
+ const z = vector[2] / maximum;
91
+ const scaledLength = Math.hypot(x, y, z);
92
+ return [x / scaledLength, y / scaledLength, z / scaledLength];
59
93
  }
60
- return scale3(vector, 1 / length);
94
+ return [vector[0] / length, vector[1] / length, vector[2] / length];
61
95
  };
62
96
  /** Linearly interpolates two vectors; `t` is dimensionless and may extrapolate. */
63
97
  export const lerp3 = (a, b, t) => add3(a, scale3(subtract3(b, a), t));
64
98
  /** Removes the component parallel to a normalized plane normal. */
65
99
  export const projectOntoPlane3 = (vector, normal) => subtract3(vector, scale3(normal, dot3(vector, normal)));
66
- /** Rotates a vector right-handed around an axis by `angle` radians. */
67
- export const rotateAroundAxis3 = (vector, axis, angle) => {
100
+ /** Rotates a vector right-handed around a unit axis by `angle` radians. */
101
+ export const rotateAroundAxis3Radians = (vector, axis, angle) => {
68
102
  const cosine = Math.cos(angle);
69
103
  const sine = Math.sin(angle);
70
104
  return add3(add3(scale3(vector, cosine), scale3(cross3(axis, vector), sine)), scale3(axis, dot3(axis, vector) * (1 - cosine)));
@@ -50,7 +50,8 @@ const multiPolygonArea = (multiPolygon) => multiPolygon.reduce((total, polygon)
50
50
  /**
51
51
  * Measures sampled kinematic interference over one tooth cycle of an internal gear pair.
52
52
  *
53
- * The driver and ring rotate in the same direction at their resolved tooth-count ratio. Each
53
+ * The driver and ring start with half-tooth offsets for odd tooth counts, then rotate in the
54
+ * same direction at their resolved tooth-count ratio. Each
54
55
  * sampled pinion outline is subtracted from the ring's center-and-space opening; remaining area is
55
56
  * solid overlap. This catches involute, tip, and trimming interference that a single assembled pose
56
57
  * misses. It is a deterministic model check, not a certified gear-rating calculation.
@@ -71,11 +72,13 @@ export function measureInternalCylindricalGearPairMotion(spec, options = {}) {
71
72
  const ringTipRadius = pair.driven.pitchRadius - pair.driven.addendum;
72
73
  const contactWindow = contactWindowPolygon(pair.centerDistance, pair.driver.outsideRadius, ringTipRadius);
73
74
  const initialRingPhase = pair.driven.toothCount % 2 === 0 ? 0 : pair.driven.angularPitch / 2;
75
+ const initialDriverPhase = pair.driver.toothCount % 2 === 0 ? 0 : pair.driver.angularPitch / 2;
74
76
  let maximumOverlapArea = 0;
75
- let maximumPhase = 0;
77
+ let maximumPhase = initialDriverPhase;
76
78
  for (let sample = 0; sample < samples; sample += 1) {
77
- const driverPhase = (pair.driver.angularPitch * sample) / samples;
78
- const drivenPhase = initialRingPhase + driverPhase / pair.ratio;
79
+ const phase = (pair.driver.angularPitch * sample) / samples;
80
+ const driverPhase = initialDriverPhase + phase;
81
+ const drivenPhase = initialRingPhase + phase / pair.ratio;
79
82
  const posedDriver = clippingPolygon(transformedLoop(driver, driverPhase));
80
83
  const posedSpace = clippingPolygon(transformedLoop(ringSpace, drivenPhase, pair.centerDistance));
81
84
  const contactDriver = polygonClipping.intersection(posedDriver, contactWindow);
@@ -1,5 +1,5 @@
1
1
  import { GeometryError } from "../errors.js";
2
- import { signedAreaLoop2 } from "../regions.js";
2
+ import { signedContourArea } from "../regions.js";
3
3
  import { resolveCircularSegments, resolveGeometryResolution, } from "../resolution.js";
4
4
  import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
5
5
  const DEFAULT_PRESSURE_ANGLE_DEGREES = 20;
@@ -398,7 +398,7 @@ const sampleResolvedCylindricalGearOutline = (dimensions, options, operation) =>
398
398
  }
399
399
  }
400
400
  points.pop();
401
- if (!(signedAreaLoop2(points) > 0)) {
401
+ if (!(signedContourArea(points) > 0)) {
402
402
  throw new GeometryError("INVALID_TOPOLOGY", "The sampled gear outline must be counter-clockwise.", {
403
403
  operation,
404
404
  });
@@ -1,6 +1,6 @@
1
1
  /** Closed ridge and complete-solid mesh construction from resolved thread plans. */
2
- import { triangulateLoop2 } from "../loft.js";
3
- import { joinTriangleMeshes, measureTriangleMesh, reverseTriangleMesh, validateTriangleMesh, } from "../mesh.js";
2
+ import { triangulateContour } from "../loft/loft.js";
3
+ import { joinTriangleMeshes, measureTriangleMesh, reverseTriangleMesh, validateTriangleMesh, } from "../mesh/mesh.js";
4
4
  import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../model-limits.js";
5
5
  import { resolveHelicalThreadMeshOptions, resolveHelicalThreadSolidMeshPreflight, } from "./thread-mesh-plan.js";
6
6
  import { buildThreadSurfaceColumn, stitchThreadSurfaceColumns } from "./thread-surface.js";
@@ -45,7 +45,7 @@ const buildThreadRidgeComponent = (options) => {
45
45
  const c = (column + 1) * size + next, d = (column + 1) * size + point;
46
46
  indices.push(a, b, c, a, c, d);
47
47
  }
48
- const capTriangles = triangulateLoop2([...section].reverse());
48
+ const capTriangles = triangulateContour([...section].reverse());
49
49
  const cap = (column, top) => {
50
50
  for (let offset = 0; offset < capTriangles.length; offset += 3) {
51
51
  const a = column * size + (size - 1 - capTriangles[offset]);
@@ -1,6 +1,6 @@
1
1
  /** Periodic thread profiles and axial/radial fit compensation. */
2
2
  import { GeometryError } from "../errors.js";
3
- import { triangulateLoop2 } from "../loft.js";
3
+ import { triangulateContour } from "../loft/loft.js";
4
4
  import { resolveGeometryTolerance } from "../tolerance.js";
5
5
  const BUTTRESS_DEFAULT_DEPTH_RATIO = 0.66271;
6
6
  const BUTTRESS_CREST_FLAT_RATIO = 0.16316;
@@ -207,7 +207,7 @@ export const createThreadRidgeSection = (points, minimum, linearTolerance, opera
207
207
  // closing the ridge section retraces its minor-envelope edge, creating overlapping cap faces and
208
208
  // zero-area triangles. Keep exactly the connected tooth plus its two root transition points.
209
209
  const section = points.slice(firstRaised - 1, lastRaised + 2);
210
- triangulateLoop2([...section].reverse());
210
+ triangulateContour([...section].reverse());
211
211
  return section;
212
212
  };
213
213
  const standardProfile = (kind, pitch, depth, root, crest, leftRun, rightRun) => {
@@ -124,7 +124,7 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
124
124
  };
125
125
  const candidates = [];
126
126
  let order = 0;
127
- const add = (z, kind = "regular", profileRadial, endFactor, surfaceRadius, profileOrdinal, atLeadTip = false) => {
127
+ const add = (z, { kind = "regular", profileRadial, endFactor, surfaceRadius, profileOrdinal, atLeadTip = false, } = {}) => {
128
128
  if (z < -resolved.tolerance.linear || z > resolved.length + resolved.tolerance.linear)
129
129
  return;
130
130
  candidates.push({
@@ -182,7 +182,12 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
182
182
  // redundant in this sparse mesher and would reintroduce dense, near-collinear triangles.
183
183
  for (const [profileIndex, [profileAxial, profileRadial],] of resolved.surfaceSection.entries()) {
184
184
  const profileRadius = majorRadius + profileRadial;
185
- add(center + profileAxial * scale.width, "profile", undefined, undefined, leadInEnvelopeRadius + (profileRadius - leadInEnvelopeRadius) * scale.height, period * resolved.surfaceSection.length + profileIndex, atBottomTip || atTopTip);
185
+ add(center + profileAxial * scale.width, {
186
+ kind: "profile",
187
+ surfaceRadius: leadInEnvelopeRadius + (profileRadius - leadInEnvelopeRadius) * scale.height,
188
+ profileOrdinal: period * resolved.surfaceSection.length + profileIndex,
189
+ atLeadTip: atBottomTip || atTopTip,
190
+ });
186
191
  }
187
192
  }
188
193
  }
@@ -191,7 +196,11 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
191
196
  const firstPeriod = Math.ceil((activeMinimum - phaseShift - profileAxial - resolved.tolerance.linear) / profile.pitch);
192
197
  const lastPeriod = Math.floor((activeMaximum - phaseShift - profileAxial + resolved.tolerance.linear) / profile.pitch);
193
198
  for (let period = firstPeriod; period <= lastPeriod; period += 1) {
194
- add(phaseShift + profileAxial + period * profile.pitch, "profile", profileRadial, undefined, undefined, period * resolved.surfaceSection.length + profileIndex);
199
+ add(phaseShift + profileAxial + period * profile.pitch, {
200
+ kind: "profile",
201
+ profileRadial,
202
+ profileOrdinal: period * resolved.surfaceSection.length + profileIndex,
203
+ });
195
204
  }
196
205
  }
197
206
  }
@@ -199,14 +208,14 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
199
208
  !usesScaledLeadIn &&
200
209
  resolved.bottomBoundary > resolved.tolerance.linear &&
201
210
  resolved.bottomBoundary < resolved.length - resolved.tolerance.linear) {
202
- add(resolved.bottomBoundary, "forced-bottom", undefined, 0);
211
+ add(resolved.bottomBoundary, { kind: "forced-bottom", endFactor: 0 });
203
212
  }
204
213
  const upperThreadBoundary = resolved.topBoundary;
205
214
  if (resolved.top === "blunt" &&
206
215
  !usesScaledLeadIn &&
207
216
  upperThreadBoundary > resolved.tolerance.linear &&
208
217
  upperThreadBoundary < resolved.length - resolved.tolerance.linear) {
209
- add(upperThreadBoundary, "forced-top", undefined, 0);
218
+ add(upperThreadBoundary, { kind: "forced-top", endFactor: 0 });
210
219
  }
211
220
  candidates.sort((left, right) => left.z - right.z || left.order - right.order);
212
221
  const normalized = [];
@@ -1,4 +1,4 @@
1
- import { GeometryError } from "./errors.js";
1
+ import { GeometryError } from "../errors.js";
2
2
  import { analyzeTriangleMesh } from "./mesh.js";
3
3
  /**
4
4
  * Computes the uniform-density volume centroid of an oriented closed solid, including cavity shells.
@@ -1,4 +1,4 @@
1
- import { GeometryError } from "./errors.js";
1
+ import { GeometryError } from "../errors.js";
2
2
  import { buildTriangleMeshQualityAnalysis, } from "./mesh-quality.js";
3
3
  const DEFAULT_MAXIMUM_FLIP_ATTEMPTS = 1_000_000;
4
4
  const DEFAULT_MAXIMUM_PATCH_TRIANGLE_COUNT = 50_000;
@@ -1,5 +1,5 @@
1
- import { GeometryError } from "./errors.js";
2
- import { resolveGeometryTolerance, } from "./tolerance.js";
1
+ import { GeometryError } from "../errors.js";
2
+ import { resolveGeometryTolerance, } from "../tolerance.js";
3
3
  const DEFAULT_MAXIMUM_TRIANGLE_COUNT = 200_000;
4
4
  const FLOAT32_EPSILON = 2 ** -23;
5
5
  const MINIMUM_PLANAR_ANGULAR_TOLERANCE = 1e-5;
@@ -1,5 +1,5 @@
1
- import { GeometryError } from "./errors.js";
2
- import { analyzeTriangleMesh, validateTriangleMesh, } from "./mesh.js";
1
+ import { GeometryError } from "../errors.js";
2
+ import { analyzeTriangleMesh, validateTriangleMesh } from "./mesh.js";
3
3
  const DEFAULT_POSITION_TOLERANCE = 1e-5;
4
4
  const DEFAULT_VOLUME_TOLERANCE = 1e-4;
5
5
  const DEFAULT_MAXIMUM_TRIANGLE_COUNT = 200_000;
@@ -1,4 +1,8 @@
1
- const subtract = (a, b) => [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
1
+ const subtract = (a, b) => [
2
+ a[0] - b[0],
3
+ a[1] - b[1],
4
+ a[2] - b[2],
5
+ ];
2
6
  const dot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
3
7
  const cross = (a, b) => [
4
8
  a[1] * b[2] - a[2] * b[1],
@@ -1,8 +1,8 @@
1
- import { GeometryError } from "./errors.js";
1
+ import { GeometryError } from "../errors.js";
2
+ import { resolveGeometryTolerance } from "../tolerance.js";
2
3
  import { IndexedMeshEdgeTable } from "./mesh-edge-table.js";
3
4
  import { prepareSolidTriangle, trianglesIntersectBeyondSharedBoundary, triangleSolidAngle, } from "./mesh-solid-intersections.js";
4
5
  import { analyzeTriangleMesh } from "./mesh.js";
5
- import { resolveGeometryTolerance } from "./tolerance.js";
6
6
  const MAXIMUM_TRIANGLES = 200_000;
7
7
  const MAXIMUM_TESTS = 2_000_000;
8
8
  /**
@@ -1,8 +1,8 @@
1
- import { GeometryError } from "./errors.js";
1
+ import { GeometryError } from "../errors.js";
2
+ import { writeMeshVertex } from "../numeric.js";
3
+ import { resolveGeometryTolerance } from "../tolerance.js";
4
+ import { transformDeterminant3, validateTransform3 } from "../transform3.js";
2
5
  import { IndexedMeshEdgeTable } from "./mesh-edge-table.js";
3
- import { writeMeshVertex } from "./numeric.js";
4
- import { resolveGeometryTolerance } from "./tolerance.js";
5
- import { transformDeterminant3, validateTransform3 } from "./transform3.js";
6
6
  function inspectTriangleMesh(mesh, options = {}, mode = "validate", topology = false) {
7
7
  // Snapshot meshes can expose owned-copy accessors. Read each buffer once before traversal.
8
8
  const source = { positions: mesh.positions, indices: mesh.indices };
@@ -161,10 +161,9 @@ export function analyzeTriangleMesh(mesh, options = {}) {
161
161
  /**
162
162
  * Validates mesh buffers, indices, triangle area, and optionally closed topology.
163
163
  *
164
- * Closed validation requires each edge to occur exactly twice with opposite
165
- * directions, rejecting boundary and non-manifold edges. Validation does not
166
- * mutate or copy the mesh. This establishes edge connectivity, not the absence
167
- * of geometric self-intersections between faces.
164
+ * Closed validation requires exactly two oppositely directed uses per edge, rejecting boundary
165
+ * and non-manifold edges. It establishes edge connectivity without detecting geometric
166
+ * self-intersections between faces. The mesh is neither mutated nor copied.
168
167
  *
169
168
  * @param mesh - Mesh to inspect.
170
169
  * @param options - Empty-mesh, topology, and tolerance policy.
@@ -0,0 +1,74 @@
1
+ import { GeometryError } from "../errors.js";
2
+ import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
3
+ export function closestPointOnPath(path, point, options = {}) {
4
+ const fail = (message, code = "INVALID_ARGUMENT") => {
5
+ throw new GeometryError(code, message, { operation: "closestPointOnPath" });
6
+ };
7
+ const dimensions = point.length;
8
+ const closed = options.closed ?? false;
9
+ if (typeof closed !== "boolean" || (dimensions !== 2 && dimensions !== 3))
10
+ fail("Use a 2D or 3D point and a boolean closed option.");
11
+ assertSamplingCount(path.length, "closestPointOnPath", resolveGeometrySamplingLimits(options.limits).maxPathPoints);
12
+ if (path.length < (closed ? 3 : 2))
13
+ fail("Open paths need two points; closed paths need three.");
14
+ const validate = (value) => {
15
+ if (value.length !== dimensions)
16
+ fail("Path and query points must have the same dimension.");
17
+ if (!Number.isFinite(value[0]) ||
18
+ !Number.isFinite(value[1]) ||
19
+ (dimensions === 3 && !Number.isFinite(value[2])))
20
+ fail("Path and query coordinates must be finite.", "NON_FINITE_VALUE");
21
+ };
22
+ validate(point);
23
+ validate(path[0]);
24
+ let bestDistance = Infinity, bestSquared = Infinity, edgeIndex = 0, fraction = 0;
25
+ let bestX = 0, bestY = 0, bestZ = 0;
26
+ const count = closed ? path.length : path.length - 1;
27
+ for (let i = 0; i < count; i++) {
28
+ const a = path[i], b = path[(i + 1) % path.length];
29
+ validate(b);
30
+ const dx = b[0] - a[0], dy = b[1] - a[1], dz = (b[2] ?? 0) - (a[2] ?? 0);
31
+ const px = point[0] - a[0], py = point[1] - a[1], pz = (point[2] ?? 0) - (a[2] ?? 0);
32
+ const lengthSquared = dx * dx + dy * dy + dz * dz;
33
+ let projection = (px * dx + py * dy + pz * dz) / lengthSquared;
34
+ if (!Number.isFinite(projection)) {
35
+ // Normalize only extreme extents; ordinary boundary scans use scalar squared arithmetic.
36
+ const scale = Math.max(Math.abs(dx), Math.abs(dy), Math.abs(dz));
37
+ if (!Number.isFinite(scale))
38
+ fail("Path extent exceeds finite arithmetic.", "NON_FINITE_VALUE");
39
+ if (scale === 0)
40
+ projection = 0;
41
+ else {
42
+ const ux = dx / scale, uy = dy / scale, uz = dz / scale;
43
+ const denominator = ux * ux + uy * uy + uz * uz;
44
+ projection =
45
+ (px * (ux / denominator) + py * (uy / denominator) + pz * (uz / denominator)) / scale;
46
+ }
47
+ }
48
+ const t = Math.max(0, Math.min(1, projection));
49
+ const x = a[0] + t * dx, y = a[1] + t * dy, z = (a[2] ?? 0) + t * dz;
50
+ const rx = point[0] - x, ry = point[1] - y, rz = (point[2] ?? 0) - z;
51
+ const squared = rx * rx + ry * ry + rz * rz;
52
+ if (squared > 0 && Number.isFinite(squared) && squared >= bestSquared)
53
+ continue;
54
+ const distance = squared > 0 && Number.isFinite(squared) ? Math.sqrt(squared) : Math.hypot(rx, ry, rz);
55
+ if (!Number.isFinite(distance))
56
+ fail("Path distance exceeds finite arithmetic.", "NON_FINITE_VALUE");
57
+ if (distance < bestDistance) {
58
+ bestDistance = distance;
59
+ bestSquared = squared;
60
+ edgeIndex = i;
61
+ fraction = t;
62
+ bestX = x;
63
+ bestY = y;
64
+ bestZ = z;
65
+ }
66
+ }
67
+ const position = dimensions === 2 ? [bestX, bestY] : [bestX, bestY, bestZ];
68
+ return Object.freeze({
69
+ point: Object.freeze(position),
70
+ distance: bestDistance,
71
+ edgeIndex,
72
+ fraction,
73
+ });
74
+ }