@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,13 @@ import { isImmutableMathValue } from "../geometry/math/immutable-value.js";
3
3
  import { geometryRecipe, isGeometryRecipe } from "./geometry-recipes.js";
4
4
  import { adoptImmutableBuffer, immutableBuffer, immutableBufferView, isImmutableBuffer, } from "./immutable-buffer.js";
5
5
  const mutableBufferMessage = "Generation data cannot contain mutable typed arrays or raw ArrayBuffers. Use immutableBuffer(array) or immutableMesh(mesh) before caching them or declaring dependencies.";
6
+ const capturedMetadata = new WeakMap();
7
+ const noChildren = Object.freeze([]);
8
+ /** Reuses field accounting only for containers captured or deeply validated by this owner. */
9
+ export function generationDataMetadata(value) {
10
+ return capturedMetadata.get(value);
11
+ }
12
+ const scalarBytes = (value) => (typeof value === "string" ? value.length * 2 : 8);
6
13
  /** Iterates plain fields; recipe capture may read each enumerable accessor once. */
7
14
  export function* generationDataEntries(value, captureAccessors = false) {
8
15
  const prototype = Object.getPrototypeOf(value);
@@ -45,9 +52,31 @@ export function generationValueBytes(values, ceiling) {
45
52
  if (seen.has(value))
46
53
  return;
47
54
  seen.add(value);
55
+ const metadata = capturedMetadata.get(value);
56
+ if (metadata !== undefined) {
57
+ if (depth === 128 && metadata.bytes > 0) {
58
+ bytes = Infinity;
59
+ return;
60
+ }
61
+ bytes += 32 + metadata.bytes;
62
+ for (const child of metadata.children)
63
+ visit(child, depth + 1);
64
+ return;
65
+ }
48
66
  if (isImmutableMathValue(value)) {
49
67
  bytes += 32;
50
- visit(mathValueData(value), depth + 1);
68
+ const data = mathValueData(value);
69
+ visit(data, depth + 1);
70
+ if (typeof data === "object" &&
71
+ data !== null &&
72
+ "dimension" in data &&
73
+ (data.dimension === 2 || data.dimension === 3) &&
74
+ "points" in data &&
75
+ Array.isArray(data.points)) {
76
+ // A path retains private numerical tuples as well as its frozen interchange view.
77
+ // Charge both stores conservatively; the outer seen set still counts value aliases once.
78
+ bytes += 64 + data.points.length * (40 + 8 * data.dimension);
79
+ }
51
80
  return;
52
81
  }
53
82
  const array = isImmutableBuffer(value)
@@ -158,14 +187,21 @@ export function compareGenerationValues(left, right) {
158
187
  function mathValueData(value) {
159
188
  for (const name of ["toArray", "toMatrix"]) {
160
189
  const method = Reflect.get(value, name);
161
- if (typeof method === "function")
162
- return Reflect.apply(method, value, []);
190
+ if (typeof method === "function") {
191
+ const data = Reflect.apply(method, value, []);
192
+ // Closure and dimension change path behavior; tuple interchange omits both for empty paths.
193
+ const closed = Reflect.get(value, "closed");
194
+ return typeof closed === "boolean"
195
+ ? { dimension: Reflect.get(value, "dimension"), points: data, closed }
196
+ : data;
197
+ }
163
198
  }
164
199
  throw new TypeError("Immutable math values must expose their canonical numeric data.");
165
200
  }
166
201
  function captureValue(value, mode, readerAllowed = () => false, validated) {
167
202
  const recipeInputs = mode === "recipe";
168
203
  const seen = new Map();
204
+ const metadata = new Map();
169
205
  const copy = (input) => {
170
206
  if (typeof input === "function" && !recipeInputs && !readerAllowed(input))
171
207
  throw new GeometryError("INVALID_ARGUMENT", "Computed values and dependencies cannot contain arbitrary function closures.", { operation: "computed" });
@@ -191,20 +227,42 @@ function captureValue(value, mode, readerAllowed = () => false, validated) {
191
227
  if (input instanceof ArrayBuffer)
192
228
  throw new TypeError(mutableBufferMessage);
193
229
  const entries = generationDataEntries(input, recipeInputs);
230
+ let bytes = 0;
231
+ const children = [];
232
+ const recordField = (key, field) => {
233
+ bytes += 16 + key.length * 2;
234
+ if (typeof field === "object" && field !== null)
235
+ children.push(field);
236
+ else
237
+ bytes += scalarBytes(field);
238
+ };
194
239
  if (mode === "dependency") {
195
240
  if (!Object.isFrozen(input))
196
241
  throw new GeometryError("INVALID_ARGUMENT", "Computed dependencies require deeply immutable objects and arrays. Read params inside the callback, use a computed value, or depend on individual scalar values.", { operation: "computed" });
197
242
  seen.set(input, input);
198
- for (const [, field] of entries)
243
+ for (const [key, field] of entries) {
199
244
  copy(field);
245
+ recordField(key, field);
246
+ }
247
+ metadata.set(input, {
248
+ bytes,
249
+ children: children.length ? Object.freeze(children) : noChildren,
250
+ });
200
251
  return input;
201
252
  }
202
253
  const result = Array.isArray(input)
203
254
  ? new Array(input.length)
204
255
  : Object.create(Object.getPrototypeOf(input) === null ? null : Object.prototype);
205
256
  seen.set(input, result);
206
- for (const [key, field] of entries)
207
- Object.defineProperty(result, key, { value: copy(field), enumerable: true });
257
+ for (const [key, field] of entries) {
258
+ const value = copy(field);
259
+ Object.defineProperty(result, key, { value, enumerable: true });
260
+ recordField(key, value);
261
+ }
262
+ metadata.set(result, {
263
+ bytes,
264
+ children: children.length ? Object.freeze(children) : noChildren,
265
+ });
208
266
  return Object.freeze(result);
209
267
  };
210
268
  const result = copy(value);
@@ -212,6 +270,8 @@ function captureValue(value, mode, readerAllowed = () => false, validated) {
212
270
  if (mode === "dependency")
213
271
  for (const input of seen.keys())
214
272
  validated?.add(input);
273
+ for (const [value, entry] of metadata)
274
+ capturedMetadata.set(value, entry);
215
275
  return result;
216
276
  }
217
277
  /** Validates while capturing immutable data; only explicitly allowed session readers may be functions. */
@@ -139,10 +139,6 @@ export function minkowskiSum(a, b) {
139
139
  export function solidFromMesh(mesh) {
140
140
  return invoke("solidFromMesh", [mesh]);
141
141
  }
142
- /** Copies a handle to manufacturing mesh buffers. */
143
- export function toTriangleMesh(solid) {
144
- return invoke("toTriangleMesh", [solid]);
145
- }
146
142
  /**
147
143
  * Reads a copied, immutable named anchor from this exact active generation.
148
144
  *
@@ -171,7 +167,7 @@ export function polygon(input) {
171
167
  /**
172
168
  * Creates a centered-width native Section along a sampled XY path.
173
169
  *
174
- * Shares caps, joins and physical sampling with Geometry's strokePathRegion. Native union
170
+ * Shares caps, joins and physical sampling with Geometry's strokeRegionData. Native union
175
171
  * resolves overlapping stroke primitives. Session resolution and resource ceilings apply;
176
172
  * closed paths omit the duplicated seam. Returns an immutable deferred recipe.
177
173
  *
@@ -266,7 +262,7 @@ export function extrude(shape, options) {
266
262
  *
267
263
  * // Contour coordinates are [radius, Z].
268
264
  * const [profile] = matchProfiles([rectangleProfile({ size: [4, 16], center: false })]);
269
- * revolve(profile!, { revolveDegrees: 270 });
265
+ * revolve(profile!, { degrees: 270 });
270
266
  * ```
271
267
  */
272
268
  export function revolve(shape, options) {
@@ -276,7 +272,10 @@ export function revolve(shape, options) {
276
272
  export function loft(stations, options) {
277
273
  return invoke("loft", [stations, options]);
278
274
  }
279
- /** Explicit family matching on a shared physical span grid using session or operation resolution. */
275
+ /**
276
+ * Matches a profile family using operation settings over host resolution and limits.
277
+ * Requires active synchronous model execution. Use Geometry's matchProfiles for standalone preparation.
278
+ */
280
279
  export function matchProfiles(profiles, options) {
281
280
  return invoke("matchProfiles", [profiles, options]);
282
281
  }
@@ -359,8 +358,8 @@ export function distance(solid, other) {
359
358
  return invoke("distance", [solid, other]);
360
359
  }
361
360
  /** Copies intersections along the finite directed origin-to-endpoint segment. */
362
- export function rayCast(solid, origin, endpoint) {
363
- return invoke("rayCast", [solid, origin, endpoint]);
361
+ export function castSegment(solid, origin, endpoint) {
362
+ return invoke("castSegment", [solid, origin, endpoint]);
364
363
  }
365
364
  export function components(shape) {
366
365
  return invoke("components", [shape]);
@@ -388,17 +387,17 @@ export function implicit(options) {
388
387
  export function heightfield(options) {
389
388
  return invoke("heightfield", [options]);
390
389
  }
391
- export function linearPattern(source, options) {
392
- return invoke("linearPattern", [source, options]);
390
+ export function linearPattern(...args) {
391
+ return invoke("linearPattern", args);
393
392
  }
394
- export function radialPattern(source, options) {
395
- return invoke("radialPattern", [source, options]);
393
+ export function radialPattern(...args) {
394
+ return invoke("radialPattern", args);
396
395
  }
397
- export function gridPattern(source, options) {
398
- return invoke("gridPattern", [source, options]);
396
+ export function gridPattern(...args) {
397
+ return invoke("gridPattern", args);
399
398
  }
400
- export function pathPattern(source, path, options) {
401
- return invoke("pathPattern", [source, path, options]);
399
+ export function pathPattern(...args) {
400
+ return invoke("pathPattern", args);
402
401
  }
403
402
  /** Helical ridge mesh construction. */
404
403
  export function threadRidge(options) {
@@ -410,9 +409,9 @@ export function threadRidge(options) {
410
409
  * @example Threaded rod
411
410
  * ```ts
412
411
  * import { threadedRod } from "@metamesh/modeling";
413
- * import { createThreadProfile } from "@metamesh/modeling/geometry";
412
+ * import { threadProfile } from "@metamesh/modeling/geometry";
414
413
  *
415
- * const profile = createThreadProfile({ kind: "triangular", pitch: 1.75 });
414
+ * const profile = threadProfile({ kind: "triangular", pitch: 1.75 });
416
415
  * threadedRod({ nominalMajorDiameter: 12, length: 24, profile, fit: "normal" });
417
416
  * ```
418
417
  */
@@ -425,8 +424,8 @@ export function threadedRod(options) {
425
424
  * @example Internal thread
426
425
  * ```ts
427
426
  * import { cylinder, internalThreadCutter } from "@metamesh/modeling";
428
- * import { createThreadProfile } from "@metamesh/modeling/geometry";
429
- * const profile = createThreadProfile({ kind: "triangular", pitch: 1.75 });
427
+ * import { threadProfile } from "@metamesh/modeling/geometry";
428
+ * const profile = threadProfile({ kind: "triangular", pitch: 1.75 });
430
429
  * const body = cylinder({ diameter: 20, height: 12, center: false });
431
430
  * const cutter = internalThreadCutter({ nominalMajorDiameter: 12, length: 12, profile });
432
431
  * body.subtract([cutter]);
@@ -441,24 +440,24 @@ export function internalThreadCutter(options) {
441
440
  * @example Threaded nut
442
441
  * ```ts
443
442
  * import { threadedNut } from "@metamesh/modeling";
444
- * import { createThreadProfile } from "@metamesh/modeling/geometry";
443
+ * import { threadProfile } from "@metamesh/modeling/geometry";
445
444
  *
446
- * const profile = createThreadProfile({ kind: "triangular", pitch: 1.75 });
445
+ * const profile = threadProfile({ kind: "triangular", pitch: 1.75 });
447
446
  * threadedNut({ nominalMajorDiameter: 12, thickness: 8, width: 20, shape: "hex", profile, fit: "normal" });
448
447
  * ```
449
448
  */
450
449
  export function threadedNut(options) {
451
450
  return invoke("threadedNut", [options]);
452
451
  }
453
- /** Allocation-free external-thread facts. */
452
+ /** External-thread facts using host resolution and limits; requires active synchronous model execution. */
454
453
  export function preflightThreadedRod(options) {
455
454
  return invoke("preflightThreadedRod", [options]);
456
455
  }
457
- /** Allocation-free internal-thread facts. */
456
+ /** Internal-thread facts using host resolution and limits; requires active synchronous model execution. */
458
457
  export function preflightInternalThreadCutter(options) {
459
458
  return invoke("preflightInternalThreadCutter", [options]);
460
459
  }
461
- /** Allocation-free nut/cutter facts. */
460
+ /** Nut/cutter facts using host resolution and limits; requires active synchronous model execution. */
462
461
  export function preflightThreadedNut(options) {
463
462
  return invoke("preflightThreadedNut", [options]);
464
463
  }
@@ -21,7 +21,7 @@ const operationBehaviors = {
21
21
  compose: "solid",
22
22
  minkowskiSum: "solid",
23
23
  solidFromMesh: "solid",
24
- setTolerance: "solid",
24
+ withTolerance: "solid",
25
25
  threadRidge: "solid",
26
26
  threadedRod: "solid",
27
27
  threadedNut: "solid",
@@ -57,7 +57,7 @@ const operationBehaviors = {
57
57
  inspectSolid: "observation",
58
58
  isEmpty: "observation",
59
59
  distance: "observation",
60
- rayCast: "observation",
60
+ castSegment: "observation",
61
61
  anchor: "observation",
62
62
  matchProfiles: "observation",
63
63
  preflightThreadedRod: "observation",
@@ -144,13 +144,19 @@ function inputKind(value) {
144
144
  return recipe.kind;
145
145
  if ("sections" in value)
146
146
  return "section";
147
- if ("points" in value &&
148
- Array.isArray(value.points) &&
149
- Array.isArray(value.points[0]) &&
150
- value.points[0].length === 2)
147
+ if ("points" in value && Array.isArray(value.points) && pointDimension(value.points[0]) === 2)
151
148
  return "section";
152
149
  return "solid";
153
150
  }
151
+ function pointDimension(value) {
152
+ if (Array.isArray(value))
153
+ return value.length;
154
+ if (typeof value !== "object" || value === null || !("toArray" in value))
155
+ return undefined;
156
+ const method = value.toArray;
157
+ const points = typeof method === "function" ? Reflect.apply(method, value, []) : undefined;
158
+ return Array.isArray(points) ? points.length : undefined;
159
+ }
154
160
  /** Runs every factory during declaration; each placed copy stays deferred until it is used. */
155
161
  function declarePattern(operation, resolution, supplied, declaration) {
156
162
  const plan = patternPlan(operation, supplied, declaration.limits);
@@ -171,7 +177,7 @@ function declarePattern(operation, resolution, supplied, declaration) {
171
177
  operation,
172
178
  });
173
179
  kind = currentKind;
174
- const matrix = plan.transformAt(index);
180
+ const matrix = plan.transformAt(index, kind === "section" ? 2 : 3);
175
181
  copies.push(declareRecipeOperation("transform", resolution, [shape, kind === "section" ? restrictTransform3(matrix) : matrix], declaration));
176
182
  }
177
183
  return Object.freeze(copies);
@@ -26,8 +26,9 @@ const common = {
26
26
  };
27
27
  const solidPrototype = prototype({
28
28
  ...common,
29
+ toTriangleMesh: forward("toTriangleMesh"),
29
30
  attach: forward("attach"),
30
- setTolerance: forward("setTolerance"),
31
+ withTolerance: forward("withTolerance"),
31
32
  projectSection: forward("projectSection"),
32
33
  sliceSection: forward("sliceSection"),
33
34
  });
@@ -1,14 +1,15 @@
1
1
  import { SVGPathData, SVGPathDataTransformer } from "svg-pathdata";
2
+ import { GeometryError } from "../geometry/errors.js";
2
3
  import { createVectorTextLayout } from "./vector-text-layout.js";
3
4
  /** Limits apply before parsing or shaping untrusted font data. */
4
5
  export const MAX_VECTOR_FONT_BYTES = 16 * 1024 * 1024;
5
- function fail(message) {
6
- throw new Error(message);
6
+ function fail(message, code = "INVALID_ARGUMENT") {
7
+ throw new GeometryError(code, message, { operation: "prepareVectorFont" });
7
8
  }
8
9
  function serializeVectorText({ paths, metrics }) {
9
10
  const bounds = metrics.bounds;
10
11
  if (bounds === null || paths.length === 0)
11
- fail("The selected font produced no visible glyph outlines.");
12
+ throw new GeometryError("DEGENERATE_GEOMETRY", "The selected font produced no visible glyph outlines.", { operation: "VectorFont.toSvg" });
12
13
  const d = paths
13
14
  .map((path) => new SVGPathData(path).transform(SVGPathDataTransformer.MATRIX(1, 0, 0, -1, 0, 0)).encode())
14
15
  .join(" ");
@@ -16,11 +17,12 @@ function serializeVectorText({ paths, metrics }) {
16
17
  const height = Math.max(0.001, bounds.max[1] - bounds.min[1]);
17
18
  const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${width}mm" height="${height}mm" viewBox="${bounds.min[0]} ${-bounds.max[1]} ${width} ${height}"><path fill="black" fill-rule="nonzero" d="${d}"/></svg>`;
18
19
  if (svg.length > 256 * 1024)
19
- fail("Text outlines exceed 256 KiB. Use fewer characters or a simpler font.");
20
+ throw new GeometryError("COMPLEXITY_LIMIT", "Text outlines exceed 256 KiB. Use fewer characters or a simpler font.", { operation: "VectorFont.toSvg" });
20
21
  return svg;
21
22
  }
22
23
  /**
23
24
  * Parses bounded font bytes using optional fontkit and WOFF2 peers; no font fetching occurs here.
25
+ * Argument and resource failures use GeometryError; parser and decoder exceptions propagate unchanged.
24
26
  *
25
27
  * @example Prepare a label before building geometry
26
28
  * ```ts
@@ -31,20 +33,24 @@ function serializeVectorText({ paths, metrics }) {
31
33
  * ```
32
34
  */
33
35
  export async function prepareVectorFont(bytes, options = {}) {
34
- if (bytes.byteLength === 0 || bytes.byteLength > MAX_VECTOR_FONT_BYTES)
36
+ if (bytes.byteLength === 0)
35
37
  fail("Font files must be non-empty and at most 16 MiB.");
38
+ if (bytes.byteLength > MAX_VECTOR_FONT_BYTES)
39
+ fail("Font files must be non-empty and at most 16 MiB.", "COMPLEXITY_LIMIT");
36
40
  const staticWeight = options.staticWeight ?? 400;
37
41
  if (!Number.isInteger(staticWeight) || staticWeight < 1 || staticWeight > 1000)
38
- fail("staticWeight must be an integer from 1 through 1000.");
42
+ fail("staticWeight must be an integer from 1 through 1000.", Number.isFinite(staticWeight) ? "INVALID_ARGUMENT" : "NON_FINITE_VALUE");
39
43
  // Own the original bytes: a caller mutating its buffer must not change later lazy font reads.
40
44
  let decoded = Uint8Array.from(bytes);
41
45
  if (bytes[0] === 0x77 && bytes[1] === 0x4f && bytes[2] === 0x46 && bytes[3] === 0x32) {
42
- const { default: decompress } = await import("woff2-encoder/decompress").catch(() => fail("Install woff2-encoder to prepare WOFF2 fonts with @metamesh/modeling/text."));
46
+ const { default: decompress } = await import("woff2-encoder/decompress");
43
47
  decoded = await decompress(decoded);
44
- if (decoded.byteLength === 0 || decoded.byteLength > 32 * 1024 * 1024)
48
+ if (decoded.byteLength === 0)
45
49
  fail("The decoded font must be non-empty and at most 32 MiB.");
50
+ if (decoded.byteLength > 32 * 1024 * 1024)
51
+ fail("The decoded font must be non-empty and at most 32 MiB.", "COMPLEXITY_LIMIT");
46
52
  }
47
- const fontkit = await import("fontkit").catch(() => fail("Install fontkit to prepare fonts with @metamesh/modeling/text."));
53
+ const fontkit = await import("fontkit");
48
54
  const font = fontkit.create(decoded);
49
55
  if (!("layout" in font))
50
56
  fail("Font collections are not supported.");
@@ -1,19 +1,20 @@
1
1
  import { SVGPathData, SVGPathDataTransformer } from "svg-pathdata";
2
+ import { GeometryError } from "../geometry/errors.js";
2
3
  const MAX_TEXT_LENGTH = 512;
3
4
  const MAX_TEXT_LINES = 16;
4
5
  const MAX_TEXT_GLYPHS = 2048;
5
6
  const MAX_TEXT_COMMANDS = 32000;
6
7
  const MAX_TEXT_PATH_BYTES = 1024 * 1024;
7
8
  const supportedText = /^[\p{Script=Latin}\p{Script=Greek}\p{Script=Cyrillic}\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Common}\p{Script=Inherited}]*$/u;
8
- function fail(message) {
9
- throw new Error(message);
9
+ function fail(message, code = "INVALID_ARGUMENT") {
10
+ throw new GeometryError(code, message, { operation: "VectorFont.layout" });
10
11
  }
11
12
  function checkText(text) {
12
13
  if (text.length > MAX_TEXT_LENGTH)
13
- fail("Text must contain at most 512 characters and 16 lines.");
14
+ fail("Text must contain at most 512 characters and 16 lines.", "COMPLEXITY_LIMIT");
14
15
  const lines = text.replaceAll("\r\n", "\n").replaceAll("\r", "\n").split("\n");
15
16
  if (lines.length > MAX_TEXT_LINES)
16
- fail("Text must contain at most 512 characters and 16 lines.");
17
+ fail("Text must contain at most 512 characters and 16 lines.", "COMPLEXITY_LIMIT");
17
18
  if (!supportedText.test(text) ||
18
19
  /\p{Emoji_Presentation}|\p{Variation_Selector}|[\u200c-\u200f\u202a-\u202e\u2066-\u2069]/u.test(text))
19
20
  fail("This writing system or text direction is not supported yet. Use Latin, Greek, Cyrillic, or horizontal CJK text.");
@@ -27,9 +28,9 @@ function normalizeControls(options, staticWeight) {
27
28
  if (typeof baseline !== "object" || baseline === null || baseline.kind !== "arc")
28
29
  fail("Invalid text baseline; use an arc or omit baseline for horizontal text.");
29
30
  if (!Number.isFinite(baseline.radius) || baseline.radius <= 0 || baseline.radius > 10000)
30
- fail("Arc baseline radius must be positive and at most 10000 mm.");
31
- if (baseline.centerAngleDegrees !== undefined && !Number.isFinite(baseline.centerAngleDegrees))
32
- fail("Arc baseline centerAngleDegrees must be finite.");
31
+ fail("Arc baseline radius must be positive and at most 10000 mm.", Number.isFinite(baseline.radius) ? "INVALID_ARGUMENT" : "NON_FINITE_VALUE");
32
+ if (baseline.centerAngle !== undefined && !Number.isFinite(baseline.centerAngle))
33
+ fail("Arc baseline centerAngle must be finite.", "NON_FINITE_VALUE");
33
34
  if (baseline.direction !== undefined &&
34
35
  baseline.direction !== "clockwise" &&
35
36
  baseline.direction !== "counterclockwise")
@@ -46,18 +47,18 @@ function normalizeControls(options, staticWeight) {
46
47
  ? undefined
47
48
  : {
48
49
  radius: baseline.radius,
49
- centerAngleDegrees: (((baseline.centerAngleDegrees ?? 90) % 360) + 360) % 360,
50
+ centerAngle: (((baseline.centerAngle ?? 90) % 360) + 360) % 360,
50
51
  direction: baseline.direction ?? "clockwise",
51
52
  },
52
53
  };
53
54
  if (!Number.isFinite(controls.fontSize) || controls.fontSize <= 0 || controls.fontSize > 10000)
54
- fail("fontSize must be positive and at most 10000 mm.");
55
+ fail("fontSize must be positive and at most 10000 mm.", Number.isFinite(controls.fontSize) ? "INVALID_ARGUMENT" : "NON_FINITE_VALUE");
55
56
  if (!Number.isInteger(controls.fontWeight) ||
56
57
  controls.fontWeight < 1 ||
57
58
  controls.fontWeight > 1000)
58
- fail("fontWeight must be an integer from 1 through 1000.");
59
+ fail("fontWeight must be an integer from 1 through 1000.", Number.isFinite(controls.fontWeight) ? "INVALID_ARGUMENT" : "NON_FINITE_VALUE");
59
60
  if (!Number.isFinite(controls.letterSpacing) || Math.abs(controls.letterSpacing) > 100)
60
- fail("letterSpacing must be finite and between -100 and 100 mm.");
61
+ fail("letterSpacing must be finite and between -100 and 100 mm.", Number.isFinite(controls.letterSpacing) ? "INVALID_ARGUMENT" : "NON_FINITE_VALUE");
61
62
  if (controls.align !== "left" && controls.align !== "center" && controls.align !== "right")
62
63
  fail("Invalid text alignment.");
63
64
  if (controls.verticalAlign !== "baseline" &&
@@ -69,7 +70,7 @@ function normalizeControls(options, staticWeight) {
69
70
  fail("Arc text requires baseline vertical alignment.");
70
71
  if (controls.lineHeight !== undefined &&
71
72
  (!Number.isFinite(controls.lineHeight) || controls.lineHeight < 0.5 || controls.lineHeight > 5))
72
- fail("lineHeight must be between 0.5 and 5.");
73
+ fail("lineHeight must be between 0.5 and 5.", Number.isFinite(controls.lineHeight) ? "INVALID_ARGUMENT" : "NON_FINITE_VALUE");
73
74
  return controls;
74
75
  }
75
76
  function selectFont(font, weight, staticWeight) {
@@ -130,8 +131,10 @@ function shapeLines(font, lines, controls) {
130
131
  // CSS tracking disables optional ligatures, retaining required shaping and combining marks.
131
132
  const run = font.layout(line, controls.letterSpacing === 0 ? undefined : { liga: false, clig: false });
132
133
  glyphs += run.glyphs.length;
133
- if (run.glyphs.length !== run.positions.length || glyphs > MAX_TEXT_GLYPHS)
134
- fail("The font returned an invalid or excessive glyph run.");
134
+ if (run.glyphs.length !== run.positions.length)
135
+ fail("The font returned an invalid glyph run.");
136
+ if (glyphs > MAX_TEXT_GLYPHS)
137
+ fail("The font returned an excessive glyph run.", "COMPLEXITY_LIMIT");
135
138
  let advance = 0;
136
139
  let spacingSteps = -1;
137
140
  for (let index = 0; index < run.glyphs.length; index++) {
@@ -139,14 +142,14 @@ function shapeLines(font, lines, controls) {
139
142
  fail("The selected font shaped a missing glyph.");
140
143
  const position = run.positions[index];
141
144
  if (![position.xAdvance, position.yAdvance, position.xOffset, position.yOffset].every(Number.isFinite))
142
- fail("The font returned a non-finite glyph position.");
145
+ fail("The font returned a non-finite glyph position.", "NON_FINITE_VALUE");
143
146
  if (index === 0 || position.xAdvance !== 0)
144
147
  spacingSteps++;
145
148
  advance += position.xAdvance;
146
149
  }
147
150
  const advanceWidth = advance * scale + Math.max(0, spacingSteps) * controls.letterSpacing;
148
151
  if (!Number.isFinite(advanceWidth) || advanceWidth < 0)
149
- fail("The shaped text advance must be finite and non-negative after letter spacing.");
152
+ fail("The shaped text advance must be finite and non-negative after letter spacing.", Number.isFinite(advanceWidth) ? "INVALID_ARGUMENT" : "NON_FINITE_VALUE");
150
153
  return { run, advanceWidth };
151
154
  });
152
155
  }
@@ -158,8 +161,10 @@ function convertCommand({ command, args }) {
158
161
  : command === "bezierCurveTo"
159
162
  ? 6
160
163
  : 2;
161
- if (args.length !== argumentCount || !args.every(Number.isFinite))
164
+ if (args.length !== argumentCount)
162
165
  fail("The font returned invalid glyph path coordinates.");
166
+ if (!args.every(Number.isFinite))
167
+ fail("The font returned invalid glyph path coordinates.", "NON_FINITE_VALUE");
163
168
  switch (command) {
164
169
  case "moveTo":
165
170
  return { type: SVGPathData.MOVE_TO, relative: false, x: args[0], y: args[1] };
@@ -234,23 +239,23 @@ function buildLayout(font, fontMetrics, lines, controls) {
234
239
  const source = run.glyphs[index].path.commands;
235
240
  commands += source.length;
236
241
  if (commands > MAX_TEXT_COMMANDS)
237
- fail("Text outlines exceed the supported complexity. Use fewer characters or a simpler font.");
242
+ fail("Text outlines exceed the supported complexity. Use fewer characters or a simpler font.", "COMPLEXITY_LIMIT");
238
243
  if (source.length > 0) {
239
244
  // Preserve full precision: fontkit's toSVG() rounds before scaling and reparsing it wastes work.
240
245
  const path = new SVGPathData(source.map(convertCommand)).transform(SVGPathDataTransformer.MATRIX(scale, 0, 0, scale, (x + position.xOffset) * scale + spacingSteps * controls.letterSpacing + lineX, (y + position.yOffset) * scale - lineIndex * lineHeight));
241
246
  let bounds = path.getBounds();
242
247
  if (![bounds.minX, bounds.minY, bounds.maxX, bounds.maxY].every(Number.isFinite))
243
- fail("The font returned invalid glyph outline bounds.");
248
+ fail("The font returned invalid glyph outline bounds.", "NON_FINITE_VALUE");
244
249
  if (controls.baseline !== undefined) {
245
- const { radius, centerAngleDegrees, direction } = controls.baseline;
250
+ const { radius, centerAngle, direction } = controls.baseline;
246
251
  const clockwise = direction === "clockwise";
247
252
  if (clockwise ? radius + bounds.minY <= 0 : radius - bounds.maxY <= 0)
248
253
  fail("Arc glyph outlines cross the circle's center axis. Increase the radius or reduce text size.");
249
- const angle = (centerAngleDegrees * Math.PI) / 180 + ((clockwise ? -1 : 1) * groupCenter) / radius;
250
- const rotation = angle + (clockwise ? -Math.PI / 2 : Math.PI / 2);
251
- const cosine = Math.cos(rotation);
252
- const sine = Math.sin(rotation);
253
- path.transform(SVGPathDataTransformer.MATRIX(cosine, sine, -sine, cosine, radius * Math.cos(angle) - cosine * groupCenter, radius * Math.sin(angle) - sine * groupCenter));
254
+ const angleRadians = (centerAngle * Math.PI) / 180 + ((clockwise ? -1 : 1) * groupCenter) / radius;
255
+ const rotationRadians = angleRadians + (clockwise ? -Math.PI / 2 : Math.PI / 2);
256
+ const cosine = Math.cos(rotationRadians);
257
+ const sine = Math.sin(rotationRadians);
258
+ path.transform(SVGPathDataTransformer.MATRIX(cosine, sine, -sine, cosine, radius * Math.cos(angleRadians) - cosine * groupCenter, radius * Math.sin(angleRadians) - sine * groupCenter));
254
259
  bounds = path.getBounds();
255
260
  }
256
261
  minX = Math.min(minX, bounds.minX);
@@ -278,7 +283,7 @@ function buildLayout(font, fontMetrics, lines, controls) {
278
283
  // Path commands and finite numeric coordinates are ASCII, so length is the encoded byte count.
279
284
  bytes += result.length;
280
285
  if (bytes > MAX_TEXT_PATH_BYTES)
281
- fail("Text outlines exceed 1 MiB. Use fewer characters or a simpler font.");
286
+ fail("Text outlines exceed 1 MiB. Use fewer characters or a simpler font.", "COMPLEXITY_LIMIT");
282
287
  return result;
283
288
  });
284
289
  const metrics = Object.freeze({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamesh/modeling",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "description": "Scoped solid modeling and pure geometry foundations for Node and browsers.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -1,34 +0,0 @@
1
- # ClosestPointOnPathOptions
2
-
3
- Topology and work ceiling for a closest-point query on a sampled path.
4
-
5
- ## Properties
6
-
7
- ### closed?
8
-
9
-
10
-
11
- `readonly` `optional` **closed?**: `boolean`
12
-
13
-
14
-
15
- Include the last-to-first edge without duplicating the seam point. Defaults to false.
16
-
17
- ***
18
-
19
- ### limits?
20
-
21
-
22
-
23
- `readonly` `optional` **limits?**: `Partial`\<[`GeometrySamplingLimits`](GeometrySamplingLimits.md)\>
24
-
25
-
26
-
27
- Explicit path point ceiling; defaults to the package sampling limits.
28
-
29
-
30
- ## Related APIs
31
-
32
- - [GeometrySamplingLimits](GeometrySamplingLimits.md)
33
-
34
- Package: `@metamesh/modeling@0.14.0`.
@@ -1,65 +0,0 @@
1
- # ClosestPointOnPathResult
2
-
3
- Closest position on a sampled path, measured in millimetres.
4
-
5
- ## Type Parameters
6
-
7
- ### Point
8
-
9
- `Point` *extends* [`Vector2Tuple`](Vector2Tuple.md) \| [`Vector3Tuple`](Vector3Tuple.md)
10
-
11
- ## Properties
12
-
13
- ### point
14
-
15
-
16
-
17
- `readonly` **point**: `Point`
18
-
19
-
20
-
21
- Copied position on the selected edge.
22
-
23
- ***
24
-
25
- ### distance
26
-
27
-
28
-
29
- `readonly` **distance**: `number`
30
-
31
-
32
-
33
- Euclidean distance from the query point to the path.
34
-
35
- ***
36
-
37
- ### edgeIndex
38
-
39
-
40
-
41
- `readonly` **edgeIndex**: `number`
42
-
43
-
44
-
45
- Zero-based starting vertex of the selected edge. Equal distances keep the first edge.
46
-
47
- ***
48
-
49
- ### fraction
50
-
51
-
52
-
53
- `readonly` **fraction**: `number`
54
-
55
-
56
-
57
- Clamped interpolation fraction from the edge's start to its end.
58
-
59
-
60
- ## Related APIs
61
-
62
- - [Vector2Tuple](Vector2Tuple.md)
63
- - [Vector3Tuple](Vector3Tuple.md)
64
-
65
- Package: `@metamesh/modeling@0.14.0`.
@@ -1,14 +0,0 @@
1
- # Path2
2
-
3
- An ordered, open sequence of two-dimensional points.
4
-
5
- **Path2** = readonly [`Vector2Tuple`](Vector2Tuple.md)[]
6
-
7
-
8
-
9
-
10
- ## Related APIs
11
-
12
- - [Vector2Tuple](Vector2Tuple.md)
13
-
14
- Package: `@metamesh/modeling@0.14.0`.