@metamesh/modeling 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (716) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +25 -10
  3. package/dist/api/engine.d.ts +11 -4
  4. package/dist/api/geometry.d.ts +345 -341
  5. package/dist/api/index.d.ts +262 -144
  6. package/dist/api/text.d.ts +3 -1
  7. package/dist/docs/guides/concepts.md +22 -7
  8. package/dist/docs/guides/fundamentals.md +8 -5
  9. package/dist/docs/guides/hosting.md +21 -11
  10. package/dist/docs/guides/recipes.md +42 -21
  11. package/dist/docs/manifest.json +710 -507
  12. package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
  13. package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
  14. package/dist/docs/reference/engine/GenerationOptions.md +1 -1
  15. package/dist/docs/reference/engine/GeometryResource.md +1 -1
  16. package/dist/docs/reference/engine/ModelDependencies.md +1 -1
  17. package/dist/docs/reference/engine/ModelEngine.md +1 -1
  18. package/dist/docs/reference/engine/ModelEngineOptions.md +4 -8
  19. package/dist/docs/reference/engine/ModelSession.md +1 -1
  20. package/dist/docs/reference/engine/ModelSnapshot.md +20 -9
  21. package/dist/docs/reference/engine/SessionOptions.md +1 -1
  22. package/dist/docs/reference/engine/SnapshotPart.md +2 -2
  23. package/dist/docs/reference/engine/categories/host-lifecycle.md +2 -2
  24. package/dist/docs/reference/engine/createModelEngine.md +3 -3
  25. package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
  26. package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
  27. package/dist/docs/reference/engine/validateModel.md +1 -1
  28. package/dist/docs/reference/engine.md +2 -2
  29. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
  30. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +4 -4
  31. package/dist/docs/reference/geometry/{Anchor3.md → Anchor3-type.md} +1 -1
  32. package/dist/docs/reference/geometry/ArcCurve2.md +5 -5
  33. package/dist/docs/reference/geometry/ArcCurve3.md +5 -5
  34. package/dist/docs/reference/geometry/{AttachTransformOptions.md → AttachOptions.md} +10 -5
  35. package/dist/docs/reference/geometry/AxisAngleRotation3.md +1 -1
  36. package/dist/docs/reference/geometry/Bounds2.md +1 -1
  37. package/dist/docs/reference/geometry/Bounds3.md +1 -1
  38. package/dist/docs/reference/geometry/BoundsFit2.md +1 -1
  39. package/dist/docs/reference/geometry/BoundsFit3.md +1 -1
  40. package/dist/docs/reference/geometry/BoundsFitOptions.md +1 -1
  41. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +1 -1
  42. package/dist/docs/reference/geometry/BoxAnchorFace.md +1 -1
  43. package/dist/docs/reference/geometry/BoxAnchorOptions.md +1 -1
  44. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  45. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  46. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  47. package/dist/docs/reference/geometry/BoxOptions.md +8 -8
  48. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +1 -1
  49. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +1 -1
  50. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  51. package/dist/docs/reference/geometry/CircleContourOptions.md +1 -1
  52. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
  53. package/dist/docs/reference/geometry/CircularResolutionOptions.md +7 -7
  54. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +1 -1
  55. package/dist/docs/reference/geometry/ClearanceHoleFit.md +1 -1
  56. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +1 -1
  57. package/dist/docs/reference/geometry/Contour.md +1 -1
  58. package/dist/docs/reference/geometry/ContourCurve.md +1 -1
  59. package/dist/docs/reference/geometry/ContourPoint.md +1 -1
  60. package/dist/docs/reference/geometry/ContourSegment.md +1 -1
  61. package/dist/docs/reference/geometry/CorrespondingComponent.md +1 -1
  62. package/dist/docs/reference/geometry/CorrespondingContour.md +1 -1
  63. package/dist/docs/reference/geometry/CorrespondingProfile.md +1 -1
  64. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +1 -1
  65. package/dist/docs/reference/geometry/CubicBezierCurve2.md +1 -1
  66. package/dist/docs/reference/geometry/CubicBezierCurve3.md +1 -1
  67. package/dist/docs/reference/geometry/Curve2.md +1 -1
  68. package/dist/docs/reference/geometry/Curve3.md +1 -1
  69. package/dist/docs/reference/geometry/CurveSamplingOptions.md +5 -3
  70. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +1 -1
  71. package/dist/docs/reference/geometry/CylinderAnchorFace.md +1 -1
  72. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +3 -3
  73. package/dist/docs/reference/geometry/CylinderOptions.md +3 -3
  74. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +3 -3
  75. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +1 -1
  76. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +1 -1
  77. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +3 -3
  78. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +1 -1
  79. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +1 -1
  80. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +1 -1
  81. package/dist/docs/reference/geometry/CylindricalGearSpec.md +6 -6
  82. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  83. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  84. package/dist/docs/reference/geometry/EllipseContourOptions.md +1 -1
  85. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  86. package/dist/docs/reference/geometry/ExtrudeOptions.md +6 -6
  87. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +5 -5
  88. package/dist/docs/reference/geometry/FittedTextLayout.md +1 -1
  89. package/dist/docs/reference/geometry/Frame3.md +1 -1
  90. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  91. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  92. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  93. package/dist/docs/reference/geometry/GeometryResolution.md +5 -5
  94. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +1 -1
  95. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  96. package/dist/docs/reference/geometry/GridPatternOptions.md +9 -3
  97. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
  98. package/dist/docs/reference/geometry/HeightfieldOptions.md +1 -1
  99. package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
  100. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +5 -5
  101. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +6 -6
  102. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +1 -1
  103. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +1 -1
  104. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +6 -6
  105. package/dist/docs/reference/geometry/LineCurve2.md +1 -1
  106. package/dist/docs/reference/geometry/LineCurve3.md +1 -1
  107. package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -5
  108. package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
  109. package/dist/docs/reference/geometry/LoftMeshStation.md +4 -4
  110. package/dist/docs/reference/geometry/LoftOptions.md +1 -1
  111. package/dist/docs/reference/geometry/LoftPlacement.md +1 -1
  112. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +1 -1
  113. package/dist/docs/reference/geometry/MatchProfilesOptions.md +1 -1
  114. package/dist/docs/reference/geometry/MetricFastenerSize.md +1 -1
  115. package/dist/docs/reference/geometry/MetricFastenerStandard.md +1 -1
  116. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +1 -1
  117. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +1 -1
  118. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  119. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
  120. package/dist/docs/reference/geometry/Path2-type.md +192 -0
  121. package/dist/docs/reference/geometry/Path2Data.md +14 -0
  122. package/dist/docs/reference/geometry/Path2Input.md +15 -0
  123. package/dist/docs/reference/geometry/Path3-type.md +192 -0
  124. package/dist/docs/reference/geometry/Path3Data.md +14 -0
  125. package/dist/docs/reference/geometry/Path3Input.md +15 -0
  126. package/dist/docs/reference/geometry/PathFrame.md +1 -1
  127. package/dist/docs/reference/geometry/PathLocation.md +65 -0
  128. package/dist/docs/reference/geometry/PathNormalGuide.md +4 -3
  129. package/dist/docs/reference/geometry/PathOptions.md +34 -0
  130. package/dist/docs/reference/geometry/PathPatternOptions.md +3 -3
  131. package/dist/docs/reference/geometry/PathPlacement.md +1 -1
  132. package/dist/docs/reference/geometry/PathResamplingOptions.md +80 -0
  133. package/dist/docs/reference/geometry/Pivot2Options.md +1 -1
  134. package/dist/docs/reference/geometry/Pivot3Options.md +1 -1
  135. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +1 -1
  136. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +22 -22
  137. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +1 -1
  138. package/dist/docs/reference/geometry/PlanarPatchQuality.md +1 -1
  139. package/dist/docs/reference/geometry/PolygonData.md +1 -1
  140. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +4 -4
  141. package/dist/docs/reference/geometry/PrimitiveAttachment.md +31 -0
  142. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +104 -0
  143. package/dist/docs/reference/geometry/PrintableThreadFit.md +1 -1
  144. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +1 -1
  145. package/dist/docs/reference/geometry/Profile.md +1 -1
  146. package/dist/docs/reference/geometry/ProfileComponent2.md +1 -1
  147. package/dist/docs/reference/geometry/ProfileContour2.md +1 -1
  148. package/dist/docs/reference/geometry/ProfileSpan2.md +2 -2
  149. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +1 -1
  150. package/dist/docs/reference/geometry/RackPitchDimensions.md +1 -1
  151. package/dist/docs/reference/geometry/RackPitchSpec.md +5 -5
  152. package/dist/docs/reference/geometry/RadialPatternOptions.md +17 -22
  153. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  154. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  155. package/dist/docs/reference/geometry/RectangleContourOptions.md +1 -1
  156. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +1 -1
  157. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +1 -1
  158. package/dist/docs/reference/geometry/RectangleProfileOptions.md +1 -1
  159. package/dist/docs/reference/geometry/RegionData.md +1 -1
  160. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
  161. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  162. package/dist/docs/reference/geometry/RevolveOptions.md +9 -4
  163. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  164. package/dist/docs/reference/geometry/RowLayoutOptions.md +1 -1
  165. package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
  166. package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
  167. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
  168. package/dist/docs/reference/geometry/SampledCurve2.md +1 -1
  169. package/dist/docs/reference/geometry/SampledCurve3.md +1 -1
  170. package/dist/docs/reference/geometry/SampledThreadHelices.md +3 -3
  171. package/dist/docs/reference/geometry/SideProfileCurve.md +1 -1
  172. package/dist/docs/reference/geometry/SideProfilePoint.md +1 -1
  173. package/dist/docs/reference/geometry/SideProfileSegment.md +1 -1
  174. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  175. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +3 -3
  176. package/dist/docs/reference/geometry/SphereOptions.md +3 -3
  177. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
  178. package/dist/docs/reference/geometry/StrokeCap.md +7 -0
  179. package/dist/docs/reference/geometry/StrokeJoin.md +7 -0
  180. package/dist/docs/reference/geometry/{StrokePathRegionOptions.md → StrokeOptions.md} +7 -7
  181. package/dist/docs/reference/geometry/SvgImportOptions.md +1 -1
  182. package/dist/docs/reference/geometry/SvgRegionPreflight.md +1 -1
  183. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +13 -13
  184. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +11 -11
  185. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +9 -9
  186. package/dist/docs/reference/geometry/SweepOptions.md +6 -6
  187. package/dist/docs/reference/geometry/SweepOrientation.md +7 -7
  188. package/dist/docs/reference/geometry/ThreadBevelOptions.md +1 -1
  189. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +5 -5
  190. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +1 -1
  191. package/dist/docs/reference/geometry/ThreadEndStyle.md +1 -1
  192. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +1 -1
  193. package/dist/docs/reference/geometry/ThreadHandedness.md +1 -1
  194. package/dist/docs/reference/geometry/ThreadHelixOptions.md +3 -3
  195. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
  196. package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
  197. package/dist/docs/reference/geometry/{ThreadProfile.md → ThreadProfile-type.md} +1 -1
  198. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
  199. package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
  200. package/dist/docs/reference/geometry/ThreadRole.md +1 -1
  201. package/dist/docs/reference/geometry/ThreadedNutBevel.md +1 -1
  202. package/dist/docs/reference/geometry/ThreadedNutOptions.md +6 -6
  203. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +1 -1
  204. package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
  205. package/dist/docs/reference/geometry/ThreadedRodOptions.md +6 -6
  206. package/dist/docs/reference/geometry/TorusOptions.md +8 -8
  207. package/dist/docs/reference/geometry/Transform2-type.md +1 -1
  208. package/dist/docs/reference/geometry/Transform2Input.md +1 -1
  209. package/dist/docs/reference/geometry/Transform2Matrix.md +1 -1
  210. package/dist/docs/reference/geometry/Transform3-type.md +1 -1
  211. package/dist/docs/reference/geometry/Transform3Input.md +1 -1
  212. package/dist/docs/reference/geometry/Transform3Matrix.md +1 -1
  213. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +5 -4
  214. package/dist/docs/reference/geometry/TriangleMesh.md +1 -1
  215. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +2 -2
  216. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +1 -1
  217. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
  218. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +3 -3
  219. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
  220. package/dist/docs/reference/geometry/TriangleMeshSignature.md +2 -2
  221. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +3 -3
  222. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
  223. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +1 -1
  224. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +1 -1
  225. package/dist/docs/reference/geometry/TubeOptions.md +8 -8
  226. package/dist/docs/reference/geometry/Vector2-type.md +1 -1
  227. package/dist/docs/reference/geometry/Vector2Input.md +1 -1
  228. package/dist/docs/reference/geometry/Vector2Tuple.md +1 -1
  229. package/dist/docs/reference/geometry/Vector3-type.md +1 -1
  230. package/dist/docs/reference/geometry/Vector3Input.md +1 -1
  231. package/dist/docs/reference/geometry/Vector3Tuple.md +1 -1
  232. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +3 -3
  233. package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
  234. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +1 -1
  235. package/dist/docs/reference/geometry/VectorTextMetrics.md +1 -1
  236. package/dist/docs/reference/geometry/VectorTextOptions.md +1 -1
  237. package/dist/docs/reference/geometry/add2.md +1 -1
  238. package/dist/docs/reference/geometry/add3.md +1 -1
  239. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +1 -1
  240. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +2 -2
  241. package/dist/docs/reference/geometry/{createAnchor3.md → anchor3.md} +9 -9
  242. package/dist/docs/reference/geometry/anchorFrame3.md +5 -5
  243. package/dist/docs/reference/geometry/applyTransformDirection3.md +1 -1
  244. package/dist/docs/reference/geometry/applyTransformPoint3.md +1 -1
  245. package/dist/docs/reference/geometry/{attachTransform.md → attachmentTransform3.md} +13 -13
  246. package/dist/docs/reference/geometry/boundsCenter.md +1 -1
  247. package/dist/docs/reference/geometry/boundsFromSize.md +1 -1
  248. package/dist/docs/reference/geometry/boundsSize.md +1 -1
  249. package/dist/docs/reference/geometry/boxAnchor3.md +4 -4
  250. package/dist/docs/reference/geometry/categories/bounds-layout.md +1 -1
  251. package/dist/docs/reference/geometry/categories/curves-paths.md +15 -13
  252. package/dist/docs/reference/geometry/categories/mechanical.md +6 -6
  253. package/dist/docs/reference/geometry/categories/meshes.md +3 -4
  254. package/dist/docs/reference/geometry/categories/pattern-placement.md +6 -6
  255. package/dist/docs/reference/geometry/categories/primitive-options.md +4 -4
  256. package/dist/docs/reference/geometry/categories/profiles-regions.md +2 -3
  257. package/dist/docs/reference/geometry/categories/resolution-errors.md +1 -1
  258. package/dist/docs/reference/geometry/categories/transforms-math.md +5 -5
  259. package/dist/docs/reference/geometry/categories/vector-import.md +5 -5
  260. package/dist/docs/reference/geometry/circleContour.md +1 -1
  261. package/dist/docs/reference/geometry/closeToAxis.md +1 -1
  262. package/dist/docs/reference/geometry/compensateThreadDiameters.md +1 -1
  263. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +5 -5
  264. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +5 -5
  265. package/dist/docs/reference/geometry/composeTransform3.md +1 -1
  266. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +10 -6
  267. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +8 -7
  268. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +1 -1
  269. package/dist/docs/reference/geometry/{createTriangleMeshSignature.md → computeTriangleMeshSignature.md} +4 -4
  270. package/dist/docs/reference/geometry/containsBounds.md +1 -1
  271. package/dist/docs/reference/geometry/contourContainsPoint.md +1 -1
  272. package/dist/docs/reference/geometry/cross2.md +1 -1
  273. package/dist/docs/reference/geometry/cross3.md +1 -1
  274. package/dist/docs/reference/geometry/cylinderAnchor3.md +5 -5
  275. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +1 -1
  276. package/dist/docs/reference/geometry/distance2.md +1 -1
  277. package/dist/docs/reference/geometry/distance3.md +1 -1
  278. package/dist/docs/reference/geometry/distributeAlongPath.md +8 -6
  279. package/dist/docs/reference/geometry/dot2.md +1 -1
  280. package/dist/docs/reference/geometry/dot3.md +1 -1
  281. package/dist/docs/reference/geometry/ellipseContour.md +1 -1
  282. package/dist/docs/reference/geometry/eulerTransform3.md +1 -1
  283. package/dist/docs/reference/geometry/extrudeMesh.md +8 -8
  284. package/dist/docs/reference/geometry/fitBounds.md +1 -1
  285. package/dist/docs/reference/geometry/fitTextLayout.md +1 -1
  286. package/dist/docs/reference/geometry/frameTransform3.md +1 -1
  287. package/dist/docs/reference/geometry/{getMetricClearanceHole.md → getMetricClearanceHoleDiameter.md} +3 -3
  288. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
  289. package/dist/docs/reference/geometry/gridPatternTransforms.md +2 -2
  290. package/dist/docs/reference/geometry/heightfieldMesh.md +1 -1
  291. package/dist/docs/reference/geometry/{buildHelicalThreadRidgeMesh.md → helicalThreadRidgeMesh.md} +5 -5
  292. package/dist/docs/reference/geometry/{buildHelicalThreadSolidMesh.md → helicalThreadSolidMesh.md} +5 -5
  293. package/dist/docs/reference/geometry/inverseTransform3.md +1 -1
  294. package/dist/docs/reference/geometry/isGeometryError.md +1 -1
  295. package/dist/docs/reference/geometry/joinTriangleMeshes.md +1 -1
  296. package/dist/docs/reference/geometry/layoutRow.md +1 -1
  297. package/dist/docs/reference/geometry/length2.md +1 -1
  298. package/dist/docs/reference/geometry/length3.md +1 -1
  299. package/dist/docs/reference/geometry/lerp2.md +1 -1
  300. package/dist/docs/reference/geometry/lerp3.md +1 -1
  301. package/dist/docs/reference/geometry/linearPatternTransforms.md +2 -2
  302. package/dist/docs/reference/geometry/loftMesh.md +2 -1
  303. package/dist/docs/reference/geometry/matchProfiles.md +1 -1
  304. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +1 -1
  305. package/dist/docs/reference/geometry/meshBounds.md +1 -1
  306. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +3 -3
  307. package/dist/docs/reference/geometry/normalize2.md +1 -1
  308. package/dist/docs/reference/geometry/normalize3.md +1 -1
  309. package/dist/docs/reference/geometry/normalizeContour.md +1 -1
  310. package/dist/docs/reference/geometry/normalizePolygon.md +1 -1
  311. package/dist/docs/reference/geometry/normalizeRegion.md +1 -1
  312. package/dist/docs/reference/geometry/optimizePlanarPatches.md +11 -11
  313. package/dist/docs/reference/geometry/path2.md +42 -0
  314. package/dist/docs/reference/geometry/path3.md +42 -0
  315. package/dist/docs/reference/geometry/pathPatternTransforms.md +6 -6
  316. package/dist/docs/reference/geometry/preflightHeightfield.md +1 -1
  317. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +3 -3
  318. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +3 -3
  319. package/dist/docs/reference/geometry/preflightSvgRegion.md +1 -1
  320. package/dist/docs/reference/geometry/preflightThreadedNut.md +3 -3
  321. package/dist/docs/reference/geometry/preflightThreadedRod.md +3 -3
  322. package/dist/docs/reference/geometry/projectOntoPlane3.md +1 -1
  323. package/dist/docs/reference/geometry/radialPatternTransforms.md +1 -17
  324. package/dist/docs/reference/geometry/rectangleContour.md +1 -1
  325. package/dist/docs/reference/geometry/rectangleProfile.md +1 -1
  326. package/dist/docs/reference/geometry/regionArea.md +1 -1
  327. package/dist/docs/reference/geometry/regionBounds.md +1 -1
  328. package/dist/docs/reference/geometry/regularPolygonContour.md +2 -2
  329. package/dist/docs/reference/geometry/resamplePolyline2.md +2 -2
  330. package/dist/docs/reference/geometry/resamplePolyline3.md +2 -2
  331. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +4 -4
  332. package/dist/docs/reference/geometry/resolveArcSegments.md +4 -4
  333. package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
  334. package/dist/docs/reference/geometry/resolveCylindricalGear.md +1 -1
  335. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +1 -1
  336. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +3 -3
  337. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
  338. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  339. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +1 -1
  340. package/dist/docs/reference/geometry/resolveRackPitch.md +1 -1
  341. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +4 -4
  342. package/dist/docs/reference/geometry/reverseTriangleMesh.md +1 -1
  343. package/dist/docs/reference/geometry/revolveMesh.md +10 -10
  344. package/dist/docs/reference/geometry/rotate2.md +1 -1
  345. package/dist/docs/reference/geometry/rotationTransform3.md +1 -1
  346. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +6 -4
  347. package/dist/docs/reference/geometry/sampleContour.md +3 -3
  348. package/dist/docs/reference/geometry/sampleCurve2.md +3 -3
  349. package/dist/docs/reference/geometry/sampleCurve3.md +2 -2
  350. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
  351. package/dist/docs/reference/geometry/sampleHelix.md +2 -2
  352. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
  353. package/dist/docs/reference/geometry/sampleRackToothPath.md +4 -4
  354. package/dist/docs/reference/geometry/sampleSideProfile.md +3 -3
  355. package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
  356. package/dist/docs/reference/geometry/sampleThreadHelices.md +2 -2
  357. package/dist/docs/reference/geometry/scale2.md +1 -1
  358. package/dist/docs/reference/geometry/scale3.md +1 -1
  359. package/dist/docs/reference/geometry/scaleTransform3.md +1 -1
  360. package/dist/docs/reference/geometry/signedContourArea.md +1 -1
  361. package/dist/docs/reference/geometry/starContour.md +1 -1
  362. package/dist/docs/reference/geometry/strokeRegionData.md +63 -0
  363. package/dist/docs/reference/geometry/subtract2.md +1 -1
  364. package/dist/docs/reference/geometry/subtract3.md +1 -1
  365. package/dist/docs/reference/geometry/sweepMesh.md +9 -9
  366. package/dist/docs/reference/geometry/{createThreadProfile.md → threadProfile.md} +6 -6
  367. package/dist/docs/reference/geometry/transform2.md +1 -1
  368. package/dist/docs/reference/geometry/transform3.md +1 -1
  369. package/dist/docs/reference/geometry/transformDeterminant3.md +1 -1
  370. package/dist/docs/reference/geometry/transformRegionData.md +1 -1
  371. package/dist/docs/reference/geometry/transformTriangleMesh.md +6 -6
  372. package/dist/docs/reference/geometry/translationTransform3.md +1 -1
  373. package/dist/docs/reference/geometry/triangulateContour.md +1 -1
  374. package/dist/docs/reference/geometry/validateSolidMesh.md +2 -2
  375. package/dist/docs/reference/geometry/validateTransform3.md +1 -1
  376. package/dist/docs/reference/geometry/validateTriangleMesh.md +1 -1
  377. package/dist/docs/reference/geometry/vector2.md +1 -1
  378. package/dist/docs/reference/geometry/vector3.md +1 -1
  379. package/dist/docs/reference/geometry.md +2 -2
  380. package/dist/docs/reference/model/Anchor3.md +1 -1
  381. package/dist/docs/reference/model/AttachOptions.md +10 -5
  382. package/dist/docs/reference/model/Bounds2.md +1 -1
  383. package/dist/docs/reference/model/Bounds3.md +1 -1
  384. package/dist/docs/reference/model/BoxEdge.md +1 -1
  385. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  386. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  387. package/dist/docs/reference/model/BoxOptions.md +8 -8
  388. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  389. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  390. package/dist/docs/reference/model/CircleOptions.md +3 -3
  391. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
  392. package/dist/docs/reference/model/Computed.md +1 -1
  393. package/dist/docs/reference/model/ComputedValue.md +1 -1
  394. package/dist/docs/reference/model/Contour.md +1 -1
  395. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  396. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  397. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  398. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  399. package/dist/docs/reference/model/CylinderOptions.md +3 -3
  400. package/dist/docs/reference/model/DiagnosticOptions.md +1 -1
  401. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  402. package/dist/docs/reference/model/EllipseContourOptions.md +1 -1
  403. package/dist/docs/reference/model/EllipseOptions.md +3 -3
  404. package/dist/docs/reference/model/EndTreatments.md +1 -1
  405. package/dist/docs/reference/model/ExtrudeOptions.md +6 -6
  406. package/dist/docs/reference/model/FinalizedModel.md +18 -8
  407. package/dist/docs/reference/model/FinalizedPart.md +1 -1
  408. package/dist/docs/reference/model/Frame3.md +1 -1
  409. package/dist/docs/reference/model/GenerateCallback.md +1 -1
  410. package/dist/docs/reference/model/GenerateContext.md +1 -1
  411. package/dist/docs/reference/model/GeneratedPart.md +1 -1
  412. package/dist/docs/reference/model/GenerationDiagnostic.md +1 -1
  413. package/dist/docs/reference/model/GenerationError.md +1 -1
  414. package/dist/docs/reference/model/GeometryResolution.md +5 -5
  415. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  416. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  417. package/dist/docs/reference/model/GridPatternOptions.md +9 -3
  418. package/dist/docs/reference/model/HeightfieldOptions.md +1 -1
  419. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +3 -3
  420. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +1 -1
  421. package/dist/docs/reference/model/HullOptions.md +5 -5
  422. package/dist/docs/reference/model/ImmutableBuffer-type.md +1 -1
  423. package/dist/docs/reference/model/ImmutableTriangleMesh.md +1 -1
  424. package/dist/docs/reference/model/ImplicitOptions.md +1 -1
  425. package/dist/docs/reference/model/InternalThreadCutterOptions.md +4 -4
  426. package/dist/docs/reference/model/LinearPatternOptions.md +12 -5
  427. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  428. package/dist/docs/reference/model/LoftOptions.md +1 -1
  429. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  430. package/dist/docs/reference/model/LoftStation.md +3 -3
  431. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  432. package/dist/docs/reference/model/ModelProgram.md +1 -1
  433. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  434. package/dist/docs/reference/model/NumericArray.md +1 -1
  435. package/dist/docs/reference/model/PartGeometry.md +1 -1
  436. package/dist/docs/reference/model/PartOptions.md +1 -1
  437. package/dist/docs/reference/model/Path2-type.md +192 -0
  438. package/dist/docs/reference/model/Path2Data.md +14 -0
  439. package/dist/docs/reference/model/Path2Input.md +15 -0
  440. package/dist/docs/reference/model/Path3-type.md +192 -0
  441. package/dist/docs/reference/model/Path3Data.md +14 -0
  442. package/dist/docs/reference/model/Path3Input.md +15 -0
  443. package/dist/docs/reference/model/PathLocation.md +65 -0
  444. package/dist/docs/reference/model/PathNormalGuide.md +4 -3
  445. package/dist/docs/reference/model/PathOptions.md +34 -0
  446. package/dist/docs/reference/model/PathPatternOptions.md +3 -3
  447. package/dist/docs/reference/model/PathResamplingOptions.md +79 -0
  448. package/dist/docs/reference/model/PatternSource.md +1 -1
  449. package/dist/docs/reference/model/Pivot2Options.md +1 -1
  450. package/dist/docs/reference/model/Pivot3Options.md +1 -1
  451. package/dist/docs/reference/model/PlaneOptions.md +3 -3
  452. package/dist/docs/reference/model/PolygonData.md +1 -1
  453. package/dist/docs/reference/model/PolygonOptions.md +8 -8
  454. package/dist/docs/reference/model/{PrimitivePlacement.md → PrimitiveAttachment.md} +7 -7
  455. package/dist/docs/reference/model/{PrimitivePlacementOptions.md → PrimitiveAttachmentOptions.md} +41 -20
  456. package/dist/docs/reference/model/PrintableThreadFit.md +1 -1
  457. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +1 -1
  458. package/dist/docs/reference/model/Profile.md +1 -1
  459. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  460. package/dist/docs/reference/model/ProfileContour2.md +1 -1
  461. package/dist/docs/reference/model/ProfileSpan2.md +2 -2
  462. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +1 -1
  463. package/dist/docs/reference/model/RadialPatternOptions.md +17 -22
  464. package/dist/docs/reference/model/RadialSizing.md +1 -1
  465. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  466. package/dist/docs/reference/model/RectangleContourOptions.md +1 -1
  467. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  468. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  469. package/dist/docs/reference/model/RectangleOptions.md +8 -8
  470. package/dist/docs/reference/model/RegionData.md +1 -1
  471. package/dist/docs/reference/model/RegularPolygonOptions.md +5 -5
  472. package/dist/docs/reference/model/RevolveOptions.md +9 -4
  473. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  474. package/dist/docs/reference/model/Section.md +12 -11
  475. package/dist/docs/reference/model/SectionHullOptions.md +5 -5
  476. package/dist/docs/reference/model/SectionInspection.md +7 -7
  477. package/dist/docs/reference/model/SectionOffsetJoin.md +1 -1
  478. package/dist/docs/reference/model/SectionOffsetOptions.md +1 -1
  479. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  480. package/dist/docs/reference/model/Solid.md +23 -6
  481. package/dist/docs/reference/model/SolidInspection.md +4 -4
  482. package/dist/docs/reference/model/{SolidRayHit.md → SolidSegmentHit.md} +3 -3
  483. package/dist/docs/reference/model/SphereOptions.md +3 -3
  484. package/dist/docs/reference/model/StarOptions.md +10 -10
  485. package/dist/docs/reference/model/{StrokePathCap.md → StrokeCap.md} +3 -3
  486. package/dist/docs/reference/model/{StrokePathJoin.md → StrokeJoin.md} +3 -3
  487. package/dist/docs/reference/model/StrokeOptions.md +6 -6
  488. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  489. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  490. package/dist/docs/reference/model/SvgSectionOptions.md +1 -1
  491. package/dist/docs/reference/model/SweepOptions.md +6 -6
  492. package/dist/docs/reference/model/SweepOrientation.md +7 -7
  493. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  494. package/dist/docs/reference/model/ThreadEndStyle.md +1 -1
  495. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +1 -1
  496. package/dist/docs/reference/model/ThreadHandedness.md +1 -1
  497. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +1 -1
  498. package/dist/docs/reference/model/ThreadLeadInShape.md +1 -1
  499. package/dist/docs/reference/model/ThreadProfile.md +1 -1
  500. package/dist/docs/reference/model/ThreadRidgeOptions.md +1 -1
  501. package/dist/docs/reference/model/ThreadedNutBevel.md +1 -1
  502. package/dist/docs/reference/model/ThreadedNutOptions.md +4 -4
  503. package/dist/docs/reference/model/ThreadedNutPreflight.md +1 -1
  504. package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
  505. package/dist/docs/reference/model/ThreadedRodOptions.md +4 -4
  506. package/dist/docs/reference/model/TorusOptions.md +8 -8
  507. package/dist/docs/reference/model/Transform2-type.md +1 -1
  508. package/dist/docs/reference/model/Transform2Input.md +1 -1
  509. package/dist/docs/reference/model/Transform2Matrix.md +1 -1
  510. package/dist/docs/reference/model/Transform3-type.md +1 -1
  511. package/dist/docs/reference/model/Transform3Input.md +1 -1
  512. package/dist/docs/reference/model/Transform3Matrix.md +1 -1
  513. package/dist/docs/reference/model/TriangleMesh.md +1 -1
  514. package/dist/docs/reference/model/TriangleMeshAnalysis.md +2 -2
  515. package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
  516. package/dist/docs/reference/model/TubeOptions.md +8 -8
  517. package/dist/docs/reference/model/Vector2-type.md +1 -1
  518. package/dist/docs/reference/model/Vector2Input.md +1 -1
  519. package/dist/docs/reference/model/Vector2Tuple.md +1 -1
  520. package/dist/docs/reference/model/Vector3-type.md +1 -1
  521. package/dist/docs/reference/model/Vector3Input.md +1 -1
  522. package/dist/docs/reference/model/Vector3Tuple.md +1 -1
  523. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  524. package/dist/docs/reference/model/VectorTextMetrics.md +1 -1
  525. package/dist/docs/reference/model/anchor.md +1 -1
  526. package/dist/docs/reference/model/box.md +3 -3
  527. package/dist/docs/reference/model/castSegment.md +40 -0
  528. package/dist/docs/reference/model/categories/boolean-operations.md +1 -1
  529. package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -1
  530. package/dist/docs/reference/model/categories/contracts.md +2 -2
  531. package/dist/docs/reference/model/categories/core-values-errors.md +1 -1
  532. package/dist/docs/reference/model/categories/explicit-profiles.md +2 -2
  533. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +2 -2
  534. package/dist/docs/reference/model/categories/generation.md +1 -1
  535. package/dist/docs/reference/model/categories/inspection.md +4 -5
  536. package/dist/docs/reference/model/categories/mesh-inspection.md +2 -2
  537. package/dist/docs/reference/model/categories/paths.md +33 -0
  538. package/dist/docs/reference/model/categories/primitives.md +2 -2
  539. package/dist/docs/reference/model/categories/resolution.md +2 -2
  540. package/dist/docs/reference/model/categories/sections.md +3 -4
  541. package/dist/docs/reference/model/categories/threads.md +5 -5
  542. package/dist/docs/reference/model/categories/transforms-placement.md +8 -8
  543. package/dist/docs/reference/model/circle.md +1 -1
  544. package/dist/docs/reference/model/components.md +6 -6
  545. package/dist/docs/reference/model/compose.md +1 -1
  546. package/dist/docs/reference/model/cylinder.md +1 -1
  547. package/dist/docs/reference/model/distance.md +1 -1
  548. package/dist/docs/reference/model/ellipse.md +1 -1
  549. package/dist/docs/reference/model/extrude.md +3 -3
  550. package/dist/docs/reference/model/generate.md +1 -1
  551. package/dist/docs/reference/model/gridPattern.md +4 -4
  552. package/dist/docs/reference/model/heightfield.md +1 -1
  553. package/dist/docs/reference/model/hull.md +1 -1
  554. package/dist/docs/reference/model/immutableBuffer.md +1 -1
  555. package/dist/docs/reference/model/immutableMesh.md +1 -1
  556. package/dist/docs/reference/model/implicit.md +1 -1
  557. package/dist/docs/reference/model/inspectSection.md +1 -1
  558. package/dist/docs/reference/model/inspectSolid.md +1 -1
  559. package/dist/docs/reference/model/internalThreadCutter.md +4 -4
  560. package/dist/docs/reference/model/intersect.md +1 -1
  561. package/dist/docs/reference/model/isEmpty.md +1 -1
  562. package/dist/docs/reference/model/linearPattern.md +4 -4
  563. package/dist/docs/reference/model/loft.md +1 -1
  564. package/dist/docs/reference/model/matchProfiles.md +2 -2
  565. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  566. package/dist/docs/reference/model/path2.md +42 -0
  567. package/dist/docs/reference/model/path3.md +42 -0
  568. package/dist/docs/reference/model/pathPattern.md +13 -12
  569. package/dist/docs/reference/model/polygon.md +4 -4
  570. package/dist/docs/reference/model/preflightInternalThreadCutter.md +3 -3
  571. package/dist/docs/reference/model/preflightThreadedNut.md +3 -3
  572. package/dist/docs/reference/model/preflightThreadedRod.md +3 -3
  573. package/dist/docs/reference/model/radialPattern.md +5 -37
  574. package/dist/docs/reference/model/rectangle.md +3 -3
  575. package/dist/docs/reference/model/regularPolygon.md +1 -1
  576. package/dist/docs/reference/model/revolve.md +5 -4
  577. package/dist/docs/reference/model/solidFromMesh.md +1 -1
  578. package/dist/docs/reference/model/sphere.md +1 -1
  579. package/dist/docs/reference/model/split.md +1 -1
  580. package/dist/docs/reference/model/splitByPlane.md +1 -1
  581. package/dist/docs/reference/model/star.md +4 -4
  582. package/dist/docs/reference/model/stroke.md +8 -8
  583. package/dist/docs/reference/model/svgPathSection.md +1 -1
  584. package/dist/docs/reference/model/svgSection.md +1 -1
  585. package/dist/docs/reference/model/sweep.md +7 -7
  586. package/dist/docs/reference/model/textSection.md +1 -1
  587. package/dist/docs/reference/model/threadRidge.md +2 -2
  588. package/dist/docs/reference/model/threadedNut.md +4 -4
  589. package/dist/docs/reference/model/threadedRod.md +4 -4
  590. package/dist/docs/reference/model/torus.md +3 -3
  591. package/dist/docs/reference/model/transform2.md +1 -1
  592. package/dist/docs/reference/model/transform3.md +1 -1
  593. package/dist/docs/reference/model/tube.md +3 -3
  594. package/dist/docs/reference/model/union.md +1 -1
  595. package/dist/docs/reference/model/vector2.md +1 -1
  596. package/dist/docs/reference/model/vector3.md +1 -1
  597. package/dist/docs/reference/model.md +3 -2
  598. package/dist/docs/reference/text/Bounds2.md +1 -1
  599. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
  600. package/dist/docs/reference/text/Vector2Tuple.md +1 -1
  601. package/dist/docs/reference/text/VectorFont.md +2 -2
  602. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  603. package/dist/docs/reference/text/VectorTextArcBaseline.md +3 -3
  604. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  605. package/dist/docs/reference/text/VectorTextLayoutOptions.md +1 -1
  606. package/dist/docs/reference/text/VectorTextMetrics.md +1 -1
  607. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  608. package/dist/docs/reference/text/categories/font-preparation.md +3 -3
  609. package/dist/docs/reference/text/prepareVectorFont.md +2 -2
  610. package/dist/docs/reference/text.md +1 -1
  611. package/dist/engine/construction-operations.js +31 -14
  612. package/dist/engine/execution.js +39 -8
  613. package/dist/engine/extrusion-finishing.js +1 -1
  614. package/dist/engine/index.js +6 -1
  615. package/dist/engine/inspection-operations.js +13 -11
  616. package/dist/engine/loft-operations.js +35 -14
  617. package/dist/engine/model-summary.js +8 -5
  618. package/dist/engine/native/material-components.js +305 -0
  619. package/dist/engine/native/regions.js +2 -1
  620. package/dist/engine/native/threads.js +3 -3
  621. package/dist/engine/native/transforms.js +5 -7
  622. package/dist/engine/operation-environment.js +2 -2
  623. package/dist/engine/pattern-operations.js +1 -1
  624. package/dist/engine/placement.js +2 -2
  625. package/dist/engine/primitive-anchors.js +17 -17
  626. package/dist/engine/primitive-operations.js +1 -1
  627. package/dist/engine/primitive-profiles.js +7 -7
  628. package/dist/engine/profile-mesh.js +7 -7
  629. package/dist/engine/recipe-realization.js +6 -0
  630. package/dist/engine/section-operations.js +33 -8
  631. package/dist/engine/session-snapshot.js +14 -4
  632. package/dist/engine/session.js +10 -5
  633. package/dist/engine/shape-anchors.js +3 -3
  634. package/dist/engine/transform-operations.js +24 -24
  635. package/dist/geometry/anchors.js +40 -33
  636. package/dist/geometry/curves/sampling.js +14 -14
  637. package/dist/geometry/edge-finishing.js +1 -1
  638. package/dist/geometry/extrusion.js +13 -16
  639. package/dist/geometry/index.js +9 -10
  640. package/dist/geometry/loft/loft-simple-mesh.js +6 -6
  641. package/dist/geometry/loft/loft.js +22 -13
  642. package/dist/geometry/math/immutable-value.js +1 -1
  643. package/dist/geometry/mechanical/gear-motion.js +3 -3
  644. package/dist/geometry/mechanical/gears.js +38 -38
  645. package/dist/geometry/mechanical/index.js +3 -3
  646. package/dist/geometry/mechanical/standards.js +1 -1
  647. package/dist/geometry/mechanical/thread-helices.js +2 -3
  648. package/dist/geometry/mechanical/thread-mesh-plan.js +4 -5
  649. package/dist/geometry/mechanical/thread-mesh.js +7 -7
  650. package/dist/geometry/mechanical/thread-profiles.js +5 -5
  651. package/dist/geometry/mechanical/thread-solids.js +2 -2
  652. package/dist/geometry/mechanical/thread-surface.js +1 -1
  653. package/dist/geometry/mechanical/threads.js +8 -8
  654. package/dist/geometry/mesh/mesh-planar.js +25 -27
  655. package/dist/geometry/mesh/mesh-quality.js +5 -5
  656. package/dist/geometry/mesh/mesh-signature.js +13 -13
  657. package/dist/geometry/mesh/mesh-solid.js +7 -7
  658. package/dist/geometry/mesh/mesh.js +4 -15
  659. package/dist/geometry/paths/closest-point.js +8 -19
  660. package/dist/geometry/paths/frames.js +41 -11
  661. package/dist/geometry/paths/helix.js +16 -6
  662. package/dist/geometry/paths/path-value.js +252 -0
  663. package/dist/geometry/paths/planar.js +36 -23
  664. package/dist/geometry/paths/resampling.js +27 -5
  665. package/dist/geometry/patterns/placements.js +100 -27
  666. package/dist/geometry/patterns.js +2 -2
  667. package/dist/geometry/polygon-clipping.js +17 -0
  668. package/dist/geometry/profiles/contour.js +6 -6
  669. package/dist/geometry/profiles/matched.js +4 -4
  670. package/dist/geometry/profiles/profiles.js +4 -4
  671. package/dist/geometry/profiles/rectangle.js +4 -4
  672. package/dist/geometry/profiles/side-profile.js +7 -7
  673. package/dist/geometry/profiles/span-sampling.js +1 -1
  674. package/dist/geometry/resolution.js +34 -34
  675. package/dist/geometry/revolve/revolve-mesh.js +12 -7
  676. package/dist/geometry/stroke-path.js +12 -27
  677. package/dist/geometry/svg/fill.js +7 -21
  678. package/dist/geometry/svg-import.js +23 -23
  679. package/dist/geometry/sweeps/options.js +5 -4
  680. package/dist/geometry/sweeps/orientation.js +5 -5
  681. package/dist/geometry/sweeps/stations.js +10 -10
  682. package/dist/geometry/sweeps/sweep-closed.js +2 -2
  683. package/dist/geometry/sweeps/sweep-mesh.js +9 -3
  684. package/dist/geometry/sweeps/sweep-open.js +1 -1
  685. package/dist/geometry/sweeps/validation.js +4 -7
  686. package/dist/geometry/transform-geometry.js +7 -14
  687. package/dist/index.js +1 -0
  688. package/dist/model/execution-binding.js +3 -3
  689. package/dist/model/geometry-recipes.js +1 -1
  690. package/dist/model/immutable-generation-data.js +66 -6
  691. package/dist/model/operations.js +25 -26
  692. package/dist/model/recipe-declaration.js +13 -7
  693. package/dist/model/shape-handles.js +2 -1
  694. package/dist/text/index.js +15 -9
  695. package/dist/text/vector-text-layout.js +31 -26
  696. package/package.json +1 -1
  697. package/dist/docs/reference/geometry/ClosestPointOnPathOptions.md +0 -34
  698. package/dist/docs/reference/geometry/ClosestPointOnPathResult.md +0 -65
  699. package/dist/docs/reference/geometry/Path2.md +0 -14
  700. package/dist/docs/reference/geometry/Path3.md +0 -14
  701. package/dist/docs/reference/geometry/PrimitivePlacement.md +0 -31
  702. package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +0 -83
  703. package/dist/docs/reference/geometry/StrokePathCap.md +0 -7
  704. package/dist/docs/reference/geometry/StrokePathJoin.md +0 -7
  705. package/dist/docs/reference/geometry/closestPointOnPath.md +0 -110
  706. package/dist/docs/reference/geometry/cumulativePathLengths.md +0 -33
  707. package/dist/docs/reference/geometry/measureTriangleMesh.md +0 -55
  708. package/dist/docs/reference/geometry/pathLength.md +0 -33
  709. package/dist/docs/reference/geometry/strokePathRegion.md +0 -63
  710. package/dist/docs/reference/geometry/transformContour.md +0 -42
  711. package/dist/docs/reference/geometry/transformPath2.md +0 -40
  712. package/dist/docs/reference/geometry/transformPath3.md +0 -33
  713. package/dist/docs/reference/model/Path2.md +0 -20
  714. package/dist/docs/reference/model/rayCast.md +0 -40
  715. package/dist/docs/reference/model/toTriangleMesh.md +0 -27
  716. package/dist/geometry/paths/path.js +0 -32
