@metamesh/modeling 0.14.0 → 0.15.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 (716) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +25 -10
  3. package/dist/api/engine.d.ts +11 -4
  4. package/dist/api/geometry.d.ts +345 -341
  5. package/dist/api/index.d.ts +262 -144
  6. package/dist/api/text.d.ts +3 -1
  7. package/dist/docs/guides/concepts.md +22 -7
  8. package/dist/docs/guides/fundamentals.md +8 -5
  9. package/dist/docs/guides/hosting.md +21 -11
  10. package/dist/docs/guides/recipes.md +42 -21
  11. package/dist/docs/manifest.json +710 -507
  12. package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
  13. package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
  14. package/dist/docs/reference/engine/GenerationOptions.md +1 -1
  15. package/dist/docs/reference/engine/GeometryResource.md +1 -1
  16. package/dist/docs/reference/engine/ModelDependencies.md +1 -1
  17. package/dist/docs/reference/engine/ModelEngine.md +1 -1
  18. package/dist/docs/reference/engine/ModelEngineOptions.md +4 -8
  19. package/dist/docs/reference/engine/ModelSession.md +1 -1
  20. package/dist/docs/reference/engine/ModelSnapshot.md +20 -9
  21. package/dist/docs/reference/engine/SessionOptions.md +1 -1
  22. package/dist/docs/reference/engine/SnapshotPart.md +2 -2
  23. package/dist/docs/reference/engine/categories/host-lifecycle.md +2 -2
  24. package/dist/docs/reference/engine/createModelEngine.md +3 -3
  25. package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
  26. package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
  27. package/dist/docs/reference/engine/validateModel.md +1 -1
  28. package/dist/docs/reference/engine.md +2 -2
  29. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
  30. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +4 -4
  31. package/dist/docs/reference/geometry/{Anchor3.md → Anchor3-type.md} +1 -1
  32. package/dist/docs/reference/geometry/ArcCurve2.md +5 -5
  33. package/dist/docs/reference/geometry/ArcCurve3.md +5 -5
  34. package/dist/docs/reference/geometry/{AttachTransformOptions.md → AttachOptions.md} +10 -5
  35. package/dist/docs/reference/geometry/AxisAngleRotation3.md +1 -1
  36. package/dist/docs/reference/geometry/Bounds2.md +1 -1
  37. package/dist/docs/reference/geometry/Bounds3.md +1 -1
  38. package/dist/docs/reference/geometry/BoundsFit2.md +1 -1
  39. package/dist/docs/reference/geometry/BoundsFit3.md +1 -1
  40. package/dist/docs/reference/geometry/BoundsFitOptions.md +1 -1
  41. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +1 -1
  42. package/dist/docs/reference/geometry/BoxAnchorFace.md +1 -1
  43. package/dist/docs/reference/geometry/BoxAnchorOptions.md +1 -1
  44. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  45. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  46. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  47. package/dist/docs/reference/geometry/BoxOptions.md +8 -8
  48. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +1 -1
  49. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +1 -1
  50. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  51. package/dist/docs/reference/geometry/CircleContourOptions.md +1 -1
  52. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
  53. package/dist/docs/reference/geometry/CircularResolutionOptions.md +7 -7
  54. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +1 -1
  55. package/dist/docs/reference/geometry/ClearanceHoleFit.md +1 -1
  56. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +1 -1
  57. package/dist/docs/reference/geometry/Contour.md +1 -1
  58. package/dist/docs/reference/geometry/ContourCurve.md +1 -1
  59. package/dist/docs/reference/geometry/ContourPoint.md +1 -1
  60. package/dist/docs/reference/geometry/ContourSegment.md +1 -1
  61. package/dist/docs/reference/geometry/CorrespondingComponent.md +1 -1
  62. package/dist/docs/reference/geometry/CorrespondingContour.md +1 -1
  63. package/dist/docs/reference/geometry/CorrespondingProfile.md +1 -1
  64. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +1 -1
  65. package/dist/docs/reference/geometry/CubicBezierCurve2.md +1 -1
  66. package/dist/docs/reference/geometry/CubicBezierCurve3.md +1 -1
  67. package/dist/docs/reference/geometry/Curve2.md +1 -1
  68. package/dist/docs/reference/geometry/Curve3.md +1 -1
  69. package/dist/docs/reference/geometry/CurveSamplingOptions.md +5 -3
  70. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +1 -1
  71. package/dist/docs/reference/geometry/CylinderAnchorFace.md +1 -1
  72. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +3 -3
  73. package/dist/docs/reference/geometry/CylinderOptions.md +3 -3
  74. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +3 -3
  75. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +1 -1
  76. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +1 -1
  77. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +3 -3
  78. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +1 -1
  79. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +1 -1
  80. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +1 -1
  81. package/dist/docs/reference/geometry/CylindricalGearSpec.md +6 -6
  82. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  83. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  84. package/dist/docs/reference/geometry/EllipseContourOptions.md +1 -1
  85. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  86. package/dist/docs/reference/geometry/ExtrudeOptions.md +6 -6
  87. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +5 -5
  88. package/dist/docs/reference/geometry/FittedTextLayout.md +1 -1
  89. package/dist/docs/reference/geometry/Frame3.md +1 -1
  90. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  91. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  92. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  93. package/dist/docs/reference/geometry/GeometryResolution.md +5 -5
  94. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +1 -1
  95. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  96. package/dist/docs/reference/geometry/GridPatternOptions.md +9 -3
  97. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
  98. package/dist/docs/reference/geometry/HeightfieldOptions.md +1 -1
  99. package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
  100. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +5 -5
  101. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +6 -6
  102. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +1 -1
  103. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +1 -1
  104. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +6 -6
  105. package/dist/docs/reference/geometry/LineCurve2.md +1 -1
  106. package/dist/docs/reference/geometry/LineCurve3.md +1 -1
  107. package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -5
  108. package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
  109. package/dist/docs/reference/geometry/LoftMeshStation.md +4 -4
  110. package/dist/docs/reference/geometry/LoftOptions.md +1 -1
  111. package/dist/docs/reference/geometry/LoftPlacement.md +1 -1
  112. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +1 -1
  113. package/dist/docs/reference/geometry/MatchProfilesOptions.md +1 -1
  114. package/dist/docs/reference/geometry/MetricFastenerSize.md +1 -1
  115. package/dist/docs/reference/geometry/MetricFastenerStandard.md +1 -1
  116. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +1 -1
  117. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +1 -1
  118. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  119. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
  120. package/dist/docs/reference/geometry/Path2-type.md +192 -0
  121. package/dist/docs/reference/geometry/Path2Data.md +14 -0
  122. package/dist/docs/reference/geometry/Path2Input.md +15 -0
  123. package/dist/docs/reference/geometry/Path3-type.md +192 -0
  124. package/dist/docs/reference/geometry/Path3Data.md +14 -0
  125. package/dist/docs/reference/geometry/Path3Input.md +15 -0
  126. package/dist/docs/reference/geometry/PathFrame.md +1 -1
  127. package/dist/docs/reference/geometry/PathLocation.md +65 -0
  128. package/dist/docs/reference/geometry/PathNormalGuide.md +4 -3
  129. package/dist/docs/reference/geometry/PathOptions.md +34 -0
  130. package/dist/docs/reference/geometry/PathPatternOptions.md +3 -3
  131. package/dist/docs/reference/geometry/PathPlacement.md +1 -1
  132. package/dist/docs/reference/geometry/PathResamplingOptions.md +80 -0
  133. package/dist/docs/reference/geometry/Pivot2Options.md +1 -1
  134. package/dist/docs/reference/geometry/Pivot3Options.md +1 -1
  135. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +1 -1
  136. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +22 -22
  137. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +1 -1
  138. package/dist/docs/reference/geometry/PlanarPatchQuality.md +1 -1
  139. package/dist/docs/reference/geometry/PolygonData.md +1 -1
  140. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +4 -4
  141. package/dist/docs/reference/geometry/PrimitiveAttachment.md +31 -0
  142. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +104 -0
  143. package/dist/docs/reference/geometry/PrintableThreadFit.md +1 -1
  144. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +1 -1
  145. package/dist/docs/reference/geometry/Profile.md +1 -1
  146. package/dist/docs/reference/geometry/ProfileComponent2.md +1 -1
  147. package/dist/docs/reference/geometry/ProfileContour2.md +1 -1
  148. package/dist/docs/reference/geometry/ProfileSpan2.md +2 -2
  149. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +1 -1
  150. package/dist/docs/reference/geometry/RackPitchDimensions.md +1 -1
  151. package/dist/docs/reference/geometry/RackPitchSpec.md +5 -5
  152. package/dist/docs/reference/geometry/RadialPatternOptions.md +17 -22
  153. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  154. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  155. package/dist/docs/reference/geometry/RectangleContourOptions.md +1 -1
  156. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +1 -1
  157. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +1 -1
  158. package/dist/docs/reference/geometry/RectangleProfileOptions.md +1 -1
  159. package/dist/docs/reference/geometry/RegionData.md +1 -1
  160. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
  161. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  162. package/dist/docs/reference/geometry/RevolveOptions.md +9 -4
  163. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  164. package/dist/docs/reference/geometry/RowLayoutOptions.md +1 -1
  165. package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
  166. package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
  167. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
  168. package/dist/docs/reference/geometry/SampledCurve2.md +1 -1
  169. package/dist/docs/reference/geometry/SampledCurve3.md +1 -1
  170. package/dist/docs/reference/geometry/SampledThreadHelices.md +3 -3
  171. package/dist/docs/reference/geometry/SideProfileCurve.md +1 -1
  172. package/dist/docs/reference/geometry/SideProfilePoint.md +1 -1
  173. package/dist/docs/reference/geometry/SideProfileSegment.md +1 -1
  174. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  175. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +3 -3
  176. package/dist/docs/reference/geometry/SphereOptions.md +3 -3
  177. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
  178. package/dist/docs/reference/geometry/StrokeCap.md +7 -0
  179. package/dist/docs/reference/geometry/StrokeJoin.md +7 -0
  180. package/dist/docs/reference/geometry/{StrokePathRegionOptions.md → StrokeOptions.md} +7 -7
  181. package/dist/docs/reference/geometry/SvgImportOptions.md +1 -1
  182. package/dist/docs/reference/geometry/SvgRegionPreflight.md +1 -1
  183. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +13 -13
  184. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +11 -11
  185. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +9 -9
  186. package/dist/docs/reference/geometry/SweepOptions.md +6 -6
  187. package/dist/docs/reference/geometry/SweepOrientation.md +7 -7
  188. package/dist/docs/reference/geometry/ThreadBevelOptions.md +1 -1
  189. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +5 -5
  190. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +1 -1
  191. package/dist/docs/reference/geometry/ThreadEndStyle.md +1 -1
  192. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +1 -1
  193. package/dist/docs/reference/geometry/ThreadHandedness.md +1 -1
  194. package/dist/docs/reference/geometry/ThreadHelixOptions.md +3 -3
  195. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
  196. package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
  197. package/dist/docs/reference/geometry/{ThreadProfile.md → ThreadProfile-type.md} +1 -1
  198. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
  199. package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
  200. package/dist/docs/reference/geometry/ThreadRole.md +1 -1
  201. package/dist/docs/reference/geometry/ThreadedNutBevel.md +1 -1
  202. package/dist/docs/reference/geometry/ThreadedNutOptions.md +6 -6
  203. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +1 -1
  204. package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
  205. package/dist/docs/reference/geometry/ThreadedRodOptions.md +6 -6
  206. package/dist/docs/reference/geometry/TorusOptions.md +8 -8
  207. package/dist/docs/reference/geometry/Transform2-type.md +1 -1
  208. package/dist/docs/reference/geometry/Transform2Input.md +1 -1
  209. package/dist/docs/reference/geometry/Transform2Matrix.md +1 -1
  210. package/dist/docs/reference/geometry/Transform3-type.md +1 -1
  211. package/dist/docs/reference/geometry/Transform3Input.md +1 -1
  212. package/dist/docs/reference/geometry/Transform3Matrix.md +1 -1
  213. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +5 -4
  214. package/dist/docs/reference/geometry/TriangleMesh.md +1 -1
  215. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +2 -2
  216. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +1 -1
  217. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
  218. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +3 -3
  219. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
  220. package/dist/docs/reference/geometry/TriangleMeshSignature.md +2 -2
  221. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +3 -3
  222. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
  223. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +1 -1
  224. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +1 -1
  225. package/dist/docs/reference/geometry/TubeOptions.md +8 -8
  226. package/dist/docs/reference/geometry/Vector2-type.md +1 -1
  227. package/dist/docs/reference/geometry/Vector2Input.md +1 -1
  228. package/dist/docs/reference/geometry/Vector2Tuple.md +1 -1
  229. package/dist/docs/reference/geometry/Vector3-type.md +1 -1
  230. package/dist/docs/reference/geometry/Vector3Input.md +1 -1
  231. package/dist/docs/reference/geometry/Vector3Tuple.md +1 -1
  232. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +3 -3
  233. package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
  234. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +1 -1
  235. package/dist/docs/reference/geometry/VectorTextMetrics.md +1 -1
  236. package/dist/docs/reference/geometry/VectorTextOptions.md +1 -1
  237. package/dist/docs/reference/geometry/add2.md +1 -1
  238. package/dist/docs/reference/geometry/add3.md +1 -1
  239. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +1 -1
  240. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +2 -2
  241. package/dist/docs/reference/geometry/{createAnchor3.md → anchor3.md} +9 -9
  242. package/dist/docs/reference/geometry/anchorFrame3.md +5 -5
  243. package/dist/docs/reference/geometry/applyTransformDirection3.md +1 -1
  244. package/dist/docs/reference/geometry/applyTransformPoint3.md +1 -1
  245. package/dist/docs/reference/geometry/{attachTransform.md → attachmentTransform3.md} +13 -13
  246. package/dist/docs/reference/geometry/boundsCenter.md +1 -1
  247. package/dist/docs/reference/geometry/boundsFromSize.md +1 -1
  248. package/dist/docs/reference/geometry/boundsSize.md +1 -1
  249. package/dist/docs/reference/geometry/boxAnchor3.md +4 -4
  250. package/dist/docs/reference/geometry/categories/bounds-layout.md +1 -1
  251. package/dist/docs/reference/geometry/categories/curves-paths.md +15 -13
  252. package/dist/docs/reference/geometry/categories/mechanical.md +6 -6
  253. package/dist/docs/reference/geometry/categories/meshes.md +3 -4
  254. package/dist/docs/reference/geometry/categories/pattern-placement.md +6 -6
  255. package/dist/docs/reference/geometry/categories/primitive-options.md +4 -4
  256. package/dist/docs/reference/geometry/categories/profiles-regions.md +2 -3
  257. package/dist/docs/reference/geometry/categories/resolution-errors.md +1 -1
  258. package/dist/docs/reference/geometry/categories/transforms-math.md +5 -5
  259. package/dist/docs/reference/geometry/categories/vector-import.md +5 -5
  260. package/dist/docs/reference/geometry/circleContour.md +1 -1
  261. package/dist/docs/reference/geometry/closeToAxis.md +1 -1
  262. package/dist/docs/reference/geometry/compensateThreadDiameters.md +1 -1
  263. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +5 -5
  264. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +5 -5
  265. package/dist/docs/reference/geometry/composeTransform3.md +1 -1
  266. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +10 -6
  267. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +8 -7
  268. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +1 -1
  269. package/dist/docs/reference/geometry/{createTriangleMeshSignature.md → computeTriangleMeshSignature.md} +4 -4
  270. package/dist/docs/reference/geometry/containsBounds.md +1 -1
  271. package/dist/docs/reference/geometry/contourContainsPoint.md +1 -1
  272. package/dist/docs/reference/geometry/cross2.md +1 -1
  273. package/dist/docs/reference/geometry/cross3.md +1 -1
  274. package/dist/docs/reference/geometry/cylinderAnchor3.md +5 -5
  275. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +1 -1
  276. package/dist/docs/reference/geometry/distance2.md +1 -1
  277. package/dist/docs/reference/geometry/distance3.md +1 -1
  278. package/dist/docs/reference/geometry/distributeAlongPath.md +8 -6
  279. package/dist/docs/reference/geometry/dot2.md +1 -1
  280. package/dist/docs/reference/geometry/dot3.md +1 -1
  281. package/dist/docs/reference/geometry/ellipseContour.md +1 -1
  282. package/dist/docs/reference/geometry/eulerTransform3.md +1 -1
  283. package/dist/docs/reference/geometry/extrudeMesh.md +8 -8
  284. package/dist/docs/reference/geometry/fitBounds.md +1 -1
  285. package/dist/docs/reference/geometry/fitTextLayout.md +1 -1
  286. package/dist/docs/reference/geometry/frameTransform3.md +1 -1
  287. package/dist/docs/reference/geometry/{getMetricClearanceHole.md → getMetricClearanceHoleDiameter.md} +3 -3
  288. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
  289. package/dist/docs/reference/geometry/gridPatternTransforms.md +2 -2
  290. package/dist/docs/reference/geometry/heightfieldMesh.md +1 -1
  291. package/dist/docs/reference/geometry/{buildHelicalThreadRidgeMesh.md → helicalThreadRidgeMesh.md} +5 -5
  292. package/dist/docs/reference/geometry/{buildHelicalThreadSolidMesh.md → helicalThreadSolidMesh.md} +5 -5
  293. package/dist/docs/reference/geometry/inverseTransform3.md +1 -1
  294. package/dist/docs/reference/geometry/isGeometryError.md +1 -1
  295. package/dist/docs/reference/geometry/joinTriangleMeshes.md +1 -1
  296. package/dist/docs/reference/geometry/layoutRow.md +1 -1
  297. package/dist/docs/reference/geometry/length2.md +1 -1
  298. package/dist/docs/reference/geometry/length3.md +1 -1
  299. package/dist/docs/reference/geometry/lerp2.md +1 -1
  300. package/dist/docs/reference/geometry/lerp3.md +1 -1
  301. package/dist/docs/reference/geometry/linearPatternTransforms.md +2 -2
  302. package/dist/docs/reference/geometry/loftMesh.md +2 -1
  303. package/dist/docs/reference/geometry/matchProfiles.md +1 -1
  304. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +1 -1
  305. package/dist/docs/reference/geometry/meshBounds.md +1 -1
  306. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +3 -3
  307. package/dist/docs/reference/geometry/normalize2.md +1 -1
  308. package/dist/docs/reference/geometry/normalize3.md +1 -1
  309. package/dist/docs/reference/geometry/normalizeContour.md +1 -1
  310. package/dist/docs/reference/geometry/normalizePolygon.md +1 -1
  311. package/dist/docs/reference/geometry/normalizeRegion.md +1 -1
  312. package/dist/docs/reference/geometry/optimizePlanarPatches.md +11 -11
  313. package/dist/docs/reference/geometry/path2.md +42 -0
  314. package/dist/docs/reference/geometry/path3.md +42 -0
  315. package/dist/docs/reference/geometry/pathPatternTransforms.md +6 -6
  316. package/dist/docs/reference/geometry/preflightHeightfield.md +1 -1
  317. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +3 -3
  318. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +3 -3
  319. package/dist/docs/reference/geometry/preflightSvgRegion.md +1 -1
  320. package/dist/docs/reference/geometry/preflightThreadedNut.md +3 -3
  321. package/dist/docs/reference/geometry/preflightThreadedRod.md +3 -3
  322. package/dist/docs/reference/geometry/projectOntoPlane3.md +1 -1
  323. package/dist/docs/reference/geometry/radialPatternTransforms.md +1 -17
  324. package/dist/docs/reference/geometry/rectangleContour.md +1 -1
  325. package/dist/docs/reference/geometry/rectangleProfile.md +1 -1
  326. package/dist/docs/reference/geometry/regionArea.md +1 -1
  327. package/dist/docs/reference/geometry/regionBounds.md +1 -1
  328. package/dist/docs/reference/geometry/regularPolygonContour.md +2 -2
  329. package/dist/docs/reference/geometry/resamplePolyline2.md +2 -2
  330. package/dist/docs/reference/geometry/resamplePolyline3.md +2 -2
  331. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +4 -4
  332. package/dist/docs/reference/geometry/resolveArcSegments.md +4 -4
  333. package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
  334. package/dist/docs/reference/geometry/resolveCylindricalGear.md +1 -1
  335. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +1 -1
  336. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +3 -3
  337. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
  338. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  339. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +1 -1
  340. package/dist/docs/reference/geometry/resolveRackPitch.md +1 -1
  341. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +4 -4
  342. package/dist/docs/reference/geometry/reverseTriangleMesh.md +1 -1
  343. package/dist/docs/reference/geometry/revolveMesh.md +10 -10
  344. package/dist/docs/reference/geometry/rotate2.md +1 -1
  345. package/dist/docs/reference/geometry/rotationTransform3.md +1 -1
  346. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +6 -4
  347. package/dist/docs/reference/geometry/sampleContour.md +3 -3
  348. package/dist/docs/reference/geometry/sampleCurve2.md +3 -3
  349. package/dist/docs/reference/geometry/sampleCurve3.md +2 -2
  350. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
  351. package/dist/docs/reference/geometry/sampleHelix.md +2 -2
  352. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
  353. package/dist/docs/reference/geometry/sampleRackToothPath.md +4 -4
  354. package/dist/docs/reference/geometry/sampleSideProfile.md +3 -3
  355. package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
  356. package/dist/docs/reference/geometry/sampleThreadHelices.md +2 -2
  357. package/dist/docs/reference/geometry/scale2.md +1 -1
  358. package/dist/docs/reference/geometry/scale3.md +1 -1
  359. package/dist/docs/reference/geometry/scaleTransform3.md +1 -1
  360. package/dist/docs/reference/geometry/signedContourArea.md +1 -1
  361. package/dist/docs/reference/geometry/starContour.md +1 -1
  362. package/dist/docs/reference/geometry/strokeRegionData.md +63 -0
  363. package/dist/docs/reference/geometry/subtract2.md +1 -1
  364. package/dist/docs/reference/geometry/subtract3.md +1 -1
  365. package/dist/docs/reference/geometry/sweepMesh.md +9 -9
  366. package/dist/docs/reference/geometry/{createThreadProfile.md → threadProfile.md} +6 -6
  367. package/dist/docs/reference/geometry/transform2.md +1 -1
  368. package/dist/docs/reference/geometry/transform3.md +1 -1
  369. package/dist/docs/reference/geometry/transformDeterminant3.md +1 -1
  370. package/dist/docs/reference/geometry/transformRegionData.md +1 -1
  371. package/dist/docs/reference/geometry/transformTriangleMesh.md +6 -6
  372. package/dist/docs/reference/geometry/translationTransform3.md +1 -1
  373. package/dist/docs/reference/geometry/triangulateContour.md +1 -1
  374. package/dist/docs/reference/geometry/validateSolidMesh.md +2 -2
  375. package/dist/docs/reference/geometry/validateTransform3.md +1 -1
  376. package/dist/docs/reference/geometry/validateTriangleMesh.md +1 -1
  377. package/dist/docs/reference/geometry/vector2.md +1 -1
  378. package/dist/docs/reference/geometry/vector3.md +1 -1
  379. package/dist/docs/reference/geometry.md +2 -2
  380. package/dist/docs/reference/model/Anchor3.md +1 -1
  381. package/dist/docs/reference/model/AttachOptions.md +10 -5
  382. package/dist/docs/reference/model/Bounds2.md +1 -1
  383. package/dist/docs/reference/model/Bounds3.md +1 -1
  384. package/dist/docs/reference/model/BoxEdge.md +1 -1
  385. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  386. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  387. package/dist/docs/reference/model/BoxOptions.md +8 -8
  388. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  389. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  390. package/dist/docs/reference/model/CircleOptions.md +3 -3
  391. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
  392. package/dist/docs/reference/model/Computed.md +1 -1
  393. package/dist/docs/reference/model/ComputedValue.md +1 -1
  394. package/dist/docs/reference/model/Contour.md +1 -1
  395. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  396. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  397. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  398. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  399. package/dist/docs/reference/model/CylinderOptions.md +3 -3
  400. package/dist/docs/reference/model/DiagnosticOptions.md +1 -1
  401. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  402. package/dist/docs/reference/model/EllipseContourOptions.md +1 -1
  403. package/dist/docs/reference/model/EllipseOptions.md +3 -3
  404. package/dist/docs/reference/model/EndTreatments.md +1 -1
  405. package/dist/docs/reference/model/ExtrudeOptions.md +6 -6
  406. package/dist/docs/reference/model/FinalizedModel.md +18 -8
  407. package/dist/docs/reference/model/FinalizedPart.md +1 -1
  408. package/dist/docs/reference/model/Frame3.md +1 -1
  409. package/dist/docs/reference/model/GenerateCallback.md +1 -1
  410. package/dist/docs/reference/model/GenerateContext.md +1 -1
  411. package/dist/docs/reference/model/GeneratedPart.md +1 -1
  412. package/dist/docs/reference/model/GenerationDiagnostic.md +1 -1
  413. package/dist/docs/reference/model/GenerationError.md +1 -1
  414. package/dist/docs/reference/model/GeometryResolution.md +5 -5
  415. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  416. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  417. package/dist/docs/reference/model/GridPatternOptions.md +9 -3
  418. package/dist/docs/reference/model/HeightfieldOptions.md +1 -1
  419. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +3 -3
  420. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +1 -1
  421. package/dist/docs/reference/model/HullOptions.md +5 -5
  422. package/dist/docs/reference/model/ImmutableBuffer-type.md +1 -1
  423. package/dist/docs/reference/model/ImmutableTriangleMesh.md +1 -1
  424. package/dist/docs/reference/model/ImplicitOptions.md +1 -1
  425. package/dist/docs/reference/model/InternalThreadCutterOptions.md +4 -4
  426. package/dist/docs/reference/model/LinearPatternOptions.md +12 -5
  427. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  428. package/dist/docs/reference/model/LoftOptions.md +1 -1
  429. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  430. package/dist/docs/reference/model/LoftStation.md +3 -3
  431. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  432. package/dist/docs/reference/model/ModelProgram.md +1 -1
  433. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  434. package/dist/docs/reference/model/NumericArray.md +1 -1
  435. package/dist/docs/reference/model/PartGeometry.md +1 -1
  436. package/dist/docs/reference/model/PartOptions.md +1 -1
  437. package/dist/docs/reference/model/Path2-type.md +192 -0
  438. package/dist/docs/reference/model/Path2Data.md +14 -0
  439. package/dist/docs/reference/model/Path2Input.md +15 -0
  440. package/dist/docs/reference/model/Path3-type.md +192 -0
  441. package/dist/docs/reference/model/Path3Data.md +14 -0
  442. package/dist/docs/reference/model/Path3Input.md +15 -0
  443. package/dist/docs/reference/model/PathLocation.md +65 -0
  444. package/dist/docs/reference/model/PathNormalGuide.md +4 -3
  445. package/dist/docs/reference/model/PathOptions.md +34 -0
  446. package/dist/docs/reference/model/PathPatternOptions.md +3 -3
  447. package/dist/docs/reference/model/PathResamplingOptions.md +79 -0
  448. package/dist/docs/reference/model/PatternSource.md +1 -1
  449. package/dist/docs/reference/model/Pivot2Options.md +1 -1
  450. package/dist/docs/reference/model/Pivot3Options.md +1 -1
  451. package/dist/docs/reference/model/PlaneOptions.md +3 -3
  452. package/dist/docs/reference/model/PolygonData.md +1 -1
  453. package/dist/docs/reference/model/PolygonOptions.md +8 -8
  454. package/dist/docs/reference/model/{PrimitivePlacement.md → PrimitiveAttachment.md} +7 -7
  455. package/dist/docs/reference/model/{PrimitivePlacementOptions.md → PrimitiveAttachmentOptions.md} +41 -20
  456. package/dist/docs/reference/model/PrintableThreadFit.md +1 -1
  457. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +1 -1
  458. package/dist/docs/reference/model/Profile.md +1 -1
  459. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  460. package/dist/docs/reference/model/ProfileContour2.md +1 -1
  461. package/dist/docs/reference/model/ProfileSpan2.md +2 -2
  462. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +1 -1
  463. package/dist/docs/reference/model/RadialPatternOptions.md +17 -22
  464. package/dist/docs/reference/model/RadialSizing.md +1 -1
  465. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  466. package/dist/docs/reference/model/RectangleContourOptions.md +1 -1
  467. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  468. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  469. package/dist/docs/reference/model/RectangleOptions.md +8 -8
  470. package/dist/docs/reference/model/RegionData.md +1 -1
  471. package/dist/docs/reference/model/RegularPolygonOptions.md +5 -5
  472. package/dist/docs/reference/model/RevolveOptions.md +9 -4
  473. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  474. package/dist/docs/reference/model/Section.md +12 -11
  475. package/dist/docs/reference/model/SectionHullOptions.md +5 -5
  476. package/dist/docs/reference/model/SectionInspection.md +7 -7
  477. package/dist/docs/reference/model/SectionOffsetJoin.md +1 -1
  478. package/dist/docs/reference/model/SectionOffsetOptions.md +1 -1
  479. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  480. package/dist/docs/reference/model/Solid.md +23 -6
  481. package/dist/docs/reference/model/SolidInspection.md +4 -4
  482. package/dist/docs/reference/model/{SolidRayHit.md → SolidSegmentHit.md} +3 -3
  483. package/dist/docs/reference/model/SphereOptions.md +3 -3
  484. package/dist/docs/reference/model/StarOptions.md +10 -10
  485. package/dist/docs/reference/model/{StrokePathCap.md → StrokeCap.md} +3 -3
  486. package/dist/docs/reference/model/{StrokePathJoin.md → StrokeJoin.md} +3 -3
  487. package/dist/docs/reference/model/StrokeOptions.md +6 -6
  488. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  489. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  490. package/dist/docs/reference/model/SvgSectionOptions.md +1 -1
  491. package/dist/docs/reference/model/SweepOptions.md +6 -6
  492. package/dist/docs/reference/model/SweepOrientation.md +7 -7
  493. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  494. package/dist/docs/reference/model/ThreadEndStyle.md +1 -1
  495. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +1 -1
  496. package/dist/docs/reference/model/ThreadHandedness.md +1 -1
  497. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +1 -1
  498. package/dist/docs/reference/model/ThreadLeadInShape.md +1 -1
  499. package/dist/docs/reference/model/ThreadProfile.md +1 -1
  500. package/dist/docs/reference/model/ThreadRidgeOptions.md +1 -1
  501. package/dist/docs/reference/model/ThreadedNutBevel.md +1 -1
  502. package/dist/docs/reference/model/ThreadedNutOptions.md +4 -4
  503. package/dist/docs/reference/model/ThreadedNutPreflight.md +1 -1
  504. package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
  505. package/dist/docs/reference/model/ThreadedRodOptions.md +4 -4
  506. package/dist/docs/reference/model/TorusOptions.md +8 -8
  507. package/dist/docs/reference/model/Transform2-type.md +1 -1
  508. package/dist/docs/reference/model/Transform2Input.md +1 -1
  509. package/dist/docs/reference/model/Transform2Matrix.md +1 -1
  510. package/dist/docs/reference/model/Transform3-type.md +1 -1
  511. package/dist/docs/reference/model/Transform3Input.md +1 -1
  512. package/dist/docs/reference/model/Transform3Matrix.md +1 -1
  513. package/dist/docs/reference/model/TriangleMesh.md +1 -1
  514. package/dist/docs/reference/model/TriangleMeshAnalysis.md +2 -2
  515. package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
  516. package/dist/docs/reference/model/TubeOptions.md +8 -8
  517. package/dist/docs/reference/model/Vector2-type.md +1 -1
  518. package/dist/docs/reference/model/Vector2Input.md +1 -1
  519. package/dist/docs/reference/model/Vector2Tuple.md +1 -1
  520. package/dist/docs/reference/model/Vector3-type.md +1 -1
  521. package/dist/docs/reference/model/Vector3Input.md +1 -1
  522. package/dist/docs/reference/model/Vector3Tuple.md +1 -1
  523. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  524. package/dist/docs/reference/model/VectorTextMetrics.md +1 -1
  525. package/dist/docs/reference/model/anchor.md +1 -1
  526. package/dist/docs/reference/model/box.md +3 -3
  527. package/dist/docs/reference/model/castSegment.md +40 -0
  528. package/dist/docs/reference/model/categories/boolean-operations.md +1 -1
  529. package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -1
  530. package/dist/docs/reference/model/categories/contracts.md +2 -2
  531. package/dist/docs/reference/model/categories/core-values-errors.md +1 -1
  532. package/dist/docs/reference/model/categories/explicit-profiles.md +2 -2
  533. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +2 -2
  534. package/dist/docs/reference/model/categories/generation.md +1 -1
  535. package/dist/docs/reference/model/categories/inspection.md +4 -5
  536. package/dist/docs/reference/model/categories/mesh-inspection.md +2 -2
  537. package/dist/docs/reference/model/categories/paths.md +33 -0
  538. package/dist/docs/reference/model/categories/primitives.md +2 -2
  539. package/dist/docs/reference/model/categories/resolution.md +2 -2
  540. package/dist/docs/reference/model/categories/sections.md +3 -4
  541. package/dist/docs/reference/model/categories/threads.md +5 -5
  542. package/dist/docs/reference/model/categories/transforms-placement.md +8 -8
  543. package/dist/docs/reference/model/circle.md +1 -1
  544. package/dist/docs/reference/model/components.md +6 -6
  545. package/dist/docs/reference/model/compose.md +1 -1
  546. package/dist/docs/reference/model/cylinder.md +1 -1
  547. package/dist/docs/reference/model/distance.md +1 -1
  548. package/dist/docs/reference/model/ellipse.md +1 -1
  549. package/dist/docs/reference/model/extrude.md +3 -3
  550. package/dist/docs/reference/model/generate.md +1 -1
  551. package/dist/docs/reference/model/gridPattern.md +4 -4
  552. package/dist/docs/reference/model/heightfield.md +1 -1
  553. package/dist/docs/reference/model/hull.md +1 -1
  554. package/dist/docs/reference/model/immutableBuffer.md +1 -1
  555. package/dist/docs/reference/model/immutableMesh.md +1 -1
  556. package/dist/docs/reference/model/implicit.md +1 -1
  557. package/dist/docs/reference/model/inspectSection.md +1 -1
  558. package/dist/docs/reference/model/inspectSolid.md +1 -1
  559. package/dist/docs/reference/model/internalThreadCutter.md +4 -4
  560. package/dist/docs/reference/model/intersect.md +1 -1
  561. package/dist/docs/reference/model/isEmpty.md +1 -1
  562. package/dist/docs/reference/model/linearPattern.md +4 -4
  563. package/dist/docs/reference/model/loft.md +1 -1
  564. package/dist/docs/reference/model/matchProfiles.md +2 -2
  565. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  566. package/dist/docs/reference/model/path2.md +42 -0
  567. package/dist/docs/reference/model/path3.md +42 -0
  568. package/dist/docs/reference/model/pathPattern.md +13 -12
  569. package/dist/docs/reference/model/polygon.md +4 -4
  570. package/dist/docs/reference/model/preflightInternalThreadCutter.md +3 -3
  571. package/dist/docs/reference/model/preflightThreadedNut.md +3 -3
  572. package/dist/docs/reference/model/preflightThreadedRod.md +3 -3
  573. package/dist/docs/reference/model/radialPattern.md +5 -37
  574. package/dist/docs/reference/model/rectangle.md +3 -3
  575. package/dist/docs/reference/model/regularPolygon.md +1 -1
  576. package/dist/docs/reference/model/revolve.md +5 -4
  577. package/dist/docs/reference/model/solidFromMesh.md +1 -1
  578. package/dist/docs/reference/model/sphere.md +1 -1
  579. package/dist/docs/reference/model/split.md +1 -1
  580. package/dist/docs/reference/model/splitByPlane.md +1 -1
  581. package/dist/docs/reference/model/star.md +4 -4
  582. package/dist/docs/reference/model/stroke.md +8 -8
  583. package/dist/docs/reference/model/svgPathSection.md +1 -1
  584. package/dist/docs/reference/model/svgSection.md +1 -1
  585. package/dist/docs/reference/model/sweep.md +7 -7
  586. package/dist/docs/reference/model/textSection.md +1 -1
  587. package/dist/docs/reference/model/threadRidge.md +2 -2
  588. package/dist/docs/reference/model/threadedNut.md +4 -4
  589. package/dist/docs/reference/model/threadedRod.md +4 -4
  590. package/dist/docs/reference/model/torus.md +3 -3
  591. package/dist/docs/reference/model/transform2.md +1 -1
  592. package/dist/docs/reference/model/transform3.md +1 -1
  593. package/dist/docs/reference/model/tube.md +3 -3
  594. package/dist/docs/reference/model/union.md +1 -1
  595. package/dist/docs/reference/model/vector2.md +1 -1
  596. package/dist/docs/reference/model/vector3.md +1 -1
  597. package/dist/docs/reference/model.md +3 -2
  598. package/dist/docs/reference/text/Bounds2.md +1 -1
  599. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
  600. package/dist/docs/reference/text/Vector2Tuple.md +1 -1
  601. package/dist/docs/reference/text/VectorFont.md +2 -2
  602. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  603. package/dist/docs/reference/text/VectorTextArcBaseline.md +3 -3
  604. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  605. package/dist/docs/reference/text/VectorTextLayoutOptions.md +1 -1
  606. package/dist/docs/reference/text/VectorTextMetrics.md +1 -1
  607. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  608. package/dist/docs/reference/text/categories/font-preparation.md +3 -3
  609. package/dist/docs/reference/text/prepareVectorFont.md +2 -2
  610. package/dist/docs/reference/text.md +1 -1
  611. package/dist/engine/construction-operations.js +31 -14
  612. package/dist/engine/execution.js +39 -8
  613. package/dist/engine/extrusion-finishing.js +1 -1
  614. package/dist/engine/index.js +6 -1
  615. package/dist/engine/inspection-operations.js +13 -11
  616. package/dist/engine/loft-operations.js +35 -14
  617. package/dist/engine/model-summary.js +8 -5
  618. package/dist/engine/native/material-components.js +305 -0
  619. package/dist/engine/native/regions.js +2 -1
  620. package/dist/engine/native/threads.js +3 -3
  621. package/dist/engine/native/transforms.js +5 -7
  622. package/dist/engine/operation-environment.js +2 -2
  623. package/dist/engine/pattern-operations.js +1 -1
  624. package/dist/engine/placement.js +2 -2
  625. package/dist/engine/primitive-anchors.js +17 -17
  626. package/dist/engine/primitive-operations.js +1 -1
  627. package/dist/engine/primitive-profiles.js +7 -7
  628. package/dist/engine/profile-mesh.js +7 -7
  629. package/dist/engine/recipe-realization.js +6 -0
  630. package/dist/engine/section-operations.js +33 -8
  631. package/dist/engine/session-snapshot.js +14 -4
  632. package/dist/engine/session.js +10 -5
  633. package/dist/engine/shape-anchors.js +3 -3
  634. package/dist/engine/transform-operations.js +24 -24
  635. package/dist/geometry/anchors.js +40 -33
  636. package/dist/geometry/curves/sampling.js +14 -14
  637. package/dist/geometry/edge-finishing.js +1 -1
  638. package/dist/geometry/extrusion.js +13 -16
  639. package/dist/geometry/index.js +9 -10
  640. package/dist/geometry/loft/loft-simple-mesh.js +6 -6
  641. package/dist/geometry/loft/loft.js +22 -13
  642. package/dist/geometry/math/immutable-value.js +1 -1
  643. package/dist/geometry/mechanical/gear-motion.js +3 -3
  644. package/dist/geometry/mechanical/gears.js +38 -38
  645. package/dist/geometry/mechanical/index.js +3 -3
  646. package/dist/geometry/mechanical/standards.js +1 -1
  647. package/dist/geometry/mechanical/thread-helices.js +2 -3
  648. package/dist/geometry/mechanical/thread-mesh-plan.js +4 -5
  649. package/dist/geometry/mechanical/thread-mesh.js +7 -7
  650. package/dist/geometry/mechanical/thread-profiles.js +5 -5
  651. package/dist/geometry/mechanical/thread-solids.js +2 -2
  652. package/dist/geometry/mechanical/thread-surface.js +1 -1
  653. package/dist/geometry/mechanical/threads.js +8 -8
  654. package/dist/geometry/mesh/mesh-planar.js +25 -27
  655. package/dist/geometry/mesh/mesh-quality.js +5 -5
  656. package/dist/geometry/mesh/mesh-signature.js +13 -13
  657. package/dist/geometry/mesh/mesh-solid.js +7 -7
  658. package/dist/geometry/mesh/mesh.js +4 -15
  659. package/dist/geometry/paths/closest-point.js +8 -19
  660. package/dist/geometry/paths/frames.js +41 -11
  661. package/dist/geometry/paths/helix.js +16 -6
  662. package/dist/geometry/paths/path-value.js +252 -0
  663. package/dist/geometry/paths/planar.js +36 -23
  664. package/dist/geometry/paths/resampling.js +27 -5
  665. package/dist/geometry/patterns/placements.js +100 -27
  666. package/dist/geometry/patterns.js +2 -2
  667. package/dist/geometry/polygon-clipping.js +17 -0
  668. package/dist/geometry/profiles/contour.js +6 -6
  669. package/dist/geometry/profiles/matched.js +4 -4
  670. package/dist/geometry/profiles/profiles.js +4 -4
  671. package/dist/geometry/profiles/rectangle.js +4 -4
  672. package/dist/geometry/profiles/side-profile.js +7 -7
  673. package/dist/geometry/profiles/span-sampling.js +1 -1
  674. package/dist/geometry/resolution.js +34 -34
  675. package/dist/geometry/revolve/revolve-mesh.js +12 -7
  676. package/dist/geometry/stroke-path.js +12 -27
  677. package/dist/geometry/svg/fill.js +7 -21
  678. package/dist/geometry/svg-import.js +23 -23
  679. package/dist/geometry/sweeps/options.js +5 -4
  680. package/dist/geometry/sweeps/orientation.js +5 -5
  681. package/dist/geometry/sweeps/stations.js +10 -10
  682. package/dist/geometry/sweeps/sweep-closed.js +2 -2
  683. package/dist/geometry/sweeps/sweep-mesh.js +9 -3
  684. package/dist/geometry/sweeps/sweep-open.js +1 -1
  685. package/dist/geometry/sweeps/validation.js +4 -7
  686. package/dist/geometry/transform-geometry.js +7 -14
  687. package/dist/index.js +1 -0
  688. package/dist/model/execution-binding.js +3 -3
  689. package/dist/model/geometry-recipes.js +1 -1
  690. package/dist/model/immutable-generation-data.js +66 -6
  691. package/dist/model/operations.js +25 -26
  692. package/dist/model/recipe-declaration.js +13 -7
  693. package/dist/model/shape-handles.js +2 -1
  694. package/dist/text/index.js +15 -9
  695. package/dist/text/vector-text-layout.js +31 -26
  696. package/package.json +1 -1
  697. package/dist/docs/reference/geometry/ClosestPointOnPathOptions.md +0 -34
  698. package/dist/docs/reference/geometry/ClosestPointOnPathResult.md +0 -65
  699. package/dist/docs/reference/geometry/Path2.md +0 -14
  700. package/dist/docs/reference/geometry/Path3.md +0 -14
  701. package/dist/docs/reference/geometry/PrimitivePlacement.md +0 -31
  702. package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +0 -83
  703. package/dist/docs/reference/geometry/StrokePathCap.md +0 -7
  704. package/dist/docs/reference/geometry/StrokePathJoin.md +0 -7
  705. package/dist/docs/reference/geometry/closestPointOnPath.md +0 -110
  706. package/dist/docs/reference/geometry/cumulativePathLengths.md +0 -33
  707. package/dist/docs/reference/geometry/measureTriangleMesh.md +0 -55
  708. package/dist/docs/reference/geometry/pathLength.md +0 -33
  709. package/dist/docs/reference/geometry/strokePathRegion.md +0 -63
  710. package/dist/docs/reference/geometry/transformContour.md +0 -42
  711. package/dist/docs/reference/geometry/transformPath2.md +0 -40
  712. package/dist/docs/reference/geometry/transformPath3.md +0 -33
  713. package/dist/docs/reference/model/Path2.md +0 -20
  714. package/dist/docs/reference/model/rayCast.md +0 -40
  715. package/dist/docs/reference/model/toTriangleMesh.md +0 -27
  716. package/dist/geometry/paths/path.js +0 -32
