@metamesh/modeling 0.15.0 → 0.17.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 (719) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +54 -6
  3. package/dist/api/engine.d.ts +4 -3
  4. package/dist/api/geometry.d.ts +608 -266
  5. package/dist/api/index.d.ts +516 -110
  6. package/dist/api/text.d.ts +6 -6
  7. package/dist/docs/guides/concepts.md +298 -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 +68 -36
  13. package/dist/docs/guides/standalone-model.md +42 -0
  14. package/dist/docs/manifest.json +1034 -296
  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/Bounds2Options.md +72 -0
  43. package/dist/docs/reference/geometry/Bounds3-type.md +127 -0
  44. package/dist/docs/reference/geometry/Bounds3Data.md +45 -0
  45. package/dist/docs/reference/geometry/Bounds3Input.md +21 -0
  46. package/dist/docs/reference/geometry/Bounds3Options.md +72 -0
  47. package/dist/docs/reference/geometry/BoundsFit2.md +6 -5
  48. package/dist/docs/reference/geometry/BoundsFit3.md +6 -5
  49. package/dist/docs/reference/geometry/BoundsFitOptions.md +2 -1
  50. package/dist/docs/reference/geometry/BoxAnchorFace.md +2 -1
  51. package/dist/docs/reference/geometry/BoxAnchorOptions.md +5 -4
  52. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  53. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  54. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  55. package/dist/docs/reference/geometry/BoxOptions.md +3 -3
  56. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +8 -1
  57. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +5 -1
  58. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  59. package/dist/docs/reference/geometry/CircleContourOptions.md +5 -1
  60. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
  61. package/dist/docs/reference/geometry/CircularResolutionOptions.md +1 -1
  62. package/dist/docs/reference/geometry/CircularSampling.md +41 -0
  63. package/dist/docs/reference/geometry/CircularSamplingOptions.md +14 -0
  64. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +6 -1
  65. package/dist/docs/reference/geometry/ClearanceHoleFit.md +8 -1
  66. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +6 -1
  67. package/dist/docs/reference/geometry/Contour.md +10 -4
  68. package/dist/docs/reference/geometry/ContourCurve.md +5 -1
  69. package/dist/docs/reference/geometry/ContourPoint.md +6 -1
  70. package/dist/docs/reference/geometry/ContourSegment.md +5 -1
  71. package/dist/docs/reference/geometry/CorrespondingComponent.md +5 -1
  72. package/dist/docs/reference/geometry/CorrespondingContour.md +5 -1
  73. package/dist/docs/reference/geometry/CorrespondingProfile.md +5 -1
  74. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +5 -1
  75. package/dist/docs/reference/geometry/CubicBezierCurve2.md +10 -6
  76. package/dist/docs/reference/geometry/CubicBezierCurve3.md +10 -6
  77. package/dist/docs/reference/geometry/Curve2.md +5 -1
  78. package/dist/docs/reference/geometry/Curve3.md +5 -1
  79. package/dist/docs/reference/geometry/CurveSamplingOptions.md +5 -1
  80. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +7 -3
  81. package/dist/docs/reference/geometry/CylinderAnchorFace.md +2 -1
  82. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +4 -3
  83. package/dist/docs/reference/geometry/CylinderOptions.md +1 -1
  84. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +6 -1
  85. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +8 -1
  86. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +5 -1
  87. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +5 -1
  88. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +5 -1
  89. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +6 -1
  90. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +5 -1
  91. package/dist/docs/reference/geometry/CylindricalGearSpec.md +6 -1
  92. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  93. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  94. package/dist/docs/reference/geometry/EllipseContourOptions.md +7 -3
  95. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  96. package/dist/docs/reference/geometry/ExtrudeOptions.md +5 -1
  97. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +5 -1
  98. package/dist/docs/reference/geometry/FittedTextLayout.md +7 -3
  99. package/dist/docs/reference/geometry/Frame3.md +10 -6
  100. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  101. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  102. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  103. package/dist/docs/reference/geometry/GeometryResolution.md +1 -1
  104. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +5 -1
  105. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  106. package/dist/docs/reference/geometry/GridPatternOptions.md +4 -4
  107. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +5 -1
  108. package/dist/docs/reference/geometry/HeightfieldOptions.md +9 -5
  109. package/dist/docs/reference/geometry/HeightfieldPreflight.md +9 -4
  110. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +5 -1
  111. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +5 -1
  112. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +7 -2
  113. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +4 -3
  114. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +5 -1
  115. package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +82 -0
  116. package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +148 -0
  117. package/dist/docs/reference/geometry/KnuckleHingeInterval.md +46 -0
  118. package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +51 -0
  119. package/dist/docs/reference/geometry/KnuckleHingeSpec.md +22 -0
  120. package/dist/docs/reference/geometry/LineCurve2.md +8 -4
  121. package/dist/docs/reference/geometry/LineCurve3.md +8 -4
  122. package/dist/docs/reference/geometry/LinearPatternOptions.md +1 -1
  123. package/dist/docs/reference/geometry/LoftCorrespondence.md +6 -1
  124. package/dist/docs/reference/geometry/LoftMeshStation.md +5 -1
  125. package/dist/docs/reference/geometry/LoftOptions.md +5 -1
  126. package/dist/docs/reference/geometry/LoftPlacement.md +5 -1
  127. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +5 -1
  128. package/dist/docs/reference/geometry/MatchProfilesOptions.md +5 -1
  129. package/dist/docs/reference/geometry/MetricFastenerSize.md +9 -2
  130. package/dist/docs/reference/geometry/MetricFastenerStandard.md +5 -1
  131. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +6 -1
  132. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +6 -1
  133. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  134. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +5 -1
  135. package/dist/docs/reference/geometry/Path2-type.md +12 -8
  136. package/dist/docs/reference/geometry/Path2Data.md +40 -4
  137. package/dist/docs/reference/geometry/Path2Input.md +8 -3
  138. package/dist/docs/reference/geometry/Path3-type.md +12 -8
  139. package/dist/docs/reference/geometry/Path3Data.md +40 -4
  140. package/dist/docs/reference/geometry/Path3Input.md +8 -3
  141. package/dist/docs/reference/geometry/PathFrame.md +9 -5
  142. package/dist/docs/reference/geometry/PathLocation.md +5 -1
  143. package/dist/docs/reference/geometry/PathNormalGuide.md +8 -4
  144. package/dist/docs/reference/geometry/PathOptions.md +5 -1
  145. package/dist/docs/reference/geometry/PathPatternOptions.md +1 -1
  146. package/dist/docs/reference/geometry/PathPlacement.md +8 -4
  147. package/dist/docs/reference/geometry/PathResamplingOptions.md +5 -1
  148. package/dist/docs/reference/geometry/Pivot2Options.md +2 -1
  149. package/dist/docs/reference/geometry/Pivot3Options.md +2 -1
  150. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +8 -1
  151. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +5 -1
  152. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +5 -1
  153. package/dist/docs/reference/geometry/PlanarPatchQuality.md +7 -3
  154. package/dist/docs/reference/geometry/PolygonData.md +7 -2
  155. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +5 -1
  156. package/dist/docs/reference/geometry/PrimitiveAttachment.md +1 -1
  157. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +1 -1
  158. package/dist/docs/reference/geometry/PrintableThreadFit.md +8 -1
  159. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +6 -1
  160. package/dist/docs/reference/geometry/Profile.md +8 -2
  161. package/dist/docs/reference/geometry/ProfileComponent2.md +5 -1
  162. package/dist/docs/reference/geometry/ProfileContour2.md +8 -2
  163. package/dist/docs/reference/geometry/ProfileSpan2.md +7 -3
  164. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +3 -3
  165. package/dist/docs/reference/geometry/RackPitchDimensions.md +6 -1
  166. package/dist/docs/reference/geometry/RackPitchSpec.md +6 -1
  167. package/dist/docs/reference/geometry/RadialPatternOptions.md +1 -1
  168. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  169. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  170. package/dist/docs/reference/geometry/RectangleContourOptions.md +7 -3
  171. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +5 -1
  172. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +5 -1
  173. package/dist/docs/reference/geometry/RectangleProfileOptions.md +7 -3
  174. package/dist/docs/reference/geometry/RegionData.md +6 -2
  175. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +5 -1
  176. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  177. package/dist/docs/reference/geometry/RevolveOptions.md +5 -1
  178. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  179. package/dist/docs/reference/geometry/RowLayoutOptions.md +2 -1
  180. package/dist/docs/reference/geometry/SampleContourOptions.md +5 -1
  181. package/dist/docs/reference/geometry/SampleHelixOptions.md +5 -1
  182. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +5 -1
  183. package/dist/docs/reference/geometry/SampledCurve2.md +8 -4
  184. package/dist/docs/reference/geometry/SampledCurve3.md +8 -4
  185. package/dist/docs/reference/geometry/SampledThreadHelices.md +7 -3
  186. package/dist/docs/reference/geometry/SideProfileCurve.md +5 -1
  187. package/dist/docs/reference/geometry/SideProfilePoint.md +6 -1
  188. package/dist/docs/reference/geometry/SideProfileSegment.md +5 -1
  189. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  190. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +5 -1
  191. package/dist/docs/reference/geometry/SphereOptions.md +1 -1
  192. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +5 -1
  193. package/dist/docs/reference/geometry/StrokeCap.md +8 -1
  194. package/dist/docs/reference/geometry/StrokeJoin.md +8 -1
  195. package/dist/docs/reference/geometry/StrokeOptions.md +5 -1
  196. package/dist/docs/reference/geometry/SvgImportOptions.md +20 -1
  197. package/dist/docs/reference/geometry/SvgRegionPreflight.md +21 -2
  198. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +7 -3
  199. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +6 -1
  200. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +6 -1
  201. package/dist/docs/reference/geometry/SweepOptions.md +5 -1
  202. package/dist/docs/reference/geometry/SweepOrientation.md +5 -1
  203. package/dist/docs/reference/geometry/ThreadBevelOptions.md +5 -1
  204. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +5 -1
  205. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +5 -1
  206. package/dist/docs/reference/geometry/ThreadEndStyle.md +8 -1
  207. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +5 -1
  208. package/dist/docs/reference/geometry/ThreadHandedness.md +8 -1
  209. package/dist/docs/reference/geometry/ThreadHelixOptions.md +5 -1
  210. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +8 -1
  211. package/dist/docs/reference/geometry/ThreadLeadInShape.md +8 -1
  212. package/dist/docs/reference/geometry/ThreadProfile-type.md +7 -3
  213. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +5 -1
  214. package/dist/docs/reference/geometry/ThreadProfileSpec.md +5 -1
  215. package/dist/docs/reference/geometry/ThreadRole.md +8 -1
  216. package/dist/docs/reference/geometry/ThreadedNutBevel.md +8 -1
  217. package/dist/docs/reference/geometry/ThreadedNutOptions.md +5 -1
  218. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +7 -3
  219. package/dist/docs/reference/geometry/ThreadedNutShape.md +8 -1
  220. package/dist/docs/reference/geometry/ThreadedRodOptions.md +5 -1
  221. package/dist/docs/reference/geometry/TorusOptions.md +1 -1
  222. package/dist/docs/reference/geometry/Transform2-type.md +6 -5
  223. package/dist/docs/reference/geometry/Transform2Data.md +15 -0
  224. package/dist/docs/reference/geometry/Transform2Input.md +4 -3
  225. package/dist/docs/reference/geometry/Transform3-type.md +6 -5
  226. package/dist/docs/reference/geometry/Transform3Data.md +18 -0
  227. package/dist/docs/reference/geometry/Transform3Input.md +4 -3
  228. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +5 -1
  229. package/dist/docs/reference/geometry/TriangleMesh.md +6 -1
  230. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +7 -3
  231. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +5 -1
  232. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +7 -3
  233. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +5 -1
  234. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +5 -1
  235. package/dist/docs/reference/geometry/TriangleMeshSignature.md +7 -3
  236. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +6 -1
  237. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +6 -1
  238. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +5 -1
  239. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +5 -1
  240. package/dist/docs/reference/geometry/TubeOptions.md +1 -1
  241. package/dist/docs/reference/geometry/Vector2-type.md +6 -5
  242. package/dist/docs/reference/geometry/Vector2Data.md +15 -0
  243. package/dist/docs/reference/geometry/Vector2Input.md +4 -3
  244. package/dist/docs/reference/geometry/Vector3-type.md +6 -5
  245. package/dist/docs/reference/geometry/Vector3Data.md +15 -0
  246. package/dist/docs/reference/geometry/Vector3Input.md +4 -3
  247. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +6 -1
  248. package/dist/docs/reference/geometry/VectorTextLayout.md +5 -1
  249. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +7 -3
  250. package/dist/docs/reference/geometry/VectorTextMetrics.md +7 -3
  251. package/dist/docs/reference/geometry/VectorTextOptions.md +5 -1
  252. package/dist/docs/reference/geometry/add2.md +7 -6
  253. package/dist/docs/reference/geometry/add3.md +7 -6
  254. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +5 -1
  255. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +5 -1
  256. package/dist/docs/reference/geometry/anchor3.md +2 -1
  257. package/dist/docs/reference/geometry/anchorFrame3.md +5 -1
  258. package/dist/docs/reference/geometry/applyTransformDirection3.md +8 -7
  259. package/dist/docs/reference/geometry/applyTransformPoint3.md +8 -7
  260. package/dist/docs/reference/geometry/attachmentTransform3.md +5 -4
  261. package/dist/docs/reference/geometry/bounds2.md +39 -0
  262. package/dist/docs/reference/geometry/bounds3.md +39 -0
  263. package/dist/docs/reference/geometry/boundsCenter.md +12 -11
  264. package/dist/docs/reference/geometry/boundsSize.md +12 -11
  265. package/dist/docs/reference/geometry/boxAnchor3.md +4 -3
  266. package/dist/docs/reference/geometry/categories/bounds-layout.md +25 -9
  267. package/dist/docs/reference/geometry/categories/curves-paths.md +21 -9
  268. package/dist/docs/reference/geometry/categories/mechanical.md +22 -10
  269. package/dist/docs/reference/geometry/categories/meshes.md +16 -7
  270. package/dist/docs/reference/geometry/categories/pattern-placement.md +6 -4
  271. package/dist/docs/reference/geometry/categories/primitive-options.md +8 -2
  272. package/dist/docs/reference/geometry/categories/profiles-regions.md +21 -12
  273. package/dist/docs/reference/geometry/categories/resolution-errors.md +8 -3
  274. package/dist/docs/reference/geometry/categories/transforms-math.md +21 -12
  275. package/dist/docs/reference/geometry/categories/vector-import.md +11 -5
  276. package/dist/docs/reference/geometry/circleContour.md +5 -1
  277. package/dist/docs/reference/geometry/closeToAxis.md +14 -5
  278. package/dist/docs/reference/geometry/compensateThreadDiameters.md +5 -1
  279. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +5 -1
  280. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +5 -1
  281. package/dist/docs/reference/geometry/composeTransform3.md +7 -6
  282. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +5 -1
  283. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +11 -2
  284. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +13 -5
  285. package/dist/docs/reference/geometry/computeTriangleMeshSignature.md +5 -1
  286. package/dist/docs/reference/geometry/contourContainsPoint.md +8 -4
  287. package/dist/docs/reference/geometry/cross2.md +6 -5
  288. package/dist/docs/reference/geometry/cross3.md +7 -6
  289. package/dist/docs/reference/geometry/cylinderAnchor3.md +3 -2
  290. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +5 -1
  291. package/dist/docs/reference/geometry/distance2.md +6 -5
  292. package/dist/docs/reference/geometry/distance3.md +6 -5
  293. package/dist/docs/reference/geometry/distributeAlongPath.md +5 -1
  294. package/dist/docs/reference/geometry/dot2.md +6 -5
  295. package/dist/docs/reference/geometry/dot3.md +6 -5
  296. package/dist/docs/reference/geometry/ellipseContour.md +5 -1
  297. package/dist/docs/reference/geometry/eulerTransform3.md +7 -6
  298. package/dist/docs/reference/geometry/extrudeMesh.md +5 -1
  299. package/dist/docs/reference/geometry/fitBounds.md +10 -9
  300. package/dist/docs/reference/geometry/fitTextLayout.md +13 -5
  301. package/dist/docs/reference/geometry/frameTransform3.md +5 -4
  302. package/dist/docs/reference/geometry/getMetricClearanceHoleDiameter.md +5 -1
  303. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +5 -1
  304. package/dist/docs/reference/geometry/gridPatternTransforms.md +4 -4
  305. package/dist/docs/reference/geometry/heightfieldMesh.md +11 -2
  306. package/dist/docs/reference/geometry/helicalThreadRidgeMesh.md +5 -1
  307. package/dist/docs/reference/geometry/helicalThreadSolidMesh.md +5 -1
  308. package/dist/docs/reference/geometry/inverseTransform3.md +6 -5
  309. package/dist/docs/reference/geometry/isGeometryError.md +5 -2
  310. package/dist/docs/reference/geometry/joinTriangleMeshes.md +5 -1
  311. package/dist/docs/reference/geometry/layoutRow.md +11 -7
  312. package/dist/docs/reference/geometry/length2.md +5 -4
  313. package/dist/docs/reference/geometry/length3.md +5 -4
  314. package/dist/docs/reference/geometry/lerp2.md +7 -6
  315. package/dist/docs/reference/geometry/lerp3.md +7 -6
  316. package/dist/docs/reference/geometry/linearPatternTransforms.md +4 -4
  317. package/dist/docs/reference/geometry/loftMesh.md +5 -1
  318. package/dist/docs/reference/geometry/matchProfiles.md +11 -2
  319. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +5 -1
  320. package/dist/docs/reference/geometry/meshBounds.md +8 -4
  321. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +5 -1
  322. package/dist/docs/reference/geometry/normalize2.md +10 -6
  323. package/dist/docs/reference/geometry/normalize3.md +10 -6
  324. package/dist/docs/reference/geometry/normalizeContour.md +8 -4
  325. package/dist/docs/reference/geometry/normalizePolygon.md +5 -1
  326. package/dist/docs/reference/geometry/normalizeRegion.md +5 -1
  327. package/dist/docs/reference/geometry/optimizePlanarPatches.md +5 -1
  328. package/dist/docs/reference/geometry/path2.md +14 -2
  329. package/dist/docs/reference/geometry/path3.md +8 -1
  330. package/dist/docs/reference/geometry/pathPatternTransforms.md +9 -5
  331. package/dist/docs/reference/geometry/preflightHeightfield.md +11 -2
  332. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +11 -2
  333. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +13 -2
  334. package/dist/docs/reference/geometry/preflightSvgRegion.md +24 -2
  335. package/dist/docs/reference/geometry/preflightThreadedNut.md +12 -2
  336. package/dist/docs/reference/geometry/preflightThreadedRod.md +12 -2
  337. package/dist/docs/reference/geometry/projectOntoPlane3.md +7 -6
  338. package/dist/docs/reference/geometry/radialPatternTransforms.md +4 -4
  339. package/dist/docs/reference/geometry/rectangleContour.md +10 -3
  340. package/dist/docs/reference/geometry/rectangleProfile.md +10 -2
  341. package/dist/docs/reference/geometry/regionArea.md +5 -1
  342. package/dist/docs/reference/geometry/regionBounds.md +8 -4
  343. package/dist/docs/reference/geometry/regularPolygonContour.md +8 -4
  344. package/dist/docs/reference/geometry/resamplePolyline2.md +8 -4
  345. package/dist/docs/reference/geometry/resamplePolyline3.md +8 -4
  346. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +1 -1
  347. package/dist/docs/reference/geometry/resolveArcSegments.md +1 -1
  348. package/dist/docs/reference/geometry/resolveCircularSampling.md +40 -0
  349. package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
  350. package/dist/docs/reference/geometry/resolveCylindricalGear.md +5 -1
  351. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +5 -1
  352. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +5 -1
  353. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +5 -1
  354. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  355. package/dist/docs/reference/geometry/resolveKnuckleHinge.md +59 -0
  356. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +5 -1
  357. package/dist/docs/reference/geometry/resolveRackPitch.md +5 -1
  358. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +5 -1
  359. package/dist/docs/reference/geometry/reverseTriangleMesh.md +5 -1
  360. package/dist/docs/reference/geometry/revolveMesh.md +5 -1
  361. package/dist/docs/reference/geometry/rotate2.md +6 -5
  362. package/dist/docs/reference/geometry/rotationTransform3.md +7 -6
  363. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +8 -4
  364. package/dist/docs/reference/geometry/sampleContour.md +12 -2
  365. package/dist/docs/reference/geometry/sampleCurve2.md +6 -3
  366. package/dist/docs/reference/geometry/sampleCurve3.md +5 -1
  367. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +5 -1
  368. package/dist/docs/reference/geometry/sampleHelix.md +13 -5
  369. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +5 -1
  370. package/dist/docs/reference/geometry/sampleRackToothPath.md +8 -4
  371. package/dist/docs/reference/geometry/sampleSideProfile.md +15 -5
  372. package/dist/docs/reference/geometry/sampleTextContours.md +5 -1
  373. package/dist/docs/reference/geometry/sampleThreadHelices.md +5 -1
  374. package/dist/docs/reference/geometry/scale2.md +6 -5
  375. package/dist/docs/reference/geometry/scale3.md +6 -5
  376. package/dist/docs/reference/geometry/scaleTransform3.md +7 -6
  377. package/dist/docs/reference/geometry/signedContourArea.md +5 -1
  378. package/dist/docs/reference/geometry/starContour.md +8 -4
  379. package/dist/docs/reference/geometry/strokeRegionData.md +5 -1
  380. package/dist/docs/reference/geometry/subtract2.md +7 -6
  381. package/dist/docs/reference/geometry/subtract3.md +7 -6
  382. package/dist/docs/reference/geometry/sweepMesh.md +5 -1
  383. package/dist/docs/reference/geometry/threadProfile.md +5 -1
  384. package/dist/docs/reference/geometry/transform2.md +14 -7
  385. package/dist/docs/reference/geometry/transform3.md +16 -7
  386. package/dist/docs/reference/geometry/transformDeterminant3.md +5 -4
  387. package/dist/docs/reference/geometry/transformRegionData.md +5 -1
  388. package/dist/docs/reference/geometry/transformTriangleMesh.md +5 -1
  389. package/dist/docs/reference/geometry/translationTransform3.md +7 -6
  390. package/dist/docs/reference/geometry/triangulateContour.md +5 -1
  391. package/dist/docs/reference/geometry/validateSolidMesh.md +9 -2
  392. package/dist/docs/reference/geometry/validateTransform3.md +6 -5
  393. package/dist/docs/reference/geometry/validateTriangleMesh.md +5 -1
  394. package/dist/docs/reference/geometry/vector2.md +10 -2
  395. package/dist/docs/reference/geometry/vector3.md +10 -2
  396. package/dist/docs/reference/geometry.md +7 -5
  397. package/dist/docs/reference/model/Anchor3.md +6 -5
  398. package/dist/docs/reference/model/AttachOptions.md +2 -1
  399. package/dist/docs/reference/model/Bounds2-type.md +125 -0
  400. package/dist/docs/reference/model/Bounds2Data.md +44 -0
  401. package/dist/docs/reference/model/Bounds2Input.md +19 -0
  402. package/dist/docs/reference/model/Bounds2Options.md +70 -0
  403. package/dist/docs/reference/model/Bounds3-type.md +125 -0
  404. package/dist/docs/reference/model/Bounds3Data.md +44 -0
  405. package/dist/docs/reference/model/Bounds3Input.md +19 -0
  406. package/dist/docs/reference/model/Bounds3Options.md +70 -0
  407. package/dist/docs/reference/model/BoxEdge.md +1 -1
  408. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  409. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  410. package/dist/docs/reference/model/BoxOptions.md +3 -3
  411. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  412. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  413. package/dist/docs/reference/model/CircleOptions.md +1 -1
  414. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
  415. package/dist/docs/reference/model/Computed.md +6 -1
  416. package/dist/docs/reference/model/ComputedValue.md +5 -1
  417. package/dist/docs/reference/model/Contour.md +6 -4
  418. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  419. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  420. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  421. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  422. package/dist/docs/reference/model/CylinderOptions.md +1 -1
  423. package/dist/docs/reference/model/DiagnosticOptions.md +6 -1
  424. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  425. package/dist/docs/reference/model/EllipseContourOptions.md +3 -3
  426. package/dist/docs/reference/model/EllipseOptions.md +1 -1
  427. package/dist/docs/reference/model/EndTreatments.md +1 -1
  428. package/dist/docs/reference/model/ExtrudeOptions.md +1 -1
  429. package/dist/docs/reference/model/FinalizedModel.md +3 -3
  430. package/dist/docs/reference/model/FinalizedPart.md +1 -1
  431. package/dist/docs/reference/model/Frame3.md +6 -6
  432. package/dist/docs/reference/model/GenerateCallback.md +5 -1
  433. package/dist/docs/reference/model/GenerateContext.md +5 -1
  434. package/dist/docs/reference/model/GeneratedPart.md +5 -1
  435. package/dist/docs/reference/model/GenerationDiagnostic.md +6 -1
  436. package/dist/docs/reference/model/GenerationError.md +5 -1
  437. package/dist/docs/reference/model/GeometryResolution.md +1 -1
  438. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  439. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  440. package/dist/docs/reference/model/GridPatternOptions.md +5 -4
  441. package/dist/docs/reference/model/HeightfieldOptions.md +5 -5
  442. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +2 -1
  443. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +3 -2
  444. package/dist/docs/reference/model/HoleCutterOptions.md +77 -0
  445. package/dist/docs/reference/model/HoleCutterOverrun.md +35 -0
  446. package/dist/docs/reference/model/HoleCutterRecess.md +87 -0
  447. package/dist/docs/reference/model/HullOptions.md +1 -1
  448. package/dist/docs/reference/model/ImmutableBuffer-type.md +5 -1
  449. package/dist/docs/reference/model/ImmutableTriangleMesh.md +5 -1
  450. package/dist/docs/reference/model/ImplicitOptions.md +6 -6
  451. package/dist/docs/reference/model/InternalThreadCutterOptions.md +2 -1
  452. package/dist/docs/reference/model/KnuckleHinge-type.md +47 -0
  453. package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +77 -0
  454. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +38 -0
  455. package/dist/docs/reference/model/KnuckleHingeOptions.md +38 -0
  456. package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +47 -0
  457. package/dist/docs/reference/model/KnuckleHingeSpec.md +18 -0
  458. package/dist/docs/reference/model/KnuckleHingeWeb.md +53 -0
  459. package/dist/docs/reference/model/LinearPatternOptions.md +2 -1
  460. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  461. package/dist/docs/reference/model/LoftOptions.md +1 -1
  462. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  463. package/dist/docs/reference/model/LoftStation.md +1 -1
  464. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  465. package/dist/docs/reference/model/ModelProgram.md +5 -1
  466. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  467. package/dist/docs/reference/model/NumericArray.md +8 -1
  468. package/dist/docs/reference/model/PartGeometry.md +5 -1
  469. package/dist/docs/reference/model/PartOptions.md +5 -1
  470. package/dist/docs/reference/model/Path2-type.md +12 -8
  471. package/dist/docs/reference/model/Path2Data.md +40 -4
  472. package/dist/docs/reference/model/Path2Input.md +8 -3
  473. package/dist/docs/reference/model/Path3-type.md +12 -8
  474. package/dist/docs/reference/model/Path3Data.md +40 -4
  475. package/dist/docs/reference/model/Path3Input.md +8 -3
  476. package/dist/docs/reference/model/PathLocation.md +5 -1
  477. package/dist/docs/reference/model/PathNormalGuide.md +4 -4
  478. package/dist/docs/reference/model/PathOptions.md +5 -1
  479. package/dist/docs/reference/model/PathPatternOptions.md +2 -1
  480. package/dist/docs/reference/model/PathResamplingOptions.md +5 -1
  481. package/dist/docs/reference/model/PatternSource.md +2 -1
  482. package/dist/docs/reference/model/Pivot2Options.md +2 -1
  483. package/dist/docs/reference/model/Pivot3Options.md +2 -1
  484. package/dist/docs/reference/model/PlaneOptions.md +1 -1
  485. package/dist/docs/reference/model/PolygonData.md +3 -2
  486. package/dist/docs/reference/model/PolygonOptions.md +1 -1
  487. package/dist/docs/reference/model/PrimitiveAttachment.md +2 -1
  488. package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +2 -1
  489. package/dist/docs/reference/model/PrintableThreadFit.md +2 -1
  490. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +2 -1
  491. package/dist/docs/reference/model/Profile.md +4 -2
  492. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  493. package/dist/docs/reference/model/ProfileContour2.md +4 -2
  494. package/dist/docs/reference/model/ProfileSpan2.md +3 -3
  495. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +3 -3
  496. package/dist/docs/reference/model/RadialPatternOptions.md +2 -1
  497. package/dist/docs/reference/model/RadialSizing.md +1 -1
  498. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  499. package/dist/docs/reference/model/RectangleContourOptions.md +3 -3
  500. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  501. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  502. package/dist/docs/reference/model/RectangleOptions.md +3 -3
  503. package/dist/docs/reference/model/RegionData.md +2 -2
  504. package/dist/docs/reference/model/RegularPolygonOptions.md +1 -1
  505. package/dist/docs/reference/model/RevolveOptions.md +1 -1
  506. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  507. package/dist/docs/reference/model/Section.md +9 -2
  508. package/dist/docs/reference/model/SectionHullOptions.md +1 -1
  509. package/dist/docs/reference/model/SectionInspection.md +4 -4
  510. package/dist/docs/reference/model/SectionOffsetJoin.md +1 -1
  511. package/dist/docs/reference/model/SectionOffsetOptions.md +1 -1
  512. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  513. package/dist/docs/reference/model/Solid.md +9 -2
  514. package/dist/docs/reference/model/SolidInspection.md +4 -4
  515. package/dist/docs/reference/model/SolidSegmentHit.md +4 -4
  516. package/dist/docs/reference/model/SphereOptions.md +1 -1
  517. package/dist/docs/reference/model/StarOptions.md +1 -1
  518. package/dist/docs/reference/model/StrokeCap.md +1 -1
  519. package/dist/docs/reference/model/StrokeJoin.md +1 -1
  520. package/dist/docs/reference/model/StrokeOptions.md +1 -1
  521. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  522. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  523. package/dist/docs/reference/model/SvgSectionOptions.md +14 -1
  524. package/dist/docs/reference/model/SweepOptions.md +1 -1
  525. package/dist/docs/reference/model/SweepOrientation.md +1 -1
  526. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  527. package/dist/docs/reference/model/ThreadEndStyle.md +2 -1
  528. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +2 -1
  529. package/dist/docs/reference/model/ThreadHandedness.md +2 -1
  530. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +2 -1
  531. package/dist/docs/reference/model/ThreadLeadInShape.md +2 -1
  532. package/dist/docs/reference/model/ThreadProfile.md +4 -3
  533. package/dist/docs/reference/model/ThreadRidgeOptions.md +2 -1
  534. package/dist/docs/reference/model/ThreadedNutBevel.md +2 -1
  535. package/dist/docs/reference/model/ThreadedNutOptions.md +2 -1
  536. package/dist/docs/reference/model/ThreadedNutPreflight.md +4 -3
  537. package/dist/docs/reference/model/ThreadedNutShape.md +2 -1
  538. package/dist/docs/reference/model/ThreadedRodOptions.md +2 -1
  539. package/dist/docs/reference/model/TorusOptions.md +1 -1
  540. package/dist/docs/reference/model/Transform2-type.md +6 -5
  541. package/dist/docs/reference/model/Transform2Data.md +16 -0
  542. package/dist/docs/reference/model/Transform2Input.md +4 -3
  543. package/dist/docs/reference/model/Transform3-type.md +6 -5
  544. package/dist/docs/reference/model/Transform3Data.md +19 -0
  545. package/dist/docs/reference/model/Transform3Input.md +4 -3
  546. package/dist/docs/reference/model/TriangleMesh.md +1 -1
  547. package/dist/docs/reference/model/TriangleMeshAnalysis.md +3 -3
  548. package/dist/docs/reference/model/TriangleMeshMeasurements.md +3 -3
  549. package/dist/docs/reference/model/TubeOptions.md +1 -1
  550. package/dist/docs/reference/model/Vector2-type.md +6 -5
  551. package/dist/docs/reference/model/{Vector2Tuple.md → Vector2Data.md} +3 -3
  552. package/dist/docs/reference/model/Vector2Input.md +4 -3
  553. package/dist/docs/reference/model/Vector3-type.md +6 -5
  554. package/dist/docs/reference/model/{Vector3Tuple.md → Vector3Data.md} +3 -3
  555. package/dist/docs/reference/model/Vector3Input.md +4 -3
  556. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  557. package/dist/docs/reference/model/VectorTextMetrics.md +3 -3
  558. package/dist/docs/reference/model/anchor.md +2 -1
  559. package/dist/docs/reference/model/bounds2.md +37 -0
  560. package/dist/docs/reference/model/bounds3.md +37 -0
  561. package/dist/docs/reference/model/box.md +2 -2
  562. package/dist/docs/reference/model/castSegment.md +1 -1
  563. package/dist/docs/reference/model/categories/boolean-operations.md +10 -3
  564. package/dist/docs/reference/model/categories/bounded-surfaces.md +5 -3
  565. package/dist/docs/reference/model/categories/bounds.md +38 -0
  566. package/dist/docs/reference/model/categories/contracts.md +4 -2
  567. package/dist/docs/reference/model/categories/core-values-errors.md +11 -11
  568. package/dist/docs/reference/model/categories/explicit-profiles.md +6 -4
  569. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +12 -3
  570. package/dist/docs/reference/model/categories/generation.md +11 -2
  571. package/dist/docs/reference/model/categories/hinges.md +38 -0
  572. package/dist/docs/reference/model/categories/inspection.md +9 -2
  573. package/dist/docs/reference/model/categories/mesh-inspection.md +5 -3
  574. package/dist/docs/reference/model/categories/paths.md +15 -7
  575. package/dist/docs/reference/model/categories/primitives.md +14 -4
  576. package/dist/docs/reference/model/categories/resolution.md +4 -2
  577. package/dist/docs/reference/model/categories/sections.md +10 -5
  578. package/dist/docs/reference/model/categories/threads.md +10 -7
  579. package/dist/docs/reference/model/categories/transforms-placement.md +17 -9
  580. package/dist/docs/reference/model/circle.md +1 -1
  581. package/dist/docs/reference/model/components.md +1 -1
  582. package/dist/docs/reference/model/compose.md +1 -1
  583. package/dist/docs/reference/model/cylinder.md +1 -1
  584. package/dist/docs/reference/model/distance.md +1 -1
  585. package/dist/docs/reference/model/ellipse.md +1 -1
  586. package/dist/docs/reference/model/extrude.md +1 -1
  587. package/dist/docs/reference/model/generate.md +5 -1
  588. package/dist/docs/reference/model/gridPattern.md +2 -1
  589. package/dist/docs/reference/model/heightfield.md +5 -2
  590. package/dist/docs/reference/model/holeCutter.md +45 -0
  591. package/dist/docs/reference/model/hull.md +1 -1
  592. package/dist/docs/reference/model/immutableBuffer.md +5 -1
  593. package/dist/docs/reference/model/immutableMesh.md +5 -1
  594. package/dist/docs/reference/model/implicit.md +3 -3
  595. package/dist/docs/reference/model/inspectSection.md +1 -1
  596. package/dist/docs/reference/model/inspectSolid.md +1 -1
  597. package/dist/docs/reference/model/internalThreadCutter.md +2 -1
  598. package/dist/docs/reference/model/intersect.md +1 -1
  599. package/dist/docs/reference/model/isEmpty.md +1 -1
  600. package/dist/docs/reference/model/knuckleHinge.md +47 -0
  601. package/dist/docs/reference/model/linearPattern.md +2 -1
  602. package/dist/docs/reference/model/loft.md +1 -1
  603. package/dist/docs/reference/model/matchProfiles.md +1 -1
  604. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  605. package/dist/docs/reference/model/path2.md +14 -2
  606. package/dist/docs/reference/model/path3.md +8 -1
  607. package/dist/docs/reference/model/pathPattern.md +2 -1
  608. package/dist/docs/reference/model/polygon.md +5 -2
  609. package/dist/docs/reference/model/preflightInternalThreadCutter.md +8 -2
  610. package/dist/docs/reference/model/preflightThreadedNut.md +8 -2
  611. package/dist/docs/reference/model/preflightThreadedRod.md +8 -2
  612. package/dist/docs/reference/model/radialPattern.md +2 -1
  613. package/dist/docs/reference/model/rectangle.md +5 -2
  614. package/dist/docs/reference/model/regularPolygon.md +1 -1
  615. package/dist/docs/reference/model/revolve.md +1 -1
  616. package/dist/docs/reference/model/solidFromMesh.md +1 -1
  617. package/dist/docs/reference/model/sphere.md +1 -1
  618. package/dist/docs/reference/model/split.md +1 -1
  619. package/dist/docs/reference/model/splitByPlane.md +1 -1
  620. package/dist/docs/reference/model/star.md +1 -1
  621. package/dist/docs/reference/model/stroke.md +1 -1
  622. package/dist/docs/reference/model/svgPathSection.md +1 -1
  623. package/dist/docs/reference/model/svgSection.md +5 -1
  624. package/dist/docs/reference/model/sweep.md +1 -1
  625. package/dist/docs/reference/model/textSection.md +1 -1
  626. package/dist/docs/reference/model/threadRidge.md +2 -1
  627. package/dist/docs/reference/model/threadedNut.md +2 -1
  628. package/dist/docs/reference/model/threadedRod.md +2 -1
  629. package/dist/docs/reference/model/torus.md +1 -1
  630. package/dist/docs/reference/model/transform2.md +14 -7
  631. package/dist/docs/reference/model/transform3.md +16 -7
  632. package/dist/docs/reference/model/tube.md +1 -1
  633. package/dist/docs/reference/model/union.md +1 -1
  634. package/dist/docs/reference/model/vector2.md +10 -2
  635. package/dist/docs/reference/model/vector3.md +10 -2
  636. package/dist/docs/reference/model.md +15 -8
  637. package/dist/docs/reference/text/Bounds2Data.md +34 -0
  638. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
  639. package/dist/docs/reference/text/Vector2Data.md +7 -0
  640. package/dist/docs/reference/text/VectorFont.md +7 -7
  641. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  642. package/dist/docs/reference/text/VectorTextArcBaseline.md +1 -1
  643. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  644. package/dist/docs/reference/text/VectorTextLayoutOptions.md +3 -3
  645. package/dist/docs/reference/text/VectorTextMetrics.md +3 -3
  646. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  647. package/dist/docs/reference/text/categories/font-preparation.md +6 -4
  648. package/dist/docs/reference/text/prepareVectorFont.md +1 -1
  649. package/dist/docs/reference/text.md +4 -2
  650. package/dist/engine/construction-operations.js +1 -1
  651. package/dist/engine/extrusion-finishing.js +2 -29
  652. package/dist/engine/hole-cutter-operation.js +148 -0
  653. package/dist/engine/knuckle-hinge-operation.js +128 -0
  654. package/dist/engine/loft-operations.js +1 -1
  655. package/dist/engine/mechanical-operations.js +3 -1
  656. package/dist/engine/modeling-context.js +20 -1
  657. package/dist/engine/primitive-operations.js +19 -6
  658. package/dist/engine/recipe-realization.js +4 -2
  659. package/dist/engine/section-operations.js +2 -2
  660. package/dist/engine/transform-operations.js +3 -3
  661. package/dist/geometry/bounds-value.js +121 -0
  662. package/dist/geometry/bounds.js +10 -25
  663. package/dist/geometry/circular-sampling.js +45 -0
  664. package/dist/geometry/convex-offset.js +41 -0
  665. package/dist/geometry/curves/sampling.js +1 -2
  666. package/dist/geometry/errors.js +1 -0
  667. package/dist/geometry/heightfield.js +12 -1
  668. package/dist/geometry/index.js +5 -2
  669. package/dist/geometry/math/immutable-value.js +1 -1
  670. package/dist/geometry/math/vector-value.js +11 -3
  671. package/dist/geometry/math/vector2.js +1 -0
  672. package/dist/geometry/math/vector3.js +1 -0
  673. package/dist/geometry/mechanical/index.js +1 -0
  674. package/dist/geometry/mechanical/knuckle-hinge.js +110 -0
  675. package/dist/geometry/mechanical/thread-mesh-plan.js +7 -2
  676. package/dist/geometry/mechanical/thread-solids.js +29 -4
  677. package/dist/geometry/mesh/mesh-centroid.js +1 -0
  678. package/dist/geometry/mesh/mesh-solid.js +1 -0
  679. package/dist/geometry/paths/frames.js +1 -0
  680. package/dist/geometry/paths/helix.js +1 -0
  681. package/dist/geometry/paths/path-value.js +43 -27
  682. package/dist/geometry/paths/resampling.js +2 -2
  683. package/dist/geometry/patterns/placements.js +3 -3
  684. package/dist/geometry/patterns.js +3 -1
  685. package/dist/geometry/profiles/contour.js +1 -0
  686. package/dist/geometry/profiles/matched.js +1 -0
  687. package/dist/geometry/profiles/profiles.js +3 -23
  688. package/dist/geometry/profiles/rectangle.js +10 -1
  689. package/dist/geometry/profiles/side-profile.js +2 -0
  690. package/dist/geometry/svg/matrix.js +21 -0
  691. package/dist/geometry/svg-import.js +140 -52
  692. package/dist/geometry/sweeps/options.js +1 -1
  693. package/dist/geometry/text-fitting.js +1 -0
  694. package/dist/geometry/transform-matrix.js +1 -1
  695. package/dist/geometry/{transform-chain.js → transform-value.js} +24 -15
  696. package/dist/index.js +2 -1
  697. package/dist/model/execution-binding.js +1 -1
  698. package/dist/model/geometry-recipes.js +1 -1
  699. package/dist/model/hole-cutter.js +1 -0
  700. package/dist/model/immutable-generation-data.js +4 -12
  701. package/dist/model/knuckle-hinge.js +1 -0
  702. package/dist/model/operations.js +78 -3
  703. package/dist/model/recipe-declaration.js +11 -2
  704. package/package.json +1 -1
  705. package/dist/docs/reference/geometry/Bounds2.md +0 -39
  706. package/dist/docs/reference/geometry/Bounds3.md +0 -39
  707. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +0 -23
  708. package/dist/docs/reference/geometry/Transform2Matrix.md +0 -14
  709. package/dist/docs/reference/geometry/Transform3Matrix.md +0 -17
  710. package/dist/docs/reference/geometry/Vector2Tuple.md +0 -14
  711. package/dist/docs/reference/geometry/Vector3Tuple.md +0 -14
  712. package/dist/docs/reference/geometry/boundsFromSize.md +0 -83
  713. package/dist/docs/reference/geometry/containsBounds.md +0 -72
  714. package/dist/docs/reference/model/Bounds2.md +0 -39
  715. package/dist/docs/reference/model/Bounds3.md +0 -39
  716. package/dist/docs/reference/model/Transform2Matrix.md +0 -15
  717. package/dist/docs/reference/model/Transform3Matrix.md +0 -18
  718. package/dist/docs/reference/text/Bounds2.md +0 -34
  719. package/dist/docs/reference/text/Vector2Tuple.md +0 -7
