@metamesh/modeling 0.18.0 → 0.20.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 (1035) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/README.md +96 -64
  3. package/dist/api/engine.d.ts +216 -160
  4. package/dist/api/export.d.ts +204 -0
  5. package/dist/api/geometry.d.ts +410 -2106
  6. package/dist/api/index.d.ts +545 -1821
  7. package/dist/api/math.d.ts +315 -0
  8. package/dist/api/mechanical.d.ts +1041 -0
  9. package/dist/api/mesh.d.ts +395 -94
  10. package/dist/api/text.d.ts +24 -44
  11. package/dist/docs/guides/concepts.md +54 -523
  12. package/dist/docs/guides/exporting.md +88 -0
  13. package/dist/docs/guides/fonts.md +7 -5
  14. package/dist/docs/guides/fundamentals.md +12 -24
  15. package/dist/docs/guides/generation.md +76 -61
  16. package/dist/docs/guides/geometry-values.md +251 -0
  17. package/dist/docs/guides/hosting.md +58 -80
  18. package/dist/docs/guides/profiles-and-extrusion.md +400 -0
  19. package/dist/docs/guides/recipes.md +52 -706
  20. package/dist/docs/guides/resolution-and-inspection.md +153 -0
  21. package/dist/docs/guides/solid-joins.md +136 -0
  22. package/dist/docs/guides/standalone-model.md +5 -3
  23. package/dist/docs/guides/svg-and-text.md +252 -0
  24. package/dist/docs/guides/sweeps-and-lofts.md +223 -0
  25. package/dist/docs/guides/transforms-and-placement.md +323 -0
  26. package/dist/docs/guides/workers.md +166 -0
  27. package/dist/docs/manifest.json +5539 -8603
  28. package/dist/docs/reference/engine/GenerationOptions.md +9 -4
  29. package/dist/docs/reference/engine/GeometryResource.md +11 -5
  30. package/dist/docs/reference/engine/ModelDependencies.md +9 -3
  31. package/dist/docs/reference/engine/ModelEngine.md +8 -3
  32. package/dist/docs/reference/engine/ModelEngineOptions.md +6 -5
  33. package/dist/docs/reference/engine/ModelPart.md +12 -6
  34. package/dist/docs/reference/engine/ModelResult.md +8 -2
  35. package/dist/docs/reference/engine/ModelRunArguments.md +7 -1
  36. package/dist/docs/reference/engine/ModelRunOptions.md +9 -4
  37. package/dist/docs/reference/engine/ModelSession.md +7 -1
  38. package/dist/docs/reference/engine/SessionOptions.md +9 -4
  39. package/dist/docs/reference/engine/categories/host-lifecycle.md +11 -10
  40. package/dist/docs/reference/engine/checkModel.md +11 -1
  41. package/dist/docs/reference/engine/createModelEngine.md +13 -4
  42. package/dist/docs/reference/engine/defaultModelingLimits.md +7 -8
  43. package/dist/docs/reference/engine/modelingWasmUrl.md +7 -1
  44. package/dist/docs/reference/engine.md +13 -7
  45. package/dist/docs/reference/export/Export3mfOptions.md +20 -0
  46. package/dist/docs/reference/export/ExportDiagnostic.md +47 -0
  47. package/dist/docs/reference/export/ExportFormat.md +13 -0
  48. package/dist/docs/reference/export/ExportGeometry.md +27 -0
  49. package/dist/docs/reference/export/ExportGlbOptions.md +114 -0
  50. package/dist/docs/reference/export/ExportLimits.md +71 -0
  51. package/dist/docs/reference/export/ExportMaterial.md +35 -0
  52. package/dist/docs/reference/export/ExportOptions.md +82 -0
  53. package/dist/docs/reference/export/ExportPart.md +76 -0
  54. package/dist/docs/reference/export/ExportReport.md +70 -0
  55. package/dist/docs/reference/export/ExportSink.md +29 -0
  56. package/dist/docs/reference/export/ExportStlOptions.md +20 -0
  57. package/dist/docs/reference/export/ExportedFile.md +98 -0
  58. package/dist/docs/reference/export/categories/mesh-serialization.md +53 -0
  59. package/dist/docs/reference/export/defaultExportLimits.md +20 -0
  60. package/dist/docs/reference/export/export3mf.md +62 -0
  61. package/dist/docs/reference/export/exportGlb.md +66 -0
  62. package/dist/docs/reference/export/exportStl.md +62 -0
  63. package/dist/docs/reference/export/write3mf.md +71 -0
  64. package/dist/docs/reference/export/writeGlb.md +75 -0
  65. package/dist/docs/reference/export/writeStl.md +71 -0
  66. package/dist/docs/reference/export.md +27 -0
  67. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +9 -3
  68. package/dist/docs/reference/geometry/Anchor3-type.md +9 -3
  69. package/dist/docs/reference/geometry/Anchor3Options.md +70 -0
  70. package/dist/docs/reference/geometry/ArcCurve2.md +8 -2
  71. package/dist/docs/reference/geometry/ArcCurve3.md +8 -2
  72. package/dist/docs/reference/geometry/AttachOptions.md +10 -5
  73. package/dist/docs/reference/geometry/Bounds2-type.md +17 -24
  74. package/dist/docs/reference/geometry/Bounds2Data.md +10 -9
  75. package/dist/docs/reference/geometry/Bounds2Input.md +10 -4
  76. package/dist/docs/reference/geometry/Bounds2Options.md +10 -4
  77. package/dist/docs/reference/geometry/Bounds3-type.md +17 -24
  78. package/dist/docs/reference/geometry/Bounds3Data.md +10 -9
  79. package/dist/docs/reference/geometry/Bounds3Input.md +10 -4
  80. package/dist/docs/reference/geometry/Bounds3Options.md +10 -4
  81. package/dist/docs/reference/geometry/BoundsFit2.md +10 -4
  82. package/dist/docs/reference/geometry/BoundsFit3.md +10 -4
  83. package/dist/docs/reference/geometry/BoundsFitOptions.md +10 -4
  84. package/dist/docs/reference/geometry/BoxAnchorFace.md +9 -3
  85. package/dist/docs/reference/geometry/BoxAnchorOptions.md +9 -3
  86. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +8 -2
  87. package/dist/docs/reference/geometry/CircleContourOptions.md +8 -2
  88. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +8 -3
  89. package/dist/docs/reference/geometry/CircularResolutionOptions.md +7 -1
  90. package/dist/docs/reference/geometry/CircularSampling.md +7 -1
  91. package/dist/docs/reference/geometry/CircularSamplingOptions.md +7 -1
  92. package/dist/docs/reference/geometry/Contour.md +9 -4
  93. package/dist/docs/reference/geometry/ContourCurve.md +8 -2
  94. package/dist/docs/reference/geometry/ContourPoint.md +8 -2
  95. package/dist/docs/reference/geometry/ContourSegment.md +8 -2
  96. package/dist/docs/reference/geometry/CorrespondingComponent.md +8 -2
  97. package/dist/docs/reference/geometry/CorrespondingContour.md +8 -2
  98. package/dist/docs/reference/geometry/CorrespondingProfile.md +8 -2
  99. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +9 -3
  100. package/dist/docs/reference/geometry/CubicBezierCurve2.md +8 -2
  101. package/dist/docs/reference/geometry/CubicBezierCurve3.md +8 -2
  102. package/dist/docs/reference/geometry/Curve2.md +8 -2
  103. package/dist/docs/reference/geometry/Curve3.md +8 -2
  104. package/dist/docs/reference/geometry/CurveSamplingOptions.md +8 -2
  105. package/dist/docs/reference/geometry/CylinderAnchorFace.md +9 -3
  106. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +10 -4
  107. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -1
  108. package/dist/docs/reference/geometry/EdgeTreatment.md +7 -1
  109. package/dist/docs/reference/geometry/EllipseContourOptions.md +8 -2
  110. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +15 -10
  111. package/dist/docs/reference/geometry/FittedTextLayout.md +8 -2
  112. package/dist/docs/reference/geometry/{Frame3.md → Frame3-type.md} +9 -2
  113. package/dist/docs/reference/geometry/Frame3Options.md +69 -0
  114. package/dist/docs/reference/geometry/GeometryError.md +7 -1
  115. package/dist/docs/reference/geometry/GeometryErrorCode.md +7 -1
  116. package/dist/docs/reference/geometry/GeometryErrorContext.md +7 -1
  117. package/dist/docs/reference/geometry/GeometryResolution.md +7 -1
  118. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +8 -2
  119. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +8 -2
  120. package/dist/docs/reference/geometry/GridPatternOptions.md +13 -5
  121. package/dist/docs/reference/geometry/ImmutableBuffer-type.md +8 -14
  122. package/dist/docs/reference/geometry/LineCurve2.md +8 -2
  123. package/dist/docs/reference/geometry/LineCurve3.md +8 -2
  124. package/dist/docs/reference/geometry/LinearPatternOptions.md +8 -2
  125. package/dist/docs/reference/geometry/LoftPlacement.md +19 -13
  126. package/dist/docs/reference/geometry/MatchProfilesOptions.md +8 -2
  127. package/dist/docs/reference/geometry/ModelingLimits.md +7 -1
  128. package/dist/docs/reference/geometry/NumericArray.md +8 -2
  129. package/dist/docs/reference/geometry/Path2-type.md +158 -3
  130. package/dist/docs/reference/geometry/Path2Data.md +8 -2
  131. package/dist/docs/reference/geometry/Path2Input.md +8 -2
  132. package/dist/docs/reference/geometry/Path3-type.md +158 -3
  133. package/dist/docs/reference/geometry/Path3Data.md +8 -2
  134. package/dist/docs/reference/geometry/Path3Input.md +8 -2
  135. package/dist/docs/reference/geometry/PathFrame.md +8 -2
  136. package/dist/docs/reference/geometry/PathLocation.md +8 -2
  137. package/dist/docs/reference/geometry/PathNormalGuide.md +9 -3
  138. package/dist/docs/reference/geometry/PathOptions.md +8 -2
  139. package/dist/docs/reference/geometry/PathPatternOptions.md +9 -3
  140. package/dist/docs/reference/geometry/PathPlacement.md +10 -4
  141. package/dist/docs/reference/geometry/PathResamplingOptions.md +8 -2
  142. package/dist/docs/reference/geometry/PathStation.md +87 -0
  143. package/dist/docs/reference/geometry/PathSubdivisionOptions.md +44 -0
  144. package/dist/docs/reference/geometry/Pivot2Options.md +9 -3
  145. package/dist/docs/reference/geometry/Pivot3Options.md +9 -3
  146. package/dist/docs/reference/geometry/PolygonData.md +9 -3
  147. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +8 -2
  148. package/dist/docs/reference/geometry/Profile.md +8 -3
  149. package/dist/docs/reference/geometry/ProfileComponent2.md +8 -2
  150. package/dist/docs/reference/geometry/ProfileContour2.md +8 -2
  151. package/dist/docs/reference/geometry/ProfileSpan2.md +8 -2
  152. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +10 -3
  153. package/dist/docs/reference/geometry/RadialPatternOptions.md +8 -2
  154. package/dist/docs/reference/geometry/RadialSizing.md +7 -1
  155. package/dist/docs/reference/geometry/RadialSizingOptions.md +7 -1
  156. package/dist/docs/reference/geometry/RectangleContourOptions.md +9 -2
  157. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +8 -2
  158. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +8 -2
  159. package/dist/docs/reference/geometry/RectangleProfileOptions.md +8 -2
  160. package/dist/docs/reference/geometry/RegionData.md +8 -2
  161. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +8 -2
  162. package/dist/docs/reference/geometry/ResolvedGeometryResolution.md +71 -0
  163. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +7 -1
  164. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +7 -1
  165. package/dist/docs/reference/geometry/RowLayoutOptions.md +10 -4
  166. package/dist/docs/reference/geometry/SampleContourOptions.md +8 -2
  167. package/dist/docs/reference/geometry/SampleHelixOptions.md +8 -2
  168. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +8 -2
  169. package/dist/docs/reference/geometry/SampledCurve2.md +8 -2
  170. package/dist/docs/reference/geometry/SampledCurve3.md +8 -2
  171. package/dist/docs/reference/geometry/SideProfileCurve.md +8 -2
  172. package/dist/docs/reference/geometry/SideProfilePoint.md +8 -2
  173. package/dist/docs/reference/geometry/SideProfileSegment.md +8 -2
  174. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +7 -1
  175. package/dist/docs/reference/geometry/SplineOptions.md +69 -0
  176. package/dist/docs/reference/geometry/StarContourOptions.md +12 -2
  177. package/dist/docs/reference/geometry/StrokeCap.md +8 -2
  178. package/dist/docs/reference/geometry/StrokeJoin.md +8 -2
  179. package/dist/docs/reference/geometry/StrokeOptions.md +9 -3
  180. package/dist/docs/reference/geometry/SvgImportOptions.md +10 -4
  181. package/dist/docs/reference/geometry/SvgRegionPreflight.md +8 -2
  182. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +8 -2
  183. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +8 -2
  184. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +8 -2
  185. package/dist/docs/reference/geometry/Transform2-type.md +9 -3
  186. package/dist/docs/reference/geometry/Transform2Data.md +9 -3
  187. package/dist/docs/reference/geometry/Transform2Input.md +9 -3
  188. package/dist/docs/reference/geometry/Transform3-type.md +10 -4
  189. package/dist/docs/reference/geometry/Transform3Data.md +9 -3
  190. package/dist/docs/reference/geometry/Transform3Input.md +12 -5
  191. package/dist/docs/reference/geometry/Vector2-type.md +9 -3
  192. package/dist/docs/reference/geometry/Vector2Data.md +9 -3
  193. package/dist/docs/reference/geometry/Vector2Input.md +9 -3
  194. package/dist/docs/reference/geometry/Vector3-type.md +33 -3
  195. package/dist/docs/reference/geometry/Vector3Data.md +9 -3
  196. package/dist/docs/reference/geometry/Vector3Input.md +9 -3
  197. package/dist/docs/reference/geometry/VectorTextLayout.md +8 -2
  198. package/dist/docs/reference/geometry/VectorTextMetrics.md +9 -3
  199. package/dist/docs/reference/geometry/anchor3.md +23 -26
  200. package/dist/docs/reference/geometry/anchorFrame3.md +11 -5
  201. package/dist/docs/reference/geometry/attachmentTransform3.md +14 -8
  202. package/dist/docs/reference/geometry/bounds2.md +16 -8
  203. package/dist/docs/reference/geometry/bounds3.md +14 -6
  204. package/dist/docs/reference/geometry/boundsCenter.md +10 -4
  205. package/dist/docs/reference/geometry/boundsSize.md +10 -4
  206. package/dist/docs/reference/geometry/boxAnchor3.md +9 -3
  207. package/dist/docs/reference/geometry/categories/bounds-layout.md +12 -6
  208. package/dist/docs/reference/geometry/categories/curves-paths.md +24 -13
  209. package/dist/docs/reference/geometry/categories/immutable-data.md +40 -0
  210. package/dist/docs/reference/geometry/categories/pattern-placement.md +11 -5
  211. package/dist/docs/reference/geometry/categories/primitive-options.md +8 -13
  212. package/dist/docs/reference/geometry/categories/profiles-regions.md +11 -5
  213. package/dist/docs/reference/geometry/categories/resolution-errors.md +8 -1
  214. package/dist/docs/reference/geometry/categories/transforms-math.md +20 -51
  215. package/dist/docs/reference/geometry/categories/vector-import.md +8 -5
  216. package/dist/docs/reference/geometry/circleContour.md +8 -2
  217. package/dist/docs/reference/geometry/closeToAxis.md +12 -2
  218. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +14 -5
  219. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +18 -5
  220. package/dist/docs/reference/geometry/contourContainsPoint.md +12 -2
  221. package/dist/docs/reference/geometry/cylinderAnchor3.md +11 -5
  222. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +8 -2
  223. package/dist/docs/reference/geometry/distributeAlongPath.md +21 -10
  224. package/dist/docs/reference/geometry/ellipseContour.md +8 -2
  225. package/dist/docs/reference/geometry/fitBounds.md +18 -4
  226. package/dist/docs/reference/geometry/fitTextLayout.md +11 -5
  227. package/dist/docs/reference/geometry/frame3.md +66 -0
  228. package/dist/docs/reference/geometry/gridPatternTransforms.md +12 -6
  229. package/dist/docs/reference/geometry/immutableBuffer.md +11 -3
  230. package/dist/docs/reference/geometry/isGeometryError.md +7 -1
  231. package/dist/docs/reference/geometry/layoutRow.md +12 -4
  232. package/dist/docs/reference/geometry/linearPatternTransforms.md +12 -6
  233. package/dist/docs/reference/geometry/matchProfiles.md +10 -2
  234. package/dist/docs/reference/geometry/normalizeContour.md +13 -3
  235. package/dist/docs/reference/geometry/normalizePolygon.md +10 -2
  236. package/dist/docs/reference/geometry/normalizeRegion.md +10 -2
  237. package/dist/docs/reference/geometry/path2.md +12 -2
  238. package/dist/docs/reference/geometry/path3.md +12 -2
  239. package/dist/docs/reference/geometry/pathPatternTransforms.md +18 -8
  240. package/dist/docs/reference/geometry/preflightSvgRegion.md +11 -5
  241. package/dist/docs/reference/geometry/radialPatternTransforms.md +11 -5
  242. package/dist/docs/reference/geometry/rectangleContour.md +8 -2
  243. package/dist/docs/reference/geometry/rectangleProfile.md +8 -3
  244. package/dist/docs/reference/geometry/regionArea.md +8 -2
  245. package/dist/docs/reference/geometry/regionBounds.md +11 -3
  246. package/dist/docs/reference/geometry/regularPolygonContour.md +8 -2
  247. package/dist/docs/reference/geometry/resamplePolyline2.md +12 -2
  248. package/dist/docs/reference/geometry/resamplePolyline3.md +12 -2
  249. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +10 -4
  250. package/dist/docs/reference/geometry/resolveArcSegments.md +13 -5
  251. package/dist/docs/reference/geometry/resolveCircularSampling.md +7 -1
  252. package/dist/docs/reference/geometry/resolveCircularSegments.md +10 -2
  253. package/dist/docs/reference/geometry/resolveExtrusionSlices.md +85 -0
  254. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +10 -2
  255. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +8 -2
  256. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +17 -4
  257. package/dist/docs/reference/geometry/sampleContour.md +10 -4
  258. package/dist/docs/reference/geometry/sampleCurve2.md +12 -2
  259. package/dist/docs/reference/geometry/sampleCurve3.md +12 -2
  260. package/dist/docs/reference/geometry/sampleHelix.md +8 -2
  261. package/dist/docs/reference/geometry/sampleSideProfile.md +10 -4
  262. package/dist/docs/reference/geometry/sampleTextContours.md +9 -3
  263. package/dist/docs/reference/geometry/signedContourArea.md +10 -2
  264. package/dist/docs/reference/geometry/spline2.md +68 -0
  265. package/dist/docs/reference/geometry/spline3.md +62 -0
  266. package/dist/docs/reference/geometry/starContour.md +8 -2
  267. package/dist/docs/reference/geometry/strokeRegionData.md +14 -5
  268. package/dist/docs/reference/geometry/transform2.md +11 -3
  269. package/dist/docs/reference/geometry/transform3.md +29 -6
  270. package/dist/docs/reference/geometry/transformRegionData.md +12 -2
  271. package/dist/docs/reference/geometry/triangulateContour.md +11 -3
  272. package/dist/docs/reference/geometry/vector2.md +12 -4
  273. package/dist/docs/reference/geometry/vector3.md +14 -4
  274. package/dist/docs/reference/geometry.md +13 -18
  275. package/dist/docs/reference/{geometry → math}/AxisAngleRotation3.md +8 -3
  276. package/dist/docs/reference/math/IDENTITY_TRANSFORM3.md +20 -0
  277. package/dist/docs/reference/math/add2.md +38 -0
  278. package/dist/docs/reference/math/add3.md +46 -0
  279. package/dist/docs/reference/math/applyTransformDirection3.md +46 -0
  280. package/dist/docs/reference/math/applyTransformPoint3.md +44 -0
  281. package/dist/docs/reference/math/categories/tuple-matrix.md +67 -0
  282. package/dist/docs/reference/math/cross2.md +38 -0
  283. package/dist/docs/reference/math/cross3.md +44 -0
  284. package/dist/docs/reference/math/distance2.md +38 -0
  285. package/dist/docs/reference/math/distance3.md +38 -0
  286. package/dist/docs/reference/math/dot2.md +38 -0
  287. package/dist/docs/reference/math/dot3.md +44 -0
  288. package/dist/docs/reference/math/eulerTransform3.md +43 -0
  289. package/dist/docs/reference/math/inverseTransform3.md +36 -0
  290. package/dist/docs/reference/math/length2.md +32 -0
  291. package/dist/docs/reference/math/length3.md +32 -0
  292. package/dist/docs/reference/math/lerp2.md +46 -0
  293. package/dist/docs/reference/math/lerp3.md +46 -0
  294. package/dist/docs/reference/math/multiplyTransform3.md +46 -0
  295. package/dist/docs/reference/math/normalize2.md +45 -0
  296. package/dist/docs/reference/math/normalize3.md +45 -0
  297. package/dist/docs/reference/math/projectOntoPlane3.md +40 -0
  298. package/dist/docs/reference/math/rotate2.md +40 -0
  299. package/dist/docs/reference/math/rotationTransform3.md +56 -0
  300. package/dist/docs/reference/math/scale2.md +38 -0
  301. package/dist/docs/reference/math/scale3.md +44 -0
  302. package/dist/docs/reference/math/scaleTransform3.md +39 -0
  303. package/dist/docs/reference/math/subtract2.md +38 -0
  304. package/dist/docs/reference/math/subtract3.md +44 -0
  305. package/dist/docs/reference/math/transformDeterminant3.md +38 -0
  306. package/dist/docs/reference/math/translationTransform3.md +36 -0
  307. package/dist/docs/reference/math/validateRigidTransform3.md +38 -0
  308. package/dist/docs/reference/math/validateTransform3.md +48 -0
  309. package/dist/docs/reference/math.md +22 -0
  310. package/dist/docs/reference/{geometry → mechanical}/AcmeThreadProfileSpec.md +9 -4
  311. package/dist/docs/reference/{geometry → mechanical}/Bevel.md +8 -2
  312. package/dist/docs/reference/{geometry → mechanical}/BevelSize.md +8 -2
  313. package/dist/docs/reference/{geometry → mechanical}/ButtressPressureFlankSide.md +8 -2
  314. package/dist/docs/reference/{geometry → mechanical}/ButtressThreadProfileSpec.md +9 -4
  315. package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleDimensions.md +8 -2
  316. package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleFit.md +8 -2
  317. package/dist/docs/reference/{geometry → mechanical}/CompensatedThreadDiameters.md +8 -2
  318. package/dist/docs/reference/{geometry → mechanical}/CustomThreadProfileSpec.md +10 -6
  319. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearDimensions.md +8 -2
  320. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearMeshKind.md +8 -2
  321. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearOutlineOptions.md +9 -8
  322. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairDimensions.md +8 -2
  323. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionOptions.md +8 -2
  324. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionReport.md +8 -2
  325. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairSpec.md +8 -2
  326. package/dist/docs/reference/{geometry → mechanical}/CylindricalGearSpec.md +8 -2
  327. package/dist/docs/reference/{geometry → mechanical}/InternalThreadCutterOptions.md +11 -8
  328. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeBaseSpec.md +8 -2
  329. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeDimensions.md +9 -4
  330. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeInterval.md +8 -2
  331. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSamplingOptions.md +9 -8
  332. package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSpec.md +8 -2
  333. package/dist/docs/reference/{geometry → mechanical}/METRIC_FASTENER_STANDARDS.md +8 -2
  334. package/dist/docs/reference/{geometry → mechanical}/MetricFastenerSize.md +8 -2
  335. package/dist/docs/reference/{geometry → mechanical}/MetricFastenerStandard.md +8 -2
  336. package/dist/docs/reference/{geometry → mechanical}/MetricHexNutDimensions.md +8 -2
  337. package/dist/docs/reference/{geometry → mechanical}/MetricSocketCapHeadDimensions.md +8 -2
  338. package/dist/docs/reference/{geometry → mechanical}/PRINTABLE_THREAD_FIT_POLICIES.md +8 -2
  339. package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFit.md +8 -2
  340. package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFitPolicy.md +8 -2
  341. package/dist/docs/reference/{geometry → mechanical}/RackPitchDimensions.md +8 -2
  342. package/dist/docs/reference/{geometry → mechanical}/RackPitchSpec.md +8 -2
  343. package/dist/docs/reference/{geometry → mechanical}/SampledThreadHelices.md +8 -6
  344. package/dist/docs/reference/{geometry → mechanical}/SquareThreadProfileSpec.md +9 -4
  345. package/dist/docs/reference/{geometry → mechanical}/ThreadBevelOptions.md +8 -2
  346. package/dist/docs/reference/{geometry → mechanical}/ThreadCircularSegmentsOptions.md +10 -6
  347. package/dist/docs/reference/{geometry → mechanical}/ThreadCompensationOptions.md +9 -4
  348. package/dist/docs/reference/{geometry → mechanical}/ThreadEndStyle.md +8 -2
  349. package/dist/docs/reference/{geometry → mechanical}/ThreadEndTreatmentOptions.md +8 -2
  350. package/dist/docs/reference/{geometry → mechanical}/ThreadHandedness.md +8 -2
  351. package/dist/docs/reference/{geometry → mechanical}/ThreadHelixOptions.md +10 -6
  352. package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInEnvelope.md +8 -2
  353. package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInShape.md +8 -2
  354. package/dist/docs/reference/{mesh/ThreadProfile.md → mechanical/ThreadProfile-type.md} +8 -6
  355. package/dist/docs/reference/{geometry → mechanical}/ThreadProfileBaseSpec.md +9 -4
  356. package/dist/docs/reference/{geometry → mechanical}/ThreadProfileSpec.md +8 -2
  357. package/dist/docs/reference/{geometry → mechanical}/ThreadRidgeOptions.md +12 -9
  358. package/dist/docs/reference/{geometry → mechanical}/ThreadRole.md +8 -2
  359. package/dist/docs/reference/{geometry → mechanical}/ThreadSolidOptions.md +13 -10
  360. package/dist/docs/reference/{geometry → mechanical}/ThreadSolidPreflight.md +8 -2
  361. package/dist/docs/reference/{geometry → mechanical}/ThreadedNutOptions.md +12 -9
  362. package/dist/docs/reference/{geometry → mechanical}/ThreadedNutPreflight.md +8 -2
  363. package/dist/docs/reference/mechanical/ThreadedNutShape.md +20 -0
  364. package/dist/docs/reference/{geometry → mechanical}/ThreadedRodOptions.md +11 -8
  365. package/dist/docs/reference/{geometry → mechanical}/TrapezoidalThreadProfileSpec.md +9 -4
  366. package/dist/docs/reference/{geometry → mechanical}/TriangularThreadProfileSpec.md +9 -4
  367. package/dist/docs/reference/{geometry → mechanical}/categories/mechanical.md +9 -3
  368. package/dist/docs/reference/{geometry → mechanical}/compensateThreadDiameters.md +9 -3
  369. package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileAxially.md +17 -5
  370. package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileForFaceting.md +18 -2
  371. package/dist/docs/reference/{geometry → mechanical}/getMetricClearanceHoleDiameter.md +8 -2
  372. package/dist/docs/reference/{geometry → mechanical}/getMetricFastenerStandard.md +8 -2
  373. package/dist/docs/reference/{geometry → mechanical}/measureInternalCylindricalGearPairMotion.md +14 -6
  374. package/dist/docs/reference/{geometry → mechanical}/minimumCylindricalGearToothCountWithoutUndercut.md +10 -2
  375. package/dist/docs/reference/{geometry → mechanical}/preflightInternalThreadCutter.md +13 -5
  376. package/dist/docs/reference/{geometry → mechanical}/preflightThreadedNut.md +14 -6
  377. package/dist/docs/reference/{geometry → mechanical}/preflightThreadedRod.md +13 -5
  378. package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGear.md +10 -2
  379. package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGearPair.md +10 -2
  380. package/dist/docs/reference/{geometry → mechanical}/resolveKnuckleHinge.md +14 -6
  381. package/dist/docs/reference/{geometry → mechanical}/resolvePrintableThreadFitPolicy.md +10 -2
  382. package/dist/docs/reference/{geometry → mechanical}/resolveRackPitch.md +10 -2
  383. package/dist/docs/reference/{geometry → mechanical}/resolveThreadCircularSegments.md +12 -4
  384. package/dist/docs/reference/{geometry → mechanical}/sampleCylindricalGearOutline.md +14 -7
  385. package/dist/docs/reference/{geometry → mechanical}/sampleInternalCylindricalGearSpaceOutline.md +14 -7
  386. package/dist/docs/reference/{geometry → mechanical}/sampleRackToothPath.md +15 -7
  387. package/dist/docs/reference/{geometry → mechanical}/sampleThreadHelices.md +13 -5
  388. package/dist/docs/reference/{geometry → mechanical}/threadProfile.md +12 -2
  389. package/dist/docs/reference/mechanical.md +19 -0
  390. package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +39 -40
  391. package/dist/docs/reference/mesh/HeightfieldMeshLimits.md +8 -6
  392. package/dist/docs/reference/mesh/HeightfieldPreflight.md +8 -2
  393. package/dist/docs/reference/mesh/ImmutableTriangleMesh.md +8 -6
  394. package/dist/docs/reference/mesh/LoftMeshStation.md +8 -7
  395. package/dist/docs/reference/mesh/MeshRenderOptions.md +28 -0
  396. package/dist/docs/reference/mesh/PlanarMeshOptimizationFallbackReason.md +9 -3
  397. package/dist/docs/reference/mesh/PlanarMeshOptimizationOptions.md +11 -6
  398. package/dist/docs/reference/mesh/PlanarMeshOptimizationResult.md +13 -7
  399. package/dist/docs/reference/mesh/PlanarPatchQuality.md +7 -5
  400. package/dist/docs/reference/mesh/RenderMesh.md +68 -0
  401. package/dist/docs/reference/mesh/SolidMeshValidationOptions.md +7 -5
  402. package/dist/docs/reference/mesh/TriangleMesh.md +16 -2
  403. package/dist/docs/reference/mesh/TriangleMeshAnalysis.md +16 -11
  404. package/dist/docs/reference/mesh/TriangleMeshAnalysisOptions.md +12 -7
  405. package/dist/docs/reference/mesh/TriangleMeshInput.md +9 -3
  406. package/dist/docs/reference/mesh/TriangleMeshMeasurements.md +10 -5
  407. package/dist/docs/reference/mesh/TriangleMeshQualityOptions.md +9 -4
  408. package/dist/docs/reference/mesh/TriangleMeshQualityReport.md +9 -3
  409. package/dist/docs/reference/mesh/TriangleMeshSignature.md +9 -4
  410. package/dist/docs/reference/mesh/TriangleMeshSignatureOptions.md +8 -2
  411. package/dist/docs/reference/mesh/TriangleMeshSignatureTolerances.md +8 -2
  412. package/dist/docs/reference/mesh/TriangleMeshTopologyAnalysis.md +17 -12
  413. package/dist/docs/reference/mesh/TriangleMeshValidationOptions.md +9 -4
  414. package/dist/docs/reference/mesh/analyze.md +28 -14
  415. package/dist/docs/reference/mesh/analyzeQuality.md +15 -9
  416. package/dist/docs/reference/mesh/bounds.md +10 -5
  417. package/dist/docs/reference/mesh/categories/operations.md +24 -81
  418. package/dist/docs/reference/mesh/centroid.md +10 -5
  419. package/dist/docs/reference/mesh/extrude.md +25 -18
  420. package/dist/docs/reference/mesh/heightfield.md +13 -7
  421. package/dist/docs/reference/mesh/immutable.md +16 -10
  422. package/dist/docs/reference/mesh/join.md +11 -5
  423. package/dist/docs/reference/mesh/loft.md +23 -16
  424. package/dist/docs/reference/mesh/optimizePlanarPatches.md +24 -18
  425. package/dist/docs/reference/mesh/preflightHeightfield.md +13 -7
  426. package/dist/docs/reference/mesh/preflightThreadSolid.md +27 -24
  427. package/dist/docs/reference/mesh/render.md +59 -0
  428. package/dist/docs/reference/mesh/reverse.md +11 -5
  429. package/dist/docs/reference/mesh/revolve.md +17 -13
  430. package/dist/docs/reference/mesh/signature.md +15 -9
  431. package/dist/docs/reference/mesh/sweep.md +101 -24
  432. package/dist/docs/reference/mesh/threadRidge.md +24 -17
  433. package/dist/docs/reference/mesh/threadSolid.md +28 -21
  434. package/dist/docs/reference/mesh/transform.md +12 -7
  435. package/dist/docs/reference/mesh/validate.md +15 -9
  436. package/dist/docs/reference/mesh/validateSolid.md +14 -8
  437. package/dist/docs/reference/mesh.md +8 -2
  438. package/dist/docs/reference/model/BoxEdge.md +11 -3
  439. package/dist/docs/reference/model/BoxEdgeSelection.md +11 -3
  440. package/dist/docs/reference/model/BoxEdgeTreatments.md +12 -5
  441. package/dist/docs/reference/model/BoxOptions.md +14 -9
  442. package/dist/docs/reference/model/CircleOptions.md +11 -6
  443. package/dist/docs/reference/model/CornerCutterOptions.md +93 -0
  444. package/dist/docs/reference/model/CornerCutterTreatment.md +53 -0
  445. package/dist/docs/reference/model/CutterOverrun.md +43 -0
  446. package/dist/docs/reference/model/CylinderOptions.md +12 -6
  447. package/dist/docs/reference/model/DiagnosticOptions.md +7 -1
  448. package/dist/docs/reference/model/EdgeCutterOptions.md +129 -0
  449. package/dist/docs/reference/model/EllipseOptions.md +11 -6
  450. package/dist/docs/reference/model/EndTreatments.md +13 -9
  451. package/dist/docs/reference/model/ExtrudeOptions.md +48 -44
  452. package/dist/docs/reference/model/GenerateCallback.md +7 -1
  453. package/dist/docs/reference/model/GenerateContext.md +23 -24
  454. package/dist/docs/reference/model/GenerationDiagnostic.md +7 -1
  455. package/dist/docs/reference/model/GenerationError.md +8 -2
  456. package/dist/docs/reference/model/HeightfieldOptions.md +8 -8
  457. package/dist/docs/reference/model/HoleCutterOpening.md +27 -0
  458. package/dist/docs/reference/model/HoleCutterOptions.md +19 -25
  459. package/dist/docs/reference/model/HoleCutterRecess.md +13 -5
  460. package/dist/docs/reference/model/HullOptions.md +12 -6
  461. package/dist/docs/reference/model/ImmutableValue.md +7 -1
  462. package/dist/docs/reference/model/ImplicitOptions.md +9 -9
  463. package/dist/docs/reference/model/JoinOptions.md +73 -0
  464. package/dist/docs/reference/model/JoinTransition.md +54 -0
  465. package/dist/docs/reference/model/KnuckleHinge-type.md +8 -3
  466. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +7 -1
  467. package/dist/docs/reference/model/KnuckleHingeOptions.md +8 -4
  468. package/dist/docs/reference/model/KnuckleHingeWeb.md +7 -1
  469. package/dist/docs/reference/model/LoftCorrespondence.md +13 -5
  470. package/dist/docs/reference/model/LoftOptions.md +16 -10
  471. package/dist/docs/reference/model/LoftStation.md +16 -10
  472. package/dist/docs/reference/model/Memo.md +54 -0
  473. package/dist/docs/reference/model/ModelProgram.md +7 -1
  474. package/dist/docs/reference/model/PartDeclaration.md +12 -8
  475. package/dist/docs/reference/model/PartGeometry.md +8 -4
  476. package/dist/docs/reference/model/PartOptions.md +12 -8
  477. package/dist/docs/reference/model/PatternSource.md +11 -5
  478. package/dist/docs/reference/model/PlaneOptions.md +11 -8
  479. package/dist/docs/reference/model/PolygonOptions.md +17 -16
  480. package/dist/docs/reference/model/PrimitiveAttachment.md +15 -4
  481. package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +18 -17
  482. package/dist/docs/reference/model/RectangleOptions.md +31 -30
  483. package/dist/docs/reference/model/RegularPolygonOptions.md +11 -38
  484. package/dist/docs/reference/model/RevolveOptions.md +19 -17
  485. package/dist/docs/reference/model/Section.md +128 -72
  486. package/dist/docs/reference/model/SectionHullOptions.md +12 -6
  487. package/dist/docs/reference/model/SectionInspection.md +8 -6
  488. package/dist/docs/reference/model/SectionOffsetJoin.md +10 -4
  489. package/dist/docs/reference/model/SectionOffsetOptions.md +11 -6
  490. package/dist/docs/reference/model/Solid.md +113 -53
  491. package/dist/docs/reference/model/SolidInspection.md +8 -6
  492. package/dist/docs/reference/model/SolidSegmentHit.md +9 -7
  493. package/dist/docs/reference/model/SphereOptions.md +12 -5
  494. package/dist/docs/reference/model/StarOptions.md +33 -29
  495. package/dist/docs/reference/model/SvgOrigin.md +10 -4
  496. package/dist/docs/reference/model/SvgPathSectionOptions.md +13 -9
  497. package/dist/docs/reference/model/SvgSectionOptions.md +14 -11
  498. package/dist/docs/reference/model/SweepOptions.md +21 -28
  499. package/dist/docs/reference/model/SweepOrientation.md +19 -16
  500. package/dist/docs/reference/model/SweepTransformOptions.md +105 -0
  501. package/dist/docs/reference/model/TextSectionOptions.md +11 -10
  502. package/dist/docs/reference/model/TorusOptions.md +13 -7
  503. package/dist/docs/reference/model/TubeOptions.md +25 -8
  504. package/dist/docs/reference/model/box.md +14 -6
  505. package/dist/docs/reference/model/categories/boolean-operations.md +16 -4
  506. package/dist/docs/reference/model/categories/bounded-surfaces.md +7 -1
  507. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +21 -16
  508. package/dist/docs/reference/model/categories/generation.md +15 -12
  509. package/dist/docs/reference/model/categories/hinges.md +7 -4
  510. package/dist/docs/reference/model/categories/mesh-inspection.md +8 -6
  511. package/dist/docs/reference/model/categories/primitives.md +32 -20
  512. package/dist/docs/reference/model/categories/sections.md +11 -16
  513. package/dist/docs/reference/model/categories/threads.md +9 -43
  514. package/dist/docs/reference/model/categories/transforms-placement.md +17 -41
  515. package/dist/docs/reference/model/circle.md +15 -5
  516. package/dist/docs/reference/model/cornerCutter.md +88 -0
  517. package/dist/docs/reference/model/cylinder.md +11 -3
  518. package/dist/docs/reference/model/edgeCutter.md +91 -0
  519. package/dist/docs/reference/model/ellipse.md +15 -5
  520. package/dist/docs/reference/model/extrude.md +37 -24
  521. package/dist/docs/reference/model/generate.md +10 -2
  522. package/dist/docs/reference/model/gridPattern.md +22 -9
  523. package/dist/docs/reference/model/heightfield.md +7 -1
  524. package/dist/docs/reference/model/holeCutter.md +34 -13
  525. package/dist/docs/reference/model/hull.md +9 -2
  526. package/dist/docs/reference/model/implicit.md +10 -4
  527. package/dist/docs/reference/model/internalThreadCutter.md +38 -21
  528. package/dist/docs/reference/model/intersect.md +14 -3
  529. package/dist/docs/reference/model/join.md +93 -0
  530. package/dist/docs/reference/model/knuckleHinge.md +7 -2
  531. package/dist/docs/reference/model/linearPattern.md +22 -9
  532. package/dist/docs/reference/model/loft.md +27 -16
  533. package/dist/docs/reference/model/minkowskiSum.md +10 -3
  534. package/dist/docs/reference/model/pathPattern.md +36 -21
  535. package/dist/docs/reference/model/polygon.md +18 -7
  536. package/dist/docs/reference/model/radialPattern.md +22 -9
  537. package/dist/docs/reference/model/rectangle.md +22 -12
  538. package/dist/docs/reference/model/regularPolygon.md +15 -5
  539. package/dist/docs/reference/model/revolve.md +26 -13
  540. package/dist/docs/reference/model/solidFromMesh.md +16 -6
  541. package/dist/docs/reference/model/sphere.md +12 -4
  542. package/dist/docs/reference/model/star.md +20 -10
  543. package/dist/docs/reference/model/stroke.md +29 -19
  544. package/dist/docs/reference/model/svgPathSection.md +20 -8
  545. package/dist/docs/reference/model/svgSection.md +21 -9
  546. package/dist/docs/reference/model/sweep.md +108 -24
  547. package/dist/docs/reference/model/textSection.md +19 -9
  548. package/dist/docs/reference/model/threadRidge.md +22 -17
  549. package/dist/docs/reference/model/threadedNut.md +31 -22
  550. package/dist/docs/reference/model/threadedRod.md +27 -18
  551. package/dist/docs/reference/model/torus.md +13 -5
  552. package/dist/docs/reference/model/tube.md +11 -3
  553. package/dist/docs/reference/model/union.md +14 -3
  554. package/dist/docs/reference/model.md +11 -11
  555. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -1
  556. package/dist/docs/reference/text/VectorFont.md +22 -12
  557. package/dist/docs/reference/text/VectorFontOptions.md +7 -1
  558. package/dist/docs/reference/text/VectorTextArcBaseline.md +7 -1
  559. package/dist/docs/reference/text/VectorTextLayoutOptions.md +8 -2
  560. package/dist/docs/reference/text/VectorTextOptions.md +7 -1
  561. package/dist/docs/reference/text/categories/font-preparation.md +7 -10
  562. package/dist/docs/reference/text/prepareVectorFont.md +9 -1
  563. package/dist/docs/reference/text.md +7 -1
  564. package/dist/engine/execution.js +5 -3
  565. package/dist/engine/finalization.js +6 -78
  566. package/dist/engine/index.js +11 -6
  567. package/dist/engine/native/adapter.js +1 -1
  568. package/dist/engine/native/construction-mesh.js +51 -0
  569. package/dist/engine/native/context.js +10 -7
  570. package/dist/engine/native/index.js +1 -1
  571. package/dist/engine/native/material-components.js +4 -53
  572. package/dist/engine/native/mesh-observation.js +55 -0
  573. package/dist/engine/native/regions.js +44 -23
  574. package/dist/engine/native/scoped-primitives.js +3 -3
  575. package/dist/engine/native/scoped-threads.js +1 -13
  576. package/dist/engine/native/threads.js +2 -2
  577. package/dist/engine/native/transforms.js +2 -2
  578. package/dist/engine/operations/construction.js +77 -27
  579. package/dist/engine/operations/context.js +15 -6
  580. package/dist/engine/operations/cutters.js +112 -0
  581. package/dist/engine/operations/environment.js +2 -2
  582. package/dist/engine/operations/extrusion-finishing.js +56 -29
  583. package/dist/engine/operations/hole-cutter.js +125 -114
  584. package/dist/engine/operations/join-collar-profile.js +120 -0
  585. package/dist/engine/operations/join.js +521 -0
  586. package/dist/engine/operations/knuckle-hinge.js +25 -20
  587. package/dist/engine/operations/loft.js +9 -16
  588. package/dist/engine/operations/mechanical.js +4 -15
  589. package/dist/engine/operations/primitives/anchors.js +23 -19
  590. package/dist/engine/operations/primitives/construction.js +38 -12
  591. package/dist/engine/operations/primitives/correspondence.js +2 -2
  592. package/dist/engine/operations/primitives/profile-mesh.js +41 -80
  593. package/dist/engine/operations/primitives/profiles.js +5 -5
  594. package/dist/engine/operations/sections.js +8 -8
  595. package/dist/engine/operations/transforms.js +19 -39
  596. package/dist/engine/placement.js +3 -3
  597. package/dist/engine/recipe-realization.js +87 -31
  598. package/dist/engine/session/declarations.js +98 -0
  599. package/dist/engine/session/dependencies.js +139 -39
  600. package/dist/engine/session/graph.js +290 -411
  601. package/dist/engine/session/native-cache.js +1 -1
  602. package/dist/engine/session/parameters.js +78 -0
  603. package/dist/engine/session/session.js +7 -7
  604. package/dist/engine/session/snapshot-cache.js +4 -4
  605. package/dist/engine/shape-anchors.js +13 -6
  606. package/dist/export/3mf.js +197 -0
  607. package/dist/export/capture.js +182 -0
  608. package/dist/export/glb.js +214 -0
  609. package/dist/export/index.js +5 -0
  610. package/dist/export/limits.js +18 -0
  611. package/dist/export/stl.js +120 -0
  612. package/dist/export/writer.js +54 -0
  613. package/dist/geometry/{bounds.js → bounds/operations.js} +3 -1
  614. package/dist/geometry/{bounds-value.js → bounds/value.js} +24 -20
  615. package/dist/geometry/curves/evaluation.js +5 -6
  616. package/dist/geometry/curves/sampling.js +30 -6
  617. package/dist/geometry/{extrusion.js → extrusion/controls.js} +58 -35
  618. package/dist/geometry/extrusion/mesh.js +92 -0
  619. package/dist/geometry/extrusion/stations.js +35 -0
  620. package/dist/geometry/extrusion/twisted-chamfer.js +265 -0
  621. package/dist/geometry/immutable-buffer.js +11 -7
  622. package/dist/geometry/index.js +24 -32
  623. package/dist/geometry/{model-limits.js → limits.js} +1 -1
  624. package/dist/geometry/loft/{loft-correspondence.js → correspondence.js} +31 -20
  625. package/dist/geometry/loft/{loft-geometry.js → geometry.js} +15 -17
  626. package/dist/geometry/loft/mesh.js +53 -0
  627. package/dist/geometry/loft/{loft-options.js → options.js} +13 -11
  628. package/dist/geometry/loft/{loft-simple-mesh.js → simple-mesh.js} +26 -17
  629. package/dist/geometry/math/interpolation.js +9 -0
  630. package/dist/geometry/math/vector-value.js +12 -3
  631. package/dist/geometry/math/vector2.js +18 -5
  632. package/dist/geometry/math/vector3.js +28 -5
  633. package/dist/geometry/math-api.js +4 -0
  634. package/dist/geometry/mechanical/gear-motion.js +7 -5
  635. package/dist/geometry/mechanical/gears.js +21 -4
  636. package/dist/geometry/mechanical/knuckle-hinge.js +7 -5
  637. package/dist/geometry/mechanical/threads/fit.js +8 -2
  638. package/dist/geometry/mechanical/threads/helices.js +4 -2
  639. package/dist/geometry/mechanical/threads/mesh-plan.js +4 -2
  640. package/dist/geometry/mechanical/threads/mesh.js +12 -9
  641. package/dist/geometry/mechanical/threads/profiles.js +18 -4
  642. package/dist/geometry/mechanical/threads/solids.js +11 -2
  643. package/dist/geometry/mechanical-api.js +10 -0
  644. package/dist/geometry/mesh/{mesh-centroid.js → centroid.js} +2 -1
  645. package/dist/geometry/{heightfield.js → mesh/heightfield.js} +9 -5
  646. package/dist/geometry/mesh/join-layers.js +833 -0
  647. package/dist/geometry/mesh/{mesh.js → operations.js} +11 -18
  648. package/dist/geometry/mesh/{mesh-planar.js → planar.js} +8 -18
  649. package/dist/geometry/mesh/{mesh-quality.js → quality.js} +10 -42
  650. package/dist/geometry/mesh/render-buffers.js +220 -0
  651. package/dist/geometry/mesh/{mesh-signature.js → signature.js} +1 -1
  652. package/dist/geometry/mesh/{mesh-solid-intersections.js → solid-intersections.js} +45 -17
  653. package/dist/geometry/mesh/{mesh-solid.js → solid.js} +10 -6
  654. package/dist/geometry/mesh/triangle-quality.js +42 -0
  655. package/dist/geometry/mesh/winding.js +11 -0
  656. package/dist/geometry/{numeric.js → mesh/write-vertex.js} +1 -1
  657. package/dist/geometry/mesh-api.js +12 -10
  658. package/dist/geometry/paths/distribution.js +43 -0
  659. package/dist/geometry/paths/editing.js +76 -0
  660. package/dist/geometry/paths/frames.js +16 -11
  661. package/dist/geometry/paths/helix.js +1 -1
  662. package/dist/geometry/paths/resampling.js +46 -61
  663. package/dist/geometry/paths/{planar.js → rounding.js} +8 -67
  664. package/dist/geometry/paths/spline.js +116 -0
  665. package/dist/geometry/paths/traversal.js +107 -0
  666. package/dist/geometry/paths/{path-value.js → value.js} +97 -18
  667. package/dist/geometry/patterns/placements.js +20 -29
  668. package/dist/geometry/{patterns.js → patterns/transforms.js} +11 -7
  669. package/dist/geometry/primitives/cutters.js +70 -0
  670. package/dist/geometry/{cylinder.js → primitives/cylinder.js} +4 -4
  671. package/dist/geometry/{edge-finishing.js → primitives/edges.js} +5 -5
  672. package/dist/geometry/{primitive-resolvers.js → primitives/resolvers.js} +9 -9
  673. package/dist/geometry/primitives/sampling.js +41 -0
  674. package/dist/geometry/profiles/contour.js +19 -7
  675. package/dist/geometry/profiles/{match-profiles.js → matching.js} +9 -6
  676. package/dist/geometry/profiles/primitives/circle.js +1 -1
  677. package/dist/geometry/profiles/primitives/ellipse.js +2 -2
  678. package/dist/geometry/profiles/primitives/rectangle.js +8 -8
  679. package/dist/geometry/profiles/primitives/star.js +1 -1
  680. package/dist/geometry/profiles/side-profile.js +8 -5
  681. package/dist/geometry/profiles/validation.js +1 -1
  682. package/dist/geometry/{polygon-clipping.js → regions/clipping.js} +1 -1
  683. package/dist/geometry/{convex-offset.js → regions/convex-offset.js} +1 -1
  684. package/dist/geometry/regions/offset.js +280 -0
  685. package/dist/geometry/{regions.js → regions/operations.js} +70 -23
  686. package/dist/geometry/{stroke-path.js → regions/stroke.js} +46 -20
  687. package/dist/geometry/{loft/loft-triangulation.js → regions/triangulation.js} +35 -2
  688. package/dist/geometry/revolve/{revolve-mesh.js → mesh.js} +9 -10
  689. package/dist/geometry/{circular-sampling.js → sampling/circular.js} +3 -3
  690. package/dist/geometry/{sampling-limits.js → sampling/limits.js} +6 -2
  691. package/dist/geometry/{resolution.js → sampling/resolution.js} +15 -14
  692. package/dist/geometry/svg/fill.js +4 -3
  693. package/dist/geometry/svg/import.js +47 -64
  694. package/dist/geometry/svg/path.js +3 -3
  695. package/dist/geometry/sweep/closed.js +55 -0
  696. package/dist/geometry/sweep/mesh.js +30 -0
  697. package/dist/geometry/{sweeps/sweep-open.js → sweep/open.js} +9 -24
  698. package/dist/geometry/sweep/options.js +1 -0
  699. package/dist/geometry/{sweeps → sweep}/orientation.js +14 -11
  700. package/dist/geometry/sweep/seam.js +30 -0
  701. package/dist/geometry/{sweeps → sweep}/stations.js +75 -10
  702. package/dist/geometry/sweep/transforms.js +30 -0
  703. package/dist/geometry/{sweeps → sweep}/validation.js +4 -4
  704. package/dist/geometry/{text-contours.js → text/contours.js} +3 -3
  705. package/dist/geometry/{text-fitting.js → text/fitting.js} +4 -3
  706. package/dist/geometry/text/layout.js +1 -0
  707. package/dist/geometry/{transform3.js → transforms/affine3.js} +31 -46
  708. package/dist/geometry/{anchors.js → transforms/anchors.js} +43 -24
  709. package/dist/geometry/{transform-geometry.js → transforms/apply.js} +8 -5
  710. package/dist/geometry/{transform2.js → transforms/dimensions.js} +23 -19
  711. package/dist/geometry/transforms/frame.js +64 -0
  712. package/dist/geometry/{transform-matrix.js → transforms/matrix-input.js} +8 -1
  713. package/dist/geometry/{transform-value.js → transforms/value.js} +29 -11
  714. package/dist/index.js +3 -9
  715. package/dist/model/cutters.js +1 -0
  716. package/dist/model/execution-binding.js +3 -3
  717. package/dist/model/generation.js +4 -2
  718. package/dist/model/immutable-generation-data.js +15 -13
  719. package/dist/model/join.js +1 -0
  720. package/dist/model/operations.js +150 -94
  721. package/dist/model/recipe-declaration.js +6 -7
  722. package/dist/model/shape-handles.js +1 -0
  723. package/dist/text/index.js +3 -0
  724. package/dist/text/vector-text-layout.js +1 -0
  725. package/package.json +20 -5
  726. package/dist/docs/reference/engine/Export3mfOptions.md +0 -46
  727. package/dist/docs/reference/engine/ExportMeshPart.md +0 -31
  728. package/dist/docs/reference/engine/ModelingLimits.md +0 -121
  729. package/dist/docs/reference/engine/export3mf.md +0 -55
  730. package/dist/docs/reference/geometry/BoxEdge.md +0 -7
  731. package/dist/docs/reference/geometry/BoxEdgeSelection.md +0 -14
  732. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +0 -15
  733. package/dist/docs/reference/geometry/BoxOptions.md +0 -87
  734. package/dist/docs/reference/geometry/CylinderOptions.md +0 -53
  735. package/dist/docs/reference/geometry/EndTreatments.md +0 -34
  736. package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +0 -130
  737. package/dist/docs/reference/geometry/ExtrudeOptions.md +0 -146
  738. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +0 -18
  739. package/dist/docs/reference/geometry/HeightfieldOptions.md +0 -72
  740. package/dist/docs/reference/geometry/HeightfieldPreflight.md +0 -58
  741. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +0 -19
  742. package/dist/docs/reference/geometry/ImmutableTriangleMesh.md +0 -43
  743. package/dist/docs/reference/geometry/LoftCorrespondence.md +0 -24
  744. package/dist/docs/reference/geometry/LoftMeshStation.md +0 -31
  745. package/dist/docs/reference/geometry/LoftOptions.md +0 -88
  746. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +0 -14
  747. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +0 -160
  748. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +0 -124
  749. package/dist/docs/reference/geometry/PlanarPatchQuality.md +0 -194
  750. package/dist/docs/reference/geometry/PrimitiveAttachment.md +0 -29
  751. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +0 -104
  752. package/dist/docs/reference/geometry/RevolveOptions.md +0 -91
  753. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +0 -38
  754. package/dist/docs/reference/geometry/SphereOptions.md +0 -15
  755. package/dist/docs/reference/geometry/SweepOptions.md +0 -113
  756. package/dist/docs/reference/geometry/SweepOrientation.md +0 -113
  757. package/dist/docs/reference/geometry/ThreadProfile-type.md +0 -86
  758. package/dist/docs/reference/geometry/ThreadedNutShape.md +0 -14
  759. package/dist/docs/reference/geometry/TorusOptions.md +0 -105
  760. package/dist/docs/reference/geometry/TriangleMesh.md +0 -34
  761. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +0 -129
  762. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +0 -79
  763. package/dist/docs/reference/geometry/TriangleMeshInput.md +0 -19
  764. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +0 -79
  765. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +0 -43
  766. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +0 -194
  767. package/dist/docs/reference/geometry/TriangleMeshSignature.md +0 -111
  768. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +0 -46
  769. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +0 -34
  770. package/dist/docs/reference/geometry/TriangleMeshTopologyAnalysis.md +0 -131
  771. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +0 -55
  772. package/dist/docs/reference/geometry/TubeOptions.md +0 -62
  773. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +0 -58
  774. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +0 -115
  775. package/dist/docs/reference/geometry/VectorTextOptions.md +0 -54
  776. package/dist/docs/reference/geometry/add2.md +0 -37
  777. package/dist/docs/reference/geometry/add3.md +0 -43
  778. package/dist/docs/reference/geometry/applyTransformDirection3.md +0 -46
  779. package/dist/docs/reference/geometry/applyTransformPoint3.md +0 -44
  780. package/dist/docs/reference/geometry/categories/meshes.md +0 -68
  781. package/dist/docs/reference/geometry/composeTransform3.md +0 -45
  782. package/dist/docs/reference/geometry/cross2.md +0 -37
  783. package/dist/docs/reference/geometry/cross3.md +0 -43
  784. package/dist/docs/reference/geometry/distance2.md +0 -37
  785. package/dist/docs/reference/geometry/distance3.md +0 -37
  786. package/dist/docs/reference/geometry/dot2.md +0 -37
  787. package/dist/docs/reference/geometry/dot3.md +0 -43
  788. package/dist/docs/reference/geometry/eulerTransform3.md +0 -43
  789. package/dist/docs/reference/geometry/frameTransform3.md +0 -49
  790. package/dist/docs/reference/geometry/inverseTransform3.md +0 -35
  791. package/dist/docs/reference/geometry/length2.md +0 -31
  792. package/dist/docs/reference/geometry/length3.md +0 -31
  793. package/dist/docs/reference/geometry/lerp2.md +0 -43
  794. package/dist/docs/reference/geometry/lerp3.md +0 -43
  795. package/dist/docs/reference/geometry/normalize2.md +0 -40
  796. package/dist/docs/reference/geometry/normalize3.md +0 -40
  797. package/dist/docs/reference/geometry/projectOntoPlane3.md +0 -37
  798. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +0 -78
  799. package/dist/docs/reference/geometry/rotate2.md +0 -37
  800. package/dist/docs/reference/geometry/rotationTransform3.md +0 -54
  801. package/dist/docs/reference/geometry/scale2.md +0 -37
  802. package/dist/docs/reference/geometry/scale3.md +0 -43
  803. package/dist/docs/reference/geometry/scaleTransform3.md +0 -39
  804. package/dist/docs/reference/geometry/subtract2.md +0 -37
  805. package/dist/docs/reference/geometry/subtract3.md +0 -43
  806. package/dist/docs/reference/geometry/transformDeterminant3.md +0 -37
  807. package/dist/docs/reference/geometry/translationTransform3.md +0 -36
  808. package/dist/docs/reference/geometry/validateRigidTransform3.md +0 -35
  809. package/dist/docs/reference/geometry/validateTransform3.md +0 -48
  810. package/dist/docs/reference/mesh/AcmeThreadProfileSpec.md +0 -79
  811. package/dist/docs/reference/mesh/Bevel.md +0 -18
  812. package/dist/docs/reference/mesh/BevelSize.md +0 -14
  813. package/dist/docs/reference/mesh/Bounds2.md +0 -125
  814. package/dist/docs/reference/mesh/Bounds2Data.md +0 -43
  815. package/dist/docs/reference/mesh/Bounds2Input.md +0 -19
  816. package/dist/docs/reference/mesh/Bounds3.md +0 -125
  817. package/dist/docs/reference/mesh/Bounds3Data.md +0 -43
  818. package/dist/docs/reference/mesh/Bounds3Input.md +0 -19
  819. package/dist/docs/reference/mesh/ButtressPressureFlankSide.md +0 -14
  820. package/dist/docs/reference/mesh/ButtressThreadProfileSpec.md +0 -97
  821. package/dist/docs/reference/mesh/CircularPrimitiveOptions.md +0 -60
  822. package/dist/docs/reference/mesh/CurveSamplingOptions.md +0 -69
  823. package/dist/docs/reference/mesh/CustomThreadProfileSpec.md +0 -77
  824. package/dist/docs/reference/mesh/ExtrusionSamplingOptions.md +0 -81
  825. package/dist/docs/reference/mesh/Frame3.md +0 -62
  826. package/dist/docs/reference/mesh/GeometryResolution.md +0 -74
  827. package/dist/docs/reference/mesh/GeometrySamplingLimits.md +0 -66
  828. package/dist/docs/reference/mesh/GeometryToleranceOptions.md +0 -46
  829. package/dist/docs/reference/mesh/HeightfieldOptions.md +0 -72
  830. package/dist/docs/reference/mesh/ImmutableBuffer.md +0 -108
  831. package/dist/docs/reference/mesh/LoftCorrespondence.md +0 -24
  832. package/dist/docs/reference/mesh/LoftOptions.md +0 -88
  833. package/dist/docs/reference/mesh/LoftPlacement.md +0 -70
  834. package/dist/docs/reference/mesh/ModelingLimits.md +0 -130
  835. package/dist/docs/reference/mesh/NumericArray.md +0 -14
  836. package/dist/docs/reference/mesh/Path2.md +0 -197
  837. package/dist/docs/reference/mesh/Path2Data.md +0 -50
  838. package/dist/docs/reference/mesh/Path2Input.md +0 -20
  839. package/dist/docs/reference/mesh/Path3.md +0 -197
  840. package/dist/docs/reference/mesh/Path3Data.md +0 -50
  841. package/dist/docs/reference/mesh/Path3Input.md +0 -20
  842. package/dist/docs/reference/mesh/PathLocation.md +0 -69
  843. package/dist/docs/reference/mesh/PathNormalGuide.md +0 -43
  844. package/dist/docs/reference/mesh/PathResamplingOptions.md +0 -84
  845. package/dist/docs/reference/mesh/Pivot2Options.md +0 -26
  846. package/dist/docs/reference/mesh/Pivot3Options.md +0 -26
  847. package/dist/docs/reference/mesh/RevolveOptions.md +0 -91
  848. package/dist/docs/reference/mesh/SquareThreadProfileSpec.md +0 -79
  849. package/dist/docs/reference/mesh/SweepOptions.md +0 -113
  850. package/dist/docs/reference/mesh/SweepOrientation.md +0 -113
  851. package/dist/docs/reference/mesh/ThreadEndStyle.md +0 -14
  852. package/dist/docs/reference/mesh/ThreadEndTreatmentOptions.md +0 -117
  853. package/dist/docs/reference/mesh/ThreadHandedness.md +0 -14
  854. package/dist/docs/reference/mesh/ThreadLeadInEnvelope.md +0 -14
  855. package/dist/docs/reference/mesh/ThreadLeadInShape.md +0 -14
  856. package/dist/docs/reference/mesh/ThreadProfileBaseSpec.md +0 -53
  857. package/dist/docs/reference/mesh/ThreadProfileSpec.md +0 -23
  858. package/dist/docs/reference/mesh/ThreadRidgeOptions.md +0 -145
  859. package/dist/docs/reference/mesh/ThreadSolidOptions.md +0 -222
  860. package/dist/docs/reference/mesh/ThreadSolidPreflight.md +0 -58
  861. package/dist/docs/reference/mesh/Transform2.md +0 -256
  862. package/dist/docs/reference/mesh/Transform2Data.md +0 -14
  863. package/dist/docs/reference/mesh/Transform2Input.md +0 -19
  864. package/dist/docs/reference/mesh/Transform3.md +0 -296
  865. package/dist/docs/reference/mesh/Transform3Data.md +0 -17
  866. package/dist/docs/reference/mesh/Transform3Input.md +0 -19
  867. package/dist/docs/reference/mesh/TrapezoidalThreadProfileSpec.md +0 -96
  868. package/dist/docs/reference/mesh/TriangularThreadProfileSpec.md +0 -95
  869. package/dist/docs/reference/mesh/Vector2.md +0 -270
  870. package/dist/docs/reference/mesh/Vector2Data.md +0 -14
  871. package/dist/docs/reference/mesh/Vector2Input.md +0 -19
  872. package/dist/docs/reference/mesh/Vector3.md +0 -282
  873. package/dist/docs/reference/mesh/Vector3Data.md +0 -14
  874. package/dist/docs/reference/mesh/Vector3Input.md +0 -19
  875. package/dist/docs/reference/model/AcmeThreadProfileSpec.md +0 -80
  876. package/dist/docs/reference/model/Anchor3.md +0 -55
  877. package/dist/docs/reference/model/AttachOptions.md +0 -69
  878. package/dist/docs/reference/model/Bevel.md +0 -19
  879. package/dist/docs/reference/model/BevelSize.md +0 -15
  880. package/dist/docs/reference/model/Bounds2-type.md +0 -125
  881. package/dist/docs/reference/model/Bounds2Data.md +0 -44
  882. package/dist/docs/reference/model/Bounds2Input.md +0 -19
  883. package/dist/docs/reference/model/Bounds2Options.md +0 -110
  884. package/dist/docs/reference/model/Bounds3-type.md +0 -125
  885. package/dist/docs/reference/model/Bounds3Data.md +0 -44
  886. package/dist/docs/reference/model/Bounds3Input.md +0 -19
  887. package/dist/docs/reference/model/Bounds3Options.md +0 -110
  888. package/dist/docs/reference/model/ButtressPressureFlankSide.md +0 -15
  889. package/dist/docs/reference/model/ButtressThreadProfileSpec.md +0 -98
  890. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +0 -35
  891. package/dist/docs/reference/model/CircleContourOptions.md +0 -21
  892. package/dist/docs/reference/model/CircularPrimitiveOptions.md +0 -62
  893. package/dist/docs/reference/model/Computed.md +0 -44
  894. package/dist/docs/reference/model/ComputedValue.md +0 -24
  895. package/dist/docs/reference/model/Contour.md +0 -24
  896. package/dist/docs/reference/model/CorrespondingComponent.md +0 -46
  897. package/dist/docs/reference/model/CorrespondingContour.md +0 -46
  898. package/dist/docs/reference/model/CorrespondingProfile.md +0 -22
  899. package/dist/docs/reference/model/CorrespondingProfileStation.md +0 -27
  900. package/dist/docs/reference/model/CurveSamplingOptions.md +0 -68
  901. package/dist/docs/reference/model/CustomThreadProfileSpec.md +0 -78
  902. package/dist/docs/reference/model/EdgeTreatment.md +0 -22
  903. package/dist/docs/reference/model/EllipseContourOptions.md +0 -21
  904. package/dist/docs/reference/model/ExtrudeMeshOptions.md +0 -133
  905. package/dist/docs/reference/model/ExtrusionSamplingOptions.md +0 -84
  906. package/dist/docs/reference/model/Frame3.md +0 -63
  907. package/dist/docs/reference/model/GeometryError.md +0 -102
  908. package/dist/docs/reference/model/GeometryErrorCode.md +0 -15
  909. package/dist/docs/reference/model/GeometryErrorContext.md +0 -35
  910. package/dist/docs/reference/model/GeometryResolution.md +0 -70
  911. package/dist/docs/reference/model/GeometrySamplingLimits.md +0 -62
  912. package/dist/docs/reference/model/GeometryToleranceOptions.md +0 -46
  913. package/dist/docs/reference/model/GridPatternOptions.md +0 -50
  914. package/dist/docs/reference/model/HoleCutterOverrun.md +0 -35
  915. package/dist/docs/reference/model/ImmutableBuffer-type.md +0 -108
  916. package/dist/docs/reference/model/ImmutableTriangleMesh.md +0 -43
  917. package/dist/docs/reference/model/InternalThreadCutterOptions.md +0 -216
  918. package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +0 -77
  919. package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +0 -47
  920. package/dist/docs/reference/model/KnuckleHingeSpec.md +0 -18
  921. package/dist/docs/reference/model/LinearPatternOptions.md +0 -39
  922. package/dist/docs/reference/model/LoftPlacement.md +0 -73
  923. package/dist/docs/reference/model/MatchProfilesOptions.md +0 -35
  924. package/dist/docs/reference/model/ModelingLimits.md +0 -126
  925. package/dist/docs/reference/model/NumericArray.md +0 -14
  926. package/dist/docs/reference/model/Path2-type.md +0 -196
  927. package/dist/docs/reference/model/Path2Data.md +0 -50
  928. package/dist/docs/reference/model/Path2Input.md +0 -20
  929. package/dist/docs/reference/model/Path3-type.md +0 -196
  930. package/dist/docs/reference/model/Path3Data.md +0 -50
  931. package/dist/docs/reference/model/Path3Input.md +0 -20
  932. package/dist/docs/reference/model/PathLocation.md +0 -69
  933. package/dist/docs/reference/model/PathNormalGuide.md +0 -46
  934. package/dist/docs/reference/model/PathOptions.md +0 -38
  935. package/dist/docs/reference/model/PathPatternOptions.md +0 -48
  936. package/dist/docs/reference/model/PathResamplingOptions.md +0 -84
  937. package/dist/docs/reference/model/Pivot2Options.md +0 -28
  938. package/dist/docs/reference/model/Pivot3Options.md +0 -28
  939. package/dist/docs/reference/model/PolygonData.md +0 -44
  940. package/dist/docs/reference/model/PrintableThreadFit.md +0 -15
  941. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +0 -51
  942. package/dist/docs/reference/model/Profile.md +0 -24
  943. package/dist/docs/reference/model/ProfileComponent2.md +0 -46
  944. package/dist/docs/reference/model/ProfileContour2.md +0 -36
  945. package/dist/docs/reference/model/ProfileSpan2.md +0 -47
  946. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +0 -41
  947. package/dist/docs/reference/model/RadialPatternOptions.md +0 -59
  948. package/dist/docs/reference/model/RadialSizing.md +0 -15
  949. package/dist/docs/reference/model/RadialSizingOptions.md +0 -40
  950. package/dist/docs/reference/model/RectangleContourOptions.md +0 -72
  951. package/dist/docs/reference/model/RectangleCornerTreatment.md +0 -40
  952. package/dist/docs/reference/model/RectangleCornerTreatments.md +0 -20
  953. package/dist/docs/reference/model/RegionData.md +0 -19
  954. package/dist/docs/reference/model/RoundedEdgeTreatment.md +0 -96
  955. package/dist/docs/reference/model/SmoothEdgeTreatment.md +0 -76
  956. package/dist/docs/reference/model/SquareThreadProfileSpec.md +0 -80
  957. package/dist/docs/reference/model/StarContourOptions.md +0 -81
  958. package/dist/docs/reference/model/StrokeCap.md +0 -16
  959. package/dist/docs/reference/model/StrokeJoin.md +0 -16
  960. package/dist/docs/reference/model/StrokeOptions.md +0 -91
  961. package/dist/docs/reference/model/ThreadBevelOptions.md +0 -35
  962. package/dist/docs/reference/model/ThreadEndStyle.md +0 -15
  963. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +0 -118
  964. package/dist/docs/reference/model/ThreadHandedness.md +0 -15
  965. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +0 -15
  966. package/dist/docs/reference/model/ThreadLeadInShape.md +0 -15
  967. package/dist/docs/reference/model/ThreadProfile.md +0 -87
  968. package/dist/docs/reference/model/ThreadProfileBaseSpec.md +0 -54
  969. package/dist/docs/reference/model/ThreadProfileSpec.md +0 -24
  970. package/dist/docs/reference/model/ThreadRidgeOptions.md +0 -141
  971. package/dist/docs/reference/model/ThreadSolidPreflight.md +0 -59
  972. package/dist/docs/reference/model/ThreadedNutOptions.md +0 -263
  973. package/dist/docs/reference/model/ThreadedNutPreflight.md +0 -111
  974. package/dist/docs/reference/model/ThreadedNutShape.md +0 -15
  975. package/dist/docs/reference/model/ThreadedRodOptions.md +0 -216
  976. package/dist/docs/reference/model/Transform2-type.md +0 -257
  977. package/dist/docs/reference/model/Transform2Data.md +0 -16
  978. package/dist/docs/reference/model/Transform2Input.md +0 -21
  979. package/dist/docs/reference/model/Transform3-type.md +0 -297
  980. package/dist/docs/reference/model/Transform3Data.md +0 -19
  981. package/dist/docs/reference/model/Transform3Input.md +0 -21
  982. package/dist/docs/reference/model/TrapezoidalThreadProfileSpec.md +0 -97
  983. package/dist/docs/reference/model/TriangleMesh.md +0 -34
  984. package/dist/docs/reference/model/TriangleMeshAnalysis.md +0 -129
  985. package/dist/docs/reference/model/TriangleMeshMeasurements.md +0 -79
  986. package/dist/docs/reference/model/TriangleMeshTopologyAnalysis.md +0 -131
  987. package/dist/docs/reference/model/TriangularThreadProfileSpec.md +0 -96
  988. package/dist/docs/reference/model/Vector2-type.md +0 -271
  989. package/dist/docs/reference/model/Vector2Data.md +0 -15
  990. package/dist/docs/reference/model/Vector2Input.md +0 -21
  991. package/dist/docs/reference/model/Vector3-type.md +0 -283
  992. package/dist/docs/reference/model/Vector3Data.md +0 -15
  993. package/dist/docs/reference/model/Vector3Input.md +0 -21
  994. package/dist/docs/reference/model/VectorTextLayout.md +0 -40
  995. package/dist/docs/reference/model/VectorTextMetrics.md +0 -100
  996. package/dist/docs/reference/model/bounds2.md +0 -37
  997. package/dist/docs/reference/model/bounds3.md +0 -37
  998. package/dist/docs/reference/model/categories/bounds.md +0 -38
  999. package/dist/docs/reference/model/categories/contracts.md +0 -16
  1000. package/dist/docs/reference/model/categories/core-values-errors.md +0 -44
  1001. package/dist/docs/reference/model/categories/explicit-profiles.md +0 -34
  1002. package/dist/docs/reference/model/categories/paths.md +0 -42
  1003. package/dist/docs/reference/model/categories/resolution.md +0 -20
  1004. package/dist/docs/reference/model/immutableBuffer.md +0 -49
  1005. package/dist/docs/reference/model/isGeometryError.md +0 -34
  1006. package/dist/docs/reference/model/matchProfiles.md +0 -42
  1007. package/dist/docs/reference/model/path2.md +0 -54
  1008. package/dist/docs/reference/model/path3.md +0 -49
  1009. package/dist/docs/reference/model/preflightInternalThreadCutter.md +0 -87
  1010. package/dist/docs/reference/model/preflightThreadedNut.md +0 -103
  1011. package/dist/docs/reference/model/preflightThreadedRod.md +0 -87
  1012. package/dist/docs/reference/model/transform2.md +0 -46
  1013. package/dist/docs/reference/model/transform3.md +0 -48
  1014. package/dist/docs/reference/model/vector2.md +0 -40
  1015. package/dist/docs/reference/model/vector3.md +0 -47
  1016. package/dist/docs/reference/text/Bounds2Data.md +0 -34
  1017. package/dist/docs/reference/text/Vector2Data.md +0 -7
  1018. package/dist/docs/reference/text/VectorTextLayout.md +0 -34
  1019. package/dist/docs/reference/text/VectorTextMetrics.md +0 -94
  1020. package/dist/engine/export-3mf.js +0 -23
  1021. package/dist/engine/operations/patterns.js +0 -47
  1022. package/dist/engine/serialize-3mf.js +0 -116
  1023. package/dist/geometry/loft/loft.js +0 -105
  1024. package/dist/geometry/mechanical/index.js +0 -14
  1025. package/dist/geometry/primitive-resolution.js +0 -20
  1026. package/dist/geometry/svg/index.js +0 -1
  1027. package/dist/geometry/sweeps/options.js +0 -29
  1028. package/dist/geometry/sweeps/sweep-closed.js +0 -96
  1029. package/dist/geometry/sweeps/sweep-mesh.js +0 -32
  1030. /package/dist/{geometry/mesh/mesh-types.js → export/types.js} +0 -0
  1031. /package/dist/geometry/mechanical/{standards.js → fastener-standards.js} +0 -0
  1032. /package/dist/geometry/mesh/{mesh-edge-table.js → edge-table.js} +0 -0
  1033. /package/dist/geometry/{primitive-options.js → mesh/types.js} +0 -0
  1034. /package/dist/{engine/mesh-view-cache.js → geometry/mesh/view-cache.js} +0 -0
  1035. /package/dist/geometry/{text-layout.js → primitives/options.js} +0 -0