@@ -1,4 +1,4 @@
1
- import { attachTransform } from "../../geometry/anchors.js";
1
+ import { attachmentTransform3 } from "../../geometry/anchors.js";
2
2
  import { GeometryError } from "../../geometry/errors.js";
3
3
  import { assertScopedManifoldValue, ownScopedManifoldValue, } from "./context.js";
4
4
  const finiteVector = (value, name, operation) => {
@@ -100,17 +100,15 @@ export function transform(context, solid, matrix) {
100
100
  }
101
101
  /** Moves a local source anchor onto a world-space target anchor. */
102
102
  export function attach(context, solid, source, target, options = {}) {
103
- if (options.spinDegrees !== undefined && !Number.isFinite(options.spinDegrees)) {
104
- throw new GeometryError("NON_FINITE_VALUE", "spinDegrees must be finite.", {
103
+ if (options.spin !== undefined && !Number.isFinite(options.spin)) {
104
+ throw new GeometryError("NON_FINITE_VALUE", "spin must be finite.", {
105
105
  operation: "attach",
106
106
  });
107
107
  }
108
- return transform(context, solid, attachTransform(source, target, {
108
+ return transform(context, solid, attachmentTransform3(source, target, {
109
109
  ...(options.alignment === undefined ? {} : { alignment: options.alignment }),
110
110
  ...(options.gap === undefined ? {} : { gap: options.gap }),
111
- ...(options.spinDegrees === undefined
112
- ? {}
113
- : { spinRadians: (options.spinDegrees * Math.PI) / 180 }),
111
+ ...(options.spin === undefined ? {} : { spin: options.spin }),
114
112
  ...(options.tolerance === undefined ? {} : { tolerance: options.tolerance }),
115
113
  }));
116
114
  }
@@ -9,8 +9,8 @@ export function createOperationEnvironment(owner, resolution) {
9
9
  ...value,
10
10
  resolution: {
11
11
  ...resolution,
12
- maximumSegments: Math.min(resolution.maximumSegments ?? limits.maxCircularSegments, limits.maxCircularSegments),
13
- minimumSegments: Math.min(resolution.minimumSegments ?? 16, limits.maxCircularSegments),
12
+ maxSegments: Math.min(resolution.maxSegments ?? limits.maxCircularSegments, limits.maxCircularSegments),
13
+ minSegments: Math.min(resolution.minSegments ?? 16, limits.maxCircularSegments),
14
14
  ...value.resolution,
15
15
  },
16
16
  limits,
@@ -28,7 +28,7 @@ export function createPatternOperations(environment, transforms) {
28
28
  const shape = typeof source === "function" ? source(index) : source;
29
29
  if (typeof source === "function")
30
30
  budget(shape, 1);
31
- const matrix = plan.transformAt(index);
31
+ const matrix = plan.transformAt(index, kind === "section" ? 2 : 3);
32
32
  copies.push(matrix.every((value, i) => value === IDENTITY_TRANSFORM3[i])
33
33
  ? shape
34
34
  : kind === "section"
@@ -1,5 +1,5 @@
1
1
  import { validateAnalyzedSolidMesh } from "../geometry/mesh/mesh-solid.js";
2
- import { measureTriangleMesh } from "../geometry/mesh/mesh.js";
2
+ import { analyzeTriangleMesh } from "../geometry/mesh/mesh.js";
3
3
  import { composeTransform3, eulerTransform3, translationTransform3, } from "../geometry/transform3.js";
4
4
  /** Places already validated immutable geometry once, retaining its indexed topology. */
5
5
  export function placeFinalizedGeometry(source, position, rotation, meshValidation) {
@@ -16,7 +16,7 @@ export function placeFinalizedGeometry(source, position, rotation, meshValidatio
16
16
  const mesh = { positions, indices: source.indices };
17
17
  // Rigid placement preserves indexed connectivity. Measure actual Float32 world output to keep
18
18
  // exact bounds/volume/area without another topology or kernel pass under the default policy.
19
- const measurements = Object.freeze({ ...source.measurements, ...measureTriangleMesh(mesh) });
19
+ const measurements = Object.freeze({ ...source.measurements, ...analyzeTriangleMesh(mesh) });
20
20
  // Float32 placement can close gaps between shells even when the local mesh passed validation.
21
21
  if (meshValidation === "solid")
22
22
  validateAnalyzedSolidMesh(mesh, measurements);
@@ -1,4 +1,4 @@
1
- import { boxAnchor3, createAnchor3 } from "../geometry/anchors.js";
1
+ import { anchor3, boxAnchor3 } from "../geometry/anchors.js";
2
2
  import { resolveCylinderRadii } from "../geometry/cylinder.js";
3
3
  const faces = ["left", "right", "back", "front", "bottom", "top"];
4
4
  /** Nominal primitive datums; construction validates dimensions before these factories run. */
@@ -6,7 +6,7 @@ export function boxAnchors(options) {
6
6
  const size = typeof options.size === "number" ? [options.size, options.size, options.size] : options.size;
7
7
  const center = options.center === false ? [size[0] / 2, size[1] / 2, size[2] / 2] : [0, 0, 0];
8
8
  return {
9
- center: createAnchor3(center, [0, 0, 1]),
9
+ center: anchor3(center, [0, 0, 1]),
10
10
  ...Object.fromEntries(faces.map((face) => [
11
11
  face,
12
12
  boxAnchor3({
@@ -24,13 +24,13 @@ function axialAnchors(radii, height, centered) {
24
24
  const radius = (radii[0] + radii[1]) / 2;
25
25
  const slope = (radii[1] - radii[0]) / height;
26
26
  return {
27
- center: createAnchor3([0, 0, middle], [0, 0, 1]),
28
- ...(radii[0] === 0 ? {} : { bottom: createAnchor3([0, 0, bottom], [0, 0, -1]) }),
29
- ...(radii[1] === 0 ? {} : { top: createAnchor3([0, 0, bottom + height], [0, 0, 1]) }),
30
- right: createAnchor3([radius, 0, middle], [1, 0, -slope], [0, 0, 1]),
31
- left: createAnchor3([-radius, 0, middle], [-1, 0, -slope], [0, 0, 1]),
32
- front: createAnchor3([0, radius, middle], [0, 1, -slope], [0, 0, 1]),
33
- back: createAnchor3([0, -radius, middle], [0, -1, -slope], [0, 0, 1]),
27
+ center: anchor3([0, 0, middle], [0, 0, 1]),
28
+ ...(radii[0] === 0 ? {} : { bottom: anchor3([0, 0, bottom], [0, 0, -1]) }),
29
+ ...(radii[1] === 0 ? {} : { top: anchor3([0, 0, bottom + height], [0, 0, 1]) }),
30
+ right: anchor3([radius, 0, middle], [1, 0, -slope], [0, 0, 1]),
31
+ left: anchor3([-radius, 0, middle], [-1, 0, -slope], [0, 0, 1]),
32
+ front: anchor3([0, radius, middle], [0, 1, -slope], [0, 0, 1]),
33
+ back: anchor3([0, -radius, middle], [0, -1, -slope], [0, 0, 1]),
34
34
  };
35
35
  }
36
36
  /** Cylinder and frustum cap anchors omit an end whose nominal radius is zero. */
@@ -55,16 +55,16 @@ export function torusAnchors(options) {
55
55
  export function planarAnchors(size, centered = true) {
56
56
  const x = centered ? 0 : size[0] / 2, y = centered ? 0 : size[1] / 2;
57
57
  return {
58
- center: createAnchor3([x, y, 0], [0, 0, 1]),
59
- top: createAnchor3([x, y, 0], [0, 0, 1]),
60
- bottom: createAnchor3([x, y, 0], [0, 0, -1]),
61
- right: createAnchor3([x + size[0] / 2, y, 0], [1, 0, 0], [0, 0, 1]),
62
- left: createAnchor3([x - size[0] / 2, y, 0], [-1, 0, 0], [0, 0, 1]),
63
- front: createAnchor3([x, y + size[1] / 2, 0], [0, 1, 0], [0, 0, 1]),
64
- back: createAnchor3([x, y - size[1] / 2, 0], [0, -1, 0], [0, 0, 1]),
58
+ center: anchor3([x, y, 0], [0, 0, 1]),
59
+ top: anchor3([x, y, 0], [0, 0, 1]),
60
+ bottom: anchor3([x, y, 0], [0, 0, -1]),
61
+ right: anchor3([x + size[0] / 2, y, 0], [1, 0, 0], [0, 0, 1]),
62
+ left: anchor3([x - size[0] / 2, y, 0], [-1, 0, 0], [0, 0, 1]),
63
+ front: anchor3([x, y + size[1] / 2, 0], [0, 1, 0], [0, 0, 1]),
64
+ back: anchor3([x, y - size[1] / 2, 0], [0, -1, 0], [0, 0, 1]),
65
65
  };
66
66
  }
67
67
  /** A construction-origin reference for primitives without meaningful principal side datums. */
68
68
  export const originAnchor = () => ({
69
- center: createAnchor3([0, 0, 0], [0, 0, 1]),
69
+ center: anchor3([0, 0, 0], [0, 0, 1]),
70
70
  });
@@ -137,7 +137,7 @@ export function createPrimitiveOperations(environment, transforms, sections) {
137
137
  return environment.rememberPrimitiveProfile(section, polygonSectionProfile(`polygon-${value.sides}`, loop, resolved.resolution, resolved.limits));
138
138
  }),
139
139
  star: (value) => placedSection(value, () => {
140
- const angle = (validateFiniteNumber(value.rotationDegrees ?? 0, "star") * Math.PI) / 180;
140
+ const angle = (validateFiniteNumber(value.rotation ?? 0, "star") * Math.PI) / 180;
141
141
  const resolved = withResolutionDefaults(value);
142
142
  const loop = starContour(value.outerRadius, value.points, value.innerRadius, resolved.limits).map(([x, y]) => [
143
143
  x * Math.cos(angle) - y * Math.sin(angle),
@@ -44,8 +44,8 @@ export function ellipticalSectionProfile(radii, options, resolution, limits, fac
44
44
  kind: "arc",
45
45
  center: [0, 0],
46
46
  radius,
47
- startDegrees: 0,
48
- sweepDegrees: 360,
47
+ startAngle: 0,
48
+ sweepAngle: 360,
49
49
  ...(segments === undefined ? {} : { segments }),
50
50
  },
51
51
  ],
@@ -181,16 +181,16 @@ export function correspondingPrimitiveProfiles(sources, options, limits) {
181
181
  const policy = source.spanResolution?.[span.id] ?? source.resolution;
182
182
  const original = resolveGeometryResolution({
183
183
  ...policy,
184
- maximumSegments: Math.min(policy.maximumSegments ?? selected.maxCircularSegments, selected.maxCircularSegments),
185
- minimumSegments: Math.min(policy.minimumSegments ?? 16, selected.maxCircularSegments),
184
+ maxSegments: Math.min(policy.maxSegments ?? selected.maxCircularSegments, selected.maxCircularSegments),
185
+ minSegments: Math.min(policy.minSegments ?? 16, selected.maxCircularSegments),
186
186
  }, selected);
187
187
  const edgeLength = Math.min(original.maxSegmentLength ?? Infinity, target.maxSegmentLength ?? Infinity) /
188
188
  scale;
189
189
  const resolution = {
190
190
  sizing: source.faceSizing ? "face" : "vertex",
191
191
  maxChordError: Math.min(original.maxChordError, target.maxChordError) / scale,
192
- maximumSegments: Math.min(original.maximumSegments, target.maximumSegments),
193
- minimumSegments: Math.min(Math.max(original.minimumSegments, target.minimumSegments), Math.min(original.maximumSegments, target.maximumSegments)),
192
+ maxSegments: Math.min(original.maxSegments, target.maxSegments),
193
+ minSegments: Math.min(Math.max(original.minSegments, target.minSegments), Math.min(original.maxSegments, target.maxSegments)),
194
194
  ...(Number.isFinite(edgeLength) ? { maxSegmentLength: edgeLength } : {}),
195
195
  ...(target.circularSegments === undefined
196
196
  ? {}
@@ -199,7 +199,7 @@ export function correspondingPrimitiveProfiles(sources, options, limits) {
199
199
  const segments = span.kind === "arc"
200
200
  ? span.radius === 0
201
201
  ? 1
202
- : resolveArcSegments(span.radius, Math.abs(span.sweepDegrees), resolution, selected)
202
+ : resolveArcSegments(span.radius, Math.abs(span.sweepAngle), resolution, selected)
203
203
  : span.kind === "line"
204
204
  ? resolveLineSegmentCount(Math.hypot(span.end[0] - span.start[0], span.end[1] - span.start[1]), resolution.maxSegmentLength)
205
205
  : resolveUniformCubicSegments(planarCubicControl(span), resolveGeometryResolution(resolution, selected), selected.maxProfilePoints);
@@ -42,12 +42,12 @@ function profileMeshAllocation(first, stationCount, limits, closed) {
42
42
  fail("Matched contours require at least three logical points and paired span identities.");
43
43
  logicalCount += contour.points.length;
44
44
  }
45
- const maximumVertices = logicalCount * stationCount;
45
+ const maxVertices = logicalCount * stationCount;
46
46
  const capTriangles = 2 * (logicalCount + firstContours.length * 2);
47
47
  const maximumTriangles = (closed ? stationCount : stationCount - 1) * logicalCount * 2 + (closed ? 0 : capTriangles);
48
48
  assertSamplingCount(logicalCount, "loft", limits.maxProfilePoints);
49
- assertMeshAllocationWithinLimits(maximumVertices, maximumTriangles, 12 * (maximumVertices + maximumTriangles), "loft", limits);
50
- return { firstContours, maximumVertices, maximumTriangles };
49
+ assertMeshAllocationWithinLimits(maxVertices, maximumTriangles, 12 * (maxVertices + maximumTriangles), "loft", limits);
50
+ return { firstContours, maxVertices, maximumTriangles };
51
51
  }
52
52
  /** Internal native hole-cap triangulation over copied, explicit matched logical slots. */
53
53
  export function buildProfileLoftMesh(module, stations, limits, closed = false, seamProfileOffset = 0, positionFor) {
@@ -55,8 +55,8 @@ export function buildProfileLoftMesh(module, stations, limits, closed = false, s
55
55
  fail("Profile lofts require a bounded station array with two stations, or three for a closed path.");
56
56
  assertSamplingCount(stations.length, "loft", limits.maxPathPoints);
57
57
  const first = stations[0].profile;
58
- const { firstContours, maximumVertices, maximumTriangles } = profileMeshAllocation(first, stations.length, limits, closed);
59
- const positions = new Float32Array(maximumVertices * 3);
58
+ const { firstContours, maxVertices, maximumTriangles } = profileMeshAllocation(first, stations.length, limits, closed);
59
+ const positions = new Float32Array(maxVertices * 3);
60
60
  const indices = new Uint32Array(maximumTriangles * 3);
61
61
  let vertexCount = 0, cursor = 0;
62
62
  const physicalStations = stations.map((station, stationIndex) => {
@@ -205,9 +205,9 @@ export function buildProfileSweepMesh(module, profile, inputPath, options, limit
205
205
  assertSamplingCount(contourList(profile).reduce((count, contour) => count + contour.points.length, 0), "sweep", limits.maxSweepProfilePoints);
206
206
  profileMeshAllocation(profile, path.length, limits, closed);
207
207
  let scales = resolveSweepScales(options.scale, path.length);
208
- const twist = options.twistDegrees ?? 0;
208
+ const twist = options.twist ?? 0;
209
209
  if (!Number.isFinite(twist))
210
- fail("Sweep twistDegrees must be finite.");
210
+ fail("Sweep twist must be finite.");
211
211
  const seamProfileOffset = options.seamProfileOffset ?? 0;
212
212
  if (!Number.isSafeInteger(seamProfileOffset) || (!closed && seamProfileOffset !== 0))
213
213
  fail("A finite integer seamProfileOffset requires a closed path.");
@@ -2,6 +2,7 @@ import { GeometryError } from "../geometry/errors.js";
2
2
  import { isImmutableMathValue } from "../geometry/math/immutable-value.js";
3
3
  import { geometryRecipe, isGeometryRecipe } from "../model/geometry-recipes.js";
4
4
  import { immutableBufferView, isImmutableBuffer } from "../model/immutable-buffer.js";
5
+ import { generationDataMetadata } from "../model/immutable-generation-data.js";
5
6
  /**
6
7
  * Evaluates immutable recipes within one host revision. These maps memoize borrowed native handles;
7
8
  * the execution scope still owns allocation and cleanup, including handles restored from cache.
@@ -117,6 +118,11 @@ function* recipeShapes(values, seen = new Set()) {
117
118
  if (typeof value !== "object" || value === null || seen.has(value))
118
119
  continue;
119
120
  seen.add(value);
121
+ const metadata = generationDataMetadata(value);
122
+ if (metadata !== undefined) {
123
+ yield* recipeShapes(metadata.children, seen);
124
+ continue;
125
+ }
120
126
  if (isGeometryRecipe(value))
121
127
  yield value;
122
128
  else if (!isImmutableBuffer(value) &&
@@ -1,22 +1,33 @@
1
+ import { path2InputData, path2InputPointCount, } from "../geometry/paths/path-value.js";
1
2
  import { assertSamplingCount } from "../geometry/sampling-limits.js";
2
3
  import { strokePathContours } from "../geometry/stroke-path.js";
3
4
  import { preflightSvgRegion } from "../geometry/svg-import.js";
4
5
  import { parseSvgPath } from "../geometry/svg/index.js";
5
6
  import { sampleTextContours } from "../geometry/text-contours.js";
6
7
  import * as kernel from "./native/index.js";
8
+ import { MAX_AGGREGATE_CONTOURS } from "./native/regions.js";
7
9
  /** Internal host-bound section operations. */
8
10
  export function createSectionOperations(environment, transforms) {
9
11
  const { module, limits, scope, assertActive, throwGeometryError, nativeSolid, nativeSection, wrapSection, ownSection, validateFiniteNumber, validateCoordinates, assertOperandCount, withResolutionDefaults, resolveCircularSegments, } = environment;
10
12
  const { translate } = transforms.operations;
11
- const fromContours = (contours, fillRule = "nonzero") => {
12
- assertActive();
13
- assertOperandCount(contours, "polygon", 0);
13
+ const preflightContours = (contours) => {
14
14
  let count = 0;
15
- const copied = Array.from(contours, (contour) => {
16
- if (!Array.isArray(contour) || contour.length < 3)
15
+ for (const contour of contours) {
16
+ const points = path2InputPointCount(contour, true);
17
+ if (points < 3)
17
18
  throwGeometryError("INVALID_ARGUMENT", "polygon", "Each contour needs at least three points.");
18
- count += contour.length;
19
+ count += points;
19
20
  assertSamplingCount(count, "polygon", limits.maxProfilePoints);
21
+ }
22
+ };
23
+ const fromContours = (contours, fillRule = "nonzero") => {
24
+ assertActive();
25
+ assertOperandCount(contours, "polygon", 0);
26
+ preflightContours(contours);
27
+ const copied = Array.from(contours, (input) => {
28
+ const contour = path2InputData(input, true, {
29
+ maxPathPoints: limits.maxProfilePoints,
30
+ }).points;
20
31
  return Array.from(contour, (point) => {
21
32
  validateCoordinates(point, 2, "polygon");
22
33
  return [point[0], point[1]];
@@ -31,7 +42,8 @@ export function createSectionOperations(environment, transforms) {
31
42
  const operations = {
32
43
  polygon: (input) => {
33
44
  assertActive();
34
- if (Array.isArray(input))
45
+ if (Array.isArray(input) ||
46
+ (typeof input === "object" && input !== null && "toArray" in input))
35
47
  return fromContours([input]);
36
48
  if (typeof input !== "object" || input === null)
37
49
  throwGeometryError("INVALID_ARGUMENT", "polygon", "Use an outline or polygon options.");
@@ -47,7 +59,20 @@ export function createSectionOperations(environment, transforms) {
47
59
  if ("outer" in options) {
48
60
  if ("contours" in options || "fillRule" in options)
49
61
  throwGeometryError("INVALID_ARGUMENT", "polygon", "Explicit topology excludes compound fill options.");
50
- return wrapSection(kernel.regionToCrossSection(scope, [{ outer: options.outer, holes: options.holes === undefined ? [] : options.holes }], limits));
62
+ const holes = options.holes ?? [];
63
+ const holesArray = Array.isArray(holes);
64
+ if (!holesArray)
65
+ throwGeometryError("INVALID_ARGUMENT", "polygon", "Polygon holes must be an array.");
66
+ assertSamplingCount(holes.length + 1, "polygon", MAX_AGGREGATE_CONTOURS);
67
+ preflightContours([options.outer, ...holes]);
68
+ return wrapSection(kernel.regionToCrossSection(scope, [
69
+ {
70
+ outer: path2InputData(options.outer, true, {
71
+ maxPathPoints: limits.maxProfilePoints,
72
+ }).points,
73
+ holes: holes.map((hole) => path2InputData(hole, true, { maxPathPoints: limits.maxProfilePoints }).points),
74
+ },
75
+ ], limits));
51
76
  }
52
77
  if (!("contours" in options) || "holes" in options)
53
78
  throwGeometryError("INVALID_ARGUMENT", "polygon", "Compound fill requires contours without explicit holes.");
@@ -65,7 +65,11 @@ function capturePart(id, geometry, placement, worldGeometry) {
65
65
  return part;
66
66
  }
67
67
  /** Isolates a snapshot's lifetime from the cache transaction that produced it. */
68
- function createSnapshot(parts, { bounds, stats }, diagnostics, dependencies) {
68
+ function createSnapshot(parts, { bounds, stats }, diagnostics, dependencies, generationStartedAt) {
69
+ const completedStats = Object.freeze({
70
+ ...stats,
71
+ generationMs: performance.now() - generationStartedAt,
72
+ });
69
73
  let ownedParts = Object.freeze(parts);
70
74
  const requireParts = () => ownedParts ?? invalid("This model snapshot has been disposed.");
71
75
  return Object.freeze({
@@ -78,7 +82,7 @@ function createSnapshot(parts, { bounds, stats }, diagnostics, dependencies) {
78
82
  },
79
83
  get stats() {
80
84
  requireParts();
81
- return stats;
85
+ return completedStats;
82
86
  },
83
87
  diagnostics: Object.freeze([...diagnostics]),
84
88
  dependencies,
@@ -98,7 +102,7 @@ export function createSnapshotCache(options, limits) {
98
102
  let resourceCache = new Map();
99
103
  let placedCache = new Map();
100
104
  return {
101
- capture({ output, native, deferred, startedAt, builtAt, diagnostics, readDependencies, }) {
105
+ capture({ output, native, deferred, startedAt, builtAt, generationStartedAt, diagnostics, readDependencies, }) {
102
106
  const nextResources = new Map();
103
107
  const nextPlaced = new Map();
104
108
  const worldParts = [];
@@ -131,8 +135,14 @@ export function createSnapshotCache(options, limits) {
131
135
  summary.add(placed);
132
136
  worldParts.push(capturePart(descriptor.id, resource.public, placement, placed));
133
137
  }
138
+ const model = summary.finish(startedAt, builtAt);
139
+ const dependencies = readDependencies();
140
+ let snapshot;
134
141
  return {
135
- snapshot: createSnapshot(worldParts, summary.finish(startedAt, builtAt), diagnostics, readDependencies()),
142
+ // Publish only after retention, native cleanup and cache commit have succeeded.
143
+ get snapshot() {
144
+ return (snapshot ??= createSnapshot(worldParts, model, diagnostics, dependencies, generationStartedAt));
145
+ },
136
146
  retainedValues: [
137
147
  ...nextResources.keys(),
138
148
  ...[...nextResources.values()].map((resource) => resource.geometry),
@@ -41,6 +41,7 @@ export function createSession(program, suppliedOptions, engineLimits, transactio
41
41
  let disposed = false;
42
42
  let running = false;
43
43
  function execute(input, mode) {
44
+ const startedAt = performance.now();
44
45
  if (disposed)
45
46
  invalid("This model session has been disposed.");
46
47
  if (running)
@@ -48,14 +49,14 @@ export function createSession(program, suppliedOptions, engineLimits, transactio
48
49
  if (typeof input !== "object" || input === null || Array.isArray(input))
49
50
  invalid("Parameters must be a plain object.");
50
51
  running = true;
51
- const revision = new SessionRevision(context);
52
+ const revision = new SessionRevision(context, startedAt);
53
+ let completed;
52
54
  try {
53
- const completed = transaction(options, (native) => revision.execute(input, native, mode));
55
+ completed = transaction(options, (native) => revision.execute(input, native, mode));
54
56
  if (completed.kind === "validation")
55
57
  return completed.diagnostics;
56
58
  // Nothing becomes reusable until geometry validation AND native cleanup have succeeded.
57
59
  revision.commit();
58
- return completed.snapshot;
59
60
  }
60
61
  finally {
61
62
  try {
@@ -65,6 +66,7 @@ export function createSession(program, suppliedOptions, engineLimits, transactio
65
66
  running = false;
66
67
  }
67
68
  }
69
+ return completed.capture.snapshot;
68
70
  }
69
71
  return Object.freeze({
70
72
  run: (params) => execute(params, "run"),
@@ -89,11 +91,13 @@ export function createSession(program, suppliedOptions, engineLimits, transactio
89
91
  */
90
92
  class SessionRevision {
91
93
  session;
94
+ startedAt;
92
95
  revision;
93
96
  cacheCandidate;
94
97
  nativeDepth = 0;
95
- constructor(session) {
98
+ constructor(session, startedAt) {
96
99
  this.session = session;
100
+ this.startedAt = startedAt;
97
101
  }
98
102
  execute(input, native, mode) {
99
103
  const { owner, limits, caches } = this.session;
@@ -119,11 +123,12 @@ class SessionRevision {
119
123
  deferred,
120
124
  startedAt,
121
125
  builtAt: performance.now(),
126
+ generationStartedAt: this.startedAt,
122
127
  diagnostics: revision.diagnostics,
123
128
  readDependencies: () => revision.dependencies(output),
124
129
  });
125
130
  this.prepareNativeCache(revision, captured, deferred, native);
126
- return { kind: "snapshot", snapshot: captured.snapshot };
131
+ return { kind: "snapshot", capture: captured };
127
132
  }
128
133
  /** Retention is optional: an over-budget revision still produces a valid uncached snapshot. */
129
134
  prepareNativeCache(revision, captured, deferred, native) {
@@ -1,4 +1,4 @@
1
- import { createAnchor3 } from "../geometry/anchors.js";
1
+ import { anchor3 } from "../geometry/anchors.js";
2
2
  import { GeometryError } from "../geometry/errors.js";
3
3
  import { applyInverseTranspose3, applyTransformDirection3, applyTransformPoint3, inverseLinearTransform3, } from "../geometry/transform3.js";
4
4
  const maximumAnchors = 128;
@@ -15,7 +15,7 @@ function copyAnchor(anchor, operation) {
15
15
  for (const vector of [anchor.position, anchor.direction, anchor.up])
16
16
  if (!Array.isArray(vector) || vector.length !== 3 || !vector.every(Number.isFinite))
17
17
  fail(operation, "Anchor vectors must contain exactly three finite coordinates.");
18
- return createAnchor3(anchor.position, anchor.direction, anchor.up);
18
+ return anchor3(anchor.position, anchor.direction, anchor.up);
19
19
  }
20
20
  function unit(vector) {
21
21
  const maximum = Math.max(...vector.map(Math.abs));
@@ -27,7 +27,7 @@ function unit(vector) {
27
27
  }
28
28
  /** Maps positions affinely, outward normals by inverse transpose, and roll tangents linearly. */
29
29
  function transformedAnchor(anchor, matrix, inverse) {
30
- return createAnchor3(applyTransformPoint3(matrix, anchor.position), applyInverseTranspose3(inverse, anchor.direction), unit(applyTransformDirection3(matrix, anchor.up)));
30
+ return anchor3(applyTransformPoint3(matrix, anchor.position), applyInverseTranspose3(inverse, anchor.direction), unit(applyTransformDirection3(matrix, anchor.up)));
31
31
  }
32
32
  /** Run-owned immutable anchor metadata. Geometry operations acquire metadata only deliberately. */
33
33
  export function createShapeAnchorOwner(assertShape, aliasShape) {
@@ -1,4 +1,4 @@
1
- import { attachTransform } from "../geometry/anchors.js";
1
+ import { attachmentTransform3 } from "../geometry/anchors.js";
2
2
  import { vector2Data, vector3Data, } from "../geometry/math/vector-value.js";
3
3
  import { assertPrimitiveOptions } from "../geometry/primitive-resolvers.js";
4
4
  import { transform2, transform3, } from "../geometry/transform-chain.js";
@@ -171,29 +171,29 @@ export function createTransformOperations(environment) {
171
171
  const columnMajor = [m[0], m[3], m[6], m[1], m[4], m[7], m[2], m[5], m[8]];
172
172
  return preserveProfile(value, ownSection(native.value.transform(columnMajor)), m);
173
173
  });
174
- const placementMatrix = (placement, shape) => {
175
- if (placement === undefined)
174
+ const attachmentMatrix = (attachment, shape) => {
175
+ if (attachment === undefined)
176
176
  return undefined;
177
- if (typeof placement !== "object" || placement === null || Array.isArray(placement))
178
- throwGeometryError("INVALID_ARGUMENT", "placement", "placement must be an explicit source/target anchor object.");
179
- const source = typeof placement.source === "string"
177
+ if (typeof attachment !== "object" || attachment === null || Array.isArray(attachment))
178
+ throwGeometryError("INVALID_ARGUMENT", "attachment", "attachment must be an explicit source/target anchor object.");
179
+ const source = typeof attachment.source === "string"
180
180
  ? shape === undefined
181
- ? throwGeometryError("INVALID_ARGUMENT", "placement", "Named source anchors require a constructed shape.")
182
- : environment.anchor(shape, placement.source)
183
- : placement.source;
184
- for (const anchor of [source, placement.target]) {
181
+ ? throwGeometryError("INVALID_ARGUMENT", "attachment", "Named source anchors require a constructed shape.")
182
+ : environment.anchor(shape, attachment.source)
183
+ : attachment.source;
184
+ for (const anchor of [source, attachment.target]) {
185
185
  if (typeof anchor !== "object" || anchor === null)
186
- throwGeometryError("INVALID_ARGUMENT", "placement", "Placement requires explicit source and target anchors.");
187
- validateCoordinates(anchor.position, 3, "placement");
188
- validateCoordinates(anchor.direction, 3, "placement");
189
- validateCoordinates(anchor.up, 3, "placement");
186
+ throwGeometryError("INVALID_ARGUMENT", "attachment", "Attachment requires explicit source and target anchors.");
187
+ validateCoordinates(anchor.position, 3, "attachment");
188
+ validateCoordinates(anchor.direction, 3, "attachment");
189
+ validateCoordinates(anchor.up, 3, "attachment");
190
190
  }
191
- const spinDegrees = validateFiniteNumber(placement.spinDegrees ?? 0, "placement");
192
- return attachTransform(source, placement.target, {
193
- ...(placement.alignment === undefined ? {} : { alignment: placement.alignment }),
194
- ...(placement.gap === undefined ? {} : { gap: placement.gap }),
195
- ...(placement.tolerance === undefined ? {} : { tolerance: placement.tolerance }),
196
- spinRadians: (spinDegrees * Math.PI) / 180,
191
+ const spin = validateFiniteNumber(attachment.spin ?? 0, "attachment");
192
+ return attachmentTransform3(source, attachment.target, {
193
+ ...(attachment.alignment === undefined ? {} : { alignment: attachment.alignment }),
194
+ ...(attachment.gap === undefined ? {} : { gap: attachment.gap }),
195
+ ...(attachment.tolerance === undefined ? {} : { tolerance: attachment.tolerance }),
196
+ spin,
197
197
  });
198
198
  };
199
199
  const placedSolid = (value, create, anchors) => {
@@ -201,17 +201,17 @@ export function createTransformOperations(environment) {
201
201
  const solid = wrapSolid(create());
202
202
  if (anchors !== undefined)
203
203
  environment.rememberAnchors(solid, anchors());
204
- const matrix = placementMatrix(value.placement, solid);
204
+ const matrix = attachmentMatrix(value.attachment, solid);
205
205
  return matrix === undefined ? solid : transform(solid, matrix);
206
206
  };
207
207
  const placedSection = (value, create) => {
208
208
  assertPrimitiveOptions(value, "primitive");
209
209
  const section = create();
210
- const matrix = placementMatrix(value.placement, section);
210
+ const matrix = attachmentMatrix(value.attachment, section);
211
211
  if (matrix === undefined)
212
212
  return section;
213
213
  if (Math.abs(matrix[8]) > 1e-10 || Math.abs(matrix[9]) > 1e-10 || Math.abs(matrix[11]) > 1e-10)
214
- throwGeometryError("INVALID_ARGUMENT", "placement", "Section placement must preserve the XY plane.");
214
+ throwGeometryError("INVALID_ARGUMENT", "attachment", "Section attachment must preserve the XY plane.");
215
215
  const xy = [
216
216
  matrix[0],
217
217
  matrix[1],
@@ -234,7 +234,7 @@ export function createTransformOperations(environment) {
234
234
  transform,
235
235
  attach: (value, source, target, valueOptions) => {
236
236
  nativeSolid(value);
237
- const matrix = placementMatrix({ ...valueOptions, source, target }, value);
237
+ const matrix = attachmentMatrix({ ...valueOptions, source, target }, value);
238
238
  return transform(value, matrix);
239
239
  },
240
240
  };