@@ -1,5 +1,7 @@
1
1
  /** Pure geometry foundations without host initialization. @packageDocumentation */
2
- export { boundsFromSize, boundsSize, boundsCenter, containsBounds, fitBounds, layoutRow, } from "./bounds.js";
2
+ export { bounds2, bounds3, } from "./bounds-value.js";
3
+ export { boundsSize, boundsCenter, fitBounds, layoutRow, } from "./bounds.js";
4
+ export { resolveCircularSampling, } from "./circular-sampling.js";
3
5
  export { fitTextLayout } from "./text-fitting.js";
4
6
  export { gridPatternTransforms, linearPatternTransforms, radialPatternTransforms, pathPatternTransforms, } from "./patterns.js";
5
7
  export { validateSolidMesh } from "./mesh/mesh-solid.js";
@@ -12,7 +14,7 @@ export { defaultGeometrySamplingLimits, resolveGeometrySamplingLimits, } from ".
12
14
  export { GeometryError, isGeometryError, } from "./errors.js";
13
15
  export { resolveExtrusionDivisions, } from "./extrusion.js";
14
16
  export { extrudeMesh, loftMesh, triangulateContour, } from "./loft/loft.js";
15
- export { transform2, transform3, } from "./transform-chain.js";
17
+ export { transform2, transform3, } from "./transform-value.js";
16
18
  export { vector2, vector3, } from "./math/vector-value.js";
