@metamesh/modeling 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (666) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +26 -5
  3. package/dist/api/geometry.d.ts +99 -44
  4. package/dist/api/index.d.ts +167 -20
  5. package/dist/docs/guides/concepts.md +4 -1
  6. package/dist/docs/guides/recipes.md +33 -6
  7. package/dist/docs/manifest.json +191 -56
  8. package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
  9. package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
  10. package/dist/docs/reference/engine/GenerationOptions.md +1 -1
  11. package/dist/docs/reference/engine/GeometryResource.md +1 -1
  12. package/dist/docs/reference/engine/ModelDependencies.md +1 -1
  13. package/dist/docs/reference/engine/ModelEngine.md +1 -1
  14. package/dist/docs/reference/engine/ModelEngineOptions.md +1 -1
  15. package/dist/docs/reference/engine/ModelSession.md +1 -1
  16. package/dist/docs/reference/engine/ModelSnapshot.md +1 -1
  17. package/dist/docs/reference/engine/SessionOptions.md +1 -1
  18. package/dist/docs/reference/engine/SnapshotPart.md +1 -1
  19. package/dist/docs/reference/engine/categories/host-lifecycle.md +1 -1
  20. package/dist/docs/reference/engine/createModelEngine.md +1 -1
  21. package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
  22. package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
  23. package/dist/docs/reference/engine/validateModel.md +1 -1
  24. package/dist/docs/reference/engine.md +1 -1
  25. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
  26. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +1 -1
  27. package/dist/docs/reference/geometry/Anchor3-type.md +1 -1
  28. package/dist/docs/reference/geometry/ArcCurve2.md +1 -1
  29. package/dist/docs/reference/geometry/ArcCurve3.md +1 -1
  30. package/dist/docs/reference/geometry/AttachOptions.md +1 -1
  31. package/dist/docs/reference/geometry/AxisAngleRotation3.md +1 -1
  32. package/dist/docs/reference/geometry/Bounds2-type.md +1 -1
  33. package/dist/docs/reference/geometry/Bounds2Data.md +1 -1
  34. package/dist/docs/reference/geometry/Bounds2Input.md +1 -1
  35. package/dist/docs/reference/geometry/Bounds2Options.md +72 -0
  36. package/dist/docs/reference/geometry/Bounds3-type.md +1 -1
  37. package/dist/docs/reference/geometry/Bounds3Data.md +1 -1
  38. package/dist/docs/reference/geometry/Bounds3Input.md +1 -1
  39. package/dist/docs/reference/geometry/Bounds3Options.md +72 -0
  40. package/dist/docs/reference/geometry/BoundsFit2.md +1 -1
  41. package/dist/docs/reference/geometry/BoundsFit3.md +1 -1
  42. package/dist/docs/reference/geometry/BoundsFitOptions.md +1 -1
  43. package/dist/docs/reference/geometry/BoxAnchorFace.md +1 -1
  44. package/dist/docs/reference/geometry/BoxAnchorOptions.md +1 -1
  45. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  46. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  47. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  48. package/dist/docs/reference/geometry/BoxOptions.md +1 -1
  49. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +1 -1
  50. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +1 -1
  51. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  52. package/dist/docs/reference/geometry/CircleContourOptions.md +1 -1
  53. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
  54. package/dist/docs/reference/geometry/CircularResolutionOptions.md +1 -1
  55. package/dist/docs/reference/geometry/CircularSampling.md +41 -0
  56. package/dist/docs/reference/geometry/CircularSamplingOptions.md +14 -0
  57. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +1 -1
  58. package/dist/docs/reference/geometry/ClearanceHoleFit.md +1 -1
  59. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +1 -1
  60. package/dist/docs/reference/geometry/Contour.md +1 -1
  61. package/dist/docs/reference/geometry/ContourCurve.md +1 -1
  62. package/dist/docs/reference/geometry/ContourPoint.md +1 -1
  63. package/dist/docs/reference/geometry/ContourSegment.md +1 -1
  64. package/dist/docs/reference/geometry/CorrespondingComponent.md +1 -1
  65. package/dist/docs/reference/geometry/CorrespondingContour.md +1 -1
  66. package/dist/docs/reference/geometry/CorrespondingProfile.md +1 -1
  67. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +1 -1
  68. package/dist/docs/reference/geometry/CubicBezierCurve2.md +1 -1
  69. package/dist/docs/reference/geometry/CubicBezierCurve3.md +1 -1
  70. package/dist/docs/reference/geometry/Curve2.md +1 -1
  71. package/dist/docs/reference/geometry/Curve3.md +1 -1
  72. package/dist/docs/reference/geometry/CurveSamplingOptions.md +1 -1
  73. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +1 -1
  74. package/dist/docs/reference/geometry/CylinderAnchorFace.md +1 -1
  75. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +1 -1
  76. package/dist/docs/reference/geometry/CylinderOptions.md +1 -1
  77. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +1 -1
  78. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +1 -1
  79. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +1 -1
  80. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +1 -1
  81. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +1 -1
  82. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +1 -1
  83. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +1 -1
  84. package/dist/docs/reference/geometry/CylindricalGearSpec.md +1 -1
  85. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  86. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  87. package/dist/docs/reference/geometry/EllipseContourOptions.md +1 -1
  88. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  89. package/dist/docs/reference/geometry/ExtrudeOptions.md +1 -1
  90. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +1 -1
  91. package/dist/docs/reference/geometry/FittedTextLayout.md +1 -1
  92. package/dist/docs/reference/geometry/Frame3.md +1 -1
  93. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  94. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  95. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  96. package/dist/docs/reference/geometry/GeometryResolution.md +1 -1
  97. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +1 -1
  98. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  99. package/dist/docs/reference/geometry/GridPatternOptions.md +1 -1
  100. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
  101. package/dist/docs/reference/geometry/HeightfieldOptions.md +1 -1
  102. package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
  103. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +1 -1
  104. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +1 -1
  105. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +1 -1
  106. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +1 -1
  107. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +1 -1
  108. package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +1 -1
  109. package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +1 -1
  110. package/dist/docs/reference/geometry/KnuckleHingeInterval.md +1 -1
  111. package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +1 -1
  112. package/dist/docs/reference/geometry/KnuckleHingeSpec.md +1 -1
  113. package/dist/docs/reference/geometry/LineCurve2.md +1 -1
  114. package/dist/docs/reference/geometry/LineCurve3.md +1 -1
  115. package/dist/docs/reference/geometry/LinearPatternOptions.md +1 -1
  116. package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
  117. package/dist/docs/reference/geometry/LoftMeshStation.md +1 -1
  118. package/dist/docs/reference/geometry/LoftOptions.md +1 -1
  119. package/dist/docs/reference/geometry/LoftPlacement.md +1 -1
  120. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +1 -1
  121. package/dist/docs/reference/geometry/MatchProfilesOptions.md +1 -1
  122. package/dist/docs/reference/geometry/MetricFastenerSize.md +1 -1
  123. package/dist/docs/reference/geometry/MetricFastenerStandard.md +1 -1
  124. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +1 -1
  125. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +1 -1
  126. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  127. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
  128. package/dist/docs/reference/geometry/Path2-type.md +1 -1
  129. package/dist/docs/reference/geometry/Path2Data.md +1 -1
  130. package/dist/docs/reference/geometry/Path2Input.md +1 -1
  131. package/dist/docs/reference/geometry/Path3-type.md +1 -1
  132. package/dist/docs/reference/geometry/Path3Data.md +1 -1
  133. package/dist/docs/reference/geometry/Path3Input.md +1 -1
  134. package/dist/docs/reference/geometry/PathFrame.md +1 -1
  135. package/dist/docs/reference/geometry/PathLocation.md +1 -1
  136. package/dist/docs/reference/geometry/PathNormalGuide.md +1 -1
  137. package/dist/docs/reference/geometry/PathOptions.md +1 -1
  138. package/dist/docs/reference/geometry/PathPatternOptions.md +1 -1
  139. package/dist/docs/reference/geometry/PathPlacement.md +1 -1
  140. package/dist/docs/reference/geometry/PathResamplingOptions.md +1 -1
  141. package/dist/docs/reference/geometry/Pivot2Options.md +1 -1
  142. package/dist/docs/reference/geometry/Pivot3Options.md +1 -1
  143. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +1 -1
  144. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +1 -1
  145. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +1 -1
  146. package/dist/docs/reference/geometry/PlanarPatchQuality.md +1 -1
  147. package/dist/docs/reference/geometry/PolygonData.md +1 -1
  148. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +1 -1
  149. package/dist/docs/reference/geometry/PrimitiveAttachment.md +1 -1
  150. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +1 -1
  151. package/dist/docs/reference/geometry/PrintableThreadFit.md +1 -1
  152. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +1 -1
  153. package/dist/docs/reference/geometry/Profile.md +1 -1
  154. package/dist/docs/reference/geometry/ProfileComponent2.md +1 -1
  155. package/dist/docs/reference/geometry/ProfileContour2.md +1 -1
  156. package/dist/docs/reference/geometry/ProfileSpan2.md +1 -1
  157. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +1 -1
  158. package/dist/docs/reference/geometry/RackPitchDimensions.md +1 -1
  159. package/dist/docs/reference/geometry/RackPitchSpec.md +1 -1
  160. package/dist/docs/reference/geometry/RadialPatternOptions.md +1 -1
  161. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  162. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  163. package/dist/docs/reference/geometry/RectangleContourOptions.md +1 -1
  164. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +1 -1
  165. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +1 -1
  166. package/dist/docs/reference/geometry/RectangleProfileOptions.md +1 -1
  167. package/dist/docs/reference/geometry/RegionData.md +1 -1
  168. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +1 -1
  169. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  170. package/dist/docs/reference/geometry/RevolveOptions.md +1 -1
  171. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  172. package/dist/docs/reference/geometry/RowLayoutOptions.md +1 -1
  173. package/dist/docs/reference/geometry/SampleContourOptions.md +1 -1
  174. package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
  175. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +1 -1
  176. package/dist/docs/reference/geometry/SampledCurve2.md +1 -1
  177. package/dist/docs/reference/geometry/SampledCurve3.md +1 -1
  178. package/dist/docs/reference/geometry/SampledThreadHelices.md +1 -1
  179. package/dist/docs/reference/geometry/SideProfileCurve.md +1 -1
  180. package/dist/docs/reference/geometry/SideProfilePoint.md +1 -1
  181. package/dist/docs/reference/geometry/SideProfileSegment.md +1 -1
  182. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  183. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +1 -1
  184. package/dist/docs/reference/geometry/SphereOptions.md +1 -1
  185. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
  186. package/dist/docs/reference/geometry/StrokeCap.md +1 -1
  187. package/dist/docs/reference/geometry/StrokeJoin.md +1 -1
  188. package/dist/docs/reference/geometry/StrokeOptions.md +1 -1
  189. package/dist/docs/reference/geometry/SvgImportOptions.md +16 -1
  190. package/dist/docs/reference/geometry/SvgRegionPreflight.md +16 -1
  191. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +1 -1
  192. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +1 -1
  193. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +1 -1
  194. package/dist/docs/reference/geometry/SweepOptions.md +1 -1
  195. package/dist/docs/reference/geometry/SweepOrientation.md +1 -1
  196. package/dist/docs/reference/geometry/ThreadBevelOptions.md +1 -1
  197. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +1 -1
  198. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +1 -1
  199. package/dist/docs/reference/geometry/ThreadEndStyle.md +1 -1
  200. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +1 -1
  201. package/dist/docs/reference/geometry/ThreadHandedness.md +1 -1
  202. package/dist/docs/reference/geometry/ThreadHelixOptions.md +1 -1
  203. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
  204. package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
  205. package/dist/docs/reference/geometry/ThreadProfile-type.md +1 -1
  206. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
  207. package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
  208. package/dist/docs/reference/geometry/ThreadRole.md +1 -1
  209. package/dist/docs/reference/geometry/ThreadedNutBevel.md +1 -1
  210. package/dist/docs/reference/geometry/ThreadedNutOptions.md +1 -1
  211. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +1 -1
  212. package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
  213. package/dist/docs/reference/geometry/ThreadedRodOptions.md +1 -1
  214. package/dist/docs/reference/geometry/TorusOptions.md +1 -1
  215. package/dist/docs/reference/geometry/Transform2-type.md +1 -1
  216. package/dist/docs/reference/geometry/Transform2Data.md +1 -1
  217. package/dist/docs/reference/geometry/Transform2Input.md +1 -1
  218. package/dist/docs/reference/geometry/Transform3-type.md +1 -1
  219. package/dist/docs/reference/geometry/Transform3Data.md +1 -1
  220. package/dist/docs/reference/geometry/Transform3Input.md +1 -1
  221. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +1 -1
  222. package/dist/docs/reference/geometry/TriangleMesh.md +1 -1
  223. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +1 -1
  224. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +1 -1
  225. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
  226. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +1 -1
  227. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
  228. package/dist/docs/reference/geometry/TriangleMeshSignature.md +1 -1
  229. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +1 -1
  230. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
  231. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +1 -1
  232. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +1 -1
  233. package/dist/docs/reference/geometry/TubeOptions.md +1 -1
  234. package/dist/docs/reference/geometry/Vector2-type.md +1 -1
  235. package/dist/docs/reference/geometry/Vector2Data.md +1 -1
  236. package/dist/docs/reference/geometry/Vector2Input.md +1 -1
  237. package/dist/docs/reference/geometry/Vector3-type.md +1 -1
  238. package/dist/docs/reference/geometry/Vector3Data.md +1 -1
  239. package/dist/docs/reference/geometry/Vector3Input.md +1 -1
  240. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +1 -1
  241. package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
  242. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +3 -3
  243. package/dist/docs/reference/geometry/VectorTextMetrics.md +1 -1
  244. package/dist/docs/reference/geometry/VectorTextOptions.md +1 -1
  245. package/dist/docs/reference/geometry/add2.md +1 -1
  246. package/dist/docs/reference/geometry/add3.md +1 -1
  247. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +1 -1
  248. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +1 -1
  249. package/dist/docs/reference/geometry/anchor3.md +1 -1
  250. package/dist/docs/reference/geometry/anchorFrame3.md +1 -1
  251. package/dist/docs/reference/geometry/applyTransformDirection3.md +1 -1
  252. package/dist/docs/reference/geometry/applyTransformPoint3.md +1 -1
  253. package/dist/docs/reference/geometry/attachmentTransform3.md +1 -1
  254. package/dist/docs/reference/geometry/bounds2.md +7 -6
  255. package/dist/docs/reference/geometry/bounds3.md +7 -6
  256. package/dist/docs/reference/geometry/boundsCenter.md +1 -1
  257. package/dist/docs/reference/geometry/boundsSize.md +1 -1
  258. package/dist/docs/reference/geometry/boxAnchor3.md +1 -1
  259. package/dist/docs/reference/geometry/categories/bounds-layout.md +7 -8
  260. package/dist/docs/reference/geometry/categories/curves-paths.md +1 -1
  261. package/dist/docs/reference/geometry/categories/mechanical.md +1 -1
  262. package/dist/docs/reference/geometry/categories/meshes.md +1 -1
  263. package/dist/docs/reference/geometry/categories/pattern-placement.md +1 -1
  264. package/dist/docs/reference/geometry/categories/primitive-options.md +1 -1
  265. package/dist/docs/reference/geometry/categories/profiles-regions.md +1 -1
  266. package/dist/docs/reference/geometry/categories/resolution-errors.md +5 -2
  267. package/dist/docs/reference/geometry/categories/transforms-math.md +1 -1
  268. package/dist/docs/reference/geometry/categories/vector-import.md +1 -1
  269. package/dist/docs/reference/geometry/circleContour.md +1 -1
  270. package/dist/docs/reference/geometry/closeToAxis.md +1 -1
  271. package/dist/docs/reference/geometry/compensateThreadDiameters.md +1 -1
  272. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +1 -1
  273. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +1 -1
  274. package/dist/docs/reference/geometry/composeTransform3.md +1 -1
  275. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +1 -1
  276. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +1 -1
  277. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +1 -1
  278. package/dist/docs/reference/geometry/computeTriangleMeshSignature.md +1 -1
  279. package/dist/docs/reference/geometry/contourContainsPoint.md +1 -1
  280. package/dist/docs/reference/geometry/cross2.md +1 -1
  281. package/dist/docs/reference/geometry/cross3.md +1 -1
  282. package/dist/docs/reference/geometry/cylinderAnchor3.md +1 -1
  283. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +1 -1
  284. package/dist/docs/reference/geometry/distance2.md +1 -1
  285. package/dist/docs/reference/geometry/distance3.md +1 -1
  286. package/dist/docs/reference/geometry/distributeAlongPath.md +1 -1
  287. package/dist/docs/reference/geometry/dot2.md +1 -1
  288. package/dist/docs/reference/geometry/dot3.md +1 -1
  289. package/dist/docs/reference/geometry/ellipseContour.md +1 -1
  290. package/dist/docs/reference/geometry/eulerTransform3.md +1 -1
  291. package/dist/docs/reference/geometry/extrudeMesh.md +1 -1
  292. package/dist/docs/reference/geometry/fitBounds.md +1 -1
  293. package/dist/docs/reference/geometry/fitTextLayout.md +1 -1
  294. package/dist/docs/reference/geometry/frameTransform3.md +1 -1
  295. package/dist/docs/reference/geometry/getMetricClearanceHoleDiameter.md +1 -1
  296. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
  297. package/dist/docs/reference/geometry/gridPatternTransforms.md +1 -1
  298. package/dist/docs/reference/geometry/heightfieldMesh.md +1 -1
  299. package/dist/docs/reference/geometry/helicalThreadRidgeMesh.md +1 -1
  300. package/dist/docs/reference/geometry/helicalThreadSolidMesh.md +1 -1
  301. package/dist/docs/reference/geometry/inverseTransform3.md +1 -1
  302. package/dist/docs/reference/geometry/isGeometryError.md +1 -1
  303. package/dist/docs/reference/geometry/joinTriangleMeshes.md +1 -1
  304. package/dist/docs/reference/geometry/layoutRow.md +1 -1
  305. package/dist/docs/reference/geometry/length2.md +1 -1
  306. package/dist/docs/reference/geometry/length3.md +1 -1
  307. package/dist/docs/reference/geometry/lerp2.md +1 -1
  308. package/dist/docs/reference/geometry/lerp3.md +1 -1
  309. package/dist/docs/reference/geometry/linearPatternTransforms.md +1 -1
  310. package/dist/docs/reference/geometry/loftMesh.md +1 -1
  311. package/dist/docs/reference/geometry/matchProfiles.md +1 -1
  312. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +1 -1
  313. package/dist/docs/reference/geometry/meshBounds.md +1 -1
  314. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +1 -1
  315. package/dist/docs/reference/geometry/normalize2.md +1 -1
  316. package/dist/docs/reference/geometry/normalize3.md +1 -1
  317. package/dist/docs/reference/geometry/normalizeContour.md +1 -1
  318. package/dist/docs/reference/geometry/normalizePolygon.md +1 -1
  319. package/dist/docs/reference/geometry/normalizeRegion.md +1 -1
  320. package/dist/docs/reference/geometry/optimizePlanarPatches.md +1 -1
  321. package/dist/docs/reference/geometry/path2.md +1 -1
  322. package/dist/docs/reference/geometry/path3.md +1 -1
  323. package/dist/docs/reference/geometry/pathPatternTransforms.md +1 -1
  324. package/dist/docs/reference/geometry/preflightHeightfield.md +1 -1
  325. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +1 -1
  326. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +1 -1
  327. package/dist/docs/reference/geometry/preflightSvgRegion.md +12 -3
  328. package/dist/docs/reference/geometry/preflightThreadedNut.md +1 -1
  329. package/dist/docs/reference/geometry/preflightThreadedRod.md +1 -1
  330. package/dist/docs/reference/geometry/projectOntoPlane3.md +1 -1
  331. package/dist/docs/reference/geometry/radialPatternTransforms.md +1 -1
  332. package/dist/docs/reference/geometry/rectangleContour.md +1 -1
  333. package/dist/docs/reference/geometry/rectangleProfile.md +1 -1
  334. package/dist/docs/reference/geometry/regionArea.md +1 -1
  335. package/dist/docs/reference/geometry/regionBounds.md +1 -1
  336. package/dist/docs/reference/geometry/regularPolygonContour.md +1 -1
  337. package/dist/docs/reference/geometry/resamplePolyline2.md +1 -1
  338. package/dist/docs/reference/geometry/resamplePolyline3.md +1 -1
  339. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +1 -1
  340. package/dist/docs/reference/geometry/resolveArcSegments.md +1 -1
  341. package/dist/docs/reference/geometry/resolveCircularSampling.md +40 -0
  342. package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
  343. package/dist/docs/reference/geometry/resolveCylindricalGear.md +1 -1
  344. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +1 -1
  345. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +1 -1
  346. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
  347. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  348. package/dist/docs/reference/geometry/resolveKnuckleHinge.md +1 -1
  349. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +1 -1
  350. package/dist/docs/reference/geometry/resolveRackPitch.md +1 -1
  351. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +1 -1
  352. package/dist/docs/reference/geometry/reverseTriangleMesh.md +1 -1
  353. package/dist/docs/reference/geometry/revolveMesh.md +1 -1
  354. package/dist/docs/reference/geometry/rotate2.md +1 -1
  355. package/dist/docs/reference/geometry/rotationTransform3.md +1 -1
  356. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +1 -1
  357. package/dist/docs/reference/geometry/sampleContour.md +1 -1
  358. package/dist/docs/reference/geometry/sampleCurve2.md +1 -1
  359. package/dist/docs/reference/geometry/sampleCurve3.md +1 -1
  360. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
  361. package/dist/docs/reference/geometry/sampleHelix.md +1 -1
  362. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
  363. package/dist/docs/reference/geometry/sampleRackToothPath.md +1 -1
  364. package/dist/docs/reference/geometry/sampleSideProfile.md +1 -1
  365. package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
  366. package/dist/docs/reference/geometry/sampleThreadHelices.md +1 -1
  367. package/dist/docs/reference/geometry/scale2.md +1 -1
  368. package/dist/docs/reference/geometry/scale3.md +1 -1
  369. package/dist/docs/reference/geometry/scaleTransform3.md +1 -1
  370. package/dist/docs/reference/geometry/signedContourArea.md +1 -1
  371. package/dist/docs/reference/geometry/starContour.md +1 -1
  372. package/dist/docs/reference/geometry/strokeRegionData.md +1 -1
  373. package/dist/docs/reference/geometry/subtract2.md +1 -1
  374. package/dist/docs/reference/geometry/subtract3.md +1 -1
  375. package/dist/docs/reference/geometry/sweepMesh.md +1 -1
  376. package/dist/docs/reference/geometry/threadProfile.md +1 -1
  377. package/dist/docs/reference/geometry/transform2.md +1 -1
  378. package/dist/docs/reference/geometry/transform3.md +1 -1
  379. package/dist/docs/reference/geometry/transformDeterminant3.md +1 -1
  380. package/dist/docs/reference/geometry/transformRegionData.md +1 -1
  381. package/dist/docs/reference/geometry/transformTriangleMesh.md +1 -1
  382. package/dist/docs/reference/geometry/translationTransform3.md +1 -1
  383. package/dist/docs/reference/geometry/triangulateContour.md +1 -1
  384. package/dist/docs/reference/geometry/validateSolidMesh.md +1 -1
  385. package/dist/docs/reference/geometry/validateTransform3.md +1 -1
  386. package/dist/docs/reference/geometry/validateTriangleMesh.md +1 -1
  387. package/dist/docs/reference/geometry/vector2.md +1 -1
  388. package/dist/docs/reference/geometry/vector3.md +1 -1
  389. package/dist/docs/reference/geometry.md +1 -1
  390. package/dist/docs/reference/model/Anchor3.md +1 -1
  391. package/dist/docs/reference/model/AttachOptions.md +1 -1
  392. package/dist/docs/reference/model/Bounds2-type.md +1 -1
  393. package/dist/docs/reference/model/Bounds2Data.md +1 -1
  394. package/dist/docs/reference/model/Bounds2Input.md +1 -1
  395. package/dist/docs/reference/model/Bounds2Options.md +70 -0
  396. package/dist/docs/reference/model/Bounds3-type.md +1 -1
  397. package/dist/docs/reference/model/Bounds3Data.md +1 -1
  398. package/dist/docs/reference/model/Bounds3Input.md +1 -1
  399. package/dist/docs/reference/model/Bounds3Options.md +70 -0
  400. package/dist/docs/reference/model/BoxEdge.md +1 -1
  401. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  402. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  403. package/dist/docs/reference/model/BoxOptions.md +1 -1
  404. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  405. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  406. package/dist/docs/reference/model/CircleOptions.md +1 -1
  407. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
  408. package/dist/docs/reference/model/Computed.md +1 -1
  409. package/dist/docs/reference/model/ComputedValue.md +1 -1
  410. package/dist/docs/reference/model/Contour.md +1 -1
  411. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  412. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  413. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  414. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  415. package/dist/docs/reference/model/CylinderOptions.md +1 -1
  416. package/dist/docs/reference/model/DiagnosticOptions.md +1 -1
  417. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  418. package/dist/docs/reference/model/EllipseContourOptions.md +1 -1
  419. package/dist/docs/reference/model/EllipseOptions.md +1 -1
  420. package/dist/docs/reference/model/EndTreatments.md +1 -1
  421. package/dist/docs/reference/model/ExtrudeOptions.md +1 -1
  422. package/dist/docs/reference/model/FinalizedModel.md +1 -1
  423. package/dist/docs/reference/model/FinalizedPart.md +1 -1
  424. package/dist/docs/reference/model/Frame3.md +1 -1
  425. package/dist/docs/reference/model/GenerateCallback.md +1 -1
  426. package/dist/docs/reference/model/GenerateContext.md +1 -1
  427. package/dist/docs/reference/model/GeneratedPart.md +1 -1
  428. package/dist/docs/reference/model/GenerationDiagnostic.md +1 -1
  429. package/dist/docs/reference/model/GenerationError.md +1 -1
  430. package/dist/docs/reference/model/GeometryResolution.md +1 -1
  431. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  432. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  433. package/dist/docs/reference/model/GridPatternOptions.md +1 -1
  434. package/dist/docs/reference/model/HeightfieldOptions.md +1 -1
  435. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +1 -1
  436. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +1 -1
  437. package/dist/docs/reference/model/HoleCutterOptions.md +77 -0
  438. package/dist/docs/reference/model/HoleCutterOverrun.md +35 -0
  439. package/dist/docs/reference/model/HoleCutterRecess.md +87 -0
  440. package/dist/docs/reference/model/HullOptions.md +1 -1
  441. package/dist/docs/reference/model/ImmutableBuffer-type.md +1 -1
  442. package/dist/docs/reference/model/ImmutableTriangleMesh.md +1 -1
  443. package/dist/docs/reference/model/ImplicitOptions.md +1 -1
  444. package/dist/docs/reference/model/InternalThreadCutterOptions.md +1 -1
  445. package/dist/docs/reference/model/KnuckleHinge-type.md +1 -1
  446. package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +1 -1
  447. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +9 -5
  448. package/dist/docs/reference/model/KnuckleHingeOptions.md +3 -3
  449. package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +1 -1
  450. package/dist/docs/reference/model/KnuckleHingeSpec.md +1 -1
  451. package/dist/docs/reference/model/KnuckleHingeWeb.md +2 -2
  452. package/dist/docs/reference/model/LinearPatternOptions.md +1 -1
  453. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  454. package/dist/docs/reference/model/LoftOptions.md +1 -1
  455. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  456. package/dist/docs/reference/model/LoftStation.md +1 -1
  457. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  458. package/dist/docs/reference/model/ModelProgram.md +1 -1
  459. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  460. package/dist/docs/reference/model/NumericArray.md +1 -1
  461. package/dist/docs/reference/model/PartGeometry.md +1 -1
  462. package/dist/docs/reference/model/PartOptions.md +1 -1
  463. package/dist/docs/reference/model/Path2-type.md +1 -1
  464. package/dist/docs/reference/model/Path2Data.md +1 -1
  465. package/dist/docs/reference/model/Path2Input.md +1 -1
  466. package/dist/docs/reference/model/Path3-type.md +1 -1
  467. package/dist/docs/reference/model/Path3Data.md +1 -1
  468. package/dist/docs/reference/model/Path3Input.md +1 -1
  469. package/dist/docs/reference/model/PathLocation.md +1 -1
  470. package/dist/docs/reference/model/PathNormalGuide.md +1 -1
  471. package/dist/docs/reference/model/PathOptions.md +1 -1
  472. package/dist/docs/reference/model/PathPatternOptions.md +1 -1
  473. package/dist/docs/reference/model/PathResamplingOptions.md +1 -1
  474. package/dist/docs/reference/model/PatternSource.md +1 -1
  475. package/dist/docs/reference/model/Pivot2Options.md +1 -1
  476. package/dist/docs/reference/model/Pivot3Options.md +1 -1
  477. package/dist/docs/reference/model/PlaneOptions.md +1 -1
  478. package/dist/docs/reference/model/PolygonData.md +1 -1
  479. package/dist/docs/reference/model/PolygonOptions.md +1 -1
  480. package/dist/docs/reference/model/PrimitiveAttachment.md +1 -1
  481. package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +1 -1
  482. package/dist/docs/reference/model/PrintableThreadFit.md +1 -1
  483. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +1 -1
  484. package/dist/docs/reference/model/Profile.md +1 -1
  485. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  486. package/dist/docs/reference/model/ProfileContour2.md +1 -1
  487. package/dist/docs/reference/model/ProfileSpan2.md +1 -1
  488. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +1 -1
  489. package/dist/docs/reference/model/RadialPatternOptions.md +1 -1
  490. package/dist/docs/reference/model/RadialSizing.md +1 -1
  491. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  492. package/dist/docs/reference/model/RectangleContourOptions.md +1 -1
  493. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  494. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  495. package/dist/docs/reference/model/RectangleOptions.md +1 -1
  496. package/dist/docs/reference/model/RegionData.md +1 -1
  497. package/dist/docs/reference/model/RegularPolygonOptions.md +1 -1
  498. package/dist/docs/reference/model/RevolveOptions.md +1 -1
  499. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  500. package/dist/docs/reference/model/Section.md +1 -1
  501. package/dist/docs/reference/model/SectionHullOptions.md +1 -1
  502. package/dist/docs/reference/model/SectionInspection.md +1 -1
  503. package/dist/docs/reference/model/SectionOffsetJoin.md +1 -1
  504. package/dist/docs/reference/model/SectionOffsetOptions.md +1 -1
  505. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  506. package/dist/docs/reference/model/Solid.md +1 -1
  507. package/dist/docs/reference/model/SolidInspection.md +1 -1
  508. package/dist/docs/reference/model/SolidSegmentHit.md +1 -1
  509. package/dist/docs/reference/model/SphereOptions.md +1 -1
  510. package/dist/docs/reference/model/StarOptions.md +1 -1
  511. package/dist/docs/reference/model/StrokeCap.md +1 -1
  512. package/dist/docs/reference/model/StrokeJoin.md +1 -1
  513. package/dist/docs/reference/model/StrokeOptions.md +1 -1
  514. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  515. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  516. package/dist/docs/reference/model/SvgSectionOptions.md +14 -1
  517. package/dist/docs/reference/model/SweepOptions.md +1 -1
  518. package/dist/docs/reference/model/SweepOrientation.md +1 -1
  519. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  520. package/dist/docs/reference/model/ThreadEndStyle.md +1 -1
  521. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +1 -1
  522. package/dist/docs/reference/model/ThreadHandedness.md +1 -1
  523. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +1 -1
  524. package/dist/docs/reference/model/ThreadLeadInShape.md +1 -1
  525. package/dist/docs/reference/model/ThreadProfile.md +1 -1
  526. package/dist/docs/reference/model/ThreadRidgeOptions.md +1 -1
  527. package/dist/docs/reference/model/ThreadedNutBevel.md +1 -1
  528. package/dist/docs/reference/model/ThreadedNutOptions.md +1 -1
  529. package/dist/docs/reference/model/ThreadedNutPreflight.md +1 -1
  530. package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
  531. package/dist/docs/reference/model/ThreadedRodOptions.md +1 -1
  532. package/dist/docs/reference/model/TorusOptions.md +1 -1
  533. package/dist/docs/reference/model/Transform2-type.md +1 -1
  534. package/dist/docs/reference/model/Transform2Data.md +1 -1
  535. package/dist/docs/reference/model/Transform2Input.md +1 -1
  536. package/dist/docs/reference/model/Transform3-type.md +1 -1
  537. package/dist/docs/reference/model/Transform3Data.md +1 -1
  538. package/dist/docs/reference/model/Transform3Input.md +1 -1
  539. package/dist/docs/reference/model/TriangleMesh.md +1 -1
  540. package/dist/docs/reference/model/TriangleMeshAnalysis.md +1 -1
  541. package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
  542. package/dist/docs/reference/model/TubeOptions.md +1 -1
  543. package/dist/docs/reference/model/Vector2-type.md +1 -1
  544. package/dist/docs/reference/model/Vector2Data.md +1 -1
  545. package/dist/docs/reference/model/Vector2Input.md +1 -1
  546. package/dist/docs/reference/model/Vector3-type.md +1 -1
  547. package/dist/docs/reference/model/Vector3Data.md +1 -1
  548. package/dist/docs/reference/model/Vector3Input.md +1 -1
  549. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  550. package/dist/docs/reference/model/VectorTextMetrics.md +1 -1
  551. package/dist/docs/reference/model/anchor.md +1 -1
  552. package/dist/docs/reference/model/bounds2.md +7 -6
  553. package/dist/docs/reference/model/bounds3.md +7 -6
  554. package/dist/docs/reference/model/box.md +1 -1
  555. package/dist/docs/reference/model/castSegment.md +1 -1
  556. package/dist/docs/reference/model/categories/boolean-operations.md +1 -1
  557. package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -1
  558. package/dist/docs/reference/model/categories/bounds.md +5 -3
  559. package/dist/docs/reference/model/categories/contracts.md +1 -1
  560. package/dist/docs/reference/model/categories/core-values-errors.md +1 -1
  561. package/dist/docs/reference/model/categories/explicit-profiles.md +1 -1
  562. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +1 -1
  563. package/dist/docs/reference/model/categories/generation.md +1 -1
  564. package/dist/docs/reference/model/categories/hinges.md +2 -2
  565. package/dist/docs/reference/model/categories/inspection.md +1 -1
  566. package/dist/docs/reference/model/categories/mesh-inspection.md +1 -1
  567. package/dist/docs/reference/model/categories/paths.md +1 -1
  568. package/dist/docs/reference/model/categories/primitives.md +5 -1
  569. package/dist/docs/reference/model/categories/resolution.md +1 -1
  570. package/dist/docs/reference/model/categories/sections.md +1 -1
  571. package/dist/docs/reference/model/categories/threads.md +1 -1
  572. package/dist/docs/reference/model/categories/transforms-placement.md +1 -1
  573. package/dist/docs/reference/model/circle.md +1 -1
  574. package/dist/docs/reference/model/components.md +1 -1
  575. package/dist/docs/reference/model/compose.md +1 -1
  576. package/dist/docs/reference/model/cylinder.md +1 -1
  577. package/dist/docs/reference/model/distance.md +1 -1
  578. package/dist/docs/reference/model/ellipse.md +1 -1
  579. package/dist/docs/reference/model/extrude.md +1 -1
  580. package/dist/docs/reference/model/generate.md +1 -1
  581. package/dist/docs/reference/model/gridPattern.md +1 -1
  582. package/dist/docs/reference/model/heightfield.md +1 -1
  583. package/dist/docs/reference/model/holeCutter.md +45 -0
  584. package/dist/docs/reference/model/hull.md +1 -1
  585. package/dist/docs/reference/model/immutableBuffer.md +1 -1
  586. package/dist/docs/reference/model/immutableMesh.md +1 -1
  587. package/dist/docs/reference/model/implicit.md +1 -1
  588. package/dist/docs/reference/model/inspectSection.md +1 -1
  589. package/dist/docs/reference/model/inspectSolid.md +1 -1
  590. package/dist/docs/reference/model/internalThreadCutter.md +1 -1
  591. package/dist/docs/reference/model/intersect.md +1 -1
  592. package/dist/docs/reference/model/isEmpty.md +1 -1
  593. package/dist/docs/reference/model/knuckleHinge.md +3 -3
  594. package/dist/docs/reference/model/linearPattern.md +1 -1
  595. package/dist/docs/reference/model/loft.md +1 -1
  596. package/dist/docs/reference/model/matchProfiles.md +1 -1
  597. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  598. package/dist/docs/reference/model/path2.md +1 -1
  599. package/dist/docs/reference/model/path3.md +1 -1
  600. package/dist/docs/reference/model/pathPattern.md +1 -1
  601. package/dist/docs/reference/model/polygon.md +1 -1
  602. package/dist/docs/reference/model/preflightInternalThreadCutter.md +1 -1
  603. package/dist/docs/reference/model/preflightThreadedNut.md +1 -1
  604. package/dist/docs/reference/model/preflightThreadedRod.md +1 -1
  605. package/dist/docs/reference/model/radialPattern.md +1 -1
  606. package/dist/docs/reference/model/rectangle.md +1 -1
  607. package/dist/docs/reference/model/regularPolygon.md +1 -1
  608. package/dist/docs/reference/model/revolve.md +1 -1
  609. package/dist/docs/reference/model/solidFromMesh.md +1 -1
  610. package/dist/docs/reference/model/sphere.md +1 -1
  611. package/dist/docs/reference/model/split.md +1 -1
  612. package/dist/docs/reference/model/splitByPlane.md +1 -1
  613. package/dist/docs/reference/model/star.md +1 -1
  614. package/dist/docs/reference/model/stroke.md +1 -1
  615. package/dist/docs/reference/model/svgPathSection.md +1 -1
  616. package/dist/docs/reference/model/svgSection.md +5 -1
  617. package/dist/docs/reference/model/sweep.md +1 -1
  618. package/dist/docs/reference/model/textSection.md +1 -1
  619. package/dist/docs/reference/model/threadRidge.md +1 -1
  620. package/dist/docs/reference/model/threadedNut.md +1 -1
  621. package/dist/docs/reference/model/threadedRod.md +1 -1
  622. package/dist/docs/reference/model/torus.md +1 -1
  623. package/dist/docs/reference/model/transform2.md +1 -1
  624. package/dist/docs/reference/model/transform3.md +1 -1
  625. package/dist/docs/reference/model/tube.md +1 -1
  626. package/dist/docs/reference/model/union.md +1 -1
  627. package/dist/docs/reference/model/vector2.md +1 -1
  628. package/dist/docs/reference/model/vector3.md +1 -1
  629. package/dist/docs/reference/model.md +1 -1
  630. package/dist/docs/reference/text/Bounds2Data.md +1 -1
  631. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
  632. package/dist/docs/reference/text/Vector2Data.md +1 -1
  633. package/dist/docs/reference/text/VectorFont.md +7 -7
  634. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  635. package/dist/docs/reference/text/VectorTextArcBaseline.md +1 -1
  636. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  637. package/dist/docs/reference/text/VectorTextLayoutOptions.md +3 -3
  638. package/dist/docs/reference/text/VectorTextMetrics.md +1 -1
  639. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  640. package/dist/docs/reference/text/categories/font-preparation.md +1 -1
  641. package/dist/docs/reference/text/prepareVectorFont.md +1 -1
  642. package/dist/docs/reference/text.md +1 -1
  643. package/dist/engine/extrusion-finishing.js +2 -29
  644. package/dist/engine/hole-cutter-operation.js +148 -0
  645. package/dist/engine/knuckle-hinge-operation.js +55 -12
  646. package/dist/engine/modeling-context.js +12 -0
  647. package/dist/engine/primitive-operations.js +19 -6
  648. package/dist/engine/section-operations.js +1 -1
  649. package/dist/geometry/bounds-value.js +37 -9
  650. package/dist/geometry/bounds.js +0 -17
  651. package/dist/geometry/circular-sampling.js +45 -0
  652. package/dist/geometry/convex-offset.js +41 -0
  653. package/dist/geometry/index.js +2 -1
  654. package/dist/geometry/math/immutable-value.js +1 -1
  655. package/dist/geometry/profiles/profiles.js +3 -23
  656. package/dist/geometry/svg/matrix.js +21 -0
  657. package/dist/geometry/svg-import.js +134 -52
  658. package/dist/model/execution-binding.js +1 -1
  659. package/dist/model/geometry-recipes.js +1 -1
  660. package/dist/model/hole-cutter.js +1 -0
  661. package/dist/model/operations.js +23 -2
  662. package/dist/model/recipe-declaration.js +1 -0
  663. package/package.json +1 -1
  664. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +0 -24
  665. package/dist/docs/reference/geometry/boundsFromSize.md +0 -84
  666. package/dist/docs/reference/geometry/containsBounds.md +0 -73
