@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
@@ -0,0 +1,128 @@
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.chamfer ?? 0;
19
+ if (!Number.isFinite(chamfer) ||
20
+ chamfer < 0 ||
21
+ 2 * chamfer >= d.knuckleLength ||
22
+ chamfer >= d.minimumBarrelWall)
23
+ invalid("chamfer 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
+ if (2 * chamfer >= web.thickness ||
37
+ 2 * Math.SQRT2 * chamfer >= Math.min(d.knuckleLength, web.reach))
38
+ invalid("chamfer must leave a positive web band and noncollapsed end contours.");
39
+ const innerRadius = d.barrelRadius * Math.cos(Math.PI / d.segments);
40
+ if (web.zMin >= innerRadius || web.zMin + web.thickness <= -innerRadius)
41
+ invalid("A web must overlap the interior of its barrel.");
42
+ }
43
+ return { chamfer, web };
44
+ };
45
+ // Validate both attachments before allocating either half.
46
+ const a = validateHalf(options.halfA);
47
+ const b = validateHalf(options.halfB);
48
+ const axial = (radius, start, length, bore = false, chamfer = 0) => operations.translate(operations.rotate(operations.cylinder({
49
+ radius,
50
+ height: length,
51
+ center: false,
52
+ segments: d.segments,
53
+ sizing: bore ? "face" : "vertex",
54
+ ...(chamfer === 0
55
+ ? {}
56
+ : {
57
+ ends: {
58
+ bottom: { kind: "chamfer", distance: chamfer },
59
+ top: { kind: "chamfer", distance: chamfer },
60
+ },
61
+ }),
62
+ }), [0, 90, 0]), [start, 0, 0]);
63
+ const buildHalf = (side, { chamfer, web }) => {
64
+ const features = [];
65
+ // Use the web bottom as the shared Float32 datum for barrel, web, and mounting bevels.
66
+ const baseZ = chamfer > 0 && web !== undefined ? web.zMin : 0;
67
+ const atBase = (solid) => operations.translate(solid, [0, 0, -baseZ]);
68
+ const webProfile = (web, inset) => {
69
+ // Parallel offsets finish the exposed tip; the two root corners stay square.
70
+ const corner = { kind: "chamfer", distance: chamfer + (Math.SQRT2 - 2) * inset };
71
+ const profile = operations.rectangle({
72
+ size: [d.knuckleLength - 2 * inset, web.reach - inset],
73
+ center: false,
74
+ treatment: [corner, corner, { kind: "square" }, { kind: "square" }],
75
+ });
76
+ return operations.scale(operations.translate(profile, [inset, 0]), [
77
+ 1,
78
+ web.direction === "positive-y" ? 1 : -1,
79
+ ]);
80
+ };
81
+ for (const interval of d.knuckles) {
82
+ if (interval.side !== side)
83
+ continue;
84
+ features.push(atBase(axial(d.barrelRadius, interval.start, interval.length, false, chamfer)));
85
+ if (web !== undefined) {
86
+ features.push(chamfer === 0
87
+ ? operations.translate(operations.box({
88
+ size: [interval.length, web.reach, web.thickness],
89
+ center: false,
90
+ }), [
91
+ interval.start,
92
+ web.direction === "positive-y" ? 0 : -web.reach,
93
+ web.zMin - baseZ,
94
+ ])
95
+ : operations.loft([
96
+ [chamfer, 0],
97
+ [0, chamfer],
98
+ [0, web.thickness - chamfer],
99
+ [chamfer, web.thickness],
100
+ ].map(([inset, z]) => ({
101
+ profile: webProfile(web, inset),
102
+ frame: {
103
+ origin: [interval.start, 0, z],
104
+ xAxis: [1, 0, 0],
105
+ yAxis: [0, 1, 0],
106
+ zAxis: [0, 0, 1],
107
+ },
108
+ }))));
109
+ }
110
+ }
111
+ if (side === "a" && d.pin !== null)
112
+ features.push(atBase(axial(d.pinRadius, d.pin.start, d.pin.length)));
113
+ // Match the kernel cylinders to the same mesh precision as the explicit web stations.
114
+ const solid = operations.union(features.map((feature) => chamfer === 0 || web === undefined
115
+ ? feature
116
+ : operations.solidFromMesh(environment.analyzedMeshFor(feature).mesh)));
117
+ // Overtravel is numerical cutter extent, independent of the physical radial/axial allowances.
118
+ const overtravel = Math.min(d.knuckleLength, d.barrelRadius) * 0.01;
119
+ const result = side === "a" && d.pin !== null
120
+ ? solid
121
+ : operations.subtract(solid, [
122
+ atBase(axial(d.boreRadius, -d.spec.length / 2 - overtravel, d.spec.length + 2 * overtravel, true)),
123
+ ]);
124
+ return operations.translate(result, [0, 0, baseZ]);
125
+ };
126
+ return Object.freeze({ halfA: buildHalf("a", a), halfB: buildHalf("b", b), axis: d.axis });
127
+ };
128
+ }
@@ -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)));
@@ -1,5 +1,6 @@
1
1
  import { resolveGeometryResolution } from "../geometry/resolution.js";
