@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
@@ -1,9 +1,9 @@
1
1
  /** Axis-aligned bounds in two-dimensional model space. */
2
2
  export declare interface Bounds2 {
3
3
  /** Inclusive maximum X/Y coordinates. */
4
- readonly max: Vector2;
4
+ readonly max: Vector2Tuple;
5
5
  /** Inclusive minimum X/Y coordinates. */
6
- readonly min: Vector2;
6
+ readonly min: Vector2Tuple;
7
7
  }
8
8
 
9
9
  /** Limits apply before parsing or shaping untrusted font data. */
@@ -11,6 +11,7 @@ export declare const MAX_VECTOR_FONT_BYTES: number;
11
11
 
12
12
  /**
13
13
  * Parses bounded font bytes using optional fontkit and WOFF2 peers; no font fetching occurs here.
14
+ * Argument and resource failures use GeometryError; parser and decoder exceptions propagate unchanged.
14
15
  *
15
16
  * @example Prepare a label before building geometry
16
17
  * ```ts
@@ -26,10 +27,11 @@ export declare function prepareVectorFont(
26
27
  ): Promise<VectorFont>;
27
28
 
28
29
  /** A two-dimensional Cartesian vector or point. */
29
- export declare type Vector2 = readonly [x: number, y: number];
30
+ export declare type Vector2Tuple = readonly [x: number, y: number];
30
31
 
31
32
  /**
32
33
  * A prepared font owns its parsed bytes; keep handles local to their Worker or invocation.
34
+ * Invalid arguments and bounded-work failures use GeometryError; unexpected dependency errors propagate.
33
35
  */