17
19
  export { add2, subtract2, scale2, dot2, cross2, length2, distance2, normalize2, lerp2, rotate2, } from "./math/vector2.js";
18
20
  export { add3, cross3, dot3, length3, distance3, lerp3, normalize3, projectOntoPlane3, scale3, subtract3, } from "./math/vector3.js";
@@ -49,3 +51,4 @@ export { IDENTITY_TRANSFORM3, applyTransformDirection3, applyTransformPoint3, co
49
51
  export { sampleTextContours } from "./text-contours.js";
50
52
  export { sampleCurve2, sampleCurve3 } from "./curves/sampling.js";
51
53
  export { resamplePolyline2, resamplePolyline3, } from "./paths/resampling.js";
54
+ 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/9");
3
3
  /**
4
4
  * Brands and freezes only this constructor's prototype. Pure-annotated callers let bundlers
5
5
  * discard unused classes without dropping initialization for classes that remain reachable.
@@ -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")
@@ -96,11 +96,30 @@ export const resolveCompensatedThreadSolidMesh = (options, role) => {
96
96
  });
97
97
  };
98
98
  const preflightCompensatedThreadSolid = (options, role) => preflightHelicalThreadSolidMesh(resolveCompensatedThreadSolidMesh(options, role).meshOptions);
99
- /** Preflights the exact compensated direct mesh used by the threaded rod constructor. */
99
+ /**
100
+ * Resolves compensated rod dimensions and checks conservative mesh estimates against output limits.
101
+ *
102
+ * This pure operation uses explicit resolution and limits or package defaults, without an active
103
+ * host execution. It creates planning data without mesh buffers or native objects; returned row
104
+ * and triangle counts are estimates. Mesh validity and native construction are checked later.
105
+ *
106
+ * @see {@link preflightHelicalThreadSolidMesh}
107
+ * @see {@link helicalThreadSolidMesh}
108
+ */
100
109
  export function preflightThreadedRodSolid(options) {
101
110
  return preflightCompensatedThreadSolid(options, "male");
102
111
  }
103
- /** Preflights the exact extended mesh used by the internal thread cutter constructor. */
112
+ /**
113
+ * Resolves compensated cutter dimensions and checks extended mesh estimates against output limits.
114
+ *
115
+ * This pure operation uses explicit resolution and limits or package defaults, without an active
116
+ * host execution. It includes the cutter's one-pitch extension beyond each requested face and
117
+ * creates planning data without mesh buffers or native objects. Row and triangle counts are
118
+ * estimates; mesh validity and native construction are checked later.
119
+ *
120
+ * @see {@link preflightHelicalThreadSolidMesh}
121
+ * @see {@link helicalThreadSolidMesh}
122
+ */
104
123
  export function preflightInternalThreadCutterSolid(options) {
105
124
  return preflightCompensatedThreadSolid(options, "female");
106
125
  }
@@ -222,8 +241,14 @@ export const resolveThreadedNutSolid = (options, operation) => {
222
241
  });