@@ -1,12 +1,12 @@
1
1
  import { SaxesParser } from "saxes";
2
2
  import { SVGPathData } from "svg-pathdata";
3
- import { bounds2 } from "../bounds-value.js";
4
- import { fitBounds } from "../bounds.js";
3
+ import { fitBounds } from "../bounds/operations.js";
4
+ import { bounds2 } from "../bounds/value.js";
5
5
  import { GeometryError } from "../errors.js";
6
- import { regionArea, signedContourArea } from "../regions.js";
7
- import { resolveCircularSegments, resolveGeometryResolution, } from "../resolution.js";
8
- import { resolveGeometrySamplingLimits } from "../sampling-limits.js";
9
- import { strokePathMultiPolygon } from "../stroke-path.js";
6
+ import { regionArea, signedContourArea } from "../regions/operations.js";
7
+ import { strokePathMultiPolygon } from "../regions/stroke.js";
8
+ import { resolveGeometrySamplingLimits } from "../sampling/limits.js";
9
+ import { resolveCircularSegments, resolveGeometryResolution, } from "../sampling/resolution.js";
10
10
  import { createBoundedSvgClipping } from "./fill.js";
11
11
  import { inverseMatrix, multiplyMatrices as multiply, transformPoint } from "./matrix.js";
12
12
  import { flattenSvgSubpaths, SvgVertexBudget } from "./path.js";