34
36
  export declare interface VectorFont {
35
37
  /** Shape horizontal lines or one circular line; bounded to 512 UTF-16 units and supports blank text. */
@@ -59,7 +61,7 @@ export declare interface VectorTextArcBaseline {
59
61
  /** Baseline radius in millimetres, greater than zero and at most 10000. */
60
62
  readonly radius: number;
61
63
  /** Alignment datum in degrees counterclockwise from +X; defaults to 90. */
62
- readonly centerAngleDegrees?: number;
64
+ readonly centerAngle?: number;
63
65
  /** Reading direction around the circle; defaults to clockwise. */
64
66
  readonly direction?: "clockwise" | "counterclockwise";
65
67
  }
@@ -14,7 +14,7 @@ import { generate } from "@metamesh/project";
14
14
 
15
15
 
16
16
  Studio supplies this API and its runtime to code Projects. Standalone applications use the same
17
- operations inside a generation program. The [Model API reference](../reference/model.md) provides
17
+ values in a generation program. The [Model API reference](../reference/model.md) provides
18
18
  exact signatures; this guide explains how the concepts fit together.
19
19
 
20
20
  ## Choose the module for your host
@@ -26,8 +26,9 @@ exact signatures; this guide explains how the concepts fit together.
26
26
  | [`@metamesh/modeling/engine`](../reference/engine.md) | Standalone initialization, model finalization, and 3MF export | Your Node application or browser Worker |
27
27
  | [`@metamesh/modeling/text`](../reference/text.md) | Prepare exact font bytes and vector layouts outside Studio | Your host acquires the font bytes |
28
28
 
29
- Call root modeling operations inside synchronous generation. Add pure geometry helpers for custom
30
- calculations.
29
+ Construct immutable shapes, vectors, paths, and transforms in ordinary TypeScript and reuse them in
30
+ synchronous generation. A host evaluates geometry and owns observations and export. Add pure
31
+ geometry helpers for custom calculations.
31
32
 
32
33
  ## Use Modeling outside Studio
33
34
 
@@ -39,11 +40,12 @@ For lettering, [prepare exact font bytes](fonts.md) before building.
39
40
 
40
41
  The public API names values by modeling role:
41
42
 
42
- - A `Path3` is an ordered 3D trajectory.
43
- - A `Path2` is an ordered 2D trajectory.
43
+ - `Path2` and `Path3` are immutable sampled trajectories created by `path2` and `path3`.
44
+ Each owns its closure, traversal order, and finite coordinates.
45
+ - `Path2Data` and `Path3Data` are tuple collections for path interchange.
44
46
  - A `Contour` is plain point data for a closed 2D boundary, without a repeated closing point.
45
- - A `Polygon` is explicit point data for one outer contour and its holes. A `Region` contains
46
- disjoint polygons; neither is an engine-owned modeling handle.
47
+ - `PolygonData` contains one outer contour and its holes. `RegionData` is the plain serialized
48
+ representation of filled 2D geometry, including disconnected polygons.
47
49
  - A `Profile` specifies identified components, contours and spans for a related shape family.
48
50
  - A `CorrespondingProfile` contains the shared sampled landmarks produced by `matchProfiles`.
49
51
  - A `Section` is a filled 2D shape used for section Booleans, offsets, extrusion, revolution,
@@ -51,11 +53,16 @@ The public API names values by modeling role:
51
53
  - A `Solid` is a valid three-dimensional result that can participate in solid Booleans and become
52
54
  model output.
53
55
  - An `Anchor3` is an explicit local frame used to place one solid against another.
54
- - `Vector2` and `Vector3` are fixed numeric tuples for low-level coordinates.
56
+ - `Vector2` and `Vector3` are immutable arithmetic values created by `vector2` and `vector3`.
57
+ - `Vector2Tuple` and `Vector3Tuple` are fixed numeric tuples for coordinate interchange and kernels.
55
58
  - `Bounds2` and `Bounds3` contain finite minimum and maximum tuples for measurements and placement.
56
59
 
57
- `Section` and `Solid` are opaque, evaluator-owned handles. Authored code chains their immutable
58
- methods and combines collections through imported functions. The engine owns native kernel values.
60
+ `Section` and `Solid` are opaque immutable recipes. Construction and composition need no engine;
61
+ ordinary recipes can be reused across sessions regardless of where they were constructed.
62
+ Explicitly supplied resolution settings are captured; unspecified settings inherit the evaluating
63
+ host's defaults. The host owns evaluation caches and native kernel values. `components()` is an
64
+ observation: its selected shapes, and recipes using them, can only be evaluated in the originating
65
+ session because component identity depends on evaluated topology.
59
66
 
60
67
  Ordinary models use root Sections for shapes, Booleans, extrusion, sweeps, and lofts. The pure
61
68
  `/geometry` entry supplies point data through `circleContour`, `rectangleContour`, and other contour factories
@@ -66,8 +73,24 @@ reflects the operation's role.
66
73
  Use [`polygon(points)`](../reference/model/polygon.md) to fill one contour. The explicit
67
74
  `polygon({ outer, holes })` form validates exterior/hole topology and normalizes winding.
68
75
  `polygon({ contours, fillRule })` resolves compound paths with `"nonzero"` fill by default or
69
- explicit `"evenodd"` fill. These constructors return the same `Section` type as `circle` or
70
- `rectangle`; subsequent Booleans may produce holes or disconnected components.
76
+ explicit `"evenodd"` fill. Use `polygon({ polygons: data })` for existing `RegionData`.
77
+ Every form returns the same `Section` type as `circle` or `rectangle`; subsequent Booleans may
78
+ produce holes or disconnected components. `section.toRegionData()` observes the evaluated shape
79
+ inside synchronous generation. Keep serialized point data for interchange or pure preparation.
80
+
81
+ Use `path2(points, { closed: true })` for a reusable boundary. Its `length()` includes the closing
82
+ edge, and `closestPoint(query)` returns a fluent point, distance, edge index, and fraction within
83
+ that edge. Queries measure the sampled boundary; they do not measure a filled interior or an
84
+ underlying analytic curve. Chain `transform`, `reverse`, and equal-distance `resample` to create
85
+ new paths. Closed paths omit the duplicated endpoint. Open paths may be empty; their bounds are
86
+ `undefined`, and closest-point queries need at least two points.
87
+
88
+ Pass paths directly to `polygon`, `stroke`, sweeps, and path patterns in the matching dimension.
89
+ `polygon(path)` requires a closed planar value and establishes exterior/hole winding. A path's
90
+ transform preserves traversal even after reflection. Individual vector inputs and authored point
91
+ collections accept fluent vectors as well as tuples; serialized data contracts remain tuple-only.
92
+ `toArray()` returns frozen tuples for interchange and does not encode closure. Keep the path value
93
+ when passing closure between operations.
71
94
 
72
95
  `rectangleProfile({ size: [width, height], treatment: { kind: "round", radius }, id })` describes
73
96
  identified spans for custom geometry. Prepare a complete explicit family with `matchProfiles`
@@ -97,8 +120,8 @@ filled Section and `box({ size: [24, 16, 6] })` creates a Solid. `union` and `in
97
120
  combine same-dimensional arrays. `shape.subtract(cutters)` accepts an array of same-dimensional
98
121
  cutters. `section.offset(distance, options)` stays in the filled XY plane.
99
122
 
100
- `section.extrude({ height, twistDegrees, scaleTop })` adds +Z depth, with its bottom at zero unless
101
- `center: true` is requested. `section.revolve({ revolveDegrees })` rotates radial/Z geometry around
123
+ `section.extrude({ height, twist, scaleTop })` adds +Z depth, with its bottom at zero unless
124
+ `center: true` is requested. `section.revolve({ degrees })` rotates radial/Z geometry around
102
125
  +Z. `loft` pairs retained landmarks in compatible primitive Sections, including zero and fully
103
126
  rounded rectangle corners, and circle/ellipse stations transitioning to rectangles. This also works
104
127
  after invertible XY transforms with consistent handedness. It accepts explicit corresponding
@@ -112,6 +135,9 @@ degree twist, uniform/XY/per-station scales and an explicit compatible closed se
112
135
 
113
136
  MetaMesh uses a right-handed coordinate system with **+Z up**. Authored dimensions and curve
114
137
  tolerances are millimetres; angular arguments such as `rotate` use degrees.
138
+ Pure [`rotate2`](../reference/geometry/rotate2.md) and transform-chain rotations also take degrees.
139
+ The low-level [`rotationTransform3`](../reference/geometry/rotationTransform3.md) constructor
140
+ requires an explicit `{ degrees }` or `{ radians }` angle.
115
141
 
116
142
  `GeometryResolution` controls sampled curves in physical space. The default maximum chord error is
117
143
  `0.05 mm`, with 16–512 segments for a complete circle and no default maximum segment length. An
@@ -124,7 +150,7 @@ match point for point. Use physical chord and segment limits for ordinary printa
124
150
  requested tolerance cannot fit within the safety cap, the operation fails instead of silently
125
151
  returning a coarser shape.
126
152
 
127
- `regularPolygon({ radius, sides, rotationDegrees, sizing })` makes a filled regular polygon.
153
+ `regularPolygon({ radius, sides, rotation, sizing })` makes a filled regular polygon.
128
154
  `sizing: "vertex"` uses the specified vertex radius; `"face"` compensates faceting so the faces
129
155
  meet the nominal radius. `circle` and `cylinder` support the same radial convention.
130
156
 
@@ -136,9 +162,97 @@ Zero rounding radius, zero chamfer/smooth distance, or an all-zero distance pair
136
162
  selected feature untreated. Other setback pairs must have two positive values; negative and
137
163
  nonfinite amounts reject. Disabled extrusion end treatments retain ordinary extrusion support,
138
164
  including holes and twist.
139
- `placement` maps a named or explicit shape-local anchor to a world anchor after local
165
+ `attachment` maps a named or explicit shape-local anchor to a world anchor after local
140
166
  construction, using alignment, millimetre gap and degree spin. Section placement must stay in XY.
141
167
 
168
+ ## Reuse a transform across shapes and coordinates
169
+
170
+ Use [`transform2`](../reference/geometry/transform2.md) and
171
+ [`transform3`](../reference/geometry/transform3.md) chains for reusable placements. They are immutable
172
+ and pure; no engine initialization is needed. Calls apply in written order. A rotation followed
173
+ by a translation rotates around the origin, then moves the result:
174
+
175
+
176
+
177
+ ```ts
178
+ import { transform3, vector3 } from "@metamesh/modeling";
179
+
180
+ // Calls apply in written order: rotate, then translate.
181
+ const placement = transform3().rotate([0, 0, 90]).translate([20, 0, 5]);
182
+ export const placedPoint = placement.applyPoint([10, 0, 0]); // approximately [20, 10, 5]
183
+ export const placedDirection = placement.applyDirection([10, 0, 0]); // approximately [0, 10, 0]
184
+ ```
185
+
186
+
187
+
188
+ Pass a transform directly to `solid.transform(placement)`, `section.transform(placement)` and
189
+ matching path helpers. `toMatrix()` supplies a canonical matrix when another system needs it.
190
+ Construct the placement once and reuse it across point collections.
191
+
192
+ `current.andThen(next)` applies `current` first and `next` second, accepting another chain or a
193
+ same-dimensional matrix. `inverse()` returns the reverse placement. Transform-building operations
194
+ return new chains, so shared placements can branch safely.
195
+
196
+ Use `rotate(degrees, { pivot })` or `scale(factors, { pivot })` to work around a world-space pivot after
197
+ the preceding operations. In 3D, `rotate` takes XYZ Euler degrees, applied about global X, Y, then
198
+ Z; `rotateAxis(axis, degrees, { pivot })` normalizes its nonzero axis. Omitted pivots use the
199
+ coordinate origin. Uniform and per-axis scales
200
+ must be finite and nonzero; negative factors reflect. Nonfinite inputs, invalid axes, and singular
201
+ matrices throw `GeometryError`.
202
+
203
+ `applyPoint` includes translation. `applyDirection` excludes translation and preserves scale;
204
+ its result is not normalized. `applyNormal` applies the inverse transpose and returns a unit normal,
205
+ including under nonuniform scaling; it rejects zero normals. All three return fluent vectors.
206
+
207
+ `Transform2` works directly with Sections and pure XY helpers; its `Transform2Matrix` is the same
208
+ canonical 3x3 representation throughout. Use `to3D()` when that XY placement
209
+ also needs to position a Solid or 3D path. The reverse `to2D()` conversion rejects transforms
210
+ that move the XY plane or collapse its dimensions; it does not project 3D points.
211
+ See the [2D placement recipe](recipes.md#reuse-a-2d-placement).
212
+
213
+ For low-level matrix interoperability, the factories accept existing canonical matrices. Use
214
+ `transform3(frameTransform3(frame))` for an orthonormal frame. The raw constructors and
215
+ `composeTransform3(after, before)` remain available; composition applies `before` first.
216
+
217
+ ## Calculate with vectors
218
+
219
+ Use [`vector2`](../reference/geometry/vector2.md) and [`vector3`](../reference/geometry/vector3.md)
220
+ for readable arithmetic chains. Operands accept tuples or vectors; `dot`, `length` and `distance`
221
+ return numbers. `cross` returns a signed scalar in 2D and a right-handed vector in 3D.
222
+
223
+
224
+
225
+ ```ts
226
+ export const direction = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
227
+ export const alignment = direction.dot([0, 0, 1]); // number
228
+ ```
229
+
230
+
231
+
232
+ Values snapshot their input and operations return new values. `toArray()` returns the value's
233
+ frozen coordinate tuple without allocating another copy. Normalization rejects zero-length vectors;
234
+ nonfinite coordinates, scalar parameters and overflowing results throw `GeometryError`.
235
+
236
+ For rotations and nonuniform scaling, use a reusable transform's `applyDirection`. Use
237
+ `applyNormal` for surface normals:
238
+
239
+
240
+
241
+ ```ts
242
+ const stretched = transform3().scale([2, 1, 1]);
243
+ export const normal = stretched.applyNormal([1, 1, 0]);
244
+ export const tangent = stretched.applyDirection([1, -1, 0]);
245
+ export const perpendicular = normal.dot(tangent); // approximately 0
246
+ ```
247
+
248
+
249
+
250
+ The tuple arithmetic kernels remain available for dense numerical loops. Fluent values add
251
+ validation and immutable object allocation; they are an authoring convenience, not a speedup.
252
+ Fluent math, shape transforms and part placement accept vector values directly; geometry
253
+ specifications and point collections use canonical tuples.
254
+ Keep simple coordinate expressions and equations intrinsic to the model beside the model.
255
+
142
256
  ## SVG sections: fills and strokes are different inputs
143
257
 
144
258
  [`svgSection`](../reference/model/svgSection.md) converts a bounded complete SVG document into one
@@ -169,7 +283,8 @@ ambient font provider or repeated shaping during export. Declare a Text control
169
283
  and a Font control for the face and weight.
170
284
 
171
285
  Font size is the em size in millimetres, not the height of a particular letter. Layout supports
172
- multiple lines, spacing, and alignment. Follow the
286
+ horizontal lines, spacing, and alignment, or a single circular baseline through
287
+ [`VectorTextArcBaseline`](../reference/text/VectorTextArcBaseline.md). Follow the
173
288
  [text recipe](recipes.md#text-from-a-font-parameter) for the control setup,
174
289
  layout conventions, and font availability limits.
175
290
 
@@ -189,6 +304,9 @@ values. Use
189
304
  `inspectSection()` and `inspectSolid()` for supported bounds, topology counts, area, and volume
190
305
  measurements.
191
306
 
307
+ Observations, including `section.toRegionData()`, require the host's active synchronous generation.
308
+ Constructing or composing a recipe outside generation does not evaluate it.
309
+
192
310
  An inspection result describes the generated geometry; it does not certify wall thickness,
193
311
  overhangs, fits, loads, or manufacturability. Keep those product decisions in parameters,
194
312
  validation, and your downstream manufacturing checks.
@@ -18,6 +18,9 @@ pnpm add woff2-encoder
18
18
  TTF, OTF, and WOFF input use fontkit directly. WOFF2 decoding loads only when needed. The library
19
19
  does not fetch fonts; your application supplies their bytes.
20
20
 
21
+ For a static face whose actual weight is not 400, pass that weight through `staticWeight` when
22
+ preparing it. This identifies the supplied face; it does not synthesize another weight.
23
+
21
24
  ## Prepare one reusable layout
22
25
 
23
26
 
@@ -47,5 +50,10 @@ Call `makeLabelLayout(fontBytes)` with the acquired bytes. It returns a `layout`
47
50
  section with the ordinary modeling operations. A host can prepare layouts ahead of time or inject
48
51
  a deterministic text service and cache layouts with `computed`.
49
52
 
53
+ The same layout options support horizontal lines or one circular line through
54
+ [`VectorTextArcBaseline`](../reference/text/VectorTextArcBaseline.md). The
55
+ [text recipe](recipes.md#text-from-a-font-parameter) explains units, alignment,
56
+ metrics, and circular-text constraints.
57
+
50
58
  Use the [Font preparation reference](../reference/text.md) for font and layout options, or
51
59
  [Run Modeling in your application](hosting.md) for the host lifecycle.
@@ -118,9 +118,14 @@ Geometry values allocate resources outside ordinary JavaScript objects. Studio's
118
118
  those resources for each run and cleans them up deterministically. Authored code should never
119
119
  initialize the kernel or manually delete a `Section` or `Solid`.
120
120
 
121
- Use `inspectSection()` or `inspectSolid()` when you need supported measurements such as bounds,
122
- area, volume, or part counts. Return an array of `part(...)` declarations to hand the final result
123
- back to Studio for preview and export.
121
+ Use `inspectSection()` or `inspectSolid()` for measurements such as bounds, area, volume, and
122
+ `componentCount`. `components()` returns disconnected material pieces, preserving holes and
123
+ enclosed cavities. A sealed hollow box is one component; adding a loose ball inside its cavity
124
+ makes two. Recombining the pieces preserves the original material.
125
+
126
+ Snapshot `stats.partCount` counts the named output parts declared with `part(...)`. One output
127
+ part may contain several material components. Return one declaration or an array of them to hand
128
+ the result back to Studio for preview and export.
124
129
 
125
130
 
126
131
 
@@ -199,10 +199,12 @@ instance limits, including cache hits. Empty output is invalid.
199
199
 
200
200
  ## Ownership and recovery
201
201
 
202
- Solids and Sections describe deferred recipes owned by the session. Observations such as
203
- `inspectSolid` realize their required geometry synchronously and return copied facts. Native
204
- allocations belong only to the active transaction and are cleaned on success and failure. Authors
205
- do not dispose native handles or use them across sessions. Nested or asynchronous execution rejects.
202
+ Solids and Sections describe immutable deferred recipes. Ordinary recipes are reusable across
203
+ sessions regardless of where constructed; unspecified resolution settings inherit the evaluating
204
+ host's defaults. Observations such as `inspectSolid` realize required geometry synchronously and
205
+ return copied facts. `components()` selections, and recipes using them, can only be evaluated in
206
+ the originating session because their identity depends on evaluated topology. The host owns
207
+ native allocations and cleanup on success and failure. Nested or asynchronous execution rejects.
206
208
  Apply local resolution explicitly to each affected constructor or Section operation.
207
209
 
208
210
  Source/control-definition changes invalidate the program session. Parameter edits reuse it.
@@ -32,12 +32,15 @@ export async function makePlate3mf(): Promise<ArrayBuffer> {
32
32
  return [part("plate", { geometry: plate.subtract([bore]), color: "#67e8f9" })];
33
33
  })
34
34
  );
35
- const model = session.run({});
36
- // Generation already disposed native handles. These finalized meshes remain usable.
37
35
  try {
38
- return await engine.export3mf(model.parts, { name: "Plate" });
36
+ const model = session.run({});
37
+ // Generation already disposed native handles. These finalized meshes remain usable.
38
+ try {
39
+ return await engine.export3mf(model.parts, { name: "Plate" });
40
+ } finally {
41
+ model.dispose();
42
+ }
39
43
  } finally {
40
- model.dispose();
41
44
  session.dispose();
42
45
  }
43
46
  }
@@ -50,27 +53,37 @@ move engine initialization out of the function and reuse that engine and its mod
50
53
 
51
54
  ## Keep execution synchronous
52
55
 
53
- Acquire assets before generation. Imported modeling functions run inside its synchronous callback;
54
- computations and observations cannot cross an async boundary. Sessions cannot execute nested runs
55
- in one realm. Services are explicit synchronous capabilities supplied at session creation.
56
+ Acquire assets before generation. Ordinary immutable Solid/Section recipes, vectors, paths and
57
+ transforms can be constructed without an engine and reused across sessions. Explicit resolution
58
+ settings stay with a recipe; omitted settings inherit the evaluating host's defaults. Computed
59
+ readers and geometry observations require active synchronous generation and cannot cross an async
60
+ boundary. Sessions cannot execute nested runs in one realm. Services are explicit synchronous
61
+ capabilities supplied at session creation.
56
62
 
57
- A session owns optional computed caches and deferred Solid/Section recipes. It may retain evaluated
63
+ A session owns evaluation, optional computed caches and native resources. It may retain evaluated
58
64
  computed shapes privately for later cuts or Booleans; temporary native allocations are cleaned after
59
- each run. Separate expensive base geometry from finishing operations to reuse it. A returned snapshot
60
- owns copied manufacturing buffers until `snapshot.dispose()`; `session.dispose()` releases caches
61
- while retained snapshots remain usable. Keep captured output for rendering/export and release it
62
- when its consumer is done.
65
+ each run. Separate expensive base geometry from finishing operations to reuse it. Observed
66
+ `components()` selections depend on evaluated topology and remain restricted to their originating
67
+ session; ordinary recipes remain portable.
68
+
69
+ A returned snapshot retains captured manufacturing buffers independently of its session. Accessing
70
+ a part's `positions` or `indices`, including through its local `geometry` resource, returns a fresh
71
+ owned copy on every read. Read each field once when processing its buffer. `session.dispose()`
72
+ releases caches while captured snapshots remain usable. `snapshot.dispose()` releases its references
73
+ and makes subsequent `parts`, `bounds` and `stats` access invalid; diagnostics, dependencies and parts
74
+ already obtained remain usable. Disposing a snapshot does not affect another snapshot or an export
75
+ already in progress. Release captured output when its consumer is done.
63
76
 
64
77
  ## Load WASM in a browser Worker
65
78
 
66
79
  The package includes its matching JS/WASM kernel. Node and unbundled browser modules resolve the
67
80
  installed WASM asset automatically. A browser bundler must retain or emit that relative asset;
68
81
  [`modelingWasmUrl`](../reference/engine/modelingWasmUrl.md) can supply the emitted URL through
69
- `createModelEngine({ locateFile })`.
82
+ `createModelEngine({ wasmUrl: modelingWasmUrl })`.
70
83
 
71
84
  Your application owns Worker creation and message handling. Separate Workers have independent
72
85
  execution scopes. Transfer owned copies of completed buffers; transferring cache backing storage
73
- would detach it. Native geometry never crosses Workers or runs.
86
+ would detach it. Native handles remain private to their engine.
74
87
 
75
88
  ## Set resource limits
76
89
 
@@ -101,7 +101,7 @@ export default generate(({ part }) => {
101
101
  `);
