@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
@@ -3,6 +3,7 @@ import { triangulateContour } from "../loft/loft.js";
3
3
  import { validateTriangleMesh } from "../mesh/mesh.js";
4
4
  import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "../model-limits.js";
5
5
  import { writeMeshVertex } from "../numeric.js";
6
+ import { path2InputData } from "../paths/path-value.js";
6
7
  import { resolveCircularPrimitiveSegments } from "../primitive-resolution.js";
7
8
  import { normalizeContour } from "../regions.js";
8
9
  import { assertSamplingCount } from "../sampling-limits.js";
@@ -16,6 +17,7 @@ const AXIS_EPSILON = 1e-10;
16
17
  * vertices and zero-area quads. Profile edges that lie entirely on the axis
17
18
  * collapse to the solid's interior and are intentionally omitted.
18
19
  * Profile coordinates must fit finite Float32 mesh storage.
20
+ * Path2 profiles must be closed; raw point collections have an implicit closing edge.
19
21
  *
20
22
  * @param profile - Closed CCW `[radius, z]` profile without a duplicated seam point.
21
23
  * @param options - Optional physical or exact circumferential sampling controls. Defaults to `{}`.
@@ -24,28 +26,31 @@ const AXIS_EPSILON = 1e-10;
24
26
  * @example Partial revolution with end caps
25
27
  * ```ts
26
28
  * // Each point is [radius, Z]; the profile seam is implicit.
27
- * revolveMesh([[0, 0], [12, 0], [8, 20], [0, 20]], { revolveDegrees: 270 });
29
+ * revolveMesh([[0, 0], [12, 0], [8, 20], [0, 20]], { degrees: 270 });
28
30
  * ```
29
31
  */