@@ -32,7 +32,7 @@ const SUPPORTED_TAGS = new Set([
32
32
  const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
33
33
  const NUMBER_PATTERN = /^[-+]?(?:\d*\.\d+|\d+\.?)(?:e[-+]?\d+)?$/i;
34
34
  const SAFE_COLOR_PATTERN = /^(?:none|#[0-9a-f]{3,8}|(?:rgb|hsl)a?\([\d\s.,%+-]+\)|[a-z]+)$/i;
35
- const PRESENTATION_ATTRIBUTES = [
35
+ const PAINT_ATTRIBUTES = new Set([
36
36
  "fill",
37
37
  "fill-opacity",
38
38
  "fill-rule",
@@ -41,9 +41,8 @@ const PRESENTATION_ATTRIBUTES = [
41
41
  "stroke-linejoin",
42
42
  "stroke-opacity",
43
43
  "stroke-width",
44
- "style",
45
- ];
46
- const COMMON_ATTRIBUTES = new Set(["id", "name", "transform", ...PRESENTATION_ATTRIBUTES]);
44
+ ]);
45
+ const COMMON_ATTRIBUTES = new Set(["id", "name", "transform", "style", ...PAINT_ATTRIBUTES]);
47
46
  const ATTRIBUTES_BY_TAG = {
48
47
  svg: new Set([
49
48
  ...COMMON_ATTRIBUTES,
@@ -170,22 +169,12 @@ function inlineStyle(value) {
170
169
  if (value === undefined || value.trim() === "")
171
170
  return {};
172
171
  const output = {};
173
- const allowed = new Set([
174
- "fill",
175
- "fill-opacity",
176
- "fill-rule",
177
- "stroke",
178
- "stroke-linecap",
179
- "stroke-linejoin",
180
- "stroke-opacity",
181
- "stroke-width",
182
- ]);
183
172
  for (const declaration of value.split(";")) {
184
173
  if (declaration.trim() === "")
185
174
  continue;
186
175
  const separator = declaration.indexOf(":");
187
176
  const key = declaration.slice(0, separator).trim().toLowerCase();
188
- if (separator <= 0 || !allowed.has(key))
177
+ if (separator <= 0 || !PAINT_ATTRIBUTES.has(key))
189
178
  return fail(`Unsupported SVG style “${key}”.`);
190
179
  output[key] = declaration.slice(separator + 1).trim();
191
180
  }
@@ -346,6 +335,7 @@ function adaptivePathSubpaths(d, transform, resolution, budget, estimate = false
346
335
  }
347
336
  }
348
337
  function elementSubpaths(tag, values, transform, resolution, budget, estimate = false) {
338
+ let pathData;
349
339
  switch (tag) {
350
340
  case "rect": {
351
341
  const x = finite(values.x, 0);
@@ -357,25 +347,19 @@ function elementSubpaths(tag, values, transform, resolution, budget, estimate =
357
347
  const rx = values.rx === undefined ? finite(values.ry, 0) : finite(values.rx, 0);
358
348
  const ry = values.ry === undefined ? rx : finite(values.ry, 0);
359
349
  if (rx === 0 || ry === 0) {
360
- return adaptivePathSubpaths(`M${x} ${y}H${x + width}V${y + height}H${x}Z`, transform, resolution, budget, estimate);
350
+ pathData = `M${x} ${y}H${x + width}V${y + height}H${x}Z`;
361
351
  }
362
- const radiusX = Math.min(Math.max(0, rx), width / 2);
363
- const radiusY = Math.min(Math.max(0, ry), height / 2);
364
- return adaptivePathSubpaths(`M${x + radiusX} ${y}H${x + width - radiusX}A${radiusX} ${radiusY} 0 0 1 ${x + width} ${y + radiusY}V${y + height - radiusY}A${radiusX} ${radiusY} 0 0 1 ${x + width - radiusX} ${y + height}H${x + radiusX}A${radiusX} ${radiusY} 0 0 1 ${x} ${y + height - radiusY}V${y + radiusY}A${radiusX} ${radiusY} 0 0 1 ${x + radiusX} ${y}Z`, transform, resolution, budget, estimate);
365
- }
366
- case "circle": {
367
- const radius = finite(values.r);
368
- const segments = resolveCircularSegments(radius * maximumLinearScale(transform), resolution, budget.limits);
369
- return [
370
- {
371
- closed: true,
372
- points: ellipsePoints(finite(values.cx, 0), finite(values.cy, 0), radius, radius, segments, budget),
373
- },
374
- ];
352
+ else {
353
+ const radiusX = Math.min(Math.max(0, rx), width / 2);
354
+ const radiusY = Math.min(Math.max(0, ry), height / 2);
355
+ pathData = `M${x + radiusX} ${y}H${x + width - radiusX}A${radiusX} ${radiusY} 0 0 1 ${x + width} ${y + radiusY}V${y + height - radiusY}A${radiusX} ${radiusY} 0 0 1 ${x + width - radiusX} ${y + height}H${x + radiusX}A${radiusX} ${radiusY} 0 0 1 ${x} ${y + height - radiusY}V${y + radiusY}A${radiusX} ${radiusY} 0 0 1 ${x + radiusX} ${y}Z`;
356
+ }
357
+ break;
375
358
  }
359
+ case "circle":
376
360
  case "ellipse": {
377
- const radiusX = finite(values.rx);
378
- const radiusY = finite(values.ry);
361
+ const radiusX = finite(tag === "circle" ? values.r : values.rx);
362
+ const radiusY = tag === "circle" ? radiusX : finite(values.ry);
379
363
  const segments = resolveCircularSegments(Math.max(radiusX, radiusY) * maximumLinearScale(transform), resolution, budget.limits);
380
364
  return [
381
365
  {
@@ -385,20 +369,23 @@ function elementSubpaths(tag, values, transform, resolution, budget, estimate =
385
369
  ];
386
370
  }
387
371
  case "line":
388
- return adaptivePathSubpaths(`M${finite(values.x1, 0)} ${finite(values.y1, 0)}L${finite(values.x2, 0)} ${finite(values.y2, 0)}`, transform, resolution, budget, estimate);
389
- case "polyline": {
390
- const points = parsePoints(values.points);
391
- return adaptivePathSubpaths(points.map(([x, y], index) => `${index === 0 ? "M" : "L"}${x} ${y}`).join(""), transform, resolution, budget, estimate);
392
- }
372
+ pathData = `M${finite(values.x1, 0)} ${finite(values.y1, 0)}L${finite(values.x2, 0)} ${finite(values.y2, 0)}`;
373
+ break;
374
+ case "polyline":
393
375
  case "polygon": {
394
376
  const points = parsePoints(values.points);
395
- return adaptivePathSubpaths(`${points.map(([x, y], index) => `${index === 0 ? "M" : "L"}${x} ${y}`).join("")}Z`, transform, resolution, budget, estimate);
377
+ pathData = points.map(([x, y], index) => `${index === 0 ? "M" : "L"}${x} ${y}`).join("");
378
+ if (tag === "polygon")
379
+ pathData += "Z";
380
+ break;
396
381
  }
397
382
  case "path":
398
- return adaptivePathSubpaths(values.d ?? "", transform, resolution, budget, estimate);
383
+ pathData = values.d ?? "";
384
+ break;
399
385
  default:
400
386
  return [];
401
387
  }
388
+ return adaptivePathSubpaths(pathData, transform, resolution, budget, estimate);
402
389
  }
403
390
  function strokeConstructionVertexCount(subpath, paint, circularSegments) {
404
391
  const minimumPoints = subpath.closed ? 3 : 2;
@@ -413,7 +400,9 @@ function strokeConstructionVertexCount(subpath, paint, circularSegments) {
413
400
  : paint.strokeLinejoin === "miter"
414
401
  ? 4
415
402
  : 3) +
416
- (!subpath.closed && paint.strokeLinecap === "round" ? 2 * circularSegments : 0));
403
+ (!subpath.closed && paint.strokeLinecap === "round"
404
+ ? 2 * (Math.ceil(circularSegments / 2) - 1)
405
+ : 0));
417
406
  }
418
407
  function transformMultiPolygon(value, matrix) {
419
408
  return value.map((polygon) => polygon.map((path) => path.map((point) => {
@@ -425,12 +414,6 @@ function polygonArea(polygon) {
425
414
  return (Math.abs(signedContourArea(polygon.outer)) -
426
415
  polygon.holes.reduce((total, hole) => total + Math.abs(signedContourArea(hole)), 0));
427
416
  }
428
- function loopEdgeLengths(loop) {
429
- return loop.map((point, index) => {
430
- const next = loop[(index + 1) % loop.length];
431
- return Math.hypot(next[0] - point[0], next[1] - point[1]);
432
- });
433
- }
434
417
  function measureSvgRegion(region) {
435
418
  const holes = region.reduce((total, polygon) => total + polygon.holes.length, 0);
436
419
  let maxX = Number.NEGATIVE_INFINITY;
@@ -443,13 +426,14 @@ function measureSvgRegion(region) {
443
426
  for (const polygon of region) {
444
427
  for (const loop of [polygon.outer, ...polygon.holes]) {
445
428
  vertices += loop.length;
446
- for (const point of loop) {
429
+ for (let index = 0; index < loop.length; index += 1) {
430
+ const point = loop[index];
431
+ const next = loop[(index + 1) % loop.length];
447
432
  minX = Math.min(minX, point[0]);
448
433
  minY = Math.min(minY, point[1]);
449
434
  maxX = Math.max(maxX, point[0]);
450
435
  maxY = Math.max(maxY, point[1]);
451
- }
452
- for (const length of loopEdgeLengths(loop)) {
436
+ const length = Math.hypot(next[0] - point[0], next[1] - point[1]);
453
437
  minEdgeLength = Math.min(minEdgeLength, length);
454
438
  if (length < SHORT_EDGE_LENGTH_MM)
455
439
  shortEdgeCount += 1;
@@ -475,18 +459,13 @@ function measureSvgRegion(region) {
475
459
  });
476
460
  }
477
461
  /**
478
- * Parses the bounded SVG subset into a robust millimetre region and an import-review report.
462
+ * Runs one bounded SVG import pass, optionally retaining coarse spans for fitted bounds.
479
463
  *
480
464
  * Presentation colors are ignored, but every visible fill and positive-width stroke contributes
481
465
  * geometry. Open filled subpaths use SVG's implicit closure while open strokes remain open.
482
466
  * Transforms and declared physical units are flattened, viewport placement is explicit, and
483
467
  * metadata is ignored. Tiny-island and short-edge counts are conservative physical indicators,
484
468
  * not proof of raster provenance or process-specific manufacturability.
485
- *
486
- * @param svg - Complete SVG XML source, limited to 256 KiB of UTF-8.
487
- * @param options - Physical flattening and viewport-origin controls.
488
- * @returns The normalized sampled region plus bounded review metrics and repairs.
489
- * @throws {@link GeometryError} When XML, supported-feature, geometry, or complexity checks fail.
490
469
  */
491
470
  function createSvgRegionPreflight(svg, options = {}, estimate = false) {
492
471
  const bytes = new TextEncoder().encode(svg).byteLength;
@@ -566,7 +545,8 @@ function createSvgRegionPreflight(svg, options = {}, estimate = false) {
566
545
  }
567
546
  if (tag === "svg" && parent !== undefined)
568
547
  return fail("Nested SVG roots are not supported.");
569
- let transform = multiply(parent?.transform ?? [1, 0, 0, 1, 0, 0], parseTransform(values.transform));
548
+ const localTransform = parseTransform(values.transform);
549
+ let transform = multiply(parent?.transform ?? [1, 0, 0, 1, 0, 0], localTransform);
570
550
  const paint = parsePaint(values, parent?.paint ?? DEFAULT_PAINT);
571
551
  if (tag === "svg") {
572
552
  if (rootSeen)
@@ -576,7 +556,7 @@ function createSvgRegionPreflight(svg, options = {}, estimate = false) {
576
556
  const [, , viewWidth, viewHeight] = box;
577
557
  const width = lengthMm(values.width, viewWidth);
578
558
  const height = lengthMm(values.height, viewHeight);
579
- transform = multiply(canvasTransform(values, width, height, box, origin), parseTransform(values.transform));
559
+ transform = multiply(canvasTransform(values, width, height, box, origin), localTransform);
580
560
  if (options.fit !== undefined) {
581
561
  // Fitted artwork has no meaningful source-unit topology tolerance. Keep sampling,
582
562
  // stroking and clipping near a unit viewport, then compose this physical-unit scale
@@ -592,6 +572,8 @@ function createSvgRegionPreflight(svg, options = {}, estimate = false) {
592
572
  elementCount += 1;
593
573
  if (elementCount > MAX_SVG_ELEMENTS)
594
574
  return fail(`SVG geometry may contain at most ${MAX_SVG_ELEMENTS} elements.`);
575
+ // Flatten with transformed error bounds, retaining source coordinates for stroke widths.
576
+ // Fills can use transformed points immediately; stroke outlines must be built locally first.
595
577
  const localSubpaths = elementSubpaths(tag, values, transform, resolution, budget, estimate);
596
578
  const subpaths = localSubpaths.map((subpath) => ({
597
579
  ...subpath,
@@ -607,6 +589,7 @@ function createSvgRegionPreflight(svg, options = {}, estimate = false) {
607
589
  if (!paintedFill && !paintedStroke)
608
590
  invisibleElementCount += 1;
609
591
  if (paintedFill) {
592
+ // SVG implicitly closes filled paths without closing those same paths for strokes.
610
593
  implicitFilledClosureCount += subpaths.filter((subpath) => !subpath.closed && subpath.points.length >= 3).length;
611
594
  appendGeometry(elementGeometry, fillGeometry(subpaths, paint.fillRule), "element fill output");
612
595
  }
@@ -681,7 +664,7 @@ function createSvgRegionPreflight(svg, options = {}, estimate = false) {
681
664
  * manufacturability or later solid validity.
682
665
  *
683
666
  * @param svg - Complete SVG XML source, limited to 256 KiB of UTF-8.
684
- * @param options - Physical flattening and viewport-origin controls.
667
+ * @param options - Physical sampling, viewport origin, and optional fitting to millimetre bounds.
685
668
  * @returns The canonical normalized region plus bounded source, topology, and safe-repair facts.
686
669
  * @throws {@link GeometryError} When XML, supported-feature, geometry, or complexity checks fail.
687
670
  */
@@ -689,7 +672,7 @@ export function preflightSvgRegion(svg, options = {}) {
689
672
  if (options.fit === undefined)
690
673
  return createSvgRegionPreflight(svg, options)[0];
691
674
  // Capture mutable caller data once; all refinement passes fit to the same finite target.
692
- const target = bounds2(options.fit);
675
+ const target = bounds2(options.fit).toData();
693
676
  const resolution = svgResolution(options);
694
677
  let samplingScale = 1;
695
678
  for (let pass = 0; pass < MAX_SVG_FIT_PASSES; pass++) {
@@ -1,9 +1,9 @@
1
1
  import { SVGPathData, SVGPathDataTransformer } from "svg-pathdata";
2
- import { resolveArcSegments, resolveGeometryResolution, } from "../resolution.js";
3
- import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
2
+ import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling/limits.js";
3
+ import { resolveArcSegments, resolveGeometryResolution, } from "../sampling/resolution.js";
4
4
  import { complexity, invalid, rethrowAsInvalid } from "./errors.js";
5
5
  import { transformPoint } from "./matrix.js";
6
- export const MAX_CURVE_RECURSION = 16;
6
+ const MAX_CURVE_RECURSION = 16;
7
7
  export class SvgVertexBudget {
8
8
  limits;
9
9
  #emittedCount = 0;
@@ -0,0 +1,55 @@
1
+ import { add3, rotateAroundAxis3Radians, scale3 } from "../math/vector3.js";
2
+ import { validateTriangleMesh } from "../mesh/operations.js";
3
+ import { validateSweepOptions } from "./orientation.js";
4
+ import { sweepSeamOffset } from "./seam.js";
5
+ import { prepareSweepStations, resolveSweepScales } from "./stations.js";
6
+ import { assertSweepAllocation, normalizeSweepPath, normalizeSweepProfile, writeSweepVertex, } from "./validation.js";
7
+ /** @internal Checks host allocation policy before frames or manufacturing buffers. */
8
+ export const buildClosedSweepMesh = (profile, inputPath, options = {}) => {
9
+ const operation = "sweep";
10
+ validateSweepOptions(options);
11
+ profile = normalizeSweepProfile(profile, operation, options.limits);
12
+ const normalizedPath = normalizeSweepPath(inputPath, true, operation, options.limits);
13
+ assertSweepAllocation(normalizedPath.length, profile.length, true, operation, options.limits);
14
+ const originalScales = resolveSweepScales(options.scale, normalizedPath, options.closed);
15
+ const twistRadians = ((options.twist ?? 0) / 180) * Math.PI;
16
+ const ringVertexCount = profile.length;
17
+ const normalizedSeamProfileOffset = sweepSeamOffset(profile, originalScales[0], options.twist ?? 0);
18
+ const { path, scales, frames: transportedFrames, twists, } = prepareSweepStations([profile], normalizedPath, originalScales, options, (count) => assertSweepAllocation(count, profile.length, true, operation, options.limits));
19
+ const positions = new Float32Array(path.length * ringVertexCount * 3);
20
+ for (let ring = 0; ring < path.length; ring += 1) {
21
+ const point = path[ring];
22
+ const tangent = transportedFrames[ring].tangent;
23
+ const twist = twists?.[ring] ?? twistRadians * (ring / path.length);
24
+ const baseNormal = transportedFrames[ring].normal;
25
+ const normal = rotateAroundAxis3Radians(baseNormal, tangent, twist);
26
+ const binormal = rotateAroundAxis3Radians(transportedFrames[ring].binormal, tangent, twist);
27
+ const [scaleX, scaleY] = scales[ring];
28
+ for (let profileIndex = 0; profileIndex < profile.length; profileIndex += 1) {
29
+ const [x, y] = profile[profileIndex];
30
+ const vertex = add3(point, add3(scale3(normal, x * scaleX), scale3(binormal, y * scaleY)));
31
+ writeSweepVertex(positions, (ring * ringVertexCount + profileIndex) * 3, vertex, operation);
32
+ }
33
+ }
34
+ const indices = new Uint32Array(path.length * ringVertexCount * 2 * 3);
35
+ let cursor = 0;
36
+ for (let ring = 0; ring < path.length; ring += 1) {
37
+ const nextRing = (ring + 1) % path.length;
38
+ const nextProfileOffset = nextRing === 0 ? normalizedSeamProfileOffset : 0;
39
+ for (let profileIndex = 0; profileIndex < ringVertexCount; profileIndex += 1) {
40
+ const following = (profileIndex + 1) % ringVertexCount;
41
+ const a = ring * ringVertexCount + profileIndex;
42
+ const b = ring * ringVertexCount + following;
43
+ const c = nextRing * ringVertexCount + ((following + nextProfileOffset) % ringVertexCount);
44
+ const d = nextRing * ringVertexCount + ((profileIndex + nextProfileOffset) % ringVertexCount);
45
+ indices[cursor] = a;
46
+ indices[cursor + 1] = b;
47
+ indices[cursor + 2] = c;
48
+ indices[cursor + 3] = a;
49
+ indices[cursor + 4] = c;
50
+ indices[cursor + 5] = d;
51
+ cursor += 6;
52
+ }
53
+ }
54
+ return validateTriangleMesh({ indices, positions });
55
+ };
@@ -0,0 +1,30 @@
1
+ import { resolveModelingLimits } from "../limits.js";
2
+ import { pointLoftProfile, prepareLoftGeometry } from "../loft/geometry.js";
3
+ import { simpleLoftMesh } from "../loft/simple-mesh.js";
4
+ import { path2InputData, path3InputData, } from "../paths/value.js";
5
+ import { buildClosedSweepMesh } from "./closed.js";
6
+ import { buildOpenSweepMesh } from "./open.js";
7
+ import { validateSweepOptions, validateSweepTransformOptions } from "./orientation.js";
8
+ import { isSweepTransformRoute, sweepTransforms } from "./transforms.js";
9
+ import { normalizeSweepProfile } from "./validation.js";
10
+ export function sweepMesh(profile, route, options = {}) {
11
+ const explicit = isSweepTransformRoute(route);
12
+ if (explicit)
13
+ validateSweepTransformOptions(options);
14
+ else
15
+ validateSweepOptions(options);
16
+ const limits = resolveModelingLimits(options.limits);
17
+ const outline = path2InputData(profile, true, { maxPathPoints: limits.maxProfilePoints }).points;
18
+ if (explicit) {
19
+ const transforms = sweepTransforms(route, options.closed ?? false, limits);
20
+ const profile = pointLoftProfile(normalizeSweepProfile(outline, "sweep", limits));
21
+ const geometry = prepareLoftGeometry(transforms.map((transform) => ({ profile, transform })), {}, limits, true);
22
+ return simpleLoftMesh(geometry, limits, options.closed ?? false);
23
+ }
24
+ const data = path3InputData(route, options.closed, limits);
25
+ const selected = { ...options, closed: data.closed };
26
+ if (data.closed) {
27
+ return buildClosedSweepMesh(outline, data.points, selected);
28
+ }
29
+ return buildOpenSweepMesh(outline, data.points, selected);
30
+ }
@@ -1,34 +1,19 @@
1
- import { triangulateContour } from "../loft/loft.js";
2
1
  import { add3, rotateAroundAxis3Radians, scale3 } from "../math/vector3.js";
3
- import { validateTriangleMesh } from "../mesh/mesh.js";
4
- import { resolveSweepScales } from "./options.js";
5
- import { computeSweepFrames, validateSweepOptions } from "./orientation.js";
6
- import { planSweepStations, refineSweepStations } from "./stations.js";
2
+ import { validateTriangleMesh } from "../mesh/operations.js";
3
+ import { triangulateContour } from "../regions/triangulation.js";
4
+ import { validateSweepOptions } from "./orientation.js";
5
+ import { prepareSweepStations, resolveSweepScales } from "./stations.js";
7
6
  import { assertSweepAllocation, normalizeSweepPath, normalizeSweepProfile, writeSweepVertex, } from "./validation.js";
8
7
  /** @internal Checks host allocation policy before frames, caps or manufacturing buffers. */
9
- export const buildOpenSweepMesh = (profile, path, options = {}) => {
8
+ export const buildOpenSweepMesh = (profile, inputPath, options = {}) => {
10
9
  const operation = "sweep";
11
10
  validateSweepOptions(options);
12
11
  profile = normalizeSweepProfile(profile, operation, options.limits);
13
- path = normalizeSweepPath(path, false, operation, options.limits);
14
- assertSweepAllocation(path.length, profile.length, false, operation, options.limits);
15
- let scales = resolveSweepScales(options.scale, path.length);
12
+ const normalizedPath = normalizeSweepPath(inputPath, false, operation, options.limits);
13
+ assertSweepAllocation(normalizedPath.length, profile.length, false, operation, options.limits);
14
+ const originalScales = resolveSweepScales(options.scale, normalizedPath, options.closed);
16
15
  const twistRadians = ((options.twist ?? 0) / 180) * Math.PI;
17
- if (twistRadians !== 0) {
18
- const plan = planSweepStations([profile], path, scales, options);
19
- assertSweepAllocation(plan.stationCount, profile.length, false, operation, options.limits);
20
- }
21
- let frames = computeSweepFrames(path, options);
22
- let twists;
23
- if (twistRadians !== 0) {
24
- const plan = planSweepStations([profile], path, scales, options, frames);
25
- assertSweepAllocation(plan.stationCount, profile.length, false, operation, options.limits);
26
- const refined = refineSweepStations(path, scales, frames, options, plan);
27
- path = refined.path;
28
- scales = refined.scales;
29
- frames = refined.frames;
30
- twists = refined.twists;
31
- }
16
+ const { path, scales, frames, twists } = prepareSweepStations([profile], normalizedPath, originalScales, options, (count) => assertSweepAllocation(count, profile.length, false, operation, options.limits));
32
17
  const caps = triangulateContour(profile);
33
18
  const ringVertexCount = profile.length;
34
19
  const sideVertexCount = path.length * ringVertexCount;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,24 +1,25 @@
1
1
  import { GeometryError } from "../errors.js";
2
2
  import { cross3, normalize3, projectOntoPlane3, subtract3 } from "../math/vector3.js";
3
3
  import { computeClosedParallelTransportFrames, computeParallelTransportFrames, } from "../paths/frames.js";
4
+ import { resolveGeometryResolution } from "../sampling/resolution.js";
4
5
  import { validateSweepNormal } from "./validation.js";
5
6
  const fail = (message, code = "INVALID_ARGUMENT") => {
6
7
  throw new GeometryError(code, message, { operation: "sweep" });
7
8
  };
8
- /** @internal Validates the canonical sweep controls without evaluating authored guides. */
9
+ /** @internal Validates explicit station controls without accepting path deformation. */
10
+ export function validateSweepTransformOptions(options) {
11
+ if (typeof options !== "object" || options === null || Array.isArray(options))
12
+ fail("Sweep options must be an object.");
13
+ if (Object.keys(options).some((key) => !["closed", "limits"].includes(key)))
14
+ fail("Explicit sweep transforms cannot be combined with path controls.");
15
+ if (options.closed !== undefined && typeof options.closed !== "boolean")
16
+ fail("Sweep closed must be boolean.");
17
+ }
18
+ /** @internal Validates path controls without evaluating authored normal guides. */
9
19
  export function validateSweepOptions(options) {
10
20
  if (typeof options !== "object" || options === null || Array.isArray(options))
11
21
  fail("Sweep options must be an object.");
12
- const allowed = [
13
- "closed",
14
- "limits",
15
- "orientation",
16
- "resolution",
17
- "twist",
18
- "twistBy",
19
- "scale",
20
- "seamProfileOffset",
21
- ];
22
+ const allowed = ["closed", "limits", "orientation", "resolution", "twist", "twistBy", "scale"];
22
23
  if (Object.keys(options).some((key) => !allowed.includes(key)))
23
24
  fail("Unsupported sweep option.");
24
25
  if (options.closed !== undefined && typeof options.closed !== "boolean")
@@ -31,6 +32,8 @@ export function validateSweepOptions(options) {
31
32
  throw new GeometryError("NON_FINITE_VALUE", "Sweep twist must be finite.", {
32
33
  operation: "sweep",
33
34
  });
35
+ if (options.resolution !== undefined)
36
+ resolveGeometryResolution(options.resolution, options.limits);
34
37
  const policy = options.orientation;
35
38
  if (policy === undefined)
36
39
  return;
@@ -0,0 +1,30 @@
1
+ import { GeometryError } from "../errors.js";
2
+ import { resolveGeometryTolerance } from "../tolerance.js";
3
+ /** @internal Finds a verified cyclic closure; ordinary full turns retain the zero-offset path. */
4
+ export function sweepSeamOffset(profile, scale, twist) {
5
+ const angle = ((twist % 360) * Math.PI) / 180;
6
+ const cosine = Math.cos(angle), sine = Math.sin(angle);
7
+ const points = profile.map(([x, y]) => [x * scale[0], y * scale[1]]);
8
+ const tolerance = resolveGeometryTolerance(points.reduce((extent, [x, y]) => Math.max(extent, Math.abs(x), Math.abs(y)), 1)).linear;
9
+ const rotated = points.map(([x, y]) => [
10
+ x * cosine - y * sine,
11
+ x * sine + y * cosine,
12
+ ]);
13
+ let comparisons = 0;
14
+ const matches = (index, offset) => {
15
+ if (++comparisons > 1_000_000)
16
+ throw new GeometryError("COMPLEXITY_LIMIT", "Sweep seam matching exceeded its comparison budget.", { operation: "sweep" });
17
+ const a = rotated[index], b = points[(index + offset) % points.length];
18
+ return Math.hypot(a[0] - b[0], a[1] - b[1]) <= tolerance;
19
+ };
20
+ for (let offset = 0; offset < points.length; offset++) {
21
+ if (!matches(0, offset))
22
+ continue;
23
+ let index = 1;
24
+ while (index < points.length && matches(index, offset))
25
+ index++;
26
+ if (index === points.length)
27
+ return offset;
28
+ }
29
+ throw new GeometryError("INVALID_TOPOLOGY", "Sweep twist must return every profile boundary to a coincident cyclic alignment.", { operation: "sweep" });
30
+ }
@@ -1,7 +1,9 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { vector2Data } from "../math/vector-value.js";
2
3
  import { cross3, dot3, lerp3, normalize3, rotateAroundAxis3Radians } from "../math/vector3.js";
3
- import { resolveGeometryResolution } from "../resolution.js";
4
- import { assertSamplingCount, resolveGeometrySamplingLimits } from "../sampling-limits.js";
4
+ import { assertSamplingCount, resolveGeometrySamplingLimits } from "../sampling/limits.js";
5
+ import { resolveGeometryResolution } from "../sampling/resolution.js";
6
+ import { computeSweepFrames } from "./orientation.js";
5
7
  /** @internal Original station progression, with a virtual final seam endpoint for closed paths. */
6
8
  export function sweepProgress(path, options) {
7
9
  if (options.twistBy !== undefined &&
@@ -24,6 +26,62 @@ export function sweepProgress(path, options) {
24
26
  throw new GeometryError("DEGENERATE_GEOMETRY", "Sweep progression needs finite positive path length.", { operation: "sweep" });
25
27
  return cumulative.map((length) => length / total);
26
28
  }
29
+ /** @internal Resolves positive physical station scales independently of twist progression. */
30
+ export function resolveSweepScales(scale, path, closed = false) {
31
+ const fail = () => {
32
+ throw new GeometryError("INVALID_ARGUMENT", "Sweep scales must be positive finite XY pairs, with one pair per original station when varying.", { operation: "sweep" });
33
+ };
34
+ const pair = (value) => {
35
+ if (typeof value === "number") {
36
+ if (!(value > 0) || !Number.isFinite(value))
37
+ fail();
38
+ return [value, value];
39
+ }
40
+ const coordinates = vector2Data(value);
41
+ if (!coordinates.every((n) => Number.isFinite(n) && n > 0))
42
+ fail();
43
+ return coordinates;
44
+ };
45
+ if (scale === undefined ||
46
+ typeof scale === "number" ||
47
+ (typeof scale === "object" && scale !== null && "toData" in scale) ||
48
+ (Array.isArray(scale) && typeof scale[0] === "number")) {
49
+ const value = pair(scale ?? 1);
50
+ if (closed || (value[0] === 1 && value[1] === 1))
51
+ return Array.from({ length: path.length }, () => value);
52
+ return sweepProgress(path, {}).map((amount) => [
53
+ 1 + (value[0] - 1) * amount,
54
+ 1 + (value[1] - 1) * amount,
55
+ ]);
56
+ }
57
+ if (!Array.isArray(scale) || scale.length !== path.length)
58
+ fail();
59
+ return scale.map(pair);
60
+ }
61
+ /** @internal Untwisted, constant-scale sweeps keep their original station-only mesh. */
62
+ function needsSweepRefinement(scales, options) {
63
+ return ((options.twist ?? 0) !== 0 ||
64
+ options.resolution?.maxSegmentLength !== undefined ||
65
+ scales.some((scale, i) => i > 0 && (scale[0] !== scales[i - 1][0] || scale[1] !== scales[i - 1][1])));
66
+ }
67
+ /**
68
+ * @internal Prepares frames and refinement after caller-owned normalization, initial allocation,
69
+ * scales and seam checks. Rejects predicted work before authored guides, then checks frame-aware
70
+ * work before interpolation. Callers retain their own simple or hole-aware allocation budgets.
71
+ */
72
+ export function prepareSweepStations(contours, path, scales, options, assertAllocation) {
73
+ const refine = needsSweepRefinement(scales, options);
74
+ if (refine) {
75
+ const plan = planSweepStations(contours, path, scales, options);
76
+ assertAllocation(plan.stationCount);
77
+ }
78
+ const frames = computeSweepFrames(path, options);
79
+ if (!refine)
80
+ return { path, scales, frames, twists: undefined };
81
+ const plan = planSweepStations(contours, path, scales, options, frames);
82
+ assertAllocation(plan.stationCount);
83
+ return refineSweepStations(path, scales, frames, options, plan);
84
+ }
27
85
  /** Shortest rotation between two right-handed transported frames, including a stable half turn. */
28
86
  function frameRotation(from, to) {
29
87
  const cosine = Math.max(-1, Math.min(1, (dot3(from.normal, to.normal) +
@@ -61,7 +119,7 @@ function frameRotation(from, to) {
61
119
  halfTurn[i] = (matrix[i][principal] + matrix[principal][i]) / (4 * component);
62
120
  return { axis: normalize3(halfTurn), angle };
63
121
  }
64
- /** Plans refinement of the whole triangulated surface, including its mixed edge/twist error. */
122
+ /** @internal Plans refinement of the whole triangulated surface, including its mixed edge/twist error. */
65
123
  export function planSweepStations(contours, path, scales, options, frames) {
66
124
  const closed = options.closed ?? false;
67
125
  const segmentCount = closed ? path.length : path.length - 1;
@@ -72,7 +130,7 @@ export function planSweepStations(contours, path, scales, options, frames) {
72
130
  });
73
131
  const intervals = [];
74
132
  const progress = sweepProgress(path, options);
75
- if (twistRadians === 0)
133
+ if (!needsSweepRefinement(scales, options))
76
134
  return { intervals: Array(segmentCount).fill(1), stationCount: path.length, progress };
77
135
  const resolution = resolveGeometryResolution(options.resolution, options.limits);
78
136
  const limits = resolveGeometrySamplingLimits(options.limits);
@@ -101,11 +159,18 @@ export function planSweepStations(contours, path, scales, options, frames) {
101
159
  // term bounds the mixed profile-edge/station derivative; bounding only vertex
102
160
  // trajectories misses the systematic inward bias of a twisted quad diagonal.
103
161
  const curvature = radius * (maximumScale * (angle * angle + frameAngle * twistStep) + 2 * scaleChange * angle);
104
- const a = curvature / 8, b = (edgeLength * (maximumScale * angle + scaleChange)) / 4;
105
- const requiredAngular = resolution.circularSegments === undefined
106
- ? Math.max(1, Math.ceil((b + Math.hypot(b, 2 * Math.sqrt(a * resolution.maxChordError))) /
107
- (2 * resolution.maxChordError)), Math.ceil((resolution.minSegments * angle) / (2 * Math.PI)))
108
- : Math.max(1, Math.ceil((resolution.circularSegments * angle) / (2 * Math.PI)));
162
+ const a = curvature / 8,
163
+ // A straight homothetic taper has planar walls; only differential XY
164
+ // scaling adds mixed surface error when the frame and twist stay fixed.
165
+ mixedScaleChange = angle === 0 && scales[i][0] * scales[next][1] === scales[i][1] * scales[next][0]
166
+ ? 0
167
+ : scaleChange, b = (edgeLength * (maximumScale * angle + mixedScaleChange)) / 4;
168
+ const requiredPhysical = Math.max(1, Math.ceil((b + Math.hypot(b, 2 * Math.sqrt(a * resolution.maxChordError))) /
169
+ (2 * resolution.maxChordError)));
170
+ const angularIntervals = Math.max(1, Math.ceil(((resolution.circularSegments ?? resolution.minSegments) * angle) / (2 * Math.PI)));
171
+ const requiredAngular = resolution.circularSegments === undefined || scaleChange > 0
172
+ ? Math.max(requiredPhysical, angularIntervals)
173
+ : angularIntervals;
109
174
  const allowedAngular = Math.max(1, scaleChange === 0 ? 0 : resolution.maxSegments, Math.ceil((resolution.maxSegments * angle) / (2 * Math.PI)));
110
175
  if (requiredAngular > allowedAngular)
111
176
  throw new GeometryError("COMPLEXITY_LIMIT", `Sweep surface refinement requires ${requiredAngular} intervals; the selected circular ceiling allows ${allowedAngular}.`, {
@@ -124,7 +189,7 @@ export function planSweepStations(contours, path, scales, options, frames) {
124
189
  }
125
190
  return { intervals, stationCount, progress };
126
191
  }
127
- /** Inserts twist samples without calling authored guides again or changing original station meaning. */
192
+ /** @internal Inserts physical samples without recalling authored guides or changing original station meaning. */
128
193
  export function refineSweepStations(path, scales, frames, options, plan) {
129
194
  const twistRadians = ((options.twist ?? 0) / 180) * Math.PI;
130
195
  const segmentCount = plan.intervals.length;
@@ -0,0 +1,30 @@
1
+ import { GeometryError } from "../errors.js";
2
+ import { assertSamplingCount } from "../sampling/limits.js";
3
+ import { isFrame3Input } from "../transforms/matrix-input.js";
4
+ import { transform3 } from "../transforms/value.js";
5
+ /** @internal Distinguishes point paths from placements without allocating a frame matrix. */
6
+ export function isSweepTransformRoute(route) {
7
+ if (!Array.isArray(route) || route.length === 0)
8
+ return false;
9
+ const first = route[0];
10
+ if (Array.isArray(first))
11
+ return first.length === 16;
12
+ const method = typeof first === "object" && first !== null ? Reflect.get(first, "toData") : undefined;
13
+ if (typeof method !== "function")
14
+ return isFrame3Input(first);
15
+ const data = Reflect.apply(method, first, []);
16
+ return Array.isArray(data) && data.length === 16;
17
+ }
18
+ /** @internal Checks station budgets before capturing explicit affine placements. */
19
+ export function sweepTransforms(transforms, closed, limits) {
20
+ if (!Array.isArray(transforms) || transforms.length < (closed ? 3 : 2))
21
+ throw new GeometryError("INVALID_ARGUMENT", "Sweep requires at least two transforms, or three for a closed sweep.", { operation: "sweep" });
22
+ assertSamplingCount(transforms.length, "sweep", limits.maxPathPoints);
23
+ return Array.from(transforms, (placement) => {
24
+ if (placement === undefined)
25
+ throw new GeometryError("INVALID_ARGUMENT", "Every sweep station requires a transform.", {
26
+ operation: "sweep",
27
+ });
28
+ return transform3(placement).toData();
29
+ });
30
+ }