@metamesh/modeling 0.13.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 (740) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +67 -9
  3. package/dist/api/engine.d.ts +14 -7
  4. package/dist/api/geometry.d.ts +787 -447
  5. package/dist/api/index.d.ts +637 -250
  6. package/dist/api/text.d.ts +6 -4
  7. package/dist/docs/guides/concepts.md +135 -17
  8. package/dist/docs/guides/fonts.md +8 -0
  9. package/dist/docs/guides/fundamentals.md +8 -3
  10. package/dist/docs/guides/generation.md +6 -4
  11. package/dist/docs/guides/hosting.md +27 -14
  12. package/dist/docs/guides/recipes.md +82 -11
  13. package/dist/docs/manifest.json +1911 -856
  14. package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
  15. package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
  16. package/dist/docs/reference/engine/GenerationOptions.md +1 -1
  17. package/dist/docs/reference/engine/GeometryResource.md +1 -1
  18. package/dist/docs/reference/engine/ModelDependencies.md +1 -1
  19. package/dist/docs/reference/engine/ModelEngine.md +1 -1
  20. package/dist/docs/reference/engine/ModelEngineOptions.md +4 -8
  21. package/dist/docs/reference/engine/ModelSession.md +1 -1
  22. package/dist/docs/reference/engine/ModelSnapshot.md +20 -9
  23. package/dist/docs/reference/engine/SessionOptions.md +1 -1
  24. package/dist/docs/reference/engine/SnapshotPart.md +4 -4
  25. package/dist/docs/reference/engine/categories/host-lifecycle.md +2 -2
  26. package/dist/docs/reference/engine/createModelEngine.md +3 -3
  27. package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
  28. package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
  29. package/dist/docs/reference/engine/validateModel.md +1 -1
  30. package/dist/docs/reference/engine.md +2 -2
  31. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
  32. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +17 -4
  33. package/dist/docs/reference/geometry/{Anchor3.md → Anchor3-type.md} +9 -5
  34. package/dist/docs/reference/geometry/ArcCurve2.md +7 -7
  35. package/dist/docs/reference/geometry/ArcCurve3.md +9 -9
  36. package/dist/docs/reference/geometry/{AttachTransformOptions.md → AttachOptions.md} +14 -5
  37. package/dist/docs/reference/geometry/AxisAngleRotation3.md +6 -1
  38. package/dist/docs/reference/geometry/Bounds2.md +4 -4
  39. package/dist/docs/reference/geometry/Bounds3.md +4 -4
  40. package/dist/docs/reference/geometry/BoundsFit2.md +3 -3
  41. package/dist/docs/reference/geometry/BoundsFit3.md +3 -3
  42. package/dist/docs/reference/geometry/BoundsFitOptions.md +1 -1
  43. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +1 -1
  44. package/dist/docs/reference/geometry/BoxAnchorFace.md +8 -1
  45. package/dist/docs/reference/geometry/BoxAnchorOptions.md +8 -4
  46. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  47. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  48. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  49. package/dist/docs/reference/geometry/BoxOptions.md +10 -10
  50. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +1 -1
  51. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +1 -1
  52. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  53. package/dist/docs/reference/geometry/CircleContourOptions.md +1 -1
  54. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
  55. package/dist/docs/reference/geometry/CircularResolutionOptions.md +107 -0
  56. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +1 -1
  57. package/dist/docs/reference/geometry/ClearanceHoleFit.md +1 -1
  58. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +1 -1
  59. package/dist/docs/reference/geometry/Contour.md +3 -3
  60. package/dist/docs/reference/geometry/ContourCurve.md +1 -1
  61. package/dist/docs/reference/geometry/ContourPoint.md +1 -1
  62. package/dist/docs/reference/geometry/ContourSegment.md +1 -1
  63. package/dist/docs/reference/geometry/CorrespondingComponent.md +1 -1
  64. package/dist/docs/reference/geometry/CorrespondingContour.md +1 -1
  65. package/dist/docs/reference/geometry/CorrespondingProfile.md +1 -1
  66. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +1 -1
  67. package/dist/docs/reference/geometry/CubicBezierCurve2.md +6 -6
  68. package/dist/docs/reference/geometry/CubicBezierCurve3.md +6 -6
  69. package/dist/docs/reference/geometry/Curve2.md +1 -1
  70. package/dist/docs/reference/geometry/Curve3.md +1 -1
  71. package/dist/docs/reference/geometry/CurveSamplingOptions.md +5 -3
  72. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +3 -3
  73. package/dist/docs/reference/geometry/CylinderAnchorFace.md +8 -1
  74. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +9 -5
  75. package/dist/docs/reference/geometry/CylinderOptions.md +3 -3
  76. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +3 -3
  77. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +1 -1
  78. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +1 -1
  79. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +3 -3
  80. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +1 -1
  81. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +1 -1
  82. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +1 -1
  83. package/dist/docs/reference/geometry/CylindricalGearSpec.md +6 -6
  84. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  85. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  86. package/dist/docs/reference/geometry/EllipseContourOptions.md +3 -3
  87. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  88. package/dist/docs/reference/geometry/ExtrudeOptions.md +6 -6
  89. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +5 -5
  90. package/dist/docs/reference/geometry/FittedTextLayout.md +1 -1
  91. package/dist/docs/reference/geometry/Frame3.md +6 -6
  92. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  93. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  94. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  95. package/dist/docs/reference/geometry/GeometryResolution.md +14 -5
  96. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +1 -1
  97. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  98. package/dist/docs/reference/geometry/GridPatternOptions.md +11 -5
  99. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
  100. package/dist/docs/reference/geometry/HeightfieldOptions.md +5 -5
  101. package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
  102. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +5 -5
  103. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +6 -6
  104. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +1 -1
  105. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +7 -3
  106. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +6 -6
  107. package/dist/docs/reference/geometry/LineCurve2.md +4 -4
  108. package/dist/docs/reference/geometry/LineCurve3.md +4 -4
  109. package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -5
  110. package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
  111. package/dist/docs/reference/geometry/LoftMeshStation.md +4 -4
  112. package/dist/docs/reference/geometry/LoftOptions.md +1 -1
  113. package/dist/docs/reference/geometry/LoftPlacement.md +1 -1
  114. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +1 -1
  115. package/dist/docs/reference/geometry/MatchProfilesOptions.md +1 -1
  116. package/dist/docs/reference/geometry/MetricFastenerSize.md +1 -1
  117. package/dist/docs/reference/geometry/MetricFastenerStandard.md +1 -1
  118. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +1 -1
  119. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +1 -1
  120. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  121. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
  122. package/dist/docs/reference/geometry/Path2-type.md +192 -0
  123. package/dist/docs/reference/geometry/Path2Data.md +14 -0
  124. package/dist/docs/reference/geometry/Path2Input.md +15 -0
  125. package/dist/docs/reference/geometry/Path3-type.md +192 -0
  126. package/dist/docs/reference/geometry/Path3Data.md +14 -0
  127. package/dist/docs/reference/geometry/Path3Input.md +15 -0
  128. package/dist/docs/reference/geometry/PathFrame.md +5 -5
  129. package/dist/docs/reference/geometry/PathLocation.md +65 -0
  130. package/dist/docs/reference/geometry/PathNormalGuide.md +6 -5
  131. package/dist/docs/reference/geometry/PathOptions.md +34 -0
  132. package/dist/docs/reference/geometry/PathPatternOptions.md +3 -3
  133. package/dist/docs/reference/geometry/PathPlacement.md +4 -4
  134. package/dist/docs/reference/geometry/PathResamplingOptions.md +80 -0
  135. package/dist/docs/reference/geometry/Pivot2Options.md +26 -0
  136. package/dist/docs/reference/geometry/Pivot3Options.md +26 -0
  137. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +1 -1
  138. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +22 -22
  139. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +1 -1
  140. package/dist/docs/reference/geometry/PlanarPatchQuality.md +3 -3
  141. package/dist/docs/reference/geometry/{Polygon.md → PolygonData.md} +2 -2
  142. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +4 -4
  143. package/dist/docs/reference/geometry/PrimitiveAttachment.md +31 -0
  144. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +104 -0
  145. package/dist/docs/reference/geometry/PrintableThreadFit.md +1 -1
  146. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +1 -1
  147. package/dist/docs/reference/geometry/Profile.md +1 -1
  148. package/dist/docs/reference/geometry/ProfileComponent2.md +1 -1
  149. package/dist/docs/reference/geometry/ProfileContour2.md +1 -1
  150. package/dist/docs/reference/geometry/ProfileSpan2.md +3 -3
  151. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +3 -3
  152. package/dist/docs/reference/geometry/RackPitchDimensions.md +1 -1
  153. package/dist/docs/reference/geometry/RackPitchSpec.md +5 -5
  154. package/dist/docs/reference/geometry/RadialPatternOptions.md +17 -22
  155. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  156. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  157. package/dist/docs/reference/geometry/RectangleContourOptions.md +3 -3
  158. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +1 -1
  159. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +1 -1
  160. package/dist/docs/reference/geometry/RectangleProfileOptions.md +3 -3
  161. package/dist/docs/reference/geometry/RegionData.md +14 -0
  162. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
  163. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  164. package/dist/docs/reference/geometry/RevolveOptions.md +9 -4
  165. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  166. package/dist/docs/reference/geometry/RowLayoutOptions.md +1 -1
  167. package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
  168. package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
  169. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
  170. package/dist/docs/reference/geometry/SampledCurve2.md +4 -4
  171. package/dist/docs/reference/geometry/SampledCurve3.md +4 -4
  172. package/dist/docs/reference/geometry/SampledThreadHelices.md +3 -3
  173. package/dist/docs/reference/geometry/SideProfileCurve.md +1 -1
  174. package/dist/docs/reference/geometry/SideProfilePoint.md +1 -1
  175. package/dist/docs/reference/geometry/SideProfileSegment.md +1 -1
  176. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  177. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +3 -3
  178. package/dist/docs/reference/geometry/SphereOptions.md +3 -3
  179. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
  180. package/dist/docs/reference/geometry/StrokeCap.md +7 -0
  181. package/dist/docs/reference/geometry/StrokeJoin.md +7 -0
  182. package/dist/docs/reference/geometry/{StrokePathRegionOptions.md → StrokeOptions.md} +8 -8
  183. package/dist/docs/reference/geometry/SvgImportOptions.md +1 -1
  184. package/dist/docs/reference/geometry/SvgRegionPreflight.md +3 -3
  185. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +13 -13
  186. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +11 -11
  187. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +9 -9
  188. package/dist/docs/reference/geometry/SweepOptions.md +6 -6
  189. package/dist/docs/reference/geometry/SweepOrientation.md +7 -7
  190. package/dist/docs/reference/geometry/ThreadBevelOptions.md +1 -1
  191. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +5 -5
  192. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +1 -1
  193. package/dist/docs/reference/geometry/ThreadEndStyle.md +1 -1
  194. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +1 -1
  195. package/dist/docs/reference/geometry/ThreadHandedness.md +1 -1
  196. package/dist/docs/reference/geometry/ThreadHelixOptions.md +3 -3
  197. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
  198. package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
  199. package/dist/docs/reference/geometry/{ThreadProfile.md → ThreadProfile-type.md} +3 -3
  200. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
  201. package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
  202. package/dist/docs/reference/geometry/ThreadRole.md +1 -1
  203. package/dist/docs/reference/geometry/ThreadedNutBevel.md +1 -1
  204. package/dist/docs/reference/geometry/ThreadedNutOptions.md +6 -6
  205. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +1 -1
  206. package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
  207. package/dist/docs/reference/geometry/ThreadedRodOptions.md +6 -6
  208. package/dist/docs/reference/geometry/TorusOptions.md +8 -8
  209. package/dist/docs/reference/geometry/Transform2-type.md +255 -0
  210. package/dist/docs/reference/geometry/Transform2Input.md +19 -0
  211. package/dist/docs/reference/geometry/Transform2Matrix.md +14 -0
  212. package/dist/docs/reference/geometry/Transform3-type.md +295 -0
  213. package/dist/docs/reference/geometry/Transform3Input.md +19 -0
  214. package/dist/docs/reference/geometry/Transform3Matrix.md +17 -0
  215. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +5 -4
  216. package/dist/docs/reference/geometry/TriangleMesh.md +1 -1
  217. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +2 -2
  218. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +1 -1
  219. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
  220. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +3 -3
  221. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
  222. package/dist/docs/reference/geometry/TriangleMeshSignature.md +2 -2
  223. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +3 -3
  224. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
  225. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +1 -1
  226. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +1 -1
  227. package/dist/docs/reference/geometry/TubeOptions.md +8 -8
  228. package/dist/docs/reference/geometry/Vector2-type.md +269 -0
  229. package/dist/docs/reference/geometry/Vector2Input.md +19 -0
  230. package/dist/docs/reference/geometry/Vector2Tuple.md +14 -0
  231. package/dist/docs/reference/geometry/Vector3-type.md +281 -0
  232. package/dist/docs/reference/geometry/Vector3Input.md +19 -0
  233. package/dist/docs/reference/geometry/Vector3Tuple.md +14 -0
  234. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +3 -3
  235. package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
  236. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +1 -1
  237. package/dist/docs/reference/geometry/VectorTextMetrics.md +1 -1
  238. package/dist/docs/reference/geometry/VectorTextOptions.md +1 -1
  239. package/dist/docs/reference/geometry/add2.md +36 -0
  240. package/dist/docs/reference/geometry/add3.md +10 -6
  241. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +1 -1
  242. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +2 -2
  243. package/dist/docs/reference/geometry/{createAnchor3.md → anchor3.md} +13 -9
  244. package/dist/docs/reference/geometry/anchorFrame3.md +5 -5
  245. package/dist/docs/reference/geometry/applyTransformDirection3.md +11 -7
  246. package/dist/docs/reference/geometry/applyTransformPoint3.md +11 -7
  247. package/dist/docs/reference/geometry/attachmentTransform3.md +77 -0
  248. package/dist/docs/reference/geometry/boundsCenter.md +7 -7
  249. package/dist/docs/reference/geometry/boundsFromSize.md +7 -7
  250. package/dist/docs/reference/geometry/boundsSize.md +7 -7
  251. package/dist/docs/reference/geometry/boxAnchor3.md +10 -6
  252. package/dist/docs/reference/geometry/categories/bounds-layout.md +1 -1
  253. package/dist/docs/reference/geometry/categories/curves-paths.md +15 -10
  254. package/dist/docs/reference/geometry/categories/mechanical.md +6 -6
  255. package/dist/docs/reference/geometry/categories/meshes.md +3 -4
  256. package/dist/docs/reference/geometry/categories/pattern-placement.md +7 -7
  257. package/dist/docs/reference/geometry/categories/primitive-options.md +4 -4
  258. package/dist/docs/reference/geometry/categories/profiles-regions.md +5 -6
  259. package/dist/docs/reference/geometry/categories/resolution-errors.md +3 -2
  260. package/dist/docs/reference/geometry/categories/transforms-math.md +41 -12
  261. package/dist/docs/reference/geometry/categories/vector-import.md +5 -5
  262. package/dist/docs/reference/geometry/circleContour.md +1 -1
  263. package/dist/docs/reference/geometry/closeToAxis.md +4 -4
  264. package/dist/docs/reference/geometry/compensateThreadDiameters.md +1 -1
  265. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +5 -5
  266. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +5 -5
  267. package/dist/docs/reference/geometry/composeTransform3.md +10 -6
  268. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +10 -6
  269. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +8 -7
  270. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +4 -4
  271. package/dist/docs/reference/geometry/{createTriangleMeshSignature.md → computeTriangleMeshSignature.md} +4 -4
  272. package/dist/docs/reference/geometry/containsBounds.md +1 -1
  273. package/dist/docs/reference/geometry/contourContainsPoint.md +4 -4
  274. package/dist/docs/reference/geometry/cross2.md +36 -0
  275. package/dist/docs/reference/geometry/cross3.md +10 -6
  276. package/dist/docs/reference/geometry/cylinderAnchor3.md +10 -6
  277. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +1 -1
  278. package/dist/docs/reference/geometry/distance2.md +36 -0
  279. package/dist/docs/reference/geometry/distance3.md +36 -0
  280. package/dist/docs/reference/geometry/distributeAlongPath.md +8 -6
  281. package/dist/docs/reference/geometry/dot2.md +36 -0
  282. package/dist/docs/reference/geometry/dot3.md +9 -5
  283. package/dist/docs/reference/geometry/ellipseContour.md +1 -1
  284. package/dist/docs/reference/geometry/eulerTransform3.md +10 -6
  285. package/dist/docs/reference/geometry/extrudeMesh.md +8 -8
  286. package/dist/docs/reference/geometry/fitBounds.md +1 -1
  287. package/dist/docs/reference/geometry/fitTextLayout.md +1 -1
  288. package/dist/docs/reference/geometry/frameTransform3.md +8 -4
  289. package/dist/docs/reference/geometry/{getMetricClearanceHole.md → getMetricClearanceHoleDiameter.md} +3 -3
  290. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
  291. package/dist/docs/reference/geometry/gridPatternTransforms.md +5 -5
  292. package/dist/docs/reference/geometry/heightfieldMesh.md +1 -1
  293. package/dist/docs/reference/geometry/{buildHelicalThreadRidgeMesh.md → helicalThreadRidgeMesh.md} +5 -5
  294. package/dist/docs/reference/geometry/{buildHelicalThreadSolidMesh.md → helicalThreadSolidMesh.md} +5 -5
  295. package/dist/docs/reference/geometry/inverseTransform3.md +9 -5
  296. package/dist/docs/reference/geometry/isGeometryError.md +1 -1
  297. package/dist/docs/reference/geometry/joinTriangleMeshes.md +1 -1
  298. package/dist/docs/reference/geometry/layoutRow.md +4 -4
  299. package/dist/docs/reference/geometry/length2.md +30 -0
  300. package/dist/docs/reference/geometry/length3.md +8 -4
  301. package/dist/docs/reference/geometry/lerp2.md +42 -0
  302. package/dist/docs/reference/geometry/lerp3.md +10 -6
  303. package/dist/docs/reference/geometry/linearPatternTransforms.md +5 -5
  304. package/dist/docs/reference/geometry/loftMesh.md +2 -1
  305. package/dist/docs/reference/geometry/matchProfiles.md +1 -1
  306. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +3 -2
  307. package/dist/docs/reference/geometry/meshBounds.md +1 -1
  308. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +3 -3
  309. package/dist/docs/reference/geometry/normalize2.md +36 -0
  310. package/dist/docs/reference/geometry/normalize3.md +10 -6
  311. package/dist/docs/reference/geometry/normalizeContour.md +4 -4
  312. package/dist/docs/reference/geometry/normalizePolygon.md +5 -5
  313. package/dist/docs/reference/geometry/normalizeRegion.md +5 -5
  314. package/dist/docs/reference/geometry/optimizePlanarPatches.md +11 -11
  315. package/dist/docs/reference/geometry/path2.md +42 -0
  316. package/dist/docs/reference/geometry/path3.md +42 -0
  317. package/dist/docs/reference/geometry/pathPatternTransforms.md +8 -8
  318. package/dist/docs/reference/geometry/preflightHeightfield.md +1 -1
  319. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +3 -3
  320. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +3 -3
  321. package/dist/docs/reference/geometry/preflightSvgRegion.md +1 -1
  322. package/dist/docs/reference/geometry/preflightThreadedNut.md +3 -3
  323. package/dist/docs/reference/geometry/preflightThreadedRod.md +3 -3
  324. package/dist/docs/reference/geometry/projectOntoPlane3.md +10 -6
  325. package/dist/docs/reference/geometry/radialPatternTransforms.md +4 -20
  326. package/dist/docs/reference/geometry/rectangleContour.md +2 -2
  327. package/dist/docs/reference/geometry/rectangleProfile.md +2 -2
  328. package/dist/docs/reference/geometry/regionArea.md +4 -4
  329. package/dist/docs/reference/geometry/regionBounds.md +4 -4
  330. package/dist/docs/reference/geometry/regularPolygonContour.md +5 -5
  331. package/dist/docs/reference/geometry/resamplePolyline2.md +5 -5
  332. package/dist/docs/reference/geometry/resamplePolyline3.md +5 -5
  333. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +8 -4
  334. package/dist/docs/reference/geometry/resolveArcSegments.md +6 -6
  335. package/dist/docs/reference/geometry/resolveCircularSegments.md +6 -5
  336. package/dist/docs/reference/geometry/resolveCylindricalGear.md +1 -1
  337. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +1 -1
  338. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +6 -6
  339. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
  340. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  341. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +1 -1
  342. package/dist/docs/reference/geometry/resolveRackPitch.md +1 -1
  343. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +4 -4
  344. package/dist/docs/reference/geometry/reverseTriangleMesh.md +1 -1
  345. package/dist/docs/reference/geometry/revolveMesh.md +10 -10
  346. package/dist/docs/reference/geometry/rotate2.md +36 -0
  347. package/dist/docs/reference/geometry/rotationTransform3.md +10 -6
  348. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +8 -6
  349. package/dist/docs/reference/geometry/sampleContour.md +3 -3
  350. package/dist/docs/reference/geometry/sampleCurve2.md +3 -3
  351. package/dist/docs/reference/geometry/sampleCurve3.md +2 -2
  352. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
  353. package/dist/docs/reference/geometry/sampleHelix.md +5 -5
  354. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
  355. package/dist/docs/reference/geometry/sampleRackToothPath.md +4 -4
  356. package/dist/docs/reference/geometry/sampleSideProfile.md +6 -6
  357. package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
  358. package/dist/docs/reference/geometry/sampleThreadHelices.md +2 -2
  359. package/dist/docs/reference/geometry/scale2.md +36 -0
  360. package/dist/docs/reference/geometry/scale3.md +9 -5
  361. package/dist/docs/reference/geometry/scaleTransform3.md +10 -6
  362. package/dist/docs/reference/geometry/signedContourArea.md +1 -1
  363. package/dist/docs/reference/geometry/starContour.md +4 -4
  364. package/dist/docs/reference/geometry/strokeRegionData.md +63 -0
  365. package/dist/docs/reference/geometry/subtract2.md +36 -0
  366. package/dist/docs/reference/geometry/subtract3.md +10 -6
  367. package/dist/docs/reference/geometry/sweepMesh.md +9 -9
  368. package/dist/docs/reference/geometry/{createThreadProfile.md → threadProfile.md} +6 -6
  369. package/dist/docs/reference/geometry/transform2.md +38 -0
  370. package/dist/docs/reference/geometry/transform3.md +38 -0
  371. package/dist/docs/reference/geometry/transformDeterminant3.md +8 -4
  372. package/dist/docs/reference/geometry/transformRegionData.md +40 -0
  373. package/dist/docs/reference/geometry/transformTriangleMesh.md +6 -6
  374. package/dist/docs/reference/geometry/translationTransform3.md +10 -6
  375. package/dist/docs/reference/geometry/triangulateContour.md +1 -1
  376. package/dist/docs/reference/geometry/validateSolidMesh.md +2 -2
  377. package/dist/docs/reference/geometry/validateTransform3.md +9 -5
  378. package/dist/docs/reference/geometry/validateTriangleMesh.md +1 -1
  379. package/dist/docs/reference/geometry/vector2.md +31 -0
  380. package/dist/docs/reference/geometry/vector3.md +38 -0
  381. package/dist/docs/reference/geometry.md +3 -3
  382. package/dist/docs/reference/model/Anchor3.md +5 -5
  383. package/dist/docs/reference/model/AttachOptions.md +10 -5
  384. package/dist/docs/reference/model/Bounds2.md +4 -4
  385. package/dist/docs/reference/model/Bounds3.md +4 -4
  386. package/dist/docs/reference/model/BoxEdge.md +1 -1
  387. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  388. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  389. package/dist/docs/reference/model/BoxOptions.md +10 -10
  390. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  391. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  392. package/dist/docs/reference/model/CircleOptions.md +3 -3
  393. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
  394. package/dist/docs/reference/model/Computed.md +1 -1
  395. package/dist/docs/reference/model/ComputedValue.md +1 -1
  396. package/dist/docs/reference/model/Contour.md +3 -3
  397. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  398. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  399. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  400. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  401. package/dist/docs/reference/model/CylinderOptions.md +3 -3
  402. package/dist/docs/reference/model/DiagnosticOptions.md +1 -1
  403. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  404. package/dist/docs/reference/model/EllipseContourOptions.md +3 -3
  405. package/dist/docs/reference/model/EllipseOptions.md +3 -3
  406. package/dist/docs/reference/model/EndTreatments.md +1 -1
  407. package/dist/docs/reference/model/ExtrudeOptions.md +6 -6
  408. package/dist/docs/reference/model/FinalizedModel.md +18 -8
  409. package/dist/docs/reference/model/FinalizedPart.md +1 -1
  410. package/dist/docs/reference/model/Frame3.md +6 -6
  411. package/dist/docs/reference/model/GenerateCallback.md +1 -1
  412. package/dist/docs/reference/model/GenerateContext.md +5 -5
  413. package/dist/docs/reference/model/GeneratedPart.md +6 -6
  414. package/dist/docs/reference/model/GenerationDiagnostic.md +1 -1
  415. package/dist/docs/reference/model/GenerationError.md +1 -1
  416. package/dist/docs/reference/model/GeometryResolution.md +5 -5
  417. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  418. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  419. package/dist/docs/reference/model/GridPatternOptions.md +11 -5
  420. package/dist/docs/reference/model/HeightfieldOptions.md +5 -5
  421. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +3 -3
  422. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +1 -1
  423. package/dist/docs/reference/model/HullOptions.md +7 -7
  424. package/dist/docs/reference/model/ImmutableBuffer-type.md +1 -1
  425. package/dist/docs/reference/model/ImmutableTriangleMesh.md +1 -1
  426. package/dist/docs/reference/model/ImplicitOptions.md +4 -4
  427. package/dist/docs/reference/model/InternalThreadCutterOptions.md +4 -4
  428. package/dist/docs/reference/model/LinearPatternOptions.md +12 -5
  429. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  430. package/dist/docs/reference/model/LoftOptions.md +1 -1
  431. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  432. package/dist/docs/reference/model/LoftStation.md +4 -4
  433. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  434. package/dist/docs/reference/model/ModelProgram.md +1 -1
  435. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  436. package/dist/docs/reference/model/NumericArray.md +1 -1
  437. package/dist/docs/reference/model/PartGeometry.md +1 -1
  438. package/dist/docs/reference/model/PartOptions.md +6 -6
  439. package/dist/docs/reference/model/Path2-type.md +192 -0
  440. package/dist/docs/reference/model/Path2Data.md +14 -0
  441. package/dist/docs/reference/model/Path2Input.md +15 -0
  442. package/dist/docs/reference/model/Path3-type.md +192 -0
  443. package/dist/docs/reference/model/Path3Data.md +14 -0
  444. package/dist/docs/reference/model/Path3Input.md +15 -0
  445. package/dist/docs/reference/model/PathLocation.md +65 -0
  446. package/dist/docs/reference/model/PathNormalGuide.md +6 -5
  447. package/dist/docs/reference/model/PathOptions.md +34 -0
  448. package/dist/docs/reference/model/PathPatternOptions.md +3 -3
  449. package/dist/docs/reference/model/PathResamplingOptions.md +79 -0
  450. package/dist/docs/reference/model/PatternSource.md +2 -2
  451. package/dist/docs/reference/model/Pivot2Options.md +27 -0
  452. package/dist/docs/reference/model/Pivot3Options.md +27 -0
  453. package/dist/docs/reference/model/PlaneOptions.md +3 -3
  454. package/dist/docs/reference/model/{Polygon-type.md → PolygonData.md} +2 -2
  455. package/dist/docs/reference/model/PolygonOptions.md +85 -8
  456. package/dist/docs/reference/model/{PrimitivePlacement.md → PrimitiveAttachment.md} +7 -7
  457. package/dist/docs/reference/model/{PrimitivePlacementOptions.md → PrimitiveAttachmentOptions.md} +41 -20
  458. package/dist/docs/reference/model/PrintableThreadFit.md +1 -1
  459. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +1 -1
  460. package/dist/docs/reference/model/Profile.md +1 -1
  461. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  462. package/dist/docs/reference/model/ProfileContour2.md +1 -1
  463. package/dist/docs/reference/model/ProfileSpan2.md +3 -3
  464. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +3 -3
  465. package/dist/docs/reference/model/RadialPatternOptions.md +17 -22
  466. package/dist/docs/reference/model/RadialSizing.md +1 -1
  467. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  468. package/dist/docs/reference/model/RectangleContourOptions.md +3 -3
  469. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  470. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  471. package/dist/docs/reference/model/RectangleOptions.md +10 -10
  472. package/dist/docs/reference/model/{Region.md → RegionData.md} +4 -4
  473. package/dist/docs/reference/model/RegularPolygonOptions.md +5 -5
  474. package/dist/docs/reference/model/RevolveOptions.md +9 -4
  475. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  476. package/dist/docs/reference/model/Section.md +81 -40
  477. package/dist/docs/reference/model/SectionHullOptions.md +7 -7
  478. package/dist/docs/reference/model/SectionInspection.md +10 -10
  479. package/dist/docs/reference/model/{RegionOffsetJoin.md → SectionOffsetJoin.md} +3 -3
  480. package/dist/docs/reference/model/{RegionOffsetOptions.md → SectionOffsetOptions.md} +4 -4
  481. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  482. package/dist/docs/reference/model/Solid.md +66 -26
  483. package/dist/docs/reference/model/SolidInspection.md +7 -7
  484. package/dist/docs/reference/model/{SolidRayHit.md → SolidSegmentHit.md} +6 -6
  485. package/dist/docs/reference/model/SphereOptions.md +3 -3
  486. package/dist/docs/reference/model/StarOptions.md +10 -10
  487. package/dist/docs/reference/model/StrokeCap.md +16 -0
  488. package/dist/docs/reference/model/StrokeJoin.md +16 -0
  489. package/dist/docs/reference/model/StrokeOptions.md +91 -0
  490. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  491. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  492. package/dist/docs/reference/model/SvgSectionOptions.md +1 -1
  493. package/dist/docs/reference/model/SweepOptions.md +6 -6
  494. package/dist/docs/reference/model/SweepOrientation.md +7 -7
  495. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  496. package/dist/docs/reference/model/ThreadEndStyle.md +1 -1
  497. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +1 -1
  498. package/dist/docs/reference/model/ThreadHandedness.md +1 -1
  499. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +1 -1
  500. package/dist/docs/reference/model/ThreadLeadInShape.md +1 -1
  501. package/dist/docs/reference/model/ThreadProfile.md +3 -3
  502. package/dist/docs/reference/model/ThreadRidgeOptions.md +1 -1
  503. package/dist/docs/reference/model/ThreadedNutBevel.md +1 -1
  504. package/dist/docs/reference/model/ThreadedNutOptions.md +4 -4
  505. package/dist/docs/reference/model/ThreadedNutPreflight.md +1 -1
  506. package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
  507. package/dist/docs/reference/model/ThreadedRodOptions.md +4 -4
  508. package/dist/docs/reference/model/TorusOptions.md +8 -8
  509. package/dist/docs/reference/model/Transform2-type.md +256 -0
  510. package/dist/docs/reference/model/Transform2Input.md +20 -0
  511. package/dist/docs/reference/model/Transform2Matrix.md +15 -0
  512. package/dist/docs/reference/model/Transform3-type.md +296 -0
  513. package/dist/docs/reference/model/Transform3Input.md +20 -0
  514. package/dist/docs/reference/model/{Transform3.md → Transform3Matrix.md} +3 -3
  515. package/dist/docs/reference/model/TriangleMesh.md +1 -1
  516. package/dist/docs/reference/model/TriangleMeshAnalysis.md +2 -2
  517. package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
  518. package/dist/docs/reference/model/TubeOptions.md +8 -8
  519. package/dist/docs/reference/model/Vector2-type.md +270 -0
  520. package/dist/docs/reference/model/Vector2Input.md +20 -0
  521. package/dist/docs/reference/model/{Vector2.md → Vector2Tuple.md} +3 -3
  522. package/dist/docs/reference/model/Vector3-type.md +282 -0
  523. package/dist/docs/reference/model/Vector3Input.md +20 -0
  524. package/dist/docs/reference/model/{Vector3.md → Vector3Tuple.md} +3 -3
  525. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  526. package/dist/docs/reference/model/VectorTextMetrics.md +1 -1
  527. package/dist/docs/reference/model/anchor.md +1 -1
  528. package/dist/docs/reference/model/box.md +4 -4
  529. package/dist/docs/reference/model/castSegment.md +40 -0
  530. package/dist/docs/reference/model/categories/boolean-operations.md +4 -4
  531. package/dist/docs/reference/model/categories/bounded-surfaces.md +3 -3
  532. package/dist/docs/reference/model/categories/contracts.md +2 -2
  533. package/dist/docs/reference/model/categories/core-values-errors.md +5 -5
  534. package/dist/docs/reference/model/categories/explicit-profiles.md +3 -3
  535. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +2 -2
  536. package/dist/docs/reference/model/categories/generation.md +1 -1
  537. package/dist/docs/reference/model/categories/inspection.md +7 -8
  538. package/dist/docs/reference/model/categories/mesh-inspection.md +2 -2
  539. package/dist/docs/reference/model/categories/paths.md +33 -0
  540. package/dist/docs/reference/model/categories/primitives.md +3 -3
  541. package/dist/docs/reference/model/categories/resolution.md +2 -2
  542. package/dist/docs/reference/model/categories/sections.md +10 -8
  543. package/dist/docs/reference/model/categories/threads.md +5 -5
  544. package/dist/docs/reference/model/categories/transforms-placement.md +27 -13
  545. package/dist/docs/reference/model/circle.md +1 -1
  546. package/dist/docs/reference/model/components.md +10 -7
  547. package/dist/docs/reference/model/compose.md +1 -1
  548. package/dist/docs/reference/model/cylinder.md +1 -1
  549. package/dist/docs/reference/model/distance.md +2 -2
  550. package/dist/docs/reference/model/ellipse.md +1 -1
  551. package/dist/docs/reference/model/extrude.md +3 -3
  552. package/dist/docs/reference/model/generate.md +1 -1
  553. package/dist/docs/reference/model/gridPattern.md +4 -4
  554. package/dist/docs/reference/model/heightfield.md +2 -2
  555. package/dist/docs/reference/model/hull.md +2 -2
  556. package/dist/docs/reference/model/immutableBuffer.md +1 -1
  557. package/dist/docs/reference/model/immutableMesh.md +1 -1
  558. package/dist/docs/reference/model/implicit.md +3 -3
  559. package/dist/docs/reference/model/inspectSection.md +1 -1
  560. package/dist/docs/reference/model/inspectSolid.md +1 -1
  561. package/dist/docs/reference/model/internalThreadCutter.md +4 -4
  562. package/dist/docs/reference/model/intersect.md +1 -1
  563. package/dist/docs/reference/model/isEmpty.md +2 -2
  564. package/dist/docs/reference/model/linearPattern.md +4 -4
  565. package/dist/docs/reference/model/loft.md +1 -1
  566. package/dist/docs/reference/model/matchProfiles.md +2 -2
  567. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  568. package/dist/docs/reference/model/path2.md +42 -0
  569. package/dist/docs/reference/model/path3.md +42 -0
  570. package/dist/docs/reference/model/pathPattern.md +13 -12
  571. package/dist/docs/reference/model/polygon.md +4 -4
  572. package/dist/docs/reference/model/preflightInternalThreadCutter.md +3 -3
  573. package/dist/docs/reference/model/preflightThreadedNut.md +3 -3
  574. package/dist/docs/reference/model/preflightThreadedRod.md +3 -3
  575. package/dist/docs/reference/model/radialPattern.md +5 -37
  576. package/dist/docs/reference/model/rectangle.md +4 -4
  577. package/dist/docs/reference/model/regularPolygon.md +1 -1
  578. package/dist/docs/reference/model/revolve.md +5 -4
  579. package/dist/docs/reference/model/solidFromMesh.md +1 -1
  580. package/dist/docs/reference/model/sphere.md +1 -1
  581. package/dist/docs/reference/model/split.md +1 -1
  582. package/dist/docs/reference/model/splitByPlane.md +1 -1
  583. package/dist/docs/reference/model/star.md +4 -4
  584. package/dist/docs/reference/model/stroke.md +74 -0
  585. package/dist/docs/reference/model/svgPathSection.md +1 -1
  586. package/dist/docs/reference/model/svgSection.md +1 -1
  587. package/dist/docs/reference/model/sweep.md +7 -7
  588. package/dist/docs/reference/model/textSection.md +1 -1
  589. package/dist/docs/reference/model/threadRidge.md +2 -2
  590. package/dist/docs/reference/model/threadedNut.md +4 -4
  591. package/dist/docs/reference/model/threadedRod.md +4 -4
  592. package/dist/docs/reference/model/torus.md +3 -3
  593. package/dist/docs/reference/model/transform2.md +39 -0
  594. package/dist/docs/reference/model/transform3.md +39 -0
  595. package/dist/docs/reference/model/tube.md +3 -3
  596. package/dist/docs/reference/model/union.md +1 -1
  597. package/dist/docs/reference/model/vector2.md +32 -0
  598. package/dist/docs/reference/model/vector3.md +39 -0
  599. package/dist/docs/reference/model.md +9 -8
  600. package/dist/docs/reference/text/Bounds2.md +4 -4
  601. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
  602. package/dist/docs/reference/text/Vector2Tuple.md +7 -0
  603. package/dist/docs/reference/text/VectorFont.md +2 -2
  604. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  605. package/dist/docs/reference/text/VectorTextArcBaseline.md +3 -3
  606. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  607. package/dist/docs/reference/text/VectorTextLayoutOptions.md +1 -1
  608. package/dist/docs/reference/text/VectorTextMetrics.md +1 -1
  609. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  610. package/dist/docs/reference/text/categories/font-preparation.md +4 -4
  611. package/dist/docs/reference/text/prepareVectorFont.md +2 -2
  612. package/dist/docs/reference/text.md +1 -1
  613. package/dist/engine/construction-operations.js +31 -14
  614. package/dist/engine/deferred-context.js +11 -181
  615. package/dist/engine/execution.js +39 -8
  616. package/dist/engine/extrusion-finishing.js +1 -1
  617. package/dist/engine/index.js +6 -1
  618. package/dist/engine/inspection-operations.js +13 -11
  619. package/dist/engine/loft-operations.js +35 -14
  620. package/dist/engine/model-summary.js +8 -5
  621. package/dist/engine/native/material-components.js +305 -0
  622. package/dist/engine/native/regions.js +2 -1
  623. package/dist/engine/native/threads.js +3 -3
  624. package/dist/engine/native/transforms.js +11 -8
  625. package/dist/engine/operation-environment.js +2 -2
  626. package/dist/engine/pattern-operations.js +3 -3
  627. package/dist/engine/placement.js +2 -2
  628. package/dist/engine/primitive-anchors.js +17 -17
  629. package/dist/engine/primitive-operations.js +1 -1
  630. package/dist/engine/primitive-profiles.js +8 -7
  631. package/dist/engine/profile-mesh.js +7 -7
  632. package/dist/engine/recipe-realization.js +35 -21
  633. package/dist/engine/section-operations.js +52 -11
  634. package/dist/engine/session-graph.js +1 -1
  635. package/dist/engine/session-native.js +1 -1
  636. package/dist/engine/session-snapshot.js +17 -6
  637. package/dist/engine/session.js +13 -8
  638. package/dist/engine/shape-anchors.js +5 -11
  639. package/dist/engine/transform-operations.js +66 -49
  640. package/dist/geometry/anchors.js +40 -33
  641. package/dist/geometry/curves/sampling.js +14 -14
  642. package/dist/geometry/edge-finishing.js +1 -1
  643. package/dist/geometry/extrusion.js +13 -16
  644. package/dist/geometry/index.js +13 -10
  645. package/dist/geometry/loft/loft-simple-mesh.js +6 -6
  646. package/dist/geometry/loft/loft.js +22 -13
  647. package/dist/geometry/math/immutable-value.js +20 -0
  648. package/dist/geometry/math/vector-value.js +168 -0
  649. package/dist/geometry/math/vector2.js +80 -0
  650. package/dist/geometry/math/vector3.js +37 -7
  651. package/dist/geometry/mechanical/gear-motion.js +8 -5
  652. package/dist/geometry/mechanical/gears.js +38 -38
  653. package/dist/geometry/mechanical/index.js +3 -3
  654. package/dist/geometry/mechanical/standards.js +1 -1
  655. package/dist/geometry/mechanical/thread-helices.js +2 -3
  656. package/dist/geometry/mechanical/thread-mesh-plan.js +4 -5
  657. package/dist/geometry/mechanical/thread-mesh.js +7 -7
  658. package/dist/geometry/mechanical/thread-profiles.js +5 -5
  659. package/dist/geometry/mechanical/thread-solids.js +2 -2
  660. package/dist/geometry/mechanical/thread-surface.js +1 -1
  661. package/dist/geometry/mechanical/threads.js +8 -8
  662. package/dist/geometry/mesh/mesh-planar.js +25 -27
  663. package/dist/geometry/mesh/mesh-quality.js +5 -5
  664. package/dist/geometry/mesh/mesh-signature.js +13 -13
  665. package/dist/geometry/mesh/mesh-solid-intersections.js +5 -1
  666. package/dist/geometry/mesh/mesh-solid.js +7 -7
  667. package/dist/geometry/mesh/mesh.js +4 -15
  668. package/dist/geometry/paths/closest-point.js +63 -0
  669. package/dist/geometry/paths/frames.js +44 -14
  670. package/dist/geometry/paths/helix.js +16 -6
  671. package/dist/geometry/paths/path-value.js +252 -0
  672. package/dist/geometry/paths/planar.js +36 -23
  673. package/dist/geometry/paths/resampling.js +27 -5
  674. package/dist/geometry/patterns/placements.js +100 -27
  675. package/dist/geometry/patterns.js +2 -2
  676. package/dist/geometry/polygon-clipping.js +17 -0
  677. package/dist/geometry/primitive-resolution.js +4 -1
  678. package/dist/geometry/profiles/contour.js +6 -6
  679. package/dist/geometry/profiles/matched.js +4 -4
  680. package/dist/geometry/profiles/profiles.js +4 -4
  681. package/dist/geometry/profiles/rectangle.js +4 -4
  682. package/dist/geometry/profiles/side-profile.js +7 -7
  683. package/dist/geometry/profiles/span-sampling.js +1 -1
  684. package/dist/geometry/resolution.js +51 -39
  685. package/dist/geometry/revolve/revolve-mesh.js +12 -7
  686. package/dist/geometry/stroke-path.js +57 -68
  687. package/dist/geometry/svg/fill.js +7 -21
  688. package/dist/geometry/svg-import.js +23 -23
  689. package/dist/geometry/sweeps/options.js +5 -4
  690. package/dist/geometry/sweeps/orientation.js +5 -5
  691. package/dist/geometry/sweeps/stations.js +14 -14
  692. package/dist/geometry/sweeps/sweep-closed.js +5 -5
  693. package/dist/geometry/sweeps/sweep-mesh.js +9 -3
  694. package/dist/geometry/sweeps/sweep-open.js +4 -4
  695. package/dist/geometry/sweeps/validation.js +4 -7
  696. package/dist/geometry/transform-chain.js +172 -0
  697. package/dist/geometry/transform-geometry.js +27 -30
  698. package/dist/geometry/transform-matrix.js +14 -0
  699. package/dist/geometry/transform2.js +60 -0
  700. package/dist/geometry/transform3.js +70 -26
  701. package/dist/index.js +4 -0
  702. package/dist/model/execution-binding.js +10 -5
  703. package/dist/model/geometry-recipes.js +15 -0
  704. package/dist/{engine → model}/immutable-generation-data.js +88 -6
  705. package/dist/model/operation-dispatch.js +10 -3
  706. package/dist/model/operations.js +45 -35
  707. package/dist/model/recipe-declaration.js +199 -0
  708. package/dist/model/shape-handles.js +17 -5
  709. package/dist/text/index.js +15 -9
  710. package/dist/text/vector-text-layout.js +31 -26
  711. package/package.json +1 -1
  712. package/dist/docs/reference/geometry/Path2.md +0 -14
  713. package/dist/docs/reference/geometry/Path3.md +0 -14
  714. package/dist/docs/reference/geometry/PrimitivePlacement.md +0 -31
  715. package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +0 -83
  716. package/dist/docs/reference/geometry/Region.md +0 -14
  717. package/dist/docs/reference/geometry/StrokePathCap.md +0 -7
  718. package/dist/docs/reference/geometry/StrokePathJoin.md +0 -7
  719. package/dist/docs/reference/geometry/Transform3.md +0 -12
  720. package/dist/docs/reference/geometry/Vector2.md +0 -7
  721. package/dist/docs/reference/geometry/Vector3.md +0 -7
  722. package/dist/docs/reference/geometry/attachTransform.md +0 -73
  723. package/dist/docs/reference/geometry/cumulativePathLengths.md +0 -33
  724. package/dist/docs/reference/geometry/measureTriangleMesh.md +0 -55
  725. package/dist/docs/reference/geometry/pathLength.md +0 -33
  726. package/dist/docs/reference/geometry/rotateAroundAxis3.md +0 -38
  727. package/dist/docs/reference/geometry/strokePathRegion.md +0 -63
  728. package/dist/docs/reference/geometry/transformContour.md +0 -42
  729. package/dist/docs/reference/geometry/transformPath2.md +0 -40
  730. package/dist/docs/reference/geometry/transformPath3.md +0 -33
  731. package/dist/docs/reference/geometry/transformRegion.md +0 -40
  732. package/dist/docs/reference/model/Transform2.md +0 -15
  733. package/dist/docs/reference/model/fromRegion.md +0 -33
  734. package/dist/docs/reference/model/rayCast.md +0 -40
  735. package/dist/docs/reference/model/toRegion.md +0 -33
  736. package/dist/docs/reference/model/toTriangleMesh.md +0 -27
  737. package/dist/docs/reference/text/Vector2.md +0 -7
  738. package/dist/engine/geometry-recipes.js +0 -12
  739. package/dist/engine/pattern-transform.js +0 -9
  740. package/dist/geometry/paths/path.js +0 -32