@@ -1,4 +1,6 @@
1
1
  import { GeometryError } from "./errors.js";
2
+ import { vector3Data } from "./math/vector-value.js";
3
+ import { cross3, dot3 } from "./math/vector3.js";
2
4
  import { resolveGeometryTolerance } from "./tolerance.js";
3
5
  import { composeTransform3, frameTransform3, inverseTransform3 } from "./transform3.js";
4
6
  const boxFaces = {
@@ -71,7 +73,7 @@ export function boxAnchor3(options) {
71
73
  return origin[axis] + (direction[axis] * size[axis]) / 2;
72
74
  return (origin[axis] + (direction[axis] > 0 ? size[axis] : direction[axis] < 0 ? 0 : size[axis] / 2));
73
75
  };
74
- return createAnchor3([coordinate(0), coordinate(1), coordinate(2)], direction, up);
76
+ return anchor3([coordinate(0), coordinate(1), coordinate(2)], direction, up);
75
77
  }
76
78
  /** Creates a cap-center or radial-side anchor using cylinder()'s construction origin.
77
79
  * @remarks Both centered and noncentered cylinders extend along +Z. Side angle uses degrees;
@@ -82,12 +84,12 @@ export function cylinderAnchor3(options) {
82
84
  assertAnchorOptions(options, operation);
83
85
  const origin = primitiveAnchorOrigin(options, operation);
84
86
  const { radius, height, face } = options;
85
- const angleDegrees = options.angleDegrees === undefined ? 0 : options.angleDegrees;
87
+ const angle = options.angle === undefined ? 0 : options.angle;
86
88
  if (!Number.isFinite(radius) || radius <= 0 || !Number.isFinite(height) || height <= 0)
87
89
  throw new GeometryError("INVALID_ARGUMENT", "Cylinder anchor dimensions must be positive.", {
88
90
  operation,
89
91
  });
90
- if (!Number.isFinite(angleDegrees))
92
+ if (!Number.isFinite(angle))
91
93
  throw new GeometryError("NON_FINITE_VALUE", "Cylinder anchor angle must be finite.", {
92
94
  operation,
93
95
  });
@@ -95,19 +97,13 @@ export function cylinderAnchor3(options) {
95
97
  throw new GeometryError("INVALID_ARGUMENT", "Unsupported cylinder anchor face.", { operation });
96
98
  const center = options.center ?? true;
97
99
  if (face === "top")
98
- return createAnchor3([origin[0], origin[1], origin[2] + (center ? height / 2 : height)], [0, 0, 1], [0, 1, 0]);
100
+ return anchor3([origin[0], origin[1], origin[2] + (center ? height / 2 : height)], [0, 0, 1], [0, 1, 0]);
99
101
  if (face === "bottom")
100
- return createAnchor3([origin[0], origin[1], origin[2] - (center ? height / 2 : 0)], [0, 0, -1], [0, 1, 0]);
101
- const angle = angleDegrees * (Math.PI / 180);
102
- const cosine = Math.cos(angle), sine = Math.sin(angle);
103
- return createAnchor3([origin[0] + radius * cosine, origin[1] + radius * sine, origin[2] + (center ? 0 : height / 2)], [cosine, sine, 0], [0, 0, 1]);
102
+ return anchor3([origin[0], origin[1], origin[2] - (center ? height / 2 : 0)], [0, 0, -1], [0, 1, 0]);
103
+ const angleRadians = angle * (Math.PI / 180);
104
+ const cosine = Math.cos(angleRadians), sine = Math.sin(angleRadians);
105
+ return anchor3([origin[0] + radius * cosine, origin[1] + radius * sine, origin[2] + (center ? 0 : height / 2)], [cosine, sine, 0], [0, 0, 1]);
104
106
  }
105
- const dot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
106
- const cross = (a, b) => [
107
- a[1] * b[2] - a[2] * b[1],
108
- a[2] * b[0] - a[0] * b[2],
109
- a[0] * b[1] - a[1] * b[0],
110
- ];
111
107
  const normalized = (vector, label, tolerance) => {
112
108
  if (!vector.every(Number.isFinite)) {
113
109
  throw new GeometryError("NON_FINITE_VALUE", `${label} coordinates must be finite.`);
@@ -134,34 +130,44 @@ const normalized = (vector, label, tolerance) => {
134
130
  * @returns A frozen anchor with unit, orthogonal direction and up vectors.
135
131
  * @throws {@link GeometryError} For non-finite or degenerate inputs.
136
132
  */