@@ -30,7 +30,7 @@ Shape horizontal lines or one circular line; bounded to 512 UTF-16 units and sup
30
30
 
31
31
  Em size in millimetres, greater than zero and at most 10000; not the visible glyph height.
32
32
 
33
- - [`align`](VectorTextLayoutOptions.md#align) · `"left"` \| `"right"` \| `"center"` · Optional
33
+ - [`align`](VectorTextLayoutOptions.md#align) · `"center"` \| `"left"` \| `"right"` · Optional
34
34
 
35
35
  Place the advance's start, midpoint or end at the datum; defaults to center on arcs, otherwise left.
36
36
 
@@ -42,7 +42,7 @@ Shape horizontal lines or one circular line; bounded to 512 UTF-16 units and sup
42
42
 
43
43
  Baseline spacing in ems, 0.5–5; omitted uses the selected face's natural vertical metrics.
44
44
 
45
- - [`verticalAlign`](VectorTextLayoutOptions.md#verticalalign) · `"top"` \| `"bottom"` \| `"center"` \| `"baseline"` · Optional
45
+ - [`verticalAlign`](VectorTextLayoutOptions.md#verticalalign) · `"center"` \| `"top"` \| `"bottom"` \| `"baseline"` · Optional
46
46
 
47
47
  Place the first baseline or complete ink bounds at Y=0; arcs only accept baseline.
48
48
 
@@ -88,7 +88,7 @@ Measure the same cached vector layout; all returned lengths are in millimetres.
88
88
 
89
89
  Em size in millimetres, greater than zero and at most 10000; not the visible glyph height.
90
90
 
91
- - [`align`](VectorTextLayoutOptions.md#align) · `"left"` \| `"right"` \| `"center"` · Optional
91
+ - [`align`](VectorTextLayoutOptions.md#align) · `"center"` \| `"left"` \| `"right"` · Optional
92
92
 
93
93
  Place the advance's start, midpoint or end at the datum; defaults to center on arcs, otherwise left.
94
94
 
@@ -100,7 +100,7 @@ Measure the same cached vector layout; all returned lengths are in millimetres.
100
100
 
101
101
  Baseline spacing in ems, 0.5–5; omitted uses the selected face's natural vertical metrics.
102
102
 
103
- - [`verticalAlign`](VectorTextLayoutOptions.md#verticalalign) · `"top"` \| `"bottom"` \| `"center"` \| `"baseline"` · Optional
103
+ - [`verticalAlign`](VectorTextLayoutOptions.md#verticalalign) · `"center"` \| `"top"` \| `"bottom"` \| `"baseline"` · Optional
104
104
 
105
105
  Place the first baseline or complete ink bounds at Y=0; arcs only accept baseline.
106
106
 
@@ -146,7 +146,7 @@ Serialize visible horizontal or circular outlines as bounded path-only SVG in ph
146
146
 
147
147
  Em size in millimetres, greater than zero and at most 10000; not the visible glyph height.
148
148
 
149
- - [`align`](VectorTextLayoutOptions.md#align) · `"left"` \| `"right"` \| `"center"` · Optional
149
+ - [`align`](VectorTextLayoutOptions.md#align) · `"center"` \| `"left"` \| `"right"` · Optional
150
150
 
151
151
  Place the advance's start, midpoint or end at the datum; defaults to center on arcs, otherwise left.
152
152
 
@@ -158,7 +158,7 @@ Serialize visible horizontal or circular outlines as bounded path-only SVG in ph
158
158
 
159
159
  Baseline spacing in ems, 0.5–5; omitted uses the selected face's natural vertical metrics.
160
160
 
161
- - [`verticalAlign`](VectorTextLayoutOptions.md#verticalalign) · `"top"` \| `"bottom"` \| `"center"` \| `"baseline"` · Optional
161
+ - [`verticalAlign`](VectorTextLayoutOptions.md#verticalalign) · `"center"` \| `"top"` \| `"bottom"` \| `"baseline"` · Optional
162
162
 
163
163
  Place the first baseline or complete ink bounds at Y=0; arcs only accept baseline.
164
164
 
@@ -183,4 +183,4 @@ Serialize visible horizontal or circular outlines as bounded path-only SVG in ph
183
183
  - [VectorTextLayoutOptions](VectorTextLayoutOptions.md)
184
184
  - [VectorTextMetrics](VectorTextMetrics.md)
185
185
 
186
- Package: `@metamesh/modeling@0.16.0`.
186
+ Package: `@metamesh/modeling@0.17.0`.
@@ -14,4 +14,4 @@ Identifies the actual weight of a static face, without synthesizing a different
14
14
 
15
15
  Actual weight of a static face, 1–1000; defaults to 400.
16
16
 
17
- Package: `@metamesh/modeling@0.16.0`.
17
+ Package: `@metamesh/modeling@0.17.0`.
@@ -50,4 +50,4 @@ Alignment datum in degrees counterclockwise from +X; defaults to 90.
50
50
 
51
51
  Reading direction around the circle; defaults to clockwise.
52
52
 
53
- Package: `@metamesh/modeling@0.16.0`.
53
+ Package: `@metamesh/modeling@0.17.0`.
@@ -31,4 +31,4 @@ Exact measurements of these paths and their logical text layout.
31
31
 
32
32
  - [VectorTextMetrics](VectorTextMetrics.md)
33
33
 
34
- Package: `@metamesh/modeling@0.16.0`.
34
+ Package: `@metamesh/modeling@0.17.0`.
@@ -12,7 +12,7 @@ Text bounded to 512 UTF-16 units: horizontal lines or one circular line without
12
12
 
13
13
 
14
14
 
15
- `readonly` `optional` **align?**: `"left"` \| `"right"` \| `"center"`
15
+ `readonly` `optional` **align?**: `"center"` \| `"left"` \| `"right"`
16
16
 
17
17
 
18
18
 
@@ -48,7 +48,7 @@ Baseline spacing in ems, 0.5–5; omitted uses the selected face's natural verti
48
48
 
49
49
 
50
50
 
51
- `readonly` `optional` **verticalAlign?**: `"top"` \| `"bottom"` \| `"center"` \| `"baseline"`
51
+ `readonly` `optional` **verticalAlign?**: `"center"` \| `"top"` \| `"bottom"` \| `"baseline"`
52
52
 
53
53
 
54
54
 
@@ -108,4 +108,4 @@ Tracking between glyph clusters in millimetres, -100–100; defaults to zero.
108
108
  - [VectorTextArcBaseline](VectorTextArcBaseline.md)
109
109
  - [VectorTextOptions](VectorTextOptions.md)
110
110
 
111
- Package: `@metamesh/modeling@0.16.0`.
111
+ Package: `@metamesh/modeling@0.17.0`.
@@ -91,4 +91,4 @@ Number of lines, including empty and trailing lines; empty text occupies one lin
91
91
 
92
92
  - [Bounds2Data](Bounds2Data.md)
93
93
 
94
- Package: `@metamesh/modeling@0.16.0`.
94
+ Package: `@metamesh/modeling@0.17.0`.
@@ -47,4 +47,4 @@ Tracking between glyph clusters in millimetres, -100–100; defaults to zero.
47
47
 
48
48
  - [VectorTextLayoutOptions](VectorTextLayoutOptions.md)
49
49
 
50
- Package: `@metamesh/modeling@0.16.0`.
50
+ Package: `@metamesh/modeling@0.17.0`.
@@ -37,4 +37,4 @@ Layout returns immutable paths and metrics in Y-up millimetres. Pass the prepare
37
37
  | --- | --- |
38
38
  | [MAX_VECTOR_FONT_BYTES](../MAX_VECTOR_FONT_BYTES.md) | Limits apply before parsing or shaping untrusted font data. |
39
39
 
40
- Package: `@metamesh/modeling@0.16.0`.
40
+ Package: `@metamesh/modeling@0.17.0`.
@@ -43,4 +43,4 @@ async function prepareLabel(fontBytes: Uint8Array) {
43
43
  - [VectorFont](VectorFont.md)
44
44
  - [VectorFontOptions](VectorFontOptions.md)
45
45
 
46
- Package: `@metamesh/modeling@0.16.0`.
46
+ Package: `@metamesh/modeling@0.17.0`.
@@ -20,4 +20,4 @@ Paths and metrics use Y-up millimetres and a baseline origin. Empty layouts can
20
20
 
21
21
  - [Font preparation](text/categories/font-preparation.md) — Prepare bounded exact font bytes and reusable vector layouts.
22
22
 
23
- Package: `@metamesh/modeling@0.16.0`.
23
+ Package: `@metamesh/modeling@0.17.0`.
@@ -1,3 +1,4 @@
1
+ import { convexContourOffsets } from "../geometry/convex-offset.js";
1
2
  import { edgeTreatmentPointCount, edgeTreatmentSetbacks, sampleEdgeTreatment, } from "../geometry/edge-finishing.js";
2
3
  import { GeometryError } from "../geometry/errors.js";
3
4
  import { resolveExtrusionControls } from "../geometry/extrusion.js";
@@ -19,22 +20,7 @@ export function buildFinishedExtrusion(module, profile, options) {
19
20
  if (profile.components.length !== 1 || profile.components[0].holes.length !== 0)
20
21
  fail("End treatments require one convex contour without holes; use explicit loft profiles for other topology.");
21
22
  const contour = profile.components[0].outer, points = contour.points;
22
- const edges = points.map((point, index) => {
23
- const next = points[(index + 1) % points.length], dx = next[0] - point[0], dy = next[1] - point[1];
24
- const length = Math.hypot(dx, dy);
25
- if (!(length > 0) || !Number.isFinite(length))
26
- fail("End treatment contours must have distinct finite vertices.");
27
- return [dx / length, dy / length];
28
- });
29
- const miters = edges.map((edge, index) => {
30
- const previous = edges[(index + edges.length - 1) % edges.length];
31
- const turn = previous[0] * edge[1] - previous[1] * edge[0];
32
- if (!(turn > 1e-12))
33
- fail("End treatments require a strictly convex counterclockwise contour without collinear vertices.");
34
- const denominator = 1 + previous[0] * edge[0] + previous[1] * edge[1];
35
- return [(-previous[1] - edge[1]) / denominator, (previous[0] + edge[0]) / denominator];
36
- });
37
- const magnification = miters.reduce((maximum, [x, y]) => Math.max(maximum, Math.hypot(x, y)), 1);
23
+ const { magnification, offset } = convexContourOffsets(points, "extrude");
38
24
  const sampling = {
39
25
  resolution: options.resolution,
40
26
  limits: options.limits,
@@ -58,19 +44,6 @@ export function buildFinishedExtrusion(module, profile, options) {
58
44
  ...bottomPoints.map(([inset, depth]) => ({ inset, z: depth })),
59
45
  ...[...topPoints].reverse().map(([inset, depth]) => ({ inset, z: options.height - depth })),
60
46
  ];
61
- const offset = (inset) => {
62
- const result = points.map(([x, y], index) => [
63
- x + miters[index][0] * inset,
64
- y + miters[index][1] * inset,
65
- ]);
66
- for (let index = 0; index < result.length; index++) {
67
- const point = result[index], next = result[(index + 1) % result.length], edge = edges[index];
68
- if (!point.every(Number.isFinite) ||
69
- !((next[0] - point[0]) * edge[0] + (next[1] - point[1]) * edge[1] > 0))
70
- fail("End treatment inset collapses or reverses a contour edge.");
71
- }
72
- return result;
73
- };
74
47
  offset(Math.max(bottomSize[0], topSize[0])); // fit fails before allocating the full station family
75
48
  const stations = rows.map(({ inset, z }) => ({
76
49
  z: controls.center ? z - options.height / 2 : z,
@@ -0,0 +1,148 @@
1
+ import { convexContourOffsets } from "../geometry/convex-offset.js";
2
+ import { GeometryError } from "../geometry/errors.js";
3
+ import { assertPrimitiveOptions } from "../geometry/primitive-resolvers.js";
4
+ /** Composes cutters inside the evaluating host, retaining deferred Section and sampling ownership. */
5
+ export function createHoleCutterOperation(environment, operations) {
6
+ return (options) => {
7
+ environment.assertActive();
8
+ assertPrimitiveOptions(options, "holeCutter");
9
+ const fail = (message) => {
10
+ throw new GeometryError("INVALID_ARGUMENT", message, { operation: "holeCutter" });
11
+ };
12
+ const positive = (value, name) => {
13
+ if (!Number.isFinite(value) || value <= 0)
14
+ fail(`${name} must be finite and positive.`);
15
+ return value;
16
+ };
17
+ const nonnegative = (value, name) => {
18
+ if (!Number.isFinite(value) || value < 0)
19
+ fail(`${name} must be finite and nonnegative.`);
20
+ return value;
21
+ };
22
+ const height = positive(options.height, "height");
23
+ const circular = options.diameter !== undefined;
24
+ if (circular === (options.profile !== undefined))
25
+ fail("Specify exactly one diameter or Section profile.");
26
+ if (!circular &&
27
+ (options.recess !== undefined ||
28
+ options.segments !== undefined ||
29
+ options.sizing !== undefined))
30
+ fail("Circular recess, segments and sizing options require a diameter.");
31
+ if (options.recess !== undefined && options.entryChamfer !== undefined)
32
+ fail("A recess and entryChamfer are mutually exclusive.");
33
+ const face = options.face ?? "top";
34
+ if (face !== "top" && face !== "bottom")
35
+ fail("face must be top or bottom.");
36
+ if (options.overrun !== undefined)
37
+ assertPrimitiveOptions(options.overrun, "holeCutter");
38
+ const bottom = nonnegative(options.overrun?.bottom ?? 0, "overrun.bottom");
39
+ const top = nonnegative(options.overrun?.top ?? 0, "overrun.top");
40
+ const length = positive(height + bottom + top, "extended height");
41
+ const chamfer = nonnegative(options.entryChamfer ?? 0, "entryChamfer");
42
+ if (chamfer >= height)
43
+ fail("entryChamfer must be smaller than height.");
44
+ const selected = environment.withResolutionDefaults(options);
45
+ const sampling = { resolution: selected.resolution, limits: selected.limits };
46
+ if (circular)
47
+ positive(options.diameter, "diameter");
48
+ if (options.recess !== undefined) {
49
+ const recess = options.recess;
50
+ assertPrimitiveOptions(recess, "holeCutter");
51
+ positive(recess.diameter, "recess.diameter");
52
+ if (recess.diameter <= options.diameter)
53
+ fail("The recess diameter must exceed the bore diameter.");
54
+ let depth;
55
+ if (recess.kind === "counterbore")
56
+ depth = positive(recess.depth, "recess.depth");
57
+ else if (recess.kind === "countersink") {
58
+ if (!Number.isFinite(recess.includedAngle) ||
59
+ recess.includedAngle <= 0 ||
60
+ recess.includedAngle >= 180)
61
+ fail("Countersink includedAngle must be between zero and 180 degrees.");
62
+ depth = positive((recess.diameter - options.diameter) /
63
+ (2 * Math.tan((recess.includedAngle * Math.PI) / 360)), "recess depth");
64
+ }
65
+ else
66
+ return fail("Unsupported recess kind.");
67
+ if (depth > height)
68
+ fail("The recess must fit within height.");
69
+ const segments = environment.resolveCircularSegments(recess.diameter / 2, options);
70
+ const common = { ...sampling, segments, sizing: options.sizing ?? "vertex", center: false };
71
+ const bore = operations.translate(operations.cylinder({ ...common, diameter: options.diameter, height: length }), [0, 0, -bottom]);
72
+ const seat = operations.translate(operations.cylinder({
73
+ ...common,
74
+ diameter: recess.kind === "counterbore"
75
+ ? recess.diameter
76
+ : face === "top"
77
+ ? [options.diameter, recess.diameter]
78
+ : [recess.diameter, options.diameter],
79
+ height: depth,
80
+ }), [0, 0, face === "top" ? height - depth : 0]);
81
+ const excess = face === "top" ? top : bottom;
82
+ return operations.union([
83
+ bore,
84
+ seat,
85
+ ...(excess === 0
86
+ ? []
87
+ : [
88
+ operations.translate(operations.cylinder({
89
+ ...common,
90
+ diameter: recess.diameter,
91
+ height: excess,
92
+ }), [0, 0, face === "top" ? height : -bottom]),
93
+ ]),
94
+ ]);
95
+ }
96
+ if (circular) {
97
+ const openingOverrun = face === "top" ? top : bottom;
98
+ const segments = environment.resolveCircularSegments(options.diameter / 2 + chamfer + (chamfer === 0 ? 0 : openingOverrun), options);
99
+ const common = { ...sampling, segments, sizing: options.sizing ?? "vertex", center: false };
100
+ const bore = operations.translate(operations.cylinder({
101
+ ...common,
102
+ diameter: options.diameter,
103
+ height: length,
104
+ }), [0, 0, -bottom]);
105
+ if (chamfer === 0)
106
+ return bore;
107
+ // Circular entries retain nominal radial dimensions. Section entries below instead
108
+ // offset their supplied polygon edges; their faceted envelope remains authoritative.
109
+ const mouth = options.diameter + 2 * (chamfer + openingOverrun);
110
+ const entry = operations.translate(operations.cylinder({
111
+ ...common,
112
+ diameter: face === "top" ? [options.diameter, mouth] : [mouth, options.diameter],
113
+ height: chamfer + openingOverrun,
114
+ }), [0, 0, face === "top" ? height - chamfer : -bottom]);
115
+ return operations.union([bore, entry]);
116
+ }
117
+ const profile = options.profile;
118
+ if (chamfer === 0)
119
+ return operations.translate(operations.extrude(profile, { ...sampling, height: length }), [
120
+ 0,
121
+ 0,
122
+ -bottom,
123
+ ]);
124
+ const source = environment.sectionProfileFor(profile);
125
+ if (source.components.length !== 1 || source.components[0].holes.length !== 0)
126
+ fail("Entry chamfers require one strictly convex contour without holes.");
127
+ const component = source.components[0];
128
+ const offset = convexContourOffsets(component.outer.points, "holeCutter").offset;
129
+ const rows = face === "top"
130
+ ? [
131
+ { z: -bottom, inset: 0 },
132
+ { z: height - chamfer, inset: 0 },
133
+ { z: height + top, inset: -chamfer - top },
134
+ ]
135
+ : [
136
+ { z: -bottom, inset: -chamfer - bottom },
137
+ { z: chamfer, inset: 0 },
138
+ { z: height + top, inset: 0 },
139
+ ];
140
+ const stations = rows.map(({ z, inset }) => ({
141
+ z,
142
+ profile: {
143
+ components: [{ ...component, outer: { ...component.outer, points: offset(inset) } }],
144
+ },
145
+ }));
146
+ return operations.loft(stations, sampling);
147
+ };
148
+ }
@@ -15,12 +15,12 @@ export function createKnuckleHingeOperation(environment, operations) {
15
15
  };
16
16
  const validateHalf = (half = {}) => {
17
17
  assertPrimitiveOptions(half, "knuckleHinge");
18
- const chamfer = half.barrelChamfer ?? 0;
18
+ const chamfer = half.chamfer ?? 0;
19
19
  if (!Number.isFinite(chamfer) ||
20
20
  chamfer < 0 ||
21
21
  2 * chamfer >= d.knuckleLength ||
22
22
  chamfer >= d.minimumBarrelWall)
23
- invalid("barrelChamfer must be nonnegative and leave a positive axial band and faceted barrel wall.");
23
+ invalid("chamfer must be nonnegative and leave a positive axial band and faceted barrel wall.");
24
24
  const web = half.web;
25
25
  if (web !== undefined) {
26
26
  assertPrimitiveOptions(web, "knuckleHinge");
@@ -33,6 +33,9 @@ export function createKnuckleHingeOperation(environment, operations) {
33
33
  !Number.isFinite(web.zMin) ||
34
34
  !Number.isFinite(web.zMin + web.thickness))
35
35
  invalid("Web dimensions must be finite, with positive reach and thickness.");
36
+ if (2 * chamfer >= web.thickness ||
37
+ 2 * Math.SQRT2 * chamfer >= Math.min(d.knuckleLength, web.reach))
38
+ invalid("chamfer must leave a positive web band and noncollapsed end contours.");
36
39
  const innerRadius = d.barrelRadius * Math.cos(Math.PI / d.segments);
37
40
  if (web.zMin >= innerRadius || web.zMin + web.thickness <= -innerRadius)
38
41
  invalid("A web must overlap the interior of its barrel.");
@@ -59,26 +62,66 @@ export function createKnuckleHingeOperation(environment, operations) {
59
62
  }), [0, 90, 0]), [start, 0, 0]);
60
63
  const buildHalf = (side, { chamfer, web }) => {
61
64
  const features = [];
65
+ // Use the web bottom as the shared Float32 datum for barrel, web, and mounting bevels.
66
+ const baseZ = chamfer > 0 && web !== undefined ? web.zMin : 0;
67
+ const atBase = (solid) => operations.translate(solid, [0, 0, -baseZ]);
68
+ const webProfile = (web, inset) => {
69
+ // Parallel offsets finish the exposed tip; the two root corners stay square.
70
+ const corner = { kind: "chamfer", distance: chamfer + (Math.SQRT2 - 2) * inset };
71
+ const profile = operations.rectangle({
72
+ size: [d.knuckleLength - 2 * inset, web.reach - inset],
73
+ center: false,
74
+ treatment: [corner, corner, { kind: "square" }, { kind: "square" }],
75
+ });
76
+ return operations.scale(operations.translate(profile, [inset, 0]), [
77
+ 1,
78
+ web.direction === "positive-y" ? 1 : -1,
79
+ ]);
80
+ };
62
81
  for (const interval of d.knuckles) {
63
82
  if (interval.side !== side)
64
83
  continue;
65
- features.push(axial(d.barrelRadius, interval.start, interval.length, false, chamfer));
66
- if (web !== undefined)
67
- features.push(operations.translate(operations.box({
68
- size: [interval.length, web.reach, web.thickness],
69
- center: false,
70
- }), [interval.start, web.direction === "positive-y" ? 0 : -web.reach, web.zMin]));
84
+ features.push(atBase(axial(d.barrelRadius, interval.start, interval.length, false, chamfer)));
85
+ if (web !== undefined) {
86
+ features.push(chamfer === 0
87
+ ? operations.translate(operations.box({
88
+ size: [interval.length, web.reach, web.thickness],
89
+ center: false,
90
+ }), [
91
+ interval.start,
92
+ web.direction === "positive-y" ? 0 : -web.reach,
93
+ web.zMin - baseZ,
94
+ ])
95
+ : operations.loft([
96
+ [chamfer, 0],
97
+ [0, chamfer],
98
+ [0, web.thickness - chamfer],
99
+ [chamfer, web.thickness],
100
+ ].map(([inset, z]) => ({
101
+ profile: webProfile(web, inset),
102
+ frame: {
103
+ origin: [interval.start, 0, z],
104
+ xAxis: [1, 0, 0],
105
+ yAxis: [0, 1, 0],
106
+ zAxis: [0, 0, 1],
107
+ },
108
+ }))));
109
+ }
71
110
  }
72
111
  if (side === "a" && d.pin !== null)
73
- features.push(axial(d.pinRadius, d.pin.start, d.pin.length));
74
- const solid = operations.union(features);
112
+ features.push(atBase(axial(d.pinRadius, d.pin.start, d.pin.length)));
113
+ // Match the kernel cylinders to the same mesh precision as the explicit web stations.
114
+ const solid = operations.union(features.map((feature) => chamfer === 0 || web === undefined
115
+ ? feature
116
+ : operations.solidFromMesh(environment.analyzedMeshFor(feature).mesh)));
75
117
  // Overtravel is numerical cutter extent, independent of the physical radial/axial allowances.
76
118
  const overtravel = Math.min(d.knuckleLength, d.barrelRadius) * 0.01;
77
- return side === "a" && d.pin !== null
119
+ const result = side === "a" && d.pin !== null
78
120
  ? solid
79
121
  : operations.subtract(solid, [
80
- axial(d.boreRadius, -d.spec.length / 2 - overtravel, d.spec.length + 2 * overtravel, true),
122
+ atBase(axial(d.boreRadius, -d.spec.length / 2 - overtravel, d.spec.length + 2 * overtravel, true)),
81
123
  ]);
124
+ return operations.translate(result, [0, 0, baseZ]);
82
125
  };
83
126
  return Object.freeze({ halfA: buildHalf("a", a), halfB: buildHalf("b", b), axis: d.axis });
84
127
  };
@@ -1,5 +1,6 @@
1
1
  import { resolveGeometryResolution } from "../geometry/resolution.js";
2
2
  import { createConstructionOperations } from "./construction-operations.js";
3
+ import { createHoleCutterOperation } from "./hole-cutter-operation.js";
3
4
  import { createInspectionOperations } from "./inspection-operations.js";
4
5
  import { createMechanicalOperations } from "./mechanical-operations.js";
5
6
  import { createOperationEnvironment } from "./operation-environment.js";
@@ -18,6 +19,10 @@ export function createModelingContext(owner, initialResolution) {
18
19
  const mechanical = createMechanicalOperations(environment, {
19
20
  cylinder: primitives.cylinder,
20
21
  box: primitives.box,
22
+ rectangle: primitives.rectangle,
23
+ scale: transforms.operations.scale,
24
+ solidFromMesh: construction.solidFromMesh,
25
+ loft: construction.loft,
21
26
  union: construction.union,
22
27
  rotate: transforms.operations.rotate,
23
28
  translate: transforms.operations.translate,
@@ -34,6 +39,13 @@ export function createModelingContext(owner, initialResolution) {
34
39
  ...sections,
35
40
  ...primitives,
36
41
  ...construction,
42
+ holeCutter: createHoleCutterOperation(environment, {
43
+ cylinder: primitives.cylinder,
44
+ extrude: construction.extrude,
45
+ loft: construction.loft,
46
+ translate: transforms.operations.translate,
47
+ union: construction.union,
48
+ }),
37
49
  ...mechanical,
38
50
  ...patterns,
39
51
  ...inspection,
@@ -1,3 +1,4 @@
1
+ import { resolveCircularSampling } from "../geometry/circular-sampling.js";
1
2
  import { resolveCylinderRadii } from "../geometry/cylinder.js";
2
3
  import { resolveModelingLimits } from "../geometry/model-limits.js";
3
4
  import { assertPrimitiveOptions } from "../geometry/primitive-resolvers.js";
@@ -48,7 +49,15 @@ export function createPrimitiveOperations(environment, transforms, sections) {
48
49
  if (value.sizing !== "face")
49
50
  return placedSolid(value, () => kernel.cylinder(scope, resolved), () => cylinderAnchors(value));
50
51
  const radii = resolveCylinderRadii(value);
51
- const count = resolveCircularSegments(Math.max(...radii), value), correction = 1 / Math.cos(Math.PI / count);
52
+ const maximumRadius = Math.max(...radii);
53
+ const sampling = resolveCircularSampling({
54
+ radius: maximumRadius,
55
+ sizing: "face",
56
+ ...(resolved.segments === undefined ? {} : { segments: resolved.segments }),
57
+ resolution: resolved.resolution,
58
+ limits: resolved.limits,
59
+ });
60
+ const count = sampling.segments, correction = sampling.vertexRadius / maximumRadius;
52
61
  return placedSolid(value, () => kernel.cylinder(scope, {
53
62
  height: resolved.height,
54
63
  radius: [radii[0] * correction, radii[1] * correction],
@@ -106,12 +115,16 @@ export function createPrimitiveOperations(environment, transforms, sections) {
106
115
  throwGeometryError("INVALID_ARGUMENT", "circle", "Specify exactly one radius or diameter.");
107
116
  const radius = value.radius ?? value.diameter / 2;
108
117
  requirePositiveNumber(radius, "circle");
109
- const count = resolveCircularSegments(radius, value);
110
- requireProfileVertexCount(count, 3, "circle", withResolutionDefaults(value).limits);
111
- if (value.sizing !== undefined && value.sizing !== "vertex" && value.sizing !== "face")
112
- throwGeometryError("INVALID_ARGUMENT", "circle", "sizing must be vertex or face.");
113
- const section = ownSection(module.CrossSection.circle(value.sizing === "face" ? radius / Math.cos(Math.PI / count) : radius, count));
114
118
  const resolved = withResolutionDefaults(value);
119
+ const { segments: count, vertexRadius } = resolveCircularSampling({
120
+ radius,
121
+ sizing: value.sizing ?? "vertex",
122
+ ...(resolved.segments === undefined ? {} : { segments: resolved.segments }),
123
+ resolution: resolved.resolution,
124
+ limits: resolved.limits,
125
+ });
126
+ requireProfileVertexCount(count, 3, "circle", resolved.limits);
127
+ const section = ownSection(module.CrossSection.circle(vertexRadius, count));
115
128
  environment.rememberAnchors(section, planarAnchors([2 * radius, 2 * radius]));
116
129
  return environment.rememberPrimitiveProfile(section, ellipticalSectionProfile([radius, radius], value, resolved.resolution, resolved.limits, value.sizing === "face"));
117
130
  }),
@@ -118,7 +118,7 @@ export function createSectionOperations(environment, transforms) {
118
118
  },
119
119
  svgSection: (svg, value = {}) => {
120
120
  let result = wrapSection(kernel.regionToCrossSection(scope, preflightSvgRegion(svg, { ...withResolutionDefaults(value), origin: "document" }).region, limits));
121
- if ((value.origin ?? "center") === "center") {
121
+ if (value.fit === undefined && (value.origin ?? "center") === "center") {
122
122
  const bounds = nativeSection(result).bounds();
123
123
  result = translate(result, [
124
124
  -(bounds.min[0] + bounds.max[0]) / 2,
@@ -6,20 +6,46 @@ function fail(dimension, message) {
6
6
  throw new GeometryError("INVALID_ARGUMENT", message, { operation: `bounds${dimension}` });
7
7
  }
8
8
  function snapshot(input, dimension) {
9
- if (typeof input !== "object" || input === null)
10
- fail(dimension, "Bounds require minimum and maximum coordinate tuples.");
11
- const { min, max } = input;
9
+ if (typeof input !== "object" || input === null || Array.isArray(input))
10
+ fail(dimension, "Bounds require extrema or size.");
11
+ const { size, center } = input;
12
+ let min, max;
13
+ // Existing immutable bounds expose size()/center(); only a size value selects construction.
14
+ if ("size" in input && typeof size !== "function") {
15
+ if ("min" in input || "max" in input)
16
+ fail(dimension, "Supply size or min/max, never both.");
17
+ if (!Array.isArray(size) || size.length !== dimension)
18
+ fail(dimension, `Size requires ${dimension}D coordinates.`);
19
+ if (center !== undefined && typeof center !== "boolean")
20
+ fail(dimension, "center must be boolean.");
21
+ const coordinates = size;
22
+ const dimensions = Array.from({ length: dimension }, (_, axis) => {
23
+ const value = coordinates[axis];
24
+ if (typeof value !== "number" || !Number.isFinite(value) || value < 0)
25
+ fail(dimension, "Size must be finite and nonnegative.");
26
+ return value;
27
+ });
28
+ const centered = center ?? true;
29
+ min = dimensions.map((value) => (centered ? -value / 2 : 0));
30
+ max = dimensions.map((value) => (centered ? value / 2 : value));
31
+ }
32
+ else {
33
+ if (center !== undefined && typeof center !== "function")
34
+ fail(dimension, "center requires size construction.");
35
+ const extrema = input;
36
+ min = extrema.min;
37
+ max = extrema.max;
38
+ }
12
39
  if (!Array.isArray(min) ||
13
40
  !Array.isArray(max) ||
14
41
  min.length !== dimension ||
15
42
  max.length !== dimension)
16
43
  fail(dimension, `Bounds require matching ${dimension}D minimum and maximum tuples.`);
17
- const minimum = min, maximum = max;
18
44
  const copy = (source) => Object.freeze(Array.from({ length: dimension }, (_, axis) => {
19
45
  const value = source[axis];
20
46
  return value === 0 ? 0 : value;
21
47
  }));
22
- const data = Object.freeze({ min: copy(minimum), max: copy(maximum) });
48
+ const data = Object.freeze({ min: copy(min), max: copy(max) });
23
49
  validateBounds(data, `bounds${dimension}`);
24
50
  return data;
25
51
  }
@@ -70,23 +96,25 @@ const SpatialBounds = /* @__PURE__ */ immutableMathClass(class SpatialBounds {
70
96
  }
71
97
  });
72
98
  /**
73
- * Snapshots finite ordered XY bounds in millimetres as an immutable fluent value.
99
+ * Constructs immutable finite XY bounds from ordered extrema or nonnegative size in millimetres.
74
100
  *
75
101
  * Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
76
102
  * overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
103
+ * Size construction centers on the origin unless `center` is false. Size and extrema are exclusive.
77
104
  * Compiled Generator packages passing these values to host recipes or computed data require
78
- * runtime 8.0.0 or newer in major 8.
105
+ * runtime 9.0.0 or newer in major 9.
79
106
  */
80
107
  export function bounds2(input) {
81
108
  return new PlanarBounds(snapshot(input, 2));
82
109
  }
83
110
  /**
84
- * Snapshots finite ordered XYZ bounds in millimetres as an immutable fluent value.
111
+ * Constructs immutable finite XYZ bounds from ordered extrema or nonnegative size in millimetres.
85
112
  *
86
113
  * Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
87
114
  * overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
115
+ * Size construction centers on the origin unless `center` is false. Size and extrema are exclusive.
88
116
  * Compiled Generator packages passing these values to host recipes or computed data require
89
- * runtime 8.0.0 or newer in major 8.
117
+ * runtime 9.0.0 or newer in major 9.
90
118
  */
91
119
  export function bounds3(input) {
92
120
  return new SpatialBounds(snapshot(input, 3));
@@ -37,23 +37,6 @@ function size(bounds) {
37
37
  function center(bounds) {
38
38
  return bounds.min.map((value, axis) => value / 2 + bounds.max[axis] / 2);
39
39
  }
40
- export function boundsFromSize(dimensions, options = {}) {
41
- const operation = "boundsFromSize";
42
- if (!isArray(dimensions) ||
43
- (dimensions.length !== 2 && dimensions.length !== 3) ||
44
- Array.from(dimensions).some((value) => !Number.isFinite(value) || value < 0))
45
- fail(operation, "Bounds dimensions require two or three finite nonnegative values.");
46
- if (typeof options !== "object" ||
47
- options === null ||
48
- isArray(options) ||
49
- (options.center !== undefined && typeof options.center !== "boolean"))
50
- fail(operation, "Bounds placement requires an optional boolean center value.");
51
- const centered = options.center ?? true;
52
- return Object.freeze({
53
- min: vector(dimensions.map((value) => (centered ? -value / 2 : 0)), operation),
54
- max: vector(dimensions.map((value) => (centered ? value / 2 : value)), operation),
55
- });
56
- }
57
40
  export function boundsSize(bounds) {
58
41
  validateBounds(bounds, "boundsSize");
59
42
  return vector(size(bounds), "boundsSize");