@@ -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
  *
@@ -168,13 +164,20 @@ export function anchor(shape, name) {
168
164
  export function polygon(input) {
169
165
  return invoke("polygon", [input]);
170
166
  }
171
- /** Imports explicit region topology once. */
172
- export function fromRegion(region) {
173
- return invoke("fromRegion", [region]);
174
- }
175
- /** Explicit copied topology inspection; not needed for section operations. */
176
- export function toRegion(section) {
177
- return invoke("toRegion", [section]);
167
+ /**
168
+ * Creates a centered-width native Section along a sampled XY path.
169
+ *
170
+ * Shares caps, joins and physical sampling with Geometry's strokeRegionData. Native union
171
+ * resolves overlapping stroke primitives. Session resolution and resource ceilings apply;
172
+ * closed paths omit the duplicated seam. Returns an immutable deferred recipe.
173
+ *
174
+ * @example Extrude a rounded track
175
+ * ```ts
176
+ * stroke([[0, 0], [20, 0], [20, 10]], { width: 3, join: "round", cap: "round" }).extrude({ height: 2 });
177
+ * ```
178
+ */
179
+ export function stroke(path, options) {
180
+ return invoke("stroke", [path, options]);
178
181
  }
179
182
  /**
180
183
  * Filled rectangular section with uniform or independently treated corners.
@@ -259,7 +262,7 @@ export function extrude(shape, options) {
259
262
  *
260
263
  * // Contour coordinates are [radius, Z].
261
264
  * const [profile] = matchProfiles([rectangleProfile({ size: [4, 16], center: false })]);
262
- * revolve(profile!, { revolveDegrees: 270 });
265
+ * revolve(profile!, { degrees: 270 });
263
266
  * ```
264
267
  */
265
268
  export function revolve(shape, options) {
@@ -269,7 +272,10 @@ export function revolve(shape, options) {
269
272
  export function loft(stations, options) {
270
273
  return invoke("loft", [stations, options]);
271
274
  }
272
- /** 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
+ */
273
279
  export function matchProfiles(profiles, options) {
274
280
  return invoke("matchProfiles", [profiles, options]);
275
281
  }
@@ -317,7 +323,7 @@ export function inspectSolid(solid) {
317
323
  return invoke("inspectSolid", [solid]);
318
324
  }
319
325
  /**
320
- * Checks whether a same-session solid or filled section contains no geometry.
326
+ * Checks whether a solid or filled section contains no geometry during host execution.
321
327
  *
322
328
  * Accepts a 3D Solid or 2D Section handle, not a finalized model or raw triangle mesh.
323
329
  * Useful after a Boolean operation whose inputs may not overlap; no mesh is extracted.
@@ -339,7 +345,7 @@ export function isEmpty(shape) {
339
345
  * Uses actual geometry, not bounding-box separation or distance between object origins.
340
346
  * Contact or overlapping material returns zero, including one solid inside another.
341
347
  * The kernel's search range is managed internally; the result is not capped at a caller limit.
342
- * Empty, expired or foreign-build handles reject. Results follow native numeric precision.
348
+ * Empty geometry and component selections from another session reject. Results follow native numeric precision.
343
349
  *
344
350
  * @example Measure the gap between two blocks
345
351
  * ```ts
@@ -352,19 +358,23 @@ export function distance(solid, other) {
352
358
  return invoke("distance", [solid, other]);
353
359
  }
354
360
  /** Copies intersections along the finite directed origin-to-endpoint segment. */
355
- export function rayCast(solid, origin, endpoint) {
356
- return invoke("rayCast", [solid, origin, endpoint]);
361
+ export function castSegment(solid, origin, endpoint) {
362
+ return invoke("castSegment", [solid, origin, endpoint]);
357
363
  }
358
364
  export function components(shape) {
359
365
  return invoke("components", [shape]);
360
366
  }
361
- /** Bounded positive-inside implicit field constructor. */
367
+ /**
368
+ * Bounded positive-inside implicit field constructor.
369
+ * The retained callback must capture independent immutable inputs, not live session readers or parameters.
370
+ */
362
371
  export function implicit(options) {
363
372
  return invoke("implicit", [options]);
364
373
  }
365
374
  /**
366
375
  * Closed rectilinear top above a flat base, with uniform or explicit XY coordinates.
367
376
  * Samples each grid height once; center-error triangulation also samples each cell centre.
377
+ * The retained callback must capture independent immutable inputs, not live session readers or parameters.
368
378
  *
369
379
  * @example Heightfield
370
380
  * ```ts
@@ -377,17 +387,17 @@ export function implicit(options) {
377
387
  export function heightfield(options) {
378
388
  return invoke("heightfield", [options]);
379
389
  }
380
- export function linearPattern(source, options) {
381
- return invoke("linearPattern", [source, options]);
390
+ export function linearPattern(...args) {
391
+ return invoke("linearPattern", args);
382
392
  }
383
- export function radialPattern(source, options) {
384
- return invoke("radialPattern", [source, options]);
393
+ export function radialPattern(...args) {
394
+ return invoke("radialPattern", args);
385
395
  }
386
- export function gridPattern(source, options) {
387
- return invoke("gridPattern", [source, options]);
396
+ export function gridPattern(...args) {
397
+ return invoke("gridPattern", args);
388
398
  }
389
- export function pathPattern(source, path, options) {
390
- return invoke("pathPattern", [source, path, options]);
399
+ export function pathPattern(...args) {
400
+ return invoke("pathPattern", args);
391
401
  }
392
402
  /** Helical ridge mesh construction. */
393
403
  export function threadRidge(options) {
@@ -399,9 +409,9 @@ export function threadRidge(options) {
399
409
  * @example Threaded rod
400
410
  * ```ts
401
411
  * import { threadedRod } from "@metamesh/modeling";
402
- * import { createThreadProfile } from "@metamesh/modeling/geometry";
412
+ * import { threadProfile } from "@metamesh/modeling/geometry";
403
413
  *
404
- * const profile = createThreadProfile({ kind: "triangular", pitch: 1.75 });
414
+ * const profile = threadProfile({ kind: "triangular", pitch: 1.75 });
405
415
  * threadedRod({ nominalMajorDiameter: 12, length: 24, profile, fit: "normal" });
406
416
  * ```
407
417
  */
@@ -414,8 +424,8 @@ export function threadedRod(options) {
414
424
  * @example Internal thread
415
425
  * ```ts
416
426
  * import { cylinder, internalThreadCutter } from "@metamesh/modeling";
417
- * import { createThreadProfile } from "@metamesh/modeling/geometry";
418
- * const profile = createThreadProfile({ kind: "triangular", pitch: 1.75 });
427
+ * import { threadProfile } from "@metamesh/modeling/geometry";
428
+ * const profile = threadProfile({ kind: "triangular", pitch: 1.75 });
419
429
  * const body = cylinder({ diameter: 20, height: 12, center: false });
420
430
  * const cutter = internalThreadCutter({ nominalMajorDiameter: 12, length: 12, profile });
421
431
  * body.subtract([cutter]);
@@ -430,24 +440,24 @@ export function internalThreadCutter(options) {
430
440
  * @example Threaded nut
431
441
  * ```ts
432
442
  * import { threadedNut } from "@metamesh/modeling";
433
- * import { createThreadProfile } from "@metamesh/modeling/geometry";
443
+ * import { threadProfile } from "@metamesh/modeling/geometry";
434
444
  *
435
- * const profile = createThreadProfile({ kind: "triangular", pitch: 1.75 });
445
+ * const profile = threadProfile({ kind: "triangular", pitch: 1.75 });
436
446
  * threadedNut({ nominalMajorDiameter: 12, thickness: 8, width: 20, shape: "hex", profile, fit: "normal" });
437
447
  * ```
438
448
  */
439
449
  export function threadedNut(options) {
440
450
  return invoke("threadedNut", [options]);
441
451
  }
442
- /** Allocation-free external-thread facts. */
452
+ /** External-thread facts using host resolution and limits; requires active synchronous model execution. */
443
453
  export function preflightThreadedRod(options) {
444
454
  return invoke("preflightThreadedRod", [options]);
445
455
  }
446
- /** Allocation-free internal-thread facts. */
456
+ /** Internal-thread facts using host resolution and limits; requires active synchronous model execution. */
447
457
  export function preflightInternalThreadCutter(options) {
448
458
  return invoke("preflightInternalThreadCutter", [options]);
449
459
  }
450
- /** Allocation-free nut/cutter facts. */
460
+ /** Nut/cutter facts using host resolution and limits; requires active synchronous model execution. */
451
461
  export function preflightThreadedNut(options) {
452
462
  return invoke("preflightThreadedNut", [options]);
453
463
  }
@@ -0,0 +1,199 @@
1
+ import { GeometryError } from "../geometry/errors.js";
2
+ import { defaultModelingLimits } from "../geometry/model-limits.js";
3
+ import { gridPatternPlan, linearPatternPlan, pathPatternPlan, radialPatternPlan, } from "../geometry/patterns/placements.js";
4
+ import { restrictTransform3 } from "../geometry/transform2.js";
5
+ import { geometryRecipe, recordGeometryRecipe, } from "./geometry-recipes.js";
6
+ import { captureRecipeInputs } from "./immutable-generation-data.js";
7
+ // Every public operation must explicitly choose its realization and result behavior.
8
+ const operationBehaviors = {
9
+ withResolution: "resolution",
10
+ box: "solid",
11
+ cylinder: "solid",
12
+ tube: "solid",
13
+ sphere: "solid",
14
+ torus: "solid",
15
+ heightfield: "solid",
16
+ implicit: "solid",
17
+ extrude: "solid",
18
+ revolve: "solid",
19
+ loft: "solid",
20
+ sweep: "solid",
21
+ compose: "solid",
22
+ minkowskiSum: "solid",
23
+ solidFromMesh: "solid",
24
+ withTolerance: "solid",
25
+ threadRidge: "solid",
26
+ threadedRod: "solid",
27
+ threadedNut: "solid",
28
+ internalThreadCutter: "solid",
29
+ polygon: "section",
30
+ stroke: "section",
31
+ rectangle: "section",
32
+ circle: "section",
33
+ ellipse: "section",
34
+ regularPolygon: "section",
35
+ star: "section",
36
+ projectSection: "section",
37
+ sliceSection: "section",
38
+ textSection: "section",
39
+ svgSection: "section",
40
+ svgPathSection: "section",
41
+ translate: "preserve",
42
+ rotate: "preserve",
43
+ scale: "preserve",
44
+ mirror: "preserve",
45
+ transform: "preserve",
46
+ offset: "preserve",
47
+ simplify: "preserve",
48
+ withAnchors: "preserve",
49
+ attach: "preserve",
50
+ union: "preserve",
51
+ intersect: "preserve",
52
+ subtract: "preserve",
53
+ hull: "preserve",
54
+ toTriangleMesh: "observation",
55
+ toRegionData: "observation",
56
+ inspectSection: "observation",
57
+ inspectSolid: "observation",
58
+ isEmpty: "observation",
59
+ distance: "observation",
60
+ castSegment: "observation",
61
+ anchor: "observation",
62
+ matchProfiles: "observation",
63
+ preflightThreadedRod: "observation",
64
+ preflightInternalThreadCutter: "observation",
65
+ preflightThreadedNut: "observation",
66
+ split: "split",
67
+ splitByPlane: "split",
68
+ components: "components",
69
+ linearPattern: "pattern",
70
+ radialPattern: "pattern",
71
+ gridPattern: "pattern",
72
+ pathPattern: "pattern",
73
+ };
74
+ /**
75
+ * Creates the shared declaration surface for portable recipes or one active revision.
76
+ * Handles retain captured inputs; native results remain private to the host realization owner.
77
+ */
78
+ export function createRecipeContext(resolution, declaration) {
79
+ return Object.freeze(Object.fromEntries(Object.keys(operationBehaviors).map((key) => [
80
+ key,
81
+ (...supplied) => declareRecipeOperation(key, resolution, supplied, declaration),
82
+ ])));
83
+ }
84
+ /** Captures and validates inputs before deciding whether an operation needs native geometry now. */
85
+ export function declareRecipeOperation(operation, resolution, supplied, declaration) {
86
+ declaration.assertActive?.();
87
+ const behavior = operationBehaviors[operation];
88
+ if (behavior === "observation" || behavior === "components")
89
+ requireRealization(declaration, operation);
90
+ if (behavior === "resolution") {
91
+ const nextResolution = Object.freeze({ ...resolution, ...supplied[0] });
92
+ return createRecipeContext(nextResolution, declaration);
93
+ }
94
+ if (behavior === "pattern")
95
+ return declarePattern(operation, resolution, supplied, declaration);
96
+ const args = captureRecipeInputs(supplied);
97
+ const call = { method: operation, args, resolution };
98
+ if (behavior === "observation")
99
+ return requireRealization(declaration, operation).invoke(call);
100
+ const recipe = {
101
+ kind: resultKind(behavior, args[0]),
102
+ call,
103
+ };
104
+ if (behavior === "split")
105
+ return Object.freeze([
106
+ recordGeometryRecipe({ ...recipe, index: 0 }, declaration.dispatch),
107
+ recordGeometryRecipe({ ...recipe, index: 1 }, declaration.dispatch),
108
+ ]);
109
+ if (behavior === "components") {
110
+ // Cardinality and ordering are observations of this session's sampled geometry.
111
+ // Retain native precision rather than baking the selected component through mesh interchange.
112
+ const realization = requireRealization(declaration, operation);
113
+ const values = realization.evaluate(call);
114
+ return Object.freeze(values.map((_value, index) => recordGeometryRecipe({ ...recipe, index, observedSession: realization.session }, declaration.dispatch)));
115
+ }
116
+ return recordGeometryRecipe(recipe, declaration.dispatch);
117
+ }
118
+ /** Declares a portable recipe without resolving an engine, resolution or session identity. */
119
+ export function declarePortableOperation(operation, args, dispatch) {
120
+ return declareRecipeOperation(operation, undefined, args, {
121
+ limits: defaultModelingLimits,
122
+ dispatch,
123
+ });
124
+ }
125
+ function requireRealization(declaration, operation) {
126
+ if (declaration.realization === undefined)
127
+ throw new GeometryError("INVALID_ARGUMENT", "Geometry observations require an active model execution.", { operation });
128
+ return declaration.realization;
129
+ }
130
+ function resultKind(behavior, input) {
131
+ if (behavior === "section")
132
+ return "section";
133
+ if (behavior === "preserve" || behavior === "components")
134
+ return inputKind(input);
135
+ return "solid";
136
+ }
137
+ function inputKind(value) {
138
+ if (Array.isArray(value))
139
+ return inputKind(value[0]);
140
+ if (typeof value !== "object" || value === null)
141
+ return "solid";
142
+ const recipe = geometryRecipe(value);
143
+ if (recipe !== undefined)
144
+ return recipe.kind;
145
+ if ("sections" in value)
146
+ return "section";
147
+ if ("points" in value && Array.isArray(value.points) && pointDimension(value.points[0]) === 2)
148
+ return "section";
149
+ return "solid";
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
+ }
160
+ /** Runs every factory during declaration; each placed copy stays deferred until it is used. */
161
+ function declarePattern(operation, resolution, supplied, declaration) {
162
+ const plan = patternPlan(operation, supplied, declaration.limits);
163
+ if (plan.count > declaration.limits.maxVertices)
164
+ throw new GeometryError("COMPLEXITY_LIMIT", "Pattern declaration exceeds execution limits.", {
165
+ operation,
166
+ });
167
+ const source = supplied[0];
168
+ const copies = [];
169
+ let kind;
170
+ for (let index = 0; index < plan.count; index++) {
171
+ const shape = typeof source === "function"
172
+ ? source(index)
173
+ : source;
174
+ const currentKind = inputKind(shape);
175
+ if (kind !== undefined && kind !== currentKind)
176
+ throw new GeometryError("INVALID_ARGUMENT", "Pattern factories must return one shape dimension.", {
177
+ operation,
178
+ });
179
+ kind = currentKind;
180
+ const matrix = plan.transformAt(index, kind === "section" ? 2 : 3);
181
+ copies.push(declareRecipeOperation("transform", resolution, [shape, kind === "section" ? restrictTransform3(matrix) : matrix], declaration));
182
+ }
183
+ return Object.freeze(copies);
184
+ }
185
+ function patternPlan(operation, supplied, limits) {
186
+ const options = supplied[1];
187
+ switch (operation) {
188
+ case "linearPattern":
189
+ return linearPatternPlan(options);
190
+ case "radialPattern":
191
+ return radialPatternPlan(options);
192
+ case "gridPattern":
193
+ return gridPatternPlan(options);
194
+ case "pathPattern":
195
+ return pathPatternPlan(options, supplied[2], limits);
196
+ default:
197
+ throw new Error(`Operation ${operation} does not declare a pattern.`);
198
+ }
199
+ }
@@ -1,8 +1,12 @@
1
1
  import { currentModelContext } from "./execution-binding.js";
2
+ const dispatchers = new WeakMap();
2
3
  // Resolve the current transaction on every call: cached recipes outlive the revision that
3
4
  // created them. Neither instances nor these shared methods retain an execution or native value.
4
5
  function forward(name) {
5
6
  return function (...args) {
7
+ const dispatch = dispatchers.get(this);
8
+ if (dispatch !== undefined)
9
+ return dispatch(name, [this, ...args]);
6
10
  const context = currentModelContext(name);
7
11
  return Reflect.apply(context[name], undefined, [this, ...args]);
8
12
  };
@@ -22,23 +26,31 @@ const common = {
22
26
  };
23
27
  const solidPrototype = prototype({
24
28
  ...common,
29
+ toTriangleMesh: forward("toTriangleMesh"),
25
30
  attach: forward("attach"),
26
- setTolerance: forward("setTolerance"),
31
+ withTolerance: forward("withTolerance"),
27
32
  projectSection: forward("projectSection"),
28
33
  sliceSection: forward("sliceSection"),
29
34
  });
30
35
  const sectionPrototype = prototype({
31
36
  ...common,
37
+ toRegionData: forward("toRegionData"),
32
38
  offset: forward("offset"),
33
39
  extrude: forward("extrude"),
34
40
  revolve: forward("revolve"),
35
41
  sweep: forward("sweep"),
36
42
  });
37
43
  /** Creates only the immutable public facade; the caller owns its private geometry identity. */
38
- export function createSolidHandle() {
39
- return Object.freeze(Object.create(solidPrototype));
44
+ export function createSolidHandle(dispatch, properties) {
45
+ const handle = Object.freeze(Object.create(solidPrototype, properties ?? {}));
46
+ if (dispatch !== undefined)
47
+ dispatchers.set(handle, dispatch);
48
+ return handle;
40
49
  }
41
50
  /** Creates only the immutable public facade; the caller owns its private geometry identity. */
42
- export function createSectionHandle() {
43
- return Object.freeze(Object.create(sectionPrototype));
51
+ export function createSectionHandle(dispatch, properties) {
52
+ const handle = Object.freeze(Object.create(sectionPrototype, properties ?? {}));
53
+ if (dispatch !== undefined)
54
+ dispatchers.set(handle, dispatch);
55
+ return handle;
44
56
  }
@@ -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.13.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": {