30
- export const revolveMesh = (profile, options = {}) => {
32
+ export const revolveMesh = (input, options = {}) => {
31
33
  if (typeof options !== "object" || options === null || Array.isArray(options))
32
34
  throw new GeometryError("INVALID_ARGUMENT", "Revolution options require an object.", {
33
35
  operation: "revolveMesh",
34
36
  });
35
- const degrees = options.revolveDegrees ?? 360;
37
+ const degrees = options.degrees ?? 360;
36
38
  if (!Number.isFinite(degrees) || degrees <= 0 || degrees > 360)
37
- throw new GeometryError("INVALID_ARGUMENT", "revolveDegrees must be in (0, 360].", {
39
+ throw new GeometryError("INVALID_ARGUMENT", "degrees must be in (0, 360].", {
38
40
  operation: "revolveMesh",
39
41
  });
42
+ const limits = resolveModelingLimits(options.limits);
43
+ let profile = path2InputData(input, true, { maxPathPoints: limits.maxProfilePoints }).points;
40
44
  if (profile.length < 3) {
41
- throw new Error("A revolved profile needs at least three points.");
45
+ throw new GeometryError("DEGENERATE_GEOMETRY", "A revolved profile needs at least three points.", {
46
+ operation: "revolveMesh",
47
+ });
42
48
  }
43
- const limits = resolveModelingLimits(options.limits);
44
49
  assertSamplingCount(profile.length, "revolveMesh", limits.maxProfilePoints);
45
50
  let maximumRadius = 0;
46
51
  for (const [radius, z] of profile) {
47
52
  if (!Number.isFinite(radius) || !Number.isFinite(z) || radius < 0) {
48
- throw new Error("Revolved profile coordinates must be finite and radii non-negative.");
53
+ throw new GeometryError(Number.isFinite(radius) && Number.isFinite(z) ? "INVALID_ARGUMENT" : "NON_FINITE_VALUE", "Revolved profile coordinates must be finite and radii non-negative.", { operation: "revolveMesh" });
49
54
  }
50
55
  if (!Number.isFinite(Math.fround(radius)) || !Number.isFinite(Math.fround(z))) {
51
56
  throw new GeometryError("NON_FINITE_VALUE", "Revolved profile coordinates exceed finite Float32 mesh storage.", { operation: "revolveMesh" });
@@ -1,21 +1,12 @@
1
1
  import { GeometryError } from "./errors.js";
2
- import { unionPolygonGeometry } from "./polygon-clipping.js";
3
- import { normalizeRegion } from "./regions.js";
2
+ import { path2InputData } from "./paths/path-value.js";
3
+ import { clippingRing, regionFromMultiPolygon, unionPolygonGeometry } from "./polygon-clipping.js";
4
4
  import { resolveCircularSegments } from "./resolution.js";
5
5
  import { assertSamplingCount, resolveGeometrySamplingLimits, } from "./sampling-limits.js";
6
6
  import { resolveGeometryTolerance } from "./tolerance.js";
7
7
  const DEFAULT_MITER_LIMIT = 4;
8
8
  function fail(message) {
9
- throw new GeometryError("INVALID_ARGUMENT", message, { operation: "strokePathRegion" });
10
- }
11
- function ring(points) {
12
- const result = points.map(([x, y]) => [x, y]);
13
- const first = result[0];
14
- const last = result.at(-1);
15
- if (first !== undefined && last !== undefined && (first[0] !== last[0] || first[1] !== last[1])) {
16
- result.push([...first]);
17
- }
18
- return result;
9
+ throw new GeometryError("INVALID_ARGUMENT", message, { operation: "strokeRegionData" });
19
10
  }
20
11
  function ellipsePoints(center, radius, segments) {
21
12
  return Array.from({ length: segments }, (_, index) => {
@@ -76,8 +67,9 @@ function deduplicatePath(path, closed, width) {
76
67
  return Object.freeze(points);
77
68
  }
78
69
  /** @internal Bounded CCW stroke primitives shared by native sections and pure clipping. */
79
- export function strokePathContours(path, options, exactCircularSegments) {
80
- const closed = options.closed ?? false;
70
+ export function strokePathContours(input, options, exactCircularSegments) {
71
+ const limits = resolveGeometrySamplingLimits(options.limits);
72
+ const { points: path, closed } = path2InputData(input, options.closed, limits);
81
73
  const cap = options.cap ?? "butt";
82
74
  const join = options.join ?? "miter";
83
75
  if (typeof closed !== "boolean")
@@ -97,9 +89,8 @@ export function strokePathContours(path, options, exactCircularSegments) {
97
89
  ? resolveCircularSegments(options.width / 2, options.resolution, options.limits)
98
90
  : 3);
99
91
  const half = options.width / 2;
100
- const limits = resolveGeometrySamplingLimits(options.limits);
101
- assertSamplingCount(path.length, "strokePathRegion", limits.maxPathPoints);
102
- assertSamplingCount(circularSegments, "strokePathRegion", limits.maxCircularSegments);
92
+ assertSamplingCount(path.length, "strokeRegionData", limits.maxPathPoints);
93
+ assertSamplingCount(circularSegments, "strokeRegionData", limits.maxCircularSegments);
103
94
  const normalizedPath = deduplicatePath(path, closed, options.width);
104
95
  if (normalizedPath.length < (closed ? 3 : 2))
105
96
  return [];
@@ -109,7 +100,7 @@ export function strokePathContours(path, options, exactCircularSegments) {
109
100
  const constructionVertices = segmentCount * 4 +
110
101
  joinCount * (join === "round" ? circularSegments : join === "miter" ? 4 : 3) +
111
102
  (!closed && cap === "round" ? 2 * circularSegments : 0);
112
- assertSamplingCount(constructionVertices, "strokePathRegion", limits.maxProfilePoints);
103
+ assertSamplingCount(constructionVertices, "strokeRegionData", limits.maxProfilePoints);
113
104
  for (let index = 0; index < segmentCount; index += 1) {
114
105
  let start = normalizedPath[index];
115
106
  let end = normalizedPath[(index + 1) % normalizedPath.length];
@@ -158,17 +149,11 @@ export function strokePathMultiPolygon(path, options, circularSegments) {
158
149
  const contours = strokePathContours(path, options, circularSegments);
159
150
  if (contours.length === 0)
160
151
  return [];
161
- const result = unionPolygonGeometry(contours.map((contour) => [ring(contour)]));
152
+ const result = unionPolygonGeometry(contours.map((contour) => [clippingRing(contour)]));
162
153
  const outputVertices = result.reduce((count, polygon) => count + polygon.reduce((total, contour) => total + Math.max(0, contour.length - 1), 0), 0);
163
- assertSamplingCount(outputVertices, "strokePathRegion", resolveGeometrySamplingLimits(options.limits).maxProfilePoints);
154
+ assertSamplingCount(outputVertices, "strokeRegionData", resolveGeometrySamplingLimits(options.limits).maxProfilePoints);
164
155
  return result;
165
156
  }
166
- function regionFromMultiPolygon(value) {
167
- return normalizeRegion(value.map((polygon) => ({
168
- outer: polygon[0].slice(0, -1).map(([x, y]) => [x, y]),
169
- holes: polygon.slice(1).map((hole) => hole.slice(0, -1).map(([x, y]) => [x, y])),
170
- })));
171
- }
172
157
  /**
173
158
  * Converts a sampled millimetre path into the filled region covered by a centered stroke.
174
159
  *
@@ -177,7 +162,7 @@ function regionFromMultiPolygon(value) {
177
162
  * resolution. Bevels fill the outer corner triangle; miters extend the outer edges to their
178
163
  * intersection, falling back to bevels above SVG's default miter limit of 4.
179
164
  */
180
- export function strokePathRegion(path, options) {
165
+ export function strokeRegionData(path, options) {
181
166
  const result = strokePathMultiPolygon(path, options);
182
167
  if (result.length === 0)
183
168
  return fail("The sampled stroke path has no visible length.");
@@ -1,16 +1,8 @@
1
- import { polygonClipping, unionPolygonGeometry, xorPolygonGeometry } from "../polygon-clipping.js";
2
- import { normalizeRegion, signedContourArea } from "../regions.js";
1
+ import { clippingRing, polygonClipping, regionFromMultiPolygon, unionPolygonGeometry, xorPolygonGeometry, } from "../polygon-clipping.js";
2
+ import { signedContourArea } from "../regions.js";
3
3
  import { assertSamplingCount } from "../sampling-limits.js";
4
4
  /** Private clipping stage with the selected execution's immutable allocation ceiling. */
5
- export function createBoundedSvgClipping(maximumVertices) {
6
- function ring(points) {
7
- const result = points.map(([x, y]) => [x, y]);
8
- const first = result[0];
9
- const last = result.at(-1);
10
- if (first !== undefined && last !== undefined && (first[0] !== last[0] || first[1] !== last[1]))
11
- result.push([...first]);
12
- return result;
13
- }
5
+ export function createBoundedSvgClipping(maxVertices) {
14
6
  function ringVertexCount(value) {
15
7
  const first = value[0];
16
8
  const last = value.at(-1);
@@ -21,7 +13,7 @@ export function createBoundedSvgClipping(maximumVertices) {
21
13
  return value.reduce((total, polygon) => total + polygon.reduce((polygonTotal, path) => polygonTotal + ringVertexCount(path), 0), 0);
22
14
  }
23
15
  function assertExpandedVertexCount(vertices, stage) {
24
- assertSamplingCount(vertices, "preflightSvgRegion", maximumVertices, `SVG ${stage} exceeds ${maximumVertices} expanded vertices (requires ${vertices}).`);
16
+ assertSamplingCount(vertices, "preflightSvgRegion", maxVertices, `SVG ${stage} exceeds ${maxVertices} expanded vertices (requires ${vertices}).`);
25
17
  }
26
18
  function boundedMultiPolygon(value, stage) {
27
19
  assertExpandedVertexCount(multiPolygonVertexCount(value), stage);
@@ -136,16 +128,16 @@ export function createBoundedSvgClipping(maximumVertices) {
136
128
  .map((subpath) => subpath.points);
137
129
  if (rings.length === 0)
138
130
  return [];
139
- const polygons = rings.map((points) => [ring(points)]);
131
+ const polygons = rings.map((points) => [clippingRing(points)]);
140
132
  if (fillRule === "evenodd") {
141
133
  return boundedXor(polygons.map((polygon) => [polygon]), "even-odd fill output");
142
134
  }
143
135
  const positive = rings
144
136
  .filter((points) => signedContourArea(points) >= 0)
145
- .map((points) => [ring(points)]);
137
+ .map((points) => [clippingRing(points)]);
146
138
  const negative = rings
147
139
  .filter((points) => signedContourArea(points) < 0)
148
- .map((points) => [ring(points)]);
140
+ .map((points) => [clippingRing(points)]);
149
141
  if (positive.length === 0)
150
142
  return boundedUnion([negative], "negative fill output");
151
143
  if (negative.length === 0)
@@ -155,12 +147,6 @@ export function createBoundedSvgClipping(maximumVertices) {
155
147
  // precisely where positive and negative nonzero winding counts match.
156
148
  return differingCoverage(positive, negative);
157
149
  }
158
- function regionFromMultiPolygon(value) {
159
- return normalizeRegion(value.map((polygon) => ({
160
- outer: polygon[0].slice(0, -1).map(([x, y]) => [x, y]),
161
- holes: polygon.slice(1).map((hole) => hole.slice(0, -1).map(([x, y]) => [x, y])),
162
- })));
163
- }
164
150
  return {
165
151
  assertExpandedVertexCount,
166
152
  boundedMultiPolygon,
@@ -429,7 +429,7 @@ function measureSvgRegion(region) {
429
429
  let minEdgeLength = Number.POSITIVE_INFINITY;
430
430
  let minX = Number.POSITIVE_INFINITY;
431
431
  let minY = Number.POSITIVE_INFINITY;
432
- let shortEdges = 0;
432
+ let shortEdgeCount = 0;
433
433
  let vertices = 0;
434
434
  for (const polygon of region) {
435
435
  for (const loop of [polygon.outer, ...polygon.holes]) {
@@ -443,7 +443,7 @@ function measureSvgRegion(region) {
443
443
  for (const length of loopEdgeLengths(loop)) {
444
444
  minEdgeLength = Math.min(minEdgeLength, length);
445
445
  if (length < SHORT_EDGE_LENGTH_MM)
446
- shortEdges += 1;
446
+ shortEdgeCount += 1;
447
447
  }
448
448
  }
449
449
  }
@@ -456,13 +456,13 @@ function measureSvgRegion(region) {
456
456
  return Object.freeze({
457
457
  area: regionArea(region),
458
458
  bounds,
459
- components: region.length,
460
- contours: region.length + holes,
461
- holes,
459
+ componentCount: region.length,
460
+ contourCount: region.length + holes,
461
+ holeCount: holes,
462
462
  minEdgeLength: Number.isFinite(minEdgeLength) ? minEdgeLength : null,
463
- shortEdges,
464
- tinyIslands: region.filter((polygon) => polygonArea(polygon) < TINY_ISLAND_AREA_MM2).length,
465
- vertices,
463
+ shortEdgeCount,
464
+ tinyIslandCount: region.filter((polygon) => polygonArea(polygon) < TINY_ISLAND_AREA_MM2).length,
465
+ vertexCount: vertices,
466
466
  });
467
467
  }
468
468
  /**
@@ -498,10 +498,10 @@ function createSvgRegionPreflight(svg, options = {}) {
498
498
  const stack = [];
499
499
  const geometry = [];
500
500
  let elementCount = 0;
501
- let emptyElements = 0;
501
+ let emptyElementCount = 0;
502
502
  let expandedGeometryVertices = 0;
503
- let implicitFilledClosures = 0;
504
- let invisibleElements = 0;
503
+ let implicitFilledClosureCount = 0;
504
+ let invisibleElementCount = 0;
505
505
  let nodeCount = 0;
506
506
  let rootSeen = false;
507
507
  let strokeConstructionVertices = 0;
@@ -582,9 +582,9 @@ function createSvgRegionPreflight(svg, options = {}) {
582
582
  const paintedStroke = isPainted(paint.stroke, paint.strokeOpacity) && paint.strokeWidth > 0;
583
583
  const elementGeometry = [];
584
584
  if (!paintedFill && !paintedStroke)
585
- invisibleElements += 1;
585
+ invisibleElementCount += 1;
586
586
  if (paintedFill) {
587
- implicitFilledClosures += subpaths.filter((subpath) => !subpath.closed && subpath.points.length >= 3).length;
587
+ implicitFilledClosureCount += subpaths.filter((subpath) => !subpath.closed && subpath.points.length >= 3).length;
588
588
  appendGeometry(elementGeometry, fillGeometry(subpaths, paint.fillRule), "element fill output");
589
589
  }
590
590
  if (paintedStroke) {
@@ -606,7 +606,7 @@ function createSvgRegionPreflight(svg, options = {}) {
606
606
  }
607
607
  }
608
608
  if ((paintedFill || paintedStroke) && elementGeometry.every((value) => value.length === 0)) {
609
- emptyElements += 1;
609
+ emptyElementCount += 1;
610
610
  }
611
611
  geometry.push(...elementGeometry);
612
612
  }
@@ -628,17 +628,17 @@ function createSvgRegionPreflight(svg, options = {}) {
628
628
  geometry: measureSvgRegion(region),
629
629
  region,
630
630
  repairs: Object.freeze({
631
- emptyElements,
632
- implicitFilledClosures,
633
- invisibleElements,
634
- removedDuplicateVertices: budget.removedDuplicateCount,
635
- removedSeamVertices: budget.removedSeamCount,
631
+ emptyElementCount,
632
+ implicitFilledClosureCount,
633
+ invisibleElementCount,
634
+ removedDuplicateVertexCount: budget.removedDuplicateCount,
635
+ removedSeamVertexCount: budget.removedSeamCount,
636
636
  }),
637
637
  source: Object.freeze({
638
- bytes,
639
- elements: elementCount,
640
- emittedVertices: budget.emittedCount,
641
- parsedVertices: budget.parsedCount,
638
+ byteCount: bytes,
639
+ elementCount,
640
+ emittedVertexCount: budget.emittedCount,
641
+ parsedVertexCount: budget.parsedCount,
642
642
  }),
643
643
  });
644
644
  }
@@ -1,4 +1,5 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { vector2Data } from "../math/vector-value.js";
2
3
  /** @internal Validates local scales before any manufacturing buffer allocation. */
3
4
  export function resolveSweepScales(scale, stationCount) {
4
5
  const fail = () => {
@@ -10,14 +11,14 @@ export function resolveSweepScales(scale, stationCount) {
10
11
  fail();
11
12
  return [value, value];
12
13
  }
13
- if (!Array.isArray(value) ||
14
- value.length !== 2 ||
15
- !value.every((n) => typeof n === "number" && Number.isFinite(n) && n > 0))
14
+ const coordinates = vector2Data(value);
15
+ if (!coordinates.every((n) => typeof n === "number" && Number.isFinite(n) && n > 0))
16
16
  fail();
17
- return value;
17
+ return coordinates;
18
18
  };
19
19
  if (scale === undefined ||
20
20
  typeof scale === "number" ||
21
+ (typeof scale === "object" && scale !== null && "toArray" in scale) ||
21
22
  (Array.isArray(scale) && typeof scale[0] === "number")) {
22
23
  const value = pair(scale ?? 1);
23
24
  return Array.from({ length: stationCount }, () => value);
@@ -14,7 +14,7 @@ export function validateSweepOptions(options) {
14
14
  "limits",
15
15
  "orientation",
16
16
  "resolution",
17
- "twistDegrees",
17
+ "twist",
18
18
  "twistBy",
19
19
  "scale",
20
20
  "seamProfileOffset",
@@ -27,8 +27,8 @@ export function validateSweepOptions(options) {
27
27
  options.twistBy !== "length" &&
28
28
  options.twistBy !== "stations")
29
29
  fail("Sweep twistBy must be length or stations.");
30
- if (!Number.isFinite(options.twistDegrees ?? 0))
31
- throw new GeometryError("NON_FINITE_VALUE", "Sweep twistDegrees must be finite.", {
30
+ if (!Number.isFinite(options.twist ?? 0))
31
+ throw new GeometryError("NON_FINITE_VALUE", "Sweep twist must be finite.", {
32
32
  operation: "sweep",
33
33
  });
34
34
  const policy = options.orientation;
@@ -58,8 +58,8 @@ export function validateSweepOptions(options) {
58
58
  if (Object.keys(policy).some((key) => !keys.includes(key)))
59
59
  fail("Unsupported field for the selected sweep orientation.");
60
60
  }
61
- function directedNormal(value, tangent, label) {
62
- validateSweepNormal(value, "sweep");
61
+ function directedNormal(input, tangent, label) {
62
+ const value = validateSweepNormal(input, "sweep");
63
63
  const maximum = Math.max(...value.map(Math.abs));
64
64
  const unit = normalize3([value[0] / maximum, value[1] / maximum, value[2] / maximum]);
65
65
  const projected = projectOntoPlane3(unit, tangent);
@@ -65,14 +65,14 @@ function frameRotation(from, to) {
65
65
  export function planSweepStations(contours, path, scales, options, frames) {
66
66
  const closed = options.closed ?? false;
67
67
  const segmentCount = closed ? path.length : path.length - 1;
68
- const twist = ((options.twistDegrees ?? 0) / 180) * Math.PI;
69
- if (!Number.isFinite(twist))
70
- throw new GeometryError("NON_FINITE_VALUE", "Sweep twistDegrees must be finite.", {
68
+ const twistRadians = ((options.twist ?? 0) / 180) * Math.PI;
69
+ if (!Number.isFinite(twistRadians))
70
+ throw new GeometryError("NON_FINITE_VALUE", "Sweep twist must be finite.", {
71
71
  operation: "sweep",
72
72
  });
73
73
  const intervals = [];
74
74
  const progress = sweepProgress(path, options);
75
- if (twist === 0)
75
+ if (twistRadians === 0)
76
76
  return { intervals: Array(segmentCount).fill(1), stationCount: path.length, progress };
77
77
  const resolution = resolveGeometryResolution(options.resolution, options.limits);
78
78
  const limits = resolveGeometrySamplingLimits(options.limits);
@@ -92,7 +92,7 @@ export function planSweepStations(contours, path, scales, options, frames) {
92
92
  let stationCount = closed ? 0 : 1;
93
93
  for (let i = 0; i < segmentCount; i++) {
94
94
  const next = (i + 1) % path.length;
95
- const twistStep = Math.abs(twist * (progress[i + 1] - progress[i]));
95
+ const twistStep = Math.abs(twistRadians * (progress[i + 1] - progress[i]));
96
96
  const frameAngle = frames === undefined ? 0 : frameRotation(frames[i], frames[next]).angle;
97
97
  const angle = frameAngle + twistStep;
98
98
  const maximumScale = Math.max(...scales[i], ...scales[next]);
@@ -104,9 +104,9 @@ export function planSweepStations(contours, path, scales, options, frames) {
104
104
  const a = curvature / 8, b = (edgeLength * (maximumScale * angle + scaleChange)) / 4;
105
105
  const requiredAngular = resolution.circularSegments === undefined
106
106
  ? Math.max(1, Math.ceil((b + Math.hypot(b, 2 * Math.sqrt(a * resolution.maxChordError))) /
107
- (2 * resolution.maxChordError)), Math.ceil((resolution.minimumSegments * angle) / (2 * Math.PI)))
107
+ (2 * resolution.maxChordError)), Math.ceil((resolution.minSegments * angle) / (2 * Math.PI)))
108
108
  : Math.max(1, Math.ceil((resolution.circularSegments * angle) / (2 * Math.PI)));
109
- const allowedAngular = Math.max(1, scaleChange === 0 ? 0 : resolution.maximumSegments, Math.ceil((resolution.maximumSegments * angle) / (2 * Math.PI)));
109
+ const allowedAngular = Math.max(1, scaleChange === 0 ? 0 : resolution.maxSegments, Math.ceil((resolution.maxSegments * angle) / (2 * Math.PI)));
110
110
  if (requiredAngular > allowedAngular)
111
111
  throw new GeometryError("COMPLEXITY_LIMIT", `Sweep surface refinement requires ${requiredAngular} intervals; the selected circular ceiling allows ${allowedAngular}.`, {
112
112
  operation: "sweep",
@@ -126,7 +126,7 @@ export function planSweepStations(contours, path, scales, options, frames) {
126
126
  }
127
127
  /** Inserts twist samples without calling authored guides again or changing original station meaning. */
128
128
  export function refineSweepStations(path, scales, frames, options, plan) {
129
- const twist = ((options.twistDegrees ?? 0) / 180) * Math.PI;
129
+ const twistRadians = ((options.twist ?? 0) / 180) * Math.PI;
130
130
  const segmentCount = plan.intervals.length;
131
131
  const points = [], sampledScales = [], sampledFrames = [], twists = [];
132
132
  for (let i = 0; i < segmentCount; i++) {
@@ -148,14 +148,14 @@ export function refineSweepStations(path, scales, frames, options, plan) {
148
148
  binormal: rotateAroundAxis3Radians(frames[i].binormal, rotation.axis, rotation.angle * amount),
149
149
  tangent: rotateAroundAxis3Radians(frames[i].tangent, rotation.axis, rotation.angle * amount),
150
150
  });
151
- twists.push(twist * (plan.progress[i] + (plan.progress[i + 1] - plan.progress[i]) * amount));
151
+ twists.push(twistRadians * (plan.progress[i] + (plan.progress[i + 1] - plan.progress[i]) * amount));
152
152
  }
153
153
  }
154
154
  if (options.closed !== true) {
155
155
  points.push(path.at(-1));
156
156
  sampledScales.push(scales.at(-1));
157
157
  sampledFrames.push(frames.at(-1));
158
- twists.push(twist);
158
+ twists.push(twistRadians);
159
159
  }
160
160
  return { path: points, scales: sampledScales, frames: sampledFrames, twists };
161
161
  }
@@ -20,9 +20,9 @@ export const buildClosedSweepMesh = (profile, path, options = {}) => {
20
20
  operation,
21
21
  });
22
22
  }
23
- const twistRadians = ((options.twistDegrees ?? 0) / 180) * Math.PI;
23
+ const twistRadians = ((options.twist ?? 0) / 180) * Math.PI;
24
24
  if (!Number.isFinite(twistRadians)) {
25
- throw new GeometryError("NON_FINITE_VALUE", "Sweep twistDegrees must be finite.", {
25
+ throw new GeometryError("NON_FINITE_VALUE", "Sweep twist must be finite.", {
26
26
  operation,
27
27
  });
28
28
  }
@@ -1,4 +1,6 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { resolveModelingLimits } from "../model-limits.js";
3
+ import { path2InputData, path3InputData, } from "../paths/path-value.js";
2
4
  import { validateSweepOptions } from "./orientation.js";
3
5
  import { buildClosedSweepMesh } from "./sweep-closed.js";
4
6
  import { buildOpenSweepMesh } from "./sweep-open.js";
@@ -15,12 +17,16 @@ import { buildOpenSweepMesh } from "./sweep-open.js";
15
17
  */
16
18
  export function sweepMesh(profile, path, options = {}) {
17
19
  validateSweepOptions(options);
18
- if (options.closed === true) {
19
- return buildClosedSweepMesh(profile, path, options);
20
+ const limits = resolveModelingLimits(options.limits);
21
+ const outline = path2InputData(profile, true, { maxPathPoints: limits.maxProfilePoints }).points;
22
+ const data = path3InputData(path, options.closed, limits);
23
+ const selected = { ...options, closed: data.closed };
24
+ if (data.closed) {
25
+ return buildClosedSweepMesh(outline, data.points, selected);
20
26
  }
21
27
  if ((options.seamProfileOffset ?? 0) !== 0)
22
28
  throw new GeometryError("INVALID_ARGUMENT", "A seamProfileOffset requires a closed path.", {
23
29
  operation: "sweep",
24
30
  });
25
- return buildOpenSweepMesh(profile, path, options);
31
+ return buildOpenSweepMesh(outline, data.points, selected);
26
32
  }
@@ -13,7 +13,7 @@ export const buildOpenSweepMesh = (profile, path, options = {}) => {
13
13
  path = normalizeSweepPath(path, false, operation, options.limits);
14
14
  assertSweepAllocation(path.length, profile.length, false, operation, options.limits);
15
15
  let scales = resolveSweepScales(options.scale, path.length);
16
- const twistRadians = ((options.twistDegrees ?? 0) / 180) * Math.PI;
16
+ const twistRadians = ((options.twist ?? 0) / 180) * Math.PI;
17
17
  if (twistRadians !== 0) {
18
18
  const plan = planSweepStations([profile], path, scales, options);
19
19
  assertSweepAllocation(plan.stationCount, profile.length, false, operation, options.limits);
@@ -1,4 +1,5 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { vector3Data } from "../math/vector-value.js";
2
3
  import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "../model-limits.js";
3
4
  import { writeMeshVertex } from "../numeric.js";
4
5
  import { normalizeContour } from "../regions.js";
@@ -97,13 +98,8 @@ export function writeSweepVertex(positions, offset, point, operation) {
97
98
  writeMeshVertex(positions, offset, point, operation);
98
99
  }
99
100
  /** @internal Checks user-provided orientation controls before vector normalization. */
100
- export function validateSweepNormal(normal, operation) {
101
- const hasArrayShape = Array.isArray(normal);
102
- if (!hasArrayShape || normal.length !== 3) {
103
- throw new GeometryError("INVALID_ARGUMENT", "Sweep normals must be exact XYZ tuples.", {
104
- operation,
105
- });
106
- }
101
+ export function validateSweepNormal(input, operation) {
102
+ const normal = vector3Data(input);
107
103
  if (![normal[0], normal[1], normal[2]].every(Number.isFinite)) {
108
104
  throw new GeometryError("NON_FINITE_VALUE", "Sweep normal coordinates must be finite XYZ values.", { operation });
109
105
  }
@@ -112,4 +108,5 @@ export function validateSweepNormal(normal, operation) {
112
108
  operation,
113
109
  });
114
110
  }
111
+ return normal;
115
112
  }
@@ -3,35 +3,28 @@ import { normalizeContour, normalizeRegion, signedContourArea } from "./regions.
3
3
  import { readTransformMatrix } from "./transform-matrix.js";
4
4
  import { embedTransform2 } from "./transform2.js";
5
5
  import { applyValidatedTransformPoint3, validateTransform3 } from "./transform3.js";
6
- /** Applies an affine transform to a 3D path without mutating its points. */
6
+ /** Internal owned coordinates for a Path3 result; no mutable coordinates escape the path value. */
7
7
  export function transformPath3(path, placement) {
8
8
  const transform = readTransformMatrix(placement, 3);
9
9
  validateTransform3(transform);
10
- return Object.freeze(path.map((point) => Object.freeze(applyValidatedTransformPoint3(transform, point))));
10
+ return path.map((point) => applyValidatedTransformPoint3(transform, point));
11
11
  }
12
12
  const transformPoint2 = (point, transform) => {
13
13
  const values = vector2Data(point);
14
14
  const transformed = applyValidatedTransformPoint3(transform, [values[0], values[1], 0]);
15
- return Object.freeze([transformed[0], transformed[1]]);
15
+ return [transformed[0], transformed[1]];
16
16
  };
17
- const transformPlanarPath = (path, transform) => Object.freeze(path.map((point) => transformPoint2(point, transform)));
18
- /** Applies a canonical affine XY transform to a 2D path without changing point order. */
17
+ const transformPlanarPath = (path, transform) => Object.freeze(path.map((point) => Object.freeze(transformPoint2(point, transform))));
18
+ /** Internal owned XY coordinates preserving path traversal; public interchange is frozen by Path2. */
19
19
  export function transformPath2(path, transform, tolerance = {}) {
20
- return transformPlanarPath(path, embedTransform2(readTransformMatrix(transform, 2), tolerance));
20
+ const matrix = embedTransform2(readTransformMatrix(transform, 2), tolerance);
21
+ return path.map((point) => transformPoint2(point, matrix));
21
22
  }
22
23
  const transformContourWithMatrix = (loop, transform, tolerance) => {
23
24
  const counterClockwise = signedContourArea(loop) > 0;
24
25
  const normalized = normalizeContour(loop, counterClockwise, tolerance);
25
26
  return normalizeContour(transformPlanarPath(normalized, transform), counterClockwise, tolerance);
26
27
  };
27
- /**
28
- * Applies a canonical affine XY transform to a closed loop and preserves its original winding.
29
- *
30
- * Reflections reverse the point order automatically through normalization.
31
- */
32
- export function transformContour(loop, transform, tolerance = {}) {
33
- return transformContourWithMatrix(loop, embedTransform2(readTransformMatrix(transform, 2), tolerance), tolerance);
34
- }
35
28
  /**
36
29
  * Transforms serialized polygon data with reflection-safe winding, without an engine.
37
30
  * Use Section.transform(placement) when authoring filled geometry; this utility serves pure data preparation.
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  /** Immutable modeling recipes and math values; the host owns geometry evaluation. @packageDocumentation */
2
2
  export { transform2, transform3, } from "./geometry/transform-chain.js";
3
3
  export { vector2, vector3, } from "./geometry/math/vector-value.js";
4
+ export { path2, path3, } from "./geometry/paths/path-value.js";
4
5
  export * from "./model/operations.js";
5
6
  export * from "./model/generation.js";
6
7
  export { immutableBuffer, immutableMesh } from "./model/immutable-buffer.js";
@@ -1,7 +1,7 @@
1
1
  import { GeometryError } from "../geometry/errors.js";
2
2
  // One protocol key lets locally bundled operation wrappers resolve the host's execution
3
3
  // without depending on package instances, class identity, or initializing a native runtime.
4
- const executionKey = Symbol.for("@metamesh/modeling/execution/6");
4
+ const executionKey = Symbol.for("@metamesh/modeling/execution/7");
5
5
  const bindings = globalThis;
6
6
  /** Internal host binding. Executable callbacks are synchronous and may not nest executions. */
7
7
  export function bindModelContext(context, build) {
@@ -10,7 +10,7 @@ export function bindModelContext(context, build) {
10
10
  operation: "build",
11
11
  });
12
12
  }
13
- bindings[executionKey] = { version: 6, context };
13
+ bindings[executionKey] = { version: 7, context };
14
14
  try {
15
15
  return build();
16
16
  }
@@ -31,5 +31,5 @@ export function currentModelContext(operation) {
31
31
  /** Reads an optional binding without initializing an engine or creating ambient authoring state. */
32
32
  export function activeModelContext() {
33
33
  const binding = bindings[executionKey];
34
- return binding?.version === 6 ? binding.context : undefined;
34
+ return binding?.version === 7 ? binding.context : undefined;
35
35
  }
@@ -1,7 +1,7 @@
1
1
  import { createSectionHandle, createSolidHandle } from "./shape-handles.js";
2
2
  // One realm protocol lets bundled authoring code declare recipes before a host is initialized.
3
3
  // The payload contains no native handles and the engine remains responsible for realization.
4
- const recipeKey = Symbol.for("@metamesh/modeling/recipe/6");
4
+ const recipeKey = Symbol.for("@metamesh/modeling/recipe/7");
5
5
  /** Reads private recipe metadata without requiring an execution context. */
6
6
  export const geometryRecipe = (value) => Object.getOwnPropertyDescriptor(value, recipeKey)?.value;
7
7
  /** Recognizes only opaque recipe handles issued by this engine. */