2
2
  import { createConstructionOperations } from "./construction-operations.js";
3
+ import { createHoleCutterOperation } from "./hole-cutter-operation.js";
3
4
  import { createInspectionOperations } from "./inspection-operations.js";
4
5
  import { createMechanicalOperations } from "./mechanical-operations.js";
5
6
  import { createOperationEnvironment } from "./operation-environment.js";
@@ -15,7 +16,18 @@ export function createModelingContext(owner, initialResolution) {
15
16
  const sections = createSectionOperations(environment, transforms);
16
17
  const primitives = createPrimitiveOperations(environment, transforms, sections);
17
18
  const construction = createConstructionOperations(environment, sections);
18
- const mechanical = createMechanicalOperations(environment);
19
+ const mechanical = createMechanicalOperations(environment, {
20
+ cylinder: primitives.cylinder,
21
+ box: primitives.box,
22
+ rectangle: primitives.rectangle,
23
+ scale: transforms.operations.scale,
24
+ solidFromMesh: construction.solidFromMesh,
25
+ loft: construction.loft,
26
+ union: construction.union,
27
+ rotate: transforms.operations.rotate,
28
+ translate: transforms.operations.translate,
29
+ subtract: construction.subtract,
30
+ });
19
31
  const patterns = createPatternOperations(environment, transforms);
20
32
  const inspection = createInspectionOperations(environment);
21
33
  return Object.freeze({
@@ -27,6 +39,13 @@ export function createModelingContext(owner, initialResolution) {
27
39
  ...sections,
28
40
  ...primitives,
29
41
  ...construction,
42
+ holeCutter: createHoleCutterOperation(environment, {
43
+ cylinder: primitives.cylinder,
44
+ extrude: construction.extrude,
45
+ loft: construction.loft,
46
+ translate: transforms.operations.translate,
47
+ union: construction.union,
48
+ }),
30
49
  ...mechanical,
31
50
  ...patterns,
32
51
  ...inspection,
@@ -1,3 +1,4 @@
1
+ import { resolveCircularSampling } from "../geometry/circular-sampling.js";
1
2
  import { resolveCylinderRadii } from "../geometry/cylinder.js";
2
3
  import { resolveModelingLimits } from "../geometry/model-limits.js";
3
4
  import { assertPrimitiveOptions } from "../geometry/primitive-resolvers.js";
@@ -48,7 +49,15 @@ export function createPrimitiveOperations(environment, transforms, sections) {
48
49
  if (value.sizing !== "face")
49
50
  return placedSolid(value, () => kernel.cylinder(scope, resolved), () => cylinderAnchors(value));
50
51
  const radii = resolveCylinderRadii(value);
51
- const count = resolveCircularSegments(Math.max(...radii), value), correction = 1 / Math.cos(Math.PI / count);
52
+ const maximumRadius = Math.max(...radii);
53
+ const sampling = resolveCircularSampling({
54
+ radius: maximumRadius,
55
+ sizing: "face",
56
+ ...(resolved.segments === undefined ? {} : { segments: resolved.segments }),
57
+ resolution: resolved.resolution,
58
+ limits: resolved.limits,
59
+ });
60
+ const count = sampling.segments, correction = sampling.vertexRadius / maximumRadius;
52
61
  return placedSolid(value, () => kernel.cylinder(scope, {
53
62
  height: resolved.height,
54
63
  radius: [radii[0] * correction, radii[1] * correction],
@@ -106,12 +115,16 @@ export function createPrimitiveOperations(environment, transforms, sections) {
106
115
  throwGeometryError("INVALID_ARGUMENT", "circle", "Specify exactly one radius or diameter.");
107
116
  const radius = value.radius ?? value.diameter / 2;
108
117
  requirePositiveNumber(radius, "circle");
109
- const count = resolveCircularSegments(radius, value);
110
- requireProfileVertexCount(count, 3, "circle", withResolutionDefaults(value).limits);
111
- if (value.sizing !== undefined && value.sizing !== "vertex" && value.sizing !== "face")
112
- throwGeometryError("INVALID_ARGUMENT", "circle", "sizing must be vertex or face.");
113
- const section = ownSection(module.CrossSection.circle(value.sizing === "face" ? radius / Math.cos(Math.PI / count) : radius, count));
114
118
  const resolved = withResolutionDefaults(value);
119
+ const { segments: count, vertexRadius } = resolveCircularSampling({
120
+ radius,
121
+ sizing: value.sizing ?? "vertex",
122
+ ...(resolved.segments === undefined ? {} : { segments: resolved.segments }),
123
+ resolution: resolved.resolution,
124
+ limits: resolved.limits,
125
+ });
126
+ requireProfileVertexCount(count, 3, "circle", resolved.limits);
127
+ const section = ownSection(module.CrossSection.circle(vertexRadius, count));
115
128
  environment.rememberAnchors(section, planarAnchors([2 * radius, 2 * radius]));
116
129
  return environment.rememberPrimitiveProfile(section, ellipticalSectionProfile([radius, radius], value, resolved.resolution, resolved.limits, value.sizing === "face"));
117
130
  }),
@@ -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.");
@@ -118,7 +118,7 @@ export function createSectionOperations(environment, transforms) {
118
118
  },
119
119
  svgSection: (svg, value = {}) => {
120
120
  let result = wrapSection(kernel.regionToCrossSection(scope, preflightSvgRegion(svg, { ...withResolutionDefaults(value), origin: "document" }).region, limits));
121
- if ((value.origin ?? "center") === "center") {
121
+ if (value.fit === undefined && (value.origin ?? "center") === "center") {
122
122
  const bounds = nativeSection(result).bounds();
123
123
  result = translate(result, [
124
124
  -(bounds.min[0] + bounds.max[0]) / 2,
@@ -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,121 @@
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 || Array.isArray(input))
10
+ fail(dimension, "Bounds require extrema or size.");
11
+ const { size, center } = input;
12
+ let min, max;
13
+ // Existing immutable bounds expose size()/center(); only a size value selects construction.
14
+ if ("size" in input && typeof size !== "function") {
15
+ if ("min" in input || "max" in input)
16
+ fail(dimension, "Supply size or min/max, never both.");
17
+ if (!Array.isArray(size) || size.length !== dimension)
18
+ fail(dimension, `Size requires ${dimension}D coordinates.`);
19
+ if (center !== undefined && typeof center !== "boolean")
20
+ fail(dimension, "center must be boolean.");
21
+ const coordinates = size;
22
+ const dimensions = Array.from({ length: dimension }, (_, axis) => {
23
+ const value = coordinates[axis];
24
+ if (typeof value !== "number" || !Number.isFinite(value) || value < 0)
25
+ fail(dimension, "Size must be finite and nonnegative.");
26
+ return value;
27
+ });
28
+ const centered = center ?? true;
29
+ min = dimensions.map((value) => (centered ? -value / 2 : 0));
30
+ max = dimensions.map((value) => (centered ? value / 2 : value));
31
+ }
32
+ else {
33
+ if (center !== undefined && typeof center !== "function")
34
+ fail(dimension, "center requires size construction.");
35
+ const extrema = input;
36
+ min = extrema.min;
37
+ max = extrema.max;
38
+ }
39
+ if (!Array.isArray(min) ||
40
+ !Array.isArray(max) ||
41
+ min.length !== dimension ||
42
+ max.length !== dimension)
43
+ fail(dimension, `Bounds require matching ${dimension}D minimum and maximum tuples.`);
44
+ const copy = (source) => Object.freeze(Array.from({ length: dimension }, (_, axis) => {
45
+ const value = source[axis];
46
+ return value === 0 ? 0 : value;
47
+ }));
48
+ const data = Object.freeze({ min: copy(min), max: copy(max) });
49
+ validateBounds(data, `bounds${dimension}`);
50
+ return data;
51
+ }
52
+ const PlanarBounds = /* @__PURE__ */ immutableMathClass(class PlanarBounds {
53
+ #data;
54
+ min;
55
+ max;
56
+ constructor(data) {
57
+ this.#data = data;
58
+ this.min = data.min;
59
+ this.max = data.max;
60
+ Object.freeze(this);
61
+ }
62
+ size() {
63
+ return vector2(boundsSize(this));
64
+ }
65
+ center() {
66
+ return vector2(boundsCenter(this));
67
+ }
68
+ containsBounds(other) {
69
+ return containsBounds(this, other);
70
+ }
71
+ toData() {
72
+ return this.#data;
73
+ }
74
+ });
75
+ const SpatialBounds = /* @__PURE__ */ immutableMathClass(class SpatialBounds {
76
+ #data;
77
+ min;
78
+ max;
79
+ constructor(data) {
80
+ this.#data = data;
81
+ this.min = data.min;
82
+ this.max = data.max;
83
+ Object.freeze(this);
84
+ }
85
+ size() {
86
+ return vector3(boundsSize(this));
87
+ }
88
+ center() {
89
+ return vector3(boundsCenter(this));
90
+ }
91
+ containsBounds(other) {
92
+ return containsBounds(this, other);
93
+ }
94
+ toData() {
95
+ return this.#data;
96
+ }
97
+ });
98
+ /**
99
+ * Constructs immutable finite XY bounds from ordered extrema or nonnegative size in millimetres.
100
+ *
101
+ * Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
102
+ * overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
103
+ * Size construction centers on the origin unless `center` is false. Size and extrema are exclusive.
104
+ * Compiled Generator packages passing these values to host recipes or computed data require
105
+ * runtime 9.0.0 or newer in major 9.
106
+ */
107
+ export function bounds2(input) {
108
+ return new PlanarBounds(snapshot(input, 2));
109
+ }
110
+ /**
111
+ * Constructs immutable finite XYZ bounds from ordered extrema or nonnegative size in millimetres.
112
+ *
113
+ * Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
114
+ * overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
115
+ * Size construction centers on the origin unless `center` is false. Size and extrema are exclusive.
116
+ * Compiled Generator packages passing these values to host recipes or computed data require
117
+ * runtime 9.0.0 or newer in major 9.
118
+ */
119
+ export function bounds3(input) {
120
+ return new SpatialBounds(snapshot(input, 3));
121
+ }
@@ -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) ||
@@ -36,41 +37,24 @@ function size(bounds) {
36
37
  function center(bounds) {
37
38
  return bounds.min.map((value, axis) => value / 2 + bounds.max[axis] / 2);
38
39
  }
39
- export function boundsFromSize(dimensions, options = {}) {
40
- const operation = "boundsFromSize";
41
- if (!isArray(dimensions) ||
42
- (dimensions.length !== 2 && dimensions.length !== 3) ||
43
- Array.from(dimensions).some((value) => !Number.isFinite(value) || value < 0))
44
- fail(operation, "Bounds dimensions require two or three finite nonnegative values.");
45
- if (typeof options !== "object" ||
46
- options === null ||
47
- isArray(options) ||
48
- (options.center !== undefined && typeof options.center !== "boolean"))
49
- fail(operation, "Bounds placement requires an optional boolean center value.");
50
- const centered = options.center ?? true;
51
- return Object.freeze({
52
- min: vector(dimensions.map((value) => (centered ? -value / 2 : 0)), operation),
53
- max: vector(dimensions.map((value) => (centered ? value / 2 : value)), operation),
54
- });
55
- }
56
40
  export function boundsSize(bounds) {
57
- validate(bounds, "boundsSize");
41
+ validateBounds(bounds, "boundsSize");
58
42
  return vector(size(bounds), "boundsSize");
59
43
  }
60
44
  export function boundsCenter(bounds) {
61
- validate(bounds, "boundsCenter");
45
+ validateBounds(bounds, "boundsCenter");
62
46
  return vector(center(bounds), "boundsCenter");
63
47
  }
64
48
  export function containsBounds(outer, inner) {
65
- const dimension = validate(outer, "containsBounds");
66
- if (validate(inner, "containsBounds") !== dimension)
49
+ const dimension = validateBounds(outer, "containsBounds");
50
+ if (validateBounds(inner, "containsBounds") !== dimension)
67
51
  fail("containsBounds", "Contained bounds must have the same dimension.");
68
52
  return outer.min.every((value, axis) => inner.min[axis] >= value && inner.max[axis] <= outer.max[axis]);
69
53
  }
70
54
  export function fitBounds(source, target, options = {}) {
71
55
  const operation = "fitBounds";
72
- const dimension = validate(source, operation);
73
- if (validate(target, operation) !== dimension)
56
+ const dimension = validateBounds(source, operation);
57
+ if (validateBounds(target, operation) !== dimension)
74
58
  fail(operation, "Source and target bounds must have the same dimension.");
75
59
  if (typeof options !== "object" || options === null || isArray(options))
76
60
  fail(operation, "Fitting options must be an object.");
@@ -94,6 +78,7 @@ export function fitBounds(source, target, options = {}) {
94
78
  }
95
79
  /**
96
80
  * Returns immutable translations for a +X row of finite XYZ bounds with a nonnegative gap.
81
+ *
97
82
  * Each minimum Y/Z becomes zero, and the first minimum X becomes zero. Supply bounds after
98
83
  * any intended part rotation; translations apply to those bounds. An empty input returns [].
99
84
  */
@@ -106,7 +91,7 @@ export function layoutRow(bounds, options = {}) {
106
91
  fail(operation, "Row gap must be finite and nonnegative.");
107
92
  let nextX = 0;
108
93
  return Object.freeze(Array.from(bounds, (item) => {
109
- if (validate(item, operation) !== 3)
94
+ if (validateBounds(item, operation) !== 3)
110
95
  fail(operation, "Row layout requires XYZ bounds.");
111
96
  const position = vector([nextX - item.min[0], -item.min[1], -item.min[2]], operation);
112
97
  nextX += item.max[0] - item.min[0] + gap;
@@ -0,0 +1,45 @@
1
+ import { GeometryError } from "./errors.js";
2
+ import { resolveCircularPrimitiveSegments } from "./primitive-resolution.js";
3
+ import { assertPrimitiveOptions } from "./primitive-resolvers.js";
4
+ function fail(message, nonfinite = false) {
5
+ throw new GeometryError(nonfinite ? "NON_FINITE_VALUE" : "INVALID_ARGUMENT", message, {
6
+ operation: "resolveCircularSampling",
7
+ });
8
+ }
9
+ /**
10
+ * Resolves circular sampling and its actual radial envelopes without allocating boundary points.
11
+ *
12
+ * Vertex sizing retains the nominal vertex radius; face sizing retains the nominal face radius.
13
+ * Exact `segments` override resolution, while allocation ceilings still apply. Adaptive sampling
14
+ * uses the same count calculation as `resolveCircularSegments` and `circleContour` and rejects
15
+ * exhausted limits rather than coarsening. The returned record is immutable and needs no engine.
16
+ *
17
+ * @example Check a nominal 8 mm face-sized bore
18
+ * ```ts
19
+ * const bore = resolveCircularSampling({ diameter: 8, segments: 64, sizing: "face" });
20
+ * bore.faceRadius; // 4 mm
21
+ * bore.vertexRadius; // slightly larger than 4 mm
22
+ * ```
23
+ */
24
+ export function resolveCircularSampling(options) {
25
+ const operation = "resolveCircularSampling";
26
+ assertPrimitiveOptions(options, operation);
27
+ if ((options.radius === undefined) === (options.diameter === undefined)) {
28
+ fail("Specify exactly one radius or diameter.");
29
+ }
30
+ const radius = options.radius ?? options.diameter / 2;
31
+ const finite = Number.isFinite(radius);
32
+ if (!finite || radius <= 0)
33
+ fail("Circle radius must be finite and positive.", !finite);
34
+ const sizing = options.sizing ?? "vertex";
35
+ if (sizing !== "vertex" && sizing !== "face") {
36
+ fail("sizing must be vertex or face.");
37
+ }
38
+ const segments = resolveCircularPrimitiveSegments(radius, options, operation);
39
+ const cosine = Math.cos(Math.PI / segments);
40
+ const vertexRadius = sizing === "face" ? radius / cosine : radius;
41
+ const faceRadius = sizing === "face" ? radius : radius * cosine;
42
+ if (!Number.isFinite(vertexRadius))
43
+ fail("Sampled radii must remain finite.", true);
44
+ return Object.freeze({ segments, vertexRadius, faceRadius });
45
+ }
@@ -0,0 +1,41 @@
1
+ import { GeometryError } from "./errors.js";
2
+ /** @internal Parallel-edge offsets shared by convex extrusion rims and pocket entries. */
3
+ export function convexContourOffsets(points, operation) {
4
+ const fail = (message) => {
5
+ throw new GeometryError("INVALID_ARGUMENT", message, { operation });
6
+ };
7
+ if (points.length < 3)
8
+ fail("A convex contour needs at least three vertices.");
9
+ const edges = points.map((point, index) => {
10
+ const next = points[(index + 1) % points.length];
11
+ const dx = next[0] - point[0], dy = next[1] - point[1];
12
+ const length = Math.hypot(dx, dy);
13
+ if (!(length > 0) || !Number.isFinite(length))
14
+ fail("Contours must have distinct finite vertices.");
15
+ return [dx / length, dy / length];
16
+ });
17
+ const miters = edges.map((edge, index) => {
18
+ const previous = edges[(index + edges.length - 1) % edges.length];
19
+ const turn = previous[0] * edge[1] - previous[1] * edge[0];
20
+ if (!(turn > 1e-12))
21
+ fail("Entry and end treatments require a strictly convex counterclockwise contour without collinear vertices.");
22
+ const denominator = 1 + previous[0] * edge[0] + previous[1] * edge[1];
23
+ return [(-previous[1] - edge[1]) / denominator, (previous[0] + edge[0]) / denominator];
24
+ });
25
+ return {
26
+ magnification: miters.reduce((maximum, [x, y]) => Math.max(maximum, Math.hypot(x, y)), 1),
27
+ offset(inset) {
28
+ const result = points.map(([x, y], index) => [
29
+ x + miters[index][0] * inset,
30
+ y + miters[index][1] * inset,
31
+ ]);
32
+ for (let index = 0; index < result.length; index++) {
33
+ const point = result[index], next = result[(index + 1) % result.length], edge = edges[index];
34
+ if (!point.every(Number.isFinite) ||
35
+ !((next[0] - point[0]) * edge[0] + (next[1] - point[1]) * edge[1] > 0))
36
+ fail("Treatment offset collapses or reverses a contour edge.");
37
+ }
38
+ return result;
39
+ },
40
+ };
41
+ }
@@ -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({