@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
@@ -9,7 +9,7 @@ const distance = (a, b) => {
9
9
  curveFailure("NON_FINITE_VALUE", "Curve extent exceeds finite arithmetic.");
10
10
  return value;
11
11
  };
12
- function resamplePolyline(path, dimensions, options, createWriter) {
12
+ function resamplePolyline(path, dimensions, options, createWriter, includeTangents = true) {
13
13
  const maximum = resolveSamplingBudget(options);
14
14
  if (options.closed !== undefined && typeof options.closed !== "boolean")
15
15
  curveFailure("INVALID_ARGUMENT", "closed must be a boolean.");
@@ -91,10 +91,12 @@ function resamplePolyline(path, dimensions, options, createWriter) {
91
91
  point[2] = z(a) + (z(b) - z(a)) * t;
92
92
  }
93
93
  validateCurvePoint3(point);
94
- tangent[0] = b[0] - a[0];
95
- tangent[1] = b[1] - a[1];
96
- tangent[2] = z(b) - z(a);
97
- normalizeCurveDirection(tangent, tangent);
94
+ if (includeTangents) {
95
+ tangent[0] = b[0] - a[0];
96
+ tangent[1] = b[1] - a[1];
97
+ tangent[2] = z(b) - z(a);
98
+ normalizeCurveDirection(tangent, tangent);
99
+ }
98
100
  writer.append(point, tangent);
99
101
  }
100
102
  return writer.finish();
@@ -123,3 +125,23 @@ export function resamplePolyline3(path, options = {}) {
123
125
  export function resamplePolyline2(path, options = {}) {
124
126
  return resamplePolyline(path, 2, options, createPlanarSampleWriter);
125
127
  }
128
+ /** Internal points-only writer; Path2 owns these mutable coordinates and freezes public interchange. */
129
+ export function resamplePath2Data(path, options) {
130
+ const points = [];
131
+ return resamplePolyline(path, 2, options, () => ({
132
+ append: (point) => {
133
+ points.push([point[0], point[1]]);
134
+ },
135
+ finish: () => points,
136
+ }), false);
137
+ }
138
+ /** Internal points-only writer; avoids calculating and allocating tangents discarded by Path3. */
139
+ export function resamplePath3Data(path, options) {
140
+ const points = [];
141
+ return resamplePolyline(path, 3, options, () => ({
142
+ append: (point) => {
143
+ points.push([point[0], point[1], point[2]]);
144
+ },
145
+ finish: () => points,
146
+ }), false);
147
+ }
@@ -1,7 +1,9 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { vector3Data } from "../math/vector-value.js";
2
3
  import { cross3, dot3, scale3 } from "../math/vector3.js";
4
+ import { path2InputData, path3InputData, } from "../paths/path-value.js";
3
5
  import { distributeAlongPath } from "../paths/planar.js";
4
- import { normalizeSweepPath } from "../sweeps/validation.js";
6
+ import { restrictTransform3 } from "../transform2.js";
5
7
  import { composeTransform3, frameTransform3, IDENTITY_TRANSFORM3, rotationTransform3, translationTransform3, } from "../transform3.js";
6
8
  const fail = (operation, message) => {
7
9
  throw new GeometryError("INVALID_ARGUMENT", message, { operation });
@@ -23,13 +25,35 @@ const finite = (value, operation) => {
23
25
  });
24
26
  return value;
25
27
  };
26
- const vector = (value, operation) => {
27
- if (!Array.isArray(value) || value.length !== 3 || !Array.from(value).every(Number.isFinite))
28
- fail(operation, "Pattern vectors require three finite coordinates.");
29
- return value;
28
+ const coordinates = (input, operation) => {
29
+ const value = typeof input === "object" &&
30
+ input !== null &&
31
+ "toArray" in input &&
32
+ typeof input.toArray === "function"
33
+ ? input.toArray()
34
+ : input;
35
+ if (!Array.isArray(value) || (value.length !== 2 && value.length !== 3))
36
+ fail(operation, "Pattern vectors require exact XY or XYZ coordinates.");
37
+ const source = value;
38
+ const copied = source.length === 2 ? [source[0], source[1]] : [source[0], source[1], source[2]];
39
+ if (copied.some((coordinate) => typeof coordinate !== "number"))
40
+ fail(operation, "Pattern vectors require numeric coordinates.");
41
+ copied.forEach((coordinate) => finite(coordinate, operation));
42
+ return copied;
43
+ };
44
+ const vector = (input, operation) => {
45
+ const value = coordinates(input, operation);
46
+ if (value.length !== 3)
47
+ fail(operation, "Spatial pattern vectors require XYZ coordinates.");
48
+ return vector3Data(value);
30
49
  };
31
- const direction = (value, operation) => {
32
- vector(value, operation);
50
+ const lift = (value) => [value[0], value[1], value[2] ?? 0];
51
+ const requireDimension = (actual, expected, operation) => {
52
+ if (actual !== expected)
53
+ fail(operation, "Pattern coordinates must match the shape dimension.");
54
+ };
55
+ const direction = (input, operation) => {
56
+ const value = vector(input, operation);
33
57
  const maximum = Math.max(...value.map(Math.abs));
34
58
  if (maximum === 0)
35
59
  fail(operation, "Pattern direction must be nonzero.");
@@ -77,27 +101,46 @@ export function linearPatternPlan(options) {
77
101
  fail(operation, "Length must be a nonnegative whole multiple of the signed spacing.");
78
102
  count = patternCount(Math.round(intervals) + 1, operation);
79
103
  }
80
- const axis = direction(options.direction ?? [1, 0, 0], operation);
104
+ const input = options.direction === undefined ? undefined : coordinates(options.direction, operation);
105
+ const axis = direction(input === undefined ? [1, 0, 0] : lift(input), operation);
81
106
  finite(spacing * (count - 1), operation);
82
- return { count, transformAt: (index) => translationTransform3(scale3(axis, spacing * index)) };
107
+ return {
108
+ count,
109
+ transformAt: (index, dimension = 3) => {
110
+ if (input !== undefined)
111
+ requireDimension(input.length, dimension, operation);
112
+ return translationTransform3(scale3(axis, spacing * index));
113
+ },
114
+ };
83
115
  }
84
116
  export function radialPatternPlan(options) {
85
117
  const operation = "radialPattern";
86
118
  optionsObject(options, operation);
87
119
  const count = patternCount(options.count, operation);
88
- const axis = direction(options.axis, operation);
89
- const angle = finite((options.angleDegrees / 180) * Math.PI, operation);
90
- if (angle === 0)
91
- fail(operation, "Pattern angleDegrees must be nonzero.");
92
- finite(angle * (count - 1), operation);
93
- const center = vector(options.center ?? [0, 0, 0], operation);
94
- const before = translationTransform3(scale3(center, -1));
95
- const after = translationTransform3(center);
120
+ if ("center" in options)
121
+ fail(operation, "Use pivot for a radial pattern's rotation reference.");
122
+ const hasAxis = options.axis !== undefined;
123
+ const axis = direction(options.axis ?? [0, 0, 1], operation);
124
+ const angleRadians = finite((options.angle / 180) * Math.PI, operation);
125
+ if (angleRadians === 0)
126
+ fail(operation, "Pattern angle must be nonzero.");
127
+ finite(angleRadians * (count - 1), operation);
128
+ const pivot = options.pivot === undefined ? undefined : coordinates(options.pivot, operation);
129
+ const before = translationTransform3(scale3(pivot === undefined ? [0, 0, 0] : lift(pivot), -1));
130
+ const after = translationTransform3(pivot === undefined ? [0, 0, 0] : lift(pivot));
96
131
  return {
97
132
  count,
98
- transformAt: (index) => index === 0
99
- ? IDENTITY_TRANSFORM3
100
- : composeTransform3(after, composeTransform3(rotationTransform3(axis, { radians: angle * index }), before)),
133
+ transformAt: (index, dimension = 3) => {
134
+ if (dimension === 2 && hasAxis)
135
+ fail(operation, "XY radial patterns use the implicit +Z axis.");
136
+ if (dimension === 3 && !hasAxis)
137
+ fail(operation, "Spatial radial patterns require an explicit axis.");
138
+ if (pivot !== undefined)
139
+ requireDimension(pivot.length, dimension, operation);
140
+ return index === 0
141
+ ? IDENTITY_TRANSFORM3
142
+ : composeTransform3(after, composeTransform3(rotationTransform3(axis, { radians: angleRadians * index }), before));
143
+ },
101
144
  };
102
145
  }
103
146
  export function gridPatternPlan(options) {
@@ -111,6 +154,7 @@ export function gridPatternPlan(options) {
111
154
  fail(operation, "Grid count and spacing require matching XY or XYZ tuples.");
112
155
  if (options.center !== undefined && typeof options.center !== "boolean")
113
156
  fail(operation, "Grid center must be a boolean.");
157
+ const centered = options.center === true;
114
158
  const counts = [options.count[0], options.count[1], dimensions === 3 ? options.count[2] : 1];
115
159
  counts.forEach((count) => patternCount(count, operation));
116
160
  const count = patternCount(counts[0] * counts[1] * counts[2], operation);
@@ -138,13 +182,17 @@ export function gridPatternPlan(options) {
138
182
  const frame = options.frame === undefined ? IDENTITY_TRANSFORM3 : frameTransform3(options.frame);
139
183
  return {
140
184
  count,
141
- transformAt: (index) => {
185
+ transformAt: (index, dimension = 3) => {
186
+ if (dimension === 2) {
187
+ requireDimension(dimensions, dimension, operation);
188
+ restrictTransform3(frame);
189
+ }
142
190
  const coordinates = [
143
191
  index % counts[0],
144
192
  Math.floor(index / counts[0]) % counts[1],
145
193
  Math.floor(index / (counts[0] * counts[1])),
146
194
  ];
147
- const offset = coordinates.map((value, axis) => value * spacing[axis] - (options.center === true ? extent[axis] / 2 : 0));
195
+ const offset = coordinates.map((value, axis) => value * spacing[axis] - (centered ? extent[axis] / 2 : 0));
148
196
  return composeTransform3(frame, translationTransform3(offset));
149
197
  },
150
198
  };
@@ -164,18 +212,43 @@ export function pathPatternPlan(input, options, limits) {
164
212
  options.orientation !== "fixed" &&
165
213
  options.orientation !== "tangent")
166
214
  fail(operation, "Path orientation must be fixed or tangent.");
167
- const path = normalizeSweepPath(input, options.closed ?? false, operation, limits);
215
+ const tangentOrientation = options.orientation === "tangent";
216
+ if (typeof input !== "object" || input === null)
217
+ fail(operation, "Path patterns require sampled XY or XYZ coordinates.");
218
+ const first = Array.isArray(input) ? input[0] : undefined;
219
+ const suppliedDimension = Array.isArray(input)
220
+ ? Array.isArray(first)
221
+ ? first.length
222
+ : typeof first === "object" && first !== null && "z" in first
223
+ ? 3
224
+ : 2
225
+ : Reflect.get(input, "dimension");
226
+ if (suppliedDimension !== 2 && suppliedDimension !== 3)
227
+ fail(operation, "Path patterns require sampled XY or XYZ coordinates.");
228
+ const dimension = suppliedDimension === 2 ? 2 : 3;
229
+ const data = dimension === 2
230
+ ? path2InputData(input, options.closed, limits)
231
+ : path3InputData(input, options.closed, limits);
232
+ const path = dimension === 2 ? data.points.map(lift) : data.points;
233
+ // Distribution permits reversals, zero-length edges, and open paths returning to their start.
234
+ // Validate the traversal before factories without allocating the complete placement collection.
235
+ const firstPlacement = distributeAlongPath(path, 1, data.closed, limits);
168
236
  // Defer the output placement array until the operation has checked the source copy budget.
169
- let placements;
237
+ let placements = count === 1 ? firstPlacement : undefined;
170
238
  return {
171
239
  count,
172
- transformAt: (index) => {
173
- placements ??= distributeAlongPath(path, count, options.closed ?? false, limits);
240
+ transformAt: (index, shapeDimension = 3) => {
241
+ requireDimension(dimension, shapeDimension, operation);
242
+ placements ??= distributeAlongPath(path, count, data.closed, limits);
174
243
  const placement = placements[index];
175
244
  const translation = translationTransform3(placement.position);
176
- if (options.orientation !== "tangent")
245
+ if (!tangentOrientation)
177
246
  return translation;
178
247
  const tangent = placement.tangent;
248
+ if (dimension === 2)
249
+ return composeTransform3(translation, rotationTransform3([0, 0, 1], {
250
+ radians: Math.atan2(tangent[1], tangent[0]),
251
+ }));
179
252
  const cosine = Math.max(-1, Math.min(1, dot3([0, 0, 1], tangent)));
180
253
  const axis = cross3([0, 0, 1], tangent);
181
254
  const sine = Math.hypot(...axis);
@@ -3,7 +3,7 @@ import { resolveGeometrySamplingLimits } from "./sampling-limits.js";
3
3
  function transforms(plan) {
4
4
  return Object.freeze(Array.from({ length: plan.count }, (_, index) => Object.freeze(plan.transformAt(index))));
5
5
  }
6
- /** Equal linear placements in millimetres, including the original at the origin. */
6
+ /** Spatial XYZ matrix placements in millimetres, including the original at the origin. */
7
7
  export function linearPatternTransforms(options) {
8
8
  return transforms(linearPatternPlan(options));
9
9
  }
@@ -11,7 +11,7 @@ export function linearPatternTransforms(options) {
11
11
  export function radialPatternTransforms(options) {
12
12
  return transforms(radialPatternPlan(options));
13
13
  }
14
- /** XY or XYZ grid placements in millimetres, in X-fastest order. */
14
+ /** Spatial XYZ matrices for an XY or XYZ grid, in X-fastest order. */
15
15
  export function gridPatternTransforms(options) {
16
16
  return transforms(gridPatternPlan(options));
17
17
  }
@@ -1,7 +1,24 @@
1
1
  import * as clippingModule from "polygon-clipping";
2
+ import { normalizeRegion } from "./regions.js";
2
3
  const moduleWithDefault = clippingModule;
3
4
  /** @internal Normalizes polygon-clipping's CommonJS and bundled ESM module shapes. */
4
5
  export const polygonClipping = moduleWithDefault.default ?? clippingModule;
6
+ /** @internal Copies an open contour into polygon-clipping's explicitly closed ring format. */
7
+ export function clippingRing(points) {
8
+ const result = points.map(([x, y]) => [x, y]);
9
+ const first = result[0];
10
+ const last = result.at(-1);
11
+ if (first !== undefined && last !== undefined && (first[0] !== last[0] || first[1] !== last[1]))
12
+ result.push([...first]);
13
+ return result;
14
+ }
15
+ /** @internal Converts closed clipping rings into canonical regions with implicit seams. */
16
+ export function regionFromMultiPolygon(value) {
17
+ return normalizeRegion(value.map((polygon) => ({
18
+ outer: polygon[0].slice(0, -1).map(([x, y]) => [x, y]),
19
+ holes: polygon.slice(1).map((hole) => hole.slice(0, -1).map(([x, y]) => [x, y])),
20
+ })));
21
+ }
5
22
  const CLIPPING_COORDINATE_GRID = 1e9;
6
23
  const snapCoordinate = (value) => Math.round(value * CLIPPING_COORDINATE_GRID) / CLIPPING_COORDINATE_GRID;
7
24
  /** Canonicalizes shared endpoints below model tolerance before they enter the sweep-line kernel. */
@@ -16,7 +16,7 @@ function invalid(message) {
16
16
  * coordinate range are required. No native engine, SDK, or ambient resolution is used.
17
17
  *
18
18
  * @param curve - Closed contour in millimetres unless positive scales convert its coordinates.
19
- * @param options - Physical resolution and unique vertex budget; defaults to 4096 vertices.
19
+ * @param options - Physical resolution and unique vertex budget; defaults to min(4096, maxProfilePoints).
20
20
  * @returns Frozen counterclockwise loop in millimetres, without a repeated seam endpoint.
21
21
  * @throws {@link GeometryError} for invalid data, topology, scale, or exceeded sampling budgets.
22
22
  *
@@ -38,8 +38,8 @@ export function sampleContour(curve, options = {}) {
38
38
  if (![widthScale, heightScale].every((scale) => Number.isFinite(scale) && scale > 0))
39
39
  invalid("Cross-section scales must be finite and positive.");
40
40
  const limits = resolveGeometrySamplingLimits(options.limits);
41
- const maximumVertices = options.maximumVertices ?? Math.min(4096, limits.maxProfilePoints);
42
- requireProfileVertexCount(maximumVertices, 3, OPERATION, limits);
41
+ const maxVertices = options.maxVertices ?? Math.min(4096, limits.maxProfilePoints);
42
+ requireProfileVertexCount(maxVertices, 3, OPERATION, limits);
43
43
  const segmentInput = curve?.segments;
44
44
  if (!curve ||
45
45
  !Array.isArray(segmentInput) ||
@@ -66,11 +66,11 @@ export function sampleContour(curve, options = {}) {
66
66
  invalid("Cross-section segments must be lines or cubics.");
67
67
  const end = physical(segment.end);
68
68
  const closed = index === curve.segments.length - 1;
69
- const remainingVertices = Math.min(limits.maxPathPoints, maximumVertices - output.length + 1 + (closed ? 1 : 0));
69
+ const remainingVertices = Math.min(limits.maxPathPoints, maxVertices - output.length + 1 + (closed ? 1 : 0));
70
70
  if (remainingVertices < 2)
71
71
  throw new GeometryError("COMPLEXITY_LIMIT", "Cross-section sampling exceeds its vertex budget.", {
72
72
  operation: OPERATION,
73
- details: { maximumVertices },
73
+ details: { maxVertices },
74
74
  });
75
75
  let span;
76
76
  if (segment.type === "line") {
@@ -90,7 +90,7 @@ export function sampleContour(curve, options = {}) {
90
90
  }
91
91
  const sampled = sampleCurve2(span, {
92
92
  ...(options.resolution === undefined ? {} : { resolution: options.resolution }),
93
- maximumVertices: remainingVertices,
93
+ maxVertices: remainingVertices,
94
94
  limits,
95
95
  }).points;
96
96
  const endIndex = sampled.length - (closed ? 1 : 0);
@@ -39,10 +39,10 @@ const validateContour = (contour) => {
39
39
  }
40
40
  else if (span.kind === "arc") {
41
41
  point(span.center);
42
- if (![span.radius, span.startDegrees, span.sweepDegrees].every(Number.isFinite) ||
42
+ if (![span.radius, span.startAngle, span.sweepAngle].every(Number.isFinite) ||
43
43
  span.radius < 0 ||
44
- Math.abs(span.sweepDegrees) > 360 ||
45
- span.sweepDegrees === 0)
44
+ Math.abs(span.sweepAngle) > 360 ||
45
+ span.sweepAngle === 0)
46
46
  fail("Arc spans need nonnegative radius and a nonzero finite sweep no larger than 360 degrees.");
47
47
  }
48
48
  else
@@ -132,7 +132,7 @@ export function matchProfiles(profiles, options = {}) {
132
132
  if (span.kind === "arc")
133
133
  return span.radius === 0
134
134
  ? 1
135
- : resolveArcSegments(span.radius, Math.abs(span.sweepDegrees), selectedResolution, limits);
135
+ : resolveArcSegments(span.radius, Math.abs(span.sweepAngle), selectedResolution, limits);
136
136
  if (span.kind === "cubic")
137
137
  return resolveUniformCubicSegments(planarCubicControl(span), selectedResolution, cubicBudget);
138
138
  return resolveLineSegmentCount(Math.hypot(span.end[0] - span.start[0], span.end[1] - span.start[1]), selectedResolution.maxSegmentLength);
@@ -49,8 +49,8 @@ export const circleContour = (options) => {
49
49
  */
50
50
  export const regularPolygonContour = (options) => {
51
51
  const operation = "regularPolygonContour";
52
- const { radius, sides, rotationDegrees = 0, sizing = "vertex" } = options;
53
- requireFiniteProfileValues([radius, rotationDegrees], operation);
52
+ const { radius, sides, rotation = 0, sizing = "vertex" } = options;
53
+ requireFiniteProfileValues([radius, rotation], operation);
54
54
  if (!(radius > 0)) {
55
55
  throw new GeometryError("INVALID_ARGUMENT", "Polygon radius must be positive.", { operation });
56
56
  }
@@ -61,9 +61,9 @@ export const regularPolygonContour = (options) => {
61
61
  });
62
62
  const sampledRadius = sizing === "face" ? radius / Math.cos(Math.PI / sides) : radius;
63
63
  requireFiniteProfileValues([sampledRadius], operation);
64
- const rotation = ((rotationDegrees % 360) * Math.PI) / 180;
64
+ const rotationRadians = ((rotation % 360) * Math.PI) / 180;
65
65
  return Array.from({ length: sides }, (_, index) => {
66
- const angle = rotation + (Math.PI * 2 * index) / sides;
66
+ const angle = rotationRadians + (Math.PI * 2 * index) / sides;
67
67
  return [sampledRadius * Math.cos(angle), sampledRadius * Math.sin(angle)];
68
68
  });
69
69
  };
@@ -72,7 +72,7 @@ export function rectangleCornerSegments(corner, limits) {
72
72
  return 1;
73
73
  return (resolveAlignedCircularSegments(Math.max(corner.radius, Number.MIN_VALUE), {
74
74
  alignTo: [4],
75
- minimumSegments: 4,
75
+ minSegments: 4,
76
76
  ...(corner.segments === undefined ? {} : { segments: corner.segments }),
77
77
  ...(corner.resolution === undefined ? {} : { resolution: corner.resolution }),
78
78
  limits: selected,
@@ -194,7 +194,7 @@ export function rectangleProfile(options) {
194
194
  center: map(index, a, b),
195
195
  }));
196
196
  corners.forEach((corner, index) => {
197
- const shape = endpoints[index], startDegrees = vertices[index][2];
197
+ const shape = endpoints[index], startAngle = vertices[index][2];
198
198
  if (corner.kind === "chamfer")
199
199
  spans.push({ id: names[index], kind: "line", start: shape.start, end: shape.end });
200
200
  else if (corner.kind === "smooth") {
@@ -230,8 +230,8 @@ export function rectangleProfile(options) {
230
230
  kind: "arc",
231
231
  center: shape.center,
232
232
  radius: setbacks[index][0],
233
- startDegrees,
234
- sweepDegrees: 90,
233
+ startAngle,
234
+ sweepAngle: 90,
235
235
  ...(exact ? { segments: rectangleCornerSegments(corner, limits) } : {}),
236
236
  ...(corner.kind === "round" && corner.resolution !== undefined
237
237
  ? { resolution: { ...corner.resolution } }
@@ -30,7 +30,7 @@ function distanceToChord(point, start, end) {
30
30
  * no axis closure, winding normalization, or manufacturing repair is performed.
31
31
  *
32
32
  * @param curve - Open outline in millimetres unless the positive scales convert its coordinates.
33
- * @param options - Physical resolution and output budget; defaults to 4096 vertices.
33
+ * @param options - Physical resolution and output budget; defaults to min(4096, maxProfilePoints).
34
34
  * @returns Frozen open polyline in millimetres, ordered from lowest to highest anchor.
35
35
  * @throws {@link GeometryError} for invalid coordinates, order, scale, or exceeded subdivision budget.
36
36
  *
@@ -48,9 +48,9 @@ export function sampleSideProfile(curve, options = {}) {
48
48
  if (![radiusScale, heightScale].every((scale) => Number.isFinite(scale) && scale > 0)) {
49
49
  invalid("Profile scales must be finite and positive.");
50
50
  }
51
- const maximumVertices = options.maximumVertices ??
51
+ const maxVertices = options.maxVertices ??
52
52
  Math.min(4096, resolveGeometrySamplingLimits(options.limits).maxProfilePoints);
53
- requireProfileVertexCount(maximumVertices, 2, OPERATION, options.limits);
53
+ requireProfileVertexCount(maxVertices, 2, OPERATION, options.limits);
54
54
  const maximumProfilePoints = resolveGeometrySamplingLimits(options.limits).maxProfilePoints;
55
55
  const segmentInput = curve.segments;
56
56
  if (!Array.isArray(segmentInput) ||
@@ -72,10 +72,10 @@ export function sampleSideProfile(curve, options = {}) {
72
72
  };
73
73
  const output = [];
74
74
  const append = (point) => {
75
- if (output.length >= maximumVertices || output.length >= maximumProfilePoints) {
75
+ if (output.length >= maxVertices || output.length >= maximumProfilePoints) {
76
76
  throw new GeometryError("COMPLEXITY_LIMIT", "Profile sampling exceeds its vertex budget.", {
77
77
  operation: OPERATION,
78
- details: { maximumVertices },
78
+ details: { maxVertices },
79
79
  });
80
80
  }
81
81
  output.push(Object.freeze(point));
@@ -109,10 +109,10 @@ export function sampleSideProfile(curve, options = {}) {
109
109
  const count = resolution.maxSegmentLength === undefined
110
110
  ? 1
111
111
  : Math.max(1, Math.ceil(length / resolution.maxSegmentLength));
112
- if (count > maximumVertices - output.length) {
112
+ if (count > maxVertices - output.length) {
113
113
  throw new GeometryError("COMPLEXITY_LIMIT", "Profile line exceeds its vertex budget.", {
114
114
  operation: OPERATION,
115
- details: { maximumVertices },
115
+ details: { maxVertices },
116
116
  });
117
117
  }
118
118
  for (let index = 1; index <= count; index++) {
@@ -8,7 +8,7 @@ export function createProfileSpanSampler(span) {
8
8
  ];
9
9
  if (span.kind === "arc")
10
10
  return (t) => {
11
- const angle = ((span.startDegrees + span.sweepDegrees * t) * Math.PI) / 180;
11
+ const angle = ((span.startAngle + span.sweepAngle * t) * Math.PI) / 180;
12
12
  const snap = (value) => Math.abs(value) < 1e-14
13
13
  ? 0
14
14
  : Math.abs(Math.abs(value) - 1) < 1e-14
@@ -13,20 +13,20 @@ export function resolveGeometryResolution(policy = {}, limits = {}) {
13
13
  const merged = policy;
14
14
  const circularSegments = merged.circularSegments;
15
15
  const allowedMaximum = resolveGeometrySamplingLimits(limits).maxCircularSegments;
16
- const minimumSegments = merged.minimumSegments ?? Math.min(DEFAULT_MINIMUM_SEGMENTS, allowedMaximum);
17
- const maximumSegments = merged.maximumSegments ?? allowedMaximum;
16
+ const minSegments = merged.minSegments ?? Math.min(DEFAULT_MINIMUM_SEGMENTS, allowedMaximum);
17
+ const maxSegments = merged.maxSegments ?? allowedMaximum;
18
18
  const maxChordError = merged.maxChordError ?? DEFAULT_MAX_CHORD_ERROR;
19
19
  const maxSegmentLength = merged.maxSegmentLength;
20
- if (!Number.isSafeInteger(minimumSegments) || minimumSegments < 3) {
21
- invalid("minimumSegments must be an integer of at least three.", { minimumSegments });
20
+ if (!Number.isSafeInteger(minSegments) || minSegments < 3) {
21
+ invalid("minSegments must be an integer of at least three.", { minSegments });
22
22
  }
23
- if (!Number.isSafeInteger(maximumSegments) ||
24
- maximumSegments < minimumSegments ||
25
- maximumSegments > allowedMaximum) {
26
- invalid("maximumSegments must be a safe integer between minimumSegments and maxCircularSegments.", {
23
+ if (!Number.isSafeInteger(maxSegments) ||
24
+ maxSegments < minSegments ||
25
+ maxSegments > allowedMaximum) {
26
+ invalid("maxSegments must be a safe integer between minSegments and maxCircularSegments.", {
27
27
  allowedMaximum,
28
- maximumSegments,
29
- minimumSegments,
28
+ maxSegments,
29
+ minSegments,
30
30
  });
31
31
  }
32
32
  if (!Number.isFinite(maxChordError) || maxChordError <= 0) {
@@ -41,18 +41,18 @@ export function resolveGeometryResolution(policy = {}, limits = {}) {
41
41
  if (circularSegments !== undefined &&
42
42
  (!Number.isSafeInteger(circularSegments) ||
43
43
  circularSegments < 3 ||
44
- circularSegments > maximumSegments)) {
45
- invalid("circularSegments must be an integer from three through maximumSegments.", {
44
+ circularSegments > maxSegments)) {
45
+ invalid("circularSegments must be an integer from three through maxSegments.", {
46
46
  circularSegments,
47
- maximumSegments,
47
+ maxSegments,
48
48
  });
49
49
  }
50
50
  return Object.freeze({
51
51
  ...(circularSegments === undefined ? {} : { circularSegments }),
52
52
  maxChordError,
53
53
  ...(maxSegmentLength === undefined ? {} : { maxSegmentLength }),
54
- maximumSegments,
55
- minimumSegments,
54
+ maxSegments,
55
+ minSegments,
56
56
  });
57
57
  }
58
58
  const requiredFullCircleSegments = (radius, resolution, sizing) => {
@@ -66,7 +66,7 @@ const requiredFullCircleSegments = (radius, resolution, sizing) => {
66
66
  : sizing === "face"
67
67
  ? Math.ceil(Math.PI / Math.atan(resolution.maxSegmentLength / radius / 2))
68
68
  : Math.ceil((Math.PI * 2 * radius) / resolution.maxSegmentLength);
69
- return Math.max(resolution.minimumSegments, chordSegments, lengthSegments);
69
+ return Math.max(resolution.minSegments, chordSegments, lengthSegments);
70
70
  };
71
71
  const assertRadius = (radius, operation) => {
72
72
  if (!Number.isFinite(radius) || radius <= 0) {
@@ -107,11 +107,11 @@ export function resolveCircularSegments(radius, policy = {}, limits = {}) {
107
107
  if (resolution.circularSegments !== undefined)
108
108
  return resolution.circularSegments;
109
109
  const required = requiredFullCircleSegments(radius, resolution, sizing);
110
- if (required > resolution.maximumSegments) {
111
- throw new GeometryError("COMPLEXITY_LIMIT", `The requested physical curve tolerance requires ${required} segments, above the ${resolution.maximumSegments}-segment safety limit.`, {
110
+ if (required > resolution.maxSegments) {
111
+ throw new GeometryError("COMPLEXITY_LIMIT", `The requested physical curve tolerance requires ${required} segments, above the ${resolution.maxSegments}-segment safety limit.`, {
112
112
  operation,
113
113
  details: {
114
- maximumSegments: resolution.maximumSegments,
114
+ maxSegments: resolution.maxSegments,
115
115
  radius,
116
116
  requiredSegments: required,
117
117
  },
@@ -142,7 +142,7 @@ const checkedLeastCommonMultiple = (left, right, operation) => {
142
142
  * `alignTo` must be non-empty and contain only positive safe integers. Its checked least common
143
143
  * multiple defines the alignment grid. An exact `segments` value wins over
144
144
  * `resolution.circularSegments` and adaptive sampling, but is never rounded: it must already be
145
- * aligned and meet `minimumSegments`. Adaptive counts are rounded upward and fail with
145
+ * aligned and meet `minSegments`. Adaptive counts are rounded upward and fail with
146
146
  * `COMPLEXITY_LIMIT` when the aligned result exceeds the configured safety cap.
147
147
  *
148
148
  * @param radius - Positive circle radius in millimetres used for adaptive physical sampling.
@@ -176,9 +176,9 @@ export function resolveAlignedCircularSegments(radius, options) {
176
176
  }
177
177
  alignment = checkedLeastCommonMultiple(alignment, factor, operation);
178
178
  }
179
- const minimumSegments = options.minimumSegments ?? 3;
180
- if (!Number.isSafeInteger(minimumSegments) || minimumSegments < 3) {
181
- throw new GeometryError("INVALID_ARGUMENT", "minimumSegments must be a safe integer of at least three.", { operation, details: { minimumSegments } });
179
+ const minSegments = options.minSegments ?? 3;
180
+ if (!Number.isSafeInteger(minSegments) || minSegments < 3) {
181
+ throw new GeometryError("INVALID_ARGUMENT", "minSegments must be a safe integer of at least three.", { operation, details: { minSegments } });
182
182
  }
183
183
  const resolution = options.segments === undefined
184
184
  ? resolveGeometryResolution(options.resolution, options.limits)
@@ -187,10 +187,10 @@ export function resolveAlignedCircularSegments(radius, options) {
187
187
  }, options.limits);
188
188
  if (resolution.circularSegments !== undefined) {
189
189
  const exactSegments = resolution.circularSegments;
190
- if (exactSegments < minimumSegments || exactSegments % alignment !== 0) {
191
- throw new GeometryError("INVALID_ARGUMENT", "The exact segment count must meet minimumSegments and every alignTo factor.", {
190
+ if (exactSegments < minSegments || exactSegments % alignment !== 0) {
191
+ throw new GeometryError("INVALID_ARGUMENT", "The exact segment count must meet minSegments and every alignTo factor.", {
192
192
  operation,
193
- details: { alignment, exactSegments, minimumSegments },
193
+ details: { alignment, exactSegments, minSegments },
194
194
  });
195
195
  }
196
196
  return exactSegments;
@@ -199,18 +199,18 @@ export function resolveAlignedCircularSegments(radius, options) {
199
199
  ...resolution,
200
200
  sizing: options.sizing ?? "vertex",
201
201
  }, options.limits);
202
- const requiredSegments = Math.max(baseSegments, minimumSegments);
202
+ const requiredSegments = Math.max(baseSegments, minSegments);
203
203
  const multiplier = Math.ceil(requiredSegments / alignment);
204
204
  if (!Number.isSafeInteger(multiplier) || multiplier > Number.MAX_SAFE_INTEGER / alignment) {
205
205
  throw new GeometryError("COMPLEXITY_LIMIT", "The aligned segment count exceeds safe integer complexity.", { operation, details: { alignment, requiredSegments } });
206
206
  }
207
207
  const alignedSegments = multiplier * alignment;
208
- if (alignedSegments > resolution.maximumSegments) {
208
+ if (alignedSegments > resolution.maxSegments) {
209
209
  throw new GeometryError("COMPLEXITY_LIMIT", "Aligned circular tessellation exceeds the configured segment safety limit.", {
210
210
  operation,
211
211
  details: {
212
212
  alignment,
213
- maximumSegments: resolution.maximumSegments,
213
+ maxSegments: resolution.maxSegments,
214
214
  requiredSegments,
215
215
  segments: alignedSegments,
216
216
  },
@@ -225,7 +225,7 @@ export function resolveAlignedCircularSegments(radius, options) {
225
225
  * the reusable BOSL2-style convention while retaining at least one segment.
226
226
  *
227
227
  * @param radius - Arc radius in millimetres.
228
- * @param angleDegrees - Non-zero signed sweep angle no greater than 360 degrees in magnitude.
228
+ * @param angle - Non-zero signed sweep angle no greater than 360 degrees in magnitude.
229
229
  * @param policy - Optional operation-level policy over the active model scope.
230
230
  * @returns Segment count for the requested arc span.
231
231
  * @throws {@link GeometryError} when radius, angle, or resolution policy is invalid, or the
@@ -237,12 +237,12 @@ export function resolveAlignedCircularSegments(radius, options) {
237
237
  * const quarterTurnSegments = resolveArcSegments(10, 90);
238
238
  * ```
239
239
  */
240
- export function resolveArcSegments(radius, angleDegrees, policy = {}, limits = {}) {
240
+ export function resolveArcSegments(radius, angle, policy = {}, limits = {}) {
241
241
  const operation = "resolveArcSegments";
242
242
  assertRadius(radius, operation);
243
- if (!Number.isFinite(angleDegrees) || angleDegrees === 0 || Math.abs(angleDegrees) > 360) {
244
- throw new GeometryError("INVALID_ARGUMENT", "angleDegrees must be finite, non-zero, and no greater than 360 degrees in magnitude.", { operation, details: { angleDegrees } });
243
+ if (!Number.isFinite(angle) || angle === 0 || Math.abs(angle) > 360) {
244
+ throw new GeometryError("INVALID_ARGUMENT", "angle must be finite, non-zero, and no greater than 360 degrees in magnitude.", { operation, details: { angle } });
245
245
  }
246
- const ratio = Math.abs(angleDegrees) / 360;
246
+ const ratio = Math.abs(angle) / 360;
247
247
  return Math.max(1, Math.ceil(resolveCircularSegments(radius, policy, limits) * ratio));
248
248
  }