@metamesh/modeling 0.15.0 → 0.16.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 (700) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +33 -6
  3. package/dist/api/engine.d.ts +4 -3
  4. package/dist/api/geometry.d.ts +529 -242
  5. package/dist/api/index.d.ts +363 -104
  6. package/dist/api/text.d.ts +6 -6
  7. package/dist/docs/guides/concepts.md +295 -106
  8. package/dist/docs/guides/fonts.md +9 -8
  9. package/dist/docs/guides/fundamentals.md +17 -21
  10. package/dist/docs/guides/generation.md +24 -23
  11. package/dist/docs/guides/hosting.md +25 -20
  12. package/dist/docs/guides/recipes.md +35 -30
  13. package/dist/docs/guides/standalone-model.md +42 -0
  14. package/dist/docs/manifest.json +846 -243
  15. package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
  16. package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
  17. package/dist/docs/reference/engine/GenerationOptions.md +1 -1
  18. package/dist/docs/reference/engine/GeometryResource.md +1 -1
  19. package/dist/docs/reference/engine/ModelDependencies.md +1 -1
  20. package/dist/docs/reference/engine/ModelEngine.md +1 -1
  21. package/dist/docs/reference/engine/ModelEngineOptions.md +1 -1
  22. package/dist/docs/reference/engine/ModelSession.md +1 -1
  23. package/dist/docs/reference/engine/ModelSnapshot.md +2 -2
  24. package/dist/docs/reference/engine/SessionOptions.md +1 -1
  25. package/dist/docs/reference/engine/SnapshotPart.md +7 -4
  26. package/dist/docs/reference/engine/categories/host-lifecycle.md +8 -3
  27. package/dist/docs/reference/engine/createModelEngine.md +1 -1
  28. package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
  29. package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
  30. package/dist/docs/reference/engine/validateModel.md +1 -1
  31. package/dist/docs/reference/engine.md +6 -2
  32. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +5 -1
  33. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +1 -1
  34. package/dist/docs/reference/geometry/Anchor3-type.md +6 -5
  35. package/dist/docs/reference/geometry/ArcCurve2.md +7 -3
  36. package/dist/docs/reference/geometry/ArcCurve3.md +9 -5
  37. package/dist/docs/reference/geometry/AttachOptions.md +2 -1
  38. package/dist/docs/reference/geometry/AxisAngleRotation3.md +2 -1
  39. package/dist/docs/reference/geometry/Bounds2-type.md +127 -0
  40. package/dist/docs/reference/geometry/Bounds2Data.md +45 -0
  41. package/dist/docs/reference/geometry/Bounds2Input.md +21 -0
  42. package/dist/docs/reference/geometry/Bounds3-type.md +127 -0
  43. package/dist/docs/reference/geometry/Bounds3Data.md +45 -0
  44. package/dist/docs/reference/geometry/Bounds3Input.md +21 -0
  45. package/dist/docs/reference/geometry/BoundsFit2.md +6 -5
  46. package/dist/docs/reference/geometry/BoundsFit3.md +6 -5
  47. package/dist/docs/reference/geometry/BoundsFitOptions.md +2 -1
  48. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +2 -1
  49. package/dist/docs/reference/geometry/BoxAnchorFace.md +2 -1
  50. package/dist/docs/reference/geometry/BoxAnchorOptions.md +5 -4
  51. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  52. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  53. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  54. package/dist/docs/reference/geometry/BoxOptions.md +3 -3
  55. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +8 -1
  56. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +5 -1
  57. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  58. package/dist/docs/reference/geometry/CircleContourOptions.md +5 -1
  59. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
  60. package/dist/docs/reference/geometry/CircularResolutionOptions.md +1 -1
  61. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +6 -1
  62. package/dist/docs/reference/geometry/ClearanceHoleFit.md +8 -1
  63. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +6 -1
  64. package/dist/docs/reference/geometry/Contour.md +10 -4
  65. package/dist/docs/reference/geometry/ContourCurve.md +5 -1
  66. package/dist/docs/reference/geometry/ContourPoint.md +6 -1
  67. package/dist/docs/reference/geometry/ContourSegment.md +5 -1
  68. package/dist/docs/reference/geometry/CorrespondingComponent.md +5 -1
  69. package/dist/docs/reference/geometry/CorrespondingContour.md +5 -1
  70. package/dist/docs/reference/geometry/CorrespondingProfile.md +5 -1
  71. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +5 -1
  72. package/dist/docs/reference/geometry/CubicBezierCurve2.md +10 -6
  73. package/dist/docs/reference/geometry/CubicBezierCurve3.md +10 -6
  74. package/dist/docs/reference/geometry/Curve2.md +5 -1
  75. package/dist/docs/reference/geometry/Curve3.md +5 -1
  76. package/dist/docs/reference/geometry/CurveSamplingOptions.md +5 -1
  77. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +7 -3
  78. package/dist/docs/reference/geometry/CylinderAnchorFace.md +2 -1
  79. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +4 -3
  80. package/dist/docs/reference/geometry/CylinderOptions.md +1 -1
  81. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +6 -1
  82. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +8 -1
  83. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +5 -1
  84. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +5 -1
  85. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +5 -1
  86. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +6 -1
  87. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +5 -1
  88. package/dist/docs/reference/geometry/CylindricalGearSpec.md +6 -1
  89. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  90. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  91. package/dist/docs/reference/geometry/EllipseContourOptions.md +7 -3
  92. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  93. package/dist/docs/reference/geometry/ExtrudeOptions.md +5 -1
  94. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +5 -1
  95. package/dist/docs/reference/geometry/FittedTextLayout.md +7 -3
  96. package/dist/docs/reference/geometry/Frame3.md +10 -6
  97. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  98. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  99. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  100. package/dist/docs/reference/geometry/GeometryResolution.md +1 -1
  101. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +5 -1
  102. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  103. package/dist/docs/reference/geometry/GridPatternOptions.md +4 -4
  104. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +5 -1
  105. package/dist/docs/reference/geometry/HeightfieldOptions.md +9 -5
  106. package/dist/docs/reference/geometry/HeightfieldPreflight.md +9 -4
  107. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +5 -1
  108. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +5 -1
  109. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +7 -2
  110. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +4 -3
  111. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +5 -1
  112. package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +82 -0
  113. package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +148 -0
  114. package/dist/docs/reference/geometry/KnuckleHingeInterval.md +46 -0
  115. package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +51 -0
  116. package/dist/docs/reference/geometry/KnuckleHingeSpec.md +22 -0
  117. package/dist/docs/reference/geometry/LineCurve2.md +8 -4
  118. package/dist/docs/reference/geometry/LineCurve3.md +8 -4
  119. package/dist/docs/reference/geometry/LinearPatternOptions.md +1 -1
  120. package/dist/docs/reference/geometry/LoftCorrespondence.md +6 -1
  121. package/dist/docs/reference/geometry/LoftMeshStation.md +5 -1
  122. package/dist/docs/reference/geometry/LoftOptions.md +5 -1
  123. package/dist/docs/reference/geometry/LoftPlacement.md +5 -1
  124. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +5 -1
  125. package/dist/docs/reference/geometry/MatchProfilesOptions.md +5 -1
  126. package/dist/docs/reference/geometry/MetricFastenerSize.md +9 -2
  127. package/dist/docs/reference/geometry/MetricFastenerStandard.md +5 -1
  128. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +6 -1
  129. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +6 -1
  130. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  131. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +5 -1
  132. package/dist/docs/reference/geometry/Path2-type.md +12 -8
  133. package/dist/docs/reference/geometry/Path2Data.md +40 -4
  134. package/dist/docs/reference/geometry/Path2Input.md +8 -3
  135. package/dist/docs/reference/geometry/Path3-type.md +12 -8
  136. package/dist/docs/reference/geometry/Path3Data.md +40 -4
  137. package/dist/docs/reference/geometry/Path3Input.md +8 -3
  138. package/dist/docs/reference/geometry/PathFrame.md +9 -5
  139. package/dist/docs/reference/geometry/PathLocation.md +5 -1
  140. package/dist/docs/reference/geometry/PathNormalGuide.md +8 -4
  141. package/dist/docs/reference/geometry/PathOptions.md +5 -1
  142. package/dist/docs/reference/geometry/PathPatternOptions.md +1 -1
  143. package/dist/docs/reference/geometry/PathPlacement.md +8 -4
  144. package/dist/docs/reference/geometry/PathResamplingOptions.md +5 -1
  145. package/dist/docs/reference/geometry/Pivot2Options.md +2 -1
  146. package/dist/docs/reference/geometry/Pivot3Options.md +2 -1
  147. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +8 -1
  148. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +5 -1
  149. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +5 -1
  150. package/dist/docs/reference/geometry/PlanarPatchQuality.md +7 -3
  151. package/dist/docs/reference/geometry/PolygonData.md +7 -2
  152. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +5 -1
  153. package/dist/docs/reference/geometry/PrimitiveAttachment.md +1 -1
  154. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +1 -1
  155. package/dist/docs/reference/geometry/PrintableThreadFit.md +8 -1
  156. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +6 -1
  157. package/dist/docs/reference/geometry/Profile.md +8 -2
  158. package/dist/docs/reference/geometry/ProfileComponent2.md +5 -1
  159. package/dist/docs/reference/geometry/ProfileContour2.md +8 -2
  160. package/dist/docs/reference/geometry/ProfileSpan2.md +7 -3
  161. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +3 -3
  162. package/dist/docs/reference/geometry/RackPitchDimensions.md +6 -1
  163. package/dist/docs/reference/geometry/RackPitchSpec.md +6 -1
  164. package/dist/docs/reference/geometry/RadialPatternOptions.md +1 -1
  165. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  166. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  167. package/dist/docs/reference/geometry/RectangleContourOptions.md +7 -3
  168. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +5 -1
  169. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +5 -1
  170. package/dist/docs/reference/geometry/RectangleProfileOptions.md +7 -3
  171. package/dist/docs/reference/geometry/RegionData.md +6 -2
  172. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +5 -1
  173. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  174. package/dist/docs/reference/geometry/RevolveOptions.md +5 -1
  175. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  176. package/dist/docs/reference/geometry/RowLayoutOptions.md +2 -1
  177. package/dist/docs/reference/geometry/SampleContourOptions.md +5 -1
  178. package/dist/docs/reference/geometry/SampleHelixOptions.md +5 -1
  179. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +5 -1
  180. package/dist/docs/reference/geometry/SampledCurve2.md +8 -4
  181. package/dist/docs/reference/geometry/SampledCurve3.md +8 -4
  182. package/dist/docs/reference/geometry/SampledThreadHelices.md +7 -3
  183. package/dist/docs/reference/geometry/SideProfileCurve.md +5 -1
  184. package/dist/docs/reference/geometry/SideProfilePoint.md +6 -1
  185. package/dist/docs/reference/geometry/SideProfileSegment.md +5 -1
  186. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  187. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +5 -1
  188. package/dist/docs/reference/geometry/SphereOptions.md +1 -1
  189. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +5 -1
  190. package/dist/docs/reference/geometry/StrokeCap.md +8 -1
  191. package/dist/docs/reference/geometry/StrokeJoin.md +8 -1
  192. package/dist/docs/reference/geometry/StrokeOptions.md +5 -1
  193. package/dist/docs/reference/geometry/SvgImportOptions.md +5 -1
  194. package/dist/docs/reference/geometry/SvgRegionPreflight.md +6 -2
  195. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +7 -3
  196. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +6 -1
  197. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +6 -1
  198. package/dist/docs/reference/geometry/SweepOptions.md +5 -1
  199. package/dist/docs/reference/geometry/SweepOrientation.md +5 -1
  200. package/dist/docs/reference/geometry/ThreadBevelOptions.md +5 -1
  201. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +5 -1
  202. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +5 -1
  203. package/dist/docs/reference/geometry/ThreadEndStyle.md +8 -1
  204. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +5 -1
  205. package/dist/docs/reference/geometry/ThreadHandedness.md +8 -1
  206. package/dist/docs/reference/geometry/ThreadHelixOptions.md +5 -1
  207. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +8 -1
  208. package/dist/docs/reference/geometry/ThreadLeadInShape.md +8 -1
  209. package/dist/docs/reference/geometry/ThreadProfile-type.md +7 -3
  210. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +5 -1
  211. package/dist/docs/reference/geometry/ThreadProfileSpec.md +5 -1
  212. package/dist/docs/reference/geometry/ThreadRole.md +8 -1
  213. package/dist/docs/reference/geometry/ThreadedNutBevel.md +8 -1
  214. package/dist/docs/reference/geometry/ThreadedNutOptions.md +5 -1
  215. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +7 -3
  216. package/dist/docs/reference/geometry/ThreadedNutShape.md +8 -1
  217. package/dist/docs/reference/geometry/ThreadedRodOptions.md +5 -1
  218. package/dist/docs/reference/geometry/TorusOptions.md +1 -1
  219. package/dist/docs/reference/geometry/Transform2-type.md +6 -5
  220. package/dist/docs/reference/geometry/Transform2Data.md +15 -0
  221. package/dist/docs/reference/geometry/Transform2Input.md +4 -3
  222. package/dist/docs/reference/geometry/Transform3-type.md +6 -5
  223. package/dist/docs/reference/geometry/Transform3Data.md +18 -0
  224. package/dist/docs/reference/geometry/Transform3Input.md +4 -3
  225. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +5 -1
  226. package/dist/docs/reference/geometry/TriangleMesh.md +6 -1
  227. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +7 -3
  228. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +5 -1
  229. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +7 -3
  230. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +5 -1
  231. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +5 -1
  232. package/dist/docs/reference/geometry/TriangleMeshSignature.md +7 -3
  233. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +6 -1
  234. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +6 -1
  235. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +5 -1
  236. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +5 -1
  237. package/dist/docs/reference/geometry/TubeOptions.md +1 -1
  238. package/dist/docs/reference/geometry/Vector2-type.md +6 -5
  239. package/dist/docs/reference/geometry/Vector2Data.md +15 -0
  240. package/dist/docs/reference/geometry/Vector2Input.md +4 -3
  241. package/dist/docs/reference/geometry/Vector3-type.md +6 -5
  242. package/dist/docs/reference/geometry/Vector3Data.md +15 -0
  243. package/dist/docs/reference/geometry/Vector3Input.md +4 -3
  244. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +6 -1
  245. package/dist/docs/reference/geometry/VectorTextLayout.md +5 -1
  246. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +5 -1
  247. package/dist/docs/reference/geometry/VectorTextMetrics.md +7 -3
  248. package/dist/docs/reference/geometry/VectorTextOptions.md +5 -1
  249. package/dist/docs/reference/geometry/add2.md +7 -6
  250. package/dist/docs/reference/geometry/add3.md +7 -6
  251. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +5 -1
  252. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +5 -1
  253. package/dist/docs/reference/geometry/anchor3.md +2 -1
  254. package/dist/docs/reference/geometry/anchorFrame3.md +5 -1
  255. package/dist/docs/reference/geometry/applyTransformDirection3.md +8 -7
  256. package/dist/docs/reference/geometry/applyTransformPoint3.md +8 -7
  257. package/dist/docs/reference/geometry/attachmentTransform3.md +5 -4
  258. package/dist/docs/reference/geometry/bounds2.md +38 -0
  259. package/dist/docs/reference/geometry/bounds3.md +38 -0
  260. package/dist/docs/reference/geometry/boundsCenter.md +12 -11
  261. package/dist/docs/reference/geometry/boundsFromSize.md +12 -11
  262. package/dist/docs/reference/geometry/boundsSize.md +12 -11
  263. package/dist/docs/reference/geometry/boxAnchor3.md +4 -3
  264. package/dist/docs/reference/geometry/categories/bounds-layout.md +23 -6
  265. package/dist/docs/reference/geometry/categories/curves-paths.md +21 -9
  266. package/dist/docs/reference/geometry/categories/mechanical.md +22 -10
  267. package/dist/docs/reference/geometry/categories/meshes.md +16 -7
  268. package/dist/docs/reference/geometry/categories/pattern-placement.md +6 -4
  269. package/dist/docs/reference/geometry/categories/primitive-options.md +8 -2
  270. package/dist/docs/reference/geometry/categories/profiles-regions.md +21 -12
  271. package/dist/docs/reference/geometry/categories/resolution-errors.md +5 -3
  272. package/dist/docs/reference/geometry/categories/transforms-math.md +21 -12
  273. package/dist/docs/reference/geometry/categories/vector-import.md +11 -5
  274. package/dist/docs/reference/geometry/circleContour.md +5 -1
  275. package/dist/docs/reference/geometry/closeToAxis.md +14 -5
  276. package/dist/docs/reference/geometry/compensateThreadDiameters.md +5 -1
  277. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +5 -1
  278. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +5 -1
  279. package/dist/docs/reference/geometry/composeTransform3.md +7 -6
  280. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +5 -1
  281. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +11 -2
  282. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +13 -5
  283. package/dist/docs/reference/geometry/computeTriangleMeshSignature.md +5 -1
  284. package/dist/docs/reference/geometry/containsBounds.md +10 -9
  285. package/dist/docs/reference/geometry/contourContainsPoint.md +8 -4
  286. package/dist/docs/reference/geometry/cross2.md +6 -5
  287. package/dist/docs/reference/geometry/cross3.md +7 -6
  288. package/dist/docs/reference/geometry/cylinderAnchor3.md +3 -2
  289. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +5 -1
  290. package/dist/docs/reference/geometry/distance2.md +6 -5
  291. package/dist/docs/reference/geometry/distance3.md +6 -5
  292. package/dist/docs/reference/geometry/distributeAlongPath.md +5 -1
  293. package/dist/docs/reference/geometry/dot2.md +6 -5
  294. package/dist/docs/reference/geometry/dot3.md +6 -5
  295. package/dist/docs/reference/geometry/ellipseContour.md +5 -1
  296. package/dist/docs/reference/geometry/eulerTransform3.md +7 -6
  297. package/dist/docs/reference/geometry/extrudeMesh.md +5 -1
  298. package/dist/docs/reference/geometry/fitBounds.md +10 -9
  299. package/dist/docs/reference/geometry/fitTextLayout.md +13 -5
  300. package/dist/docs/reference/geometry/frameTransform3.md +5 -4
  301. package/dist/docs/reference/geometry/getMetricClearanceHoleDiameter.md +5 -1
  302. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +5 -1
  303. package/dist/docs/reference/geometry/gridPatternTransforms.md +4 -4
  304. package/dist/docs/reference/geometry/heightfieldMesh.md +11 -2
  305. package/dist/docs/reference/geometry/helicalThreadRidgeMesh.md +5 -1
  306. package/dist/docs/reference/geometry/helicalThreadSolidMesh.md +5 -1
  307. package/dist/docs/reference/geometry/inverseTransform3.md +6 -5
  308. package/dist/docs/reference/geometry/isGeometryError.md +5 -2
  309. package/dist/docs/reference/geometry/joinTriangleMeshes.md +5 -1
  310. package/dist/docs/reference/geometry/layoutRow.md +11 -7
  311. package/dist/docs/reference/geometry/length2.md +5 -4
  312. package/dist/docs/reference/geometry/length3.md +5 -4
  313. package/dist/docs/reference/geometry/lerp2.md +7 -6
  314. package/dist/docs/reference/geometry/lerp3.md +7 -6
  315. package/dist/docs/reference/geometry/linearPatternTransforms.md +4 -4
  316. package/dist/docs/reference/geometry/loftMesh.md +5 -1
  317. package/dist/docs/reference/geometry/matchProfiles.md +11 -2
  318. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +5 -1
  319. package/dist/docs/reference/geometry/meshBounds.md +8 -4
  320. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +5 -1
  321. package/dist/docs/reference/geometry/normalize2.md +10 -6
  322. package/dist/docs/reference/geometry/normalize3.md +10 -6
  323. package/dist/docs/reference/geometry/normalizeContour.md +8 -4
  324. package/dist/docs/reference/geometry/normalizePolygon.md +5 -1
  325. package/dist/docs/reference/geometry/normalizeRegion.md +5 -1
  326. package/dist/docs/reference/geometry/optimizePlanarPatches.md +5 -1
  327. package/dist/docs/reference/geometry/path2.md +14 -2
  328. package/dist/docs/reference/geometry/path3.md +8 -1
  329. package/dist/docs/reference/geometry/pathPatternTransforms.md +9 -5
  330. package/dist/docs/reference/geometry/preflightHeightfield.md +11 -2
  331. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +11 -2
  332. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +13 -2
  333. package/dist/docs/reference/geometry/preflightSvgRegion.md +15 -2
  334. package/dist/docs/reference/geometry/preflightThreadedNut.md +12 -2
  335. package/dist/docs/reference/geometry/preflightThreadedRod.md +12 -2
  336. package/dist/docs/reference/geometry/projectOntoPlane3.md +7 -6
  337. package/dist/docs/reference/geometry/radialPatternTransforms.md +4 -4
  338. package/dist/docs/reference/geometry/rectangleContour.md +10 -3
  339. package/dist/docs/reference/geometry/rectangleProfile.md +10 -2
  340. package/dist/docs/reference/geometry/regionArea.md +5 -1
  341. package/dist/docs/reference/geometry/regionBounds.md +8 -4
  342. package/dist/docs/reference/geometry/regularPolygonContour.md +8 -4
  343. package/dist/docs/reference/geometry/resamplePolyline2.md +8 -4
  344. package/dist/docs/reference/geometry/resamplePolyline3.md +8 -4
  345. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +1 -1
  346. package/dist/docs/reference/geometry/resolveArcSegments.md +1 -1
  347. package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
  348. package/dist/docs/reference/geometry/resolveCylindricalGear.md +5 -1
  349. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +5 -1
  350. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +5 -1
  351. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +5 -1
  352. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  353. package/dist/docs/reference/geometry/resolveKnuckleHinge.md +59 -0
  354. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +5 -1
  355. package/dist/docs/reference/geometry/resolveRackPitch.md +5 -1
  356. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +5 -1
  357. package/dist/docs/reference/geometry/reverseTriangleMesh.md +5 -1
  358. package/dist/docs/reference/geometry/revolveMesh.md +5 -1
  359. package/dist/docs/reference/geometry/rotate2.md +6 -5
  360. package/dist/docs/reference/geometry/rotationTransform3.md +7 -6
  361. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +8 -4
  362. package/dist/docs/reference/geometry/sampleContour.md +12 -2
  363. package/dist/docs/reference/geometry/sampleCurve2.md +6 -3
  364. package/dist/docs/reference/geometry/sampleCurve3.md +5 -1
  365. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +5 -1
  366. package/dist/docs/reference/geometry/sampleHelix.md +13 -5
  367. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +5 -1
  368. package/dist/docs/reference/geometry/sampleRackToothPath.md +8 -4
  369. package/dist/docs/reference/geometry/sampleSideProfile.md +15 -5
  370. package/dist/docs/reference/geometry/sampleTextContours.md +5 -1
  371. package/dist/docs/reference/geometry/sampleThreadHelices.md +5 -1
  372. package/dist/docs/reference/geometry/scale2.md +6 -5
  373. package/dist/docs/reference/geometry/scale3.md +6 -5
  374. package/dist/docs/reference/geometry/scaleTransform3.md +7 -6
  375. package/dist/docs/reference/geometry/signedContourArea.md +5 -1
  376. package/dist/docs/reference/geometry/starContour.md +8 -4
  377. package/dist/docs/reference/geometry/strokeRegionData.md +5 -1
  378. package/dist/docs/reference/geometry/subtract2.md +7 -6
  379. package/dist/docs/reference/geometry/subtract3.md +7 -6
  380. package/dist/docs/reference/geometry/sweepMesh.md +5 -1
  381. package/dist/docs/reference/geometry/threadProfile.md +5 -1
  382. package/dist/docs/reference/geometry/transform2.md +14 -7
  383. package/dist/docs/reference/geometry/transform3.md +16 -7
  384. package/dist/docs/reference/geometry/transformDeterminant3.md +5 -4
  385. package/dist/docs/reference/geometry/transformRegionData.md +5 -1
  386. package/dist/docs/reference/geometry/transformTriangleMesh.md +5 -1
  387. package/dist/docs/reference/geometry/translationTransform3.md +7 -6
  388. package/dist/docs/reference/geometry/triangulateContour.md +5 -1
  389. package/dist/docs/reference/geometry/validateSolidMesh.md +9 -2
  390. package/dist/docs/reference/geometry/validateTransform3.md +6 -5
  391. package/dist/docs/reference/geometry/validateTriangleMesh.md +5 -1
  392. package/dist/docs/reference/geometry/vector2.md +10 -2
  393. package/dist/docs/reference/geometry/vector3.md +10 -2
  394. package/dist/docs/reference/geometry.md +7 -5
  395. package/dist/docs/reference/model/Anchor3.md +6 -5
  396. package/dist/docs/reference/model/AttachOptions.md +2 -1
  397. package/dist/docs/reference/model/Bounds2-type.md +125 -0
  398. package/dist/docs/reference/model/Bounds2Data.md +44 -0
  399. package/dist/docs/reference/model/Bounds2Input.md +19 -0
  400. package/dist/docs/reference/model/Bounds3-type.md +125 -0
  401. package/dist/docs/reference/model/Bounds3Data.md +44 -0
  402. package/dist/docs/reference/model/Bounds3Input.md +19 -0
  403. package/dist/docs/reference/model/BoxEdge.md +1 -1
  404. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  405. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  406. package/dist/docs/reference/model/BoxOptions.md +3 -3
  407. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  408. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  409. package/dist/docs/reference/model/CircleOptions.md +1 -1
  410. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
  411. package/dist/docs/reference/model/Computed.md +6 -1
  412. package/dist/docs/reference/model/ComputedValue.md +5 -1
  413. package/dist/docs/reference/model/Contour.md +6 -4
  414. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  415. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  416. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  417. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  418. package/dist/docs/reference/model/CylinderOptions.md +1 -1
  419. package/dist/docs/reference/model/DiagnosticOptions.md +6 -1
  420. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  421. package/dist/docs/reference/model/EllipseContourOptions.md +3 -3
  422. package/dist/docs/reference/model/EllipseOptions.md +1 -1
  423. package/dist/docs/reference/model/EndTreatments.md +1 -1
  424. package/dist/docs/reference/model/ExtrudeOptions.md +1 -1
  425. package/dist/docs/reference/model/FinalizedModel.md +3 -3
  426. package/dist/docs/reference/model/FinalizedPart.md +1 -1
  427. package/dist/docs/reference/model/Frame3.md +6 -6
  428. package/dist/docs/reference/model/GenerateCallback.md +5 -1
  429. package/dist/docs/reference/model/GenerateContext.md +5 -1
  430. package/dist/docs/reference/model/GeneratedPart.md +5 -1
  431. package/dist/docs/reference/model/GenerationDiagnostic.md +6 -1
  432. package/dist/docs/reference/model/GenerationError.md +5 -1
  433. package/dist/docs/reference/model/GeometryResolution.md +1 -1
  434. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  435. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  436. package/dist/docs/reference/model/GridPatternOptions.md +5 -4
  437. package/dist/docs/reference/model/HeightfieldOptions.md +5 -5
  438. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +2 -1
  439. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +3 -2
  440. package/dist/docs/reference/model/HullOptions.md +1 -1
  441. package/dist/docs/reference/model/ImmutableBuffer-type.md +5 -1
  442. package/dist/docs/reference/model/ImmutableTriangleMesh.md +5 -1
  443. package/dist/docs/reference/model/ImplicitOptions.md +6 -6
  444. package/dist/docs/reference/model/InternalThreadCutterOptions.md +2 -1
  445. package/dist/docs/reference/model/KnuckleHinge-type.md +47 -0
  446. package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +77 -0
  447. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +34 -0
  448. package/dist/docs/reference/model/KnuckleHingeOptions.md +38 -0
  449. package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +47 -0
  450. package/dist/docs/reference/model/KnuckleHingeSpec.md +18 -0
  451. package/dist/docs/reference/model/KnuckleHingeWeb.md +53 -0
  452. package/dist/docs/reference/model/LinearPatternOptions.md +2 -1
  453. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  454. package/dist/docs/reference/model/LoftOptions.md +1 -1
  455. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  456. package/dist/docs/reference/model/LoftStation.md +1 -1
  457. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  458. package/dist/docs/reference/model/ModelProgram.md +5 -1
  459. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  460. package/dist/docs/reference/model/NumericArray.md +8 -1
  461. package/dist/docs/reference/model/PartGeometry.md +5 -1
  462. package/dist/docs/reference/model/PartOptions.md +5 -1
  463. package/dist/docs/reference/model/Path2-type.md +12 -8
  464. package/dist/docs/reference/model/Path2Data.md +40 -4
  465. package/dist/docs/reference/model/Path2Input.md +8 -3
  466. package/dist/docs/reference/model/Path3-type.md +12 -8
  467. package/dist/docs/reference/model/Path3Data.md +40 -4
  468. package/dist/docs/reference/model/Path3Input.md +8 -3
  469. package/dist/docs/reference/model/PathLocation.md +5 -1
  470. package/dist/docs/reference/model/PathNormalGuide.md +4 -4
  471. package/dist/docs/reference/model/PathOptions.md +5 -1
  472. package/dist/docs/reference/model/PathPatternOptions.md +2 -1
  473. package/dist/docs/reference/model/PathResamplingOptions.md +5 -1
  474. package/dist/docs/reference/model/PatternSource.md +2 -1
  475. package/dist/docs/reference/model/Pivot2Options.md +2 -1
  476. package/dist/docs/reference/model/Pivot3Options.md +2 -1
  477. package/dist/docs/reference/model/PlaneOptions.md +1 -1
  478. package/dist/docs/reference/model/PolygonData.md +3 -2
  479. package/dist/docs/reference/model/PolygonOptions.md +1 -1
  480. package/dist/docs/reference/model/PrimitiveAttachment.md +2 -1
  481. package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +2 -1
  482. package/dist/docs/reference/model/PrintableThreadFit.md +2 -1
  483. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +2 -1
  484. package/dist/docs/reference/model/Profile.md +4 -2
  485. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  486. package/dist/docs/reference/model/ProfileContour2.md +4 -2
  487. package/dist/docs/reference/model/ProfileSpan2.md +3 -3
  488. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +3 -3
  489. package/dist/docs/reference/model/RadialPatternOptions.md +2 -1
  490. package/dist/docs/reference/model/RadialSizing.md +1 -1
  491. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  492. package/dist/docs/reference/model/RectangleContourOptions.md +3 -3
  493. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  494. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  495. package/dist/docs/reference/model/RectangleOptions.md +3 -3
  496. package/dist/docs/reference/model/RegionData.md +2 -2
  497. package/dist/docs/reference/model/RegularPolygonOptions.md +1 -1
  498. package/dist/docs/reference/model/RevolveOptions.md +1 -1
  499. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  500. package/dist/docs/reference/model/Section.md +9 -2
  501. package/dist/docs/reference/model/SectionHullOptions.md +1 -1
  502. package/dist/docs/reference/model/SectionInspection.md +4 -4
  503. package/dist/docs/reference/model/SectionOffsetJoin.md +1 -1
  504. package/dist/docs/reference/model/SectionOffsetOptions.md +1 -1
  505. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  506. package/dist/docs/reference/model/Solid.md +9 -2
  507. package/dist/docs/reference/model/SolidInspection.md +4 -4
  508. package/dist/docs/reference/model/SolidSegmentHit.md +4 -4
  509. package/dist/docs/reference/model/SphereOptions.md +1 -1
  510. package/dist/docs/reference/model/StarOptions.md +1 -1
  511. package/dist/docs/reference/model/StrokeCap.md +1 -1
  512. package/dist/docs/reference/model/StrokeJoin.md +1 -1
  513. package/dist/docs/reference/model/StrokeOptions.md +1 -1
  514. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  515. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  516. package/dist/docs/reference/model/SvgSectionOptions.md +1 -1
  517. package/dist/docs/reference/model/SweepOptions.md +1 -1
  518. package/dist/docs/reference/model/SweepOrientation.md +1 -1
  519. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  520. package/dist/docs/reference/model/ThreadEndStyle.md +2 -1
  521. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +2 -1
  522. package/dist/docs/reference/model/ThreadHandedness.md +2 -1
  523. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +2 -1
  524. package/dist/docs/reference/model/ThreadLeadInShape.md +2 -1
  525. package/dist/docs/reference/model/ThreadProfile.md +4 -3
  526. package/dist/docs/reference/model/ThreadRidgeOptions.md +2 -1
  527. package/dist/docs/reference/model/ThreadedNutBevel.md +2 -1
  528. package/dist/docs/reference/model/ThreadedNutOptions.md +2 -1
  529. package/dist/docs/reference/model/ThreadedNutPreflight.md +4 -3
  530. package/dist/docs/reference/model/ThreadedNutShape.md +2 -1
  531. package/dist/docs/reference/model/ThreadedRodOptions.md +2 -1
  532. package/dist/docs/reference/model/TorusOptions.md +1 -1
  533. package/dist/docs/reference/model/Transform2-type.md +6 -5
  534. package/dist/docs/reference/model/Transform2Data.md +16 -0
  535. package/dist/docs/reference/model/Transform2Input.md +4 -3
  536. package/dist/docs/reference/model/Transform3-type.md +6 -5
  537. package/dist/docs/reference/model/Transform3Data.md +19 -0
  538. package/dist/docs/reference/model/Transform3Input.md +4 -3
  539. package/dist/docs/reference/model/TriangleMesh.md +1 -1
  540. package/dist/docs/reference/model/TriangleMeshAnalysis.md +3 -3
  541. package/dist/docs/reference/model/TriangleMeshMeasurements.md +3 -3
  542. package/dist/docs/reference/model/TubeOptions.md +1 -1
  543. package/dist/docs/reference/model/Vector2-type.md +6 -5
  544. package/dist/docs/reference/model/{Vector2Tuple.md → Vector2Data.md} +3 -3
  545. package/dist/docs/reference/model/Vector2Input.md +4 -3
  546. package/dist/docs/reference/model/Vector3-type.md +6 -5
  547. package/dist/docs/reference/model/{Vector3Tuple.md → Vector3Data.md} +3 -3
  548. package/dist/docs/reference/model/Vector3Input.md +4 -3
  549. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  550. package/dist/docs/reference/model/VectorTextMetrics.md +3 -3
  551. package/dist/docs/reference/model/anchor.md +2 -1
  552. package/dist/docs/reference/model/bounds2.md +36 -0
  553. package/dist/docs/reference/model/bounds3.md +36 -0
  554. package/dist/docs/reference/model/box.md +2 -2
  555. package/dist/docs/reference/model/castSegment.md +1 -1
  556. package/dist/docs/reference/model/categories/boolean-operations.md +10 -3
  557. package/dist/docs/reference/model/categories/bounded-surfaces.md +5 -3
  558. package/dist/docs/reference/model/categories/bounds.md +36 -0
  559. package/dist/docs/reference/model/categories/contracts.md +4 -2
  560. package/dist/docs/reference/model/categories/core-values-errors.md +11 -11
  561. package/dist/docs/reference/model/categories/explicit-profiles.md +6 -4
  562. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +12 -3
  563. package/dist/docs/reference/model/categories/generation.md +11 -2
  564. package/dist/docs/reference/model/categories/hinges.md +38 -0
  565. package/dist/docs/reference/model/categories/inspection.md +9 -2
  566. package/dist/docs/reference/model/categories/mesh-inspection.md +5 -3
  567. package/dist/docs/reference/model/categories/paths.md +15 -7
  568. package/dist/docs/reference/model/categories/primitives.md +10 -4
  569. package/dist/docs/reference/model/categories/resolution.md +4 -2
  570. package/dist/docs/reference/model/categories/sections.md +10 -5
  571. package/dist/docs/reference/model/categories/threads.md +10 -7
  572. package/dist/docs/reference/model/categories/transforms-placement.md +17 -9
  573. package/dist/docs/reference/model/circle.md +1 -1
  574. package/dist/docs/reference/model/components.md +1 -1
  575. package/dist/docs/reference/model/compose.md +1 -1
  576. package/dist/docs/reference/model/cylinder.md +1 -1
  577. package/dist/docs/reference/model/distance.md +1 -1
  578. package/dist/docs/reference/model/ellipse.md +1 -1
  579. package/dist/docs/reference/model/extrude.md +1 -1
  580. package/dist/docs/reference/model/generate.md +5 -1
  581. package/dist/docs/reference/model/gridPattern.md +2 -1
  582. package/dist/docs/reference/model/heightfield.md +5 -2
  583. package/dist/docs/reference/model/hull.md +1 -1
  584. package/dist/docs/reference/model/immutableBuffer.md +5 -1
  585. package/dist/docs/reference/model/immutableMesh.md +5 -1
  586. package/dist/docs/reference/model/implicit.md +3 -3
  587. package/dist/docs/reference/model/inspectSection.md +1 -1
  588. package/dist/docs/reference/model/inspectSolid.md +1 -1
  589. package/dist/docs/reference/model/internalThreadCutter.md +2 -1
  590. package/dist/docs/reference/model/intersect.md +1 -1
  591. package/dist/docs/reference/model/isEmpty.md +1 -1
  592. package/dist/docs/reference/model/knuckleHinge.md +47 -0
  593. package/dist/docs/reference/model/linearPattern.md +2 -1
  594. package/dist/docs/reference/model/loft.md +1 -1
  595. package/dist/docs/reference/model/matchProfiles.md +1 -1
  596. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  597. package/dist/docs/reference/model/path2.md +14 -2
  598. package/dist/docs/reference/model/path3.md +8 -1
  599. package/dist/docs/reference/model/pathPattern.md +2 -1
  600. package/dist/docs/reference/model/polygon.md +5 -2
  601. package/dist/docs/reference/model/preflightInternalThreadCutter.md +8 -2
  602. package/dist/docs/reference/model/preflightThreadedNut.md +8 -2
  603. package/dist/docs/reference/model/preflightThreadedRod.md +8 -2
  604. package/dist/docs/reference/model/radialPattern.md +2 -1
  605. package/dist/docs/reference/model/rectangle.md +5 -2
  606. package/dist/docs/reference/model/regularPolygon.md +1 -1
  607. package/dist/docs/reference/model/revolve.md +1 -1
  608. package/dist/docs/reference/model/solidFromMesh.md +1 -1
  609. package/dist/docs/reference/model/sphere.md +1 -1
  610. package/dist/docs/reference/model/split.md +1 -1
  611. package/dist/docs/reference/model/splitByPlane.md +1 -1
  612. package/dist/docs/reference/model/star.md +1 -1
  613. package/dist/docs/reference/model/stroke.md +1 -1
  614. package/dist/docs/reference/model/svgPathSection.md +1 -1
  615. package/dist/docs/reference/model/svgSection.md +1 -1
  616. package/dist/docs/reference/model/sweep.md +1 -1
  617. package/dist/docs/reference/model/textSection.md +1 -1
  618. package/dist/docs/reference/model/threadRidge.md +2 -1
  619. package/dist/docs/reference/model/threadedNut.md +2 -1
  620. package/dist/docs/reference/model/threadedRod.md +2 -1
  621. package/dist/docs/reference/model/torus.md +1 -1
  622. package/dist/docs/reference/model/transform2.md +14 -7
  623. package/dist/docs/reference/model/transform3.md +16 -7
  624. package/dist/docs/reference/model/tube.md +1 -1
  625. package/dist/docs/reference/model/union.md +1 -1
  626. package/dist/docs/reference/model/vector2.md +10 -2
  627. package/dist/docs/reference/model/vector3.md +10 -2
  628. package/dist/docs/reference/model.md +15 -8
  629. package/dist/docs/reference/text/Bounds2Data.md +34 -0
  630. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
  631. package/dist/docs/reference/text/Vector2Data.md +7 -0
  632. package/dist/docs/reference/text/VectorFont.md +1 -1
  633. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  634. package/dist/docs/reference/text/VectorTextArcBaseline.md +1 -1
  635. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  636. package/dist/docs/reference/text/VectorTextLayoutOptions.md +1 -1
  637. package/dist/docs/reference/text/VectorTextMetrics.md +3 -3
  638. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  639. package/dist/docs/reference/text/categories/font-preparation.md +6 -4
  640. package/dist/docs/reference/text/prepareVectorFont.md +1 -1
  641. package/dist/docs/reference/text.md +4 -2
  642. package/dist/engine/construction-operations.js +1 -1
  643. package/dist/engine/knuckle-hinge-operation.js +85 -0
  644. package/dist/engine/loft-operations.js +1 -1
  645. package/dist/engine/mechanical-operations.js +3 -1
  646. package/dist/engine/modeling-context.js +8 -1
  647. package/dist/engine/recipe-realization.js +4 -2
  648. package/dist/engine/section-operations.js +1 -1
  649. package/dist/engine/transform-operations.js +3 -3
  650. package/dist/geometry/bounds-value.js +93 -0
  651. package/dist/geometry/bounds.js +10 -8
  652. package/dist/geometry/curves/sampling.js +1 -2
  653. package/dist/geometry/errors.js +1 -0
  654. package/dist/geometry/heightfield.js +12 -1
  655. package/dist/geometry/index.js +3 -1
  656. package/dist/geometry/math/immutable-value.js +1 -1
  657. package/dist/geometry/math/vector-value.js +11 -3
  658. package/dist/geometry/math/vector2.js +1 -0
  659. package/dist/geometry/math/vector3.js +1 -0
  660. package/dist/geometry/mechanical/index.js +1 -0
  661. package/dist/geometry/mechanical/knuckle-hinge.js +110 -0
  662. package/dist/geometry/mechanical/thread-mesh-plan.js +7 -2
  663. package/dist/geometry/mechanical/thread-solids.js +29 -4
  664. package/dist/geometry/mesh/mesh-centroid.js +1 -0
  665. package/dist/geometry/mesh/mesh-solid.js +1 -0
  666. package/dist/geometry/paths/frames.js +1 -0
  667. package/dist/geometry/paths/helix.js +1 -0
  668. package/dist/geometry/paths/path-value.js +43 -27
  669. package/dist/geometry/paths/resampling.js +2 -2
  670. package/dist/geometry/patterns/placements.js +3 -3
  671. package/dist/geometry/patterns.js +3 -1
  672. package/dist/geometry/profiles/contour.js +1 -0
  673. package/dist/geometry/profiles/matched.js +1 -0
  674. package/dist/geometry/profiles/rectangle.js +10 -1
  675. package/dist/geometry/profiles/side-profile.js +2 -0
  676. package/dist/geometry/svg-import.js +8 -2
  677. package/dist/geometry/sweeps/options.js +1 -1
  678. package/dist/geometry/text-fitting.js +1 -0
  679. package/dist/geometry/transform-matrix.js +1 -1
  680. package/dist/geometry/{transform-chain.js → transform-value.js} +24 -15
  681. package/dist/index.js +2 -1
  682. package/dist/model/execution-binding.js +1 -1
  683. package/dist/model/geometry-recipes.js +1 -1
  684. package/dist/model/immutable-generation-data.js +4 -12
  685. package/dist/model/knuckle-hinge.js +1 -0
  686. package/dist/model/operations.js +57 -3
  687. package/dist/model/recipe-declaration.js +10 -2
  688. package/package.json +1 -1
  689. package/dist/docs/reference/geometry/Bounds2.md +0 -39
  690. package/dist/docs/reference/geometry/Bounds3.md +0 -39
  691. package/dist/docs/reference/geometry/Transform2Matrix.md +0 -14
  692. package/dist/docs/reference/geometry/Transform3Matrix.md +0 -17
  693. package/dist/docs/reference/geometry/Vector2Tuple.md +0 -14
  694. package/dist/docs/reference/geometry/Vector3Tuple.md +0 -14
  695. package/dist/docs/reference/model/Bounds2.md +0 -39
  696. package/dist/docs/reference/model/Bounds3.md +0 -39
  697. package/dist/docs/reference/model/Transform2Matrix.md +0 -15
  698. package/dist/docs/reference/model/Transform3Matrix.md +0 -18
  699. package/dist/docs/reference/text/Bounds2.md +0 -34
  700. package/dist/docs/reference/text/Vector2Tuple.md +0 -7
