@metamesh/modeling 0.11.0 → 0.13.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 (630) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +60 -58
  3. package/dist/api/engine.d.ts +123 -97
  4. package/dist/api/geometry.d.ts +3896 -3307
  5. package/dist/api/index.d.ts +2489 -2267
  6. package/dist/api/text.d.ts +119 -107
  7. package/dist/docs/guides/concepts.md +197 -0
  8. package/dist/docs/guides/fonts.md +51 -0
  9. package/dist/docs/guides/fundamentals.md +135 -0
  10. package/dist/docs/guides/generation.md +221 -0
  11. package/dist/docs/guides/hosting.md +88 -0
  12. package/dist/docs/guides/recipes.md +668 -0
  13. package/dist/docs/manifest.json +9851 -0
  14. package/dist/docs/reference/engine/Export3mfOptions.md +29 -0
  15. package/dist/docs/reference/engine/ExportMeshPart.md +65 -0
  16. package/dist/docs/reference/engine/GenerationOptions.md +62 -0
  17. package/dist/docs/reference/engine/GeometryResource.md +77 -0
  18. package/dist/docs/reference/engine/ModelDependencies.md +41 -0
  19. package/dist/docs/reference/engine/ModelEngine.md +103 -0
  20. package/dist/docs/reference/engine/ModelEngineOptions.md +33 -0
  21. package/dist/docs/reference/engine/ModelSession.md +96 -0
  22. package/dist/docs/reference/engine/ModelSnapshot.md +173 -0
  23. package/dist/docs/reference/engine/SessionOptions.md +123 -0
  24. package/dist/docs/reference/engine/SnapshotPart.md +130 -0
  25. package/dist/docs/reference/engine/categories/host-lifecycle.md +37 -0
  26. package/dist/docs/reference/engine/createModelEngine.md +56 -0
  27. package/dist/docs/reference/engine/defaultModelingLimits.md +7 -0
  28. package/dist/docs/reference/engine/modelingWasmUrl.md +7 -0
  29. package/dist/docs/reference/engine/validateModel.md +48 -0
  30. package/dist/docs/reference/engine.md +25 -0
  31. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +75 -0
  32. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +79 -0
  33. package/dist/docs/reference/geometry/Anchor3.md +49 -0
  34. package/dist/docs/reference/geometry/ArcCurve2.md +70 -0
  35. package/dist/docs/reference/geometry/ArcCurve3.md +94 -0
  36. package/dist/docs/reference/geometry/AttachTransformOptions.md +58 -0
  37. package/dist/docs/reference/geometry/AxisAngleRotation3.md +61 -0
  38. package/dist/docs/reference/geometry/Bounds2.md +39 -0
  39. package/dist/docs/reference/geometry/Bounds3.md +39 -0
  40. package/dist/docs/reference/geometry/BoundsFit2.md +52 -0
  41. package/dist/docs/reference/geometry/BoundsFit3.md +52 -0
  42. package/dist/docs/reference/geometry/BoundsFitOptions.md +23 -0
  43. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +23 -0
  44. package/dist/docs/reference/geometry/BoxAnchorFace.md +7 -0
  45. package/dist/docs/reference/geometry/BoxAnchorOptions.md +59 -0
  46. package/dist/docs/reference/geometry/BoxEdge.md +7 -0
  47. package/dist/docs/reference/geometry/BoxEdgeSelection.md +14 -0
  48. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +15 -0
  49. package/dist/docs/reference/geometry/BoxOptions.md +87 -0
  50. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +7 -0
  51. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +93 -0
  52. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +29 -0
  53. package/dist/docs/reference/geometry/CircleContourOptions.md +15 -0
  54. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +59 -0
  55. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +41 -0
  56. package/dist/docs/reference/geometry/ClearanceHoleFit.md +7 -0
  57. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +53 -0
  58. package/dist/docs/reference/geometry/Contour.md +17 -0
  59. package/dist/docs/reference/geometry/ContourCurve.md +35 -0
  60. package/dist/docs/reference/geometry/ContourPoint.md +29 -0
  61. package/dist/docs/reference/geometry/ContourSegment.md +86 -0
  62. package/dist/docs/reference/geometry/CorrespondingComponent.md +46 -0
  63. package/dist/docs/reference/geometry/CorrespondingContour.md +46 -0
  64. package/dist/docs/reference/geometry/CorrespondingProfile.md +22 -0
  65. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +27 -0
  66. package/dist/docs/reference/geometry/CubicBezierCurve2.md +70 -0
  67. package/dist/docs/reference/geometry/CubicBezierCurve3.md +70 -0
  68. package/dist/docs/reference/geometry/Curve2.md +16 -0
  69. package/dist/docs/reference/geometry/Curve3.md +16 -0
  70. package/dist/docs/reference/geometry/CurveSamplingOptions.md +64 -0
  71. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +73 -0
  72. package/dist/docs/reference/geometry/CylinderAnchorFace.md +7 -0
  73. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +83 -0
  74. package/dist/docs/reference/geometry/CylinderOptions.md +53 -0
  75. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +209 -0
  76. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +7 -0
  77. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +71 -0
  78. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +82 -0
  79. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +34 -0
  80. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +41 -0
  81. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +47 -0
  82. package/dist/docs/reference/geometry/CylindricalGearSpec.md +82 -0
  83. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -0
  84. package/dist/docs/reference/geometry/EdgeTreatment.md +17 -0
  85. package/dist/docs/reference/geometry/EllipseContourOptions.md +15 -0
  86. package/dist/docs/reference/geometry/EndTreatments.md +34 -0
  87. package/dist/docs/reference/geometry/ExtrudeOptions.md +134 -0
  88. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +77 -0
  89. package/dist/docs/reference/geometry/FittedTextLayout.md +60 -0
  90. package/dist/docs/reference/geometry/Frame3.md +58 -0
  91. package/dist/docs/reference/geometry/GeometryError.md +97 -0
  92. package/dist/docs/reference/geometry/GeometryErrorCode.md +7 -0
  93. package/dist/docs/reference/geometry/GeometryErrorContext.md +29 -0
  94. package/dist/docs/reference/geometry/GeometryResolution.md +65 -0
  95. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +62 -0
  96. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +41 -0
  97. package/dist/docs/reference/geometry/GridPatternOptions.md +42 -0
  98. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +14 -0
  99. package/dist/docs/reference/geometry/HeightfieldOptions.md +67 -0
  100. package/dist/docs/reference/geometry/HeightfieldPreflight.md +53 -0
  101. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +141 -0
  102. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +265 -0
  103. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +53 -0
  104. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +14 -0
  105. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +242 -0
  106. package/dist/docs/reference/geometry/LineCurve2.md +46 -0
  107. package/dist/docs/reference/geometry/LineCurve3.md +46 -0
  108. package/dist/docs/reference/geometry/LinearPatternOptions.md +30 -0
  109. package/dist/docs/reference/geometry/LoftCorrespondence.md +19 -0
  110. package/dist/docs/reference/geometry/LoftMeshStation.md +27 -0
  111. package/dist/docs/reference/geometry/LoftOptions.md +84 -0
  112. package/dist/docs/reference/geometry/LoftPlacement.md +66 -0
  113. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +18 -0
  114. package/dist/docs/reference/geometry/MatchProfilesOptions.md +35 -0
  115. package/dist/docs/reference/geometry/MetricFastenerSize.md +7 -0
  116. package/dist/docs/reference/geometry/MetricFastenerStandard.md +72 -0
  117. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +29 -0
  118. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +41 -0
  119. package/dist/docs/reference/geometry/ModelingLimits.md +126 -0
  120. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +17 -0
  121. package/dist/docs/reference/geometry/Path2.md +14 -0
  122. package/dist/docs/reference/geometry/Path3.md +14 -0
  123. package/dist/docs/reference/geometry/PathFrame.md +46 -0
  124. package/dist/docs/reference/geometry/PathNormalGuide.md +38 -0
  125. package/dist/docs/reference/geometry/PathPatternOptions.md +46 -0
  126. package/dist/docs/reference/geometry/PathPlacement.md +34 -0
  127. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +7 -0
  128. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +156 -0
  129. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +120 -0
  130. package/dist/docs/reference/geometry/PlanarPatchQuality.md +190 -0
  131. package/dist/docs/reference/geometry/Polygon.md +38 -0
  132. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +92 -0
  133. package/dist/docs/reference/geometry/PrimitivePlacement.md +31 -0
  134. package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +83 -0
  135. package/dist/docs/reference/geometry/PrintableThreadFit.md +7 -0
  136. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +45 -0
  137. package/dist/docs/reference/geometry/Profile.md +22 -0
  138. package/dist/docs/reference/geometry/ProfileComponent2.md +46 -0
  139. package/dist/docs/reference/geometry/ProfileContour2.md +34 -0
  140. package/dist/docs/reference/geometry/ProfileSpan2.md +47 -0
  141. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +36 -0
  142. package/dist/docs/reference/geometry/RackPitchDimensions.md +113 -0
  143. package/dist/docs/reference/geometry/RackPitchSpec.md +77 -0
  144. package/dist/docs/reference/geometry/RadialPatternOptions.md +62 -0
  145. package/dist/docs/reference/geometry/RadialSizing.md +7 -0
  146. package/dist/docs/reference/geometry/RadialSizingOptions.md +40 -0
  147. package/dist/docs/reference/geometry/RectangleContourOptions.md +66 -0
  148. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +34 -0
  149. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +14 -0
  150. package/dist/docs/reference/geometry/RectangleProfileOptions.md +94 -0
  151. package/dist/docs/reference/geometry/Region.md +14 -0
  152. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +84 -0
  153. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +65 -0
  154. package/dist/docs/reference/geometry/RevolveOptions.md +82 -0
  155. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +91 -0
  156. package/dist/docs/reference/geometry/RowLayoutOptions.md +23 -0
  157. package/dist/docs/reference/geometry/SampleContourOptions.md +71 -0
  158. package/dist/docs/reference/geometry/SampleHelixOptions.md +95 -0
  159. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +71 -0
  160. package/dist/docs/reference/geometry/SampledCurve2.md +34 -0
  161. package/dist/docs/reference/geometry/SampledCurve3.md +34 -0
  162. package/dist/docs/reference/geometry/SampledThreadHelices.md +58 -0
  163. package/dist/docs/reference/geometry/SideProfileCurve.md +35 -0
  164. package/dist/docs/reference/geometry/SideProfilePoint.md +29 -0
  165. package/dist/docs/reference/geometry/SideProfileSegment.md +86 -0
  166. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +71 -0
  167. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +34 -0
  168. package/dist/docs/reference/geometry/SphereOptions.md +15 -0
  169. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +75 -0
  170. package/dist/docs/reference/geometry/StrokePathCap.md +7 -0
  171. package/dist/docs/reference/geometry/StrokePathJoin.md +7 -0
  172. package/dist/docs/reference/geometry/StrokePathRegionOptions.md +85 -0
  173. package/dist/docs/reference/geometry/SvgImportOptions.md +60 -0
  174. package/dist/docs/reference/geometry/SvgRegionPreflight.md +61 -0
  175. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +118 -0
  176. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +65 -0
  177. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +53 -0
  178. package/dist/docs/reference/geometry/SweepOptions.md +109 -0
  179. package/dist/docs/reference/geometry/SweepOrientation.md +109 -0
  180. package/dist/docs/reference/geometry/ThreadBevelOptions.md +53 -0
  181. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +100 -0
  182. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +73 -0
  183. package/dist/docs/reference/geometry/ThreadEndStyle.md +7 -0
  184. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +113 -0
  185. package/dist/docs/reference/geometry/ThreadHandedness.md +7 -0
  186. package/dist/docs/reference/geometry/ThreadHelixOptions.md +120 -0
  187. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +7 -0
  188. package/dist/docs/reference/geometry/ThreadLeadInShape.md +7 -0
  189. package/dist/docs/reference/geometry/ThreadProfile.md +82 -0
  190. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +49 -0
  191. package/dist/docs/reference/geometry/ThreadProfileSpec.md +19 -0
  192. package/dist/docs/reference/geometry/ThreadRole.md +7 -0
  193. package/dist/docs/reference/geometry/ThreadedNutBevel.md +7 -0
  194. package/dist/docs/reference/geometry/ThreadedNutOptions.md +269 -0
  195. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +94 -0
  196. package/dist/docs/reference/geometry/ThreadedNutShape.md +7 -0
  197. package/dist/docs/reference/geometry/ThreadedRodOptions.md +242 -0
  198. package/dist/docs/reference/geometry/TorusOptions.md +105 -0
  199. package/dist/docs/reference/geometry/Transform3.md +12 -0
  200. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +91 -0
  201. package/dist/docs/reference/geometry/TriangleMesh.md +34 -0
  202. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +119 -0
  203. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +75 -0
  204. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +75 -0
  205. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +39 -0
  206. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +190 -0
  207. package/dist/docs/reference/geometry/TriangleMeshSignature.md +107 -0
  208. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +41 -0
  209. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +29 -0
  210. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +51 -0
  211. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +91 -0
  212. package/dist/docs/reference/geometry/TubeOptions.md +138 -0
  213. package/dist/docs/reference/geometry/Vector2.md +7 -0
  214. package/dist/docs/reference/geometry/Vector3.md +7 -0
  215. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +53 -0
  216. package/dist/docs/reference/geometry/VectorTextLayout.md +39 -0
  217. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +111 -0
  218. package/dist/docs/reference/geometry/VectorTextMetrics.md +94 -0
  219. package/dist/docs/reference/geometry/VectorTextOptions.md +50 -0
  220. package/dist/docs/reference/geometry/add3.md +38 -0
  221. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +57 -0
  222. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +52 -0
  223. package/dist/docs/reference/geometry/anchorFrame3.md +40 -0
  224. package/dist/docs/reference/geometry/applyTransformDirection3.md +41 -0
  225. package/dist/docs/reference/geometry/applyTransformPoint3.md +39 -0
  226. package/dist/docs/reference/geometry/attachTransform.md +73 -0
  227. package/dist/docs/reference/geometry/boundsCenter.md +62 -0
  228. package/dist/docs/reference/geometry/boundsFromSize.md +83 -0
  229. package/dist/docs/reference/geometry/boundsSize.md +62 -0
  230. package/dist/docs/reference/geometry/boxAnchor3.md +48 -0
  231. package/dist/docs/reference/geometry/buildHelicalThreadRidgeMesh.md +68 -0
  232. package/dist/docs/reference/geometry/buildHelicalThreadSolidMesh.md +102 -0
  233. package/dist/docs/reference/geometry/categories/bounds-layout.md +35 -0
  234. package/dist/docs/reference/geometry/categories/curves-paths.md +63 -0
  235. package/dist/docs/reference/geometry/categories/mechanical.md +101 -0
  236. package/dist/docs/reference/geometry/categories/meshes.md +73 -0
  237. package/dist/docs/reference/geometry/categories/pattern-placement.md +34 -0
  238. package/dist/docs/reference/geometry/categories/primitive-options.md +36 -0
  239. package/dist/docs/reference/geometry/categories/profiles-regions.md +74 -0
  240. package/dist/docs/reference/geometry/categories/resolution-errors.md +46 -0
  241. package/dist/docs/reference/geometry/categories/transforms-math.md +63 -0
  242. package/dist/docs/reference/geometry/categories/vector-import.md +40 -0
  243. package/dist/docs/reference/geometry/circleContour.md +33 -0
  244. package/dist/docs/reference/geometry/closeToAxis.md +34 -0
  245. package/dist/docs/reference/geometry/compensateThreadDiameters.md +51 -0
  246. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +42 -0
  247. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +56 -0
  248. package/dist/docs/reference/geometry/composeTransform3.md +40 -0
  249. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +45 -0
  250. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +47 -0
  251. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +31 -0
  252. package/dist/docs/reference/geometry/containsBounds.md +72 -0
  253. package/dist/docs/reference/geometry/contourContainsPoint.md +33 -0
  254. package/dist/docs/reference/geometry/createAnchor3.md +63 -0
  255. package/dist/docs/reference/geometry/createThreadProfile.md +37 -0
  256. package/dist/docs/reference/geometry/createTriangleMeshSignature.md +60 -0
  257. package/dist/docs/reference/geometry/cross3.md +38 -0
  258. package/dist/docs/reference/geometry/cumulativePathLengths.md +33 -0
  259. package/dist/docs/reference/geometry/cylinderAnchor3.md +56 -0
  260. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +14 -0
  261. package/dist/docs/reference/geometry/distributeAlongPath.md +51 -0
  262. package/dist/docs/reference/geometry/dot3.md +38 -0
  263. package/dist/docs/reference/geometry/ellipseContour.md +33 -0
  264. package/dist/docs/reference/geometry/eulerTransform3.md +38 -0
  265. package/dist/docs/reference/geometry/extrudeMesh.md +73 -0
  266. package/dist/docs/reference/geometry/fitBounds.md +95 -0
  267. package/dist/docs/reference/geometry/fitTextLayout.md +57 -0
  268. package/dist/docs/reference/geometry/frameTransform3.md +44 -0
  269. package/dist/docs/reference/geometry/getMetricClearanceHole.md +33 -0
  270. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +27 -0
  271. package/dist/docs/reference/geometry/gridPatternTransforms.md +31 -0
  272. package/dist/docs/reference/geometry/heightfieldMesh.md +43 -0
  273. package/dist/docs/reference/geometry/inverseTransform3.md +30 -0
  274. package/dist/docs/reference/geometry/isGeometryError.md +26 -0
  275. package/dist/docs/reference/geometry/joinTriangleMeshes.md +36 -0
  276. package/dist/docs/reference/geometry/layoutRow.md +43 -0
  277. package/dist/docs/reference/geometry/length3.md +26 -0
  278. package/dist/docs/reference/geometry/lerp3.md +38 -0
  279. package/dist/docs/reference/geometry/linearPatternTransforms.md +31 -0
  280. package/dist/docs/reference/geometry/loftMesh.md +72 -0
  281. package/dist/docs/reference/geometry/matchProfiles.md +51 -0
  282. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +47 -0
  283. package/dist/docs/reference/geometry/measureTriangleMesh.md +55 -0
  284. package/dist/docs/reference/geometry/meshBounds.md +35 -0
  285. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +29 -0
  286. package/dist/docs/reference/geometry/normalize3.md +32 -0
  287. package/dist/docs/reference/geometry/normalizeContour.md +45 -0
  288. package/dist/docs/reference/geometry/normalizePolygon.md +37 -0
  289. package/dist/docs/reference/geometry/normalizeRegion.md +33 -0
  290. package/dist/docs/reference/geometry/optimizePlanarPatches.md +91 -0
  291. package/dist/docs/reference/geometry/pathLength.md +33 -0
  292. package/dist/docs/reference/geometry/pathPatternTransforms.md +57 -0
  293. package/dist/docs/reference/geometry/preflightHeightfield.md +34 -0
  294. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +96 -0
  295. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +85 -0
  296. package/dist/docs/reference/geometry/preflightSvgRegion.md +56 -0
  297. package/dist/docs/reference/geometry/preflightThreadedNut.md +96 -0
  298. package/dist/docs/reference/geometry/preflightThreadedRod.md +85 -0
  299. package/dist/docs/reference/geometry/projectOntoPlane3.md +32 -0
  300. package/dist/docs/reference/geometry/radialPatternTransforms.md +47 -0
  301. package/dist/docs/reference/geometry/rectangleContour.md +49 -0
  302. package/dist/docs/reference/geometry/rectangleProfile.md +53 -0
  303. package/dist/docs/reference/geometry/regionArea.md +34 -0
  304. package/dist/docs/reference/geometry/regionBounds.md +27 -0
  305. package/dist/docs/reference/geometry/regularPolygonContour.md +53 -0
  306. package/dist/docs/reference/geometry/resamplePolyline2.md +64 -0
  307. package/dist/docs/reference/geometry/resamplePolyline3.md +67 -0
  308. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +79 -0
  309. package/dist/docs/reference/geometry/resolveArcSegments.md +67 -0
  310. package/dist/docs/reference/geometry/resolveCircularSegments.md +61 -0
  311. package/dist/docs/reference/geometry/resolveCylindricalGear.md +31 -0
  312. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +31 -0
  313. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +74 -0
  314. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +26 -0
  315. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +59 -0
  316. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +27 -0
  317. package/dist/docs/reference/geometry/resolveRackPitch.md +27 -0
  318. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +59 -0
  319. package/dist/docs/reference/geometry/reverseTriangleMesh.md +30 -0
  320. package/dist/docs/reference/geometry/revolveMesh.md +76 -0
  321. package/dist/docs/reference/geometry/rotateAroundAxis3.md +38 -0
  322. package/dist/docs/reference/geometry/rotationTransform3.md +49 -0
  323. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +50 -0
  324. package/dist/docs/reference/geometry/sampleContour.md +77 -0
  325. package/dist/docs/reference/geometry/sampleCurve2.md +61 -0
  326. package/dist/docs/reference/geometry/sampleCurve3.md +61 -0
  327. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +58 -0
  328. package/dist/docs/reference/geometry/sampleHelix.md +41 -0
  329. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +59 -0
  330. package/dist/docs/reference/geometry/sampleRackToothPath.md +39 -0
  331. package/dist/docs/reference/geometry/sampleSideProfile.md +73 -0
  332. package/dist/docs/reference/geometry/sampleTextContours.md +53 -0
  333. package/dist/docs/reference/geometry/sampleThreadHelices.md +63 -0
  334. package/dist/docs/reference/geometry/scale3.md +38 -0
  335. package/dist/docs/reference/geometry/scaleTransform3.md +34 -0
  336. package/dist/docs/reference/geometry/signedContourArea.md +26 -0
  337. package/dist/docs/reference/geometry/starContour.md +51 -0
  338. package/dist/docs/reference/geometry/strokePathRegion.md +63 -0
  339. package/dist/docs/reference/geometry/subtract3.md +38 -0
  340. package/dist/docs/reference/geometry/sweepMesh.md +82 -0
  341. package/dist/docs/reference/geometry/transformContour.md +42 -0
  342. package/dist/docs/reference/geometry/transformDeterminant3.md +32 -0
  343. package/dist/docs/reference/geometry/transformPath2.md +40 -0
  344. package/dist/docs/reference/geometry/transformPath3.md +33 -0
  345. package/dist/docs/reference/geometry/transformRegion.md +40 -0
  346. package/dist/docs/reference/geometry/transformTriangleMesh.md +42 -0
  347. package/dist/docs/reference/geometry/translationTransform3.md +31 -0
  348. package/dist/docs/reference/geometry/triangulateContour.md +26 -0
  349. package/dist/docs/reference/geometry/validateSolidMesh.md +52 -0
  350. package/dist/docs/reference/geometry/validateTransform3.md +43 -0
  351. package/dist/docs/reference/geometry/validateTriangleMesh.md +59 -0
  352. package/dist/docs/reference/geometry.md +30 -0
  353. package/dist/docs/reference/model/Anchor3.md +54 -0
  354. package/dist/docs/reference/model/AttachOptions.md +63 -0
  355. package/dist/docs/reference/model/Bounds2.md +39 -0
  356. package/dist/docs/reference/model/Bounds3.md +39 -0
  357. package/dist/docs/reference/model/BoxEdge.md +15 -0
  358. package/dist/docs/reference/model/BoxEdgeSelection.md +19 -0
  359. package/dist/docs/reference/model/BoxEdgeTreatments.md +20 -0
  360. package/dist/docs/reference/model/BoxOptions.md +92 -0
  361. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +35 -0
  362. package/dist/docs/reference/model/CircleContourOptions.md +21 -0
  363. package/dist/docs/reference/model/CircleOptions.md +21 -0
  364. package/dist/docs/reference/model/CircularPrimitiveOptions.md +64 -0
  365. package/dist/docs/reference/model/Computed.md +35 -0
  366. package/dist/docs/reference/model/ComputedValue.md +20 -0
  367. package/dist/docs/reference/model/Contour.md +22 -0
  368. package/dist/docs/reference/model/CorrespondingComponent.md +46 -0
  369. package/dist/docs/reference/model/CorrespondingContour.md +46 -0
  370. package/dist/docs/reference/model/CorrespondingProfile.md +22 -0
  371. package/dist/docs/reference/model/CorrespondingProfileStation.md +27 -0
  372. package/dist/docs/reference/model/CylinderOptions.md +58 -0
  373. package/dist/docs/reference/model/DiagnosticOptions.md +23 -0
  374. package/dist/docs/reference/model/EdgeTreatment.md +22 -0
  375. package/dist/docs/reference/model/EllipseContourOptions.md +21 -0
  376. package/dist/docs/reference/model/EllipseOptions.md +21 -0
  377. package/dist/docs/reference/model/EndTreatments.md +39 -0
  378. package/dist/docs/reference/model/ExtrudeOptions.md +140 -0
  379. package/dist/docs/reference/model/FinalizedModel.md +121 -0
  380. package/dist/docs/reference/model/FinalizedPart.md +87 -0
  381. package/dist/docs/reference/model/Frame3.md +63 -0
  382. package/dist/docs/reference/model/GenerateCallback.md +37 -0
  383. package/dist/docs/reference/model/GenerateContext.md +277 -0
  384. package/dist/docs/reference/model/GeneratedPart.md +93 -0
  385. package/dist/docs/reference/model/GenerationDiagnostic.md +41 -0
  386. package/dist/docs/reference/model/GenerationError.md +54 -0
  387. package/dist/docs/reference/model/GeometryResolution.md +70 -0
  388. package/dist/docs/reference/model/GeometrySamplingLimits.md +62 -0
  389. package/dist/docs/reference/model/GeometryToleranceOptions.md +46 -0
  390. package/dist/docs/reference/model/GridPatternOptions.md +43 -0
  391. package/dist/docs/reference/model/HeightfieldOptions.md +67 -0
  392. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +140 -0
  393. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +58 -0
  394. package/dist/docs/reference/model/HullOptions.md +72 -0
  395. package/dist/docs/reference/model/ImmutableBuffer-type.md +80 -0
  396. package/dist/docs/reference/model/ImmutableTriangleMesh.md +34 -0
  397. package/dist/docs/reference/model/ImplicitOptions.md +83 -0
  398. package/dist/docs/reference/model/InternalThreadCutterOptions.md +245 -0
  399. package/dist/docs/reference/model/LinearPatternOptions.md +31 -0
  400. package/dist/docs/reference/model/LoftCorrespondence.md +27 -0
  401. package/dist/docs/reference/model/LoftOptions.md +91 -0
  402. package/dist/docs/reference/model/LoftPlacement.md +73 -0
  403. package/dist/docs/reference/model/LoftStation.md +35 -0
  404. package/dist/docs/reference/model/MatchProfilesOptions.md +35 -0
  405. package/dist/docs/reference/model/ModelProgram.md +44 -0
  406. package/dist/docs/reference/model/ModelingLimits.md +126 -0
  407. package/dist/docs/reference/model/NumericArray.md +7 -0
  408. package/dist/docs/reference/model/PartGeometry.md +16 -0
  409. package/dist/docs/reference/model/PartOptions.md +65 -0
  410. package/dist/docs/reference/model/PathNormalGuide.md +45 -0
  411. package/dist/docs/reference/model/PathPatternOptions.md +47 -0
  412. package/dist/docs/reference/model/PatternSource.md +26 -0
  413. package/dist/docs/reference/model/PlaneOptions.md +39 -0
  414. package/dist/docs/reference/model/Polygon-type.md +43 -0
  415. package/dist/docs/reference/model/PolygonOptions.md +112 -0
  416. package/dist/docs/reference/model/PrimitivePlacement.md +40 -0
  417. package/dist/docs/reference/model/PrimitivePlacementOptions.md +88 -0
  418. package/dist/docs/reference/model/PrintableThreadFit.md +14 -0
  419. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +50 -0
  420. package/dist/docs/reference/model/Profile.md +22 -0
  421. package/dist/docs/reference/model/ProfileComponent2.md +46 -0
  422. package/dist/docs/reference/model/ProfileContour2.md +34 -0
  423. package/dist/docs/reference/model/ProfileSpan2.md +47 -0
  424. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +41 -0
  425. package/dist/docs/reference/model/RadialPatternOptions.md +63 -0
  426. package/dist/docs/reference/model/RadialSizing.md +15 -0
  427. package/dist/docs/reference/model/RadialSizingOptions.md +40 -0
  428. package/dist/docs/reference/model/RectangleContourOptions.md +72 -0
  429. package/dist/docs/reference/model/RectangleCornerTreatment.md +40 -0
  430. package/dist/docs/reference/model/RectangleCornerTreatments.md +20 -0
  431. package/dist/docs/reference/model/RectangleOptions.md +107 -0
  432. package/dist/docs/reference/model/Region.md +19 -0
  433. package/dist/docs/reference/model/RegionOffsetJoin.md +16 -0
  434. package/dist/docs/reference/model/RegionOffsetOptions.md +65 -0
  435. package/dist/docs/reference/model/RegularPolygonOptions.md +53 -0
  436. package/dist/docs/reference/model/RevolveOptions.md +89 -0
  437. package/dist/docs/reference/model/RoundedEdgeTreatment.md +96 -0
  438. package/dist/docs/reference/model/Section.md +450 -0
  439. package/dist/docs/reference/model/SectionHullOptions.md +72 -0
  440. package/dist/docs/reference/model/SectionInspection.md +98 -0
  441. package/dist/docs/reference/model/SmoothEdgeTreatment.md +76 -0
  442. package/dist/docs/reference/model/Solid.md +350 -0
  443. package/dist/docs/reference/model/SolidInspection.md +98 -0
  444. package/dist/docs/reference/model/SolidRayHit.md +58 -0
  445. package/dist/docs/reference/model/SphereOptions.md +20 -0
  446. package/dist/docs/reference/model/StarOptions.md +98 -0
  447. package/dist/docs/reference/model/SvgOrigin.md +16 -0
  448. package/dist/docs/reference/model/SvgPathSectionOptions.md +78 -0
  449. package/dist/docs/reference/model/SvgSectionOptions.md +66 -0
  450. package/dist/docs/reference/model/SweepOptions.md +116 -0
  451. package/dist/docs/reference/model/SweepOrientation.md +116 -0
  452. package/dist/docs/reference/model/TextSectionOptions.md +41 -0
  453. package/dist/docs/reference/model/ThreadEndStyle.md +14 -0
  454. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +117 -0
  455. package/dist/docs/reference/model/ThreadHandedness.md +14 -0
  456. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +14 -0
  457. package/dist/docs/reference/model/ThreadLeadInShape.md +14 -0
  458. package/dist/docs/reference/model/ThreadProfile.md +86 -0
  459. package/dist/docs/reference/model/ThreadRidgeOptions.md +18 -0
  460. package/dist/docs/reference/model/ThreadedNutBevel.md +14 -0
  461. package/dist/docs/reference/model/ThreadedNutOptions.md +273 -0
  462. package/dist/docs/reference/model/ThreadedNutPreflight.md +98 -0
  463. package/dist/docs/reference/model/ThreadedNutShape.md +14 -0
  464. package/dist/docs/reference/model/ThreadedRodOptions.md +245 -0
  465. package/dist/docs/reference/model/TorusOptions.md +110 -0
  466. package/dist/docs/reference/model/Transform2.md +15 -0
  467. package/dist/docs/reference/model/Transform3.md +18 -0
  468. package/dist/docs/reference/model/TriangleMesh.md +42 -0
  469. package/dist/docs/reference/model/TriangleMeshAnalysis.md +123 -0
  470. package/dist/docs/reference/model/TriangleMeshMeasurements.md +79 -0
  471. package/dist/docs/reference/model/TubeOptions.md +143 -0
  472. package/dist/docs/reference/model/Vector2.md +15 -0
  473. package/dist/docs/reference/model/Vector3.md +15 -0
  474. package/dist/docs/reference/model/VectorTextLayout.md +40 -0
  475. package/dist/docs/reference/model/VectorTextMetrics.md +100 -0
  476. package/dist/docs/reference/model/anchor.md +46 -0
  477. package/dist/docs/reference/model/box.md +62 -0
  478. package/dist/docs/reference/model/categories/boolean-operations.md +37 -0
  479. package/dist/docs/reference/model/categories/bounded-surfaces.md +26 -0
  480. package/dist/docs/reference/model/categories/contracts.md +16 -0
  481. package/dist/docs/reference/model/categories/core-values-errors.md +30 -0
  482. package/dist/docs/reference/model/categories/explicit-profiles.md +32 -0
  483. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +42 -0
  484. package/dist/docs/reference/model/categories/generation.md +44 -0
  485. package/dist/docs/reference/model/categories/inspection.md +23 -0
  486. package/dist/docs/reference/model/categories/mesh-inspection.md +29 -0
  487. package/dist/docs/reference/model/categories/primitives.md +61 -0
  488. package/dist/docs/reference/model/categories/resolution.md +18 -0
  489. package/dist/docs/reference/model/categories/sections.md +59 -0
  490. package/dist/docs/reference/model/categories/threads.md +50 -0
  491. package/dist/docs/reference/model/categories/transforms-placement.md +43 -0
  492. package/dist/docs/reference/model/circle.md +39 -0
  493. package/dist/docs/reference/model/components.md +68 -0
  494. package/dist/docs/reference/model/compose.md +31 -0
  495. package/dist/docs/reference/model/cylinder.md +52 -0
  496. package/dist/docs/reference/model/distance.md +45 -0
  497. package/dist/docs/reference/model/ellipse.md +39 -0
  498. package/dist/docs/reference/model/extrude.md +83 -0
  499. package/dist/docs/reference/model/fromRegion.md +33 -0
  500. package/dist/docs/reference/model/generate.md +46 -0
  501. package/dist/docs/reference/model/gridPattern.md +80 -0
  502. package/dist/docs/reference/model/heightfield.md +40 -0
  503. package/dist/docs/reference/model/hull.md +74 -0
  504. package/dist/docs/reference/model/immutableBuffer.md +44 -0
  505. package/dist/docs/reference/model/immutableMesh.md +40 -0
  506. package/dist/docs/reference/model/implicit.md +47 -0
  507. package/dist/docs/reference/model/inspectSection.md +38 -0
  508. package/dist/docs/reference/model/inspectSolid.md +38 -0
  509. package/dist/docs/reference/model/internalThreadCutter.md +100 -0
  510. package/dist/docs/reference/model/intersect.md +70 -0
  511. package/dist/docs/reference/model/isEmpty.md +39 -0
  512. package/dist/docs/reference/model/linearPattern.md +80 -0
  513. package/dist/docs/reference/model/loft.md +137 -0
  514. package/dist/docs/reference/model/matchProfiles.md +42 -0
  515. package/dist/docs/reference/model/minkowskiSum.md +37 -0
  516. package/dist/docs/reference/model/pathPattern.md +118 -0
  517. package/dist/docs/reference/model/polygon.md +40 -0
  518. package/dist/docs/reference/model/preflightInternalThreadCutter.md +89 -0
  519. package/dist/docs/reference/model/preflightThreadedNut.md +100 -0
  520. package/dist/docs/reference/model/preflightThreadedRod.md +89 -0
  521. package/dist/docs/reference/model/radialPattern.md +113 -0
  522. package/dist/docs/reference/model/rayCast.md +40 -0
  523. package/dist/docs/reference/model/rectangle.md +59 -0
  524. package/dist/docs/reference/model/regularPolygon.md +39 -0
  525. package/dist/docs/reference/model/revolve.md +74 -0
  526. package/dist/docs/reference/model/solidFromMesh.md +42 -0
  527. package/dist/docs/reference/model/sphere.md +42 -0
  528. package/dist/docs/reference/model/split.md +54 -0
  529. package/dist/docs/reference/model/splitByPlane.md +66 -0
  530. package/dist/docs/reference/model/star.md +63 -0
  531. package/dist/docs/reference/model/svgPathSection.md +65 -0
  532. package/dist/docs/reference/model/svgSection.md +64 -0
  533. package/dist/docs/reference/model/sweep.md +92 -0
  534. package/dist/docs/reference/model/textSection.md +57 -0
  535. package/dist/docs/reference/model/threadRidge.md +72 -0
  536. package/dist/docs/reference/model/threadedNut.md +110 -0
  537. package/dist/docs/reference/model/threadedRod.md +99 -0
  538. package/dist/docs/reference/model/toRegion.md +33 -0
  539. package/dist/docs/reference/model/toTriangleMesh.md +27 -0
  540. package/dist/docs/reference/model/torus.md +70 -0
  541. package/dist/docs/reference/model/tube.md +77 -0
  542. package/dist/docs/reference/model/union.md +72 -0
  543. package/dist/docs/reference/model.md +39 -0
  544. package/dist/docs/reference/text/Bounds2.md +34 -0
  545. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -0
  546. package/dist/docs/reference/text/Vector2.md +7 -0
  547. package/dist/docs/reference/text/VectorFont.md +186 -0
  548. package/dist/docs/reference/text/VectorFontOptions.md +17 -0
  549. package/dist/docs/reference/text/VectorTextArcBaseline.md +53 -0
  550. package/dist/docs/reference/text/VectorTextLayout.md +34 -0
  551. package/dist/docs/reference/text/VectorTextLayoutOptions.md +111 -0
  552. package/dist/docs/reference/text/VectorTextMetrics.md +94 -0
  553. package/dist/docs/reference/text/VectorTextOptions.md +50 -0
  554. package/dist/docs/reference/text/categories/font-preparation.md +38 -0
  555. package/dist/docs/reference/text/prepareVectorFont.md +46 -0
  556. package/dist/docs/reference/text.md +21 -0
  557. package/dist/engine/construction-operations.js +10 -3
  558. package/dist/engine/deferred-context.js +12 -3
  559. package/dist/engine/execution.js +1 -1
  560. package/dist/engine/export-3mf.js +2 -2
  561. package/dist/engine/finalization.js +3 -3
  562. package/dist/engine/immutable-generation-data.js +36 -6
  563. package/dist/engine/loft-operations.js +4 -4
  564. package/dist/engine/native/adapter.js +1 -1
  565. package/dist/engine/native/regions.js +9 -9
  566. package/dist/engine/pattern-operations.js +24 -13
  567. package/dist/engine/pattern-transform.js +9 -0
  568. package/dist/engine/placement.js +2 -2
  569. package/dist/engine/primitive-operations.js +10 -10
  570. package/dist/engine/profile-mesh.js +7 -7
  571. package/dist/engine/section-operations.js +25 -14
  572. package/dist/engine/session-graph.js +40 -33
  573. package/dist/engine/session.js +1 -2
  574. package/dist/geometry/bounds.js +117 -0
  575. package/dist/geometry/cylinder.js +5 -1
  576. package/dist/geometry/edge-finishing.js +2 -2
  577. package/dist/geometry/heightfield.js +1 -1
  578. package/dist/geometry/index.js +15 -12
  579. package/dist/geometry/{loft-correspondence.js → loft/loft-correspondence.js} +3 -3
  580. package/dist/geometry/{loft-geometry.js → loft/loft-geometry.js} +8 -8
  581. package/dist/geometry/{loft-options.js → loft/loft-options.js} +2 -2
  582. package/dist/geometry/{loft-simple-mesh.js → loft/loft-simple-mesh.js} +6 -6
  583. package/dist/geometry/{loft-triangulation.js → loft/loft-triangulation.js} +6 -6
  584. package/dist/geometry/{loft.js → loft/loft.js} +8 -8
  585. package/dist/geometry/math/vector3.js +5 -1
  586. package/dist/geometry/mechanical/gears.js +2 -2
  587. package/dist/geometry/mechanical/thread-mesh.js +3 -3
  588. package/dist/geometry/mechanical/thread-profiles.js +2 -2
  589. package/dist/geometry/mechanical/thread-surface.js +14 -5
  590. package/dist/geometry/{mesh-centroid.js → mesh/mesh-centroid.js} +1 -1
  591. package/dist/geometry/{mesh-planar.js → mesh/mesh-planar.js} +1 -1
  592. package/dist/geometry/{mesh-quality.js → mesh/mesh-quality.js} +2 -2
  593. package/dist/geometry/{mesh-signature.js → mesh/mesh-signature.js} +2 -2
  594. package/dist/geometry/{mesh-solid.js → mesh/mesh-solid.js} +2 -2
  595. package/dist/geometry/{mesh.js → mesh/mesh.js} +7 -8
  596. package/dist/geometry/paths/frames.js +4 -5
  597. package/dist/geometry/patterns/options.js +1 -0
  598. package/dist/{engine/pattern-placements.js → geometry/patterns/placements.js} +22 -8
  599. package/dist/geometry/patterns.js +25 -0
  600. package/dist/geometry/primitive-resolvers.js +9 -9
  601. package/dist/geometry/profiles/contour.js +3 -3
  602. package/dist/geometry/profiles/matched.js +3 -3
  603. package/dist/geometry/profiles/profiles.js +10 -10
  604. package/dist/geometry/profiles/rectangle.js +7 -7
  605. package/dist/geometry/profiles/shapes.js +9 -9
  606. package/dist/geometry/profiles/side-profile.js +37 -0
  607. package/dist/geometry/regions.js +15 -15
  608. package/dist/geometry/revolve/revolve-mesh.js +5 -5
  609. package/dist/geometry/stroke-path.js +2 -2
  610. package/dist/geometry/svg/errors.js +0 -3
  611. package/dist/geometry/svg/fill.js +7 -7
  612. package/dist/geometry/svg/index.js +1 -1
  613. package/dist/geometry/svg/matrix.js +0 -114
  614. package/dist/geometry/svg/parser.js +1 -439
  615. package/dist/geometry/svg-import.js +3 -3
  616. package/dist/geometry/sweeps/sweep-closed.js +1 -1
  617. package/dist/geometry/sweeps/sweep-mesh.js +1 -1
  618. package/dist/geometry/sweeps/sweep-open.js +3 -3
  619. package/dist/geometry/sweeps/validation.js +2 -2
  620. package/dist/geometry/text-fitting.js +85 -0
  621. package/dist/geometry/tolerance.js +2 -2
  622. package/dist/geometry/transform-geometry.js +9 -9
  623. package/dist/model/execution-binding.js +3 -3
  624. package/dist/model/generation.js +1 -1
  625. package/dist/model/operation-contracts.js +1 -0
  626. package/dist/model/operation-dispatch.js +6 -0
  627. package/dist/model/operations.js +19 -49
  628. package/package.json +10 -8
  629. /package/dist/geometry/{mesh-edge-table.js → mesh/mesh-edge-table.js} +0 -0
  630. /package/dist/geometry/{mesh-solid-intersections.js → mesh/mesh-solid-intersections.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { GeometryError } from "../geometry/errors.js";
2
2
  import { GenerationError, } from "../model/generation.js";
3
- import { captureGenerationValue, compareGenerationValues, generationDataEntries, } from "./immutable-generation-data.js";
3
+ import { captureGenerationDependencies, captureGenerationValue, compareGenerationValues, generationDataEntries, } from "./immutable-generation-data.js";
4
4
  import { createModelDependencies } from "./model-dependencies.js";
5
5
  import { assertSynchronousScopeResult } from "./native/ownership.js";
6
6
  function reusableEntry(node) {
@@ -11,17 +11,13 @@ function reusableEntry(node) {
11
11
  return undefined;
12
12
  }
13
13
  const parameterKeys = Symbol("parameter-keys");
14
- const emptyBindings = Object.freeze({});
14
+ const emptyInputs = Object.freeze([]);
15
15
  const isArray = (value) => Array.isArray(value);
16
16
  const canonicalId = (id) => typeof id === "string" && id.length <= 64 && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(id);
17
17
  function invalid(message) {
18
18
  throw new GeometryError("INVALID_ARGUMENT", message, { operation: "generate" });
19
19
  }
20
- const sameBindings = (left, right) => {
21
- const keys = Object.keys(left);
22
- return (keys.length === Object.keys(right).length &&
23
- keys.every((key) => Object.hasOwn(right, key) && Object.is(left[key], right[key])));
24
- };
20
+ const sameInputs = (left, right) => left.length === right.length && left.every((value, index) => Object.is(value, right[index]));
25
21
  function evaluateComputed(callback) {
26
22
  const result = callback();
27
23
  assertSynchronousScopeResult(result, () => new GeometryError("INVALID_ARGUMENT", "Computed callbacks must be synchronous.", {
@@ -46,16 +42,18 @@ class ComputationRevision {
46
42
  parameterSnapshot;
47
43
  committed;
48
44
  readerIds;
45
+ validatedInputs;
49
46
  assertActive;
50
47
  assertNoFailedAssertion;
51
48
  nodes = new Map();
52
49
  keySignature;
53
50
  stack = [];
54
- constructor(options, parameterSnapshot, committed, readerIds, assertActive, assertNoFailedAssertion) {
51
+ constructor(options, parameterSnapshot, committed, readerIds, validatedInputs, assertActive, assertNoFailedAssertion) {
55
52
  this.options = options;
56
53
  this.parameterSnapshot = parameterSnapshot;
57
54
  this.committed = committed;
58
55
  this.readerIds = readerIds;
56
+ this.validatedInputs = validatedInputs;
59
57
  this.assertActive = assertActive;
60
58
  this.assertNoFailedAssertion = assertNoFailedAssertion;
61
59
  // Structural reads share one unambiguous signature, even when parameter names contain NUL.
@@ -77,27 +75,22 @@ class ComputationRevision {
77
75
  this.nodes.clear();
78
76
  this.committed = new Map();
79
77
  }
80
- register(id, bindingsOrCallback, callback) {
78
+ register(id, callback, dependencies = emptyInputs) {
81
79
  if (!canonicalId(id) || this.nodes.has(id))
82
80
  invalid("Computed IDs must be unique canonical lowercase identifiers of at most 64 characters.");
83
81
  if (this.nodes.size >= 100_000)
84
82
  throw new GeometryError("COMPLEXITY_LIMIT", "Too many declared computations.", {
85
83
  operation: "computed",
86
84
  });
87
- const bindings = typeof bindingsOrCallback === "function"
88
- ? emptyBindings
89
- : Object.freeze(Object.fromEntries(generationDataEntries(bindingsOrCallback)));
85
+ if (typeof callback !== "function" || !Array.isArray(dependencies))
86
+ invalid("Use computed(id, callback, dependencies?) with an optional dependency array.");
87
+ const inputs = dependencies === emptyInputs
88
+ ? emptyInputs
89
+ : captureGenerationDependencies(dependencies, (value) => this.readerIds.has(value), this.validatedInputs);
90
90
  const previous = this.committed.get(id);
91
- let boundInputs;
92
- if (previous !== undefined && sameBindings(previous.bindings, bindings))
93
- boundInputs = previous.boundInputs;
94
- else
95
- boundInputs = captureGenerationValue(bindings, (value) => this.readerIds.has(value));
96
- const invoke = typeof bindingsOrCallback === "function" ? bindingsOrCallback : () => callback(boundInputs);
97
91
  this.nodes.set(id, {
98
- callback: invoke,
99
- bindings,
100
- boundInputs,
92
+ callback,
93
+ inputs,
101
94
  previous,
102
95
  state: { kind: "pending" },
103
96
  });
@@ -162,7 +155,7 @@ class ComputationRevision {
162
155
  }
163
156
  }
164
157
  canReuse(node, previous) {
165
- if (this.options.cache === false || node.boundInputs !== previous.boundInputs)
158
+ if (this.options.cache === false || !sameInputs(node.inputs, previous.inputs))
166
159
  return false;
167
160
  for (const [key, value] of previous.parameters) {
168
161
  const current = key === parameterKeys ? this.keySignature : Reflect.get(this.parameterSnapshot, key);
@@ -191,6 +184,18 @@ class ComputationRevision {
191
184
  evaluation.parameters.clear();
192
185
  evaluation.dependencies.clear();
193
186
  evaluation.cacheable = true;
187
+ // Declared readers depend on their output, not just their stable callable identity.
188
+ for (const input of node.inputs) {
189
+ const dependency = typeof input === "function" ? this.readerIds.get(input) : undefined;
190
+ if (dependency !== undefined) {
191
+ try {
192
+ this.read(dependency);
193
+ }
194
+ catch {
195
+ // Failed reads already prevent reuse; the callback owns propagation or fallback.
196
+ }
197
+ }
198
+ }
194
199
  const result = evaluateComputed(node.callback);
195
200
  this.assertNoFailedAssertion();
196
201
  const previous = node.previous;
@@ -198,14 +203,13 @@ class ComputationRevision {
198
203
  if (reusable && previous !== undefined) {
199
204
  const comparison = compareGenerationValues(previous.value, result);
200
205
  if (comparison === "different")
201
- invalid(`Cache verification for '${id}' found a changed result without a tracked dependency. Bind changing local values explicitly.`);
206
+ invalid(`Cache verification for '${id}' found a changed result without a tracked dependency. Add changing outer values to the dependency array.`);
202
207
  if (comparison === "unsupported")
203
208
  invalid(`Cache verification for '${id}' cannot compare this result within its bounded data/recipe probe. Use cache: false for a full output equivalence check.`);
204
209
  value = previous.value;
205
210
  }
206
211
  return Object.freeze({
207
- bindings: node.bindings,
208
- boundInputs: node.boundInputs,
212
+ inputs: node.inputs,
209
213
  parameters: evaluation.parameters,
210
214
  dependencies: evaluation.dependencies,
211
215
  value,
@@ -221,11 +225,12 @@ export function createGenerationGraph(options, maxParts) {
221
225
  let committed = new Map();
222
226
  const readers = new Map();
223
227
  const readerIds = new WeakMap();
228
+ const validatedInputs = new WeakSet();
224
229
  let activeRead;
225
230
  let previousInput = {};
226
231
  let previousParameterSnapshot = {};
227
232
  // Build stable readers outside registration's lexical scope so they cannot retain a revision's
228
- // callback, captured locals, or copied bindings after that revision closes.
233
+ // callback, captured locals, or dependency inputs after that revision closes.
229
234
  const createReader = (id) => (() => {
230
235
  if (activeRead === undefined)
231
236
  return invalid("Computed readers can only be used during their active model session revision.");
@@ -251,7 +256,7 @@ export function createGenerationGraph(options, maxParts) {
251
256
  if (assertionFailure !== undefined)
252
257
  throw assertionFailure;
253
258
  };
254
- const computations = new ComputationRevision(options, parameterSnapshot, committed, readerIds, assertActive, assertNoFailedAssertion);
259
+ const computations = new ComputationRevision(options, parameterSnapshot, committed, readerIds, validatedInputs, assertActive, assertNoFailedAssertion);
255
260
  const params = new Proxy(parameterSnapshot, {
256
261
  get: (target, key) => {
257
262
  assertActive();
@@ -300,11 +305,11 @@ export function createGenerationGraph(options, maxParts) {
300
305
  },
301
306
  });
302
307
  activeRead = computations.read;
303
- const computed = ((id, bindingsOrCallback, callback) => {
308
+ const computed = ((id, callback, dependencies) => {
304
309
  assertActive();
305
310
  if (!declaring || computations.evaluating)
306
311
  invalid("Declare computations only in the outer generation callback.");
307
- computations.register(id, bindingsOrCallback, callback);
312
+ computations.register(id, callback, dependencies);
308
313
  let reader = readers.get(id);
309
314
  if (reader === undefined) {
310
315
  reader = createReader(id);
@@ -379,18 +384,20 @@ export function createGenerationGraph(options, maxParts) {
379
384
  // Catching an assertion does not turn its revision into a successful snapshot.
380
385
  assertNoFailedAssertion();
381
386
  declaring = false;
382
- if (!isArray(output) || output.length === 0)
387
+ const parts = isArray(output) ? output : [output];
388
+ if (parts.length === 0)
383
389
  invalid("Generation must return at least one declared part.");
384
- if (output.length > maxParts)
390
+ if (parts.length > maxParts)
385
391
  throw new GeometryError("COMPLEXITY_LIMIT", `Output exceeds ${maxParts} parts.`, {
386
392
  operation: "generate",
387
393
  });
388
394
  const returnedIds = new Set();
389
- for (const descriptor of output) {
395
+ for (const descriptor of parts) {
390
396
  if (!declaredParts.has(descriptor) || returnedIds.has(descriptor.id))
391
397
  invalid("Return each declared output part at most once.");
392
398
  returnedIds.add(descriptor.id);
393
399
  }
400
+ return parts;
394
401
  },
395
402
  dependencies(output) {
396
403
  return createModelDependencies(output, modelParameters, new Map([...computations.nodes].map(([id, node]) => [id, reusableEntry(node)])), readerIds);
@@ -403,7 +410,7 @@ export function createGenerationGraph(options, maxParts) {
403
410
  for (const node of computations.nodes.values()) {
404
411
  const entry = reusableEntry(node);
405
412
  if (entry !== undefined)
406
- retained.push(entry.value, entry.bindings, entry.boundInputs, ...entry.parameters.values());
413
+ retained.push(entry.value, entry.inputs, ...entry.parameters.values());
407
414
  }
408
415
  return [...retained, parameterSnapshot, inputValues];
409
416
  },
@@ -110,8 +110,7 @@ class SessionRevision {
110
110
  generate(revision, deferred, native, mode) {
111
111
  const { program, services, caches } = this.session;
112
112
  const startedAt = performance.now();
113
- const output = program.generate({ ...revision.context, services });
114
- revision.finish(output);
113
+ const output = revision.finish(program.generate({ ...revision.context, services }));
115
114
  if (mode === "validate")
116
115
  return { kind: "validation", diagnostics: Object.freeze([...revision.diagnostics]) };
117
116
  const captured = caches.snapshots.capture({
@@ -0,0 +1,117 @@
1
+ import { GeometryError } from "./errors.js";
2
+ function fail(operation, message) {
3
+ throw new GeometryError("INVALID_ARGUMENT", message, { operation });
4
+ }
5
+ function isArray(value) {
6
+ return Array.isArray(value);
7
+ }
8
+ function vector(values, operation) {
9
+ if (values.some((value) => !Number.isFinite(value)))
10
+ fail(operation, "Bounds calculations must produce finite coordinates.");
11
+ const normalized = values.map((value) => (value === 0 ? 0 : value));
12
+ return values.length === 2
13
+ ? Object.freeze([normalized[0], normalized[1]])
14
+ : Object.freeze([normalized[0], normalized[1], normalized[2]]);
15
+ }
16
+ function validate(bounds, operation) {
17
+ if (typeof bounds !== "object" ||
18
+ bounds === null ||
19
+ !isArray(bounds.min) ||
20
+ !isArray(bounds.max) ||
21
+ (bounds.min.length !== 2 && bounds.min.length !== 3) ||
22
+ bounds.max.length !== bounds.min.length)
23
+ fail(operation, "Bounds require matching XY or XYZ minimum and maximum tuples.");
24
+ for (let axis = 0; axis < bounds.min.length; axis++) {
25
+ const minimum = bounds.min[axis], maximum = bounds.max[axis];
26
+ if (!Number.isFinite(minimum) || !Number.isFinite(maximum) || minimum > maximum)
27
+ fail(operation, "Bounds coordinates must be finite and ordered from minimum to maximum.");
28
+ if (!Number.isFinite(maximum - minimum))
29
+ fail(operation, "Bounds dimensions must be finite.");
30
+ }
31
+ return bounds.min.length;
32
+ }
33
+ function size(bounds) {
34
+ return bounds.max.map((value, axis) => value - bounds.min[axis]);
35
+ }
36
+ function center(bounds) {
37
+ return bounds.min.map((value, axis) => value / 2 + bounds.max[axis] / 2);
38
+ }
39
+ export function boundsFromSize(dimensions, options = {}) {
40
+ const operation = "boundsFromSize";
41
+ if (!isArray(dimensions) ||
42
+ (dimensions.length !== 2 && dimensions.length !== 3) ||
43
+ Array.from(dimensions).some((value) => !Number.isFinite(value) || value < 0))
44
+ fail(operation, "Bounds dimensions require two or three finite nonnegative values.");
45
+ if (typeof options !== "object" ||
46
+ options === null ||
47
+ isArray(options) ||
48
+ (options.center !== undefined && typeof options.center !== "boolean"))
49
+ fail(operation, "Bounds placement requires an optional boolean center value.");
50
+ const centered = options.center ?? true;
51
+ return Object.freeze({
52
+ min: vector(dimensions.map((value) => (centered ? -value / 2 : 0)), operation),
53
+ max: vector(dimensions.map((value) => (centered ? value / 2 : value)), operation),
54
+ });
55
+ }
56
+ export function boundsSize(bounds) {
57
+ validate(bounds, "boundsSize");
58
+ return vector(size(bounds), "boundsSize");
59
+ }
60
+ export function boundsCenter(bounds) {
61
+ validate(bounds, "boundsCenter");
62
+ return vector(center(bounds), "boundsCenter");
63
+ }
64
+ export function containsBounds(outer, inner) {
65
+ const dimension = validate(outer, "containsBounds");
66
+ if (validate(inner, "containsBounds") !== dimension)
67
+ fail("containsBounds", "Contained bounds must have the same dimension.");
68
+ return outer.min.every((value, axis) => inner.min[axis] >= value && inner.max[axis] <= outer.max[axis]);
69
+ }
70
+ export function fitBounds(source, target, options = {}) {
71
+ const operation = "fitBounds";
72
+ const dimension = validate(source, operation);
73
+ if (validate(target, operation) !== dimension)
74
+ fail(operation, "Source and target bounds must have the same dimension.");
75
+ if (typeof options !== "object" || options === null || isArray(options))
76
+ fail(operation, "Fitting options must be an object.");
77
+ if (options.maxScale !== undefined &&
78
+ (!Number.isFinite(options.maxScale) || options.maxScale <= 0))
79
+ fail(operation, "Maximum fitting scale must be finite and positive.");
80
+ const sourceSize = size(source), targetSize = size(target);
81
+ const ratios = sourceSize.flatMap((extent, axis) => extent === 0 ? [] : [targetSize[axis] / extent]);
82
+ if (ratios.length === 0)
83
+ fail(operation, "Fitting needs at least one positive source extent.");
84
+ const scale = Math.min(...ratios, options.maxScale ?? Infinity);
85
+ if (!Number.isFinite(scale) || scale <= 0)
86
+ fail(operation, "Target bounds must allow a finite positive fitting scale.");
87
+ const sourceCenter = center(source), targetCenter = center(target);
88
+ const position = vector(targetCenter.map((value, axis) => value - sourceCenter[axis] * scale), operation);
89
+ const bounds = Object.freeze({
90
+ min: vector(source.min.map((value, axis) => value * scale + position[axis]), operation),
91
+ max: vector(source.max.map((value, axis) => value * scale + position[axis]), operation),
92
+ });
93
+ return Object.freeze({ scale, position, bounds });
94
+ }
95
+ /**
96
+ * Returns immutable translations for a +X row of finite XYZ bounds with a nonnegative gap.
97
+ * Each minimum Y/Z becomes zero, and the first minimum X becomes zero. Supply bounds after
98
+ * any intended part rotation; translations apply to those bounds. An empty input returns [].
99
+ */
100
+ export function layoutRow(bounds, options = {}) {
101
+ const operation = "layoutRow";
102
+ if (!isArray(bounds) || typeof options !== "object" || options === null || isArray(options))
103
+ fail(operation, "Row layout requires bounds and an options object.");
104
+ const gap = options.gap ?? 0;
105
+ if (!Number.isFinite(gap) || gap < 0)
106
+ fail(operation, "Row gap must be finite and nonnegative.");
107
+ let nextX = 0;
108
+ return Object.freeze(Array.from(bounds, (item) => {
109
+ if (validate(item, operation) !== 3)
110
+ fail(operation, "Row layout requires XYZ bounds.");
111
+ const position = vector([nextX - item.min[0], -item.min[1], -item.min[2]], operation);
112
+ nextX += item.max[0] - item.min[0] + gap;
113
+ if (!Number.isFinite(nextX))
114
+ fail(operation, "Row layout exceeds finite coordinates.");
115
+ return position;
116
+ }));
117
+ }
@@ -60,11 +60,15 @@ export function resolveCylinderPrimitive(options) {
60
60
  invalid("Cylinder side dimensions must remain finite.");
61
61
  const sideX = radialChange / sideLength, sideZ = options.height / sideLength;
62
62
  const bottomAngle = Math.acos(-sideX), topAngle = Math.acos(sideX);
63
- const bottom = options.ends?.bottom, top = options.ends?.top;
63
+ let bottom = options.ends?.bottom, top = options.ends?.top;
64
64
  const bottomSetbacks = bottom === undefined
65
65
  ? [0, 0]
66
66
  : edgeTreatmentSetbacks(bottom, "cylinder", bottomAngle, options.limits);
67
67
  const topSetbacks = top === undefined ? [0, 0] : edgeTreatmentSetbacks(top, "cylinder", topAngle, options.limits);
68
+ if (bottomSetbacks[0] === 0 && bottomSetbacks[1] === 0)
69
+ bottom = undefined;
70
+ if (topSetbacks[0] === 0 && topSetbacks[1] === 0)
71
+ top = undefined;
68
72
  if ((bottom && bottomRadius === 0) || (top && topRadius === 0))
69
73
  invalid("A zero-radius cone apex cannot receive an end treatment.");
70
74
  if ((bottom && bottomSetbacks[0] >= bottomRadius) || (top && topSetbacks[0] >= topRadius))
@@ -29,8 +29,8 @@ export function edgeTreatmentSetbacks(treatment, operation, angle = Math.PI / 2,
29
29
  throw new GeometryError("NON_FINITE_VALUE", "Treatment setbacks must be finite.", {
30
30
  operation,
31
31
  });
32
- if (result.some((value) => value <= 0))
33
- fail(operation, "Treatment setbacks must be positive.");
32
+ if (result.some((value) => value < 0) || (result[0] === 0) !== (result[1] === 0))
33
+ fail(operation, "Treatment setbacks must be positive or both zero.");
34
34
  }
35
35
  else if (treatment.kind === "profile") {
36
36
  const points = treatment.profile;
@@ -1,5 +1,5 @@
1
1
  import { GeometryError } from "./errors.js";
2
- import { validateTriangleMesh } from "./mesh.js";
2
+ import { validateTriangleMesh } from "./mesh/mesh.js";
3
3
  import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "./model-limits.js";
4
4
  import { writeMeshVertex } from "./numeric.js";
5
5
  function planHeightfield(options, limits) {
@@ -1,6 +1,9 @@
1
1
  /** Pure geometry foundations without host initialization. @packageDocumentation */
2
- export { validateSolidMesh } from "./mesh-solid.js";
3
- export { computeTriangleMeshCentroid } from "./mesh-centroid.js";
2
+ export { boundsFromSize, boundsSize, boundsCenter, containsBounds, fitBounds, layoutRow, } from "./bounds.js";
3
+ export { fitTextLayout } from "./text-fitting.js";
4
+ export { gridPatternTransforms, linearPatternTransforms, radialPatternTransforms, pathPatternTransforms, } from "./patterns.js";
5
+ export { validateSolidMesh } from "./mesh/mesh-solid.js";
6
+ export { computeTriangleMeshCentroid } from "./mesh/mesh-centroid.js";
4
7
  export { matchProfiles, } from "./profiles/matched.js";
5
8
  export { heightfieldMesh, preflightHeightfield, } from "./heightfield.js";
6
9
  export { preflightThreadedRodSolid as preflightThreadedRod, preflightInternalThreadCutterSolid as preflightInternalThreadCutter, preflightThreadedNutSolid as preflightThreadedNut, } from "./mechanical/thread-solids.js";
@@ -8,7 +11,7 @@ export { anchorFrame3, attachTransform, boxAnchor3, createAnchor3, cylinderAncho
8
11
  export { defaultGeometrySamplingLimits, resolveGeometrySamplingLimits, } from "./sampling-limits.js";
9
12
  export { GeometryError, isGeometryError, } from "./errors.js";
10
13
  export { resolveExtrusionDivisions, } from "./extrusion.js";
11
- export { extrudeMesh, loftMesh, triangulateLoop2, } from "./loft.js";
14
+ export { extrudeMesh, loftMesh, triangulateContour, } from "./loft/loft.js";
12
15
  export { add3, cross3, dot3, length3, lerp3, normalize3, projectOntoPlane3, rotateAroundAxis3, scale3, subtract3, } from "./math/vector3.js";
13
16
  export { minimumCylindricalGearToothCountWithoutUndercut, resolveCylindricalGear, resolveCylindricalGearPair, resolveRackPitch, sampleCylindricalGearOutline, sampleInternalCylindricalGearSpaceOutline, sampleRackToothPath, } from "./mechanical/gears.js";
14
17
  export { measureInternalCylindricalGearPairMotion, } from "./mechanical/gear-motion.js";
@@ -18,27 +21,27 @@ export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, cre
18
21
  export { preflightHelicalThreadSolidMesh, } from "./mechanical/thread-mesh-plan.js";
19
22
  export { sampleConventionalThreadHelices as sampleThreadHelices, } from "./mechanical/thread-helices.js";
20
23
  export { PRINTABLE_THREAD_FIT_POLICIES, compensateThreadDiameters, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./mechanical/threads.js";
21
- export { analyzeTriangleMesh, joinTriangleMeshes, measureTriangleMesh, meshBounds, reverseTriangleMesh, transformTriangleMesh, validateTriangleMesh, } from "./mesh.js";
22
- export { createTriangleMeshSignature, } from "./mesh-signature.js";
23
- export { optimizePlanarPatches, } from "./mesh-planar.js";
24
- export { analyzeTriangleMeshQuality, } from "./mesh-quality.js";
24
+ export { analyzeTriangleMesh, joinTriangleMeshes, measureTriangleMesh, meshBounds, reverseTriangleMesh, transformTriangleMesh, validateTriangleMesh, } from "./mesh/mesh.js";
25
+ export { createTriangleMeshSignature, } from "./mesh/mesh-signature.js";
26
+ export { optimizePlanarPatches, } from "./mesh/mesh-planar.js";
27
+ export { analyzeTriangleMeshQuality, } from "./mesh/mesh-quality.js";
25
28
  export { computeClosedParallelTransportFrames, computeParallelTransportFrames, } from "./paths/frames.js";
26
29
  export { sampleHelix } from "./paths/helix.js";
27
30
  export { cumulativePathLengths, pathLength } from "./paths/path.js";
28
31
  export { distributeAlongPath, roundClosedPolylinePath, } from "./paths/planar.js";
29
- export { circleLoop, rectangleLoop, regularPolygonLoop, starLoop, } from "./profiles/profiles.js";
30
- export { sampleSideProfile, } from "./profiles/side-profile.js";
32
+ export { circleContour, rectangleContour, regularPolygonContour, starContour, } from "./profiles/profiles.js";
33
+ export { closeToAxis, sampleSideProfile, } from "./profiles/side-profile.js";
31
34
  export { sampleContour, } from "./profiles/contour.js";
32
- export { ellipseLoop } from "./profiles/shapes.js";
35
+ export { ellipseContour } from "./profiles/shapes.js";
33
36
  export { rectangleProfile, } from "./profiles/rectangle.js";
34
- export { loopContainsPoint, normalizeLoop2, normalizePolygon2, normalizeRegion2, regionArea, regionBounds, signedAreaLoop2, } from "./regions.js";
37
+ export { contourContainsPoint, normalizeContour, normalizePolygon, normalizeRegion, regionArea, regionBounds, signedContourArea, } from "./regions.js";
35
38
  export { resolveAlignedCircularSegments, resolveArcSegments, resolveCircularSegments, } from "./resolution.js";
36
39
  export { revolveMesh } from "./revolve/revolve-mesh.js";
37
40
  export { preflightSvgRegion, } from "./svg-import.js";
38
41
  export { strokePathRegion, } from "./stroke-path.js";
39
42
  export { sweepMesh } from "./sweeps/sweep-mesh.js";
40
43
  export { DEFAULT_GEOMETRY_TOLERANCE, resolveGeometryTolerance, } from "./tolerance.js";
41
- export { transformLoop2, transformPath2, transformPath3, transformRegion2, } from "./transform-geometry.js";
44
+ export { transformContour, transformPath2, transformPath3, transformRegion, } from "./transform-geometry.js";
42
45
  export { IDENTITY_TRANSFORM3, applyTransformDirection3, applyTransformPoint3, composeTransform3, eulerTransform3, frameTransform3, inverseTransform3, rotationTransform3, scaleTransform3, transformDeterminant3, translationTransform3, validateTransform3, } from "./transform3.js";
43
46
  export { sampleTextContours } from "./text-contours.js";
44
47
  export { sampleCurve2, sampleCurve3 } from "./curves/sampling.js";
@@ -1,6 +1,6 @@
1
- import { GeometryError } from "./errors.js";
2
- import { assertMeshAllocationWithinLimits } from "./model-limits.js";
3
- import { assertSamplingCount } from "./sampling-limits.js";
1
+ import { GeometryError } from "../errors.js";
2
+ import { assertMeshAllocationWithinLimits } from "../model-limits.js";
3
+ import { assertSamplingCount } from "../sampling-limits.js";
4
4
  const maximumComparisons = 8_000_000;
5
5
  const fail = (message) => {
6
6
  throw new GeometryError("INVALID_ARGUMENT", message, { operation: "loft" });
@@ -1,10 +1,10 @@
1
- import { GeometryError } from "./errors.js";
1
+ import { GeometryError } from "../errors.js";
2
+ import { normalizeContour, normalizeRegion, signedContourArea } from "../regions.js";
3
+ import { resolveGeometryResolution } from "../resolution.js";
4
+ import { assertSamplingCount } from "../sampling-limits.js";
5
+ import { frameTransform3 } from "../transform3.js";
2
6
  import { alignLoftRows, assertLoftGrid, loftSubdivisions, sliceLoftRows, subdivideLoftRow, } from "./loft-correspondence.js";
3
7
  import { loftFrame, resolveLoftControls } from "./loft-options.js";
4
- import { normalizeLoop2, normalizeRegion2, signedAreaLoop2 } from "./regions.js";
5
- import { resolveGeometryResolution } from "./resolution.js";
6
- import { assertSamplingCount } from "./sampling-limits.js";
7
- import { frameTransform3 } from "./transform3.js";
8
8
  const fail = (message) => {
9
9
  throw new GeometryError("INVALID_ARGUMENT", message, { operation: "loft" });
10
10
  };
@@ -55,8 +55,8 @@ function checkedLoop(points, outer, authoritative, limits) {
55
55
  if (!Array.isArray(points))
56
56
  fail("Loft contours must be ordered point arrays.");
57
57
  assertSamplingCount(points.length, "loft", limits.maxProfilePoints);
58
- normalizeLoop2(points, outer);
59
- const sameWinding = signedAreaLoop2(points) > 0 === outer;
58
+ normalizeContour(points, outer);
59
+ const sameWinding = signedContourArea(points) > 0 === outer;
60
60
  if (!sameWinding && authoritative)
61
61
  fail("Identified loft contours must retain outer CCW and hole CW winding.");
62
62
  const copied = points.map((point) => [point[0], point[1]]);
@@ -106,7 +106,7 @@ export function prepareLoftGeometry(input, options, limits, authoritative, recip
106
106
  const maxLengths = input.map((_, index) => recipeSampled?.[index] === true ? undefined : resolution.maxSegmentLength);
107
107
  // Validate every original station's filled topology, including middle stations.
108
108
  // Inserted world grids may have no useful local plane and are checked by mesh topology.
109
- input.forEach((station) => normalizeRegion2(station.profile.components.map((component) => ({
109
+ input.forEach((station) => normalizeRegion(station.profile.components.map((component) => ({
110
110
  outer: component.outer.points,
111
111
  holes: component.holes.map((hole) => hole.points),
112
112
  }))));
@@ -1,5 +1,5 @@
1
- import { GeometryError } from "./errors.js";
2
- import { frameTransform3 } from "./transform3.js";
1
+ import { GeometryError } from "../errors.js";
2
+ import { frameTransform3 } from "../transform3.js";
3
3
  /** @internal Resolves placement without sorting stations or interpolating their axes. */
4
4
  export function loftFrame(placement, operation = "loft") {
5
5
  if (typeof placement !== "object" ||
@@ -1,8 +1,8 @@
1
- import { GeometryError } from "./errors.js";
2
- import { triangulateLoop2 } from "./loft-triangulation.js";
3
- import { measureTriangleMesh, validateTriangleMesh } from "./mesh.js";
4
- import { assertMeshAllocationWithinLimits } from "./model-limits.js";
5
- import { writeMeshVertex } from "./numeric.js";
1
+ import { GeometryError } from "../errors.js";
2
+ import { measureTriangleMesh, validateTriangleMesh } from "../mesh/mesh.js";
3
+ import { assertMeshAllocationWithinLimits } from "../model-limits.js";
4
+ import { writeMeshVertex } from "../numeric.js";
5
+ import { triangulateContour } from "./loft-triangulation.js";
6
6
  /** @internal Pure closed simple-contour strips, retaining repeated correspondence slots as shared physical vertices. */
7
7
  export function simpleLoftMesh(geometry, limits) {
8
8
  const count = geometry.world[0][0].length, rowCount = geometry.world.length;
@@ -68,7 +68,7 @@ export function simpleLoftMesh(geometry, limits) {
68
68
  triangle(a.slots[index], b.slots[next], b.slots[index]);
69
69
  }
70
70
  const cap = (row, top) => {
71
- const contour = rows[row], triangles = triangulateLoop2(contour.points);
71
+ const contour = rows[row], triangles = triangulateContour(contour.points);
72
72
  for (let index = 0; index < triangles.length; index += 3)
73
73
  triangle(contour.vertices[triangles[index]], contour.vertices[triangles[index + (top ? 1 : 2)]], contour.vertices[triangles[index + (top ? 2 : 1)]]);
74
74
  };
@@ -1,5 +1,5 @@
1
- import { GeometryError } from "./errors.js";
2
- import { normalizeLoop2 } from "./regions.js";
1
+ import { GeometryError } from "../errors.js";
2
+ import { normalizeContour } from "../regions.js";
3
3
  const maximumComparisons = 8_000_000;
4
4
  const cross = (a, b, c) => (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
5
5
  const pointInTriangle = (point, a, b, c, epsilon) => {
@@ -9,12 +9,12 @@ const pointInTriangle = (point, a, b, c, epsilon) => {
9
9
  return ab >= -epsilon && bc >= -epsilon && ca >= -epsilon;
10
10
  };
11
11
  /** Ear-clips one normalized simple CCW loop into stable local vertex indices. */
12
- export function triangulateLoop2(loop) {
13
- const normalized = normalizeLoop2(loop, true);
12
+ export function triangulateContour(loop) {
13
+ const normalized = normalizeContour(loop, true);
14
14
  const assertComparisonLimit = (requiredCount) => {
15
15
  if (requiredCount > maximumComparisons)
16
16
  throw new GeometryError("COMPLEXITY_LIMIT", "Profile cap triangulation exceeds its eight-million-comparison work limit.", {
17
- operation: "triangulateLoop2",
17
+ operation: "triangulateContour",
18
18
  details: { requiredCount, allowedCount: maximumComparisons },
19
19
  });
20
20
  };
@@ -59,7 +59,7 @@ export function triangulateLoop2(loop) {
59
59
  break;
60
60
  }
61
61
  if (!clipped) {
62
- throw new GeometryError("INVALID_TOPOLOGY", "Profile cap triangulation could not find a valid ear.", { operation: "triangulateLoop2" });
62
+ throw new GeometryError("INVALID_TOPOLOGY", "Profile cap triangulation could not find a valid ear.", { operation: "triangulateContour" });
63
63
  }
64
64
  }
65
65
  triangles.push(remaining[0], remaining[1], remaining[2]);
@@ -1,11 +1,11 @@
1
- import { GeometryError } from "./errors.js";
2
- import { resolveExtrusionControls, resolveExtrusionDivisions, } from "./extrusion.js";
1
+ import { GeometryError } from "../errors.js";
2
+ import { resolveExtrusionControls, resolveExtrusionDivisions, } from "../extrusion.js";
3
+ import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../model-limits.js";
4
+ import { assertSamplingCount } from "../sampling-limits.js";
3
5
  import { pointLoftProfile, prepareLoftGeometry } from "./loft-geometry.js";
4
6
  import {} from "./loft-options.js";
5
7
  import { simpleLoftMesh } from "./loft-simple-mesh.js";
6
- import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "./model-limits.js";
7
- import { assertSamplingCount } from "./sampling-limits.js";
8
- export { triangulateLoop2 } from "./loft-triangulation.js";
8
+ export { triangulateContour } from "./loft-triangulation.js";
9
9
  /**
10
10
  * Lofts simple point loops at z heights or explicit right-handed frames, in input order.
11
11
  *
@@ -17,8 +17,8 @@ export { triangulateLoop2 } from "./loft-triangulation.js";
17
17
  *
18
18
  * @example Loft with explicit point correspondence
19
19
  * ```ts
20
- * const bottom = rectangleLoop({ size: [20, 12] });
21
- * const top = rectangleLoop({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
20
+ * const bottom = rectangleContour({ size: [20, 12] });
21
+ * const top = rectangleContour({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
22
22
  * loftMesh([{ profile: bottom, z: 0 }, { profile: top, z: 30 }], { correspondence: "reindex" });
23
23
  * ```
24
24
  */
@@ -48,7 +48,7 @@ export function loftMesh(stations, options) {
48
48
  *
49
49
  * @example Extrude point data without an engine
50
50
  * ```ts
51
- * const outline = rectangleLoop({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
51
+ * const outline = rectangleContour({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
52
52
  * extrudeMesh(outline, { height: 8 });
53
53
  * ```
54
54
  */
@@ -13,7 +13,11 @@ export const add3 = (a, b) => [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
13
13
  * subtract3([4, 5, 6], [1, 2, 3]); // [3, 3, 3]
14
14
  * ```
15
15
  */
16
- export const subtract3 = (a, b) => [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
16
+ export const subtract3 = (a, b) => [
17
+ a[0] - b[0],
18
+ a[1] - b[1],
19
+ a[2] - b[2],
20
+ ];
17
21
  /**
18
22
  * Multiplies a vector by a dimensionless scalar.
19
23
  * @example
@@ -1,5 +1,5 @@
1
1
  import { GeometryError } from "../errors.js";
2
- import { signedAreaLoop2 } from "../regions.js";
2
+ import { signedContourArea } from "../regions.js";
3
3
  import { resolveCircularSegments, resolveGeometryResolution, } from "../resolution.js";
4
4
  import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
5
5
  const DEFAULT_PRESSURE_ANGLE_DEGREES = 20;
@@ -398,7 +398,7 @@ const sampleResolvedCylindricalGearOutline = (dimensions, options, operation) =>
398
398
  }
399
399
  }
400
400
  points.pop();
401
- if (!(signedAreaLoop2(points) > 0)) {
401
+ if (!(signedContourArea(points) > 0)) {
402
402
  throw new GeometryError("INVALID_TOPOLOGY", "The sampled gear outline must be counter-clockwise.", {
403
403
  operation,
404
404
  });
@@ -1,6 +1,6 @@
1
1
  /** Closed ridge and complete-solid mesh construction from resolved thread plans. */
2
- import { triangulateLoop2 } from "../loft.js";
3
- import { joinTriangleMeshes, measureTriangleMesh, reverseTriangleMesh, validateTriangleMesh, } from "../mesh.js";
2
+ import { triangulateContour } from "../loft/loft.js";
3
+ import { joinTriangleMeshes, measureTriangleMesh, reverseTriangleMesh, validateTriangleMesh, } from "../mesh/mesh.js";
4
4
  import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../model-limits.js";
5
5
  import { resolveHelicalThreadMeshOptions, resolveHelicalThreadSolidMeshPreflight, } from "./thread-mesh-plan.js";
6
6
  import { buildThreadSurfaceColumn, stitchThreadSurfaceColumns } from "./thread-surface.js";
@@ -45,7 +45,7 @@ const buildThreadRidgeComponent = (options) => {
45
45
  const c = (column + 1) * size + next, d = (column + 1) * size + point;
46
46
  indices.push(a, b, c, a, c, d);
47
47
  }
48
- const capTriangles = triangulateLoop2([...section].reverse());
48
+ const capTriangles = triangulateContour([...section].reverse());
49
49
  const cap = (column, top) => {
50
50
  for (let offset = 0; offset < capTriangles.length; offset += 3) {
51
51
  const a = column * size + (size - 1 - capTriangles[offset]);