@metamesh/modeling 0.11.0 → 0.13.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 (630) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +60 -58
  3. package/dist/api/engine.d.ts +123 -97
  4. package/dist/api/geometry.d.ts +3896 -3307
  5. package/dist/api/index.d.ts +2489 -2267
  6. package/dist/api/text.d.ts +119 -107
  7. package/dist/docs/guides/concepts.md +197 -0
  8. package/dist/docs/guides/fonts.md +51 -0
  9. package/dist/docs/guides/fundamentals.md +135 -0
  10. package/dist/docs/guides/generation.md +221 -0
  11. package/dist/docs/guides/hosting.md +88 -0
  12. package/dist/docs/guides/recipes.md +668 -0
  13. package/dist/docs/manifest.json +9851 -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 +79 -0
  33. package/dist/docs/reference/geometry/Anchor3.md +49 -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 +58 -0
  37. package/dist/docs/reference/geometry/AxisAngleRotation3.md +61 -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 +7 -0
  45. package/dist/docs/reference/geometry/BoxAnchorOptions.md +59 -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/ClearanceHoleDimensions.md +41 -0
  56. package/dist/docs/reference/geometry/ClearanceHoleFit.md +7 -0
  57. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +53 -0
  58. package/dist/docs/reference/geometry/Contour.md +17 -0
  59. package/dist/docs/reference/geometry/ContourCurve.md +35 -0
  60. package/dist/docs/reference/geometry/ContourPoint.md +29 -0
  61. package/dist/docs/reference/geometry/ContourSegment.md +86 -0
  62. package/dist/docs/reference/geometry/CorrespondingComponent.md +46 -0
  63. package/dist/docs/reference/geometry/CorrespondingContour.md +46 -0
  64. package/dist/docs/reference/geometry/CorrespondingProfile.md +22 -0
  65. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +27 -0
  66. package/dist/docs/reference/geometry/CubicBezierCurve2.md +70 -0
  67. package/dist/docs/reference/geometry/CubicBezierCurve3.md +70 -0
  68. package/dist/docs/reference/geometry/Curve2.md +16 -0
  69. package/dist/docs/reference/geometry/Curve3.md +16 -0
  70. package/dist/docs/reference/geometry/CurveSamplingOptions.md +64 -0
  71. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +73 -0
  72. package/dist/docs/reference/geometry/CylinderAnchorFace.md +7 -0
  73. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +83 -0
  74. package/dist/docs/reference/geometry/CylinderOptions.md +53 -0
  75. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +209 -0
  76. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +7 -0
  77. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +71 -0
  78. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +82 -0
  79. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +34 -0
  80. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +41 -0
  81. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +47 -0
  82. package/dist/docs/reference/geometry/CylindricalGearSpec.md +82 -0
  83. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -0
  84. package/dist/docs/reference/geometry/EdgeTreatment.md +17 -0
  85. package/dist/docs/reference/geometry/EllipseContourOptions.md +15 -0
  86. package/dist/docs/reference/geometry/EndTreatments.md +34 -0
  87. package/dist/docs/reference/geometry/ExtrudeOptions.md +134 -0
  88. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +77 -0
  89. package/dist/docs/reference/geometry/FittedTextLayout.md +60 -0
  90. package/dist/docs/reference/geometry/Frame3.md +58 -0
  91. package/dist/docs/reference/geometry/GeometryError.md +97 -0
  92. package/dist/docs/reference/geometry/GeometryErrorCode.md +7 -0
  93. package/dist/docs/reference/geometry/GeometryErrorContext.md +29 -0
  94. package/dist/docs/reference/geometry/GeometryResolution.md +65 -0
  95. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +62 -0
  96. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +41 -0
  97. package/dist/docs/reference/geometry/GridPatternOptions.md +42 -0
  98. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +14 -0
  99. package/dist/docs/reference/geometry/HeightfieldOptions.md +67 -0
  100. package/dist/docs/reference/geometry/HeightfieldPreflight.md +53 -0
  101. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +141 -0
  102. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +265 -0
  103. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +53 -0
  104. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +14 -0
  105. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +242 -0
  106. package/dist/docs/reference/geometry/LineCurve2.md +46 -0
  107. package/dist/docs/reference/geometry/LineCurve3.md +46 -0
  108. package/dist/docs/reference/geometry/LinearPatternOptions.md +30 -0
  109. package/dist/docs/reference/geometry/LoftCorrespondence.md +19 -0
  110. package/dist/docs/reference/geometry/LoftMeshStation.md +27 -0
  111. package/dist/docs/reference/geometry/LoftOptions.md +84 -0
  112. package/dist/docs/reference/geometry/LoftPlacement.md +66 -0
  113. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +18 -0
  114. package/dist/docs/reference/geometry/MatchProfilesOptions.md +35 -0
  115. package/dist/docs/reference/geometry/MetricFastenerSize.md +7 -0
  116. package/dist/docs/reference/geometry/MetricFastenerStandard.md +72 -0
  117. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +29 -0
  118. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +41 -0
  119. package/dist/docs/reference/geometry/ModelingLimits.md +126 -0
  120. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +17 -0
  121. package/dist/docs/reference/geometry/Path2.md +14 -0
  122. package/dist/docs/reference/geometry/Path3.md +14 -0
  123. package/dist/docs/reference/geometry/PathFrame.md +46 -0
  124. package/dist/docs/reference/geometry/PathNormalGuide.md +38 -0
  125. package/dist/docs/reference/geometry/PathPatternOptions.md +46 -0
  126. package/dist/docs/reference/geometry/PathPlacement.md +34 -0
  127. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +7 -0
  128. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +156 -0
  129. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +120 -0
  130. package/dist/docs/reference/geometry/PlanarPatchQuality.md +190 -0
  131. package/dist/docs/reference/geometry/Polygon.md +38 -0
  132. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +92 -0
  133. package/dist/docs/reference/geometry/PrimitivePlacement.md +31 -0
  134. package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +83 -0
  135. package/dist/docs/reference/geometry/PrintableThreadFit.md +7 -0
  136. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +45 -0
  137. package/dist/docs/reference/geometry/Profile.md +22 -0
  138. package/dist/docs/reference/geometry/ProfileComponent2.md +46 -0
  139. package/dist/docs/reference/geometry/ProfileContour2.md +34 -0
  140. package/dist/docs/reference/geometry/ProfileSpan2.md +47 -0
  141. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +36 -0
  142. package/dist/docs/reference/geometry/RackPitchDimensions.md +113 -0
  143. package/dist/docs/reference/geometry/RackPitchSpec.md +77 -0
  144. package/dist/docs/reference/geometry/RadialPatternOptions.md +62 -0
  145. package/dist/docs/reference/geometry/RadialSizing.md +7 -0
  146. package/dist/docs/reference/geometry/RadialSizingOptions.md +40 -0
  147. package/dist/docs/reference/geometry/RectangleContourOptions.md +66 -0
  148. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +34 -0
  149. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +14 -0
  150. package/dist/docs/reference/geometry/RectangleProfileOptions.md +94 -0
  151. package/dist/docs/reference/geometry/Region.md +14 -0
  152. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +84 -0
  153. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +65 -0
  154. package/dist/docs/reference/geometry/RevolveOptions.md +82 -0
  155. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +91 -0
  156. package/dist/docs/reference/geometry/RowLayoutOptions.md +23 -0
  157. package/dist/docs/reference/geometry/SampleContourOptions.md +71 -0
  158. package/dist/docs/reference/geometry/SampleHelixOptions.md +95 -0
  159. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +71 -0
  160. package/dist/docs/reference/geometry/SampledCurve2.md +34 -0
  161. package/dist/docs/reference/geometry/SampledCurve3.md +34 -0
  162. package/dist/docs/reference/geometry/SampledThreadHelices.md +58 -0
  163. package/dist/docs/reference/geometry/SideProfileCurve.md +35 -0
  164. package/dist/docs/reference/geometry/SideProfilePoint.md +29 -0
  165. package/dist/docs/reference/geometry/SideProfileSegment.md +86 -0
  166. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +71 -0
  167. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +34 -0
  168. package/dist/docs/reference/geometry/SphereOptions.md +15 -0
  169. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +75 -0
  170. package/dist/docs/reference/geometry/StrokePathCap.md +7 -0
  171. package/dist/docs/reference/geometry/StrokePathJoin.md +7 -0
  172. package/dist/docs/reference/geometry/StrokePathRegionOptions.md +85 -0
  173. package/dist/docs/reference/geometry/SvgImportOptions.md +60 -0
  174. package/dist/docs/reference/geometry/SvgRegionPreflight.md +61 -0
  175. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +118 -0
  176. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +65 -0
  177. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +53 -0
  178. package/dist/docs/reference/geometry/SweepOptions.md +109 -0
  179. package/dist/docs/reference/geometry/SweepOrientation.md +109 -0
  180. package/dist/docs/reference/geometry/ThreadBevelOptions.md +53 -0
  181. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +100 -0
  182. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +73 -0
  183. package/dist/docs/reference/geometry/ThreadEndStyle.md +7 -0
  184. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +113 -0
  185. package/dist/docs/reference/geometry/ThreadHandedness.md +7 -0
  186. package/dist/docs/reference/geometry/ThreadHelixOptions.md +120 -0
  187. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +7 -0
  188. package/dist/docs/reference/geometry/ThreadLeadInShape.md +7 -0
  189. package/dist/docs/reference/geometry/ThreadProfile.md +82 -0
  190. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +49 -0
  191. package/dist/docs/reference/geometry/ThreadProfileSpec.md +19 -0
  192. package/dist/docs/reference/geometry/ThreadRole.md +7 -0
  193. package/dist/docs/reference/geometry/ThreadedNutBevel.md +7 -0
  194. package/dist/docs/reference/geometry/ThreadedNutOptions.md +269 -0
  195. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +94 -0
  196. package/dist/docs/reference/geometry/ThreadedNutShape.md +7 -0
  197. package/dist/docs/reference/geometry/ThreadedRodOptions.md +242 -0
  198. package/dist/docs/reference/geometry/TorusOptions.md +105 -0
  199. package/dist/docs/reference/geometry/Transform3.md +12 -0
  200. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +91 -0
  201. package/dist/docs/reference/geometry/TriangleMesh.md +34 -0
  202. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +119 -0
  203. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +75 -0
  204. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +75 -0
  205. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +39 -0
  206. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +190 -0
  207. package/dist/docs/reference/geometry/TriangleMeshSignature.md +107 -0
  208. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +41 -0
  209. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +29 -0
  210. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +51 -0
  211. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +91 -0
  212. package/dist/docs/reference/geometry/TubeOptions.md +138 -0
  213. package/dist/docs/reference/geometry/Vector2.md +7 -0
  214. package/dist/docs/reference/geometry/Vector3.md +7 -0
  215. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +53 -0
  216. package/dist/docs/reference/geometry/VectorTextLayout.md +39 -0
  217. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +111 -0
  218. package/dist/docs/reference/geometry/VectorTextMetrics.md +94 -0
  219. package/dist/docs/reference/geometry/VectorTextOptions.md +50 -0
  220. package/dist/docs/reference/geometry/add3.md +38 -0
  221. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +57 -0
  222. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +52 -0
  223. package/dist/docs/reference/geometry/anchorFrame3.md +40 -0
  224. package/dist/docs/reference/geometry/applyTransformDirection3.md +41 -0
  225. package/dist/docs/reference/geometry/applyTransformPoint3.md +39 -0
  226. package/dist/docs/reference/geometry/attachTransform.md +73 -0
  227. package/dist/docs/reference/geometry/boundsCenter.md +62 -0
  228. package/dist/docs/reference/geometry/boundsFromSize.md +83 -0
  229. package/dist/docs/reference/geometry/boundsSize.md +62 -0
  230. package/dist/docs/reference/geometry/boxAnchor3.md +48 -0
  231. package/dist/docs/reference/geometry/buildHelicalThreadRidgeMesh.md +68 -0
  232. package/dist/docs/reference/geometry/buildHelicalThreadSolidMesh.md +102 -0
  233. package/dist/docs/reference/geometry/categories/bounds-layout.md +35 -0
  234. package/dist/docs/reference/geometry/categories/curves-paths.md +63 -0
  235. package/dist/docs/reference/geometry/categories/mechanical.md +101 -0
  236. package/dist/docs/reference/geometry/categories/meshes.md +73 -0
  237. package/dist/docs/reference/geometry/categories/pattern-placement.md +34 -0
  238. package/dist/docs/reference/geometry/categories/primitive-options.md +36 -0
  239. package/dist/docs/reference/geometry/categories/profiles-regions.md +74 -0
  240. package/dist/docs/reference/geometry/categories/resolution-errors.md +46 -0
  241. package/dist/docs/reference/geometry/categories/transforms-math.md +63 -0
  242. package/dist/docs/reference/geometry/categories/vector-import.md +40 -0
  243. package/dist/docs/reference/geometry/circleContour.md +33 -0
  244. package/dist/docs/reference/geometry/closeToAxis.md +34 -0
  245. package/dist/docs/reference/geometry/compensateThreadDiameters.md +51 -0
  246. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +42 -0
  247. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +56 -0
  248. package/dist/docs/reference/geometry/composeTransform3.md +40 -0
  249. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +45 -0
  250. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +47 -0
  251. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +31 -0
  252. package/dist/docs/reference/geometry/containsBounds.md +72 -0
  253. package/dist/docs/reference/geometry/contourContainsPoint.md +33 -0
  254. package/dist/docs/reference/geometry/createAnchor3.md +63 -0
  255. package/dist/docs/reference/geometry/createThreadProfile.md +37 -0
  256. package/dist/docs/reference/geometry/createTriangleMeshSignature.md +60 -0
  257. package/dist/docs/reference/geometry/cross3.md +38 -0
  258. package/dist/docs/reference/geometry/cumulativePathLengths.md +33 -0
  259. package/dist/docs/reference/geometry/cylinderAnchor3.md +56 -0
  260. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +14 -0
  261. package/dist/docs/reference/geometry/distributeAlongPath.md +51 -0
  262. package/dist/docs/reference/geometry/dot3.md +38 -0
  263. package/dist/docs/reference/geometry/ellipseContour.md +33 -0
  264. package/dist/docs/reference/geometry/eulerTransform3.md +38 -0
  265. package/dist/docs/reference/geometry/extrudeMesh.md +73 -0
  266. package/dist/docs/reference/geometry/fitBounds.md +95 -0
  267. package/dist/docs/reference/geometry/fitTextLayout.md +57 -0
  268. package/dist/docs/reference/geometry/frameTransform3.md +44 -0
  269. package/dist/docs/reference/geometry/getMetricClearanceHole.md +33 -0
  270. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +27 -0
  271. package/dist/docs/reference/geometry/gridPatternTransforms.md +31 -0
  272. package/dist/docs/reference/geometry/heightfieldMesh.md +43 -0
  273. package/dist/docs/reference/geometry/inverseTransform3.md +30 -0
  274. package/dist/docs/reference/geometry/isGeometryError.md +26 -0
  275. package/dist/docs/reference/geometry/joinTriangleMeshes.md +36 -0
  276. package/dist/docs/reference/geometry/layoutRow.md +43 -0
  277. package/dist/docs/reference/geometry/length3.md +26 -0
  278. package/dist/docs/reference/geometry/lerp3.md +38 -0
  279. package/dist/docs/reference/geometry/linearPatternTransforms.md +31 -0
  280. package/dist/docs/reference/geometry/loftMesh.md +72 -0
  281. package/dist/docs/reference/geometry/matchProfiles.md +51 -0
  282. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +47 -0
  283. package/dist/docs/reference/geometry/measureTriangleMesh.md +55 -0
  284. package/dist/docs/reference/geometry/meshBounds.md +35 -0
  285. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +29 -0
  286. package/dist/docs/reference/geometry/normalize3.md +32 -0
  287. package/dist/docs/reference/geometry/normalizeContour.md +45 -0
  288. package/dist/docs/reference/geometry/normalizePolygon.md +37 -0
  289. package/dist/docs/reference/geometry/normalizeRegion.md +33 -0
  290. package/dist/docs/reference/geometry/optimizePlanarPatches.md +91 -0
  291. package/dist/docs/reference/geometry/pathLength.md +33 -0
  292. package/dist/docs/reference/geometry/pathPatternTransforms.md +57 -0
  293. package/dist/docs/reference/geometry/preflightHeightfield.md +34 -0
  294. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +96 -0
  295. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +85 -0
  296. package/dist/docs/reference/geometry/preflightSvgRegion.md +56 -0
  297. package/dist/docs/reference/geometry/preflightThreadedNut.md +96 -0
  298. package/dist/docs/reference/geometry/preflightThreadedRod.md +85 -0
  299. package/dist/docs/reference/geometry/projectOntoPlane3.md +32 -0
  300. package/dist/docs/reference/geometry/radialPatternTransforms.md +47 -0
  301. package/dist/docs/reference/geometry/rectangleContour.md +49 -0
  302. package/dist/docs/reference/geometry/rectangleProfile.md +53 -0
  303. package/dist/docs/reference/geometry/regionArea.md +34 -0
  304. package/dist/docs/reference/geometry/regionBounds.md +27 -0
  305. package/dist/docs/reference/geometry/regularPolygonContour.md +53 -0
  306. package/dist/docs/reference/geometry/resamplePolyline2.md +64 -0
  307. package/dist/docs/reference/geometry/resamplePolyline3.md +67 -0
  308. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +79 -0
  309. package/dist/docs/reference/geometry/resolveArcSegments.md +67 -0
  310. package/dist/docs/reference/geometry/resolveCircularSegments.md +61 -0
  311. package/dist/docs/reference/geometry/resolveCylindricalGear.md +31 -0
  312. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +31 -0
  313. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +74 -0
  314. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +26 -0
  315. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +59 -0
  316. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +27 -0
  317. package/dist/docs/reference/geometry/resolveRackPitch.md +27 -0
  318. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +59 -0
  319. package/dist/docs/reference/geometry/reverseTriangleMesh.md +30 -0
  320. package/dist/docs/reference/geometry/revolveMesh.md +76 -0
  321. package/dist/docs/reference/geometry/rotateAroundAxis3.md +38 -0
  322. package/dist/docs/reference/geometry/rotationTransform3.md +49 -0
  323. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +50 -0
  324. package/dist/docs/reference/geometry/sampleContour.md +77 -0
  325. package/dist/docs/reference/geometry/sampleCurve2.md +61 -0
  326. package/dist/docs/reference/geometry/sampleCurve3.md +61 -0
  327. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +58 -0
  328. package/dist/docs/reference/geometry/sampleHelix.md +41 -0
  329. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +59 -0
  330. package/dist/docs/reference/geometry/sampleRackToothPath.md +39 -0
  331. package/dist/docs/reference/geometry/sampleSideProfile.md +73 -0
  332. package/dist/docs/reference/geometry/sampleTextContours.md +53 -0
  333. package/dist/docs/reference/geometry/sampleThreadHelices.md +63 -0
  334. package/dist/docs/reference/geometry/scale3.md +38 -0
  335. package/dist/docs/reference/geometry/scaleTransform3.md +34 -0
  336. package/dist/docs/reference/geometry/signedContourArea.md +26 -0
  337. package/dist/docs/reference/geometry/starContour.md +51 -0
  338. package/dist/docs/reference/geometry/strokePathRegion.md +63 -0
  339. package/dist/docs/reference/geometry/subtract3.md +38 -0
  340. package/dist/docs/reference/geometry/sweepMesh.md +82 -0
  341. package/dist/docs/reference/geometry/transformContour.md +42 -0
  342. package/dist/docs/reference/geometry/transformDeterminant3.md +32 -0
  343. package/dist/docs/reference/geometry/transformPath2.md +40 -0
  344. package/dist/docs/reference/geometry/transformPath3.md +33 -0
  345. package/dist/docs/reference/geometry/transformRegion.md +40 -0
  346. package/dist/docs/reference/geometry/transformTriangleMesh.md +42 -0
  347. package/dist/docs/reference/geometry/translationTransform3.md +31 -0
  348. package/dist/docs/reference/geometry/triangulateContour.md +26 -0
  349. package/dist/docs/reference/geometry/validateSolidMesh.md +52 -0
  350. package/dist/docs/reference/geometry/validateTransform3.md +43 -0
  351. package/dist/docs/reference/geometry/validateTriangleMesh.md +59 -0
  352. package/dist/docs/reference/geometry.md +30 -0
  353. package/dist/docs/reference/model/Anchor3.md +54 -0
  354. package/dist/docs/reference/model/AttachOptions.md +63 -0
  355. package/dist/docs/reference/model/Bounds2.md +39 -0
  356. package/dist/docs/reference/model/Bounds3.md +39 -0
  357. package/dist/docs/reference/model/BoxEdge.md +15 -0
  358. package/dist/docs/reference/model/BoxEdgeSelection.md +19 -0
  359. package/dist/docs/reference/model/BoxEdgeTreatments.md +20 -0
  360. package/dist/docs/reference/model/BoxOptions.md +92 -0
  361. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +35 -0
  362. package/dist/docs/reference/model/CircleContourOptions.md +21 -0
  363. package/dist/docs/reference/model/CircleOptions.md +21 -0
  364. package/dist/docs/reference/model/CircularPrimitiveOptions.md +64 -0
  365. package/dist/docs/reference/model/Computed.md +35 -0
  366. package/dist/docs/reference/model/ComputedValue.md +20 -0
  367. package/dist/docs/reference/model/Contour.md +22 -0
  368. package/dist/docs/reference/model/CorrespondingComponent.md +46 -0
  369. package/dist/docs/reference/model/CorrespondingContour.md +46 -0
  370. package/dist/docs/reference/model/CorrespondingProfile.md +22 -0
  371. package/dist/docs/reference/model/CorrespondingProfileStation.md +27 -0
  372. package/dist/docs/reference/model/CylinderOptions.md +58 -0
  373. package/dist/docs/reference/model/DiagnosticOptions.md +23 -0
  374. package/dist/docs/reference/model/EdgeTreatment.md +22 -0
  375. package/dist/docs/reference/model/EllipseContourOptions.md +21 -0
  376. package/dist/docs/reference/model/EllipseOptions.md +21 -0
  377. package/dist/docs/reference/model/EndTreatments.md +39 -0
  378. package/dist/docs/reference/model/ExtrudeOptions.md +140 -0
  379. package/dist/docs/reference/model/FinalizedModel.md +121 -0
  380. package/dist/docs/reference/model/FinalizedPart.md +87 -0
  381. package/dist/docs/reference/model/Frame3.md +63 -0
  382. package/dist/docs/reference/model/GenerateCallback.md +37 -0
  383. package/dist/docs/reference/model/GenerateContext.md +277 -0
  384. package/dist/docs/reference/model/GeneratedPart.md +93 -0
  385. package/dist/docs/reference/model/GenerationDiagnostic.md +41 -0
  386. package/dist/docs/reference/model/GenerationError.md +54 -0
  387. package/dist/docs/reference/model/GeometryResolution.md +70 -0
  388. package/dist/docs/reference/model/GeometrySamplingLimits.md +62 -0
  389. package/dist/docs/reference/model/GeometryToleranceOptions.md +46 -0
  390. package/dist/docs/reference/model/GridPatternOptions.md +43 -0
  391. package/dist/docs/reference/model/HeightfieldOptions.md +67 -0
  392. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +140 -0
  393. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +58 -0
  394. package/dist/docs/reference/model/HullOptions.md +72 -0
  395. package/dist/docs/reference/model/ImmutableBuffer-type.md +80 -0
  396. package/dist/docs/reference/model/ImmutableTriangleMesh.md +34 -0
  397. package/dist/docs/reference/model/ImplicitOptions.md +83 -0
  398. package/dist/docs/reference/model/InternalThreadCutterOptions.md +245 -0
  399. package/dist/docs/reference/model/LinearPatternOptions.md +31 -0
  400. package/dist/docs/reference/model/LoftCorrespondence.md +27 -0
  401. package/dist/docs/reference/model/LoftOptions.md +91 -0
  402. package/dist/docs/reference/model/LoftPlacement.md +73 -0
  403. package/dist/docs/reference/model/LoftStation.md +35 -0
  404. package/dist/docs/reference/model/MatchProfilesOptions.md +35 -0
  405. package/dist/docs/reference/model/ModelProgram.md +44 -0
  406. package/dist/docs/reference/model/ModelingLimits.md +126 -0
  407. package/dist/docs/reference/model/NumericArray.md +7 -0
  408. package/dist/docs/reference/model/PartGeometry.md +16 -0
  409. package/dist/docs/reference/model/PartOptions.md +65 -0
  410. package/dist/docs/reference/model/PathNormalGuide.md +45 -0
  411. package/dist/docs/reference/model/PathPatternOptions.md +47 -0
  412. package/dist/docs/reference/model/PatternSource.md +26 -0
  413. package/dist/docs/reference/model/PlaneOptions.md +39 -0
  414. package/dist/docs/reference/model/Polygon-type.md +43 -0
  415. package/dist/docs/reference/model/PolygonOptions.md +112 -0
  416. package/dist/docs/reference/model/PrimitivePlacement.md +40 -0
  417. package/dist/docs/reference/model/PrimitivePlacementOptions.md +88 -0
  418. package/dist/docs/reference/model/PrintableThreadFit.md +14 -0
  419. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +50 -0
  420. package/dist/docs/reference/model/Profile.md +22 -0
  421. package/dist/docs/reference/model/ProfileComponent2.md +46 -0
  422. package/dist/docs/reference/model/ProfileContour2.md +34 -0
  423. package/dist/docs/reference/model/ProfileSpan2.md +47 -0
  424. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +41 -0
  425. package/dist/docs/reference/model/RadialPatternOptions.md +63 -0
  426. package/dist/docs/reference/model/RadialSizing.md +15 -0
  427. package/dist/docs/reference/model/RadialSizingOptions.md +40 -0
  428. package/dist/docs/reference/model/RectangleContourOptions.md +72 -0
  429. package/dist/docs/reference/model/RectangleCornerTreatment.md +40 -0
  430. package/dist/docs/reference/model/RectangleCornerTreatments.md +20 -0
  431. package/dist/docs/reference/model/RectangleOptions.md +107 -0
  432. package/dist/docs/reference/model/Region.md +19 -0
  433. package/dist/docs/reference/model/RegionOffsetJoin.md +16 -0
  434. package/dist/docs/reference/model/RegionOffsetOptions.md +65 -0
  435. package/dist/docs/reference/model/RegularPolygonOptions.md +53 -0
  436. package/dist/docs/reference/model/RevolveOptions.md +89 -0
  437. package/dist/docs/reference/model/RoundedEdgeTreatment.md +96 -0
  438. package/dist/docs/reference/model/Section.md +450 -0
  439. package/dist/docs/reference/model/SectionHullOptions.md +72 -0
  440. package/dist/docs/reference/model/SectionInspection.md +98 -0
  441. package/dist/docs/reference/model/SmoothEdgeTreatment.md +76 -0
  442. package/dist/docs/reference/model/Solid.md +350 -0
  443. package/dist/docs/reference/model/SolidInspection.md +98 -0
  444. package/dist/docs/reference/model/SolidRayHit.md +58 -0
  445. package/dist/docs/reference/model/SphereOptions.md +20 -0
  446. package/dist/docs/reference/model/StarOptions.md +98 -0
  447. package/dist/docs/reference/model/SvgOrigin.md +16 -0
  448. package/dist/docs/reference/model/SvgPathSectionOptions.md +78 -0
  449. package/dist/docs/reference/model/SvgSectionOptions.md +66 -0
  450. package/dist/docs/reference/model/SweepOptions.md +116 -0
  451. package/dist/docs/reference/model/SweepOrientation.md +116 -0
  452. package/dist/docs/reference/model/TextSectionOptions.md +41 -0
  453. package/dist/docs/reference/model/ThreadEndStyle.md +14 -0
  454. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +117 -0
  455. package/dist/docs/reference/model/ThreadHandedness.md +14 -0
  456. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +14 -0
  457. package/dist/docs/reference/model/ThreadLeadInShape.md +14 -0
  458. package/dist/docs/reference/model/ThreadProfile.md +86 -0
  459. package/dist/docs/reference/model/ThreadRidgeOptions.md +18 -0
  460. package/dist/docs/reference/model/ThreadedNutBevel.md +14 -0
  461. package/dist/docs/reference/model/ThreadedNutOptions.md +273 -0
  462. package/dist/docs/reference/model/ThreadedNutPreflight.md +98 -0
  463. package/dist/docs/reference/model/ThreadedNutShape.md +14 -0
  464. package/dist/docs/reference/model/ThreadedRodOptions.md +245 -0
  465. package/dist/docs/reference/model/TorusOptions.md +110 -0
  466. package/dist/docs/reference/model/Transform2.md +15 -0
  467. package/dist/docs/reference/model/Transform3.md +18 -0
  468. package/dist/docs/reference/model/TriangleMesh.md +42 -0
  469. package/dist/docs/reference/model/TriangleMeshAnalysis.md +123 -0
  470. package/dist/docs/reference/model/TriangleMeshMeasurements.md +79 -0
  471. package/dist/docs/reference/model/TubeOptions.md +143 -0
  472. package/dist/docs/reference/model/Vector2.md +15 -0
  473. package/dist/docs/reference/model/Vector3.md +15 -0
  474. package/dist/docs/reference/model/VectorTextLayout.md +40 -0
  475. package/dist/docs/reference/model/VectorTextMetrics.md +100 -0
  476. package/dist/docs/reference/model/anchor.md +46 -0
  477. package/dist/docs/reference/model/box.md +62 -0
  478. package/dist/docs/reference/model/categories/boolean-operations.md +37 -0
  479. package/dist/docs/reference/model/categories/bounded-surfaces.md +26 -0
  480. package/dist/docs/reference/model/categories/contracts.md +16 -0
  481. package/dist/docs/reference/model/categories/core-values-errors.md +30 -0
  482. package/dist/docs/reference/model/categories/explicit-profiles.md +32 -0
  483. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +42 -0
  484. package/dist/docs/reference/model/categories/generation.md +44 -0
  485. package/dist/docs/reference/model/categories/inspection.md +23 -0
  486. package/dist/docs/reference/model/categories/mesh-inspection.md +29 -0
  487. package/dist/docs/reference/model/categories/primitives.md +61 -0
  488. package/dist/docs/reference/model/categories/resolution.md +18 -0
  489. package/dist/docs/reference/model/categories/sections.md +59 -0
  490. package/dist/docs/reference/model/categories/threads.md +50 -0
  491. package/dist/docs/reference/model/categories/transforms-placement.md +43 -0
  492. package/dist/docs/reference/model/circle.md +39 -0
  493. package/dist/docs/reference/model/components.md +68 -0
  494. package/dist/docs/reference/model/compose.md +31 -0
  495. package/dist/docs/reference/model/cylinder.md +52 -0
  496. package/dist/docs/reference/model/distance.md +45 -0
  497. package/dist/docs/reference/model/ellipse.md +39 -0
  498. package/dist/docs/reference/model/extrude.md +83 -0
  499. package/dist/docs/reference/model/fromRegion.md +33 -0
  500. package/dist/docs/reference/model/generate.md +46 -0
  501. package/dist/docs/reference/model/gridPattern.md +80 -0
  502. package/dist/docs/reference/model/heightfield.md +40 -0
  503. package/dist/docs/reference/model/hull.md +74 -0
  504. package/dist/docs/reference/model/immutableBuffer.md +44 -0
  505. package/dist/docs/reference/model/immutableMesh.md +40 -0
  506. package/dist/docs/reference/model/implicit.md +47 -0
  507. package/dist/docs/reference/model/inspectSection.md +38 -0
  508. package/dist/docs/reference/model/inspectSolid.md +38 -0
  509. package/dist/docs/reference/model/internalThreadCutter.md +100 -0
  510. package/dist/docs/reference/model/intersect.md +70 -0
  511. package/dist/docs/reference/model/isEmpty.md +39 -0
  512. package/dist/docs/reference/model/linearPattern.md +80 -0
  513. package/dist/docs/reference/model/loft.md +137 -0
  514. package/dist/docs/reference/model/matchProfiles.md +42 -0
  515. package/dist/docs/reference/model/minkowskiSum.md +37 -0
  516. package/dist/docs/reference/model/pathPattern.md +118 -0
  517. package/dist/docs/reference/model/polygon.md +40 -0
  518. package/dist/docs/reference/model/preflightInternalThreadCutter.md +89 -0
  519. package/dist/docs/reference/model/preflightThreadedNut.md +100 -0
  520. package/dist/docs/reference/model/preflightThreadedRod.md +89 -0
  521. package/dist/docs/reference/model/radialPattern.md +113 -0
  522. package/dist/docs/reference/model/rayCast.md +40 -0
  523. package/dist/docs/reference/model/rectangle.md +59 -0
  524. package/dist/docs/reference/model/regularPolygon.md +39 -0
  525. package/dist/docs/reference/model/revolve.md +74 -0
  526. package/dist/docs/reference/model/solidFromMesh.md +42 -0
  527. package/dist/docs/reference/model/sphere.md +42 -0
  528. package/dist/docs/reference/model/split.md +54 -0
  529. package/dist/docs/reference/model/splitByPlane.md +66 -0
  530. package/dist/docs/reference/model/star.md +63 -0
  531. package/dist/docs/reference/model/svgPathSection.md +65 -0
  532. package/dist/docs/reference/model/svgSection.md +64 -0
  533. package/dist/docs/reference/model/sweep.md +92 -0
  534. package/dist/docs/reference/model/textSection.md +57 -0
  535. package/dist/docs/reference/model/threadRidge.md +72 -0
  536. package/dist/docs/reference/model/threadedNut.md +110 -0
  537. package/dist/docs/reference/model/threadedRod.md +99 -0
  538. package/dist/docs/reference/model/toRegion.md +33 -0
  539. package/dist/docs/reference/model/toTriangleMesh.md +27 -0
  540. package/dist/docs/reference/model/torus.md +70 -0
  541. package/dist/docs/reference/model/tube.md +77 -0
  542. package/dist/docs/reference/model/union.md +72 -0
  543. package/dist/docs/reference/model.md +39 -0
  544. package/dist/docs/reference/text/Bounds2.md +34 -0
  545. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -0
  546. package/dist/docs/reference/text/Vector2.md +7 -0
  547. package/dist/docs/reference/text/VectorFont.md +186 -0
  548. package/dist/docs/reference/text/VectorFontOptions.md +17 -0
  549. package/dist/docs/reference/text/VectorTextArcBaseline.md +53 -0
  550. package/dist/docs/reference/text/VectorTextLayout.md +34 -0
  551. package/dist/docs/reference/text/VectorTextLayoutOptions.md +111 -0
  552. package/dist/docs/reference/text/VectorTextMetrics.md +94 -0
  553. package/dist/docs/reference/text/VectorTextOptions.md +50 -0
  554. package/dist/docs/reference/text/categories/font-preparation.md +38 -0
  555. package/dist/docs/reference/text/prepareVectorFont.md +46 -0
  556. package/dist/docs/reference/text.md +21 -0
  557. package/dist/engine/construction-operations.js +10 -3
  558. package/dist/engine/deferred-context.js +12 -3
  559. package/dist/engine/execution.js +1 -1
  560. package/dist/engine/export-3mf.js +2 -2
  561. package/dist/engine/finalization.js +3 -3
  562. package/dist/engine/immutable-generation-data.js +36 -6
  563. package/dist/engine/loft-operations.js +4 -4
  564. package/dist/engine/native/adapter.js +1 -1
  565. package/dist/engine/native/regions.js +9 -9
  566. package/dist/engine/pattern-operations.js +24 -13
  567. package/dist/engine/pattern-transform.js +9 -0
  568. package/dist/engine/placement.js +2 -2
  569. package/dist/engine/primitive-operations.js +10 -10
  570. package/dist/engine/profile-mesh.js +7 -7
  571. package/dist/engine/section-operations.js +25 -14
  572. package/dist/engine/session-graph.js +40 -33
  573. package/dist/engine/session.js +1 -2
  574. package/dist/geometry/bounds.js +117 -0
  575. package/dist/geometry/cylinder.js +5 -1
  576. package/dist/geometry/edge-finishing.js +2 -2
  577. package/dist/geometry/heightfield.js +1 -1
  578. package/dist/geometry/index.js +15 -12
  579. package/dist/geometry/{loft-correspondence.js → loft/loft-correspondence.js} +3 -3
  580. package/dist/geometry/{loft-geometry.js → loft/loft-geometry.js} +8 -8
  581. package/dist/geometry/{loft-options.js → loft/loft-options.js} +2 -2
  582. package/dist/geometry/{loft-simple-mesh.js → loft/loft-simple-mesh.js} +6 -6
  583. package/dist/geometry/{loft-triangulation.js → loft/loft-triangulation.js} +6 -6
  584. package/dist/geometry/{loft.js → loft/loft.js} +8 -8
  585. package/dist/geometry/math/vector3.js +5 -1
  586. package/dist/geometry/mechanical/gears.js +2 -2
  587. package/dist/geometry/mechanical/thread-mesh.js +3 -3
  588. package/dist/geometry/mechanical/thread-profiles.js +2 -2
  589. package/dist/geometry/mechanical/thread-surface.js +14 -5
  590. package/dist/geometry/{mesh-centroid.js → mesh/mesh-centroid.js} +1 -1
  591. package/dist/geometry/{mesh-planar.js → mesh/mesh-planar.js} +1 -1
  592. package/dist/geometry/{mesh-quality.js → mesh/mesh-quality.js} +2 -2
  593. package/dist/geometry/{mesh-signature.js → mesh/mesh-signature.js} +2 -2
  594. package/dist/geometry/{mesh-solid.js → mesh/mesh-solid.js} +2 -2
  595. package/dist/geometry/{mesh.js → mesh/mesh.js} +7 -8
  596. package/dist/geometry/paths/frames.js +4 -5
  597. package/dist/geometry/patterns/options.js +1 -0
  598. package/dist/{engine/pattern-placements.js → geometry/patterns/placements.js} +22 -8
  599. package/dist/geometry/patterns.js +25 -0
  600. package/dist/geometry/primitive-resolvers.js +9 -9
  601. package/dist/geometry/profiles/contour.js +3 -3
  602. package/dist/geometry/profiles/matched.js +3 -3
  603. package/dist/geometry/profiles/profiles.js +10 -10
  604. package/dist/geometry/profiles/rectangle.js +7 -7
  605. package/dist/geometry/profiles/shapes.js +9 -9
  606. package/dist/geometry/profiles/side-profile.js +37 -0
  607. package/dist/geometry/regions.js +15 -15
  608. package/dist/geometry/revolve/revolve-mesh.js +5 -5
  609. package/dist/geometry/stroke-path.js +2 -2
  610. package/dist/geometry/svg/errors.js +0 -3
  611. package/dist/geometry/svg/fill.js +7 -7
  612. package/dist/geometry/svg/index.js +1 -1
  613. package/dist/geometry/svg/matrix.js +0 -114
  614. package/dist/geometry/svg/parser.js +1 -439
  615. package/dist/geometry/svg-import.js +3 -3
  616. package/dist/geometry/sweeps/sweep-closed.js +1 -1
  617. package/dist/geometry/sweeps/sweep-mesh.js +1 -1
  618. package/dist/geometry/sweeps/sweep-open.js +3 -3
  619. package/dist/geometry/sweeps/validation.js +2 -2
  620. package/dist/geometry/text-fitting.js +85 -0
  621. package/dist/geometry/tolerance.js +2 -2
  622. package/dist/geometry/transform-geometry.js +9 -9
  623. package/dist/model/execution-binding.js +3 -3
  624. package/dist/model/generation.js +1 -1
  625. package/dist/model/operation-contracts.js +1 -0
  626. package/dist/model/operation-dispatch.js +6 -0
  627. package/dist/model/operations.js +19 -49
  628. package/package.json +10 -8
  629. /package/dist/geometry/{mesh-edge-table.js → mesh/mesh-edge-table.js} +0 -0
  630. /package/dist/geometry/{mesh-solid-intersections.js → mesh/mesh-solid-intersections.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: Vector2;
5
+ /** Inclusive minimum X/Y coordinates. */
6
+ readonly min: Vector2;
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 Vector2 = 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,197 @@
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
+ operations inside 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
+ Call root modeling operations inside synchronous generation. Add pure geometry helpers for custom
30
+ calculations.
31
+
32
+ ## Use Modeling outside Studio
33
+
34
+ Follow [Run Modeling in your application](hosting.md)
35
+ to initialize the engine, build a model, load WASM, and export its completed snapshot.
36
+ For lettering, [prepare exact font bytes](fonts.md) before building.
37
+
38
+ ## Geometry vocabulary
39
+
40
+ The public API names values by modeling role:
41
+
42
+ - A `Path3` is an ordered 3D trajectory.
43
+ - A `Path2` is an ordered 2D trajectory.
44
+ - 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
+ - A `Profile` specifies identified components, contours and spans for a related shape family.
48
+ - A `CorrespondingProfile` contains the shared sampled landmarks produced by `matchProfiles`.
49
+ - A `Section` is a filled 2D shape used for section Booleans, offsets, extrusion, revolution,
50
+ sweeps, and lofts.
51
+ - A `Solid` is a valid three-dimensional result that can participate in solid Booleans and become
52
+ model output.
53
+ - 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.
55
+ - `Bounds2` and `Bounds3` contain finite minimum and maximum tuples for measurements and placement.
56
+
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.
59
+
60
+ Ordinary models use root Sections for shapes, Booleans, extrusion, sweeps, and lofts. The pure
61
+ `/geometry` entry supplies point data through `circleContour`, `rectangleContour`, and other contour factories
62
+ when custom calculations or mesh construction need it. `rectangle`, `rectangleContour`, and
63
+ `rectangleProfile` share size, center, corner treatment, and sampling options; their result type
64
+ reflects the operation's role.
65
+
66
+ Use [`polygon(points)`](../reference/model/polygon.md) to fill one contour. The explicit
67
+ `polygon({ outer, holes })` form validates exterior/hole topology and normalizes winding.
68
+ `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.
71
+
72
+ `rectangleProfile({ size: [width, height], treatment: { kind: "round", radius }, id })` describes
73
+ identified spans for custom geometry. Prepare a complete explicit family with `matchProfiles`
74
+ when loft stations or a sweep need authored holes, seams, or landmarks beyond ordinary primitives.
75
+
76
+ Identified spans also accept cubic Béziers with the same endpoints and controls as
77
+ [`CubicBezierCurve2`](../reference/geometry/CubicBezierCurve2.md). Paired spans share one parameter
78
+ grid; physical sampling refines every member before choosing the family count. Collapsed spans
79
+ retain repeated logical slots, while the completed loft removes degenerate faces.
80
+
81
+ ## Choose a modeling path
82
+
83
+ | Starting intent | Typical operations |
84
+ | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
85
+ | A block, cylinder, sphere, or cone | Primitive solids, transforms, then [solid Booleans](fundamentals.md#choose-the-boolean-by-the-material-you-want) |
86
+ | A plate, gasket, logo, or profile | Build a `Section`, use section Booleans or offsets, then [extrude](recipes.md#section-hole-offset-and-extrusion) |
87
+ | A rotational part | [Revolve a closed radial profile](recipes.md#revolve-a-radial-profile) around +Z |
88
+ | A tube or routed shape | [Sweep one supported section](recipes.md#rotation-minimizing-path-sweep) along an open or closed path |
89
+ | A transition between profiles | [Loft corresponding boundaries](recipes.md#matched-section-loft) with holes |
90
+ | 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) |
91
+
92
+ Name meaningful intermediate values and choose a curve tolerance that preserves the required
93
+ shape. Many high-resolution Boolean operands increase generation time.
94
+
95
+ Primitive factories take one options object. For example, `rectangle({ size: [24, 16] })` creates a
96
+ filled Section and `box({ size: [24, 16, 6] })` creates a Solid. `union` and `intersect`
97
+ combine same-dimensional arrays. `shape.subtract(cutters)` accepts an array of same-dimensional
98
+ cutters. `section.offset(distance, options)` stays in the filled XY plane.
99
+
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
102
+ +Z. `loft` pairs retained landmarks in compatible primitive Sections, including zero and fully
103
+ rounded rectangle corners, and circle/ellipse stations transitioning to rectangles. This also works
104
+ after invertible XY transforms with consistent handedness. It accepts explicit corresponding
105
+ Profile stations for custom topology. Boolean Sections and point contours need a selected
106
+ `correspondence` method (`"direct"`, `"reindex"`, `"fast-distance"`, or `"distance"`) or explicit
107
+ profiles; Boolean contour order does not establish semantic correspondence.
108
+ `section.sweep(path, options)` supports open or closed paths,
109
+ degree twist, uniform/XY/per-station scales and an explicit compatible closed seam.
110
+
111
+ ## Coordinates, units, and resolution
112
+
113
+ MetaMesh uses a right-handed coordinate system with **+Z up**. Authored dimensions and curve
114
+ tolerances are millimetres; angular arguments such as `rotate` use degrees.
115
+
116
+ `GeometryResolution` controls sampled curves in physical space. The default maximum chord error is
117
+ `0.05 mm`, with 16–512 segments for a complete circle and no default maximum segment length. An
118
+ operation-specific `segments` or `circularSegments` value takes priority, followed by its local
119
+ `resolution`, and then host session defaults. A shape does not carry a sampling policy into later
120
+ operations; pass the policy explicitly where needed.
121
+
122
+ Use an exact segment count for intentionally faceted geometry or when two sampled contours must
123
+ match point for point. Use physical chord and segment limits for ordinary printable curves. If a
124
+ requested tolerance cannot fit within the safety cap, the operation fails instead of silently
125
+ returning a coarser shape.
126
+
127
+ `regularPolygon({ radius, sides, rotationDegrees, sizing })` makes a filled regular polygon.
128
+ `sizing: "vertex"` uses the specified vertex radius; `"face"` compensates faceting so the faces
129
+ meet the nominal radius. `circle` and `cylinder` support the same radial convention.
130
+
131
+ Finishing shares `round` (radius), `chamfer` (setbacks), `smooth` (cubic setbacks), and exact
132
+ `profile` points across applicable box edges, rectangle corners, and cylinder/extrusion ends.
133
+ Boxes can select disjoint named edges or groups; rectangles can select individual corners.
134
+ Cylinder/frustum and straight convex extrusion rims use independent `ends.bottom` and `ends.top`.
135
+ Zero rounding radius, zero chamfer/smooth distance, or an all-zero distance pair leaves the
136
+ selected feature untreated. Other setback pairs must have two positive values; negative and
137
+ nonfinite amounts reject. Disabled extrusion end treatments retain ordinary extrusion support,
138
+ including holes and twist.
139
+ `placement` maps a named or explicit shape-local anchor to a world anchor after local
140
+ construction, using alignment, millimetre gap and degree spin. Section placement must stay in XY.
141
+
142
+ ## SVG sections: fills and strokes are different inputs
143
+
144
+ [`svgSection`](../reference/model/svgSection.md) converts a bounded complete SVG document into one
145
+ painted `Section`. Supported visible **fills and bounded strokes both contribute geometry**. It
146
+ handles supported shapes, paths, affine transforms, physical root units, `viewBox` scaling, and
147
+ allowlisted inline fill and stroke presentation.
148
+
149
+ [`svgPathSection`](../reference/model/svgPathSection.md) accepts SVG path-data text rather than a
150
+ document. It is a **fill-only** path operation: stroke styling is not part of that contract. Path
151
+ units default to millimetres and can be converted with its scale option.
152
+
153
+ Both functions convert SVG's Y-down plane to MetaMesh's Y-up plane and center the final painted
154
+ bounds by default. Use `origin: "document"` with `svgSection` when the converted document viewport
155
+ origin must remain meaningful. Adaptive flattening happens after supported transforms and unit
156
+ conversion, so tolerances apply in final millimetre space.
157
+
158
+ Unsupported layout or external content fails rather than disappearing silently. The current public
159
+ contract does not include nested SVG viewports, `<use>`, images, live text, external stylesheets,
160
+ clipping, masks, filters, scripts, animation, gradients, patterns, uploaded project assets, or
161
+ custom font files. Use the [SVG extrusion recipe](recipes.md#svg-parameter-and-extrusion)
162
+ for a complete authored example.
163
+
164
+ ## Text and font variability
165
+
166
+ `services.text.layout()` shapes text inside generation. Cache an expensive shared layout with
167
+ `computed`, measure its `metrics`, and pass it to `textSection(layout())`. There is no
168
+ ambient font provider or repeated shaping during export. Declare a Text control for the wording
169
+ and a Font control for the face and weight.
170
+
171
+ 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
173
+ [text recipe](recipes.md#text-from-a-font-parameter) for the control setup,
174
+ layout conventions, and font availability limits.
175
+
176
+ ## Printable threads
177
+
178
+ The public API provides coordinated external threads, internal cutters, and threaded nuts. Reuse
179
+ one profile and fit policy across mating parts, then prove them with a short calibration print.
180
+
181
+ Follow [Build printable threads](https://metamesh.studio/docs/develop/printable-threads) for the illustrated workflow,
182
+ complete source, profile and fit choices, end treatments, and links into the exact API contracts.
183
+
184
+ ## Lifecycle and inspection
185
+
186
+ Studio or your standalone engine owns geometry initialization, cleanup, and mesh finalization.
187
+ The host owns Worker recovery, preview, and file delivery. Do not manually delete `Section` or `Solid`
188
+ values. Use
189
+ `inspectSection()` and `inspectSolid()` for supported bounds, topology counts, area, and volume
190
+ measurements.
191
+
192
+ An inspection result describes the generated geometry; it does not certify wall thickness,
193
+ overhangs, fits, loads, or manufacturability. Keep those product decisions in parameters,
194
+ validation, and your downstream manufacturing checks.
195
+
196
+ - [Use geometry recipes](recipes.md)
197
+ - [Browse exact signatures](../reference/model.md)
@@ -0,0 +1,51 @@
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
+ ## Prepare one reusable layout
22
+
23
+
24
+
25
+ ```ts
26
+ import { prepareVectorFont, type VectorTextLayout } from "@metamesh/modeling/text";
27
+
28
+ export async function makeLabelLayout(fontBytes: Uint8Array): Promise<{
29
+ readonly layout: VectorTextLayout;
30
+ readonly svg: string;
31
+ }> {
32
+ // Acquire licensed font bytes in your host before synchronous generation.
33
+ // Install fontkit; WOFF2 input also needs the optional woff2-encoder peer.
34
+ const font = await prepareVectorFont(fontBytes);
35
+ const layout = font.layout("MetaMesh", { fontSize: 8, letterSpacing: 0.15 });
36
+ const svg = font.toSvg("MetaMesh", { fontSize: 8, letterSpacing: 0.15 });
37
+ // Pass layout to textSection inside generation; its paths and metrics use Y-up millimetres.
38
+ return { layout, svg };
39
+ }
40
+ ```
41
+
42
+
43
+
44
+ Call `makeLabelLayout(fontBytes)` with the acquired bytes. It returns a `layout` and a separate
45
+ `svg` string. The layout contains paths and metrics in Y-up millimetres. Pass the returned `layout` to
46
+ [`textSection`](../reference/model/textSection.md) inside generation, then extrude its filled
47
+ section with the ordinary modeling operations. A host can prepare layouts ahead of time or inject
48
+ a deterministic text service and cache layouts with `computed`.
49
+
50
+ Use the [Font preparation reference](../reference/text.md) for font and layout options, or
51
+ [Run Modeling in your application](hosting.md) for the host lifecycle.
@@ -0,0 +1,135 @@
1
+ # Modeling fundamentals
2
+
3
+ Understand watertight solids, coordinates, transforms, Boolean operations, and geometry ownership in Studio code Projects.
4
+
5
+ [Manifold](https://manifoldcad.org/docs/jsapi/) is the solid-modeling kernel behind MetaMesh. Its
6
+ core idea is a **manifold** mesh: an oriented, watertight boundary in which every edge belongs to a
7
+ valid solid. That invariant makes Boolean operations and manufacturing output more dependable than
8
+ working with an arbitrary triangle soup.
9
+
10
+ Studio code Projects use Manifold through the curated `@metamesh/modeling` API. The public
11
+ contract combines constructors and collection functions with fluent, opaque `Section` and `Solid`
12
+ recipes. The engine owns the underlying kernel values.
13
+
14
+ ## Coordinates and units
15
+
16
+ MetaMesh uses a right-handed coordinate system with **+Z up**. Model dimensions are millimetres.
17
+ Place a part intentionally around the origin, then use transforms or anchors to relate it to other
18
+ parts.
19
+
20
+ Transform methods preserve the input and return immutable geometry recipes, so you can name
21
+ meaningful stages and reuse a source shape without tracking hidden state.
22
+
23
+ ## Build solids compositionally
24
+
25
+ Start with primitives, position them, and subtract a cutter that extends beyond both body faces:
26
+
27
+
28
+
29
+ ```ts
30
+ import { box, cylinder } from "@metamesh/modeling";
31
+ import { generate } from "@metamesh/project";
32
+
33
+ export default generate(({ part }) => {
34
+ const plate = box({ size: [80, 50, 4] });
35
+ // Primitives are centered by default, so both faces get 2 mm of overtravel.
36
+ // Overtravel is for robust subtraction; it does not enlarge the hole diameter.
37
+ const hole = cylinder({ height: 8, radius: 3 });
38
+ return [part("model", plate.subtract([hole]))];
39
+ });
40
+ ```
41
+
42
+ The cylinder clears both faces of the plate, leaving a through-hole without coincident cutter ends.
43
+
44
+
45
+
46
+ The plate is centered about the origin. Its `4 mm` thickness occupies `Z = −2…2 mm`; the cutter
47
+ occupies `Z = −4…4 mm`. That overtravel makes the subtraction deliberate while the hole radius
48
+ stays `3 mm`. Derive cutter placement from the same datum as the body when changing dimensions.
49
+
50
+ Prefer a small number of named intermediate solids. If many repeated cutters are independent, build
51
+ or arrange them first and perform one meaningful subtraction where the API allows it. Excessive
52
+ high-resolution Boolean steps cost time and obscure design intent.
53
+
54
+ The `union` and `intersect` functions and `shape.subtract(cutters)` also combine filled Sections
55
+ in XY. Choose one dimension for every operand in a call. Keep a Section native through its Boolean
56
+ and offset steps, then chain `.extrude({ height })` or `.revolve(options)` to make a Solid.
57
+ Transforms apply in written order about the origin: translating then rotating also rotates the
58
+ translated position. Place finished parts through `part` options when their geometry can be reused.
59
+
60
+ ## Choose the Boolean by the material you want
61
+
62
+ These three parts use the same overlapping block and cylindrical tool. Only the operation changes;
63
+ the final translations separate the results for comparison.
64
+
65
+
66
+
67
+ ```ts
68
+ import { box, cylinder, intersect, union } from "@metamesh/modeling";
69
+ import { generate } from "@metamesh/project";
70
+
71
+ export default generate(({ part }) => {
72
+ const block = box({ size: [24, 24, 8] });
73
+ const tool = cylinder({ diameter: 20, height: 12 }).translate([10, 0, 0]);
74
+ // Reuse the same overlapping operands to compare the three operations.
75
+ // Place finished parts separately so display spacing can reuse their geometry.
76
+ return [
77
+ part("union", { geometry: union([block, tool]), color: "#60a5fa" }),
78
+ part("difference", {
79
+ geometry: block.subtract([tool]),
80
+ position: [42, 0, 0],
81
+ color: "#f59e0b",
82
+ }),
83
+ part("intersection", {
84
+ geometry: intersect([block, tool]),
85
+ position: [84, 0, 0],
86
+ color: "#34d399",
87
+ }),
88
+ ];
89
+ });
90
+ ```
91
+
92
+ Left: all material from union. Center: block material outside the tool. Right: material shared by both operands.
93
+
94
+
95
+
96
+ | Operation | Material retained | Common use |
97
+ | -------------------------------------------------------- | ------------------------------------- | -------------------------------------------------------- |
98
+ | [`union`](../reference/model/union.md) | Inside any operand | Join an overlapping boss or rib to a body |
99
+ | [`shape.subtract`](../reference/model/Solid.md#subtract) | Inside the base, outside every cutter | Cut holes, pockets, and clearance envelopes |
100
+ | [`intersect`](../reference/model/intersect.md) | Inside every operand | Trim a feature to an envelope or isolate shared material |
101
+
102
+ Use intentional overlap for joined features and overtravel for through-cutters. A face or point
103
+ that only touches another feature is not a reliable connection for a manufacturing part. Inspect
104
+ the result when thin walls, tangencies, or disconnected components are possible.
105
+
106
+ ## Valid solid does not mean manufacturable part
107
+
108
+ The kernel can enforce solid topology, but it does not know your printer, material, load case,
109
+ tolerance stack, minimum wall, overhang strategy, or fit target. Encode supported input limits and
110
+ cross-field errors in the Project, then verify the exported file in its downstream tool.
111
+
112
+ Likewise, an empty or zero-volume result is invalid model output, but a non-empty result is not an
113
+ engineering certification.
114
+
115
+ ## Geometry ownership
116
+
117
+ Geometry values allocate resources outside ordinary JavaScript objects. Studio's evaluator owns
118
+ those resources for each run and cleans them up deterministically. Authored code should never
119
+ initialize the kernel or manually delete a `Section` or `Solid`.
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.
124
+
125
+
126
+
127
+ **Use the MetaMesh reference for authored code**
128
+
129
+ The upstream Manifold documentation is useful background on the underlying mathematics. Exact
130
+ code-Project symbols and guarantees come from the [Geometry API reference](../reference/model.md).
131
+
132
+
133
+
134
+ - [Try geometry recipes](recipes.md)
135
+ - [Read the Project contract](generation.md)