@@ -0,0 +1,85 @@
1
+ import { GeometryError } from "../geometry/errors.js";
2
+ import { resolveKnuckleHinge } from "../geometry/mechanical/knuckle-hinge.js";
3
+ import { assertPrimitiveOptions } from "../geometry/primitive-resolvers.js";
4
+ import { assertSamplingCount } from "../geometry/sampling-limits.js";
5
+ /** Composes existing scoped operations after resolving both halves against one host policy. */
6
+ export function createKnuckleHingeOperation(environment, operations) {
7
+ return (options) => {
8
+ environment.assertActive();
9
+ assertPrimitiveOptions(options, "knuckleHinge");
10
+ const resolved = environment.withResolutionDefaults(options);
11
+ const d = resolveKnuckleHinge(options, resolved);
12
+ assertSamplingCount(d.segments * d.spec.knuckleCount * 2, "knuckleHinge", resolved.limits.maxVertices);
13
+ const invalid = (message) => {
14
+ throw new GeometryError("INVALID_ARGUMENT", message, { operation: "knuckleHinge" });
15
+ };
16
+ const validateHalf = (half = {}) => {
17
+ assertPrimitiveOptions(half, "knuckleHinge");
18
+ const chamfer = half.barrelChamfer ?? 0;
19
+ if (!Number.isFinite(chamfer) ||
20
+ chamfer < 0 ||
21
+ 2 * chamfer >= d.knuckleLength ||
22
+ chamfer >= d.minimumBarrelWall)
23
+ invalid("barrelChamfer must be nonnegative and leave a positive axial band and faceted barrel wall.");
24
+ const web = half.web;
25
+ if (web !== undefined) {
26
+ assertPrimitiveOptions(web, "knuckleHinge");
27
+ if (web.direction !== "positive-y" && web.direction !== "negative-y")
28
+ invalid("Unknown web direction.");
29
+ if (!Number.isFinite(web.reach) ||
30
+ web.reach <= 0 ||
31
+ !Number.isFinite(web.thickness) ||
32
+ web.thickness <= 0 ||
33
+ !Number.isFinite(web.zMin) ||
34
+ !Number.isFinite(web.zMin + web.thickness))
35
+ invalid("Web dimensions must be finite, with positive reach and thickness.");
36
+ const innerRadius = d.barrelRadius * Math.cos(Math.PI / d.segments);
37
+ if (web.zMin >= innerRadius || web.zMin + web.thickness <= -innerRadius)
38
+ invalid("A web must overlap the interior of its barrel.");
39
+ }
40
+ return { chamfer, web };
41
+ };
42
+ // Validate both attachments before allocating either half.
43
+ const a = validateHalf(options.halfA);
44
+ const b = validateHalf(options.halfB);
45
+ const axial = (radius, start, length, bore = false, chamfer = 0) => operations.translate(operations.rotate(operations.cylinder({
46
+ radius,
47
+ height: length,
48
+ center: false,
49
+ segments: d.segments,
50
+ sizing: bore ? "face" : "vertex",
51
+ ...(chamfer === 0
52
+ ? {}
53
+ : {
54
+ ends: {
55
+ bottom: { kind: "chamfer", distance: chamfer },
56
+ top: { kind: "chamfer", distance: chamfer },
57
+ },
58
+ }),
59
+ }), [0, 90, 0]), [start, 0, 0]);
60
+ const buildHalf = (side, { chamfer, web }) => {
61
+ const features = [];
62
+ for (const interval of d.knuckles) {
63
+ if (interval.side !== side)
64
+ continue;
65
+ features.push(axial(d.barrelRadius, interval.start, interval.length, false, chamfer));
66
+ if (web !== undefined)
67
+ features.push(operations.translate(operations.box({
68
+ size: [interval.length, web.reach, web.thickness],
69
+ center: false,
70
+ }), [interval.start, web.direction === "positive-y" ? 0 : -web.reach, web.zMin]));
71
+ }
72
+ if (side === "a" && d.pin !== null)
73
+ features.push(axial(d.pinRadius, d.pin.start, d.pin.length));
74
+ const solid = operations.union(features);
75
+ // Overtravel is numerical cutter extent, independent of the physical radial/axial allowances.
76
+ const overtravel = Math.min(d.knuckleLength, d.barrelRadius) * 0.01;
77
+ return side === "a" && d.pin !== null
78
+ ? solid
79
+ : operations.subtract(solid, [
80
+ axial(d.boreRadius, -d.spec.length / 2 - overtravel, d.spec.length + 2 * overtravel, true),
81
+ ]);
82
+ };
83
+ return Object.freeze({ halfA: buildHalf("a", a), halfB: buildHalf("b", b), axis: d.axis });
84
+ };
85
+ }
@@ -8,7 +8,7 @@ import { assertSamplingCount } from "../geometry/sampling-limits.js";
8
8
  import { correspondingPrimitiveProfiles, rectangularPrimitiveFamily, } from "./primitive-profiles.js";
