@metamesh/modeling 0.16.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (881) hide show
  1. package/CHANGELOG.md +193 -0
  2. package/README.md +137 -142
  3. package/dist/api/engine.d.ts +128 -65
  4. package/dist/api/geometry.d.ts +327 -483
  5. package/dist/api/index.d.ts +537 -415
  6. package/dist/api/mesh.d.ts +460 -0
  7. package/dist/api/text.d.ts +1 -1
  8. package/dist/docs/guides/concepts.md +130 -87
  9. package/dist/docs/guides/fonts.md +11 -10
  10. package/dist/docs/guides/fundamentals.md +30 -29
  11. package/dist/docs/guides/generation.md +44 -31
  12. package/dist/docs/guides/hosting.md +122 -46
  13. package/dist/docs/guides/recipes.md +94 -56
  14. package/dist/docs/guides/standalone-model.md +8 -7
  15. package/dist/docs/manifest.json +2941 -968
  16. package/dist/docs/reference/engine/Export3mfOptions.md +19 -2
  17. package/dist/docs/reference/engine/ExportMeshPart.md +5 -39
  18. package/dist/docs/reference/engine/GenerationOptions.md +4 -3
  19. package/dist/docs/reference/engine/GeometryResource.md +13 -13
  20. package/dist/docs/reference/engine/ModelDependencies.md +1 -1
  21. package/dist/docs/reference/engine/ModelEngine.md +26 -23
  22. package/dist/docs/reference/engine/ModelEngineOptions.md +6 -1
  23. package/dist/docs/reference/engine/ModelPart.md +108 -0
  24. package/dist/docs/reference/engine/ModelResult.md +175 -0
  25. package/dist/docs/reference/engine/ModelRunArguments.md +28 -0
  26. package/dist/docs/reference/engine/ModelRunOptions.md +104 -0
  27. package/dist/docs/reference/engine/ModelSession.md +16 -16
  28. package/dist/docs/reference/engine/ModelingLimits.md +121 -0
  29. package/dist/docs/reference/engine/SessionOptions.md +13 -8
  30. package/dist/docs/reference/engine/categories/host-lifecycle.md +25 -15
  31. package/dist/docs/reference/engine/checkModel.md +43 -0
  32. package/dist/docs/reference/engine/createModelEngine.md +4 -13
  33. package/dist/docs/reference/engine/defaultModelingLimits.md +8 -1
  34. package/dist/docs/reference/engine/export3mf.md +55 -0
  35. package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
  36. package/dist/docs/reference/engine.md +8 -15
  37. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
  38. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +1 -1
  39. package/dist/docs/reference/geometry/Anchor3-type.md +1 -1
  40. package/dist/docs/reference/geometry/ArcCurve2.md +1 -1
  41. package/dist/docs/reference/geometry/ArcCurve3.md +1 -1
  42. package/dist/docs/reference/geometry/AttachOptions.md +1 -1
  43. package/dist/docs/reference/geometry/AxisAngleRotation3.md +1 -1
  44. package/dist/docs/reference/geometry/Bevel.md +18 -0
  45. package/dist/docs/reference/geometry/BevelSize.md +14 -0
  46. package/dist/docs/reference/geometry/Bounds2-type.md +1 -1
  47. package/dist/docs/reference/geometry/Bounds2Data.md +1 -1
  48. package/dist/docs/reference/geometry/Bounds2Input.md +1 -1
  49. package/dist/docs/reference/geometry/Bounds2Options.md +112 -0
  50. package/dist/docs/reference/geometry/Bounds3-type.md +1 -1
  51. package/dist/docs/reference/geometry/Bounds3Data.md +1 -1
  52. package/dist/docs/reference/geometry/Bounds3Input.md +1 -1
  53. package/dist/docs/reference/geometry/Bounds3Options.md +112 -0
  54. package/dist/docs/reference/geometry/BoundsFit2.md +1 -1
  55. package/dist/docs/reference/geometry/BoundsFit3.md +1 -1
  56. package/dist/docs/reference/geometry/BoundsFitOptions.md +1 -1
  57. package/dist/docs/reference/geometry/BoxAnchorFace.md +1 -1
  58. package/dist/docs/reference/geometry/BoxAnchorOptions.md +4 -4
  59. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  60. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  61. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  62. package/dist/docs/reference/geometry/BoxOptions.md +3 -3
  63. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +1 -1
  64. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +1 -1
  65. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  66. package/dist/docs/reference/geometry/CircleContourOptions.md +1 -1
  67. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -3
  68. package/dist/docs/reference/geometry/CircularResolutionOptions.md +1 -1
  69. package/dist/docs/reference/geometry/CircularSampling.md +41 -0
  70. package/dist/docs/reference/geometry/CircularSamplingOptions.md +14 -0
  71. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +1 -1
  72. package/dist/docs/reference/geometry/ClearanceHoleFit.md +1 -1
  73. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +1 -1
  74. package/dist/docs/reference/geometry/Contour.md +1 -1
  75. package/dist/docs/reference/geometry/ContourCurve.md +1 -1
  76. package/dist/docs/reference/geometry/ContourPoint.md +1 -1
  77. package/dist/docs/reference/geometry/ContourSegment.md +1 -1
  78. package/dist/docs/reference/geometry/CorrespondingComponent.md +1 -1
  79. package/dist/docs/reference/geometry/CorrespondingContour.md +1 -1
  80. package/dist/docs/reference/geometry/CorrespondingProfile.md +1 -1
  81. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +1 -1
  82. package/dist/docs/reference/geometry/CubicBezierCurve2.md +1 -1
  83. package/dist/docs/reference/geometry/CubicBezierCurve3.md +1 -1
  84. package/dist/docs/reference/geometry/Curve2.md +1 -1
  85. package/dist/docs/reference/geometry/Curve3.md +1 -1
  86. package/dist/docs/reference/geometry/CurveSamplingOptions.md +1 -1
  87. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +1 -1
  88. package/dist/docs/reference/geometry/CylinderAnchorFace.md +1 -1
  89. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +3 -3
  90. package/dist/docs/reference/geometry/CylinderOptions.md +1 -1
  91. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +1 -1
  92. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +1 -1
  93. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +1 -1
  94. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +1 -1
  95. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +1 -1
  96. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +1 -1
  97. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +1 -1
  98. package/dist/docs/reference/geometry/CylindricalGearSpec.md +1 -1
  99. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  100. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  101. package/dist/docs/reference/geometry/EllipseContourOptions.md +3 -3
  102. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  103. package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +130 -0
  104. package/dist/docs/reference/geometry/ExtrudeOptions.md +17 -9
  105. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +3 -3
  106. package/dist/docs/reference/geometry/FittedTextLayout.md +1 -1
  107. package/dist/docs/reference/geometry/Frame3.md +1 -1
  108. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  109. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  110. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  111. package/dist/docs/reference/geometry/GeometryResolution.md +1 -1
  112. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +1 -1
  113. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  114. package/dist/docs/reference/geometry/GridPatternOptions.md +1 -1
  115. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
  116. package/dist/docs/reference/geometry/HeightfieldOptions.md +3 -2
  117. package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
  118. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +1 -1
  119. package/dist/docs/reference/geometry/ImmutableBuffer-type.md +108 -0
  120. package/dist/docs/reference/geometry/ImmutableTriangleMesh.md +43 -0
  121. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +52 -83
  122. package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +1 -1
  123. package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +1 -1
  124. package/dist/docs/reference/geometry/KnuckleHingeInterval.md +1 -1
  125. package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +1 -1
  126. package/dist/docs/reference/geometry/KnuckleHingeSpec.md +1 -1
  127. package/dist/docs/reference/geometry/LineCurve2.md +1 -1
  128. package/dist/docs/reference/geometry/LineCurve3.md +1 -1
  129. package/dist/docs/reference/geometry/LinearPatternOptions.md +1 -1
  130. package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
  131. package/dist/docs/reference/geometry/LoftMeshStation.md +1 -1
  132. package/dist/docs/reference/geometry/LoftOptions.md +3 -3
  133. package/dist/docs/reference/geometry/LoftPlacement.md +1 -1
  134. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +1 -1
  135. package/dist/docs/reference/geometry/MatchProfilesOptions.md +1 -1
  136. package/dist/docs/reference/geometry/MetricFastenerSize.md +1 -1
  137. package/dist/docs/reference/geometry/MetricFastenerStandard.md +1 -1
  138. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +1 -1
  139. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +1 -1
  140. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  141. package/dist/docs/reference/geometry/NumericArray.md +14 -0
  142. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
  143. package/dist/docs/reference/geometry/Path2-type.md +1 -1
  144. package/dist/docs/reference/geometry/Path2Data.md +1 -1
  145. package/dist/docs/reference/geometry/Path2Input.md +1 -1
  146. package/dist/docs/reference/geometry/Path3-type.md +1 -1
  147. package/dist/docs/reference/geometry/Path3Data.md +1 -1
  148. package/dist/docs/reference/geometry/Path3Input.md +1 -1
  149. package/dist/docs/reference/geometry/PathFrame.md +1 -1
  150. package/dist/docs/reference/geometry/PathLocation.md +1 -1
  151. package/dist/docs/reference/geometry/PathNormalGuide.md +1 -1
  152. package/dist/docs/reference/geometry/PathOptions.md +1 -1
  153. package/dist/docs/reference/geometry/PathPatternOptions.md +1 -1
  154. package/dist/docs/reference/geometry/PathPlacement.md +1 -1
  155. package/dist/docs/reference/geometry/PathResamplingOptions.md +1 -1
  156. package/dist/docs/reference/geometry/Pivot2Options.md +1 -1
  157. package/dist/docs/reference/geometry/Pivot3Options.md +1 -1
  158. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +1 -1
  159. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +1 -1
  160. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +1 -1
  161. package/dist/docs/reference/geometry/PlanarPatchQuality.md +1 -1
  162. package/dist/docs/reference/geometry/PolygonData.md +1 -1
  163. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +1 -1
  164. package/dist/docs/reference/geometry/PrimitiveAttachment.md +1 -3
  165. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +1 -1
  166. package/dist/docs/reference/geometry/PrintableThreadFit.md +1 -1
  167. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +1 -1
  168. package/dist/docs/reference/geometry/Profile.md +1 -1
  169. package/dist/docs/reference/geometry/ProfileComponent2.md +1 -1
  170. package/dist/docs/reference/geometry/ProfileContour2.md +1 -1
  171. package/dist/docs/reference/geometry/ProfileSpan2.md +1 -1
  172. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +1 -1
  173. package/dist/docs/reference/geometry/RackPitchDimensions.md +1 -1
  174. package/dist/docs/reference/geometry/RackPitchSpec.md +1 -1
  175. package/dist/docs/reference/geometry/RadialPatternOptions.md +1 -1
  176. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  177. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  178. package/dist/docs/reference/geometry/RectangleContourOptions.md +3 -3
  179. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +1 -1
  180. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +1 -1
  181. package/dist/docs/reference/geometry/RectangleProfileOptions.md +3 -3
  182. package/dist/docs/reference/geometry/RegionData.md +1 -1
  183. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +1 -1
  184. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  185. package/dist/docs/reference/geometry/RevolveOptions.md +2 -2
  186. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  187. package/dist/docs/reference/geometry/RowLayoutOptions.md +1 -1
  188. package/dist/docs/reference/geometry/SampleContourOptions.md +1 -1
  189. package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
  190. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +1 -1
  191. package/dist/docs/reference/geometry/SampledCurve2.md +1 -1
  192. package/dist/docs/reference/geometry/SampledCurve3.md +1 -1
  193. package/dist/docs/reference/geometry/SampledThreadHelices.md +1 -1
  194. package/dist/docs/reference/geometry/SideProfileCurve.md +1 -1
  195. package/dist/docs/reference/geometry/SideProfilePoint.md +1 -1
  196. package/dist/docs/reference/geometry/SideProfileSegment.md +1 -1
  197. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  198. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +1 -1
  199. package/dist/docs/reference/geometry/SphereOptions.md +1 -1
  200. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
  201. package/dist/docs/reference/geometry/StarContourOptions.md +74 -0
  202. package/dist/docs/reference/geometry/StrokeCap.md +1 -1
  203. package/dist/docs/reference/geometry/StrokeJoin.md +1 -1
  204. package/dist/docs/reference/geometry/StrokeOptions.md +1 -1
  205. package/dist/docs/reference/geometry/SvgImportOptions.md +16 -1
  206. package/dist/docs/reference/geometry/SvgRegionPreflight.md +16 -1
  207. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +1 -1
  208. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +1 -1
  209. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +1 -1
  210. package/dist/docs/reference/geometry/SweepOptions.md +1 -1
  211. package/dist/docs/reference/geometry/SweepOrientation.md +1 -1
  212. package/dist/docs/reference/geometry/ThreadBevelOptions.md +7 -30
  213. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +1 -1
  214. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +1 -1
  215. package/dist/docs/reference/geometry/ThreadEndStyle.md +1 -1
  216. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +1 -1
  217. package/dist/docs/reference/geometry/ThreadHandedness.md +1 -1
  218. package/dist/docs/reference/geometry/ThreadHelixOptions.md +1 -1
  219. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
  220. package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
  221. package/dist/docs/reference/geometry/ThreadProfile-type.md +2 -2
  222. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
  223. package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
  224. package/dist/docs/reference/geometry/{HelicalThreadRidgeMeshOptions.md → ThreadRidgeOptions.md} +4 -4
  225. package/dist/docs/reference/geometry/ThreadRole.md +1 -1
  226. package/dist/docs/reference/geometry/{HelicalThreadSolidMeshOptions.md → ThreadSolidOptions.md} +18 -65
  227. package/dist/docs/reference/geometry/{HelicalThreadSolidMeshPreflight.md → ThreadSolidPreflight.md} +2 -2
  228. package/dist/docs/reference/geometry/ThreadedNutOptions.md +75 -86
  229. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +18 -6
  230. package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
  231. package/dist/docs/reference/geometry/ThreadedRodOptions.md +52 -83
  232. package/dist/docs/reference/geometry/TorusOptions.md +1 -1
  233. package/dist/docs/reference/geometry/Transform2-type.md +1 -1
  234. package/dist/docs/reference/geometry/Transform2Data.md +1 -1
  235. package/dist/docs/reference/geometry/Transform2Input.md +1 -1
  236. package/dist/docs/reference/geometry/Transform3-type.md +1 -1
  237. package/dist/docs/reference/geometry/Transform3Data.md +1 -1
  238. package/dist/docs/reference/geometry/Transform3Input.md +1 -1
  239. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +1 -1
  240. package/dist/docs/reference/geometry/TriangleMesh.md +3 -8
  241. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +10 -4
  242. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +2 -2
  243. package/dist/docs/reference/geometry/TriangleMeshInput.md +19 -0
  244. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
  245. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +1 -1
  246. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
  247. package/dist/docs/reference/geometry/TriangleMeshSignature.md +3 -3
  248. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +1 -1
  249. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
  250. package/dist/docs/reference/geometry/TriangleMeshTopologyAnalysis.md +131 -0
  251. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +1 -1
  252. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +1 -1
  253. package/dist/docs/reference/geometry/TubeOptions.md +10 -86
  254. package/dist/docs/reference/geometry/Vector2-type.md +1 -1
  255. package/dist/docs/reference/geometry/Vector2Data.md +1 -1
  256. package/dist/docs/reference/geometry/Vector2Input.md +1 -1
  257. package/dist/docs/reference/geometry/Vector3-type.md +1 -1
  258. package/dist/docs/reference/geometry/Vector3Data.md +1 -1
  259. package/dist/docs/reference/geometry/Vector3Input.md +1 -1
  260. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +1 -1
  261. package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
  262. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +1 -1
  263. package/dist/docs/reference/geometry/VectorTextMetrics.md +1 -1
  264. package/dist/docs/reference/geometry/VectorTextOptions.md +1 -1
  265. package/dist/docs/reference/geometry/add2.md +1 -1
  266. package/dist/docs/reference/geometry/add3.md +1 -1
  267. package/dist/docs/reference/geometry/anchor3.md +1 -1
  268. package/dist/docs/reference/geometry/anchorFrame3.md +1 -1
  269. package/dist/docs/reference/geometry/applyTransformDirection3.md +1 -1
  270. package/dist/docs/reference/geometry/applyTransformPoint3.md +1 -1
  271. package/dist/docs/reference/geometry/attachmentTransform3.md +1 -1
  272. package/dist/docs/reference/geometry/bounds2.md +7 -6
  273. package/dist/docs/reference/geometry/bounds3.md +7 -6
  274. package/dist/docs/reference/geometry/boundsCenter.md +1 -1
  275. package/dist/docs/reference/geometry/boundsSize.md +1 -1
  276. package/dist/docs/reference/geometry/boxAnchor3.md +3 -3
  277. package/dist/docs/reference/geometry/categories/bounds-layout.md +8 -9
  278. package/dist/docs/reference/geometry/categories/curves-paths.md +2 -2
  279. package/dist/docs/reference/geometry/categories/mechanical.md +8 -10
  280. package/dist/docs/reference/geometry/categories/meshes.md +19 -32
  281. package/dist/docs/reference/geometry/categories/pattern-placement.md +2 -2
  282. package/dist/docs/reference/geometry/categories/primitive-options.md +3 -3
  283. package/dist/docs/reference/geometry/categories/profiles-regions.md +5 -4
  284. package/dist/docs/reference/geometry/categories/resolution-errors.md +7 -4
  285. package/dist/docs/reference/geometry/categories/transforms-math.md +3 -2
  286. package/dist/docs/reference/geometry/categories/vector-import.md +3 -3
  287. package/dist/docs/reference/geometry/circleContour.md +1 -1
  288. package/dist/docs/reference/geometry/closeToAxis.md +1 -1
  289. package/dist/docs/reference/geometry/compensateThreadDiameters.md +1 -1
  290. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +1 -1
  291. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +1 -1
  292. package/dist/docs/reference/geometry/composeTransform3.md +1 -1
  293. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +1 -1
  294. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +1 -1
  295. package/dist/docs/reference/geometry/contourContainsPoint.md +1 -1
  296. package/dist/docs/reference/geometry/cross2.md +1 -1
  297. package/dist/docs/reference/geometry/cross3.md +1 -1
  298. package/dist/docs/reference/geometry/cylinderAnchor3.md +2 -2
  299. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +1 -1
  300. package/dist/docs/reference/geometry/distance2.md +1 -1
  301. package/dist/docs/reference/geometry/distance3.md +1 -1
  302. package/dist/docs/reference/geometry/distributeAlongPath.md +1 -1
  303. package/dist/docs/reference/geometry/dot2.md +1 -1
  304. package/dist/docs/reference/geometry/dot3.md +1 -1
  305. package/dist/docs/reference/geometry/ellipseContour.md +1 -1
  306. package/dist/docs/reference/geometry/eulerTransform3.md +1 -1
  307. package/dist/docs/reference/geometry/fitBounds.md +1 -1
  308. package/dist/docs/reference/geometry/fitTextLayout.md +1 -1
  309. package/dist/docs/reference/geometry/frameTransform3.md +1 -1
  310. package/dist/docs/reference/geometry/getMetricClearanceHoleDiameter.md +1 -1
  311. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
  312. package/dist/docs/reference/geometry/gridPatternTransforms.md +1 -1
  313. package/dist/docs/reference/geometry/immutableBuffer.md +49 -0
  314. package/dist/docs/reference/geometry/inverseTransform3.md +1 -1
  315. package/dist/docs/reference/geometry/isGeometryError.md +1 -1
  316. package/dist/docs/reference/geometry/layoutRow.md +1 -1
  317. package/dist/docs/reference/geometry/length2.md +1 -1
  318. package/dist/docs/reference/geometry/length3.md +1 -1
  319. package/dist/docs/reference/geometry/lerp2.md +1 -1
  320. package/dist/docs/reference/geometry/lerp3.md +1 -1
  321. package/dist/docs/reference/geometry/linearPatternTransforms.md +1 -1
  322. package/dist/docs/reference/geometry/matchProfiles.md +1 -1
  323. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +1 -1
  324. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +1 -1
  325. package/dist/docs/reference/geometry/normalize2.md +1 -1
  326. package/dist/docs/reference/geometry/normalize3.md +1 -1
  327. package/dist/docs/reference/geometry/normalizeContour.md +1 -1
  328. package/dist/docs/reference/geometry/normalizePolygon.md +1 -1
  329. package/dist/docs/reference/geometry/normalizeRegion.md +1 -1
  330. package/dist/docs/reference/geometry/path2.md +1 -1
  331. package/dist/docs/reference/geometry/path3.md +1 -1
  332. package/dist/docs/reference/geometry/pathPatternTransforms.md +1 -1
  333. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +18 -25
  334. package/dist/docs/reference/geometry/preflightSvgRegion.md +12 -3
  335. package/dist/docs/reference/geometry/preflightThreadedNut.md +24 -26
  336. package/dist/docs/reference/geometry/preflightThreadedRod.md +18 -25
  337. package/dist/docs/reference/geometry/projectOntoPlane3.md +1 -1
  338. package/dist/docs/reference/geometry/radialPatternTransforms.md +1 -1
  339. package/dist/docs/reference/geometry/rectangleContour.md +10 -5
  340. package/dist/docs/reference/geometry/rectangleProfile.md +2 -2
  341. package/dist/docs/reference/geometry/regionArea.md +1 -1
  342. package/dist/docs/reference/geometry/regionBounds.md +1 -1
  343. package/dist/docs/reference/geometry/regularPolygonContour.md +2 -2
  344. package/dist/docs/reference/geometry/resamplePolyline2.md +1 -1
  345. package/dist/docs/reference/geometry/resamplePolyline3.md +1 -1
  346. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +1 -1
  347. package/dist/docs/reference/geometry/resolveArcSegments.md +1 -1
  348. package/dist/docs/reference/geometry/resolveCircularSampling.md +40 -0
  349. package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
  350. package/dist/docs/reference/geometry/resolveCylindricalGear.md +1 -1
  351. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +1 -1
  352. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +1 -1
  353. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
  354. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  355. package/dist/docs/reference/geometry/resolveKnuckleHinge.md +1 -1
  356. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +1 -1
  357. package/dist/docs/reference/geometry/resolveRackPitch.md +1 -1
  358. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +1 -1
  359. package/dist/docs/reference/geometry/rotate2.md +1 -1
  360. package/dist/docs/reference/geometry/rotationTransform3.md +1 -1
  361. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +1 -1
  362. package/dist/docs/reference/geometry/sampleContour.md +1 -1
  363. package/dist/docs/reference/geometry/sampleCurve2.md +1 -1
  364. package/dist/docs/reference/geometry/sampleCurve3.md +1 -1
  365. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
  366. package/dist/docs/reference/geometry/sampleHelix.md +1 -1
  367. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
  368. package/dist/docs/reference/geometry/sampleRackToothPath.md +1 -1
  369. package/dist/docs/reference/geometry/sampleSideProfile.md +1 -1
  370. package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
  371. package/dist/docs/reference/geometry/sampleThreadHelices.md +1 -1
  372. package/dist/docs/reference/geometry/scale2.md +1 -1
  373. package/dist/docs/reference/geometry/scale3.md +1 -1
  374. package/dist/docs/reference/geometry/scaleTransform3.md +1 -1
  375. package/dist/docs/reference/geometry/signedContourArea.md +1 -1
  376. package/dist/docs/reference/geometry/starContour.md +17 -15
  377. package/dist/docs/reference/geometry/strokeRegionData.md +1 -1
  378. package/dist/docs/reference/geometry/subtract2.md +1 -1
  379. package/dist/docs/reference/geometry/subtract3.md +1 -1
  380. package/dist/docs/reference/geometry/threadProfile.md +1 -1
  381. package/dist/docs/reference/geometry/transform2.md +1 -1
  382. package/dist/docs/reference/geometry/transform3.md +1 -1
  383. package/dist/docs/reference/geometry/transformDeterminant3.md +1 -1
  384. package/dist/docs/reference/geometry/transformRegionData.md +1 -1
  385. package/dist/docs/reference/geometry/translationTransform3.md +1 -1
  386. package/dist/docs/reference/geometry/triangulateContour.md +1 -1
  387. package/dist/docs/reference/geometry/validateRigidTransform3.md +35 -0
  388. package/dist/docs/reference/geometry/validateTransform3.md +1 -1
  389. package/dist/docs/reference/geometry/vector2.md +1 -1
  390. package/dist/docs/reference/geometry/vector3.md +1 -1
  391. package/dist/docs/reference/geometry.md +9 -9
  392. package/dist/docs/reference/mesh/AcmeThreadProfileSpec.md +79 -0
  393. package/dist/docs/reference/mesh/Bevel.md +18 -0
  394. package/dist/docs/reference/mesh/BevelSize.md +14 -0
  395. package/dist/docs/reference/mesh/Bounds2.md +125 -0
  396. package/dist/docs/reference/mesh/Bounds2Data.md +43 -0
  397. package/dist/docs/reference/mesh/Bounds2Input.md +19 -0
  398. package/dist/docs/reference/mesh/Bounds3.md +125 -0
  399. package/dist/docs/reference/mesh/Bounds3Data.md +43 -0
  400. package/dist/docs/reference/mesh/Bounds3Input.md +19 -0
  401. package/dist/docs/reference/mesh/ButtressPressureFlankSide.md +14 -0
  402. package/dist/docs/reference/mesh/ButtressThreadProfileSpec.md +97 -0
  403. package/dist/docs/reference/mesh/CircularPrimitiveOptions.md +60 -0
  404. package/dist/docs/reference/mesh/CurveSamplingOptions.md +69 -0
  405. package/dist/docs/reference/mesh/CustomThreadProfileSpec.md +77 -0
  406. package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +129 -0
  407. package/dist/docs/reference/mesh/ExtrusionSamplingOptions.md +81 -0
  408. package/dist/docs/reference/mesh/Frame3.md +62 -0
  409. package/dist/docs/reference/mesh/GeometryResolution.md +74 -0
  410. package/dist/docs/reference/mesh/GeometrySamplingLimits.md +66 -0
  411. package/dist/docs/reference/mesh/GeometryToleranceOptions.md +46 -0
  412. package/dist/docs/reference/mesh/HeightfieldMeshLimits.md +18 -0
  413. package/dist/docs/reference/mesh/HeightfieldOptions.md +72 -0
  414. package/dist/docs/reference/mesh/HeightfieldPreflight.md +58 -0
  415. package/dist/docs/reference/mesh/ImmutableBuffer.md +108 -0
  416. package/dist/docs/reference/mesh/ImmutableTriangleMesh.md +43 -0
  417. package/dist/docs/reference/mesh/LoftCorrespondence.md +24 -0
  418. package/dist/docs/reference/mesh/LoftMeshStation.md +31 -0
  419. package/dist/docs/reference/mesh/LoftOptions.md +88 -0
  420. package/dist/docs/reference/mesh/LoftPlacement.md +70 -0
  421. package/dist/docs/reference/mesh/ModelingLimits.md +130 -0
  422. package/dist/docs/reference/mesh/NumericArray.md +14 -0
  423. package/dist/docs/reference/mesh/Path2.md +197 -0
  424. package/dist/docs/reference/mesh/Path2Data.md +50 -0
  425. package/dist/docs/reference/mesh/Path2Input.md +20 -0
  426. package/dist/docs/reference/mesh/Path3.md +197 -0
  427. package/dist/docs/reference/mesh/Path3Data.md +50 -0
  428. package/dist/docs/reference/mesh/Path3Input.md +20 -0
  429. package/dist/docs/reference/mesh/PathLocation.md +69 -0
  430. package/dist/docs/reference/mesh/PathNormalGuide.md +43 -0
  431. package/dist/docs/reference/mesh/PathResamplingOptions.md +84 -0
  432. package/dist/docs/reference/mesh/Pivot2Options.md +26 -0
  433. package/dist/docs/reference/mesh/Pivot3Options.md +26 -0
  434. package/dist/docs/reference/mesh/PlanarMeshOptimizationFallbackReason.md +14 -0
  435. package/dist/docs/reference/mesh/PlanarMeshOptimizationOptions.md +160 -0
  436. package/dist/docs/reference/mesh/PlanarMeshOptimizationResult.md +124 -0
  437. package/dist/docs/reference/mesh/PlanarPatchQuality.md +194 -0
  438. package/dist/docs/reference/mesh/RevolveOptions.md +91 -0
  439. package/dist/docs/reference/mesh/SolidMeshValidationOptions.md +38 -0
  440. package/dist/docs/reference/mesh/SquareThreadProfileSpec.md +79 -0
  441. package/dist/docs/reference/mesh/SweepOptions.md +113 -0
  442. package/dist/docs/reference/mesh/SweepOrientation.md +113 -0
  443. package/dist/docs/reference/mesh/ThreadEndStyle.md +14 -0
  444. package/dist/docs/reference/mesh/ThreadEndTreatmentOptions.md +117 -0
  445. package/dist/docs/reference/mesh/ThreadHandedness.md +14 -0
  446. package/dist/docs/reference/mesh/ThreadLeadInEnvelope.md +14 -0
  447. package/dist/docs/reference/mesh/ThreadLeadInShape.md +14 -0
  448. package/dist/docs/reference/mesh/ThreadProfile.md +86 -0
  449. package/dist/docs/reference/mesh/ThreadProfileBaseSpec.md +53 -0
  450. package/dist/docs/reference/mesh/ThreadProfileSpec.md +23 -0
  451. package/dist/docs/reference/{model/HelicalThreadRidgeMeshOptions.md → mesh/ThreadRidgeOptions.md} +14 -10
  452. package/dist/docs/reference/mesh/ThreadSolidOptions.md +222 -0
  453. package/dist/docs/reference/mesh/ThreadSolidPreflight.md +58 -0
  454. package/dist/docs/reference/mesh/Transform2.md +256 -0
  455. package/dist/docs/reference/mesh/Transform2Data.md +14 -0
  456. package/dist/docs/reference/mesh/Transform2Input.md +19 -0
  457. package/dist/docs/reference/mesh/Transform3.md +296 -0
  458. package/dist/docs/reference/mesh/Transform3Data.md +17 -0
  459. package/dist/docs/reference/mesh/Transform3Input.md +19 -0
  460. package/dist/docs/reference/mesh/TrapezoidalThreadProfileSpec.md +96 -0
  461. package/dist/docs/reference/mesh/TriangleMesh.md +34 -0
  462. package/dist/docs/reference/mesh/TriangleMeshAnalysis.md +129 -0
  463. package/dist/docs/reference/mesh/TriangleMeshAnalysisOptions.md +79 -0
  464. package/dist/docs/reference/mesh/TriangleMeshInput.md +19 -0
  465. package/dist/docs/reference/mesh/TriangleMeshMeasurements.md +79 -0
  466. package/dist/docs/reference/mesh/TriangleMeshQualityOptions.md +43 -0
  467. package/dist/docs/reference/mesh/TriangleMeshQualityReport.md +194 -0
  468. package/dist/docs/reference/mesh/TriangleMeshSignature.md +111 -0
  469. package/dist/docs/reference/mesh/TriangleMeshSignatureOptions.md +46 -0
  470. package/dist/docs/reference/mesh/TriangleMeshSignatureTolerances.md +34 -0
  471. package/dist/docs/reference/mesh/TriangleMeshTopologyAnalysis.md +131 -0
  472. package/dist/docs/reference/mesh/TriangleMeshValidationOptions.md +55 -0
  473. package/dist/docs/reference/mesh/TriangularThreadProfileSpec.md +95 -0
  474. package/dist/docs/reference/mesh/Vector2.md +270 -0
  475. package/dist/docs/reference/mesh/Vector2Data.md +14 -0
  476. package/dist/docs/reference/mesh/Vector2Input.md +19 -0
  477. package/dist/docs/reference/mesh/Vector3.md +282 -0
  478. package/dist/docs/reference/mesh/Vector3Data.md +14 -0
  479. package/dist/docs/reference/mesh/Vector3Input.md +19 -0
  480. package/dist/docs/reference/mesh/analyze.md +96 -0
  481. package/dist/docs/reference/{geometry/analyzeTriangleMeshQuality.md → mesh/analyzeQuality.md} +9 -9
  482. package/dist/docs/reference/mesh/bounds.md +39 -0
  483. package/dist/docs/reference/mesh/categories/operations.md +147 -0
  484. package/dist/docs/reference/{geometry/computeTriangleMeshCentroid.md → mesh/centroid.md} +7 -7
  485. package/dist/docs/reference/mesh/extrude.md +73 -0
  486. package/dist/docs/reference/{geometry/heightfieldMesh.md → mesh/heightfield.md} +7 -8
  487. package/dist/docs/reference/mesh/immutable.md +47 -0
  488. package/dist/docs/reference/{geometry/joinTriangleMeshes.md → mesh/join.md} +7 -6
  489. package/dist/docs/reference/{geometry/loftMesh.md → mesh/loft.md} +15 -15
  490. package/dist/docs/reference/mesh/optimizePlanarPatches.md +96 -0
  491. package/dist/docs/reference/{geometry → mesh}/preflightHeightfield.md +5 -6
  492. package/dist/docs/reference/mesh/preflightThreadSolid.md +90 -0
  493. package/dist/docs/reference/{geometry/reverseTriangleMesh.md → mesh/reverse.md} +6 -5
  494. package/dist/docs/reference/{geometry/revolveMesh.md → mesh/revolve.md} +13 -13
  495. package/dist/docs/reference/{geometry/computeTriangleMeshSignature.md → mesh/signature.md} +11 -11
  496. package/dist/docs/reference/mesh/sweep.md +86 -0
  497. package/dist/docs/reference/mesh/threadRidge.md +72 -0
  498. package/dist/docs/reference/mesh/threadSolid.md +90 -0
  499. package/dist/docs/reference/{geometry/transformTriangleMesh.md → mesh/transform.md} +7 -6
  500. package/dist/docs/reference/{geometry/validateTriangleMesh.md → mesh/validate.md} +17 -11
  501. package/dist/docs/reference/{geometry/validateSolidMesh.md → mesh/validateSolid.md} +15 -9
  502. package/dist/docs/reference/mesh.md +21 -0
  503. package/dist/docs/reference/model/AcmeThreadProfileSpec.md +80 -0
  504. package/dist/docs/reference/model/Anchor3.md +1 -1
  505. package/dist/docs/reference/model/AttachOptions.md +1 -1
  506. package/dist/docs/reference/model/Bevel.md +19 -0
  507. package/dist/docs/reference/model/{ThreadedNutBevel.md → BevelSize.md} +4 -4
  508. package/dist/docs/reference/model/Bounds2-type.md +1 -1
  509. package/dist/docs/reference/model/Bounds2Data.md +1 -1
  510. package/dist/docs/reference/model/Bounds2Input.md +1 -1
  511. package/dist/docs/reference/model/Bounds2Options.md +110 -0
  512. package/dist/docs/reference/model/Bounds3-type.md +1 -1
  513. package/dist/docs/reference/model/Bounds3Data.md +1 -1
  514. package/dist/docs/reference/model/Bounds3Input.md +1 -1
  515. package/dist/docs/reference/model/Bounds3Options.md +110 -0
  516. package/dist/docs/reference/model/BoxEdge.md +1 -1
  517. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  518. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  519. package/dist/docs/reference/model/BoxOptions.md +3 -3
  520. package/dist/docs/reference/model/ButtressPressureFlankSide.md +15 -0
  521. package/dist/docs/reference/model/ButtressThreadProfileSpec.md +98 -0
  522. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  523. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  524. package/dist/docs/reference/model/CircleOptions.md +1 -1
  525. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -3
  526. package/dist/docs/reference/model/Computed.md +7 -3
  527. package/dist/docs/reference/model/ComputedValue.md +1 -1
  528. package/dist/docs/reference/model/Contour.md +1 -1
  529. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  530. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  531. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  532. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  533. package/dist/docs/reference/model/CurveSamplingOptions.md +68 -0
  534. package/dist/docs/reference/model/CustomThreadProfileSpec.md +78 -0
  535. package/dist/docs/reference/model/CylinderOptions.md +1 -1
  536. package/dist/docs/reference/model/DiagnosticOptions.md +15 -1
  537. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  538. package/dist/docs/reference/model/EllipseContourOptions.md +3 -3
  539. package/dist/docs/reference/model/EllipseOptions.md +1 -1
  540. package/dist/docs/reference/model/EndTreatments.md +1 -1
  541. package/dist/docs/reference/model/ExtrudeMeshOptions.md +133 -0
  542. package/dist/docs/reference/model/ExtrudeOptions.md +17 -8
  543. package/dist/docs/reference/model/ExtrusionSamplingOptions.md +84 -0
  544. package/dist/docs/reference/model/Frame3.md +1 -1
  545. package/dist/docs/reference/model/GenerateCallback.md +5 -5
  546. package/dist/docs/reference/model/GenerateContext.md +15 -63
  547. package/dist/docs/reference/model/GenerationDiagnostic.md +13 -1
  548. package/dist/docs/reference/model/GenerationError.md +1 -1
  549. package/dist/docs/reference/model/GeometryError.md +102 -0
  550. package/dist/docs/reference/model/GeometryErrorCode.md +15 -0
  551. package/dist/docs/reference/model/GeometryErrorContext.md +35 -0
  552. package/dist/docs/reference/model/GeometryResolution.md +1 -1
  553. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  554. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  555. package/dist/docs/reference/model/GridPatternOptions.md +1 -1
  556. package/dist/docs/reference/model/HeightfieldOptions.md +3 -2
  557. package/dist/docs/reference/model/HoleCutterOptions.md +77 -0
  558. package/dist/docs/reference/model/HoleCutterOverrun.md +35 -0
  559. package/dist/docs/reference/model/HoleCutterRecess.md +87 -0
  560. package/dist/docs/reference/model/HullOptions.md +1 -1
  561. package/dist/docs/reference/model/ImmutableBuffer-type.md +27 -3
  562. package/dist/docs/reference/model/ImmutableTriangleMesh.md +8 -3
  563. package/dist/docs/reference/model/ImmutableValue.md +20 -0
  564. package/dist/docs/reference/model/ImplicitOptions.md +1 -1
  565. package/dist/docs/reference/model/InternalThreadCutterOptions.md +54 -84
  566. package/dist/docs/reference/model/KnuckleHinge-type.md +1 -1
  567. package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +1 -1
  568. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +9 -5
  569. package/dist/docs/reference/model/KnuckleHingeOptions.md +3 -3
  570. package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +1 -1
  571. package/dist/docs/reference/model/KnuckleHingeSpec.md +1 -1
  572. package/dist/docs/reference/model/KnuckleHingeWeb.md +2 -2
  573. package/dist/docs/reference/model/LinearPatternOptions.md +1 -1
  574. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  575. package/dist/docs/reference/model/LoftOptions.md +3 -3
  576. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  577. package/dist/docs/reference/model/LoftStation.md +1 -1
  578. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  579. package/dist/docs/reference/model/ModelProgram.md +2 -2
  580. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  581. package/dist/docs/reference/model/NumericArray.md +1 -1
  582. package/dist/docs/reference/model/{GeneratedPart.md → PartDeclaration.md} +8 -23
  583. package/dist/docs/reference/model/PartGeometry.md +2 -2
  584. package/dist/docs/reference/model/PartOptions.md +8 -19
  585. package/dist/docs/reference/model/Path2-type.md +1 -1
  586. package/dist/docs/reference/model/Path2Data.md +1 -1
  587. package/dist/docs/reference/model/Path2Input.md +1 -1
  588. package/dist/docs/reference/model/Path3-type.md +1 -1
  589. package/dist/docs/reference/model/Path3Data.md +1 -1
  590. package/dist/docs/reference/model/Path3Input.md +1 -1
  591. package/dist/docs/reference/model/PathLocation.md +1 -1
  592. package/dist/docs/reference/model/PathNormalGuide.md +1 -1
  593. package/dist/docs/reference/model/PathOptions.md +1 -1
  594. package/dist/docs/reference/model/PathPatternOptions.md +1 -1
  595. package/dist/docs/reference/model/PathResamplingOptions.md +7 -6
  596. package/dist/docs/reference/model/PatternSource.md +1 -1
  597. package/dist/docs/reference/model/Pivot2Options.md +1 -1
  598. package/dist/docs/reference/model/Pivot3Options.md +1 -1
  599. package/dist/docs/reference/model/PlaneOptions.md +1 -1
  600. package/dist/docs/reference/model/PolygonData.md +1 -1
  601. package/dist/docs/reference/model/PolygonOptions.md +1 -1
  602. package/dist/docs/reference/model/PrimitiveAttachment.md +1 -3
  603. package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +1 -1
  604. package/dist/docs/reference/model/PrintableThreadFit.md +1 -1
  605. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +1 -1
  606. package/dist/docs/reference/model/Profile.md +1 -1
  607. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  608. package/dist/docs/reference/model/ProfileContour2.md +1 -1
  609. package/dist/docs/reference/model/ProfileSpan2.md +1 -1
  610. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +1 -1
  611. package/dist/docs/reference/model/RadialPatternOptions.md +1 -1
  612. package/dist/docs/reference/model/RadialSizing.md +1 -1
  613. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  614. package/dist/docs/reference/model/RectangleContourOptions.md +3 -3
  615. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  616. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  617. package/dist/docs/reference/model/RectangleOptions.md +3 -3
  618. package/dist/docs/reference/model/RegionData.md +1 -1
  619. package/dist/docs/reference/model/RegularPolygonOptions.md +1 -1
  620. package/dist/docs/reference/model/RevolveOptions.md +2 -2
  621. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  622. package/dist/docs/reference/model/Section.md +131 -6
  623. package/dist/docs/reference/model/SectionHullOptions.md +1 -1
  624. package/dist/docs/reference/model/SectionInspection.md +5 -17
  625. package/dist/docs/reference/model/SectionOffsetJoin.md +1 -1
  626. package/dist/docs/reference/model/SectionOffsetOptions.md +1 -1
  627. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  628. package/dist/docs/reference/model/Solid.md +245 -8
  629. package/dist/docs/reference/model/SolidInspection.md +5 -17
  630. package/dist/docs/reference/model/SolidSegmentHit.md +5 -1
  631. package/dist/docs/reference/model/SphereOptions.md +1 -1
  632. package/dist/docs/reference/model/SquareThreadProfileSpec.md +80 -0
  633. package/dist/docs/reference/model/StarContourOptions.md +81 -0
  634. package/dist/docs/reference/model/StarOptions.md +38 -16
  635. package/dist/docs/reference/model/StrokeCap.md +1 -1
  636. package/dist/docs/reference/model/StrokeJoin.md +1 -1
  637. package/dist/docs/reference/model/StrokeOptions.md +1 -1
  638. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  639. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  640. package/dist/docs/reference/model/SvgSectionOptions.md +14 -1
  641. package/dist/docs/reference/model/SweepOptions.md +1 -1
  642. package/dist/docs/reference/model/SweepOrientation.md +1 -1
  643. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  644. package/dist/docs/reference/model/ThreadBevelOptions.md +35 -0
  645. package/dist/docs/reference/model/ThreadEndStyle.md +1 -1
  646. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +1 -1
  647. package/dist/docs/reference/model/ThreadHandedness.md +1 -1
  648. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +1 -1
  649. package/dist/docs/reference/model/ThreadLeadInShape.md +1 -1
  650. package/dist/docs/reference/model/ThreadProfile.md +2 -2
  651. package/dist/docs/reference/model/ThreadProfileBaseSpec.md +54 -0
  652. package/dist/docs/reference/model/ThreadProfileSpec.md +24 -0
  653. package/dist/docs/reference/model/ThreadRidgeOptions.md +126 -4
  654. package/dist/docs/reference/model/{HelicalThreadSolidMeshPreflight.md → ThreadSolidPreflight.md} +2 -2
  655. package/dist/docs/reference/model/ThreadedNutOptions.md +75 -86
  656. package/dist/docs/reference/model/ThreadedNutPreflight.md +18 -6
  657. package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
  658. package/dist/docs/reference/model/ThreadedRodOptions.md +54 -84
  659. package/dist/docs/reference/model/TorusOptions.md +1 -1
  660. package/dist/docs/reference/model/Transform2-type.md +1 -1
  661. package/dist/docs/reference/model/Transform2Data.md +1 -1
  662. package/dist/docs/reference/model/Transform2Input.md +1 -1
  663. package/dist/docs/reference/model/Transform3-type.md +1 -1
  664. package/dist/docs/reference/model/Transform3Data.md +1 -1
  665. package/dist/docs/reference/model/Transform3Input.md +1 -1
  666. package/dist/docs/reference/model/TrapezoidalThreadProfileSpec.md +97 -0
  667. package/dist/docs/reference/model/TriangleMesh.md +3 -11
  668. package/dist/docs/reference/model/TriangleMeshAnalysis.md +10 -4
  669. package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
  670. package/dist/docs/reference/model/TriangleMeshTopologyAnalysis.md +131 -0
  671. package/dist/docs/reference/model/TriangularThreadProfileSpec.md +96 -0
  672. package/dist/docs/reference/model/TubeOptions.md +10 -86
  673. package/dist/docs/reference/model/Vector2-type.md +1 -1
  674. package/dist/docs/reference/model/Vector2Data.md +1 -1
  675. package/dist/docs/reference/model/Vector2Input.md +1 -1
  676. package/dist/docs/reference/model/Vector3-type.md +1 -1
  677. package/dist/docs/reference/model/Vector3Data.md +1 -1
  678. package/dist/docs/reference/model/Vector3Input.md +1 -1
  679. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  680. package/dist/docs/reference/model/VectorTextMetrics.md +1 -1
  681. package/dist/docs/reference/model/bounds2.md +7 -6
  682. package/dist/docs/reference/model/bounds3.md +7 -6
  683. package/dist/docs/reference/model/box.md +2 -2
  684. package/dist/docs/reference/model/categories/boolean-operations.md +6 -10
  685. package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -1
  686. package/dist/docs/reference/model/categories/bounds.md +6 -4
  687. package/dist/docs/reference/model/categories/contracts.md +3 -5
  688. package/dist/docs/reference/model/categories/core-values-errors.md +17 -3
  689. package/dist/docs/reference/model/categories/explicit-profiles.md +1 -1
  690. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +10 -8
  691. package/dist/docs/reference/model/categories/generation.md +8 -8
  692. package/dist/docs/reference/model/categories/hinges.md +2 -2
  693. package/dist/docs/reference/model/categories/mesh-inspection.md +15 -6
  694. package/dist/docs/reference/model/categories/paths.md +4 -3
  695. package/dist/docs/reference/model/categories/primitives.md +8 -4
  696. package/dist/docs/reference/model/categories/resolution.md +1 -1
  697. package/dist/docs/reference/model/categories/sections.md +4 -3
  698. package/dist/docs/reference/model/categories/threads.md +16 -6
  699. package/dist/docs/reference/model/categories/transforms-placement.md +2 -3
  700. package/dist/docs/reference/model/circle.md +1 -1
  701. package/dist/docs/reference/model/cylinder.md +1 -1
  702. package/dist/docs/reference/model/ellipse.md +1 -1
  703. package/dist/docs/reference/model/extrude.md +5 -4
  704. package/dist/docs/reference/model/generate.md +4 -4
  705. package/dist/docs/reference/model/gridPattern.md +1 -1
  706. package/dist/docs/reference/model/heightfield.md +1 -1
  707. package/dist/docs/reference/model/holeCutter.md +55 -0
  708. package/dist/docs/reference/model/hull.md +1 -1
  709. package/dist/docs/reference/model/immutableBuffer.md +5 -4
  710. package/dist/docs/reference/model/implicit.md +1 -1
  711. package/dist/docs/reference/model/internalThreadCutter.md +12 -20
  712. package/dist/docs/reference/model/intersect.md +3 -3
  713. package/dist/docs/reference/model/isGeometryError.md +34 -0
  714. package/dist/docs/reference/model/knuckleHinge.md +3 -3
  715. package/dist/docs/reference/model/linearPattern.md +1 -1
  716. package/dist/docs/reference/model/loft.md +6 -5
  717. package/dist/docs/reference/model/matchProfiles.md +1 -1
  718. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  719. package/dist/docs/reference/model/path2.md +1 -1
  720. package/dist/docs/reference/model/path3.md +1 -1
  721. package/dist/docs/reference/model/pathPattern.md +1 -1
  722. package/dist/docs/reference/model/polygon.md +1 -1
  723. package/dist/docs/reference/model/preflightInternalThreadCutter.md +15 -23
  724. package/dist/docs/reference/model/preflightThreadedNut.md +22 -25
  725. package/dist/docs/reference/model/preflightThreadedRod.md +15 -23
  726. package/dist/docs/reference/model/radialPattern.md +1 -1
  727. package/dist/docs/reference/model/rectangle.md +2 -2
  728. package/dist/docs/reference/model/regularPolygon.md +1 -1
  729. package/dist/docs/reference/model/revolve.md +6 -5
  730. package/dist/docs/reference/model/solidFromMesh.md +7 -6
  731. package/dist/docs/reference/model/sphere.md +1 -1
  732. package/dist/docs/reference/model/star.md +7 -7
  733. package/dist/docs/reference/model/stroke.md +1 -1
  734. package/dist/docs/reference/model/svgPathSection.md +1 -1
  735. package/dist/docs/reference/model/svgSection.md +5 -1
  736. package/dist/docs/reference/model/sweep.md +5 -4
  737. package/dist/docs/reference/model/textSection.md +1 -1
  738. package/dist/docs/reference/model/threadRidge.md +14 -14
  739. package/dist/docs/reference/model/threadedNut.md +22 -25
  740. package/dist/docs/reference/model/threadedRod.md +12 -20
  741. package/dist/docs/reference/model/torus.md +1 -1
  742. package/dist/docs/reference/model/transform2.md +1 -1
  743. package/dist/docs/reference/model/transform3.md +1 -1
  744. package/dist/docs/reference/model/tube.md +1 -36
  745. package/dist/docs/reference/model/union.md +3 -3
  746. package/dist/docs/reference/model/vector2.md +1 -1
  747. package/dist/docs/reference/model/vector3.md +1 -1
  748. package/dist/docs/reference/model.md +15 -19
  749. package/dist/docs/reference/text/Bounds2Data.md +1 -1
  750. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +2 -2
  751. package/dist/docs/reference/text/Vector2Data.md +1 -1
  752. package/dist/docs/reference/text/VectorFont.md +1 -1
  753. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  754. package/dist/docs/reference/text/VectorTextArcBaseline.md +1 -1
  755. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  756. package/dist/docs/reference/text/VectorTextLayoutOptions.md +1 -1
  757. package/dist/docs/reference/text/VectorTextMetrics.md +1 -1
  758. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  759. package/dist/docs/reference/text/categories/font-preparation.md +3 -3
  760. package/dist/docs/reference/text/prepareVectorFont.md +1 -1
  761. package/dist/docs/reference/text.md +4 -4
  762. package/dist/engine/execution.js +10 -6
  763. package/dist/engine/export-3mf.js +22 -115
  764. package/dist/engine/finalization.js +10 -10
  765. package/dist/engine/index.js +25 -31
  766. package/dist/engine/model-parts.js +8 -0
  767. package/dist/engine/model-summary.js +5 -5
  768. package/dist/engine/native/index.js +1 -1
  769. package/dist/engine/native/material-components.js +3 -3
  770. package/dist/engine/native/operations.js +0 -7
  771. package/dist/engine/native/scoped-primitives.js +5 -4
  772. package/dist/engine/native/threads.js +14 -14
  773. package/dist/engine/{construction-operations.js → operations/construction.js} +25 -23
  774. package/dist/engine/{modeling-context.js → operations/context.js} +21 -9
  775. package/dist/engine/{operation-environment.js → operations/environment.js} +2 -2
  776. package/dist/engine/{extrusion-finishing.js → operations/extrusion-finishing.js} +8 -35
  777. package/dist/engine/operations/hole-cutter.js +148 -0
  778. package/dist/engine/{inspection-operations.js → operations/inspection.js} +6 -6
  779. package/dist/engine/operations/knuckle-hinge.js +128 -0
  780. package/dist/engine/{loft-operations.js → operations/loft.js} +13 -12
  781. package/dist/engine/{mechanical-operations.js → operations/mechanical.js} +2 -2
  782. package/dist/engine/{pattern-operations.js → operations/patterns.js} +4 -4
  783. package/dist/engine/{primitive-anchors.js → operations/primitives/anchors.js} +9 -4
  784. package/dist/engine/{primitive-operations.js → operations/primitives/construction.js} +36 -24
  785. package/dist/engine/{primitive-correspondence.js → operations/primitives/correspondence.js} +4 -4
  786. package/dist/engine/{profile-mesh.js → operations/primitives/profile-mesh.js} +12 -12
  787. package/dist/engine/{primitive-profiles.js → operations/primitives/profiles.js} +7 -7
  788. package/dist/engine/{section-operations.js → operations/sections.js} +9 -9
  789. package/dist/engine/{transform-operations.js → operations/transforms.js} +8 -8
  790. package/dist/engine/placement.js +3 -4
  791. package/dist/engine/recipe-realization.js +1 -1
  792. package/dist/engine/serialize-3mf.js +116 -0
  793. package/dist/engine/{deferred-context.js → session/deferred-context.js} +4 -4
  794. package/dist/engine/{model-dependencies.js → session/dependencies.js} +1 -1
  795. package/dist/engine/{session-graph.js → session/graph.js} +13 -11
  796. package/dist/engine/{session-native.js → session/native-cache.js} +1 -1
  797. package/dist/engine/{session.js → session/session.js} +16 -10
  798. package/dist/engine/{session-snapshot.js → session/snapshot-cache.js} +29 -59
  799. package/dist/geometry/anchors.js +4 -11
  800. package/dist/geometry/bounds-value.js +49 -11
  801. package/dist/geometry/bounds.js +0 -17
  802. package/dist/geometry/circular-sampling.js +45 -0
  803. package/dist/geometry/convex-offset.js +41 -0
  804. package/dist/geometry/heightfield.js +10 -12
  805. package/dist/{model → geometry}/immutable-buffer.js +28 -7
  806. package/dist/geometry/index.js +18 -23
  807. package/dist/geometry/loft/loft.js +11 -6
  808. package/dist/geometry/math/immutable-value.js +1 -1
  809. package/dist/geometry/mechanical/index.js +5 -5
  810. package/dist/geometry/mechanical/threads/bevel.js +24 -0
  811. package/dist/geometry/mechanical/{threads.js → threads/fit.js} +4 -4
  812. package/dist/geometry/mechanical/{thread-helices.js → threads/helices.js} +3 -3
  813. package/dist/geometry/mechanical/{thread-mesh-plan.js → threads/mesh-plan.js} +38 -53
  814. package/dist/geometry/mechanical/{thread-mesh.js → threads/mesh.js} +9 -9
  815. package/dist/geometry/mechanical/{thread-profiles.js → threads/profiles.js} +3 -3
  816. package/dist/geometry/mechanical/{thread-solids.js → threads/solids.js} +58 -89
  817. package/dist/geometry/mechanical/{thread-surface.js → threads/surface.js} +7 -8
  818. package/dist/geometry/mesh/mesh-centroid.js +3 -2
  819. package/dist/geometry/mesh/mesh-planar.js +27 -8
  820. package/dist/geometry/mesh/mesh-quality.js +2 -1
  821. package/dist/geometry/mesh/mesh-signature.js +7 -6
  822. package/dist/geometry/mesh/mesh-solid.js +2 -3
  823. package/dist/geometry/mesh/mesh-types.js +1 -0
  824. package/dist/geometry/mesh/mesh.js +13 -22
  825. package/dist/geometry/mesh-api.js +14 -0
  826. package/dist/geometry/primitive-resolvers.js +42 -14
  827. package/dist/geometry/profiles/primitives/circle.js +19 -0
  828. package/dist/geometry/profiles/{shapes.js → primitives/ellipse.js} +6 -10
  829. package/dist/geometry/profiles/{rectangle.js → primitives/rectangle.js} +14 -12
  830. package/dist/geometry/profiles/primitives/regular-polygon.js +33 -0
  831. package/dist/geometry/profiles/primitives/star.js +28 -0
  832. package/dist/geometry/revolve/revolve-mesh.js +1 -1
  833. package/dist/geometry/{svg-import.js → svg/import.js} +141 -59
  834. package/dist/geometry/svg/matrix.js +21 -0
  835. package/dist/geometry/sweeps/sweep-mesh.js +1 -1
  836. package/dist/geometry/transform3.js +29 -0
  837. package/dist/index.js +2 -1
  838. package/dist/model/diagnostic-path.js +26 -0
  839. package/dist/model/execution-binding.js +3 -3
  840. package/dist/model/generation.js +8 -2
  841. package/dist/model/geometry-recipes.js +1 -1
  842. package/dist/model/hole-cutter.js +1 -0
  843. package/dist/model/immutable-generation-data.js +33 -2
  844. package/dist/model/operations.js +35 -144
  845. package/dist/model/recipe-declaration.js +7 -2
  846. package/dist/model/shape-handles.js +30 -7
  847. package/dist/text/index.js +1 -1
  848. package/package.json +21 -11
  849. package/dist/docs/reference/engine/ModelSnapshot.md +0 -184
  850. package/dist/docs/reference/engine/SnapshotPart.md +0 -133
  851. package/dist/docs/reference/engine/validateModel.md +0 -48
  852. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +0 -24
  853. package/dist/docs/reference/geometry/ThreadedNutBevel.md +0 -14
  854. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +0 -61
  855. package/dist/docs/reference/geometry/boundsFromSize.md +0 -84
  856. package/dist/docs/reference/geometry/containsBounds.md +0 -73
  857. package/dist/docs/reference/geometry/extrudeMesh.md +0 -77
  858. package/dist/docs/reference/geometry/helicalThreadRidgeMesh.md +0 -72
  859. package/dist/docs/reference/geometry/helicalThreadSolidMesh.md +0 -106
  860. package/dist/docs/reference/geometry/meshBounds.md +0 -39
  861. package/dist/docs/reference/geometry/optimizePlanarPatches.md +0 -95
  862. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +0 -105
  863. package/dist/docs/reference/geometry/sweepMesh.md +0 -86
  864. package/dist/docs/reference/model/FinalizedModel.md +0 -131
  865. package/dist/docs/reference/model/FinalizedPart.md +0 -87
  866. package/dist/docs/reference/model/anchor.md +0 -47
  867. package/dist/docs/reference/model/castSegment.md +0 -40
  868. package/dist/docs/reference/model/categories/inspection.md +0 -29
  869. package/dist/docs/reference/model/components.md +0 -71
  870. package/dist/docs/reference/model/compose.md +0 -31
  871. package/dist/docs/reference/model/distance.md +0 -45
  872. package/dist/docs/reference/model/immutableMesh.md +0 -44
  873. package/dist/docs/reference/model/inspectSection.md +0 -38
  874. package/dist/docs/reference/model/inspectSolid.md +0 -38
  875. package/dist/docs/reference/model/isEmpty.md +0 -39
  876. package/dist/docs/reference/model/split.md +0 -54
  877. package/dist/docs/reference/model/splitByPlane.md +0 -66
  878. package/dist/engine/knuckle-hinge-operation.js +0 -85
  879. package/dist/geometry/profiles/profiles.js +0 -91
  880. /package/dist/engine/{primitive-profile-types.js → operations/primitives/profile-types.js} +0 -0
  881. /package/dist/geometry/profiles/{matched.js → match-profiles.js} +0 -0
