@metamesh/modeling 0.12.0 → 0.14.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 (699) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +103 -72
  3. package/dist/api/engine.d.ts +123 -97
  4. package/dist/api/geometry.d.ts +4232 -3307
  5. package/dist/api/index.d.ts +2758 -2268
  6. package/dist/api/text.d.ts +119 -107
  7. package/dist/docs/guides/concepts.md +300 -0
  8. package/dist/docs/guides/fonts.md +59 -0
  9. package/dist/docs/guides/fundamentals.md +137 -0
  10. package/dist/docs/guides/generation.md +223 -0
  11. package/dist/docs/guides/hosting.md +91 -0
  12. package/dist/docs/guides/recipes.md +718 -0
  13. package/dist/docs/manifest.json +10703 -0
  14. package/dist/docs/reference/engine/Export3mfOptions.md +29 -0
  15. package/dist/docs/reference/engine/ExportMeshPart.md +65 -0
  16. package/dist/docs/reference/engine/GenerationOptions.md +62 -0
  17. package/dist/docs/reference/engine/GeometryResource.md +77 -0
  18. package/dist/docs/reference/engine/ModelDependencies.md +41 -0
  19. package/dist/docs/reference/engine/ModelEngine.md +103 -0
  20. package/dist/docs/reference/engine/ModelEngineOptions.md +33 -0
  21. package/dist/docs/reference/engine/ModelSession.md +96 -0
  22. package/dist/docs/reference/engine/ModelSnapshot.md +173 -0
  23. package/dist/docs/reference/engine/SessionOptions.md +123 -0
  24. package/dist/docs/reference/engine/SnapshotPart.md +130 -0
  25. package/dist/docs/reference/engine/categories/host-lifecycle.md +37 -0
  26. package/dist/docs/reference/engine/createModelEngine.md +56 -0
  27. package/dist/docs/reference/engine/defaultModelingLimits.md +7 -0
  28. package/dist/docs/reference/engine/modelingWasmUrl.md +7 -0
  29. package/dist/docs/reference/engine/validateModel.md +48 -0
  30. package/dist/docs/reference/engine.md +25 -0
  31. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +75 -0
  32. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +92 -0
  33. package/dist/docs/reference/geometry/Anchor3.md +53 -0
  34. package/dist/docs/reference/geometry/ArcCurve2.md +70 -0
  35. package/dist/docs/reference/geometry/ArcCurve3.md +94 -0
  36. package/dist/docs/reference/geometry/AttachTransformOptions.md +62 -0
  37. package/dist/docs/reference/geometry/AxisAngleRotation3.md +66 -0
  38. package/dist/docs/reference/geometry/Bounds2.md +39 -0
  39. package/dist/docs/reference/geometry/Bounds3.md +39 -0
  40. package/dist/docs/reference/geometry/BoundsFit2.md +52 -0
  41. package/dist/docs/reference/geometry/BoundsFit3.md +52 -0
  42. package/dist/docs/reference/geometry/BoundsFitOptions.md +23 -0
  43. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +23 -0
  44. package/dist/docs/reference/geometry/BoxAnchorFace.md +14 -0
  45. package/dist/docs/reference/geometry/BoxAnchorOptions.md +63 -0
  46. package/dist/docs/reference/geometry/BoxEdge.md +7 -0
  47. package/dist/docs/reference/geometry/BoxEdgeSelection.md +14 -0
  48. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +15 -0
  49. package/dist/docs/reference/geometry/BoxOptions.md +87 -0
  50. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +7 -0
  51. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +93 -0
  52. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +29 -0
  53. package/dist/docs/reference/geometry/CircleContourOptions.md +15 -0
  54. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +59 -0
  55. package/dist/docs/reference/geometry/CircularResolutionOptions.md +107 -0
  56. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +41 -0
  57. package/dist/docs/reference/geometry/ClearanceHoleFit.md +7 -0
  58. package/dist/docs/reference/geometry/ClosestPointOnPathOptions.md +34 -0
  59. package/dist/docs/reference/geometry/ClosestPointOnPathResult.md +65 -0
  60. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +53 -0
  61. package/dist/docs/reference/geometry/Contour.md +17 -0
  62. package/dist/docs/reference/geometry/ContourCurve.md +35 -0
  63. package/dist/docs/reference/geometry/ContourPoint.md +29 -0
  64. package/dist/docs/reference/geometry/ContourSegment.md +86 -0
  65. package/dist/docs/reference/geometry/CorrespondingComponent.md +46 -0
  66. package/dist/docs/reference/geometry/CorrespondingContour.md +46 -0
  67. package/dist/docs/reference/geometry/CorrespondingProfile.md +22 -0
  68. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +27 -0
  69. package/dist/docs/reference/geometry/CubicBezierCurve2.md +70 -0
  70. package/dist/docs/reference/geometry/CubicBezierCurve3.md +70 -0
  71. package/dist/docs/reference/geometry/Curve2.md +16 -0
  72. package/dist/docs/reference/geometry/Curve3.md +16 -0
  73. package/dist/docs/reference/geometry/CurveSamplingOptions.md +64 -0
  74. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +73 -0
  75. package/dist/docs/reference/geometry/CylinderAnchorFace.md +14 -0
  76. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +87 -0
  77. package/dist/docs/reference/geometry/CylinderOptions.md +53 -0
  78. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +209 -0
  79. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +7 -0
  80. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +71 -0
  81. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +82 -0
  82. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +34 -0
  83. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +41 -0
  84. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +47 -0
  85. package/dist/docs/reference/geometry/CylindricalGearSpec.md +82 -0
  86. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -0
  87. package/dist/docs/reference/geometry/EdgeTreatment.md +17 -0
  88. package/dist/docs/reference/geometry/EllipseContourOptions.md +15 -0
  89. package/dist/docs/reference/geometry/EndTreatments.md +34 -0
  90. package/dist/docs/reference/geometry/ExtrudeOptions.md +134 -0
  91. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +77 -0
  92. package/dist/docs/reference/geometry/FittedTextLayout.md +60 -0
  93. package/dist/docs/reference/geometry/Frame3.md +58 -0
  94. package/dist/docs/reference/geometry/GeometryError.md +97 -0
  95. package/dist/docs/reference/geometry/GeometryErrorCode.md +7 -0
  96. package/dist/docs/reference/geometry/GeometryErrorContext.md +29 -0
  97. package/dist/docs/reference/geometry/GeometryResolution.md +74 -0
  98. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +62 -0
  99. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +41 -0
  100. package/dist/docs/reference/geometry/GridPatternOptions.md +42 -0
  101. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +14 -0
  102. package/dist/docs/reference/geometry/HeightfieldOptions.md +67 -0
  103. package/dist/docs/reference/geometry/HeightfieldPreflight.md +53 -0
  104. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +141 -0
  105. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +265 -0
  106. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +53 -0
  107. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +18 -0
  108. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +242 -0
  109. package/dist/docs/reference/geometry/LineCurve2.md +46 -0
  110. package/dist/docs/reference/geometry/LineCurve3.md +46 -0
  111. package/dist/docs/reference/geometry/LinearPatternOptions.md +30 -0
  112. package/dist/docs/reference/geometry/LoftCorrespondence.md +19 -0
  113. package/dist/docs/reference/geometry/LoftMeshStation.md +27 -0
  114. package/dist/docs/reference/geometry/LoftOptions.md +84 -0
  115. package/dist/docs/reference/geometry/LoftPlacement.md +66 -0
  116. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +18 -0
  117. package/dist/docs/reference/geometry/MatchProfilesOptions.md +35 -0
  118. package/dist/docs/reference/geometry/MetricFastenerSize.md +7 -0
  119. package/dist/docs/reference/geometry/MetricFastenerStandard.md +72 -0
  120. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +29 -0
  121. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +41 -0
  122. package/dist/docs/reference/geometry/ModelingLimits.md +126 -0
  123. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +17 -0
  124. package/dist/docs/reference/geometry/Path2.md +14 -0
  125. package/dist/docs/reference/geometry/Path3.md +14 -0
  126. package/dist/docs/reference/geometry/PathFrame.md +46 -0
  127. package/dist/docs/reference/geometry/PathNormalGuide.md +38 -0
  128. package/dist/docs/reference/geometry/PathPatternOptions.md +46 -0
  129. package/dist/docs/reference/geometry/PathPlacement.md +34 -0
  130. package/dist/docs/reference/geometry/Pivot2Options.md +26 -0
  131. package/dist/docs/reference/geometry/Pivot3Options.md +26 -0
  132. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +7 -0
  133. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +156 -0
  134. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +120 -0
  135. package/dist/docs/reference/geometry/PlanarPatchQuality.md +190 -0
  136. package/dist/docs/reference/geometry/PolygonData.md +38 -0
  137. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +92 -0
  138. package/dist/docs/reference/geometry/PrimitivePlacement.md +31 -0
  139. package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +83 -0
  140. package/dist/docs/reference/geometry/PrintableThreadFit.md +7 -0
  141. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +45 -0
  142. package/dist/docs/reference/geometry/Profile.md +22 -0
  143. package/dist/docs/reference/geometry/ProfileComponent2.md +46 -0
  144. package/dist/docs/reference/geometry/ProfileContour2.md +34 -0
  145. package/dist/docs/reference/geometry/ProfileSpan2.md +47 -0
  146. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +36 -0
  147. package/dist/docs/reference/geometry/RackPitchDimensions.md +113 -0
  148. package/dist/docs/reference/geometry/RackPitchSpec.md +77 -0
  149. package/dist/docs/reference/geometry/RadialPatternOptions.md +62 -0
  150. package/dist/docs/reference/geometry/RadialSizing.md +7 -0
  151. package/dist/docs/reference/geometry/RadialSizingOptions.md +40 -0
  152. package/dist/docs/reference/geometry/RectangleContourOptions.md +66 -0
  153. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +34 -0
  154. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +14 -0
  155. package/dist/docs/reference/geometry/RectangleProfileOptions.md +94 -0
  156. package/dist/docs/reference/geometry/RegionData.md +14 -0
  157. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +84 -0
  158. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +65 -0
  159. package/dist/docs/reference/geometry/RevolveOptions.md +82 -0
  160. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +91 -0
  161. package/dist/docs/reference/geometry/RowLayoutOptions.md +23 -0
  162. package/dist/docs/reference/geometry/SampleContourOptions.md +71 -0
  163. package/dist/docs/reference/geometry/SampleHelixOptions.md +95 -0
  164. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +71 -0
  165. package/dist/docs/reference/geometry/SampledCurve2.md +34 -0
  166. package/dist/docs/reference/geometry/SampledCurve3.md +34 -0
  167. package/dist/docs/reference/geometry/SampledThreadHelices.md +58 -0
  168. package/dist/docs/reference/geometry/SideProfileCurve.md +35 -0
  169. package/dist/docs/reference/geometry/SideProfilePoint.md +29 -0
  170. package/dist/docs/reference/geometry/SideProfileSegment.md +86 -0
  171. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +71 -0
  172. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +34 -0
  173. package/dist/docs/reference/geometry/SphereOptions.md +15 -0
  174. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +75 -0
  175. package/dist/docs/reference/geometry/StrokePathCap.md +7 -0
  176. package/dist/docs/reference/geometry/StrokePathJoin.md +7 -0
  177. package/dist/docs/reference/geometry/StrokePathRegionOptions.md +85 -0
  178. package/dist/docs/reference/geometry/SvgImportOptions.md +60 -0
  179. package/dist/docs/reference/geometry/SvgRegionPreflight.md +61 -0
  180. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +118 -0
  181. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +65 -0
  182. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +53 -0
  183. package/dist/docs/reference/geometry/SweepOptions.md +109 -0
  184. package/dist/docs/reference/geometry/SweepOrientation.md +109 -0
  185. package/dist/docs/reference/geometry/ThreadBevelOptions.md +53 -0
  186. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +100 -0
  187. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +73 -0
  188. package/dist/docs/reference/geometry/ThreadEndStyle.md +7 -0
  189. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +113 -0
  190. package/dist/docs/reference/geometry/ThreadHandedness.md +7 -0
  191. package/dist/docs/reference/geometry/ThreadHelixOptions.md +120 -0
  192. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +7 -0
  193. package/dist/docs/reference/geometry/ThreadLeadInShape.md +7 -0
  194. package/dist/docs/reference/geometry/ThreadProfile.md +82 -0
  195. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +49 -0
  196. package/dist/docs/reference/geometry/ThreadProfileSpec.md +19 -0
  197. package/dist/docs/reference/geometry/ThreadRole.md +7 -0
  198. package/dist/docs/reference/geometry/ThreadedNutBevel.md +7 -0
  199. package/dist/docs/reference/geometry/ThreadedNutOptions.md +269 -0
  200. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +94 -0
  201. package/dist/docs/reference/geometry/ThreadedNutShape.md +7 -0
  202. package/dist/docs/reference/geometry/ThreadedRodOptions.md +242 -0
  203. package/dist/docs/reference/geometry/TorusOptions.md +105 -0
  204. package/dist/docs/reference/geometry/Transform2-type.md +255 -0
  205. package/dist/docs/reference/geometry/Transform2Input.md +19 -0
  206. package/dist/docs/reference/geometry/Transform2Matrix.md +14 -0
  207. package/dist/docs/reference/geometry/Transform3-type.md +295 -0
  208. package/dist/docs/reference/geometry/Transform3Input.md +19 -0
  209. package/dist/docs/reference/geometry/Transform3Matrix.md +17 -0
  210. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +91 -0
  211. package/dist/docs/reference/geometry/TriangleMesh.md +34 -0
  212. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +119 -0
  213. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +75 -0
  214. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +75 -0
  215. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +39 -0
  216. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +190 -0
  217. package/dist/docs/reference/geometry/TriangleMeshSignature.md +107 -0
  218. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +41 -0
  219. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +29 -0
  220. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +51 -0
  221. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +91 -0
  222. package/dist/docs/reference/geometry/TubeOptions.md +138 -0
  223. package/dist/docs/reference/geometry/Vector2-type.md +269 -0
  224. package/dist/docs/reference/geometry/Vector2Input.md +19 -0
  225. package/dist/docs/reference/geometry/Vector2Tuple.md +14 -0
  226. package/dist/docs/reference/geometry/Vector3-type.md +281 -0
  227. package/dist/docs/reference/geometry/Vector3Input.md +19 -0
  228. package/dist/docs/reference/geometry/Vector3Tuple.md +14 -0
  229. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +53 -0
  230. package/dist/docs/reference/geometry/VectorTextLayout.md +39 -0
  231. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +111 -0
  232. package/dist/docs/reference/geometry/VectorTextMetrics.md +94 -0
  233. package/dist/docs/reference/geometry/VectorTextOptions.md +50 -0
  234. package/dist/docs/reference/geometry/add2.md +36 -0
  235. package/dist/docs/reference/geometry/add3.md +42 -0
  236. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +57 -0
  237. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +52 -0
  238. package/dist/docs/reference/geometry/anchorFrame3.md +40 -0
  239. package/dist/docs/reference/geometry/applyTransformDirection3.md +45 -0
  240. package/dist/docs/reference/geometry/applyTransformPoint3.md +43 -0
  241. package/dist/docs/reference/geometry/attachTransform.md +77 -0
  242. package/dist/docs/reference/geometry/boundsCenter.md +62 -0
  243. package/dist/docs/reference/geometry/boundsFromSize.md +83 -0
  244. package/dist/docs/reference/geometry/boundsSize.md +62 -0
  245. package/dist/docs/reference/geometry/boxAnchor3.md +52 -0
  246. package/dist/docs/reference/geometry/buildHelicalThreadRidgeMesh.md +68 -0
  247. package/dist/docs/reference/geometry/buildHelicalThreadSolidMesh.md +102 -0
  248. package/dist/docs/reference/geometry/categories/bounds-layout.md +35 -0
  249. package/dist/docs/reference/geometry/categories/curves-paths.md +66 -0
  250. package/dist/docs/reference/geometry/categories/mechanical.md +101 -0
  251. package/dist/docs/reference/geometry/categories/meshes.md +73 -0
  252. package/dist/docs/reference/geometry/categories/pattern-placement.md +34 -0
  253. package/dist/docs/reference/geometry/categories/primitive-options.md +36 -0
  254. package/dist/docs/reference/geometry/categories/profiles-regions.md +74 -0
  255. package/dist/docs/reference/geometry/categories/resolution-errors.md +47 -0
  256. package/dist/docs/reference/geometry/categories/transforms-math.md +92 -0
  257. package/dist/docs/reference/geometry/categories/vector-import.md +40 -0
  258. package/dist/docs/reference/geometry/circleContour.md +33 -0
  259. package/dist/docs/reference/geometry/closeToAxis.md +34 -0
  260. package/dist/docs/reference/geometry/closestPointOnPath.md +110 -0
  261. package/dist/docs/reference/geometry/compensateThreadDiameters.md +51 -0
  262. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +42 -0
  263. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +56 -0
  264. package/dist/docs/reference/geometry/composeTransform3.md +44 -0
  265. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +45 -0
  266. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +47 -0
  267. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +31 -0
  268. package/dist/docs/reference/geometry/containsBounds.md +72 -0
  269. package/dist/docs/reference/geometry/contourContainsPoint.md +33 -0
  270. package/dist/docs/reference/geometry/createAnchor3.md +67 -0
  271. package/dist/docs/reference/geometry/createThreadProfile.md +37 -0
  272. package/dist/docs/reference/geometry/createTriangleMeshSignature.md +60 -0
  273. package/dist/docs/reference/geometry/cross2.md +36 -0
  274. package/dist/docs/reference/geometry/cross3.md +42 -0
  275. package/dist/docs/reference/geometry/cumulativePathLengths.md +33 -0
  276. package/dist/docs/reference/geometry/cylinderAnchor3.md +60 -0
  277. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +14 -0
  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 +51 -0
  281. package/dist/docs/reference/geometry/dot2.md +36 -0
  282. package/dist/docs/reference/geometry/dot3.md +42 -0
  283. package/dist/docs/reference/geometry/ellipseContour.md +33 -0
  284. package/dist/docs/reference/geometry/eulerTransform3.md +42 -0
  285. package/dist/docs/reference/geometry/extrudeMesh.md +73 -0
  286. package/dist/docs/reference/geometry/fitBounds.md +95 -0
  287. package/dist/docs/reference/geometry/fitTextLayout.md +57 -0
  288. package/dist/docs/reference/geometry/frameTransform3.md +48 -0
  289. package/dist/docs/reference/geometry/getMetricClearanceHole.md +33 -0
  290. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +27 -0
  291. package/dist/docs/reference/geometry/gridPatternTransforms.md +31 -0
  292. package/dist/docs/reference/geometry/heightfieldMesh.md +43 -0
  293. package/dist/docs/reference/geometry/inverseTransform3.md +34 -0
  294. package/dist/docs/reference/geometry/isGeometryError.md +26 -0
  295. package/dist/docs/reference/geometry/joinTriangleMeshes.md +36 -0
  296. package/dist/docs/reference/geometry/layoutRow.md +43 -0
  297. package/dist/docs/reference/geometry/length2.md +30 -0
  298. package/dist/docs/reference/geometry/length3.md +30 -0
  299. package/dist/docs/reference/geometry/lerp2.md +42 -0
  300. package/dist/docs/reference/geometry/lerp3.md +42 -0
  301. package/dist/docs/reference/geometry/linearPatternTransforms.md +31 -0
  302. package/dist/docs/reference/geometry/loftMesh.md +72 -0
  303. package/dist/docs/reference/geometry/matchProfiles.md +51 -0
  304. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +48 -0
  305. package/dist/docs/reference/geometry/measureTriangleMesh.md +55 -0
  306. package/dist/docs/reference/geometry/meshBounds.md +35 -0
  307. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +29 -0
  308. package/dist/docs/reference/geometry/normalize2.md +36 -0
  309. package/dist/docs/reference/geometry/normalize3.md +36 -0
  310. package/dist/docs/reference/geometry/normalizeContour.md +45 -0
  311. package/dist/docs/reference/geometry/normalizePolygon.md +37 -0
  312. package/dist/docs/reference/geometry/normalizeRegion.md +33 -0
  313. package/dist/docs/reference/geometry/optimizePlanarPatches.md +91 -0
  314. package/dist/docs/reference/geometry/pathLength.md +33 -0
  315. package/dist/docs/reference/geometry/pathPatternTransforms.md +57 -0
  316. package/dist/docs/reference/geometry/preflightHeightfield.md +34 -0
  317. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +96 -0
  318. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +85 -0
  319. package/dist/docs/reference/geometry/preflightSvgRegion.md +56 -0
  320. package/dist/docs/reference/geometry/preflightThreadedNut.md +96 -0
  321. package/dist/docs/reference/geometry/preflightThreadedRod.md +85 -0
  322. package/dist/docs/reference/geometry/projectOntoPlane3.md +36 -0
  323. package/dist/docs/reference/geometry/radialPatternTransforms.md +47 -0
  324. package/dist/docs/reference/geometry/rectangleContour.md +49 -0
  325. package/dist/docs/reference/geometry/rectangleProfile.md +53 -0
  326. package/dist/docs/reference/geometry/regionArea.md +34 -0
  327. package/dist/docs/reference/geometry/regionBounds.md +27 -0
  328. package/dist/docs/reference/geometry/regularPolygonContour.md +53 -0
  329. package/dist/docs/reference/geometry/resamplePolyline2.md +64 -0
  330. package/dist/docs/reference/geometry/resamplePolyline3.md +67 -0
  331. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +83 -0
  332. package/dist/docs/reference/geometry/resolveArcSegments.md +67 -0
  333. package/dist/docs/reference/geometry/resolveCircularSegments.md +62 -0
  334. package/dist/docs/reference/geometry/resolveCylindricalGear.md +31 -0
  335. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +31 -0
  336. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +74 -0
  337. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +26 -0
  338. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +59 -0
  339. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +27 -0
  340. package/dist/docs/reference/geometry/resolveRackPitch.md +27 -0
  341. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +59 -0
  342. package/dist/docs/reference/geometry/reverseTriangleMesh.md +30 -0
  343. package/dist/docs/reference/geometry/revolveMesh.md +76 -0
  344. package/dist/docs/reference/geometry/rotate2.md +36 -0
  345. package/dist/docs/reference/geometry/rotationTransform3.md +53 -0
  346. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +50 -0
  347. package/dist/docs/reference/geometry/sampleContour.md +77 -0
  348. package/dist/docs/reference/geometry/sampleCurve2.md +61 -0
  349. package/dist/docs/reference/geometry/sampleCurve3.md +61 -0
  350. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +58 -0
  351. package/dist/docs/reference/geometry/sampleHelix.md +41 -0
  352. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +59 -0
  353. package/dist/docs/reference/geometry/sampleRackToothPath.md +39 -0
  354. package/dist/docs/reference/geometry/sampleSideProfile.md +73 -0
  355. package/dist/docs/reference/geometry/sampleTextContours.md +53 -0
  356. package/dist/docs/reference/geometry/sampleThreadHelices.md +63 -0
  357. package/dist/docs/reference/geometry/scale2.md +36 -0
  358. package/dist/docs/reference/geometry/scale3.md +42 -0
  359. package/dist/docs/reference/geometry/scaleTransform3.md +38 -0
  360. package/dist/docs/reference/geometry/signedContourArea.md +26 -0
  361. package/dist/docs/reference/geometry/starContour.md +51 -0
  362. package/dist/docs/reference/geometry/strokePathRegion.md +63 -0
  363. package/dist/docs/reference/geometry/subtract2.md +36 -0
  364. package/dist/docs/reference/geometry/subtract3.md +42 -0
  365. package/dist/docs/reference/geometry/sweepMesh.md +82 -0
  366. package/dist/docs/reference/geometry/transform2.md +38 -0
  367. package/dist/docs/reference/geometry/transform3.md +38 -0
  368. package/dist/docs/reference/geometry/transformContour.md +42 -0
  369. package/dist/docs/reference/geometry/transformDeterminant3.md +36 -0
  370. package/dist/docs/reference/geometry/transformPath2.md +40 -0
  371. package/dist/docs/reference/geometry/transformPath3.md +33 -0
  372. package/dist/docs/reference/geometry/transformRegionData.md +40 -0
  373. package/dist/docs/reference/geometry/transformTriangleMesh.md +42 -0
  374. package/dist/docs/reference/geometry/translationTransform3.md +35 -0
  375. package/dist/docs/reference/geometry/triangulateContour.md +26 -0
  376. package/dist/docs/reference/geometry/validateSolidMesh.md +52 -0
  377. package/dist/docs/reference/geometry/validateTransform3.md +47 -0
  378. package/dist/docs/reference/geometry/validateTriangleMesh.md +59 -0
  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 +30 -0
  382. package/dist/docs/reference/model/Anchor3.md +54 -0
  383. package/dist/docs/reference/model/AttachOptions.md +63 -0
  384. package/dist/docs/reference/model/Bounds2.md +39 -0
  385. package/dist/docs/reference/model/Bounds3.md +39 -0
  386. package/dist/docs/reference/model/BoxEdge.md +15 -0
  387. package/dist/docs/reference/model/BoxEdgeSelection.md +19 -0
  388. package/dist/docs/reference/model/BoxEdgeTreatments.md +20 -0
  389. package/dist/docs/reference/model/BoxOptions.md +92 -0
  390. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +35 -0
  391. package/dist/docs/reference/model/CircleContourOptions.md +21 -0
  392. package/dist/docs/reference/model/CircleOptions.md +21 -0
  393. package/dist/docs/reference/model/CircularPrimitiveOptions.md +64 -0
  394. package/dist/docs/reference/model/Computed.md +35 -0
  395. package/dist/docs/reference/model/ComputedValue.md +20 -0
  396. package/dist/docs/reference/model/Contour.md +22 -0
  397. package/dist/docs/reference/model/CorrespondingComponent.md +46 -0
  398. package/dist/docs/reference/model/CorrespondingContour.md +46 -0
  399. package/dist/docs/reference/model/CorrespondingProfile.md +22 -0
  400. package/dist/docs/reference/model/CorrespondingProfileStation.md +27 -0
  401. package/dist/docs/reference/model/CylinderOptions.md +58 -0
  402. package/dist/docs/reference/model/DiagnosticOptions.md +23 -0
  403. package/dist/docs/reference/model/EdgeTreatment.md +22 -0
  404. package/dist/docs/reference/model/EllipseContourOptions.md +21 -0
  405. package/dist/docs/reference/model/EllipseOptions.md +21 -0
  406. package/dist/docs/reference/model/EndTreatments.md +39 -0
  407. package/dist/docs/reference/model/ExtrudeOptions.md +140 -0
  408. package/dist/docs/reference/model/FinalizedModel.md +121 -0
  409. package/dist/docs/reference/model/FinalizedPart.md +87 -0
  410. package/dist/docs/reference/model/Frame3.md +63 -0
  411. package/dist/docs/reference/model/GenerateCallback.md +37 -0
  412. package/dist/docs/reference/model/GenerateContext.md +277 -0
  413. package/dist/docs/reference/model/GeneratedPart.md +93 -0
  414. package/dist/docs/reference/model/GenerationDiagnostic.md +41 -0
  415. package/dist/docs/reference/model/GenerationError.md +54 -0
  416. package/dist/docs/reference/model/GeometryResolution.md +70 -0
  417. package/dist/docs/reference/model/GeometrySamplingLimits.md +62 -0
  418. package/dist/docs/reference/model/GeometryToleranceOptions.md +46 -0
  419. package/dist/docs/reference/model/GridPatternOptions.md +43 -0
  420. package/dist/docs/reference/model/HeightfieldOptions.md +67 -0
  421. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +140 -0
  422. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +58 -0
  423. package/dist/docs/reference/model/HullOptions.md +72 -0
  424. package/dist/docs/reference/model/ImmutableBuffer-type.md +80 -0
  425. package/dist/docs/reference/model/ImmutableTriangleMesh.md +34 -0
  426. package/dist/docs/reference/model/ImplicitOptions.md +83 -0
  427. package/dist/docs/reference/model/InternalThreadCutterOptions.md +245 -0
  428. package/dist/docs/reference/model/LinearPatternOptions.md +31 -0
  429. package/dist/docs/reference/model/LoftCorrespondence.md +27 -0
  430. package/dist/docs/reference/model/LoftOptions.md +91 -0
  431. package/dist/docs/reference/model/LoftPlacement.md +73 -0
  432. package/dist/docs/reference/model/LoftStation.md +35 -0
  433. package/dist/docs/reference/model/MatchProfilesOptions.md +35 -0
  434. package/dist/docs/reference/model/ModelProgram.md +44 -0
  435. package/dist/docs/reference/model/ModelingLimits.md +126 -0
  436. package/dist/docs/reference/model/NumericArray.md +7 -0
  437. package/dist/docs/reference/model/PartGeometry.md +16 -0
  438. package/dist/docs/reference/model/PartOptions.md +65 -0
  439. package/dist/docs/reference/model/Path2.md +20 -0
  440. package/dist/docs/reference/model/PathNormalGuide.md +45 -0
  441. package/dist/docs/reference/model/PathPatternOptions.md +47 -0
  442. package/dist/docs/reference/model/PatternSource.md +26 -0
  443. package/dist/docs/reference/model/Pivot2Options.md +27 -0
  444. package/dist/docs/reference/model/Pivot3Options.md +27 -0
  445. package/dist/docs/reference/model/PlaneOptions.md +39 -0
  446. package/dist/docs/reference/model/PolygonData.md +43 -0
  447. package/dist/docs/reference/model/PolygonOptions.md +189 -0
  448. package/dist/docs/reference/model/PrimitivePlacement.md +40 -0
  449. package/dist/docs/reference/model/PrimitivePlacementOptions.md +88 -0
  450. package/dist/docs/reference/model/PrintableThreadFit.md +14 -0
  451. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +50 -0
  452. package/dist/docs/reference/model/Profile.md +22 -0
  453. package/dist/docs/reference/model/ProfileComponent2.md +46 -0
  454. package/dist/docs/reference/model/ProfileContour2.md +34 -0
  455. package/dist/docs/reference/model/ProfileSpan2.md +47 -0
  456. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +41 -0
  457. package/dist/docs/reference/model/RadialPatternOptions.md +63 -0
  458. package/dist/docs/reference/model/RadialSizing.md +15 -0
  459. package/dist/docs/reference/model/RadialSizingOptions.md +40 -0
  460. package/dist/docs/reference/model/RectangleContourOptions.md +72 -0
  461. package/dist/docs/reference/model/RectangleCornerTreatment.md +40 -0
  462. package/dist/docs/reference/model/RectangleCornerTreatments.md +20 -0
  463. package/dist/docs/reference/model/RectangleOptions.md +107 -0
  464. package/dist/docs/reference/model/RegionData.md +19 -0
  465. package/dist/docs/reference/model/RegularPolygonOptions.md +53 -0
  466. package/dist/docs/reference/model/RevolveOptions.md +89 -0
  467. package/dist/docs/reference/model/RoundedEdgeTreatment.md +96 -0
  468. package/dist/docs/reference/model/Section.md +490 -0
  469. package/dist/docs/reference/model/SectionHullOptions.md +72 -0
  470. package/dist/docs/reference/model/SectionInspection.md +98 -0
  471. package/dist/docs/reference/model/SectionOffsetJoin.md +16 -0
  472. package/dist/docs/reference/model/SectionOffsetOptions.md +65 -0
  473. package/dist/docs/reference/model/SmoothEdgeTreatment.md +76 -0
  474. package/dist/docs/reference/model/Solid.md +373 -0
  475. package/dist/docs/reference/model/SolidInspection.md +98 -0
  476. package/dist/docs/reference/model/SolidRayHit.md +58 -0
  477. package/dist/docs/reference/model/SphereOptions.md +20 -0
  478. package/dist/docs/reference/model/StarOptions.md +98 -0
  479. package/dist/docs/reference/model/StrokeOptions.md +91 -0
  480. package/dist/docs/reference/model/StrokePathCap.md +16 -0
  481. package/dist/docs/reference/model/StrokePathJoin.md +16 -0
  482. package/dist/docs/reference/model/SvgOrigin.md +16 -0
  483. package/dist/docs/reference/model/SvgPathSectionOptions.md +78 -0
  484. package/dist/docs/reference/model/SvgSectionOptions.md +66 -0
  485. package/dist/docs/reference/model/SweepOptions.md +116 -0
  486. package/dist/docs/reference/model/SweepOrientation.md +116 -0
  487. package/dist/docs/reference/model/TextSectionOptions.md +41 -0
  488. package/dist/docs/reference/model/ThreadEndStyle.md +14 -0
  489. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +117 -0
  490. package/dist/docs/reference/model/ThreadHandedness.md +14 -0
  491. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +14 -0
  492. package/dist/docs/reference/model/ThreadLeadInShape.md +14 -0
  493. package/dist/docs/reference/model/ThreadProfile.md +86 -0
  494. package/dist/docs/reference/model/ThreadRidgeOptions.md +18 -0
  495. package/dist/docs/reference/model/ThreadedNutBevel.md +14 -0
  496. package/dist/docs/reference/model/ThreadedNutOptions.md +273 -0
  497. package/dist/docs/reference/model/ThreadedNutPreflight.md +98 -0
  498. package/dist/docs/reference/model/ThreadedNutShape.md +14 -0
  499. package/dist/docs/reference/model/ThreadedRodOptions.md +245 -0
  500. package/dist/docs/reference/model/TorusOptions.md +110 -0
  501. package/dist/docs/reference/model/Transform2-type.md +256 -0
  502. package/dist/docs/reference/model/Transform2Input.md +20 -0
  503. package/dist/docs/reference/model/Transform2Matrix.md +15 -0
  504. package/dist/docs/reference/model/Transform3-type.md +296 -0
  505. package/dist/docs/reference/model/Transform3Input.md +20 -0
  506. package/dist/docs/reference/model/Transform3Matrix.md +18 -0
  507. package/dist/docs/reference/model/TriangleMesh.md +42 -0
  508. package/dist/docs/reference/model/TriangleMeshAnalysis.md +123 -0
  509. package/dist/docs/reference/model/TriangleMeshMeasurements.md +79 -0
  510. package/dist/docs/reference/model/TubeOptions.md +143 -0
  511. package/dist/docs/reference/model/Vector2-type.md +270 -0
  512. package/dist/docs/reference/model/Vector2Input.md +20 -0
  513. package/dist/docs/reference/model/Vector2Tuple.md +15 -0
  514. package/dist/docs/reference/model/Vector3-type.md +282 -0
  515. package/dist/docs/reference/model/Vector3Input.md +20 -0
  516. package/dist/docs/reference/model/Vector3Tuple.md +15 -0
  517. package/dist/docs/reference/model/VectorTextLayout.md +40 -0
  518. package/dist/docs/reference/model/VectorTextMetrics.md +100 -0
  519. package/dist/docs/reference/model/anchor.md +46 -0
  520. package/dist/docs/reference/model/box.md +62 -0
  521. package/dist/docs/reference/model/categories/boolean-operations.md +37 -0
  522. package/dist/docs/reference/model/categories/bounded-surfaces.md +26 -0
  523. package/dist/docs/reference/model/categories/contracts.md +16 -0
  524. package/dist/docs/reference/model/categories/core-values-errors.md +30 -0
  525. package/dist/docs/reference/model/categories/explicit-profiles.md +32 -0
  526. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +42 -0
  527. package/dist/docs/reference/model/categories/generation.md +44 -0
  528. package/dist/docs/reference/model/categories/inspection.md +23 -0
  529. package/dist/docs/reference/model/categories/mesh-inspection.md +29 -0
  530. package/dist/docs/reference/model/categories/primitives.md +61 -0
  531. package/dist/docs/reference/model/categories/resolution.md +18 -0
  532. package/dist/docs/reference/model/categories/sections.md +62 -0
  533. package/dist/docs/reference/model/categories/threads.md +50 -0
  534. package/dist/docs/reference/model/categories/transforms-placement.md +57 -0
  535. package/dist/docs/reference/model/circle.md +39 -0
  536. package/dist/docs/reference/model/components.md +71 -0
  537. package/dist/docs/reference/model/compose.md +31 -0
  538. package/dist/docs/reference/model/cylinder.md +52 -0
  539. package/dist/docs/reference/model/distance.md +45 -0
  540. package/dist/docs/reference/model/ellipse.md +39 -0
  541. package/dist/docs/reference/model/extrude.md +83 -0
  542. package/dist/docs/reference/model/generate.md +46 -0
  543. package/dist/docs/reference/model/gridPattern.md +80 -0
  544. package/dist/docs/reference/model/heightfield.md +40 -0
  545. package/dist/docs/reference/model/hull.md +74 -0
  546. package/dist/docs/reference/model/immutableBuffer.md +44 -0
  547. package/dist/docs/reference/model/immutableMesh.md +40 -0
  548. package/dist/docs/reference/model/implicit.md +47 -0
  549. package/dist/docs/reference/model/inspectSection.md +38 -0
  550. package/dist/docs/reference/model/inspectSolid.md +38 -0
  551. package/dist/docs/reference/model/internalThreadCutter.md +100 -0
  552. package/dist/docs/reference/model/intersect.md +70 -0
  553. package/dist/docs/reference/model/isEmpty.md +39 -0
  554. package/dist/docs/reference/model/linearPattern.md +80 -0
  555. package/dist/docs/reference/model/loft.md +137 -0
  556. package/dist/docs/reference/model/matchProfiles.md +42 -0
  557. package/dist/docs/reference/model/minkowskiSum.md +37 -0
  558. package/dist/docs/reference/model/pathPattern.md +118 -0
  559. package/dist/docs/reference/model/polygon.md +40 -0
  560. package/dist/docs/reference/model/preflightInternalThreadCutter.md +89 -0
  561. package/dist/docs/reference/model/preflightThreadedNut.md +100 -0
  562. package/dist/docs/reference/model/preflightThreadedRod.md +89 -0
  563. package/dist/docs/reference/model/radialPattern.md +113 -0
  564. package/dist/docs/reference/model/rayCast.md +40 -0
  565. package/dist/docs/reference/model/rectangle.md +59 -0
  566. package/dist/docs/reference/model/regularPolygon.md +39 -0
  567. package/dist/docs/reference/model/revolve.md +74 -0
  568. package/dist/docs/reference/model/solidFromMesh.md +42 -0
  569. package/dist/docs/reference/model/sphere.md +42 -0
  570. package/dist/docs/reference/model/split.md +54 -0
  571. package/dist/docs/reference/model/splitByPlane.md +66 -0
  572. package/dist/docs/reference/model/star.md +63 -0
  573. package/dist/docs/reference/model/stroke.md +74 -0
  574. package/dist/docs/reference/model/svgPathSection.md +65 -0
  575. package/dist/docs/reference/model/svgSection.md +64 -0
  576. package/dist/docs/reference/model/sweep.md +92 -0
  577. package/dist/docs/reference/model/textSection.md +57 -0
  578. package/dist/docs/reference/model/threadRidge.md +72 -0
  579. package/dist/docs/reference/model/threadedNut.md +110 -0
  580. package/dist/docs/reference/model/threadedRod.md +99 -0
  581. package/dist/docs/reference/model/toTriangleMesh.md +27 -0
  582. package/dist/docs/reference/model/torus.md +70 -0
  583. package/dist/docs/reference/model/transform2.md +39 -0
  584. package/dist/docs/reference/model/transform3.md +39 -0
  585. package/dist/docs/reference/model/tube.md +77 -0
  586. package/dist/docs/reference/model/union.md +72 -0
  587. package/dist/docs/reference/model/vector2.md +32 -0
  588. package/dist/docs/reference/model/vector3.md +39 -0
  589. package/dist/docs/reference/model.md +39 -0
  590. package/dist/docs/reference/text/Bounds2.md +34 -0
  591. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -0
  592. package/dist/docs/reference/text/Vector2Tuple.md +7 -0
  593. package/dist/docs/reference/text/VectorFont.md +186 -0
  594. package/dist/docs/reference/text/VectorFontOptions.md +17 -0
  595. package/dist/docs/reference/text/VectorTextArcBaseline.md +53 -0
  596. package/dist/docs/reference/text/VectorTextLayout.md +34 -0
  597. package/dist/docs/reference/text/VectorTextLayoutOptions.md +111 -0
  598. package/dist/docs/reference/text/VectorTextMetrics.md +94 -0
  599. package/dist/docs/reference/text/VectorTextOptions.md +50 -0
  600. package/dist/docs/reference/text/categories/font-preparation.md +38 -0
  601. package/dist/docs/reference/text/prepareVectorFont.md +46 -0
  602. package/dist/docs/reference/text.md +21 -0
  603. package/dist/engine/construction-operations.js +10 -3
  604. package/dist/engine/deferred-context.js +11 -172
  605. package/dist/engine/execution.js +1 -1
  606. package/dist/engine/export-3mf.js +2 -2
  607. package/dist/engine/finalization.js +3 -3
  608. package/dist/engine/loft-operations.js +4 -4
  609. package/dist/engine/native/adapter.js +1 -1
  610. package/dist/engine/native/regions.js +9 -9
  611. package/dist/engine/native/transforms.js +6 -1
  612. package/dist/engine/pattern-operations.js +24 -13
  613. package/dist/engine/placement.js +2 -2
  614. package/dist/engine/primitive-operations.js +10 -10
  615. package/dist/engine/primitive-profiles.js +1 -0
  616. package/dist/engine/profile-mesh.js +7 -7
  617. package/dist/engine/recipe-realization.js +29 -21
  618. package/dist/engine/section-operations.js +44 -17
  619. package/dist/engine/session-graph.js +6 -4
  620. package/dist/engine/session-native.js +1 -1
  621. package/dist/engine/session-snapshot.js +3 -2
  622. package/dist/engine/session.js +4 -5
  623. package/dist/engine/shape-anchors.js +3 -9
  624. package/dist/engine/transform-operations.js +42 -25
  625. package/dist/geometry/bounds.js +117 -0
  626. package/dist/geometry/cylinder.js +5 -1
  627. package/dist/geometry/edge-finishing.js +2 -2
  628. package/dist/geometry/heightfield.js +1 -1
  629. package/dist/geometry/index.js +20 -13
  630. package/dist/geometry/{loft-correspondence.js → loft/loft-correspondence.js} +3 -3
  631. package/dist/geometry/{loft-geometry.js → loft/loft-geometry.js} +8 -8
  632. package/dist/geometry/{loft-options.js → loft/loft-options.js} +2 -2
  633. package/dist/geometry/{loft-simple-mesh.js → loft/loft-simple-mesh.js} +6 -6
  634. package/dist/geometry/{loft-triangulation.js → loft/loft-triangulation.js} +6 -6
  635. package/dist/geometry/{loft.js → loft/loft.js} +8 -8
  636. package/dist/geometry/math/immutable-value.js +20 -0
  637. package/dist/geometry/math/vector-value.js +168 -0
  638. package/dist/geometry/math/vector2.js +80 -0
  639. package/dist/geometry/math/vector3.js +42 -8
  640. package/dist/geometry/mechanical/gear-motion.js +7 -4
  641. package/dist/geometry/mechanical/gears.js +2 -2
  642. package/dist/geometry/mechanical/thread-mesh.js +3 -3
  643. package/dist/geometry/mechanical/thread-profiles.js +2 -2
  644. package/dist/geometry/mechanical/thread-surface.js +14 -5
  645. package/dist/geometry/{mesh-centroid.js → mesh/mesh-centroid.js} +1 -1
  646. package/dist/geometry/{mesh-planar.js → mesh/mesh-planar.js} +1 -1
  647. package/dist/geometry/{mesh-quality.js → mesh/mesh-quality.js} +2 -2
  648. package/dist/geometry/{mesh-signature.js → mesh/mesh-signature.js} +2 -2
  649. package/dist/geometry/{mesh-solid-intersections.js → mesh/mesh-solid-intersections.js} +5 -1
  650. package/dist/geometry/{mesh-solid.js → mesh/mesh-solid.js} +2 -2
  651. package/dist/geometry/{mesh.js → mesh/mesh.js} +7 -8
  652. package/dist/geometry/paths/closest-point.js +74 -0
  653. package/dist/geometry/paths/frames.js +7 -8
  654. package/dist/geometry/patterns/options.js +1 -0
  655. package/dist/{engine/pattern-placements.js → geometry/patterns/placements.js} +22 -8
  656. package/dist/geometry/patterns.js +25 -0
  657. package/dist/geometry/primitive-resolution.js +4 -1
  658. package/dist/geometry/primitive-resolvers.js +9 -9
  659. package/dist/geometry/profiles/contour.js +3 -3
  660. package/dist/geometry/profiles/matched.js +3 -3
  661. package/dist/geometry/profiles/profiles.js +10 -10
  662. package/dist/geometry/profiles/rectangle.js +7 -7
  663. package/dist/geometry/profiles/shapes.js +9 -9
  664. package/dist/geometry/profiles/side-profile.js +37 -0
  665. package/dist/geometry/regions.js +15 -15
  666. package/dist/geometry/resolution.js +17 -5
  667. package/dist/geometry/revolve/revolve-mesh.js +5 -5
  668. package/dist/geometry/stroke-path.js +50 -46
  669. package/dist/geometry/svg/errors.js +0 -3
  670. package/dist/geometry/svg/fill.js +7 -7
  671. package/dist/geometry/svg/index.js +1 -1
  672. package/dist/geometry/svg/matrix.js +0 -114
  673. package/dist/geometry/svg/parser.js +1 -439
  674. package/dist/geometry/svg-import.js +3 -3
  675. package/dist/geometry/sweeps/stations.js +4 -4
  676. package/dist/geometry/sweeps/sweep-closed.js +4 -4
  677. package/dist/geometry/sweeps/sweep-mesh.js +1 -1
  678. package/dist/geometry/sweeps/sweep-open.js +6 -6
  679. package/dist/geometry/sweeps/validation.js +2 -2
  680. package/dist/geometry/text-fitting.js +85 -0
  681. package/dist/geometry/tolerance.js +2 -2
  682. package/dist/geometry/transform-chain.js +172 -0
  683. package/dist/geometry/transform-geometry.js +31 -27
  684. package/dist/geometry/transform-matrix.js +14 -0
  685. package/dist/geometry/transform2.js +60 -0
  686. package/dist/geometry/transform3.js +70 -26
  687. package/dist/index.js +3 -0
  688. package/dist/model/execution-binding.js +10 -5
  689. package/dist/model/generation.js +1 -1
  690. package/dist/model/geometry-recipes.js +15 -0
  691. package/dist/{engine → model}/immutable-generation-data.js +25 -3
  692. package/dist/model/operation-contracts.js +1 -0
  693. package/dist/model/operation-dispatch.js +13 -0
  694. package/dist/model/operations.js +40 -59
  695. package/dist/model/recipe-declaration.js +193 -0
  696. package/dist/model/shape-handles.js +15 -4
  697. package/package.json +10 -8
  698. package/dist/engine/geometry-recipes.js +0 -12
  699. /package/dist/geometry/{mesh-edge-table.js → mesh/mesh-edge-table.js} +0 -0