9
9
  import { buildProfileLoftMesh } from "./profile-mesh.js";
10
10
  const explicitProfile = (value) => typeof value === "object" && value !== null && "components" in value;
11
- const pointProfile = (value) => Array.isArray(value) || (typeof value === "object" && value !== null && "toArray" in value);
11
+ const pointProfile = (value) => Array.isArray(value) || (typeof value === "object" && value !== null && "toData" in value);
12
12
  const fail = (message) => {
13
13
  throw new GeometryError("INVALID_ARGUMENT", message, { operation: "loft" });
14
14
  };
@@ -1,6 +1,7 @@
1
+ import { createKnuckleHingeOperation } from "./knuckle-hinge-operation.js";
1
2
  import * as kernel from "./native/index.js";
2
3
  /** Internal host-bound mechanical operations. */
3
- export function createMechanicalOperations(environment) {
4
+ export function createMechanicalOperations(environment, construction) {
4
5
  const { resolution } = environment;
5
6
  const { scope, assertActive, wrapSolid, withResolutionDefaults } = environment;
6
7
  const nutOptions = (value) => ({
@@ -9,6 +10,7 @@ export function createMechanicalOperations(environment) {
9
10
  });
10
11
  // Explicit preflight preserves the stable error operation names exposed by these constructors.
11
12
  const operations = {
13
+ knuckleHinge: createKnuckleHingeOperation(environment, construction),
12
14
  threadRidge: (value) => {
13
15
  assertActive();
14
16
  return wrapSolid(kernel.threadRidge(scope, withResolutionDefaults(value)));
@@ -15,7 +15,14 @@ export function createModelingContext(owner, initialResolution) {
15
15
  const sections = createSectionOperations(environment, transforms);
16
16
  const primitives = createPrimitiveOperations(environment, transforms, sections);
17
17
  const construction = createConstructionOperations(environment, sections);
18
- const mechanical = createMechanicalOperations(environment);
18
+ const mechanical = createMechanicalOperations(environment, {
19
+ cylinder: primitives.cylinder,
20
+ box: primitives.box,
21
+ union: construction.union,
22
+ rotate: transforms.operations.rotate,
23
+ translate: transforms.operations.translate,
24
+ subtract: construction.subtract,
25
+ });
19
26
  const patterns = createPatternOperations(environment, transforms);
20
27
  const inspection = createInspectionOperations(environment);
21
28
  return Object.freeze({
@@ -36,7 +36,7 @@ export class RecipeRealization {
36
36
  const args = this.resolveValue(call.args, true);
37
37
  return this.duringNative(() => Reflect.apply(operation, undefined, args));
38
38
  }
39
- /** Split/component handles share one operation result, even when selected separately. */
39
+ /** Joint/split/component handles share one operation result, even when selected separately. */
40
40
  evaluate(call) {
41
41
  if (!this.resolvedCalls.has(call))
42
42
  this.resolvedCalls.set(call, this.invoke(call));
@@ -76,7 +76,9 @@ export class RecipeRealization {
76
76
  return retained;
77
77
  }
78
78
  const result = this.evaluate(recipe.call);
79
- const selected = recipe.index === undefined ? result : result[recipe.index];
79
+ const selected = recipe.index === undefined
80
+ ? result
81
+ : result[recipe.index];
80
82
  this.realized.set(shape, selected);
81
83
  return selected;
82
84
  }
@@ -43,7 +43,7 @@ export function createSectionOperations(environment, transforms) {
43
43
  polygon: (input) => {
44
44
  assertActive();
45
45
  if (Array.isArray(input) ||
46
- (typeof input === "object" && input !== null && "toArray" in input))
46
+ (typeof input === "object" && input !== null && ("toData" in input || "dimension" in input)))
47
47
  return fromContours([input]);
48
48
  if (typeof input !== "object" || input === null)
49
49
  throwGeometryError("INVALID_ARGUMENT", "polygon", "Use an outline or polygon options.");
@@ -1,8 +1,8 @@
1
1
  import { attachmentTransform3 } from "../geometry/anchors.js";
2
2
  import { vector2Data, vector3Data, } from "../geometry/math/vector-value.js";
3
3
  import { assertPrimitiveOptions } from "../geometry/primitive-resolvers.js";
4
- import { transform2, transform3, } from "../geometry/transform-chain.js";
5
4
  import { readTransformMatrix } from "../geometry/transform-matrix.js";
5
+ import { transform2, transform3, } from "../geometry/transform-value.js";
6
6
  import { eulerTransform3, scaleTransform3, translationTransform3, validateTransform3, } from "../geometry/transform3.js";
7
7
  import * as kernel from "./native/index.js";
8
8
  import { transformPrimitiveSectionProfile } from "./primitive-profiles.js";
@@ -160,8 +160,8 @@ export function createTransformOperations(environment) {
160
160
  const transform = ((value, placement) => {
161
161
  const native = resolveHandle(value);
162
162
  const matrix = native.kind === "solid"
163
- ? transform3(readTransformMatrix(placement, 3)).toMatrix()
164
- : transform2(readTransformMatrix(placement, 2)).toMatrix();
163
+ ? transform3(readTransformMatrix(placement, 3)).toData()
164
+ : transform2(readTransformMatrix(placement, 2)).toData();
165
165
  if (native.kind === "solid") {
166
166
  validateCoordinates(matrix, 16, "transform");
167
167
  return environment.preserveAnchors(value, wrapSolid(kernel.transform(scope, native.value, matrix)), matrix);
@@ -0,0 +1,93 @@
1
+ import { boundsCenter, boundsSize, containsBounds, validateBounds } from "./bounds.js";
2
+ import { GeometryError } from "./errors.js";
3
+ import { immutableMathClass } from "./math/immutable-value.js";
4
+ import { vector2, vector3 } from "./math/vector-value.js";
5
+ function fail(dimension, message) {
6
+ throw new GeometryError("INVALID_ARGUMENT", message, { operation: `bounds${dimension}` });
7
+ }
8
+ function snapshot(input, dimension) {
9
+ if (typeof input !== "object" || input === null)
10
+ fail(dimension, "Bounds require minimum and maximum coordinate tuples.");
11
+ const { min, max } = input;
12
+ if (!Array.isArray(min) ||
13
+ !Array.isArray(max) ||
14
+ min.length !== dimension ||
15
+ max.length !== dimension)
16
+ fail(dimension, `Bounds require matching ${dimension}D minimum and maximum tuples.`);
17
+ const minimum = min, maximum = max;
18
+ const copy = (source) => Object.freeze(Array.from({ length: dimension }, (_, axis) => {
19
+ const value = source[axis];
20
+ return value === 0 ? 0 : value;
21
+ }));
22
+ const data = Object.freeze({ min: copy(minimum), max: copy(maximum) });
23
+ validateBounds(data, `bounds${dimension}`);
24
+ return data;
25
+ }
26
+ const PlanarBounds = /* @__PURE__ */ immutableMathClass(class PlanarBounds {
27
+ #data;
28
+ min;
29
+ max;
30
+ constructor(data) {
31
+ this.#data = data;
32
+ this.min = data.min;
33
+ this.max = data.max;
34
+ Object.freeze(this);
35
+ }
36
+ size() {
37
+ return vector2(boundsSize(this));
38
+ }
39
+ center() {
40
+ return vector2(boundsCenter(this));
41
+ }
42
+ containsBounds(other) {
43
+ return containsBounds(this, other);
44
+ }
45
+ toData() {
46
+ return this.#data;
47
+ }
48
+ });
49
+ const SpatialBounds = /* @__PURE__ */ immutableMathClass(class SpatialBounds {
50
+ #data;
51
+ min;
52
+ max;
53
+ constructor(data) {
54
+ this.#data = data;
55
+ this.min = data.min;
56
+ this.max = data.max;
57
+ Object.freeze(this);
58
+ }
59
+ size() {
60
+ return vector3(boundsSize(this));
61
+ }
62
+ center() {
63
+ return vector3(boundsCenter(this));
64
+ }
65
+ containsBounds(other) {
66
+ return containsBounds(this, other);
67
+ }
68
+ toData() {
69
+ return this.#data;
70
+ }
71
+ });
72
+ /**
73
+ * Snapshots finite ordered XY bounds in millimetres as an immutable fluent value.
74
+ *
75
+ * Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
76
+ * overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
77
+ * Compiled Generator packages passing these values to host recipes or computed data require
78
+ * runtime 8.0.0 or newer in major 8.
79
+ */
80
+ export function bounds2(input) {
81
+ return new PlanarBounds(snapshot(input, 2));
82
+ }
83
+ /**
84
+ * Snapshots finite ordered XYZ bounds in millimetres as an immutable fluent value.
85
+ *
86
+ * Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
87
+ * overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
88
+ * Compiled Generator packages passing these values to host recipes or computed data require
89
+ * runtime 8.0.0 or newer in major 8.
90
+ */
91
+ export function bounds3(input) {
92
+ return new SpatialBounds(snapshot(input, 3));
93
+ }
@@ -13,7 +13,8 @@ function vector(values, operation) {
13
13
  ? Object.freeze([normalized[0], normalized[1]])
14
14
  : Object.freeze([normalized[0], normalized[1], normalized[2]]);
15
15
  }
16
- function validate(bounds, operation) {
16
+ /** Internal shared validation for tuple algorithms and immutable bounds snapshots. */
17
+ export function validateBounds(bounds, operation) {
17
18
  if (typeof bounds !== "object" ||
18
19
  bounds === null ||
19
20
  !isArray(bounds.min) ||
@@ -54,23 +55,23 @@ export function boundsFromSize(dimensions, options = {}) {
54
55
  });
55
56
  }
56
57
  export function boundsSize(bounds) {
57
- validate(bounds, "boundsSize");
58
+ validateBounds(bounds, "boundsSize");
58
59
  return vector(size(bounds), "boundsSize");
59
60
  }
60
61
  export function boundsCenter(bounds) {
61
- validate(bounds, "boundsCenter");
62
+ validateBounds(bounds, "boundsCenter");
62
63
  return vector(center(bounds), "boundsCenter");
63
64
  }
64
65
  export function containsBounds(outer, inner) {
65
- const dimension = validate(outer, "containsBounds");
66
- if (validate(inner, "containsBounds") !== dimension)
66
+ const dimension = validateBounds(outer, "containsBounds");
67
+ if (validateBounds(inner, "containsBounds") !== dimension)
67
68
  fail("containsBounds", "Contained bounds must have the same dimension.");
68
69
  return outer.min.every((value, axis) => inner.min[axis] >= value && inner.max[axis] <= outer.max[axis]);
69
70
  }
70
71
  export function fitBounds(source, target, options = {}) {
71
72
  const operation = "fitBounds";
72
- const dimension = validate(source, operation);
73
- if (validate(target, operation) !== dimension)
73
+ const dimension = validateBounds(source, operation);
74
+ if (validateBounds(target, operation) !== dimension)
74
75
  fail(operation, "Source and target bounds must have the same dimension.");
75
76
  if (typeof options !== "object" || options === null || isArray(options))
76
77
  fail(operation, "Fitting options must be an object.");
@@ -94,6 +95,7 @@ export function fitBounds(source, target, options = {}) {
94
95
  }
95
96
  /**
96
97
  * Returns immutable translations for a +X row of finite XYZ bounds with a nonnegative gap.
98
+ *
97
99
  * Each minimum Y/Z becomes zero, and the first minimum X becomes zero. Supply bounds after
98
100
  * any intended part rotation; translations apply to those bounds. An empty input returns [].
99
101
  */
@@ -106,7 +108,7 @@ export function layoutRow(bounds, options = {}) {
106
108
  fail(operation, "Row gap must be finite and nonnegative.");
107
109
  let nextX = 0;
108
110
  return Object.freeze(Array.from(bounds, (item) => {
109
- if (validate(item, operation) !== 3)
111
+ if (validateBounds(item, operation) !== 3)
110
112
  fail(operation, "Row layout requires XYZ bounds.");
111
113
  const position = vector([nextX - item.min[0], -item.min[1], -item.min[2]], operation);
112
114
  nextX += item.max[0] - item.min[0] + gap;
@@ -237,8 +237,7 @@ export function sampleCurve3(curve, options = {}) {
237
237
  return sampleCurve(curve, options, createSpatialSampleWriter);
238
238
  }
239
239
  /** Samples a planar curve with the same guarantees and policy as spatial sampling.
240
- * @remarks Private spatial scratch math is shared, while only final planar vectors are copied and
241
- * frozen. At stationary tangents, outgoing secants are preferred and endpoints use a backward fallback.
240
+ * @remarks Returned planar points and tangents are copied and frozen. At stationary tangents, outgoing secants are preferred and endpoints use a backward fallback.
242
241
  * @example
243
242
  * ```ts
244
243
  * const turn = sampleCurve2({kind: "arc", center: [0,0], radius: 10, sweepAngle: 90});
@@ -50,6 +50,7 @@ export class GeometryError extends Error {
50
50
  }
51
51
  /**
52
52
  * Recognizes structured geometry errors from separately bundled Modeling copies in the same realm.
53
+ *
53
54
  * Ordinary errors and unmarked code-shaped objects are rejected. The marker is execution-local and
54
55
  * does not survive structured cloning; worker protocols carry their own serialized error envelope.
55
56
  */
@@ -77,16 +77,27 @@ function planHeightfield(options, limits) {
77
77
  facts: Object.freeze({ sampleCount, vertexCount, triangleCount, byteCount }),
78
78
  };
79
79
  }
80
- /** Checks grid dimensions, coordinate precision, and allocation bounds before evaluating heights. */
80
+ /**
81
+ * Checks grid options, Float32 axis precision, and output limits; returns exact mesh buffer counts.
82
+ *
83
+ * This pure operation needs no engine and neither evaluates `height` nor allocates mesh buffers.
84
+ * Successful preflight leaves height values, Float32 base storage, and generated mesh validity to
85
+ * construction. `byteCount` covers position and index buffers, not total working memory.
86
+ *
87
+ * @see {@link heightfieldMesh}
88
+ */
81
89
  export function preflightHeightfield(options, limits = {}) {
82
90
  return planHeightfield(options, limits).facts;
83
91
  }
84
92
  /**
85
93
  * Builds a closed indexed mesh from a rectilinear top, matched boundary walls, and flat base.
94
+ *
86
95
  * Heights run once per grid point after preflight; center-error adds one evaluation per cell.
87
96
  * Top winding is +Z, the base is -Z, and sides face outward. Coordinates and heights must fit
88
97
  * Float32 storage. Explicit axes are captured before sampling; shared wall vertices prevent cracks.
89
98
  *
99
+ * @see {@link preflightHeightfield}
100
+ *
90
101
  * @example Sample a closed wavy mesh
91
102
  * ```ts
92
103
  * heightfieldMesh({
@@ -1,4 +1,5 @@
1
1
  /** Pure geometry foundations without host initialization. @packageDocumentation */
2
+ export { bounds2, bounds3, } from "./bounds-value.js";
2
3
  export { boundsFromSize, boundsSize, boundsCenter, containsBounds, fitBounds, layoutRow, } from "./bounds.js";
3
4
  export { fitTextLayout } from "./text-fitting.js";
4
5
  export { gridPatternTransforms, linearPatternTransforms, radialPatternTransforms, pathPatternTransforms, } from "./patterns.js";
@@ -12,7 +13,7 @@ export { defaultGeometrySamplingLimits, resolveGeometrySamplingLimits, } from ".
12
13
  export { GeometryError, isGeometryError, } from "./errors.js";
13
14
  export { resolveExtrusionDivisions, } from "./extrusion.js";
14
15
  export { extrudeMesh, loftMesh, triangulateContour, } from "./loft/loft.js";
15
- export { transform2, transform3, } from "./transform-chain.js";
16
+ export { transform2, transform3, } from "./transform-value.js";
16
17
  export { vector2, vector3, } from "./math/vector-value.js";
17
18
  export { add2, subtract2, scale2, dot2, cross2, length2, distance2, normalize2, lerp2, rotate2, } from "./math/vector2.js";
18
19
  export { add3, cross3, dot3, length3, distance3, lerp3, normalize3, projectOntoPlane3, scale3, subtract3, } from "./math/vector3.js";
@@ -49,3 +50,4 @@ export { IDENTITY_TRANSFORM3, applyTransformDirection3, applyTransformPoint3, co
49
50
  export { sampleTextContours } from "./text-contours.js";
50
51
  export { sampleCurve2, sampleCurve3 } from "./curves/sampling.js";
51
52
  export { resamplePolyline2, resamplePolyline3, } from "./paths/resampling.js";
53
+ export { resolveKnuckleHinge, } from "./mechanical/knuckle-hinge.js";
@@ -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/7");
2
+ const immutableMath = Symbol.for("@metamesh/modeling/immutable-math/8");
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.
@@ -34,7 +34,7 @@ const tupleData = (input, dimensions) => {
34
34
  return invalidVector(dimensions);
35
35
  let values = input;
36
36
  if (!Array.isArray(input)) {
37
- const method = Reflect.get(input, "toArray");
37
+ const method = Reflect.get(input, "toData");
38
38
  if (typeof method !== "function")
39
39
  return invalidVector(dimensions);
40
40
  values = Reflect.apply(method, input, []);
@@ -88,7 +88,7 @@ const PlanarVector = /* @__PURE__ */ immutableMathClass(class PlanarVector {
88
88
  distance(other) {
89
89
  return finite(distance2(this.values, operand2(other, "vector2.distance")), "vector2.distance");
90
90
  }
91
- toArray() {
91
+ toData() {
92
92
  return this.values;
93
93
  }
94
94
  });
@@ -136,15 +136,19 @@ const SpatialVector = /* @__PURE__ */ immutableMathClass(class SpatialVector {
136
136
  distance(other) {
137
137
  return finite(distance3(this.values, operand3(other, "vector3.distance")), "vector3.distance");
138
138
  }
139
- toArray() {
139
+ toData() {
140
140
  return this.values;
141
141
  }
142
142
  });
143
143
  /**
144
144
  * Creates immutable XY arithmetic from a finite tuple or vector, snapshotting the coordinates.
145
+ *
145
146
  * Values and results are finite. Invalid dimensions throw `INVALID_ARGUMENT`; nonfinite coordinates
146
147
  * and overflow throw `NON_FINITE_VALUE` GeometryError.
147
148
  * Use transform2().applyDirection(value) for rotations and nonuniform scaling.
149
+ *
150
+ * Use `toData()` for frozen tuple interchange, or
151
+ * [normalize2](/docs/reference/geometry/normalize2) for tuple-based normalization in numerical loops.
148
152
  */
149
153
  export function vector2(input) {
150
154
  const values = operand2(input, "vector2");
@@ -152,10 +156,14 @@ export function vector2(input) {
152
156
  }
153
157
  /**
154
158
  * Creates immutable XYZ arithmetic from a finite tuple or vector, snapshotting the coordinates.
159
+ *
155
160
  * Values and results are finite. Invalid dimensions throw `INVALID_ARGUMENT`; nonfinite coordinates
156
161
  * and overflow throw `NON_FINITE_VALUE` GeometryError.
157
162
  * Use transform3().applyDirection(value) for rotations and nonuniform scaling.
158
163
  *
164
+ * Use `toData()` for frozen tuple interchange, or
165
+ * [normalize3](/docs/reference/geometry/normalize3) for tuple-based normalization in numerical loops.
166
+ *
159
167
  * @example
160
168
  * ```ts
161
169
  * const direction = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
@@ -21,6 +21,7 @@ export const length2 = (vector) => Math.hypot(vector[0], vector[1]);
21
21
  export const distance2 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1]);
22
22
  /**
23
23
  * Returns a unit vector; `epsilon` is a finite, non-negative length threshold (default `1e-12`).
24
+ *
24
25
  * Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
25
26
  * `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
26
27
  */
@@ -61,6 +61,7 @@ export const length3 = (vector) => Math.hypot(vector[0], vector[1], vector[2]);
61
61
  export const distance3 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
62
62
  /**
63
63
  * Returns a unit vector; `epsilon` is a finite, non-negative length threshold (default `1e-12`).
64
+ *
64
65
  * Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
65
66
  * `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
66
67
  */
@@ -11,3 +11,4 @@ export { preflightHelicalThreadSolidMesh } from "./thread-mesh-plan.js";
11
11
  export { sampleConventionalThreadHelices as sampleThreadHelices } from "./thread-helices.js";
12
12
  export { compensateThreadDiameters, PRINTABLE_THREAD_FIT_POLICIES, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./threads.js";
13
13
  export { getMetricClearanceHoleDiameter, getMetricFastenerStandard, METRIC_FASTENER_STANDARDS, } from "./standards.js";
14
+ export { resolveKnuckleHinge, } from "./knuckle-hinge.js";
@@ -0,0 +1,110 @@
1
+ import { GeometryError } from "../errors.js";
2
+ import { assertPositivePrimitive, assertPrimitiveOptions } from "../primitive-resolvers.js";
3
+ import { resolveAlignedCircularSegments } from "../resolution.js";
4
+ import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
5
+ /** @internal Shared fixed frame; ordinary transforms place the joint in a model. */
6
+ export const knuckleHingeAxis = Object.freeze({
7
+ position: Object.freeze([0, 0, 0]),
8
+ direction: Object.freeze([1, 0, 0]),
9
+ up: Object.freeze([0, 0, 1]),
10
+ });
11
+ const invalid = (message) => {
12
+ throw new GeometryError("INVALID_ARGUMENT", message, { operation: "resolveKnuckleHinge" });
13
+ };
14
+ /**
15
+ * Resolves equal alternating knuckles along +X, centered at the origin, in millimetres.
16
+ *
17
+ * Both faces of each running pair use a common polygon count; face-sized bores contain the
18
+ * shaft's complete rotational envelope. Adaptive sampling satisfies both face and vertex error
19
+ * bounds; an insufficient ceiling rejects instead of reducing quality. Exact counts are intentional
20
+ * facets. Zero allowances describe ideal contact, not a printable running fit.
21
+ *
22
+ * Rejects nonfinite or nonpositive dimensions, invalid mode/count combinations, exhausted axial
23
+ * length, missing/excessive lift-off engagement, and nonpositive conservative faceted barrel walls.
24
+ * Manufacturing minima, strength, mounting, retention, handedness, and motion remain caller policy.
25
+ */
26
+ export function resolveKnuckleHinge(spec, options = {}) {
27
+ assertPrimitiveOptions(spec, "resolveKnuckleHinge");
28
+ assertPrimitiveOptions(options, "resolveKnuckleHinge");
29
+ for (const key of ["length", "barrelDiameter", "pinDiameter"])
30
+ assertPositivePrimitive(spec[key], key, "resolveKnuckleHinge");
31
+ for (const key of ["radialClearance", "axialGap"])
32
+ if (!Number.isFinite(spec[key]) || spec[key] < 0)
33
+ invalid(`${key} must be finite and nonnegative.`);
34
+ if (!Number.isSafeInteger(spec.knuckleCount) || spec.knuckleCount < 2)
35
+ invalid("knuckleCount must be a safe integer of at least two.");
36
+ if (!["print-in-place", "inserted-pin", "lift-off"].includes(spec.mode))
37
+ invalid("Unknown hinge mode.");
38
+ if (spec.mode === "print-in-place" && spec.knuckleCount % 2 !== 1)
39
+ invalid("Print-in-place needs an odd count.");
40
+ if (spec.mode === "lift-off" && spec.knuckleCount !== 2)
41
+ invalid("Lift-off needs two knuckles.");
42
+ if (spec.mode !== "lift-off" && spec.pinEngagement !== undefined)
43
+ invalid("pinEngagement requires lift-off mode.");
44
+ const limits = resolveGeometrySamplingLimits(options.limits);
45
+ assertSamplingCount(spec.knuckleCount, "resolveKnuckleHinge", limits.maxPathPoints);
46
+ const knuckleLength = (spec.length - (spec.knuckleCount - 1) * spec.axialGap) / spec.knuckleCount;
47
+ if (!Number.isFinite(knuckleLength) || knuckleLength <= 0)
48
+ invalid("Axial gaps consume the knuckles.");
49
+ if (spec.mode === "lift-off" &&
50
+ (!Number.isFinite(spec.pinEngagement) ||
51
+ spec.pinEngagement <= 0 ||
52
+ spec.pinEngagement > knuckleLength))
53
+ invalid("pinEngagement must be positive and fit the socket.");
54
+ const barrelRadius = spec.barrelDiameter / 2;
55
+ const pinRadius = spec.pinDiameter / 2;
56
+ const boreRadius = pinRadius + spec.radialClearance;
57
+ if (!(pinRadius > 0) || !(boreRadius < barrelRadius))
58
+ invalid("Pin and bore must fit inside the barrel.");
59
+ const segments = resolveAlignedCircularSegments(barrelRadius, {
60
+ ...options,
61
+ sizing: "face",
62
+ alignTo: [4],
63
+ minSegments: 4,
64
+ });
65
+ const cosine = Math.cos(Math.PI / segments);
66
+ const boreOuterRadius = boreRadius / cosine;
67
+ const minimumBarrelWall = barrelRadius * cosine - boreOuterRadius;
68
+ if (minimumBarrelWall <= 0)
69
+ invalid("Facets consume the wall; increase segments or barrel diameter.");
70
+ const common = {
71
+ length: spec.length,
72
+ knuckleCount: spec.knuckleCount,
73
+ barrelDiameter: spec.barrelDiameter,
74
+ pinDiameter: spec.pinDiameter,
75
+ radialClearance: spec.radialClearance,
76
+ axialGap: spec.axialGap,
77
+ };
78
+ const copied = Object.freeze(spec.mode === "lift-off"
79
+ ? {
80
+ ...common,
81
+ mode: spec.mode,
82
+ knuckleCount: spec.knuckleCount,
83
+ pinEngagement: spec.pinEngagement,
84
+ }
85
+ : { ...common, mode: spec.mode });
86
+ return Object.freeze({
87
+ spec: copied,
88
+ barrelRadius,
89
+ pinRadius,
90
+ boreRadius,
91
+ boreOuterRadius,
92
+ minimumBarrelWall,
93
+ knuckleLength,
94
+ segments,
95
+ knuckles: Object.freeze(Array.from({ length: spec.knuckleCount }, (_, index) => Object.freeze({
96
+ side: index % 2 === 0 ? "a" : "b",
97
+ start: -spec.length / 2 + index * (knuckleLength + spec.axialGap),
98
+ length: knuckleLength,
99
+ }))),
100
+ pin: spec.mode === "inserted-pin"
101
+ ? null
102
+ : Object.freeze({
103
+ start: -spec.length / 2,
104
+ length: spec.mode === "lift-off"
105
+ ? knuckleLength + spec.axialGap + spec.pinEngagement
106
+ : spec.length,
107
+ }),
108
+ axis: knuckleHingeAxis,
109
+ });
110
+ }
@@ -348,8 +348,13 @@ export const resolveHelicalThreadSolidMeshPreflight = (options, operation) => {
348
348
  });
349
349
  };
350
350
  /**
351
- * Validates a direct thread solid and returns its conservative allocation estimate without
352
- * constructing vertex or index buffers.
351
+ * Checks thread dimensions, profile, end treatments, sampling, and conservative estimates against output limits.
352
+ *
353
+ * This pure operation needs no engine and constructs planning data without vertex or index buffers.
354
+ * `circularSegments` is the selected count; row and triangle counts are conservative estimates.
355
+ * Successful preflight leaves generated coordinate and topology checks to mesh construction.
356
+ *
357
+ * @see {@link helicalThreadSolidMesh}
353
358
  */
354
359
  export function preflightHelicalThreadSolidMesh(options) {
355
360
  return resolveHelicalThreadSolidMeshPreflight(options, "preflightHelicalThreadSolidMesh")