137
- export function createAnchor3(position, direction, up = [0, 1, 0], tolerance = {}) {
138
- if (!position.every(Number.isFinite)) {
139
- throw new GeometryError("NON_FINITE_VALUE", "Anchor position coordinates must be finite.");
140
- }
141
- const resolved = resolveGeometryTolerance(Math.max(1, Math.hypot(direction[0], direction[1], direction[2])), tolerance);
142
- const zAxis = normalized(direction, "Anchor direction", resolved.linear);
133
+ export function anchor3(position, direction, up = [0, 1, 0], tolerance = {}) {
134
+ const coordinates = (input) => {
135
+ const values = vector3Data(input);
136
+ const point = [values[0], values[1], values[2]];
137
+ if (!point.every(Number.isFinite))
138
+ throw new GeometryError("NON_FINITE_VALUE", "Anchor coordinates must be finite.", {
139
+ operation: "anchor3",
140
+ });
141
+ return point;
142
+ };
143
+ const point = coordinates(position);
144
+ const normal = coordinates(direction);
145
+ const roll = coordinates(up);
146
+ const resolved = resolveGeometryTolerance(Math.max(1, Math.hypot(normal[0], normal[1], normal[2])), tolerance);
147
+ const zAxis = normalized(normal, "Anchor direction", resolved.linear);
148
+ const rollProjection = dot3(roll, zAxis);
143
149
  const projectedUp = [
144
- up[0] - zAxis[0] * dot(up, zAxis),
145
- up[1] - zAxis[1] * dot(up, zAxis),
146
- up[2] - zAxis[2] * dot(up, zAxis),
150
+ roll[0] - zAxis[0] * rollProjection,
151
+ roll[1] - zAxis[1] * rollProjection,
152
+ roll[2] - zAxis[2] * rollProjection,
147
153
  ];
148
154
  const normalizedUp = normalized(projectedUp, "Anchor up direction", resolved.linear);
149
155
  return Object.freeze({
150
156
  direction: zAxis,
151
- position: Object.freeze([position[0], position[1], position[2]]),
157
+ position: Object.freeze(point),
152
158
  up: normalizedUp,
153
159
  });
154
160
  }
155
161
  /**
156
162
  * Converts an anchor into a right-handed frame with direction as local +Z.
157
163
  *
158
- * @param anchor - Anchor created by {@link createAnchor3} or equivalent valid data.
164
+ * @param anchor - Anchor created by {@link anchor3} or equivalent valid data.
159
165
  * @param tolerance - Optional comparison overrides.
160
166
  * @returns A normalized right-handed frame at the anchor position.
161
167
  */
162
168
  export function anchorFrame3(anchor, tolerance = {}) {
163
- const normalizedAnchor = createAnchor3(anchor.position, anchor.direction, anchor.up, tolerance);
164
- const xAxis = normalized(cross(normalizedAnchor.up, normalizedAnchor.direction), "Anchor X axis", 0);
169
+ const normalizedAnchor = anchor3(anchor.position, anchor.direction, anchor.up, tolerance);
170
+ const xAxis = normalized(cross3(normalizedAnchor.up, normalizedAnchor.direction), "Anchor X axis", 0);
165
171
  return Object.freeze({
166
172
  origin: normalizedAnchor.position,
167
173
  xAxis,
@@ -183,9 +189,9 @@ export function anchorFrame3(anchor, tolerance = {}) {
183
189
  * @returns A frozen affine transform for the moving object.
184
190
  * @throws {@link GeometryError} For invalid anchors or non-finite options.
185
191
  */
186
- export function attachTransform(source, target, options = {}) {
192
+ export function attachmentTransform3(source, target, options = {}) {
187
193
  const gap = options.gap ?? 0;
188
- const spin = options.spinRadians ?? 0;
194
+ const spin = options.spin ?? 0;
189
195
  if (options.alignment !== undefined &&
190
196
  options.alignment !== "opposed" &&
191
197
  options.alignment !== "same") {
@@ -195,13 +201,14 @@ export function attachTransform(source, target, options = {}) {
195
201
  throw new GeometryError("NON_FINITE_VALUE", "Attachment gap and spin must be finite.");
196
202
  }
197
203
  const sourceFrame = anchorFrame3(source, options.tolerance);
198
- const targetAnchor = createAnchor3(target.position, target.direction, target.up, options.tolerance);
204
+ const targetAnchor = anchor3(target.position, target.direction, target.up, options.tolerance);
199
205
  const desiredDirection = (options.alignment ?? "opposed") === "opposed"
200
206
  ? [-targetAnchor.direction[0], -targetAnchor.direction[1], -targetAnchor.direction[2]]
201
207
  : targetAnchor.direction;
202
- const baseFrame = anchorFrame3(createAnchor3(targetAnchor.position, desiredDirection, targetAnchor.up, options.tolerance), options.tolerance);
203
- const cosine = Math.cos(spin);
204
- const sine = Math.sin(spin);
208
+ const baseFrame = anchorFrame3(anchor3(targetAnchor.position, desiredDirection, targetAnchor.up, options.tolerance), options.tolerance);
209
+ const spinRadians = ((spin % 360) * Math.PI) / 180;
210
+ const cosine = Math.cos(spinRadians);
211
+ const sine = Math.sin(spinRadians);
205
212
  const spunX = [
206
213
  baseFrame.xAxis[0] * cosine + baseFrame.yAxis[0] * sine,
207
214
  baseFrame.xAxis[1] * cosine + baseFrame.yAxis[1] * sine,
@@ -28,10 +28,10 @@ export function createSpatialSampleWriter() {
28
28
  /** @internal Exact counts override physical resolution, but never the finite output budget. */
29
29
  export function resolveSamplingBudget(options) {
30
30
  const selected = resolveGeometrySamplingLimits(options.limits).maxPathPoints;
31
- const maximum = options.maximumVertices ?? selected;
32
- if (options.maximumVertices !== undefined &&
31
+ const maximum = options.maxVertices ?? selected;
32
+ if (options.maxVertices !== undefined &&
33
33
  (!Number.isSafeInteger(maximum) || maximum < 2 || maximum > selected))
34
- curveFailure("INVALID_ARGUMENT", "maximumVertices must be at least two and cannot raise maxPathPoints.");
34
+ curveFailure("INVALID_ARGUMENT", "maxVertices must be at least two and cannot raise maxPathPoints.");
35
35
  if (options.segments !== undefined &&
36
36
  (!Number.isSafeInteger(options.segments) || options.segments < 1))
37
37
  curveFailure("INVALID_ARGUMENT", "segments must be a positive safe integer.");
@@ -76,10 +76,10 @@ function validateArc(curve) {
76
76
  validateCurvePoint3(curve.yAxis);
77
77
  if (!Number.isFinite(curve.radius) ||
78
78
  curve.radius <= 0 ||
79
- !Number.isFinite(curve.sweepDegrees) ||
80
- curve.sweepDegrees === 0 ||
81
- Math.abs(curve.sweepDegrees) > 360 ||
82
- !Number.isFinite(curve.startDegrees ?? 0))
79
+ !Number.isFinite(curve.sweepAngle) ||
80
+ curve.sweepAngle === 0 ||
81
+ Math.abs(curve.sweepAngle) > 360 ||
82
+ !Number.isFinite(curve.startAngle ?? 0))
83
83
  curveFailure("INVALID_ARGUMENT", "Arc radius must be positive and its nonzero degree sweep at most 360.");
84
84
  if (Math.abs(Math.hypot(...curve.xAxis) - 1) > 1e-10 ||
85
85
  Math.abs(Math.hypot(...curve.yAxis) - 1) > 1e-10 ||
@@ -91,17 +91,17 @@ function validateArc(curve) {
91
91
  function sampleArc(curve, options, maximum, createWriter) {
92
92
  validateArc(curve);
93
93
  const segments = options.segments ??
94
- resolveArcSegments(curve.radius, curve.sweepDegrees, options.resolution, options.limits);
94
+ resolveArcSegments(curve.radius, curve.sweepAngle, options.resolution, options.limits);
95
95
  assertSampleVertexCount(segments + 1, maximum);
96
96
  const writer = createWriter();
97
97
  const point = [0, 0, 0];
98
98
  const tangent = [0, 0, 0];
99
99
  const firstPoint = [0, 0, 0];
100
- const sign = Math.sign(curve.sweepDegrees);
100
+ const sign = Math.sign(curve.sweepAngle);
101
101
  for (let i = 0; i <= segments; i++) {
102
- const angle = (((curve.startDegrees ?? 0) + (curve.sweepDegrees * i) / segments) * Math.PI) / 180;
102
+ const angle = (((curve.startAngle ?? 0) + (curve.sweepAngle * i) / segments) * Math.PI) / 180;
103
103
  const cos = Math.cos(angle), sin = Math.sin(angle);
104
- if (i === segments && Math.abs(curve.sweepDegrees) === 360) {
104
+ if (i === segments && Math.abs(curve.sweepAngle) === 360) {
105
105
  point[0] = firstPoint[0];
106
106
  point[1] = firstPoint[1];
107
107
  point[2] = firstPoint[2];
@@ -138,8 +138,8 @@ export function cubicControlMeetsPolicy(control, policy) {
138
138
  * Every control interval must meet the physical policy, including flatter regions subdivided to
139
139
  * match curved ones. The depth-first traversal retains only one bounded stack, without output points.
140
140
  */
141
- export function resolveUniformCubicSegments(control, policy, maximum, minimumSegments = 1) {
142
- let segments = minimumSegments;
141
+ export function resolveUniformCubicSegments(control, policy, maximum, minSegments = 1) {
142
+ let segments = minSegments;
143
143
  for (let depth = 0; depth <= 32; depth += 1) {
144
144
  assertSampleVertexCount(segments, maximum);
145
145
  const pending = [{ control, intervals: segments }];
@@ -241,7 +241,7 @@ export function sampleCurve3(curve, options = {}) {
241
241
  * frozen. At stationary tangents, outgoing secants are preferred and endpoints use a backward fallback.
242
242
  * @example
243
243
  * ```ts
244
- * const turn = sampleCurve2({kind: "arc", center: [0,0], radius: 10, sweepDegrees: 90});
244
+ * const turn = sampleCurve2({kind: "arc", center: [0,0], radius: 10, sweepAngle: 90});
245
245
  * ```
246
246
  */
247
247
  export function sampleCurve2(curve, options = {}) {
@@ -113,7 +113,7 @@ export function edgeTreatmentPointCount(treatment, operation, options = {}) {
113
113
  : exact;
114
114
  if (!Number.isSafeInteger(intervals) || intervals < 1)
115
115
  fail(operation, "Smooth treatment segments must be a positive safe integer.");
116
- assertSamplingCount(intervals, operation, Math.min(policy?.maximumSegments ?? selected.limits.maxCircularSegments, selected.limits.maxCircularSegments));
116
+ assertSamplingCount(intervals, operation, Math.min(policy?.maxSegments ?? selected.limits.maxCircularSegments, selected.limits.maxCircularSegments));
117
117
  }
118
118
  assertSamplingCount(intervals + 1, operation, selected.limits.maxProfilePoints);
119
119
  return intervals + 1;
@@ -1,4 +1,5 @@
1
1
  import { GeometryError } from "./errors.js";
2
+ import { vector2Data } from "./math/vector-value.js";
2
3
  import { assertPositivePrimitive, assertPrimitiveOptions } from "./primitive-resolvers.js";
3
4
  import { resolveGeometryResolution } from "./resolution.js";
4
5
  import { assertSamplingCount, resolveGeometrySamplingLimits } from "./sampling-limits.js";
@@ -12,17 +13,13 @@ export function resolveExtrusionControls(height, options, operation) {
12
13
  operation,
13
14
  });
14
15
  }
15
- const twistDegrees = options.twistDegrees ?? 0;
16
- if (!Number.isFinite(twistDegrees)) {
17
- throw new GeometryError("NON_FINITE_VALUE", "twistDegrees must be finite.", { operation });
16
+ const twist = options.twist ?? 0;
17
+ if (!Number.isFinite(twist)) {
18
+ throw new GeometryError("NON_FINITE_VALUE", "twist must be finite.", { operation });
18
19
  }
19
20
  const scaleTop = options.scaleTop ?? 1;
20
- if (typeof scaleTop !== "number" && (!Array.isArray(scaleTop) || scaleTop.length !== 2)) {
21
- throw new GeometryError("INVALID_ARGUMENT", "scaleTop must be a number or an exact XY tuple.", {
22
- operation,
23
- });
24
- }
25
- const scales = typeof scaleTop === "number" ? [scaleTop, scaleTop] : scaleTop;
21
+ const values = typeof scaleTop === "number" ? [scaleTop, scaleTop] : vector2Data(scaleTop);
22
+ const scales = [values[0], values[1]];
26
23
  if (!Number.isFinite(scales[0]) || !Number.isFinite(scales[1])) {
27
24
  throw new GeometryError("NON_FINITE_VALUE", "scaleTop values must be finite.", { operation });
28
25
  }
@@ -34,7 +31,7 @@ export function resolveExtrusionControls(height, options, operation) {
34
31
  }
35
32
  if (options.divisions !== undefined)
36
33
  assertSamplingCount(options.divisions + 2, operation, resolveGeometrySamplingLimits(options.limits).maxPathPoints);
37
- return { scales, twistDegrees, center: options.center ?? false };
34
+ return { scales, twist, center: options.center ?? false };
38
35
  }
39
36
  /**
40
37
  * Resolves intermediate profile copies for linear extrusion from physical curve resolution.
@@ -86,7 +83,7 @@ export function resolveExtrusionDivisions(profile, height, options = {}) {
86
83
  /** @internal Shared sampling preflight over explicit contours, without rebuilding filled topology. */
87
84
  export function resolveExtrusionContourDivisions(contours, height, options) {
88
85
  const operation = "resolveExtrusionDivisions";
89
- const { scales, twistDegrees } = resolveExtrusionControls(height, options, operation);
86
+ const { scales, twist } = resolveExtrusionControls(height, options, operation);
90
87
  const limits = resolveGeometrySamplingLimits(options.limits);
91
88
  let radius = 0, maximumEdgeLength = 0, profileCount = 0;
92
89
  for (const contour of contours) {
@@ -115,7 +112,7 @@ export function resolveExtrusionContourDivisions(contours, height, options) {
115
112
  if (options.divisions !== undefined)
116
113
  return options.divisions;
117
114
  const policy = resolveGeometryResolution(options.resolution, options.limits);
118
- const angle = (Math.abs(twistDegrees) * Math.PI) / 180;
115
+ const angle = (Math.abs(twist) * Math.PI) / 180;
119
116
  const maximumScale = Math.max(1, Math.abs(scales[0]), Math.abs(scales[1]));
120
117
  const scaleChange = Math.max(Math.abs(scales[0] - 1), Math.abs(scales[1] - 1));
121
118
  // A linear scale multiplied by a rotation has second derivative bounded by this magnitude.
@@ -127,13 +124,13 @@ export function resolveExtrusionContourDivisions(contours, height, options) {
127
124
  b = (maximumEdgeLength * (maximumScale * angle + Math.abs(scales[0] - scales[1]))) / 4;
128
125
  const chordSegments = policy.circularSegments === undefined
129
126
  ? Math.max(1, Math.ceil((b + Math.hypot(b, 2 * Math.sqrt(a * policy.maxChordError))) /
130
- (2 * policy.maxChordError)), Math.ceil((policy.minimumSegments * Math.abs(twistDegrees)) / 360))
131
- : Math.max(1, Math.ceil((policy.circularSegments * Math.abs(twistDegrees)) / 360));
132
- const angularCap = Math.max(1, scales[0] === scales[1] ? 0 : policy.maximumSegments, Math.ceil((policy.maximumSegments * Math.abs(twistDegrees)) / 360));
127
+ (2 * policy.maxChordError)), Math.ceil((policy.minSegments * Math.abs(twist)) / 360))
128
+ : Math.max(1, Math.ceil((policy.circularSegments * Math.abs(twist)) / 360));
129
+ const angularCap = Math.max(1, scales[0] === scales[1] ? 0 : policy.maxSegments, Math.ceil((policy.maxSegments * Math.abs(twist)) / 360));
133
130
  if (chordSegments > angularCap) {
134
131
  throw new GeometryError("COMPLEXITY_LIMIT", "Extrusion surface refinement exceeds the full-circle interval safety limit.", {
135
132
  operation,
136
- details: { requiredSegments: chordSegments, maximumSegments: angularCap },
133
+ details: { requiredSegments: chordSegments, maxSegments: angularCap },
137
134
  });
138
135
  }
139
136
  const angularTravel = radius * maximumScale * angle;
@@ -7,7 +7,7 @@ export { computeTriangleMeshCentroid } from "./mesh/mesh-centroid.js";
7
7
  export { matchProfiles, } from "./profiles/matched.js";
8
8
  export { heightfieldMesh, preflightHeightfield, } from "./heightfield.js";
9
9
  export { preflightThreadedRodSolid as preflightThreadedRod, preflightInternalThreadCutterSolid as preflightInternalThreadCutter, preflightThreadedNutSolid as preflightThreadedNut, } from "./mechanical/thread-solids.js";
10
- export { anchorFrame3, attachTransform, boxAnchor3, createAnchor3, cylinderAnchor3, } from "./anchors.js";
10
+ export { anchorFrame3, attachmentTransform3, boxAnchor3, anchor3, cylinderAnchor3, } from "./anchors.js";
11
11
  export { defaultGeometrySamplingLimits, resolveGeometrySamplingLimits, } from "./sampling-limits.js";
12
12
  export { GeometryError, isGeometryError, } from "./errors.js";
13
13
  export { resolveExtrusionDivisions, } from "./extrusion.js";
@@ -18,20 +18,19 @@ export { add2, subtract2, scale2, dot2, cross2, length2, distance2, normalize2,
18
18
  export { add3, cross3, dot3, length3, distance3, lerp3, normalize3, projectOntoPlane3, scale3, subtract3, } from "./math/vector3.js";
19
19
  export { minimumCylindricalGearToothCountWithoutUndercut, resolveCylindricalGear, resolveCylindricalGearPair, resolveRackPitch, sampleCylindricalGearOutline, sampleInternalCylindricalGearSpaceOutline, sampleRackToothPath, } from "./mechanical/gears.js";
20
20
  export { measureInternalCylindricalGearPairMotion, } from "./mechanical/gear-motion.js";
21
- export { METRIC_FASTENER_STANDARDS, getMetricClearanceHole, getMetricFastenerStandard, } from "./mechanical/standards.js";
22
- export { buildHelicalThreadRidgeMesh, buildHelicalThreadSolidMesh, } from "./mechanical/thread-mesh.js";
23
- export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, createThreadProfile, } from "./mechanical/thread-profiles.js";
21
+ export { METRIC_FASTENER_STANDARDS, getMetricClearanceHoleDiameter, getMetricFastenerStandard, } from "./mechanical/standards.js";
22
+ export { helicalThreadRidgeMesh, helicalThreadSolidMesh } from "./mechanical/thread-mesh.js";
23
+ export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, threadProfile, } from "./mechanical/thread-profiles.js";
24
24
  export { preflightHelicalThreadSolidMesh, } from "./mechanical/thread-mesh-plan.js";
25
25
  export { sampleConventionalThreadHelices as sampleThreadHelices, } from "./mechanical/thread-helices.js";
26
26
  export { PRINTABLE_THREAD_FIT_POLICIES, compensateThreadDiameters, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./mechanical/threads.js";
27
- export { analyzeTriangleMesh, joinTriangleMeshes, measureTriangleMesh, meshBounds, reverseTriangleMesh, transformTriangleMesh, validateTriangleMesh, } from "./mesh/mesh.js";
28
- export { createTriangleMeshSignature, } from "./mesh/mesh-signature.js";
27
+ export { analyzeTriangleMesh, joinTriangleMeshes, meshBounds, reverseTriangleMesh, transformTriangleMesh, validateTriangleMesh, } from "./mesh/mesh.js";
28
+ export { computeTriangleMeshSignature, } from "./mesh/mesh-signature.js";
29
29
  export { optimizePlanarPatches, } from "./mesh/mesh-planar.js";
30
30
  export { analyzeTriangleMeshQuality, } from "./mesh/mesh-quality.js";
31
31
  export { computeClosedParallelTransportFrames, computeParallelTransportFrames, } from "./paths/frames.js";
32
32
  export { sampleHelix } from "./paths/helix.js";
33
- export { cumulativePathLengths, pathLength } from "./paths/path.js";
34
- export { closestPointOnPath, } from "./paths/closest-point.js";
33
+ export { path2, path3, } from "./paths/path-value.js";
35
34
  export { distributeAlongPath, roundClosedPolylinePath, } from "./paths/planar.js";
36
35
  export { circleContour, rectangleContour, regularPolygonContour, starContour, } from "./profiles/profiles.js";
37
36
  export { closeToAxis, sampleSideProfile, } from "./profiles/side-profile.js";
@@ -42,10 +41,10 @@ export { contourContainsPoint, normalizeContour, normalizePolygon, normalizeRegi
42
41
  export { resolveAlignedCircularSegments, resolveArcSegments, resolveCircularSegments, } from "./resolution.js";
43
42
  export { revolveMesh } from "./revolve/revolve-mesh.js";
44
43
  export { preflightSvgRegion, } from "./svg-import.js";
45
- export { strokePathRegion, } from "./stroke-path.js";
44
+ export { strokeRegionData, } from "./stroke-path.js";
46
45
  export { sweepMesh } from "./sweeps/sweep-mesh.js";
47
46
  export { DEFAULT_GEOMETRY_TOLERANCE, resolveGeometryTolerance, } from "./tolerance.js";
48
- export { transformContour, transformPath2, transformPath3, transformRegionData, } from "./transform-geometry.js";
47
+ export { transformRegionData } from "./transform-geometry.js";
49
48
  export { IDENTITY_TRANSFORM3, applyTransformDirection3, applyTransformPoint3, composeTransform3, eulerTransform3, frameTransform3, inverseTransform3, rotationTransform3, scaleTransform3, transformDeterminant3, translationTransform3, validateTransform3, } from "./transform3.js";
50
49
  export { sampleTextContours } from "./text-contours.js";
51
50
  export { sampleCurve2, sampleCurve3 } from "./curves/sampling.js";
@@ -1,15 +1,15 @@
1
1
  import { GeometryError } from "../errors.js";
2
- import { measureTriangleMesh, validateTriangleMesh } from "../mesh/mesh.js";
2
+ import { analyzeTriangleMesh, validateTriangleMesh } from "../mesh/mesh.js";
3
3
  import { assertMeshAllocationWithinLimits } from "../model-limits.js";
4
4
  import { writeMeshVertex } from "../numeric.js";
5
5
  import { triangulateContour } from "./loft-triangulation.js";
6
6
  /** @internal Pure closed simple-contour strips, retaining repeated correspondence slots as shared physical vertices. */
7
7
  export function simpleLoftMesh(geometry, limits) {
8
8
  const count = geometry.world[0][0].length, rowCount = geometry.world.length;
9
- const maximumVertices = count * rowCount, maximumTriangles = 2 * count * (rowCount - 1) + 2 * (count - 2);
10
- const bytes = 12 * (maximumVertices + maximumTriangles);
11
- assertMeshAllocationWithinLimits(maximumVertices, maximumTriangles, bytes, "loftMesh", limits);
12
- const positions = new Float32Array(maximumVertices * 3), indices = new Uint32Array(maximumTriangles * 3);
9
+ const maxVertices = count * rowCount, maximumTriangles = 2 * count * (rowCount - 1) + 2 * (count - 2);
10
+ const bytes = 12 * (maxVertices + maximumTriangles);
11
+ assertMeshAllocationWithinLimits(maxVertices, maximumTriangles, bytes, "loftMesh", limits);
12
+ const positions = new Float32Array(maxVertices * 3), indices = new Uint32Array(maximumTriangles * 3);
13
13
  let vertexCount = 0, cursor = 0;
14
14
  const rows = geometry.world.map((contours, row) => {
15
15
  const points = [], vertices = [], slots = [];
@@ -78,7 +78,7 @@ export function simpleLoftMesh(geometry, limits) {
78
78
  positions: positions.slice(0, vertexCount * 3),
79
79
  indices: indices.slice(0, cursor),
80
80
  };
81
- const volume = measureTriangleMesh(mesh).signedVolume;
81
+ const volume = analyzeTriangleMesh(mesh).signedVolume;
82
82
  if (volume === 0)
83
83
  throw new GeometryError("DEGENERATE_GEOMETRY", "Loft stations collapse to zero enclosed volume.", { operation: "loftMesh" });
84
84
  if (volume < 0)
@@ -1,6 +1,7 @@
1
1
  import { GeometryError } from "../errors.js";
2
2
  import { resolveExtrusionControls, resolveExtrusionDivisions, } from "../extrusion.js";
3
3
  import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../model-limits.js";
4
+ import { capturePath2Input, path2InputData } from "../paths/path-value.js";
4
5
  import { assertSamplingCount } from "../sampling-limits.js";
5
6
  import { pointLoftProfile, prepareLoftGeometry } from "./loft-geometry.js";
6
7
  import {} from "./loft-options.js";
@@ -14,6 +15,7 @@ export { triangulateContour } from "./loft-triangulation.js";
14
15
  * Both ends use ear-clipped caps, supporting concave profiles without center fans.
15
16
  * Intermediate slices interpolate placed world vertices, never frame axes.
16
17
  * Transformed coordinates must fit finite Float32 mesh storage.
18
+ * Path2 profiles must be closed; raw point collections are interpreted as closed.
17
19
  *
18
20
  * @example Loft with explicit point correspondence
19
21
  * ```ts
@@ -30,21 +32,27 @@ export function loftMesh(stations, options) {
30
32
  throw new GeometryError("INVALID_ARGUMENT", "Loft requires at least two stations.", {
31
33
  operation: "loftMesh",
32
34
  });
33
- const input = stations;
34
- assertSamplingCount(input.length, "loftMesh", limits.maxPathPoints);
35
- assertSamplingCount(input.reduce((sum, station) => {
36
- if (!Array.isArray(station.profile))
37
- throw new GeometryError("INVALID_ARGUMENT", "Pure loft profiles must be ordered point arrays.", { operation: "loftMesh" });
38
- return sum + station.profile.length;
39
- }, 0), "loftMesh", 1_000_000);
40
- const profiles = input.map((station) => ({
41
- ...station,
42
- profile: pointLoftProfile(station.profile),
35
+ assertSamplingCount(stations.length, "loftMesh", limits.maxPathPoints);
36
+ const inputs = stations;
37
+ const input = inputs.map(({ profile, ...placement }) => ({
38
+ ...placement,
39
+ source: capturePath2Input(profile, true),
43
40
  }));
41
+ assertSamplingCount(input.reduce((sum, station) => sum + station.source.count, 0), "loftMesh", 1_000_000);
42
+ let remaining = 1_000_000;
43
+ const profiles = input.map(({ source, ...placement }) => {
44
+ const points = path2InputData(source.input, true, {
45
+ maxPathPoints: Math.max(1, Math.min(limits.maxProfilePoints, remaining)),
46
+ }).points;
47
+ assertSamplingCount(points.length, "loftMesh", remaining);
48
+ remaining -= points.length;
49
+ return { ...placement, profile: pointLoftProfile(points) };
50
+ });
44
51
  return simpleLoftMesh(prepareLoftGeometry(profiles, options, limits, false), limits);
45
52
  }
46
53
  /**
47
54
  * Linearly extrudes one simple profile along +Z with robust ear-clipped caps.
55
+ * Path2 profiles must be closed; raw point collections have an implicit closing edge.
48
56
  *
49
57
  * @example Extrude point data without an engine
50
58
  * ```ts
@@ -52,9 +60,9 @@ export function loftMesh(stations, options) {
52
60
  * extrudeMesh(outline, { height: 8 });
53
61
  * ```
54
62
  */
55
- export function extrudeMesh(profile, options) {
63
+ export function extrudeMesh(input, options) {
56
64
  const { height } = options;
57
- const { center, scales, twistDegrees } = resolveExtrusionControls(height, options, "extrudeMesh");
65
+ const { center, scales, twist } = resolveExtrusionControls(height, options, "extrudeMesh");
58
66
  if (!Number.isFinite(height) || height <= 0) {
59
67
  throw new GeometryError("INVALID_ARGUMENT", "Extrusion height must be finite and positive.", {
60
68
  operation: "extrudeMesh",
@@ -63,6 +71,7 @@ export function extrudeMesh(profile, options) {
63
71
  }
64
72
  const bottom = center ? -height / 2 : 0;
65
73
  const limits = resolveModelingLimits(options.limits);
74
+ const profile = path2InputData(input, true, { maxPathPoints: limits.maxProfilePoints }).points;
66
75
  assertSamplingCount(profile.length, "extrudeMesh", limits.maxProfilePoints);
67
76
  const divisions = resolveExtrusionDivisions(profile, height, options);
68
77
  const count = profile.length * (divisions + 2);
@@ -76,7 +85,7 @@ export function extrudeMesh(profile, options) {
76
85
  });
77
86
  const stations = Array.from({ length: divisions + 2 }, (_, index) => {
78
87
  const amount = index / (divisions + 1);
79
- const angle = ((twistDegrees * Math.PI) / 180) * amount;
88
+ const angle = ((twist * Math.PI) / 180) * amount;
80
89
  const cosine = Math.cos(angle), sine = Math.sin(angle);
81
90
  const sx = 1 + (scales[0] - 1) * amount, sy = 1 + (scales[1] - 1) * amount;
82
91
  return {
@@ -1,5 +1,5 @@
1
1
  // A versioned realm protocol lets separately bundled authoring values cross the host boundary.
2
- const immutableMath = Symbol.for("@metamesh/modeling/immutable-math/6");
2
+ const immutableMath = Symbol.for("@metamesh/modeling/immutable-math/7");
3
3
  /**
4
4
  * Brands and freezes only this constructor's prototype. Pure-annotated callers let bundlers
5
5
  * discard unused classes without dropping initialization for classes that remain reachable.
@@ -71,12 +71,12 @@ export function measureInternalCylindricalGearPairMotion(spec, options = {}) {
71
71
  const ringSpace = sampleInternalCylindricalGearSpaceOutline(spec.driven, options.outline);
72
72
  const ringTipRadius = pair.driven.pitchRadius - pair.driven.addendum;
73
73
  const contactWindow = contactWindowPolygon(pair.centerDistance, pair.driver.outsideRadius, ringTipRadius);
74
- const initialRingPhase = pair.driven.toothCount % 2 === 0 ? 0 : pair.driven.angularPitch / 2;
75
- const initialDriverPhase = pair.driver.toothCount % 2 === 0 ? 0 : pair.driver.angularPitch / 2;
74
+ const initialRingPhase = pair.driven.toothCount % 2 === 0 ? 0 : pair.driven.angularPitchRadians / 2;
75
+ const initialDriverPhase = pair.driver.toothCount % 2 === 0 ? 0 : pair.driver.angularPitchRadians / 2;
76
76
  let maximumOverlapArea = 0;
77
77
  let maximumPhase = initialDriverPhase;
78
78
  for (let sample = 0; sample < samples; sample += 1) {
79
- const phase = (pair.driver.angularPitch * sample) / samples;
79
+ const phase = (pair.driver.angularPitchRadians * sample) / samples;
80
80
  const driverPhase = initialDriverPhase + phase;
81
81
  const drivenPhase = initialRingPhase + phase / pair.ratio;
82
82
  const posedDriver = clippingPolygon(transformedLoop(driver, driverPhase));