@@ -1,7 +1,17 @@
1
+ import type {
2
+ ImmutableBuffer,
3
+ ImmutableTriangleMesh,
4
+ NumericArray,
5
+ } from "@metamesh/modeling/geometry";
6
+ export type {
7
+ ImmutableBuffer,
8
+ ImmutableTriangleMesh,
9
+ NumericArray,
10
+ } from "@metamesh/modeling/geometry";
1
11
  /** Immutable modeling recipes and math values; the host owns geometry evaluation. @packageDocumentation */
2
12
 
3
13
  /** ACME 29-degree included-angle profile. */
4
- declare interface AcmeThreadProfileSpec extends ThreadProfileBaseSpec {
14
+ export declare interface AcmeThreadProfileSpec extends ThreadProfileBaseSpec {
5
15
  /** Selects the 29-degree ACME profile family. */
6
16
  readonly kind: "acme";
7
17
  /**
@@ -11,17 +21,6 @@ declare interface AcmeThreadProfileSpec extends ThreadProfileBaseSpec {
11
21
  readonly depth?: number;
12
22
  }
13
23
 
14
- /**
15
- * Reads a copied, immutable named anchor from this exact active generation.
16
- *
17
- * @example Read the top datum
18
- * ```ts
19
- * const plate = box({ size: [30, 20, 6] });
20
- * anchor(plate, "top"); // position [0, 0, 3], direction [0, 0, 1]
21
- * ```
22
- */
23
- export declare function anchor(shape: Solid | Section, name: string): Anchor3;
24
-
25
24
  /**
26
25
  * An attachment pose on a solid or assembly.
27
26
  *
@@ -49,6 +48,13 @@ export declare interface AttachOptions {
49
48
  readonly tolerance?: GeometryToleranceOptions;
50
49
  }
51
50
 
51
+ /** One size for both ends, or independent sizes in bottom/top order. Zero disables an end. */
52
+ export declare type Bevel =
53
+ BevelSize | readonly [bottom: BevelSize, top: BevelSize];
54
+
55
+ /** Nonnegative 45-degree axial/radial bevel size in millimetres, or factory automatic sizing. */
56
+ export declare type BevelSize = number | "auto";
57
+
52
58
  /** Immutable finite XY bounds in millimetres, with tuple coordinates for data interoperability. */
53
59
  export declare interface Bounds2 extends Bounds2Data {
54
60
  /** Returns nonnegative X/Y dimensions in millimetres, including zero extents. */
@@ -62,14 +68,15 @@ export declare interface Bounds2 extends Bounds2Data {
62
68
  }
63
69
 
64
70
  /**
65
- * Snapshots finite ordered XY bounds in millimetres as an immutable fluent value.
71
+ * Constructs immutable finite XY bounds from ordered extrema or nonnegative size in millimetres.
66
72
  *
67
73
  * Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
68
74
  * overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
75
+ * Size construction centers on the origin unless `center` is false. Size and extrema are exclusive.
69
76
  * Compiled Generator packages passing these values to host recipes or computed data require
70
- * runtime 8.0.0 or newer in major 8.
77
+ * runtime 10.0.0 or newer in major 10.
71
78
  */
72
- export declare function bounds2(input: Bounds2Input): Bounds2;
79
+ export declare function bounds2(input: Bounds2Options | Bounds2): Bounds2;
73
80
 
74
81
  /** Plain axis-aligned XY bounds for interchange; use bounds2 for immutable measurement methods. */
75
82
  export declare interface Bounds2Data {
@@ -82,6 +89,29 @@ export declare interface Bounds2Data {
82
89
  /** An immutable XY bounds value or its plain min/max representation. */
83
90
  export declare type Bounds2Input = Bounds2 | Bounds2Data;
84
91
 
92
+ /** XY bounds construction from existing extrema or nonnegative dimensions, never both. */
93
+ export declare type Bounds2Options =
94
+ | {
95
+ /** Inclusive minimum XY coordinates in millimetres. */
96
+ readonly min: Vector2Input;
97
+ /** Inclusive maximum XY coordinates in millimetres. */
98
+ readonly max: Vector2Input;
99
+ /** Size construction cannot be combined with extrema. */
100
+ readonly size?: never;
101
+ /** Center applies only to size construction. */
102
+ readonly center?: never;
103
+ }
104
+ | {
105
+ /** Nonnegative XY dimensions in millimetres. */
106
+ readonly size: Vector2Input;
107
+ /** Center on the origin; false starts at the origin. Defaults to true. */
108
+ readonly center?: boolean;
109
+ /** Minimum coordinates are unavailable when size is supplied. */
110
+ readonly min?: never;
111
+ /** Maximum coordinates are unavailable when size is supplied. */
112
+ readonly max?: never;
113
+ };
114
+
85
115
  /** Immutable finite XYZ bounds in millimetres, with tuple coordinates for data interoperability. */
86
116
  export declare interface Bounds3 extends Bounds3Data {
87
117
  /** Returns nonnegative X/Y/Z dimensions in millimetres, including zero extents. */
@@ -95,14 +125,15 @@ export declare interface Bounds3 extends Bounds3Data {
95
125
  }
96
126
 
97
127
  /**
98
- * Snapshots finite ordered XYZ bounds in millimetres as an immutable fluent value.
128
+ * Constructs immutable finite XYZ bounds from ordered extrema or nonnegative size in millimetres.
99
129
  *
100
130
  * Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
101
131
  * overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
132
+ * Size construction centers on the origin unless `center` is false. Size and extrema are exclusive.
102
133
  * Compiled Generator packages passing these values to host recipes or computed data require
103
- * runtime 8.0.0 or newer in major 8.
134
+ * runtime 10.0.0 or newer in major 10.
104
135
  */
105
- export declare function bounds3(input: Bounds3Input): Bounds3;
136
+ export declare function bounds3(input: Bounds3Options | Bounds3): Bounds3;
106
137
 
107
138
  /** Plain axis-aligned XYZ bounds for interchange; use bounds3 for immutable measurement methods. */
108
139
  export declare interface Bounds3Data {
@@ -115,6 +146,29 @@ export declare interface Bounds3Data {
115
146
  /** An immutable XYZ bounds value or its plain min/max representation. */
116
147
  export declare type Bounds3Input = Bounds3 | Bounds3Data;
117
148
 
149
+ /** XYZ bounds construction from existing extrema or nonnegative dimensions, never both. */
150
+ export declare type Bounds3Options =
151
+ | {
152
+ /** Inclusive minimum XYZ coordinates in millimetres. */
153
+ readonly min: Vector3Input;
154
+ /** Inclusive maximum XYZ coordinates in millimetres. */
155
+ readonly max: Vector3Input;
156
+ /** Size construction cannot be combined with extrema. */
157
+ readonly size?: never;
158
+ /** Center applies only to size construction. */
159
+ readonly center?: never;
160
+ }
161
+ | {
162
+ /** Nonnegative XYZ dimensions in millimetres. */
163
+ readonly size: Vector3Input;
164
+ /** Center on the origin; false starts at the origin. Defaults to true. */
165
+ readonly center?: boolean;
166
+ /** Minimum coordinates are unavailable when size is supplied. */
167
+ readonly min?: never;
168
+ /** Maximum coordinates are unavailable when size is supplied. */
169
+ readonly max?: never;
170
+ };
171
+
118
172
  /**
119
173
  * Axis-aligned box with uniform or disjoint named edge/group treatments.
120
174
  *
@@ -160,16 +214,16 @@ export declare interface BoxOptions extends PrimitiveAttachment {
160
214
  */
161
215
  readonly center?: boolean;
162
216
  /** Positive uniform size or explicit `[X, Y, Z]` extents in millimetres. */
163
- readonly size: number | Vector3Data;
217
+ readonly size: number | Vector3Input;
164
218
  /** Uniform treatment or independent disjoint nominal edge/group treatments. */
165
219
  readonly treatment?: EdgeTreatment | BoxEdgeTreatments;
166
220
  }
167
221
 
168
222
  /** Axial side carrying the near-normal pressure flank of a buttress thread. */
169
- declare type ButtressPressureFlankSide = "negative" | "positive";
223
+ export declare type ButtressPressureFlankSide = "negative" | "positive";
170
224
 
171
225
  /** Asymmetric printable buttress profile with 7/45-degree flanks. */
172
- declare interface ButtressThreadProfileSpec extends ThreadProfileBaseSpec {
226
+ export declare interface ButtressThreadProfileSpec extends ThreadProfileBaseSpec {
173
227
  /** Selects the asymmetric printable buttress profile family. */
174
228
  readonly kind: "buttress";
175
229
  /**
@@ -185,13 +239,6 @@ declare interface ButtressThreadProfileSpec extends ThreadProfileBaseSpec {
185
239
  readonly pressureFlankSide?: ButtressPressureFlankSide;
186
240
  }
187
241
 
188
- /** Copies intersections along the finite directed origin-to-endpoint segment. */
189
- export declare function castSegment(
190
- solid: Solid,
191
- origin: Vector3Input,
192
- endpoint: Vector3Input,
193
- ): readonly SolidSegmentHit[];
194
-
195
242
  /**
196
243
  * A planar edge or corner chamfer with equal or independent surface setbacks.
197
244
  */
@@ -212,20 +259,18 @@ export declare interface ChamferedEdgeTreatment {
212
259
  */
213
260
  export declare function circle(options: CircleOptions): Section;
214
261
 
215
- /**
216
- * Circular profile dimensions with exactly one radius or diameter and explicit sampling.
217
- */
262
+ /** Circular profile dimensions with exactly one radius or diameter and explicit sampling. */
218
263
  export declare type CircleContourOptions = CircularPrimitiveOptions &
219
264
  RadialSizingOptions &
220
265
  (
221
266
  | {
222
- /** Positive nominal radius in millimetres; mutually exclusive with diameter. */
267
+ /** Positive nominal radius in millimetres. */
223
268
  readonly radius: number;
224
- /** Full diameter is unavailable when radius is supplied. */
269
+ /** Diameter is unavailable when radius is supplied. */
225
270
  readonly diameter?: never;
226
271
  }
227
272
  | {
228
- /** Positive full diameter in millimetres; mutually exclusive with radius. */
273
+ /** Positive nominal diameter in millimetres. */
229
274
  readonly diameter: number;
230
275
  /** Radius is unavailable when diameter is supplied. */
231
276
  readonly radius?: never;
@@ -254,40 +299,12 @@ export declare interface CircularPrimitiveOptions {
254
299
  readonly resolution?: GeometryResolution;
255
300
  }
256
301
 
257
- /**
258
- * Observes disconnected material pieces as session-restricted solid selections.
259
- *
260
- * Each piece retains its enclosed cavities. A sealed hollow box is one component; adding a loose
261
- * ball inside its cavity produces two. Recombining the pieces preserves the original material.
262
- * This does not cut connected geometry. Containment is bounded to 2,000,000 comparisons.
263
- * Selection order and cardinality depend on evaluated topology. Results and recipes using them
264
- * can only be evaluated in this session; composition itself requires no engine.
265
- *
266
- * @example Move disconnected pieces independently
267
- * ```ts
268
- * const islands = union([box({ size: 8 }), box({ size: 8 }).translate([12, 0, 0])]);
269
- * const pieces = components(islands);
270
- * // Component order is unspecified; the index only sets a display height here.
271
- * union(pieces.map((piece, index) => piece.translate([0, 0, index * 6])));
272
- * ```
273
- */
274
- export declare function components(solid: Solid): readonly Solid[];
275
-
276
- /**
277
- * Observes filled 2D islands, retaining each island's holes; empty gives [].
278
- * Selections and recipes using them can only be evaluated in this session.
279
- */
280
- export declare function components(section: Section): readonly Section[];
281
-
282
- /** Combines disjoint components without resolving overlap. */
283
- export declare function compose(solids: readonly Solid[]): Solid;
284
-
285
302
  /** A lazy session-owned reader. Calling it tracks its output in the current computation. */
286
303
  export declare interface Computed<T> {
287
304
  /** Compile-time ownership brand; readers are created by the engine's context helper. */
288
305
  readonly [computedBrand]: "Computed";
289
306
  /** Reads immutable data or a deferred recipe; evaluation is synchronous and cached. */
290
- (): T;
307
+ (): ImmutableValue<T>;
291
308
  }
292
309
 
293
310
  declare const computedBrand: unique symbol;
@@ -342,7 +359,7 @@ export declare type CorrespondingProfileStation = LoftPlacement & {
342
359
  /**
343
360
  * Explicit physical sampling and allocation policy for reusable curves.
344
361
  */
345
- declare interface CurveSamplingOptions {
362
+ export declare interface CurveSamplingOptions {
346
363
  /** Exact segment count overrides physical criteria; curve parameters are spaced uniformly. */
347
364
  readonly segments?: number;
348
365
  /** Millimetre sampling policy; circularSegments applies only to arcs. */
@@ -354,7 +371,7 @@ declare interface CurveSamplingOptions {
354
371
  }
355
372
 
356
373
  /** Caller-defined periodic axial/radial profile in millimetres. */
357
- declare interface CustomThreadProfileSpec extends ThreadProfileBaseSpec {
374
+ export declare interface CustomThreadProfileSpec extends ThreadProfileBaseSpec {
358
375
  /** Selects a caller-defined periodic profile. */
359
376
  readonly kind: "custom";
360
377
  /**
@@ -413,25 +430,13 @@ export declare type CylinderOptions = CircularPrimitiveOptions &
413
430
  export declare interface DiagnosticOptions<P> {
414
431
  /** Existing top-level parameter key. */
415
432
  readonly parameterId?: Extract<keyof P, string> | undefined;
433
+ /** Relative field path, at most 32 nonnegative safe indices or 1–120 character field names.
434
+ * Starts within parameterId's value, or the whole input map when no parameterId is supplied.
435
+ * Omitted or empty addresses the whole value; paths do not validate field existence.
436
+ */
437
+ readonly path?: readonly (string | number)[] | undefined;
416
438
  }
417
439
 
418
- /**
419
- * Measures the minimum separation between two nonempty solids in millimetres.
420
- *
421
- * Uses actual geometry, not bounding-box separation or distance between object origins.
422
- * Contact or overlapping material returns zero, including one solid inside another.
423
- * The kernel's search range is managed internally; the result is not capped at a caller limit.
424
- * Empty geometry and component selections from another session reject. Results follow native numeric precision.
425
- *
426
- * @example Measure the gap between two blocks
427
- * ```ts
428
- * const left = box({ size: 10 });
429
- * const right = box({ size: 10 }).translate([13, 0, 0]);
430
- * const gap = distance(left, right); // 3 mm
431
- * ```
432
- */
433
- export declare function distance(solid: Solid, other: Solid): number;
434
-
435
440
  /**
436
441
  * Uniform finishing vocabulary shared by applicable solid edges and profile corners.
437
442
  */
@@ -458,13 +463,13 @@ export declare type EllipseContourOptions = CircularPrimitiveOptions &
458
463
  (
459
464
  | {
460
465
  /** Positive XY radii in millimetres; mutually exclusive with size. */
461
- readonly radius: Vector2Data;
466
+ readonly radius: Vector2Input;
462
467
  /** Full XY extents are unavailable when radius is supplied. */
463
468
  readonly size?: never;
464
469
  }
465
470
  | {
466
471
  /** Positive full XY extents in millimetres; mutually exclusive with radius. */
467
- readonly size: Vector2Data;
472
+ readonly size: Vector2Input;
468
473
  /** XY radii are unavailable when size is supplied. */
469
474
  readonly radius?: never;
470
475
  }
@@ -488,8 +493,8 @@ export declare interface EndTreatments {
488
493
  }
489
494
 
490
495
  /**
491
- * Extrudes explicit corresponding contours along +Z with degree twist and top scaling.
492
- * Filled Sections use `section.extrude(options)`.
496
+ * Extrudes a filled Section or explicit corresponding contours along +Z with degree twist and top scaling.
497
+ * Use `section.extrude(options)` in fluent sequences, or this function for generic profile inputs.
493
498
  *
494
499
  * @example Extrude
495
500
  * ```ts
@@ -501,24 +506,28 @@ export declare interface EndTreatments {
501
506
  * ```
502
507
  */
503
508
  export declare function extrude(
504
- shape: CorrespondingProfile,
509
+ shape: Section | CorrespondingProfile,
505
510
  options: ExtrudeOptions,
506
511
  ): Solid;
507
512
 
508
513
  /**
509
- * Dimensions and sampling shared by native and pure +Z extrusion.
514
+ * Dimensions and sampling for pure +Z mesh extrusion, without end treatments.
510
515
  */
511
- export declare interface ExtrudeOptions extends ExtrusionSamplingOptions {
516
+ export declare interface ExtrudeMeshOptions extends ExtrusionSamplingOptions {
512
517
  /** Positive extrusion height in millimetres. */
513
518
  readonly height: number;
514
519
  /** Center the extrusion on Z; otherwise its bottom is at zero. Defaults to false. */
515
520
  readonly center?: boolean;
521
+ }
522
+
523
+ /** Native +Z extrusion with optional inward end treatments. */
524
+ export declare interface ExtrudeOptions extends ExtrudeMeshOptions {
516
525
  /** Independent inward end treatments on straight convex single-contour extrusions. */
517
526
  readonly ends?: EndTreatments;
518
527
  }
519
528
 
520
529
  /** Shared sampling controls for a twisted or scaled linear extrusion. */
521
- declare interface ExtrusionSamplingOptions {
530
+ export declare interface ExtrusionSamplingOptions {
522
531
  /** Exact number of intermediate profiles, nonnegative; overrides physical sampling. */
523
532
  readonly divisions?: number;
524
533
  /** Explicit output and sampling allocation ceilings. */
@@ -531,43 +540,6 @@ declare interface ExtrusionSamplingOptions {
531
540
  readonly twist?: number;
532
541
  }
533
542
 
534
- /** Finalized manufacturing snapshot. Its arrays are independent of all native values. */
535
- export declare interface FinalizedModel {
536
- /** Ordered finalized manufacturing parts with copied transferable arrays. */
537
- readonly parts: readonly FinalizedPart[];
538
- /** Axis-aligned XYZ bounds in millimetres. */
539
- readonly bounds: Bounds3Data;
540
- /** Aggregate counts, unique backing storage, volume, and execution timings. */
541
- readonly stats: {
542
- /** Number of declared output parts, including repeated geometry instances. */
543
- readonly partCount: number;
544
- /** Aggregate position-buffer vertex count. */
545
- readonly vertexCount: number;
546
- /** Aggregate indexed triangle count. */
547
- readonly triangleCount: number;
548
- /** Signed enclosed volume of all selected parts in cubic millimetres. */
549
- readonly volumeMm3: number;
550
- /** Unique transferable backing-buffer bytes, counted once across all parts. */
551
- readonly byteCount: number;
552
- /** Synchronous callback duration in milliseconds. */
553
- readonly buildMs: number;
554
- /** Manufacturing validation and buffer finalization duration in milliseconds. */
555
- readonly finalizationMs: number;
556
- /** Total generation duration, including cache retention and native cleanup, in milliseconds. */
557
- readonly generationMs: number;
558
- };
559
- }
560
-
561
- /** Copied manufacturing part with facts computed from the finalized mesh. */
562
- export declare interface FinalizedPart extends TriangleMesh {
563
- /** Stable canonical lowercase identity; unique within the containing topology or output. */
564
- readonly id: string;
565
- /** Optional six-digit hex RGB display color. */
566
- readonly color?: string;
567
- /** Fresh validated facts for these exact finalized buffers. */
568
- readonly measurements: TriangleMeshAnalysis;
569
- }
570
-
571
543
  /** A right-handed orthonormal coordinate frame expressed in world coordinates. */
572
544
  export declare interface Frame3 {
573
545
  /** World-space origin of the local frame. */
@@ -581,7 +553,9 @@ export declare interface Frame3 {
581
553
  }
582
554
 
583
555
  /**
584
- * Defines a typed model without executing it. Use `computed` only for work worth reusing.
556
+ * Defines a typed model without executing it. Parameters are an object map of capturable data;
557
+ * runtime capture rejects arrays at the root, ordinary class instances, mutable buffers, and functions.
558
+ * Supply live capabilities through services. Use `computed` only for work worth reusing.
585
559
  *
586
560
  * @example A simple model
587
561
  * ```ts
@@ -591,19 +565,25 @@ export declare interface Frame3 {
591
565
  * });
592
566
  * ```
593
567
  */
594
- export declare function generate<P, S = Record<never, never>>(
568
+ export declare function generate<P extends object, S = Record<never, never>>(
595
569
  callback: GenerateCallback<P, S>,
596
570
  ): ModelProgram<P, S>;
597
571
 
598
572
  /** Pure synchronous callback returning one declared part or an array; caches are optional. */
599
- export declare type GenerateCallback<P, S = Record<never, never>> = (
573
+ export declare type GenerateCallback<
574
+ P extends object,
575
+ S = Record<never, never>,
576
+ > = (
600
577
  context: GenerateContext<P, S>,
601
- ) => GeneratedPart | readonly GeneratedPart[];
578
+ ) => PartDeclaration | readonly PartDeclaration[];
602
579
 
603
580
  /** The sole synchronous authoring context, supplied independently of Studio. */
604
- export declare interface GenerateContext<P, S = Record<never, never>> {
581
+ export declare interface GenerateContext<
582
+ P extends object,
583
+ S = Record<never, never>,
584
+ > {
605
585
  /** Frozen ordinary parameter values; synchronous top-level reads are tracked. */
606
- readonly params: Readonly<P>;
586
+ readonly params: ImmutableValue<P>;
607
587
  /** Host-prepared readonly synchronous capabilities, fixed for the session. */
608
588
  readonly services: Readonly<S>;
609
589
  /**
@@ -617,11 +597,13 @@ export declare interface GenerateContext<P, S = Record<never, never>> {
617
597
  dependencies?: readonly unknown[],
618
598
  ) => Computed<T>;
619
599
  /** Declares a semantic part with identity placement, or explicit placement and appearance. */
620
- readonly part: {
621
- (id: string, geometry: ComputedValue<PartGeometry>): GeneratedPart;
622
- (id: string, options: PartOptions): GeneratedPart;
623
- };
624
- /** Immediately aborts on false; geometry observations in the condition run first. */
600
+ readonly part: (
601
+ id: string,
602
+ input: ComputedValue<PartGeometry> | PartOptions,
603
+ ) => PartDeclaration;
604
+ /** Immediately aborts on false; geometry observations in the condition run first.
605
+ * This diagnostic helper does not narrow TypeScript types; use an explicit conditional guard when needed.
606
+ */
625
607
  readonly assert: {
626
608
  (condition: false, message: string, options?: DiagnosticOptions<P>): never;
627
609
  (condition: boolean, message: string, options?: DiagnosticOptions<P>): void;
@@ -630,12 +612,6 @@ export declare interface GenerateContext<P, S = Record<never, never>> {
630
612
  readonly warn: (message: string, options?: DiagnosticOptions<P>) => void;
631
613
  }
632
614
 
633
- /** One declared output part. Construct with the context's `part` helper. */
634
- export declare interface GeneratedPart extends PartOptions {
635
- /** Unique canonical lowercase hyphen-separated identity, at most 64 characters. */
636
- readonly id: string;
637
- }
638
-
639
615
  /** Structured user-facing issue associated with the attempted revision. */
640
616
  export declare interface GenerationDiagnostic {
641
617
  /** An error aborts generation; a warning allows generation to continue. */
@@ -644,6 +620,8 @@ export declare interface GenerationDiagnostic {
644
620
  readonly message: string;
645
621
  /** Optional control identity, validated against the supplied parameters. */
646
622
  readonly parameterId?: string | undefined;
623
+ /** Relative field location within the parameter, or input map when parameterId is omitted. */
624
+ readonly path?: readonly (string | number)[] | undefined;
647
625
  }
648
626
 
649
627
  /** A user-correctable assertion failure. Successful computation caches never retain failures. */
@@ -654,6 +632,60 @@ export declare class GenerationError extends Error {
654
632
  constructor(diagnostics: readonly GenerationDiagnostic[]);
655
633
  }
656
634
 
635
+ /**
636
+ * Error raised when a geometry precondition or invariant is not satisfied.
637
+ *
638
+ * Callers may use `code` for coarse recovery decisions. Human-facing details
639
+ * remain in `message`; messages are descriptive but are not a stable API.
640
+ *
641
+ * @example
642
+ * ```ts
643
+ * const error = new GeometryError("INVALID_ARGUMENT", "Radius must be positive.", {
644
+ * operation: "example",
645
+ * details: { radius: 0 },
646
+ * });
647
+ * ```
648
+ */
649
+ export declare class GeometryError extends Error {
650
+ /** Machine-readable failure category. */
651
+ readonly code: GeometryErrorCode;
652
+ /** Operation and scalar facts associated with the failure. */
653
+ readonly context: GeometryErrorContext;
654
+ /**
655
+ * Creates a geometry error with a stable category, operation, and descriptive message.
656
+ *
657
+ * @param code - Machine-readable failure category.
658
+ * @param message - Human-readable diagnostic message.
659
+ * @param context - Operation and optional scalar facts. Defaults to `{ operation: "geometry" }`.
660
+ */
661
+ constructor(
662
+ code: GeometryErrorCode,
663
+ message: string,
664
+ context?: GeometryErrorContext,
665
+ );
666
+ }
667
+
668
+ /** Stable categories for invalid inputs, topology, allocation, and runtime failures. */
669
+ export declare type GeometryErrorCode =
670
+ | "COMPLEXITY_LIMIT"
671
+ | "DEGENERATE_GEOMETRY"
672
+ | "INVALID_ARGUMENT"
673
+ | "INVALID_MESH"
674
+ | "INVALID_TOPOLOGY"
675
+ | "INVALID_TOLERANCE"
676
+ | "NON_FINITE_VALUE"
677
+ | "SELF_INTERSECTION"
678
+ | "SINGULAR_TRANSFORM"
679
+ | "UNSUPPORTED_RUNTIME";
680
+
681
+ /** Serializable context attached to a geometry failure. */
682
+ export declare interface GeometryErrorContext {
683
+ /** Optional scalar facts useful for diagnostics without parsing the message. */
684
+ readonly details?: Readonly<Record<string, boolean | number | string>>;
685
+ /** Stable operation name, such as `normalizeContour` or `extrude`. */
686
+ readonly operation: string;
687
+ }
688
+
657
689
  /**
658
690
  * Tessellation policy for sampled geometry measured in millimetres.
659
691
  */
@@ -777,11 +809,11 @@ export declare type HeightfieldOptions = {
777
809
  } & (
778
810
  | {
779
811
  /** Positive XY footprint for uniform sampling. */
780
- readonly size: Vector2Data;
812
+ readonly size: Vector2Input;
781
813
  /** Exact positive integer X/Y interval counts. */
782
814
  readonly segments: readonly [x: number, y: number];
783
815
  /** Lower-left footprint XY. Omitted centers the footprint on XY. */
784
- readonly origin?: Vector2Data;
816
+ readonly origin?: Vector2Input;
785
817
  /** Explicit coordinates cannot be combined with uniform sampling. */
786
818
  readonly coordinates?: never;
787
819
  }
@@ -805,45 +837,109 @@ export declare type HeightfieldOptions = {
805
837
  }
806
838
  );
807
839
 
808
- /** Runtime-neutral options for the dedicated helical ridge mesher. */
809
- export declare interface HelicalThreadRidgeMeshOptions {
810
- /**
811
- * Optional bottom/top ridge-end treatments. Standalone ridges honor the requested boundaries;
812
- * BOSL2-style non-cut lead-in scaling is available on complete thread solids.
813
- */
814
- readonly ends?: ThreadEndTreatmentOptions;
815
- /** Helix direction. Default: `right`. */
816
- readonly handedness?: ThreadHandedness;
817
- /** Total threaded axial length in millimetres. */
818
- readonly length: number;
819
- /** Explicit output and circular allocation ceilings. */
820
- readonly limits?: Partial<ModelingLimits>;
821
- /** Nominal major diameter before any caller-owned fit compensation. */
822
- readonly majorDiameter: number;
823
- /** Angular offset of the first start in degrees. Default: `0`. */
824
- readonly phase?: number;
825
- /** Validated periodic profile repeated around the shaft. */
826
- readonly profile: ThreadProfile;
827
- /** Optional circular-resolution policy. */
840
+ /**
841
+ * Declares a +Z hole or blind-pocket cutter with explicit end overrun in millimetres.
842
+ *
843
+ * @remarks
844
+ * Choose exactly one circular diameter or existing Section. A 45-degree entry chamfer
845
+ * supports one strictly convex contour without holes; plain profiles may have any topology.
846
+ * Circular entries retain nominal frustum radii; profile entries offset the supplied polygon edges.
847
+ * Circular head recesses are mutually exclusive with entryChamfer. Both overrun ends default
848
+ * to zero, so the nominal bottom remains at Z=0 and blind pocket floors are preserved.
849
+ * Existing Section samples are authoritative; limits and unspecified circular sampling belong
850
+ * to the evaluating host.
851
+ *
852
+ * @example A blind hex pocket with an open top
853
+ * ```ts
854
+ * holeCutter({
855
+ * profile: regularPolygon({ sides: 6, radius: 3.5, sizing: "face", rotation: 30 }),
856
+ * height: 12, entryChamfer: 0.5, overrun: { top: 0.05 },
857
+ * });
858
+ * ```
859
+ */
860
+ export declare function holeCutter(options: HoleCutterOptions): Solid;
861
+
862
+ /**
863
+ * A deferred +Z hole or pocket cutter, with exactly one circular diameter or existing Section.
864
+ * Profile entry chamfers expand one strictly convex contour without holes by parallel-edge offsets;
865
+ * the supplied sampled boundary remains authoritative. Plain profile cutters accept any Section.
866
+ * Circular entry chamfers retain nominal circular/frustum radii under the selected radial sizing.
867
+ */
868
+ export declare type HoleCutterOptions = {
869
+ /** Positive nominal depth along +Z, starting exactly at Z=0. */
870
+ readonly height: number;
871
+ /** Opening carrying the recess or entry chamfer; defaults to top. */
872
+ readonly face?: "bottom" | "top";
873
+ /** Extra length outside each nominal face; both ends default to zero. */
874
+ readonly overrun?: HoleCutterOverrun;
875
+ /** Operation-level physical sampling; an existing Section retains its sampled boundary. */
828
876
  readonly resolution?: GeometryResolution;
829
- /** Number of evenly phased starts. Default: `1`. */
830
- readonly starts?: number;
831
- /** Optional numerical tolerance overrides. */
832
- readonly tolerance?: GeometryToleranceOptions;
833
- }
877
+ /** Local allocation ceilings may only lower the evaluating host's limits. */
878
+ readonly limits?: Partial<ModelingLimits>;
879
+ } & (
880
+ | (CircularPrimitiveOptions &
881
+ RadialSizingOptions & {
882
+ /** Positive nominal circular bore diameter in millimetres. */
883
+ readonly diameter: number;
884
+ /** Unavailable in this input form. */
885
+ readonly profile?: never;
886
+ } & (
887
+ | {
888
+ /** Nonnegative 45-degree entry setback; must be smaller than height. Defaults to zero. */
889
+ readonly entryChamfer?: number;
890
+ /** Unavailable in this input form. */
891
+ readonly recess?: never;
892
+ }
893
+ | {
894
+ /** Circular head seating; mutually exclusive with entryChamfer. */
895
+ readonly recess: HoleCutterRecess;
896
+ /** Unavailable in this input form. */
897
+ readonly entryChamfer?: never;
898
+ }
899
+ ))
900
+ | {
901
+ /** Local XY material to remove, retaining its position, orientation and physical sampling. */
902
+ readonly profile: Section;
903
+ /** Unavailable in this input form. */
904
+ readonly diameter?: never;
905
+ /** Unavailable in this input form. */
906
+ readonly recess?: never;
907
+ /** Unavailable in this input form. */
908
+ readonly segments?: never;
909
+ /** Unavailable in this input form. */
910
+ readonly sizing?: never;
911
+ /** Nonnegative 45-degree entry setback for a strictly convex single contour without holes. */
912
+ readonly entryChamfer?: number;
913
+ }
914
+ );
834
915
 
835
- /** Selected sampling counts and conservative allocation estimates, before thread mesh construction. */
836
- export declare interface HelicalThreadSolidMeshPreflight {
837
- /** Uniform axial intervals required only by a requested physical segment-length limit. */
838
- readonly axialIntervals: number;
839
- /** Start-aligned full-circle segment count used by the surface mesh. */
840
- readonly circularSegments: number;
841
- /** Conservative surface-row count across profile breaks, ends, and bevel stations. */
842
- readonly estimatedRows: number;
843
- /** Conservative triangle count used by the selected output allocation policy. */
844
- readonly estimatedTriangles: number;
916
+ /** Explicit extra cutter length outside the nominal Z=0..height interval, in millimetres. */
917
+ export declare interface HoleCutterOverrun {
918
+ /** Extension below Z=0. Omitted means zero, preserving a blind pocket's floor. */
919
+ readonly bottom?: number;
920
+ /** Extension above Z=height. Omitted means zero. */
921
+ readonly top?: number;
845
922
  }
846
923
 
924
+ /** Circular screw seating dimensions in millimetres; allowances belong to the caller. */
925
+ export declare type HoleCutterRecess =
926
+ | {
927
+ /** Cylindrical seat. */
928
+ readonly kind: "counterbore";
929
+ /** Positive seat diameter greater than the bore, in millimetres. */
930
+ readonly diameter: number;
931
+ /** Positive seat depth no greater than height, in millimetres. */
932
+ readonly depth: number;
933
+ }
934
+ | {
935
+ /** Conical seat. */
936
+ readonly kind: "countersink";
937
+ /** Positive mouth diameter greater than the bore, in millimetres. */
938
+ readonly diameter: number;
939
+ /** Full included angle strictly between zero and 180 degrees; derived depth must fit height. */
940
+ readonly includedAngle: number;
941
+ };
942
+
847
943
  /**
848
944
  * Convex hull of points or solids.
849
945
  *
@@ -874,18 +970,6 @@ export declare type HullOptions =
874
970
  readonly points?: never;
875
971
  };
876
972
 
877
- /** Owned immutable numeric data. Use copy() to obtain mutable storage for numerical work. */
878
- export declare interface ImmutableBuffer<T extends NumericArray> {
879
- /** Opaque element-storage brand; construct buffers with immutableBuffer(). */
880
- readonly [immutableBufferBrand]: T;
881
- /** Number of numeric elements, independent of their byte width. */
882
- readonly length: number;
883
- /** Reads an integer offset; negative offsets count from the end. Invalid offsets return undefined. */
884
- at(this: void, index: number): number | undefined;
885
- /** Returns a fresh mutable array of the original numeric type; never exposes cached storage. */
886
- copy(this: void): T;
887
- }
888
-
889
973
  /**
890
974
  * Copies numeric data once into private storage. This pure helper needs no active generation.
891
975
  * @example
@@ -894,6 +978,7 @@ export declare interface ImmutableBuffer<T extends NumericArray> {
894
978
  * const heights = immutableBuffer(new Float32Array([2, 4, 6]));
895
979
  * const count = heights.length;
896
980
  * const first = heights.at(0);
981
+ * const doubled = Array.from(heights, (height) => height * 2);
897
982
  * const editable = heights.copy();
898
983
  * editable[0] = 8; // heights still contains 2, 4, 6.
899
984
  * ```
@@ -902,33 +987,18 @@ export declare function immutableBuffer<T extends NumericArray>(
902
987
  source: T,
903
988
  ): ImmutableBuffer<T>;
904
989
 
905
- declare const immutableBufferBrand: unique symbol;
906
-
907
990
  /**
908
- * Copies mesh buffers into immutable data; geometric validation still occurs when modeling or finalizing.
909
- * @example
910
- * ```ts
911
- * import { generate, immutableMesh } from "@metamesh/modeling";
912
- * import { heightfieldMesh } from "@metamesh/modeling/geometry";
913
- * const model = generate(({ computed, part }) => {
914
- * const surface = computed("surface", () => immutableMesh(heightfieldMesh({
915
- * size: [10, 10], segments: [8, 8], height: () => 2,
916
- * })));
917
- * return [part("surface", surface)];
918
- * });
919
- * ```
991
+ * Deeply readonly view of captured generation data, including nested arrays and tuples.
992
+ * Modeling value methods keep their signatures, including explicit mutable copies.
993
+ * This type does not make unsupported runtime values valid generation data.
920
994
  */
921
- export declare function immutableMesh(
922
- mesh: TriangleMesh,
923
- ): ImmutableTriangleMesh;
924
-
925
- /** Immutable local XYZ positions and triangle indices, suitable for a computed value or part. */
926
- export declare interface ImmutableTriangleMesh {
927
- /** Packed XYZ coordinates in millimetres. */
928
- readonly positions: ImmutableBuffer<Float32Array>;
929
- /** Zero-based vertex indices, three per triangle. */
930
- readonly indices: ImmutableBuffer<Uint32Array>;
931
- }
995
+ export declare type ImmutableValue<T> = T extends (...args: never[]) => unknown
996
+ ? T
997
+ : T extends object
998
+ ? {
999
+ readonly [Key in keyof T]: ImmutableValue<T[Key]>;
1000
+ }
1001
+ : T;
932
1002
 
933
1003
  /**
934
1004
  * Bounded positive-inside implicit field constructor.
@@ -950,28 +1020,6 @@ export declare interface ImplicitOptions {
950
1020
  readonly tolerance?: number;
951
1021
  }
952
1022
 
953
- /**
954
- * Copies lightweight section measurements.
955
- *
956
- * @example Check filled area
957
- * ```ts
958
- * const facts = inspectSection(rectangle({ size: [20, 10] }));
959
- * facts.area; // 200 mm²
960
- * ```
961
- */
962
- export declare function inspectSection(section: Section): SectionInspection;
963
-
964
- /**
965
- * Reads immutable native facts once per solid; temporary components are owned by the build.
966
- *
967
- * @example Check dimensions and volume
968
- * ```ts
969
- * const facts = inspectSolid(box({ size: [30, 20, 6] }));
970
- * facts.volume; // 3600 mm³
971
- * ```
972
- */
973
- export declare function inspectSolid(solid: Solid): SolidInspection;
974
-
975
1023
  /**
976
1024
  * Compensated internal threaded cutter.
977
1025
  *
@@ -991,9 +1039,7 @@ export declare function internalThreadCutter(
991
1039
 
992
1040
  /** Options for a compensated internal-thread subtraction tool along +Z. */
993
1041
  export declare interface InternalThreadCutterOptions
994
- extends
995
- Omit<HelicalThreadRidgeMeshOptions, "majorDiameter">,
996
- ThreadBevelOptions {
1042
+ extends Omit<ThreadRidgeOptions, "majorDiameter">, ThreadBevelOptions {
997
1043
  /** Printable fit or caller-calibrated allowances. Default: `normal`. */
998
1044
  readonly fit?: PrintableThreadFit | PrintableThreadFitPolicy;
999
1045
  /** Nominal major diameter before female compensation and faceting correction. */
@@ -1001,7 +1047,7 @@ export declare interface InternalThreadCutterOptions
1001
1047
  }
1002
1048
 
1003
1049
  /**
1004
- * Robust intersection.
1050
+ * Robust intersection of one or more shapes; empty input rejects during declaration.
1005
1051
  *
1006
1052
  * @example Intersect
1007
1053
  * ```ts
@@ -1014,20 +1060,12 @@ export declare function intersect(solids: readonly Solid[]): Solid;
1014
1060
  export declare function intersect(sections: readonly Section[]): Section;
1015
1061
 
1016
1062
  /**
1017
- * Checks whether a solid or filled section contains no geometry during host execution.
1063
+ * Recognizes structured geometry errors from separately bundled Modeling copies in the same realm.
1018
1064
  *
1019
- * Accepts a 3D Solid or 2D Section handle, not a finalized model or raw triangle mesh.
1020
- * Useful after a Boolean operation whose inputs may not overlap; no mesh is extracted.
1021
- *
1022
- * @example Check a missed intersection
1023
- * ```ts
1024
- * const body = box({ size: 10 });
1025
- * const distant = box({ size: 10 }).translate([30, 0, 0]);
1026
- * const empty = intersect([body, distant]);
1027
- * const missed = isEmpty(empty); // true
1028
- * ```
1065
+ * Ordinary errors and unmarked code-shaped objects are rejected. The marker is execution-local and
1066
+ * does not survive structured cloning; worker protocols carry their own serialized error envelope.
1029
1067
  */
1030
- export declare function isEmpty(shape: Solid | Section): boolean;
1068
+ export declare function isGeometryError(value: unknown): value is GeometryError;
1031
1069
 
1032
1070
  /** Portable local geometry; consumers own plates, holes, part declarations, and final placement. */
1033
1071
  export declare interface KnuckleHinge {
@@ -1046,10 +1084,10 @@ export declare interface KnuckleHinge {
1046
1084
  * otherwise disconnected intervals. Returns portable recipes without initializing the engine.
1047
1085
  * Unspecified resolution inherits the evaluating session. Axis direction is +X with +Z up.
1048
1086
  *
1049
- * Barrel end chamfers affect outer rims only; webs have square edges. Consumers own plates, screw holes,
1087
+ * Each half's `chamfer` bevels its barrel outer rims and all web edges. Consumers own plates, screw holes,
1050
1088
  * pin retention, fit policy, and part placement. Added mounting material must preserve the bores.
1051
1089
  * No opening range or collision freedom is implied for arbitrary caller attachments.
1052
- * Compiled Generator packages using this operation require runtime 8.0.0 or newer in major 8.
1090
+ * Compiled Generator packages using this operation require runtime 10.0.0 or newer in major 10.
1053
1091
  *
1054
1092
  * @example Integral-pin hinge with two mounting webs
1055
1093
  * ```ts
@@ -1081,20 +1119,26 @@ export declare interface KnuckleHingeBaseSpec {
1081
1119
  readonly axialGap: number;
1082
1120
  }
1083
1121
 
1084
- /** Optional mounting and outer-rim treatment for one knuckle owner. */
1122
+ /** Optional mounting and edge treatment for one knuckle owner. */
1085
1123
  export declare interface KnuckleHingeHalfOptions {
1086
1124
  /** Omit for barrels only. Each interval receives one web; disconnected intervals need caller geometry. */
1087
1125
  readonly web?: KnuckleHingeWeb;
1088
- /** 45° setback in millimetres at both ends of every barrel; defaults to 0. */
1089
- readonly barrelChamfer?: number;
1126
+ /**
1127
+ * Nonnegative 45° setback in millimetres on barrel outer rims and exposed web edges; defaults to 0.
1128
+ * The root at the pin centreline stays square so its faces can merge with the barrel.
1129
+ *
1130
+ * Must leave a positive barrel wall and axial band. Web thickness must exceed twice the setback;
1131
+ * web reach and knuckle length must exceed `2 * Math.SQRT2 * chamfer` to retain the end contours.
1132
+ */
1133
+ readonly chamfer?: number;
1090
1134
  }
1091
1135
 
1092
1136
  /** Joint declaration with independent attachments; unspecified sampling inherits the evaluating host. */
1093
1137
  export declare type KnuckleHingeOptions = KnuckleHingeSpec &
1094
1138
  KnuckleHingeSamplingOptions & {
1095
- /** Optional attachment and rim treatment for A, which owns an integral pin when present. */
1139
+ /** Optional attachment and edge treatment for A, which owns an integral pin when present. */
1096
1140
  readonly halfA?: KnuckleHingeHalfOptions;
1097
- /** Optional attachment and rim treatment for B, which always carries a running bore. */
1141
+ /** Optional attachment and edge treatment for B, which always carries a running bore. */
1098
1142
  readonly halfB?: KnuckleHingeHalfOptions;
1099
1143
  };
1100
1144
 
@@ -1141,7 +1185,7 @@ export declare interface KnuckleHingeWeb {
1141
1185
  readonly reach: number;
1142
1186
  /** Lower-face Z coordinate in the pin-centered frame, in millimetres. Must overlap the barrel's interior. */
1143
1187
  readonly zMin: number;
1144
- /** Positive thickness along +Z. Webs have square edges and span their own barrel intervals. */
1188
+ /** Positive thickness along +Z. Each web spans its own barrel interval. */
1145
1189
  readonly thickness: number;
1146
1190
  }
1147
1191
 
@@ -1199,7 +1243,8 @@ export declare type LinearPatternOptions<Dimension extends 2 | 3 = 3> = {
1199
1243
  );
1200
1244
 
1201
1245
  /**
1202
- * Lofts primitive Sections at z heights or frames; arbitrary Sections and loops require an explicit correspondence method.
1246
+ * Lofts Sections and point loops at z heights or frames. Known primitive landmarks are retained;
1247
+ * other profiles default to direct correspondence, preserving their supplied seams.
1203
1248
  *
1204
1249
  * @example Loft
1205
1250
  * ```ts
@@ -1237,10 +1282,10 @@ export declare type LoftCorrespondence =
1237
1282
  "direct" | "reindex" | "fast-distance" | "distance";
1238
1283
 
1239
1284
  /**
1240
- * Shared controls for native and pure lofts. Point data and arbitrary Sections require explicit correspondence.
1285
+ * Shared controls for native and pure lofts. Point data and arbitrary Sections default to direct correspondence.
1241
1286
  */
1242
1287
  export declare interface LoftOptions {
1243
- /** One method or one per consecutive station gap. Omitted preserves known landmarks, including circle/ellipse-to-rectangle corners, or maps other unlike primitive seams directly. */
1288
+ /** One method or one per consecutive station gap. Omitted preserves known primitive landmarks, including circle/ellipse-to-rectangle corners, and otherwise uses direct correspondence with the supplied seams. */
1244
1289
  readonly correspondence?: LoftCorrespondence | readonly LoftCorrespondence[];
1245
1290
  /** Extra points follow edge length or distribute equally across existing segments. Defaults to perimeter for direct/reindex, or segments when any distance method is selected; distance methods require segments. */
1246
1291
  readonly distribution?: "perimeter" | "segments";
@@ -1312,16 +1357,21 @@ export declare interface ModelingLimits extends GeometrySamplingLimits {
1312
1357
  }
1313
1358
 
1314
1359
  /** Stateless portable program descriptor. Execution and caches belong to an engine session. */
1315
- export declare interface ModelProgram<P, S = Record<never, never>> {
1360
+ export declare interface ModelProgram<
1361
+ P extends object,
1362
+ S = Record<never, never>,
1363
+ > {
1316
1364
  /** Exact generation protocol discriminator. */
1317
1365
  readonly kind: "metamesh-model";
1318
1366
  /** Typed synchronous declaration callback. */
1319
1367
  readonly generate: GenerateCallback<P, S>;
1320
1368
  }
1321
1369
 
1322
- /** Numeric storage supported by immutable generation buffers. */
1323
- export declare type NumericArray =
1324
- Float32Array | Float64Array | Uint32Array | Uint8Array | Int32Array;
1370
+ /** One declared output part. Construct with the context's `part` helper. */
1371
+ export declare interface PartDeclaration extends PartOptions {
1372
+ /** Unique canonical lowercase hyphen-separated identity, at most 64 characters. */
1373
+ readonly id: string;
1374
+ }
1325
1375
 
1326
1376
  /** Manufacturing geometry; filled sections are intermediate construction values. */
1327
1377
  export declare type PartGeometry = Solid | TriangleMesh | ImmutableTriangleMesh;
@@ -1330,10 +1380,10 @@ export declare type PartGeometry = Solid | TriangleMesh | ImmutableTriangleMesh;
1330
1380
  export declare interface PartOptions {
1331
1381
  /** Local geometry or a lazy reader; native objects never cross a revision. */
1332
1382
  readonly geometry: ComputedValue<PartGeometry>;
1333
- /** XYZ vector or tuple translation in millimetres, applied after rotation; defaults to zero. */
1334
- readonly position?: ComputedValue<Vector3Input>;
1335
- /** XYZ vector or tuple of fixed global X, Y, Z rotations in degrees; defaults to zero. */
1336
- readonly rotation?: ComputedValue<Vector3Input>;
1383
+ /** Rigid local-to-world transform; translation uses millimetres. Defaults to identity.
1384
+ * Accepts a fluent transform or row-major 4x4 matrix. Scale, shear, and reflection are invalid.
1385
+ */
1386
+ readonly transform?: ComputedValue<Transform3Input>;
1337
1387
  /** Optional six-digit hexadecimal semantic part color. */
1338
1388
  readonly color?: string;
1339
1389
  }
@@ -1609,7 +1659,7 @@ export declare type PolygonOptions =
1609
1659
  */
1610
1660
  export declare function preflightInternalThreadCutter(
1611
1661
  options: InternalThreadCutterOptions,
1612
- ): HelicalThreadSolidMeshPreflight;
1662
+ ): ThreadSolidPreflight;
1613
1663
 
1614
1664
  /**
1615
1665
  * Checks nut dimensions, chamfers, end-face wall, and the extended compensated cutter's allocation plan.
@@ -1635,7 +1685,7 @@ export declare function preflightThreadedNut(
1635
1685
  */
1636
1686
  export declare function preflightThreadedRod(
1637
1687
  options: ThreadedRodOptions,
1638
- ): HelicalThreadSolidMeshPreflight;
1688
+ ): ThreadSolidPreflight;
1639
1689
 
1640
1690
  /** Anchor attachment shared by solid and filled-section factories. */
1641
1691
  export declare interface PrimitiveAttachment {
@@ -1834,7 +1884,7 @@ export declare function rectangle(options: RectangleOptions): Section;
1834
1884
  */
1835
1885
  export declare interface RectangleContourOptions {
1836
1886
  /** Positive uniform size or explicit XY extents in millimetres. */
1837
- readonly size: number | Vector2Data;
1887
+ readonly size: number | Vector2Input;
1838
1888
  /** Center on XY; otherwise the minimum corner is the origin. Defaults to true. */
1839
1889
  readonly center?: boolean;
1840
1890
  /** Uniform treatment or four corner treatments. Exact round segments describe a complete circle and must divide by four. */
@@ -1897,8 +1947,8 @@ export declare type RegularPolygonOptions = RadialSizingOptions &
1897
1947
  };
1898
1948
 
1899
1949
  /**
1900
- * Revolves explicit corresponding radial/Z contours around +Z, with caps for partial sweeps.
1901
- * Filled Sections use `section.revolve(options)`.
1950
+ * Revolves a filled Section or explicit corresponding radial/Z contours around +Z, with caps for partial sweeps.
1951
+ * Use `section.revolve(options)` in fluent sequences, or this function for generic profile inputs.
1902
1952
  *
1903
1953
  * @example Revolve
1904
1954
  * ```ts
@@ -1911,7 +1961,7 @@ export declare type RegularPolygonOptions = RadialSizingOptions &
1911
1961
  * ```
1912
1962
  */
1913
1963
  export declare function revolve(
1914
- shape: CorrespondingProfile,
1964
+ shape: Section | CorrespondingProfile,
1915
1965
  options?: RevolveOptions,
1916
1966
  ): Solid;
1917
1967
 
@@ -1924,7 +1974,7 @@ export declare interface RevolveOptions extends CircularPrimitiveOptions {
1924
1974
  * smaller sweeps form partial revolutions with end caps.
1925
1975
  * Segment counts describe a complete circle and scale to this angular span. Native filled
1926
1976
  * revolutions require at least three sweep intervals: adaptive sampling refines to that floor,
1927
- * while exact counts that imply fewer intervals reject. Pure revolveMesh supports one interval.
1977
+ * while exact counts that imply fewer intervals reject. Pure mesh.revolve supports one interval.
1928
1978
  * @defaultValue `360`
1929
1979
  */
1930
1980
  readonly degrees?: number;
@@ -1955,7 +2005,7 @@ export declare interface RoundedEdgeTreatment extends CircularPrimitiveOptions {
1955
2005
  * @example Extrude an outline with a border
1956
2006
  * ```ts
1957
2007
  * const body = rectangle({ size: [20, 12] })
1958
- * .subtract([rectangle({ size: [16, 8] })])
2008
+ * .subtract(rectangle({ size: [16, 8] }))
1959
2009
  * .offset(0.5)
1960
2010
  * .extrude({ height: 4 });
1961
2011
  * ```
@@ -1985,8 +2035,14 @@ export declare interface Section {
1985
2035
  transform(this: Section, placement: Transform2Input): Section;
1986
2036
  /** Copies canonical filled polygons for interchange; requires an active model execution. */
1987
2037
  toRegionData(this: Section): RegionData;
1988
- /** Native section difference; an empty cutter array preserves the source. */
1989
- subtract(this: Section, cutters: readonly Section[]): Section;
2038
+ /** Filled union with one or more sections; an empty operand array preserves this section. */
2039
+ union(this: Section, operands: Section | readonly Section[]): Section;
2040
+ /** Filled intersection with every supplied section; an empty operand array preserves this section. */
2041
+ intersect(this: Section, operands: Section | readonly Section[]): Section;
2042
+ /** Filled difference removing one cutter or the union of all supplied cutters.
2043
+ * An empty cutter array preserves this section.
2044
+ */
2045
+ subtract(this: Section, cutters: Section | readonly Section[]): Section;
1990
2046
  /**
1991
2047
  * Simplifies filled 2D contours using an explicit positive millimetre tolerance.
1992
2048
  *
@@ -2021,6 +2077,19 @@ export declare interface Section {
2021
2077
  * Sweeps this filled section using the selected frame policy and degree twist.
2022
2078
  */
2023
2079
  sweep(this: Section, path: Path3Input, options?: SweepOptions): Solid;
2080
+ /** Reads immutable bounds, filled area in mm², and component/contour/vertex counts.
2081
+ * Requires active synchronous model execution; repeated reads share scoped native results.
2082
+ */
2083
+ inspect(this: Section): SectionInspection;
2084
+ /** Checks whether this section contains no filled geometry during active synchronous model execution. */
2085
+ isEmpty(this: Section): boolean;
2086
+ /** Observes filled XY islands, retaining each island's holes; empty geometry gives [].
2087
+ * Requires active synchronous model execution. Selection order is unspecified.
2088
+ * Selections and recipes using them can only be evaluated in this session.
2089
+ */
2090
+ components(this: Section): readonly Section[];
2091
+ /** Reads a copied immutable named anchor during active synchronous model execution. */
2092
+ anchor(this: Section, name: string): Anchor3;
2024
2093
  }
2025
2094
 
2026
2095
  declare const sectionBrand: unique symbol;
@@ -2051,10 +2120,8 @@ export declare interface SectionInspection {
2051
2120
  readonly area: number;
2052
2121
  /** Number of extracted outer and hole contours. */
2053
2122
  readonly contourCount: number;
2054
- /** Inclusive maximum coordinates in millimetres. */
2055
- readonly max: Vector2Data;
2056
- /** Inclusive minimum coordinates in millimetres. */
2057
- readonly min: Vector2Data;
2123
+ /** Immutable axis-aligned XY bounds in millimetres. */
2124
+ readonly bounds: Bounds2Data;
2058
2125
  /** Number of disconnected filled section components. */
2059
2126
  readonly componentCount: number;
2060
2127
  /** Number of native section vertices. */
@@ -2103,7 +2170,7 @@ export declare interface SmoothEdgeTreatment {
2103
2170
  * @example Shape a body with a through bore
2104
2171
  * ```ts
2105
2172
  * const body = box({ size: [30, 20, 6] })
2106
- * .subtract([cylinder({ height: 8, radius: 3 })])
2173
+ * .subtract(cylinder({ height: 8, radius: 3 }))
2107
2174
  * .rotate([0, 0, 45]);
2108
2175
  * ```
2109
2176
  */
@@ -2134,12 +2201,19 @@ export declare interface Solid {
2134
2201
  mirror(this: Solid, normal: Vector3Input): Solid;
2135
2202
  /** Applies a reusable XYZ placement or canonical row-major matrix. */
2136
2203
  transform(this: Solid, placement: Transform3Input): Solid;
2137
- /** Copies manufacturing mesh buffers for interchange; requires an active model execution. */
2138
- toTriangleMesh(this: Solid): TriangleMesh;
2204
+ /** Copies indexed Float32 XYZ and Uint32 triangle buffers in millimetres for interchange.
2205
+ * Requires an active synchronous model execution; the returned TriangleMesh is caller-owned.
2206
+ */
2207
+ toMesh(this: Solid): TriangleMesh;
2208
+ /** Robust union with one or more solids; an empty operand array preserves this solid. */
2209
+ union(this: Solid, operands: Solid | readonly Solid[]): Solid;
2210
+ /** Robust intersection with every supplied solid; an empty operand array preserves this solid. */
2211
+ intersect(this: Solid, operands: Solid | readonly Solid[]): Solid;
2139
2212
  /**
2140
- * Robust difference; an empty cutter array preserves the source.
2213
+ * Robust difference removing one cutter or the union of all supplied cutters.
2214
+ * An empty cutter array preserves this solid.
2141
2215
  */
2142
- subtract(this: Solid, cutters: readonly Solid[]): Solid;
2216
+ subtract(this: Solid, cutters: Solid | readonly Solid[]): Solid;
2143
2217
  /**
2144
2218
  * Simplifies a solid using an explicit positive millimetre tolerance.
2145
2219
  *
@@ -2166,6 +2240,42 @@ export declare interface Solid {
2166
2240
  projectSection(this: Solid): Section;
2167
2241
  /** Takes a filled horizontal slice at Z millimetres. */
2168
2242
  sliceSection(this: Solid, z: number): Section;
2243
+ /** Reads immutable bounds, volume in mm³, surface area in mm², and material-component count.
2244
+ * Requires active synchronous model execution; repeated reads share scoped native results.
2245
+ */
2246
+ inspect(this: Solid): SolidInspection;
2247
+ /** Checks whether this solid contains no geometry during active synchronous model execution. */
2248
+ isEmpty(this: Solid): boolean;
2249
+ /** Observes disconnected material pieces, retaining each piece's enclosed cavities.
2250
+ * Requires active synchronous model execution. Empty geometry gives []; order is unspecified.
2251
+ * Selections and recipes using them can only be evaluated in this session.
2252
+ * Containment is bounded to 2,000,000 comparisons; this does not cut connected geometry.
2253
+ */
2254
+ components(this: Solid): readonly Solid[];
2255
+ /** Reads a copied immutable named anchor during active synchronous model execution. */
2256
+ anchor(this: Solid, name: string): Anchor3;
2257
+ /** Measures actual minimum separation in millimetres during active synchronous model execution.
2258
+ * Contact or overlapping material gives zero; empty geometry and cross-session selections reject.
2259
+ * The kernel manages its search range; results follow native numeric precision.
2260
+ */
2261
+ distance(this: Solid, other: Solid): number;
2262
+ /** Copies intersections along the finite directed origin-to-endpoint segment in millimetres.
2263
+ * Requires active synchronous model execution.
2264
+ */
2265
+ castSegment(
2266
+ this: Solid,
2267
+ origin: Vector3Input,
2268
+ endpoint: Vector3Input,
2269
+ ): readonly SolidSegmentHit[];
2270
+ /** Splits into [inside the cutter, outside the cutter]; the cutter itself is not returned.
2271
+ * Either result may be empty or contain multiple disconnected components.
2272
+ */
2273
+ split(this: Solid, cutter: Solid): readonly [Solid, Solid];
2274
+ /** Splits into [positive-normal side, negative side] with closed cut faces.
2275
+ * The nonzero normal is normalized; offset is its signed distance from the origin in millimetres.
2276
+ * Offset defaults to zero. Either result may be empty.
2277
+ */
2278
+ splitByPlane(this: Solid, plane: PlaneOptions): readonly [Solid, Solid];
2169
2279
  }
2170
2280
 
2171
2281
  declare const solidBrand: unique symbol;
@@ -2176,10 +2286,11 @@ declare const solidBrand: unique symbol;
2176
2286
  * @example Mesh import
2177
2287
  * ```ts
2178
2288
  * import { solidFromMesh } from "@metamesh/modeling";
2179
- * import { extrudeMesh, rectangleContour } from "@metamesh/modeling/geometry";
2289
+ * import * as mesh from "@metamesh/modeling/geometry/mesh";
2290
+ * import { rectangleContour } from "@metamesh/modeling/geometry";
2180
2291
  *
2181
- * const mesh = extrudeMesh(rectangleContour({ size: [20, 12] }), { height: 6 });
2182
- * solidFromMesh(mesh);
2292
+ * const plate = mesh.extrude(rectangleContour({ size: [20, 12] }), { height: 6 });
2293
+ * solidFromMesh(plate);
2183
2294
  * ```
2184
2295
  */
2185
2296
  export declare function solidFromMesh(
@@ -2193,10 +2304,8 @@ export declare function solidFromMesh(
2193
2304
  export declare interface SolidInspection {
2194
2305
  /** Whether this native solid contains no material. */
2195
2306
  readonly isEmpty: boolean;
2196
- /** Inclusive maximum coordinates in millimetres. */
2197
- readonly max: Vector3Data;
2198
- /** Inclusive minimum coordinates in millimetres. */
2199
- readonly min: Vector3Data;
2307
+ /** Immutable axis-aligned XYZ bounds in millimetres. */
2308
+ readonly bounds: Bounds3Data;
2200
2309
  /** Number of disconnected material components, each retaining enclosed cavities. */
2201
2310
  readonly componentCount: number;
2202
2311
  /** Enclosed native solid volume in cubic millimetres. */
@@ -2249,54 +2358,8 @@ export declare type SphereOptions = CircularPrimitiveOptions &
2249
2358
  }
2250
2359
  );
2251
2360
 
2252
- /**
2253
- * Splits a solid into [inside the cutter, outside the cutter].
2254
- *
2255
- * The first result is the intersection; the second is the subtraction. The cutter itself
2256
- * is not returned. Either result may be empty or contain multiple disconnected components.
2257
- *
2258
- * @example Keep the plug and the surrounding body
2259
- * ```ts
2260
- * const body = box({ size: [30, 20, 8] });
2261
- * const cutter = cylinder({ height: 10, diameter: 8 });
2262
- * const [plug, remainder] = split(body, cutter);
2263
- * // Move the plug beside the body to show both results.
2264
- * union([plug.translate([0, -20, 0]), remainder]);
2265
- * ```
2266
- */
2267
- export declare function split(
2268
- solid: Solid,
2269
- cutter: Solid,
2270
- ): readonly [Solid, Solid];
2271
-
2272
- /**
2273
- * Splits a solid into [positive-normal side, negative side] at a world-space plane.
2274
- *
2275
- * The nonzero normal is normalized; offset is the signed distance from the origin in
2276
- * millimetres, defaulting to zero. Both cut faces are closed. Select either tuple result
2277
- * to retain one side; either result may be empty.
2278
- *
2279
- * @example Separate two halves at X = 0
2280
- * ```ts
2281
- * const body = box({ size: [30, 20, 8] });
2282
- * const [right, left] = splitByPlane(body, { normal: [1, 0, 0] });
2283
- * // The gap is only for display; the cut itself removes no material.
2284
- * union([right.translate([4, 0, 0]), left.translate([-4, 0, 0])]);
2285
- * ```
2286
- *
2287
- * @example Keep only the positive half
2288
- * ```ts
2289
- * const [right] = splitByPlane(box({ size: [30, 20, 8] }), { normal: [1, 0, 0] });
2290
- * right;
2291
- * ```
2292
- */
2293
- export declare function splitByPlane(
2294
- solid: Solid,
2295
- plane: PlaneOptions,
2296
- ): readonly [Solid, Solid];
2297
-
2298
2361
  /** Square profile with equal crest and root widths. */
2299
- declare interface SquareThreadProfileSpec extends ThreadProfileBaseSpec {
2362
+ export declare interface SquareThreadProfileSpec extends ThreadProfileBaseSpec {
2300
2363
  /** Selects the square profile family. */
2301
2364
  readonly kind: "square";
2302
2365
  /**
@@ -2316,22 +2379,26 @@ declare interface SquareThreadProfileSpec extends ThreadProfileBaseSpec {
2316
2379
  */
2317
2380
  export declare function star(options: StarOptions): Section;
2318
2381
 
2319
- /**
2320
- * Alternating outer and inner vertices, centered on the XY origin.
2321
- */
2322
- export declare interface StarOptions extends PrimitiveAttachment {
2323
- /** Explicit sampling ceilings, bounded by the host policy. */
2324
- readonly limits?: Partial<GeometrySamplingLimits>;
2382
+ /** Alternating vertex radii and exact point count for a centered XY star. */
2383
+ export declare interface StarContourOptions {
2325
2384
  /** Positive outer vertex radius in millimetres. */
2326
2385
  readonly outerRadius: number;
2327
- /** Positive inner vertex radius, smaller than the outer radius. */
2386
+ /** Positive inner vertex radius in millimetres, smaller than the outer radius. */
2328
2387
  readonly innerRadius: number;
2329
- /** Integer outer point count from three through 50000. */
2388
+ /** Integer outer point count, at least three; output contains twice as many vertices. */
2330
2389
  readonly points: number;
2331
- /** Initial counterclockwise rotation in degrees; defaults to zero. */
2390
+ /** Counterclockwise rotation in degrees; defaults to zero with an outer vertex on +X. */
2332
2391
  readonly rotation?: number;
2392
+ /** Explicit sampling ceilings, bounded by the host policy during modeling. */
2393
+ readonly limits?: Partial<GeometrySamplingLimits>;
2333
2394
  }
2334
2395
 
2396
+ /**
2397
+ * Alternating outer and inner vertices, centered on the XY origin.
2398
+ */
2399
+ export declare interface StarOptions
2400
+ extends StarContourOptions, PrimitiveAttachment {}
2401
+
2335
2402
  /**
2336
2403
  * Creates a centered-width native Section along a sampled XY path.
2337
2404
  *
@@ -2421,6 +2488,8 @@ export declare function svgSection(
2421
2488
  * Bounded SVG document sampling. Center origin uses the final painted bounds.
2422
2489
  */
2423
2490
  export declare interface SvgSectionOptions {
2491
+ /** Fit painted bounds uniformly inside positioned XY millimetre bounds; adaptive resolution applies at the fitted size. */
2492
+ readonly fit?: Bounds2Input;
2424
2493
  /** Local allocation ceilings may only lower the configured engine policy. */
2425
2494
  readonly limits?: Partial<GeometrySamplingLimits>;
2426
2495
  /** Exact circular tessellation count overriding physical sampling. */
@@ -2432,8 +2501,8 @@ export declare interface SvgSectionOptions {
2432
2501
  }
2433
2502
 
2434
2503
  /**
2435
- * Sweeps explicit corresponding contours using the selected frame policy.
2436
- * Filled Sections use `section.sweep(path, options)`.
2504
+ * Sweeps a filled Section or explicit corresponding contours using the selected frame policy.
2505
+ * Use `section.sweep(path, options)` in fluent sequences, or this function for generic profile inputs.
2437
2506
  *
2438
2507
  * @example Sweep
2439
2508
  * ```ts
@@ -2447,7 +2516,7 @@ export declare interface SvgSectionOptions {
2447
2516
  * ```
2448
2517
  */
2449
2518
  export declare function sweep(
2450
- shape: CorrespondingProfile,
2519
+ shape: Section | CorrespondingProfile,
2451
2520
  path: Path3Input,
2452
2521
  options?: SweepOptions,
2453
2522
  ): Solid;
@@ -2527,17 +2596,11 @@ export declare interface TextSectionOptions {
2527
2596
  readonly resolution?: GeometryResolution;
2528
2597
  }
2529
2598
 
2530
- /** End bevel controls shared by threaded rods and cutters. */
2531
- declare interface ThreadBevelOptions {
2532
- /** Apply a 45-degree bevel at Z=0. */
2533
- readonly bevelBottom?: boolean;
2534
- /**
2535
- * Axial bevel extent in millimetres. Active blunt ends default to one sixth of the compensated
2536
- * male minor radius or female major radius; other ends default to the profile depth.
2537
- */
2538
- readonly bevelSize?: number;
2539
- /** Apply a 45-degree bevel at Z=length. */
2540
- readonly bevelTop?: boolean;
2599
+ /** 45-degree end bevels for compensated rods and cutters. */
2600
+ export declare interface ThreadBevelOptions {
2601
+ /** Bottom/top sizes in millimetres. Omitted disables both. Auto uses profile depth for standard/tapered ends,
2602
+ * or one sixth of the compensated male minor/female major radius for blunt ends. */
2603
+ readonly bevel?: Bevel;
2541
2604
  }
2542
2605
 
2543
2606
  /**
@@ -2554,25 +2617,20 @@ declare interface ThreadBevelOptions {
2554
2617
  */
2555
2618
  export declare function threadedNut(options: ThreadedNutOptions): Solid;
2556
2619
 
2557
- /** Nut-edge bevel selection. */
2558
- export declare type ThreadedNutBevel =
2559
- "automatic" | "both" | "inside" | "none" | "outside";
2560
-
2561
2620
  /**
2562
2621
  * Options for a compensated nut with an internal thread.
2563
2622
  */
2564
2623
  export declare interface ThreadedNutOptions extends Omit<
2565
2624
  InternalThreadCutterOptions,
2566
- "bevelBottom" | "bevelSize" | "bevelTop" | "length"
2625
+ "bevel" | "length"
2567
2626
  > {
2568
- /** Nut body bevel selection. Default: `automatic`. */
2569
- readonly bevel?: ThreadedNutBevel;
2627
+ /** Opening bevels in [bottom, top] order. Omitted or auto uses min(profile.depth, thickness/4); zero disables. */
2628
+ readonly innerBevel?: Bevel;
2629
+ /** Body bevels in [bottom, top] order. Omitted or auto uses min(profile.depth, thickness/4).
2630
+ * Use [0, "auto"] to keep the outside bottom flat without disabling its inner opening bevel. */
2631
+ readonly outerBevel?: Bevel;
2570
2632
  /** Optional physical policy for a round body, independent of the thread's matched facet grid. */
2571
2633
  readonly bodyResolution?: GeometryResolution;
2572
- /** 45-degree body chamfer extent. Default: `min(profile.depth, thickness/4)`. */
2573
- readonly chamferSize?: number;
2574
- /** Leave the bottom outside edge flat for build-plate adhesion. Default: `false`. */
2575
- readonly flushBuildPlateBottom?: boolean;
2576
2634
  /** Nut body shape. */
2577
2635
  readonly shape: ThreadedNutShape;
2578
2636
  /** Nut thickness along +Z in millimetres. */
@@ -2585,8 +2643,10 @@ export declare interface ThreadedNutOptions extends Omit<
2585
2643
  export declare interface ThreadedNutPreflight {
2586
2644
  /** Polygon segment count used by the nut body. */
2587
2645
  readonly bodySegments: number;
2588
- /** Shared 45-degree chamfer size applied to the selected body and cutter edges. */
2589
- readonly chamferSize: number;
2646
+ /** Resolved opening bevel sizes in millimetres, [bottom, top]. */
2647
+ readonly innerBevel: readonly [bottom: number, top: number];
2648
+ /** Resolved body bevel sizes in millimetres, [bottom, top]. */
2649
+ readonly outerBevel: readonly [bottom: number, top: number];
2590
2650
  /** Maximum compensated cutter radius at either requested face. */
2591
2651
  readonly cutterFaceRadius: number;
2592
2652
  /** Minimum nut-body inradius across the requested top and bottom faces. */
@@ -2594,7 +2654,7 @@ export declare interface ThreadedNutPreflight {
2594
2654
  /** Smallest radial wall left between the body and cutter at either requested face. */
2595
2655
  readonly minimumFaceWall: number;
2596
2656
  /** Conservative allocation estimates for the extended cutter; excludes the body and Boolean result. */
2597
- readonly thread: HelicalThreadSolidMeshPreflight;
2657
+ readonly thread: ThreadSolidPreflight;
2598
2658
  /** Start-aligned circular facet count used by the compensated thread cutter. */
2599
2659
  readonly threadCircularSegments: number;
2600
2660
  }
@@ -2622,9 +2682,7 @@ export declare function threadedRod(options: ThreadedRodOptions): Solid;
2622
2682
  * Options for a compensated external threaded rod along +Z.
2623
2683
  */
2624
2684
  export declare interface ThreadedRodOptions
2625
- extends
2626
- Omit<HelicalThreadRidgeMeshOptions, "majorDiameter">,
2627
- ThreadBevelOptions {
2685
+ extends Omit<ThreadRidgeOptions, "majorDiameter">, ThreadBevelOptions {
2628
2686
  /** Printable fit or caller-calibrated allowances. Default: `normal`. */
2629
2687
  readonly fit?: PrintableThreadFit | PrintableThreadFitPolicy;
2630
2688
  /** Nominal major diameter before male compensation. */
@@ -2701,7 +2759,7 @@ export declare interface ThreadProfile {
2701
2759
  }
2702
2760
 
2703
2761
  /** Fields shared by all thread profile specifications. */
2704
- declare interface ThreadProfileBaseSpec {
2762
+ export declare interface ThreadProfileBaseSpec {
2705
2763
  /** Adjacent axial thread spacing in millimetres. */
2706
2764
  readonly pitch: number;
2707
2765
  /** Optional numerical tolerance overrides. */
@@ -2711,7 +2769,7 @@ declare interface ThreadProfileBaseSpec {
2711
2769
  /**
2712
2770
  * Supported built-in and caller-defined thread profiles.
2713
2771
  */
2714
- declare type ThreadProfileSpec =
2772
+ export declare type ThreadProfileSpec =
2715
2773
  | AcmeThreadProfileSpec
2716
2774
  | ButtressThreadProfileSpec
2717
2775
  | CustomThreadProfileSpec
@@ -2722,8 +2780,44 @@ declare type ThreadProfileSpec =
2722
2780
  /** Helical ridge mesh construction. */
2723
2781
  export declare function threadRidge(options: ThreadRidgeOptions): Solid;
2724
2782
 
2725
- /** Parameters for a helical ridge before solid construction. */
2726
- export declare type ThreadRidgeOptions = HelicalThreadRidgeMeshOptions;
2783
+ /** Runtime-neutral options for the dedicated helical ridge mesher. */
2784
+ export declare interface ThreadRidgeOptions {
2785
+ /**
2786
+ * Optional bottom/top ridge-end treatments. Standalone ridges honor the requested boundaries;
2787
+ * BOSL2-style non-cut lead-in scaling is available on complete thread solids.
2788
+ */
2789
+ readonly ends?: ThreadEndTreatmentOptions;
2790
+ /** Helix direction. Default: `right`. */
2791
+ readonly handedness?: ThreadHandedness;
2792
+ /** Total threaded axial length in millimetres. */
2793
+ readonly length: number;
2794
+ /** Explicit output and circular allocation ceilings. */
2795
+ readonly limits?: Partial<ModelingLimits>;
2796
+ /** Nominal major diameter before any caller-owned fit compensation. */
2797
+ readonly majorDiameter: number;
2798
+ /** Angular offset of the first start in degrees. Default: `0`. */
2799
+ readonly phase?: number;
2800
+ /** Validated periodic profile repeated around the shaft. */
2801
+ readonly profile: ThreadProfile;
2802
+ /** Optional circular-resolution policy. */
2803
+ readonly resolution?: GeometryResolution;
2804
+ /** Number of evenly phased starts. Default: `1`. */
2805
+ readonly starts?: number;
2806
+ /** Optional numerical tolerance overrides. */
2807
+ readonly tolerance?: GeometryToleranceOptions;
2808
+ }
2809
+
2810
+ /** Selected sampling counts and conservative allocation estimates, before thread mesh construction. */
2811
+ export declare interface ThreadSolidPreflight {
2812
+ /** Uniform axial intervals required only by a requested physical segment-length limit. */
2813
+ readonly axialIntervals: number;
2814
+ /** Start-aligned full-circle segment count used by the surface mesh. */
2815
+ readonly circularSegments: number;
2816
+ /** Conservative surface-row count across profile breaks, ends, and bevel stations. */
2817
+ readonly estimatedRows: number;
2818
+ /** Conservative triangle count used by the selected output allocation policy. */
2819
+ readonly estimatedTriangles: number;
2820
+ }
2727
2821
 
2728
2822
  /**
2729
2823
  * Torus around +Z.
@@ -2891,7 +2985,7 @@ export declare type Transform3Data = readonly [
2891
2985
  export declare type Transform3Input = Transform3 | Transform3Data;
2892
2986
 
2893
2987
  /** Trapezoidal thread profile with a configurable included angle. */
2894
- declare interface TrapezoidalThreadProfileSpec extends ThreadProfileBaseSpec {
2988
+ export declare interface TrapezoidalThreadProfileSpec extends ThreadProfileBaseSpec {
2895
2989
  /** Selects the trapezoidal profile family. */
2896
2990
  readonly kind: "trapezoidal";
2897
2991
  /**
@@ -2907,13 +3001,11 @@ declare interface TrapezoidalThreadProfileSpec extends ThreadProfileBaseSpec {
2907
3001
  readonly includedAngle?: number;
2908
3002
  }
2909
3003
 
2910
- /**
2911
- * A topology-preserving indexed triangle mesh with XYZ vertex positions.
2912
- */
3004
+ /** A topology-preserving indexed triangle mesh with mutable owned XYZ buffers. */
2913
3005
  export declare interface TriangleMesh {
2914
3006
  /** Three unsigned vertex indices per triangle. */
2915
3007
  readonly indices: Uint32Array;
2916
- /** Flat XYZ coordinates, three finite values per vertex. */
3008
+ /** Flat XYZ coordinates in millimetres. */
2917
3009
  readonly positions: Float32Array;
2918
3010
  }
2919
3011
 
@@ -2921,8 +3013,9 @@ export declare interface TriangleMesh {
2921
3013
  * Measurements and optional edge-connected topology from one validated mesh traversal.
2922
3014
  */
2923
3015
  export declare interface TriangleMeshAnalysis extends TriangleMeshMeasurements {
2924
- /** Number of referenced edge-connected boundary shells when `includeTopology` is requested; cavities count separately. */
2925
- readonly connectedComponentCount?: number;
3016
+ /** Number of surface shells connected by shared indexed edges when includeTopology is requested.
3017
+ * Cavities count separately; shells may be open unless requireClosed is enabled. Coordinates are not welded. */
3018
+ readonly shellCount?: number;
2926
3019
  /** Number of distinct indexed undirected edges when `includeTopology` is requested. */
2927
3020
  readonly edgeCount?: number;
2928
3021
  }
@@ -2943,10 +3036,18 @@ export declare interface TriangleMeshMeasurements {
2943
3036
  readonly vertexCount: number;
2944
3037
  }
2945
3038
 
3039
+ /** Mesh measurements with the indexed surface-shell and edge counts requested by includeTopology. */
3040
+ export declare interface TriangleMeshTopologyAnalysis extends TriangleMeshAnalysis {
3041
+ /** Number of surface shells connected by shared indexed edges; cavities count separately. */
3042
+ readonly shellCount: number;
3043
+ /** Number of distinct indexed undirected edges. */
3044
+ readonly edgeCount: number;
3045
+ }
3046
+
2946
3047
  /**
2947
3048
  * ISO/UTS-like 60-degree truncated triangular profile.
2948
3049
  */
2949
- declare interface TriangularThreadProfileSpec extends ThreadProfileBaseSpec {
3050
+ export declare interface TriangularThreadProfileSpec extends ThreadProfileBaseSpec {
2950
3051
  /** Selects the 60-degree triangular profile family. */
2951
3052
  readonly kind: "triangular";
2952
3053
  /**
@@ -2974,23 +3075,44 @@ export declare function tube(options: TubeOptions): Solid;
2974
3075
  /**
2975
3076
  * Dimensions, placement, and tessellation for a hollow Z-axis tube.
2976
3077
  */
2977
- export declare interface TubeOptions
2978
- extends CircularPrimitiveOptions, PrimitiveAttachment {
2979
- /**
2980
- * Centers the tube on the Z origin when `true`; otherwise its bottom is at `Z = 0`.
2981
- * @defaultValue `true`
2982
- */
2983
- readonly center?: boolean;
2984
- /** Total height along Z in millimetres. */
2985
- readonly height: number;
2986
- /** Positive inner radius in millimetres. */
2987
- readonly innerRadius: number;
2988
- /** Outer radius in millimetres; greater than {@link TubeOptions.innerRadius}. */
2989
- readonly outerRadius: number;
2990
- }
3078
+ export declare type TubeOptions = CircularPrimitiveOptions &
3079
+ PrimitiveAttachment & {
3080
+ /**
3081
+ * Centers the tube on the Z origin when `true`; otherwise its bottom is at `Z = 0`.
3082
+ * @defaultValue `true`
3083
+ */
3084
+ readonly center?: boolean;
3085
+ /** Total height along Z in millimetres. */
3086
+ readonly height: number;
3087
+ /** Inner nominal dimension meets polygon vertices or faces; defaults to vertex. */
3088
+ readonly innerSizing?: RadialSizing;
3089
+ /** Outer nominal dimension meets polygon vertices or faces; defaults to vertex. */
3090
+ readonly outerSizing?: RadialSizing;
3091
+ } & (
3092
+ | {
3093
+ /** Positive nominal inner radius in millimetres. */
3094
+ readonly innerRadius: number;
3095
+ /** Nominal outer radius in millimetres, greater than innerRadius. */
3096
+ readonly outerRadius: number;
3097
+ /** Diameter dimensions cannot be combined with radius dimensions. */
3098
+ readonly innerDiameter?: never;
3099
+ /** Diameter dimensions cannot be combined with radius dimensions. */
3100
+ readonly outerDiameter?: never;
3101
+ }
3102
+ | {
3103
+ /** Positive nominal inner diameter in millimetres. */
3104
+ readonly innerDiameter: number;
3105
+ /** Nominal outer diameter in millimetres, greater than innerDiameter. */
3106
+ readonly outerDiameter: number;
3107
+ /** Radius dimensions cannot be combined with diameter dimensions. */
3108
+ readonly innerRadius?: never;
3109
+ /** Radius dimensions cannot be combined with diameter dimensions. */
3110
+ readonly outerRadius?: never;
3111
+ }
3112
+ );
2991
3113
 
2992
3114
  /**
2993
- * Robust union.
3115
+ * Robust union of one or more shapes; empty input rejects during declaration.
2994
3116
  *
2995
3117
  * @example Union
2996
3118
  * ```ts