@@ -1,107 +1,119 @@
1
- /** Limits apply before parsing or shaping untrusted font data. */
2
- export declare const MAX_VECTOR_FONT_BYTES: number;
3
-
4
- /**
5
- * Parses bounded font bytes using optional fontkit and WOFF2 peers; no font fetching occurs here.
6
- *
7
- * @example Prepare a label before building geometry
8
- * ```ts
9
- * async function prepareLabel(fontBytes: Uint8Array) {
10
- * const font = await prepareVectorFont(fontBytes);
11
- * return font.layout("MetaMesh", { fontSize: 8 });
12
- * }
13
- * ```
14
- */
15
- export declare function prepareVectorFont(bytes: Uint8Array, options?: VectorFontOptions): Promise<VectorFont>;
16
-
17
- /**
18
- * A prepared font owns its parsed bytes; keep handles local to their Worker or invocation.
19
- */
20
- export declare interface VectorFont {
21
- /** Shape horizontal lines or one circular line; bounded to 512 UTF-16 units and supports blank text. */
22
- readonly layout: (text: string, options: VectorTextLayoutOptions) => VectorTextLayout;
23
- /** Measure the same cached vector layout; all returned lengths are in millimetres. */
24
- readonly measure: (text: string, options: VectorTextLayoutOptions) => VectorTextMetrics;
25
- /** Serialize visible horizontal or circular outlines as bounded path-only SVG in physical millimetres. */
26
- readonly toSvg: (text: string, options: VectorTextLayoutOptions) => string;
27
- }
28
-
29
- /** Identifies the actual weight of a static face, without synthesizing a different weight. */
30
- export declare interface VectorFontOptions {
31
- /** Actual weight of a static face, 1–1000; defaults to 400. */
32
- readonly staticWeight?: number;
33
- }
34
-
35
- /** A circular baseline centered at the XY origin, with rigid shaped glyph groups. */
36
- export declare interface VectorTextArcBaseline {
37
- /** Selects a circular baseline; glyph outlines rotate without bending or stretching. */
38
- readonly kind: "arc";
39
- /** Baseline radius in millimetres, greater than zero and at most 10000. */
40
- readonly radius: number;
41
- /** Alignment datum in degrees counterclockwise from +X; defaults to 90. */
42
- readonly centerAngleDegrees?: number;
43
- /** Reading direction around the circle; defaults to clockwise. */
44
- readonly direction?: "clockwise" | "counterclockwise";
45
- }
46
-
47
- /** Exact curve bounds in millimetres; positive Y points upward. */
48
- export declare interface VectorTextBounds {
49
- /** Minimum X and Y of visible outlines, including accents, descenders, and overhangs. */
50
- readonly min: readonly [number, number];
51
- /** Maximum X and Y of visible outlines. */
52
- readonly max: readonly [number, number];
53
- }
54
-
55
- /**
56
- * Immutable vector layout with no browser, font parser, or kernel ownership.
57
- */
58
- export declare interface VectorTextLayout {
59
- /** Nonzero-filled path data in millimetres, positive Y upward; empty for text with no ink. */
60
- readonly paths: readonly string[];
61
- /** Exact measurements of these paths and their logical text layout. */
62
- readonly metrics: VectorTextMetrics;
63
- }
64
-
65
- /**
66
- * Text bounded to 512 UTF-16 units: horizontal lines or one circular line without wrapping.
67
- */
68
- export declare interface VectorTextLayoutOptions extends VectorTextOptions {
69
- /** Place the advance's start, midpoint or end at the datum; defaults to center on arcs, otherwise left. */
70
- readonly align?: "left" | "center" | "right";
71
- /** Omitted uses horizontal lines. Arcs require one line and baseline vertical alignment. */
72
- readonly baseline?: VectorTextArcBaseline;
73
- /** Baseline spacing in ems, 0.5–5; omitted uses the selected face's natural vertical metrics. */
74
- readonly lineHeight?: number;
75
- /** Place the first baseline or complete ink bounds at Y=0; arcs only accept baseline. */
76
- readonly verticalAlign?: "baseline" | "top" | "center" | "bottom";
77
- }
78
-
79
- /** Text measurements from the same immutable layout that supplies geometry and SVG outlines. */
80
- export declare interface VectorTextMetrics {
81
- /** Visible curve bounds after alignment, or null when the text has no ink. */
82
- readonly bounds: VectorTextBounds | null;
83
- /** Unaligned logical advance and negative baseline displacement in mm; arcs retain [arc length, 0]. */
84
- readonly advance: readonly [number, number];
85
- /** Maximum logical line advance in millimetres, including spaces; arc length on circular baselines. */
86
- readonly logicalWidth: number;
87
- /** Selected font's ascender distance above a baseline in millimetres, independent of the text. */
88
- readonly ascent: number;
89
- /** Selected font's descender distance below a baseline in millimetres, a non-negative value. */
90
- readonly descent: number;
91
- /** Actual distance between baselines in millimetres. */
92
- readonly lineHeight: number;
93
- /** Number of lines, including empty and trailing lines; empty text occupies one line. */
94
- readonly lineCount: number;
95
- }
96
-
97
- /** Shaping controls for a prepared exact font face; all lengths are in millimetres. */
98
- export declare interface VectorTextOptions {
99
- /** Em size in millimetres, greater than zero and at most 10000; not the visible glyph height. */
100
- readonly fontSize: number;
101
- /** Actual static or variable weight, 1–1000; defaults to the prepared face's static weight. */
102
- readonly fontWeight?: number;
103
- /** Tracking between glyph clusters in millimetres, -100–100; defaults to zero. */
104
- readonly letterSpacing?: number;
105
- }
106
-
107
- export { }
1
+ /** Axis-aligned bounds in two-dimensional model space. */
2
+ export declare interface Bounds2 {
3
+ /** Inclusive maximum X/Y coordinates. */
4
+ readonly max: Vector2Tuple;
5
+ /** Inclusive minimum X/Y coordinates. */
6
+ readonly min: Vector2Tuple;
7
+ }
8
+
9
+ /** Limits apply before parsing or shaping untrusted font data. */
10
+ export declare const MAX_VECTOR_FONT_BYTES: number;
11
+
12
+ /**
13
+ * Parses bounded font bytes using optional fontkit and WOFF2 peers; no font fetching occurs here.
14
+ *
15
+ * @example Prepare a label before building geometry
16
+ * ```ts
17
+ * async function prepareLabel(fontBytes: Uint8Array) {
18
+ * const font = await prepareVectorFont(fontBytes);
19
+ * return font.layout("MetaMesh", { fontSize: 8 });
20
+ * }
21
+ * ```
22
+ */
23
+ export declare function prepareVectorFont(
24
+ bytes: Uint8Array,
25
+ options?: VectorFontOptions,
26
+ ): Promise<VectorFont>;
27
+
28
+ /** A two-dimensional Cartesian vector or point. */
29
+ export declare type Vector2Tuple = readonly [x: number, y: number];
30
+
31
+ /**
32
+ * A prepared font owns its parsed bytes; keep handles local to their Worker or invocation.
33
+ */
34
+ export declare interface VectorFont {
35
+ /** Shape horizontal lines or one circular line; bounded to 512 UTF-16 units and supports blank text. */
36
+ readonly layout: (
37
+ text: string,
38
+ options: VectorTextLayoutOptions,
39
+ ) => VectorTextLayout;
40
+ /** Measure the same cached vector layout; all returned lengths are in millimetres. */
41
+ readonly measure: (
42
+ text: string,
43
+ options: VectorTextLayoutOptions,
44
+ ) => VectorTextMetrics;
45
+ /** Serialize visible horizontal or circular outlines as bounded path-only SVG in physical millimetres. */
46
+ readonly toSvg: (text: string, options: VectorTextLayoutOptions) => string;
47
+ }
48
+
49
+ /** Identifies the actual weight of a static face, without synthesizing a different weight. */
50
+ export declare interface VectorFontOptions {
51
+ /** Actual weight of a static face, 1–1000; defaults to 400. */
52
+ readonly staticWeight?: number;
53
+ }
54
+
55
+ /** A circular baseline centered at the XY origin, with rigid shaped glyph groups. */
56
+ export declare interface VectorTextArcBaseline {
57
+ /** Selects a circular baseline; glyph outlines rotate without bending or stretching. */
58
+ readonly kind: "arc";
59
+ /** Baseline radius in millimetres, greater than zero and at most 10000. */
60
+ readonly radius: number;
61
+ /** Alignment datum in degrees counterclockwise from +X; defaults to 90. */
62
+ readonly centerAngleDegrees?: number;
63
+ /** Reading direction around the circle; defaults to clockwise. */
64
+ readonly direction?: "clockwise" | "counterclockwise";
65
+ }
66
+
67
+ /**
68
+ * Immutable vector layout with no browser, font parser, or kernel ownership.
69
+ */
70
+ export declare interface VectorTextLayout {
71
+ /** Nonzero-filled path data in millimetres, positive Y upward; empty for text with no ink. */
72
+ readonly paths: readonly string[];
73
+ /** Exact measurements of these paths and their logical text layout. */
74
+ readonly metrics: VectorTextMetrics;
75
+ }
76
+
77
+ /**
78
+ * Text bounded to 512 UTF-16 units: horizontal lines or one circular line without wrapping.
79
+ */
80
+ export declare interface VectorTextLayoutOptions extends VectorTextOptions {
81
+ /** Place the advance's start, midpoint or end at the datum; defaults to center on arcs, otherwise left. */
82
+ readonly align?: "left" | "center" | "right";
83
+ /** Omitted uses horizontal lines. Arcs require one line and baseline vertical alignment. */
84
+ readonly baseline?: VectorTextArcBaseline;
85
+ /** Baseline spacing in ems, 0.5–5; omitted uses the selected face's natural vertical metrics. */
86
+ readonly lineHeight?: number;
87
+ /** Place the first baseline or complete ink bounds at Y=0; arcs only accept baseline. */
88
+ readonly verticalAlign?: "baseline" | "top" | "center" | "bottom";
89
+ }
90
+
91
+ /** Text measurements from the same immutable layout that supplies geometry and SVG outlines. */
92
+ export declare interface VectorTextMetrics {
93
+ /** Visible curve bounds after alignment, or null when the text has no ink. */
94
+ readonly bounds: Bounds2 | null;
95
+ /** Unaligned logical advance and negative baseline displacement in mm; arcs retain [arc length, 0]. */
96
+ readonly advance: readonly [number, number];
97
+ /** Maximum logical line advance in millimetres, including spaces; arc length on circular baselines. */
98
+ readonly logicalWidth: number;
99
+ /** Selected font's ascender distance above a baseline in millimetres, independent of the text. */
100
+ readonly ascent: number;
101
+ /** Selected font's descender distance below a baseline in millimetres, a non-negative value. */
102
+ readonly descent: number;
103
+ /** Actual distance between baselines in millimetres. */
104
+ readonly lineHeight: number;
105
+ /** Number of lines, including empty and trailing lines; empty text occupies one line. */
106
+ readonly lineCount: number;
107
+ }
108
+
109
+ /** Shaping controls for a prepared exact font face; all lengths are in millimetres. */
110
+ export declare interface VectorTextOptions {
111
+ /** Em size in millimetres, greater than zero and at most 10000; not the visible glyph height. */
112
+ readonly fontSize: number;
113
+ /** Actual static or variable weight, 1–1000; defaults to the prepared face's static weight. */
114
+ readonly fontWeight?: number;
115
+ /** Tracking between glyph clusters in millimetres, -100–100; defaults to zero. */
116
+ readonly letterSpacing?: number;
117
+ }
118
+
119
+ export {};
@@ -0,0 +1,300 @@
1
+ # Geometry API concepts
2
+
3
+ Choose the public Modeling modules, understand geometry and lifecycle conventions, and use them in Studio or a standalone Node or Worker host.
4
+
5
+ Import modeling functions from the package root:
6
+
7
+
8
+
9
+ ```ts
10
+ import { box, cylinder } from "@metamesh/modeling";
11
+ import { generate } from "@metamesh/project";
12
+ ```
13
+
14
+
15
+
16
+ Studio supplies this API and its runtime to code Projects. Standalone applications use the same
17
+ values in a generation program. The [Model API reference](../reference/model.md) provides
18
+ exact signatures; this guide explains how the concepts fit together.
19
+
20
+ ## Choose the module for your host
21
+
22
+ | Import | Use it for | Who owns execution |
23
+ | --------------------------------------------------------- | ------------------------------------------------------------------- | --------------------------------------- |
24
+ | [`@metamesh/modeling`](../reference/model.md) | Sections, Solids, transforms, Booleans, sweeps, lofts, and patterns | A synchronous generation program |
25
+ | [`@metamesh/modeling/geometry`](../reference/geometry.md) | Pure paths, profiles, calculations, and indexed meshes | Your ordinary TypeScript code |
26
+ | [`@metamesh/modeling/engine`](../reference/engine.md) | Standalone initialization, model finalization, and 3MF export | Your Node application or browser Worker |
27
+ | [`@metamesh/modeling/text`](../reference/text.md) | Prepare exact font bytes and vector layouts outside Studio | Your host acquires the font bytes |
28
+
29
+ Construct immutable shapes, vectors, 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.
32
+
33
+ ## Use Modeling outside Studio
34
+
35
+ Follow [Run Modeling in your application](hosting.md)
36
+ to initialize the engine, build a model, load WASM, and export its completed snapshot.
37
+ For lettering, [prepare exact font bytes](fonts.md) before building.
38
+
39
+ ## Geometry vocabulary
40
+
41
+ The public API names values by modeling role:
42
+
43
+ - A `Path3` is an ordered 3D trajectory.
44
+ - A `Path2` is an ordered 2D trajectory.
45
+ - A `Contour` is plain point data for a closed 2D boundary, without a repeated closing point.
46
+ - `PolygonData` contains one outer contour and its holes. `RegionData` is the plain serialized
47
+ representation of filled 2D geometry, including disconnected polygons.
48
+ - A `Profile` specifies identified components, contours and spans for a related shape family.
49
+ - A `CorrespondingProfile` contains the shared sampled landmarks produced by `matchProfiles`.
50
+ - A `Section` is a filled 2D shape used for section Booleans, offsets, extrusion, revolution,
51
+ sweeps, and lofts.
52
+ - A `Solid` is a valid three-dimensional result that can participate in solid Booleans and become
53
+ model output.
54
+ - An `Anchor3` is an explicit local frame used to place one solid against another.
55
+ - `Vector2` and `Vector3` are immutable arithmetic values created by `vector2` and `vector3`.
56
+ - `Vector2Tuple` and `Vector3Tuple` are fixed numeric tuples for coordinate interchange and kernels.
57
+ - `Bounds2` and `Bounds3` contain finite minimum and maximum tuples for measurements and placement.
58
+
59
+ `Section` and `Solid` are opaque immutable recipes. Construction and composition need no engine;
60
+ ordinary recipes can be reused across sessions regardless of where they were constructed.
61
+ Explicitly supplied resolution settings are captured; unspecified settings inherit the evaluating
62
+ host's defaults. The host owns evaluation caches and native kernel values. `components()` is an
63
+ observation: its selected shapes, and recipes using them, can only be evaluated in the originating
64
+ session because component identity depends on evaluated topology.
65
+
66
+ Ordinary models use root Sections for shapes, Booleans, extrusion, sweeps, and lofts. The pure
67
+ `/geometry` entry supplies point data through `circleContour`, `rectangleContour`, and other contour factories
68
+ when custom calculations or mesh construction need it. `rectangle`, `rectangleContour`, and
69
+ `rectangleProfile` share size, center, corner treatment, and sampling options; their result type
70
+ reflects the operation's role.
71
+
72
+ Use [`polygon(points)`](../reference/model/polygon.md) to fill one contour. The explicit
73
+ `polygon({ outer, holes })` form validates exterior/hole topology and normalizes winding.
74
+ `polygon({ contours, fillRule })` resolves compound paths with `"nonzero"` fill by default or
75
+ explicit `"evenodd"` fill. Use `polygon({ polygons: data })` for existing `RegionData`.
76
+ Every form returns the same `Section` type as `circle` or `rectangle`; subsequent Booleans may
77
+ produce holes or disconnected components. `section.toRegionData()` observes the evaluated shape
78
+ inside synchronous generation. Keep serialized point data for interchange or pure preparation.
79
+
80
+ `rectangleProfile({ size: [width, height], treatment: { kind: "round", radius }, id })` describes
81
+ identified spans for custom geometry. Prepare a complete explicit family with `matchProfiles`
82
+ when loft stations or a sweep need authored holes, seams, or landmarks beyond ordinary primitives.
83
+
84
+ Identified spans also accept cubic Béziers with the same endpoints and controls as
85
+ [`CubicBezierCurve2`](../reference/geometry/CubicBezierCurve2.md). Paired spans share one parameter
86
+ grid; physical sampling refines every member before choosing the family count. Collapsed spans
87
+ retain repeated logical slots, while the completed loft removes degenerate faces.
88
+
89
+ ## Choose a modeling path
90
+
91
+ | Starting intent | Typical operations |
92
+ | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
93
+ | A block, cylinder, sphere, or cone | Primitive solids, transforms, then [solid Booleans](fundamentals.md#choose-the-boolean-by-the-material-you-want) |
94
+ | A plate, gasket, logo, or profile | Build a `Section`, use section Booleans or offsets, then [extrude](recipes.md#section-hole-offset-and-extrusion) |
95
+ | A rotational part | [Revolve a closed radial profile](recipes.md#revolve-a-radial-profile) around +Z |
96
+ | A tube or routed shape | [Sweep one supported section](recipes.md#rotation-minimizing-path-sweep) along an open or closed path |
97
+ | A transition between profiles | [Loft corresponding boundaries](recipes.md#matched-section-loft) with holes |
98
+ | Repeated or mating parts | [Patterns](recipes.md#primitive-booleans-and-repeated-placement), [explicit anchors](recipes.md#named-anchors-and-custom-frames), and [reusable thread settings](https://metamesh.studio/docs/develop/printable-threads) |
99
+
100
+ Name meaningful intermediate values and choose a curve tolerance that preserves the required
101
+ shape. Many high-resolution Boolean operands increase generation time.
102
+
103
+ Primitive factories take one options object. For example, `rectangle({ size: [24, 16] })` creates a
104
+ filled Section and `box({ size: [24, 16, 6] })` creates a Solid. `union` and `intersect`
105
+ combine same-dimensional arrays. `shape.subtract(cutters)` accepts an array of same-dimensional
106
+ cutters. `section.offset(distance, options)` stays in the filled XY plane.
107
+
108
+ `section.extrude({ height, twistDegrees, scaleTop })` adds +Z depth, with its bottom at zero unless
109
+ `center: true` is requested. `section.revolve({ revolveDegrees })` rotates radial/Z geometry around
110
+ +Z. `loft` pairs retained landmarks in compatible primitive Sections, including zero and fully
111
+ rounded rectangle corners, and circle/ellipse stations transitioning to rectangles. This also works
112
+ after invertible XY transforms with consistent handedness. It accepts explicit corresponding
113
+ Profile stations for custom topology. Boolean Sections and point contours need a selected
114
+ `correspondence` method (`"direct"`, `"reindex"`, `"fast-distance"`, or `"distance"`) or explicit
115
+ profiles; Boolean contour order does not establish semantic correspondence.
116
+ `section.sweep(path, options)` supports open or closed paths,
117
+ degree twist, uniform/XY/per-station scales and an explicit compatible closed seam.
118
+
119
+ ## Coordinates, units, and resolution
120
+
121
+ MetaMesh uses a right-handed coordinate system with **+Z up**. Authored dimensions and curve
122
+ tolerances are millimetres; angular arguments such as `rotate` use degrees.
123
+ Pure [`rotate2`](../reference/geometry/rotate2.md) and transform-chain rotations also take degrees.
124
+ The low-level [`rotationTransform3`](../reference/geometry/rotationTransform3.md) constructor
125
+ requires an explicit `{ degrees }` or `{ radians }` angle.
126
+
127
+ `GeometryResolution` controls sampled curves in physical space. The default maximum chord error is
128
+ `0.05 mm`, with 16–512 segments for a complete circle and no default maximum segment length. An
129
+ operation-specific `segments` or `circularSegments` value takes priority, followed by its local
130
+ `resolution`, and then host session defaults. A shape does not carry a sampling policy into later
131
+ operations; pass the policy explicitly where needed.
132
+
133
+ Use an exact segment count for intentionally faceted geometry or when two sampled contours must
134
+ match point for point. Use physical chord and segment limits for ordinary printable curves. If a
135
+ requested tolerance cannot fit within the safety cap, the operation fails instead of silently
136
+ returning a coarser shape.
137
+
138
+ `regularPolygon({ radius, sides, rotationDegrees, sizing })` makes a filled regular polygon.
139
+ `sizing: "vertex"` uses the specified vertex radius; `"face"` compensates faceting so the faces
140
+ meet the nominal radius. `circle` and `cylinder` support the same radial convention.
141
+
142
+ Finishing shares `round` (radius), `chamfer` (setbacks), `smooth` (cubic setbacks), and exact
143
+ `profile` points across applicable box edges, rectangle corners, and cylinder/extrusion ends.
144
+ Boxes can select disjoint named edges or groups; rectangles can select individual corners.
145
+ Cylinder/frustum and straight convex extrusion rims use independent `ends.bottom` and `ends.top`.
146
+ Zero rounding radius, zero chamfer/smooth distance, or an all-zero distance pair leaves the
147
+ selected feature untreated. Other setback pairs must have two positive values; negative and
148
+ nonfinite amounts reject. Disabled extrusion end treatments retain ordinary extrusion support,
149
+ including holes and twist.
150
+ `placement` maps a named or explicit shape-local anchor to a world anchor after local
151
+ construction, using alignment, millimetre gap and degree spin. Section placement must stay in XY.
152
+
153
+ ## Reuse a transform across shapes and coordinates
154
+
155
+ Use [`transform2`](../reference/geometry/transform2.md) and
156
+ [`transform3`](../reference/geometry/transform3.md) chains for reusable placements. They are immutable
157
+ and pure; no engine initialization is needed. Calls apply in written order. A rotation followed
158
+ by a translation rotates around the origin, then moves the result:
159
+
160
+
161
+
162
+ ```ts
163
+ import { transform3, vector3 } from "@metamesh/modeling";
164
+
165
+ // Calls apply in written order: rotate, then translate.
166
+ const placement = transform3().rotate([0, 0, 90]).translate([20, 0, 5]);
167
+ export const placedPoint = placement.applyPoint([10, 0, 0]); // approximately [20, 10, 5]
168
+ export const placedDirection = placement.applyDirection([10, 0, 0]); // approximately [0, 10, 0]
169
+ ```
170
+
171
+
172
+
173
+ Pass a transform directly to `solid.transform(placement)`, `section.transform(placement)` and
174
+ matching path helpers. `toMatrix()` supplies a canonical matrix when another system needs it.
175
+ Construct the placement once and reuse it across point collections.
176
+
177
+ `current.andThen(next)` applies `current` first and `next` second, accepting another chain or a
178
+ same-dimensional matrix. `inverse()` returns the reverse placement. Transform-building operations
179
+ return new chains, so shared placements can branch safely.
180
+
181
+ Use `rotate(degrees, { pivot })` or `scale(factors, { pivot })` to work around a world-space pivot after
182
+ the preceding operations. In 3D, `rotate` takes XYZ Euler degrees, applied about global X, Y, then
183
+ Z; `rotateAxis(axis, degrees, { pivot })` normalizes its nonzero axis. Omitted pivots use the
184
+ coordinate origin. Uniform and per-axis scales
185
+ must be finite and nonzero; negative factors reflect. Nonfinite inputs, invalid axes, and singular
186
+ matrices throw `GeometryError`.
187
+
188
+ `applyPoint` includes translation. `applyDirection` excludes translation and preserves scale;
189
+ its result is not normalized. `applyNormal` applies the inverse transpose and returns a unit normal,
190
+ including under nonuniform scaling; it rejects zero normals. All three return fluent vectors.
191
+
192
+ `Transform2` works directly with Sections and pure XY helpers; its `Transform2Matrix` is the same
193
+ canonical 3x3 representation throughout. Use `to3D()` when that XY placement
194
+ also needs to position a Solid or 3D path. The reverse `to2D()` conversion rejects transforms
195
+ that move the XY plane or collapse its dimensions; it does not project 3D points.
196
+ See the [2D placement recipe](recipes.md#reuse-a-2d-placement).
197
+
198
+ For low-level matrix interoperability, the factories accept existing canonical matrices. Use
199
+ `transform3(frameTransform3(frame))` for an orthonormal frame. The raw constructors and
200
+ `composeTransform3(after, before)` remain available; composition applies `before` first.
201
+
202
+ ## Calculate with vectors
203
+
204
+ Use [`vector2`](../reference/geometry/vector2.md) and [`vector3`](../reference/geometry/vector3.md)
205
+ for readable arithmetic chains. Operands accept tuples or vectors; `dot`, `length` and `distance`
206
+ return numbers. `cross` returns a signed scalar in 2D and a right-handed vector in 3D.
207
+
208
+
209
+
210
+ ```ts
211
+ export const direction = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
212
+ export const alignment = direction.dot([0, 0, 1]); // number
213
+ ```
214
+
215
+
216
+
217
+ Values snapshot their input and operations return new values. `toArray()` returns the value's
218
+ frozen coordinate tuple without allocating another copy. Normalization rejects zero-length vectors;
219
+ nonfinite coordinates, scalar parameters and overflowing results throw `GeometryError`.
220
+
221
+ For rotations and nonuniform scaling, use a reusable transform's `applyDirection`. Use
222
+ `applyNormal` for surface normals:
223
+
224
+
225
+
226
+ ```ts
227
+ const stretched = transform3().scale([2, 1, 1]);
228
+ export const normal = stretched.applyNormal([1, 1, 0]);
229
+ export const tangent = stretched.applyDirection([1, -1, 0]);
230
+ export const perpendicular = normal.dot(tangent); // approximately 0
231
+ ```
232
+
233
+
234
+
235
+ The tuple arithmetic kernels remain available for dense numerical loops. Fluent values add
236
+ validation and immutable object allocation; they are an authoring convenience, not a speedup.
237
+ Fluent math, shape transforms and part placement accept vector values directly; geometry
238
+ specifications and point collections use canonical tuples.
239
+ Keep simple coordinate expressions and equations intrinsic to the model beside the model.
240
+
241
+ ## SVG sections: fills and strokes are different inputs
242
+
243
+ [`svgSection`](../reference/model/svgSection.md) converts a bounded complete SVG document into one
244
+ painted `Section`. Supported visible **fills and bounded strokes both contribute geometry**. It
245
+ handles supported shapes, paths, affine transforms, physical root units, `viewBox` scaling, and
246
+ allowlisted inline fill and stroke presentation.
247
+
248
+ [`svgPathSection`](../reference/model/svgPathSection.md) accepts SVG path-data text rather than a
249
+ document. It is a **fill-only** path operation: stroke styling is not part of that contract. Path
250
+ units default to millimetres and can be converted with its scale option.
251
+
252
+ Both functions convert SVG's Y-down plane to MetaMesh's Y-up plane and center the final painted
253
+ bounds by default. Use `origin: "document"` with `svgSection` when the converted document viewport
254
+ origin must remain meaningful. Adaptive flattening happens after supported transforms and unit
255
+ conversion, so tolerances apply in final millimetre space.
256
+
257
+ Unsupported layout or external content fails rather than disappearing silently. The current public
258
+ contract does not include nested SVG viewports, `<use>`, images, live text, external stylesheets,
259
+ clipping, masks, filters, scripts, animation, gradients, patterns, uploaded project assets, or
260
+ custom font files. Use the [SVG extrusion recipe](recipes.md#svg-parameter-and-extrusion)
261
+ for a complete authored example.
262
+
263
+ ## Text and font variability
264
+
265
+ `services.text.layout()` shapes text inside generation. Cache an expensive shared layout with
266
+ `computed`, measure its `metrics`, and pass it to `textSection(layout())`. There is no
267
+ ambient font provider or repeated shaping during export. Declare a Text control for the wording
268
+ and a Font control for the face and weight.
269
+
270
+ Font size is the em size in millimetres, not the height of a particular letter. Layout supports
271
+ horizontal lines, spacing, and alignment, or a single circular baseline through
272
+ [`VectorTextArcBaseline`](../reference/text/VectorTextArcBaseline.md). Follow the
273
+ [text recipe](recipes.md#text-from-a-font-parameter) for the control setup,
274
+ layout conventions, and font availability limits.
275
+
276
+ ## Printable threads
277
+
278
+ The public API provides coordinated external threads, internal cutters, and threaded nuts. Reuse
279
+ one profile and fit policy across mating parts, then prove them with a short calibration print.
280
+
281
+ Follow [Build printable threads](https://metamesh.studio/docs/develop/printable-threads) for the illustrated workflow,
282
+ complete source, profile and fit choices, end treatments, and links into the exact API contracts.
283
+
284
+ ## Lifecycle and inspection
285
+
286
+ Studio or your standalone engine owns geometry initialization, cleanup, and mesh finalization.
287
+ The host owns Worker recovery, preview, and file delivery. Do not manually delete `Section` or `Solid`
288
+ values. Use
289
+ `inspectSection()` and `inspectSolid()` for supported bounds, topology counts, area, and volume
290
+ measurements.
291
+
292
+ Observations, including `section.toRegionData()`, require the host's active synchronous generation.
293
+ Constructing or composing a recipe outside generation does not evaluate it.
294
+
295
+ An inspection result describes the generated geometry; it does not certify wall thickness,
296
+ overhangs, fits, loads, or manufacturability. Keep those product decisions in parameters,
297
+ validation, and your downstream manufacturing checks.
298
+
299
+ - [Use geometry recipes](recipes.md)
300
+ - [Browse exact signatures](../reference/model.md)
@@ -0,0 +1,59 @@
1
+ # Prepare fonts for modeling
2
+
3
+ Prepare licensed font bytes and a reusable text layout before building a model outside Studio.
4
+
5
+ Your host acquires exact licensed font bytes before synchronous generation.
6
+ Studio authors use the [Font control recipe](recipes.md#text-from-a-font-parameter);
7
+ standalone applications use the optional `@metamesh/modeling/text` entry point.
8
+
9
+ ## Install font support
10
+
11
+ Install the optional `fontkit` peer. WOFF2 input also needs `woff2-encoder`:
12
+
13
+ ```bash
14
+ pnpm add fontkit
15
+ pnpm add woff2-encoder
16
+ ```
17
+
18
+ TTF, OTF, and WOFF input use fontkit directly. WOFF2 decoding loads only when needed. The library
19
+ does not fetch fonts; your application supplies their bytes.
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
+
24
+ ## Prepare one reusable layout
25
+
26
+
27
+
28
+ ```ts
29
+ import { prepareVectorFont, type VectorTextLayout } from "@metamesh/modeling/text";
30
+
31
+ export async function makeLabelLayout(fontBytes: Uint8Array): Promise<{
32
+ readonly layout: VectorTextLayout;
33
+ readonly svg: string;
34
+ }> {
35
+ // Acquire licensed font bytes in your host before synchronous generation.
36
+ // Install fontkit; WOFF2 input also needs the optional woff2-encoder peer.
37
+ const font = await prepareVectorFont(fontBytes);
38
+ const layout = font.layout("MetaMesh", { fontSize: 8, letterSpacing: 0.15 });
39
+ const svg = font.toSvg("MetaMesh", { fontSize: 8, letterSpacing: 0.15 });
40
+ // Pass layout to textSection inside generation; its paths and metrics use Y-up millimetres.
41
+ return { layout, svg };
42
+ }
43
+ ```
44
+
45
+
46
+
47
+ Call `makeLabelLayout(fontBytes)` with the acquired bytes. It returns a `layout` and a separate
48
+ `svg` string. The layout contains paths and metrics in Y-up millimetres. Pass the returned `layout` to
49
+ [`textSection`](../reference/model/textSection.md) inside generation, then extrude its filled
50
+ section with the ordinary modeling operations. A host can prepare layouts ahead of time or inject
51
+ a deterministic text service and cache layouts with `computed`.
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
+
58
+ Use the [Font preparation reference](../reference/text.md) for font and layout options, or
59
+ [Run Modeling in your application](hosting.md) for the host lifecycle.