102
102
  // Check the imported topology before using it in the manufacturing solid.
103
103
  const measurements = inspectSection(badge);
104
- if (measurements.parts !== 1 || measurements.contours !== 2) {
104
+ if (measurements.componentCount !== 1 || measurements.contourCount !== 2) {
105
105
  throw new Error("Expected one badge with one rectangular opening.");
106
106
  }
107
107
  return [part("model", badge.extrude({ height: 4, center: true }))];
@@ -160,7 +160,7 @@ One radial wall profile revolved around +Z creates the floor and tapered cup wal
160
160
 
161
161
  [`polygon`](../reference/model/polygon.md) fills the ordered contour.
162
162
  [`Section.revolve`](../reference/model/Section.md#revolve) defaults to a complete `360°` turn. Set
163
- `revolveDegrees: 270` for a capped partial turn that exposes the cross section. Keep the closed
163
+ `degrees: 270` for a capped partial turn that exposes the cross section. Keep the closed
164
164
  profile free of self-intersections and never repeat its first point at the end.
165
165
 
166
166
  For an open side outline, [`sampleSideProfile`](../reference/geometry/sampleSideProfile.md)
@@ -240,7 +240,7 @@ export default generate(({ part }) => {
240
240
  const arms = radialPattern(arm.translate([18, 0, 0]).rotate([0, 0, 30]), {
241
241
  count: 6,
242
242
  axis: [0, 0, 1],
243
- angleDegrees: 60,
243
+ angle: 60,
244
244
  });
245
245
  // Both shapes are Z-centered; extra cutter height clears both hub faces.
246
246
  const bore = cylinder({ height: 16, radius: 4 });
@@ -261,6 +261,70 @@ Exact signatures: [`box`](../reference/model/box.md),
261
261
  [`cylinder`](../reference/model/cylinder.md), and
262
262
  [`radialPattern`](../reference/model/radialPattern.md).
263
263
 
264
+ ## Reuse a 2D placement
265
+
266
+ Build one [`transform2`](../reference/geometry/transform2.md) chain when the same placement applies
267
+ to a Section and its plain point data. This placement rotates around `[2, 1]`, then translates:
268
+
269
+
270
+
271
+ ```ts
272
+ import { path2, pathPattern, polygon, rectangle, transform2, union } from "@metamesh/modeling";
273
+
274
+ const planarPlacement = transform2()
275
+ .rotate(90, { pivot: [2, 1] })
276
+ .translate([10, 0]);
277
+ const outline = [
278
+ [0, 0],
279
+ [4, 0],
280
+ [0, 2],
281
+ ] as const;
282
+
283
+ // Shape construction and composition are pure; the host evaluates the finished body.
284
+ export const placedBody = polygon({ outer: outline, holes: [] })
285
+ .transform(planarPlacement)
286
+ .extrude({ height: 8 });
287
+
288
+ // Paths accept the same placement. Matrices and tuples remain available for interchange.
289
+ export const sectionMatrix = planarPlacement.toMatrix();
290
+ export const placedContour = path2(outline, { closed: true }).transform(planarPlacement);
291
+ ```
292
+
293
+
294
+
295
+ Pass the placement directly to `section.transform(planarPlacement)` or `path.transform(planarPlacement)`.
296
+ Fill the transformed closed path with `polygon(placedContour)` when you need material.
297
+ [`transformRegionData`](../reference/geometry/transformRegionData.md) serves serialized filled data.
298
+
299
+ A negative scale factor reflects the placement. Paths retain traversal order, including closed
300
+ paths; filled Sections and serialized regions restore outer and hole winding. `andThen(next)`
301
+ composes another placement in execution order;
302
+ reuse the placement instead of building a chain inside each point iteration. `toMatrix()` is
303
+ available for matrix interchange.
304
+
305
+ Section path patterns consume `Path2` values directly. Tangent orientation aligns the Section's
306
+ local +X direction with the path while preserving its XY plane:
307
+
308
+
309
+
310
+ ```ts
311
+ const guide = path2([
312
+ [0, 0],
313
+ [12, 0],
314
+ [12, 12],
315
+ ]);
316
+ const tabs = pathPattern(rectangle({ size: [4, 2] }), guide, {
317
+ count: 5,
318
+ orientation: "tangent",
319
+ });
320
+ export const patternedTabs = union(tabs).extrude({ height: 3 });
321
+ ```
322
+
323
+
324
+
325
+ Linear Section patterns use XY directions. Radial Section patterns rotate about an optional XY
326
+ `pivot` using the implicit +Z axis; spatial Solid patterns retain their explicit rotation axis.
327
+
264
328
  ## Rotation-minimizing path sweep
265
329
 
266
330
 
@@ -299,7 +363,7 @@ The asymmetric section makes its transported orientation visible as the path tur
299
363
  `section.sweep(path, options)` transports the filled shape along the path. Choose the starting profile-X direction with
300
364
  `orientation: { kind: "transport", initialNormal: [0, 1, 0] }`. Fixed normals, directed normal guides
301
365
  and discrete Frenet frames are explicit alternative policies; singular selected policies reject.
302
- `twistDegrees` adds total rotation, following physical path length by default; `twistBy: "stations"`
366
+ `twist` adds total rotation, following physical path length by default; `twistBy: "stations"`
303
367
  uses the authored station schedule. `scale` accepts a positive uniform size, XY pair or one XY pair
304
368
  per normalized station. `closed: true` joins an implicitly closed path without repeated endpoints;
305
369
  orientation, scales and `seamProfileOffset` must describe a compatible closing seam.
@@ -338,7 +402,7 @@ and placement. `pin.attach("bottom", anchor(base, "top"))` mates opposed directi
338
402
  patterns carry those frames with the shape, with outward normals preserved under nonuniform scale
339
403
  and reflection. The axis names are `left/right` (−X/+X), `back/front` (−Y/+Y) and `bottom/top` (−Z/+Z).
340
404
 
341
- Use `shape.withAnchors({ mount: createAnchor3(position, direction, up) })` to define a custom datum
405
+ Use `shape.withAnchors({ mount: anchor3(position, direction, up) })` to define a custom datum
342
406
  on a new handle. Existing names remain unless replaced; definitions are copied and immutable.
343
407
  Boolean and other constructed shapes need explicit definitions because their surfaces may change.
344
408
  Anchor names use lowercase kebab-case, with at most 64 characters and 128 definitions per shape.
@@ -349,8 +413,8 @@ move them. Tube and torus axial datums may lie over an opening; a cone has no ca
349
413
  Regular polygons and stars expose only `center`. Custom `Anchor3` frames, including pure
350
414
  `boxAnchor3` and `cylinderAnchor3` helpers, work wherever a source or target frame is required.
351
415
 
352
- Primitive `placement` uses the same source/target anchor, `alignment`, `gap` and `spinDegrees`
353
- vocabulary as `attach`, including a named `source`. It applies after local shape construction. Filled Section placement must
416
+ Primitive `attachment` uses the same source/target anchor, `alignment`, `gap` and `spin`
417
+ vocabulary as `attach`, including a named `source`. It applies after local shape construction. Filled Section attachment must
354
418
  preserve the XY plane.
355
419
 
356
420
  The `gap` here separates the two pieces along the target normal; it is a placement distance, not
@@ -451,7 +515,7 @@ The two rounded rectangles retain matching corner identities while their size an
451
515
  This [`loft`](../reference/model/loft.md) example places a rounded rectangle at two heights. Use
452
516
  `scale`, `rotate` and `translate` to pose the top profile in XY; `rotate` takes degrees. Each
453
517
  station uses `z` for an ordinary horizontal plane. To tilt a station, pass
454
- `frame: anchorFrame3(createAnchor3(position, direction, up))` instead; the direction chooses its
518
+ `frame: anchorFrame3(anchor3(position, direction, up))` instead; the direction chooses its
455
519
  normal and a nonparallel `up` vector chooses its roll.
456
520
 
457
521
  The primitive retains its corner identities, so `loft` pairs corresponding landmarks without
@@ -599,10 +663,17 @@ export function fitLabel(layout: VectorTextLayout): FittedTextLayout {
599
663
  | `font` | The complete Font control value, including the exact face revision and weight |
600
664
  | `fontSize` | Em size in millimetres; visible capital height depends on the font |
601
665
  | `letterSpacing` | Extra millimetres between shaped glyph clusters |
602
- | `align` | Left, center, or right alignment using each line's advance width |
666
+ | `align` | Left, center, or right alignment using the text's advance |
603
667
  | `verticalAlign` | First-line baseline by default, or top, center, or bottom using visible bounds |
604
668
  | `lineHeight` | Baseline-spacing multiplier; omitted uses the font's natural line spacing |
605
669
 
670
+ For a circular label, add a [`baseline`](../reference/text/VectorTextArcBaseline.md) with
671
+ `kind: "arc"` and a positive `radius` in millimetres to the layout options. The baseline is centered
672
+ at the XY origin; `centerAngle` chooses its alignment datum and `direction` chooses the
673
+ reading direction. Each shaped glyph group rotates without bending. Circular text requires one
674
+ line and baseline vertical alignment; its default horizontal alignment is centered. Arbitrary
675
+ path text and automatic wrapping are outside this API.
676
+
606
677
  Text uses positive Y upward and supports line breaks, with at most 512 UTF-16 units and 16 lines.
607
678
  Empty or whitespace-only text can be measured but cannot create a section. Return a parameter error
608
679
  for that expected input; a missing glyph also requires different wording or a font that supports it.
@@ -612,7 +683,7 @@ Studio loads declared fonts before generation. Export uses the captured visible
612
683
  preserves the exact selection, including its revision, without embedding font bytes. Fonts beyond
613
684
  the bundled starters can require internet; ordinary browser caching does not guarantee them offline.
614
685
  If loading fails, Studio preserves the selection and last valid model so you can retry or choose a
615
- replacement. Custom font uploads and text on paths are not supported.
686
+ replacement. Studio does not support custom font uploads.
616
687
 
617
688
  ## Solid inspection
618
689
 
@@ -626,7 +697,7 @@ export default generate(({ part }) => {
626
697
  const result = box({ size: [40, 30, 5] });
627
698
  const measurements = inspectSolid(result);
628
699
 
629
- if (measurements.min[2] < -2.5 || measurements.parts !== 1) {
700
+ if (measurements.min[2] < -2.5 || measurements.componentCount !== 1) {
630
701
  throw new Error("Unexpected placement or disconnected result.");
631
702
  }
632
703