223
242
  };
224
243
  /**
225
- * Resolves a nut's exact body/cutter chamfer and preflights its extended thread mesh without
226
- * allocating Manifold WASM objects.
244
+ * Checks nut dimensions, chamfers, end-face wall, and the extended compensated cutter's allocation plan.
245
+ *
246
+ * This pure operation uses explicit resolution and limits or package defaults, without an active
247
+ * host execution. It resolves body/cutter dimensions without mesh buffers or native objects.
248
+ * `thread` contains conservative cutter estimates, excluding the body and Boolean result.
249
+ * Successful preflight leaves mesh validity, native construction, and manufacturing fit to later checks.
250
+ *
251
+ * @see {@link preflightHelicalThreadSolidMesh}
227
252
  */
228
253
  export function preflightThreadedNutSolid(options) {
229
254
  return resolveThreadedNutSolid(options, "preflightThreadedNutSolid").preflight;
@@ -2,6 +2,7 @@ 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.
5
+ *
5
6
  * Coordinates are millimetres. Indexed closure and positive aggregate volume are required; callers
6
7
  * may use validateSolidMesh first when geometric intersections and shell orientation are untrusted.
7
8
  * Fresh mutable input is inspected on every call, and buffers are never changed.
@@ -7,6 +7,7 @@ const MAXIMUM_TRIANGLES = 200_000;
7
7
  const MAXIMUM_TESTS = 2_000_000;
8
8
  /**
9
9
  * Checks closed indexed topology, triangle intersections, and alternating nested shell orientation.
10
+ *
10
11
  * Outward exterior shells and inward cavity shells are accepted. Separate shells must not touch,
11
12
  * intersect, or overlap as material. Indexed neighbours may share their own vertex or edge.
12
13
  *
@@ -50,6 +50,7 @@ const transportNormal = (normal, previousTangent, tangent) => {
50
50
  };
51
51
  /**
52
52
  * Builds rotation-minimizing frames by parallel-transporting the previous normal.
53
+ *
53
54
  * This avoids the sudden profile flips produced by picking a fresh up-vector per ring.
54
55
  * Paths exceeding maxPathPoints (default 100000) reject before frame allocation or guide evaluation.
55
56
  * Requires open path values; raw tuples are interpreted as an open path. Invalid paths throw GeometryError.
@@ -2,6 +2,7 @@ import { GeometryError } from "../errors.js";
2
2
  import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
3
3
  /**
4
4
  * Creates `segments + 1` points including exact helix endpoints from finite positive dimensions.
5
+ *
5
6
  * Integrated weights must remain finite. The maxPathPoints ceiling defaults to 100000; excessive
6
7
  * exact counts reject before evaluating axial weights or allocating sample arrays.
7
8
  * Invalid inputs use GeometryError; exceptions thrown by axialWeight propagate unchanged.
@@ -1,10 +1,11 @@
1
+ import { bounds2, bounds3 } from "../bounds-value.js";
1
2
  import { GeometryError } from "../errors.js";
2
3
  import { immutableMathClass } from "../math/immutable-value.js";
3
4
  import { vector2, vector2Data, vector3, vector3Data, } from "../math/vector-value.js";
4
5
  import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
5
6
  import { transformPath2, transformPath3 } from "../transform-geometry.js";
6
7
  import { closestPointOnValidatedPath } from "./closest-point.js";
7
- import { resamplePath2Data, resamplePath3Data } from "./resampling.js";
8
+ import { resamplePath2Points, resamplePath3Points } from "./resampling.js";
8
9
  const fail = (message, code = "INVALID_ARGUMENT") => {
9
10
  throw new GeometryError(code, message, { operation: "path" });
10
11
  };
@@ -19,9 +20,13 @@ function freezePoints(points) {
19
20
  Object.freeze(point);
20
21
  return Object.freeze(points);
21
22
  }
22
- function frozenArray(owner) {
23
+ function frozenData(owner) {
23
24
  const state = stateOf(owner);
24
- return (state.array ??= freezePoints(state.points.map((point) => [...point])));
25
+ return (state.data ??= Object.freeze({
26
+ dimension: owner.dimension,
27
+ closed: owner.closed,
28
+ points: freezePoints(state.points.map((point) => [...point])),
29
+ }));
25
30
  }
26
31
  function closedOption(closed) {
27
32
  if (closed !== undefined && typeof closed !== "boolean")
@@ -60,23 +65,25 @@ function validateClosure(points, closed) {
60
65
  function pathSource(input, closed, dimension) {
61
66
  if (Array.isArray(input))
62
67
  return { points: input, closed: closedOption(closed) };
63
- if (typeof input !== "object" ||
64
- input === null ||
65
- !("toArray" in input) ||
66
- typeof input.toArray !== "function" ||
67
- !("closed" in input) ||
68
- !("dimension" in input) ||
69
- input.dimension !== dimension)
70
- return fail("Expected a path or an array of coordinate tuples or vectors.");
71
- if (typeof input.closed !== "boolean")
72
- fail("Path closure metadata must be a boolean.");
73
- const sourceClosed = input.closed;
68
+ if (typeof input !== "object" || input === null)
69
+ return fail("Expected a path value, path data, or an array of vectors.");
70
+ const own = pathStates.get(input);
71
+ const method = Reflect.get(input, "toData");
72
+ const data = own !== undefined
73
+ ? input
74
+ : typeof method === "function"
75
+ ? Reflect.apply(method, input, [])
76
+ : input;
77
+ if (typeof data !== "object" || data === null)
78
+ return fail("Expected complete path data.");
79
+ const sourceDimension = Reflect.get(data, "dimension");
80
+ const sourceClosed = Reflect.get(data, "closed");
81
+ const points = own?.points ?? Reflect.get(data, "points");
82
+ if (sourceDimension !== dimension || typeof sourceClosed !== "boolean" || !Array.isArray(points))
83
+ return fail("Path data requires matching dimension, boolean closure, and an array of vectors.");
74
84
  if (closed !== undefined && closedOption(closed) !== sourceClosed)
75
85
  fail("The closed option conflicts with the path's closure.");
76
- const points = pathStates.get(input)?.points ?? input.toArray();
77
- if (!Array.isArray(points))
78
- fail("Path points must be an array of coordinate tuples or vectors.");
79
- return { points, closed: sourceClosed };
86
+ return { points: points, closed: sourceClosed };
80
87
  }
81
88
  function measuredLength(owner) {
82
89
  const state = stateOf(owner);
@@ -106,7 +113,9 @@ function measuredBounds(points) {
106
113
  max[axis] = Math.max(max[axis], point[axis]);
107
114
  }
108
115
  }
109
- return Object.freeze({ min: Object.freeze(min), max: Object.freeze(max) });
116
+ return min.length === 2
117
+ ? bounds2({ min: [min[0], min[1]], max: [max[0], max[1]] })
118
+ : bounds3({ min: [min[0], min[1], min[2]], max: [max[0], max[1], max[2]] });
110
119
  }
111
120
  function samplingOptions(options, closed) {
112
121
  if (typeof options !== "object" || options === null || Array.isArray(options))
@@ -123,8 +132,8 @@ const PlanarPath = /* @__PURE__ */ immutableMathClass(class PlanarPath {
123
132
  pathStates.set(this, { points });
124
133
  Object.freeze(this);
125
134
  }
126
- toArray() {
127
- return frozenArray(this);
135
+ toData() {
136
+ return frozenData(this);
128
137
  }
129
138
  length() {
130
139
  return measuredLength(this);
@@ -144,7 +153,7 @@ const PlanarPath = /* @__PURE__ */ immutableMathClass(class PlanarPath {
144
153
  }
145
154
  resample(options = {}) {
146
155
  const policy = samplingOptions(options, this.closed);
147
- return new PlanarPath(resamplePath2Data(points2(this), policy), this.closed);
156
+ return new PlanarPath(resamplePath2Points(points2(this), policy), this.closed);
148
157
  }
149
158
  });
150
159
  const SpatialPath = /* @__PURE__ */ immutableMathClass(class SpatialPath {
@@ -155,8 +164,8 @@ const SpatialPath = /* @__PURE__ */ immutableMathClass(class SpatialPath {
155
164
  pathStates.set(this, { points });
156
165
  Object.freeze(this);
157
166
  }
158
- toArray() {
159
- return frozenArray(this);
167
+ toData() {
168
+ return frozenData(this);
160
169
  }
161
170
  length() {
162
171
  return measuredLength(this);
@@ -176,16 +185,19 @@ const SpatialPath = /* @__PURE__ */ immutableMathClass(class SpatialPath {
176
185
  }
177
186
  resample(options = {}) {
178
187
  const policy = samplingOptions(options, this.closed);
179
- return new SpatialPath(resamplePath3Data(points3(this), policy), this.closed);
188
+ return new SpatialPath(resamplePath3Points(points3(this), policy), this.closed);
180
189
  }
181
190
  });
182
191
  /**
183
192
  * Snapshots finite XY coordinates as an immutable sampled path, independent of engine initialization.
193
+ *
184
194
  * Open paths may be empty or have one point; closed paths need three vertices and omit a duplicated
185
195
  * seam. Repeated adjacent vertices are retained. No winding normalization or filling is performed.
186
196
  * Malformed dimensions or topology throw INVALID_ARGUMENT; nonfinite coordinates or measurement
187
197
  * overflow throw NON_FINITE_VALUE; exhausted allocation ceilings throw COMPLEXITY_LIMIT GeometryError.
188
198
  * A path input retains its closure. Limits bound construction only; resampling takes its own limits.
199
+ *
200
+ * Use `toData()` for a frozen record that restores coordinates, closure, and dimension together.
189
201
  */
190
202
  export function path2(input, options = {}) {
191
203
  validateOptions(options);
@@ -198,6 +210,10 @@ export function path2(input, options = {}) {
198
210
  /**
199
211
  * Snapshots finite XYZ coordinates as an immutable sampled path with the same closure, seam,
200
212
  * allocation and error rules as path2. Analytic curves must be sampled explicitly first.
213
+ *
214
+ * Use `toData()` for a frozen record that restores coordinates, closure, and dimension together.
215
+ *
216
+ * @see {@link path2} for shared construction rules.
201
217
  */
202
218
  export function path3(input, options = {}) {
203
219
  validateOptions(options);
@@ -233,7 +249,7 @@ export function path2InputData(input, closed, limits) {
233
249
  assertSamplingCount(source.points.length, "path", policy.maxPathPoints);
234
250
  return {
235
251
  points: input instanceof PlanarPath
236
- ? input.toArray()
252
+ ? input.toData().points
237
253
  : freezePoints(snapshot(source.points, 2, policy)),
238
254
  closed: source.closed,
239
255
  };
@@ -245,7 +261,7 @@ export function path3InputData(input, closed, limits) {
245
261
  assertSamplingCount(source.points.length, "path", policy.maxPathPoints);
246
262
  return {
247
263
  points: input instanceof SpatialPath
248
- ? input.toArray()
264
+ ? input.toData().points
249
265
  : freezePoints(snapshot(source.points, 3, policy)),
250
266
  closed: source.closed,
251
267
  };
@@ -126,7 +126,7 @@ export function resamplePolyline2(path, options = {}) {
126
126
  return resamplePolyline(path, 2, options, createPlanarSampleWriter);
127
127
  }
128
128
  /** Internal points-only writer; Path2 owns these mutable coordinates and freezes public interchange. */
129
- export function resamplePath2Data(path, options) {
129
+ export function resamplePath2Points(path, options) {
130
130
  const points = [];
131
131
  return resamplePolyline(path, 2, options, () => ({
132
132
  append: (point) => {
@@ -136,7 +136,7 @@ export function resamplePath2Data(path, options) {
136
136
  }), false);
137
137
  }
138
138
  /** Internal points-only writer; avoids calculating and allocating tangents discarded by Path3. */
139
- export function resamplePath3Data(path, options) {
139
+ export function resamplePath3Points(path, options) {
140
140
  const points = [];
141
141
  return resamplePolyline(path, 3, options, () => ({
142
142
  append: (point) => {
@@ -28,9 +28,9 @@ const finite = (value, operation) => {
28
28
  const coordinates = (input, operation) => {
29
29
  const value = typeof input === "object" &&
30
30
  input !== null &&
31
- "toArray" in input &&
32
- typeof input.toArray === "function"
33
- ? input.toArray()
31
+ "toData" in input &&
32
+ typeof input.toData === "function"
33
+ ? input.toData()
34
34
  : input;
35
35
  if (!Array.isArray(value) || (value.length !== 2 && value.length !== 3))
36
36
  fail(operation, "Pattern vectors require exact XY or XYZ coordinates.");
@@ -16,7 +16,9 @@ export function gridPatternTransforms(options) {
16
16
  return transforms(gridPatternPlan(options));
17
17
  }
18
18
  /**
19
- * Equal physical arc-length placements along a sampled XYZ path. Tangent orientation maps +Z
19
+ * Equal physical arc-length placements along a sampled XYZ path.
20
+ *
21
+ * Tangent orientation maps +Z
20
22
  * onto the local path tangent; fixed orientation only translates. Closed paths omit a repeated seam.
21
23
  * Explicit sampling ceilings bound both input points and output placements.
22
24
  */
@@ -9,6 +9,7 @@ function invalid(message) {
9
9
  }
10
10
  /**
11
11
  * Samples 2–32 connected line/cubic segments into a simple, nonzero-area, immutable CCW XY loop.
12
+ *
12
13
  * Physical scaling precedes adaptive curve sampling; the final end must repeat start exactly.
13
14
  * Shared anchors and the closing seam are emitted once. Winding normalization may change the
14
15
  * starting vertex. The sampled loop is checked for self-intersection and degeneracy by
@@ -64,6 +64,7 @@ const contours = (component) => [
64
64
  ];
65
65
  /**
66
66
  * Explicitly matches identified component/contour/span topology across a family.
67
+ *
67
68
  * Every paired span uses the maximum physical subdivision count requested by any member.
68
69
  * Cubics share a checked uniform parameter grid, including grids selected by exact paired requests.
69
70
  * Input order and winding are preserved. Collapsed spans retain repeated logical slots, which
@@ -1,6 +1,5 @@
1
+ import { resolveCircularSampling } from "../circular-sampling.js";
1
2
  import { GeometryError } from "../errors.js";
2
- import { resolveCircularPrimitiveSegments } from "../primitive-resolution.js";
3
- import { assertPrimitiveOptions } from "../primitive-resolvers.js";
4
3
  import { requireFiniteProfileValues, requireProfileVertexCount } from "./validation.js";
5
4
  export { rectangleContour } from "./rectangle.js";
6
5
  /**
@@ -13,30 +12,11 @@ export { rectangleContour } from "./rectangle.js";
13
12
  */
14
13
  export const circleContour = (options) => {
15
14
  const operation = "circleContour";
16
- assertPrimitiveOptions(options, operation);
17
- if ((options.radius === undefined) === (options.diameter === undefined)) {
18
- throw new GeometryError("INVALID_ARGUMENT", "Specify exactly one radius or diameter.", {
19
- operation,
20
- });
21
- }
22
- const radius = options.radius ?? options.diameter / 2;
23
- requireFiniteProfileValues([radius], operation);
24
- if (!(radius > 0)) {
25
- throw new GeometryError("INVALID_ARGUMENT", "Circle radius must be positive.", { operation });
26
- }
27
- const segments = resolveCircularPrimitiveSegments(radius, options, operation);
15
+ const { segments, vertexRadius } = resolveCircularSampling(options);
28
16
  requireProfileVertexCount(segments, 3, operation, options.limits);
29
- const sizing = options.sizing ?? "vertex";
30
- if (sizing !== "vertex" && sizing !== "face") {
31
- throw new GeometryError("INVALID_ARGUMENT", "Circle sizing must be vertex or face.", {
32
- operation,
33
- });
34
- }
35
- const sampledRadius = sizing === "face" ? radius / Math.cos(Math.PI / segments) : radius;
36
- requireFiniteProfileValues([sampledRadius], operation);
37
17
  return Object.freeze(Array.from({ length: segments }, (_, index) => {
38
18
  const angle = (Math.PI * 2 * index) / segments;
39
- return Object.freeze([sampledRadius * Math.cos(angle), sampledRadius * Math.sin(angle)]);
19
+ return Object.freeze([vertexRadius * Math.cos(angle), vertexRadius * Math.sin(angle)]);
40
20
  }));
41
21
  };
42
22
  /**
@@ -79,7 +79,11 @@ export function rectangleCornerSegments(corner, limits) {
79
79
  }) / 4);
80
80
  }
81
81
  /**
82
- * Creates an immutable CCW rectangle loop. Round radius zero is square; tangent saturated endpoints occur once.
82
+ * Creates an immutable sampled CCW rectangle boundary. Round radius zero is square; tangent saturated endpoints occur once.
83
+ *
84
+ * Use [rectangle](/docs/reference/model/rectangle) for a filled Section.
85
+ *
86
+ * @see {@link rectangleProfile} for identified edge/corner spans used by matchProfiles.
83
87
  *
84
88
  * @example Rounded rectangle outline
85
89
  * ```ts
@@ -148,6 +152,11 @@ export function rectangleContour(options) {
148
152
  /**
149
153
  * Creates an identified rectangle whose edge/corner spans survive zero and saturated round radii. Outer winding is CCW.
150
154
  *
155
+ * Use [rectangle](/docs/reference/model/rectangle) for a filled Section.
156
+ *
157
+ * @see {@link matchProfiles} to sample a family with shared landmark correspondence.
158
+ * @see {@link rectangleContour} for sampled boundary coordinates.
159
+ *
151
160
  * @example Retain rectangle landmarks
152
161
  * ```ts
153
162
  * rectangleProfile({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
@@ -23,6 +23,7 @@ function distanceToChord(point, start, end) {
23
23
  }
24
24
  /**
25
25
  * Samples 1–31 line/cubic segments into a deeply immutable open [radius,height] polyline.
26
+ *
26
27
  * Anchors must progress strictly upward; nonnegative-radius cubic controls must have ordered
27
28
  * heights between their endpoints. Cubics use de Casteljau subdivision with a conservative
28
29
  * control-hull chord-error bound. Lines also obey the optional physical edge-length ceiling.
@@ -138,6 +139,7 @@ export function sampleSideProfile(curve, options = {}) {
138
139
  }
139
140
  /**
140
141
  * Closes an open, strictly upward [radius, height] side outline to the radius-zero axis.
142
+ *
141
143
  * Adds horizontal bottom/top edges at the endpoint heights, retaining axis endpoints once.
142
144
  * Returns a counterclockwise filled-boundary contour without a repeated seam vertex.
143
145
  * Radii must be nonnegative; the result must enclose nonzero area without touching itself.