@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.
- package/CHANGELOG.md +40 -0
- package/README.md +103 -72
- package/dist/api/engine.d.ts +123 -97
- package/dist/api/geometry.d.ts +4232 -3307
- package/dist/api/index.d.ts +2758 -2268
- package/dist/api/text.d.ts +119 -107
- package/dist/docs/guides/concepts.md +300 -0
- package/dist/docs/guides/fonts.md +59 -0
- package/dist/docs/guides/fundamentals.md +137 -0
- package/dist/docs/guides/generation.md +223 -0
- package/dist/docs/guides/hosting.md +91 -0
- package/dist/docs/guides/recipes.md +718 -0
- package/dist/docs/manifest.json +10703 -0
- package/dist/docs/reference/engine/Export3mfOptions.md +29 -0
- package/dist/docs/reference/engine/ExportMeshPart.md +65 -0
- package/dist/docs/reference/engine/GenerationOptions.md +62 -0
- package/dist/docs/reference/engine/GeometryResource.md +77 -0
- package/dist/docs/reference/engine/ModelDependencies.md +41 -0
- package/dist/docs/reference/engine/ModelEngine.md +103 -0
- package/dist/docs/reference/engine/ModelEngineOptions.md +33 -0
- package/dist/docs/reference/engine/ModelSession.md +96 -0
- package/dist/docs/reference/engine/ModelSnapshot.md +173 -0
- package/dist/docs/reference/engine/SessionOptions.md +123 -0
- package/dist/docs/reference/engine/SnapshotPart.md +130 -0
- package/dist/docs/reference/engine/categories/host-lifecycle.md +37 -0
- package/dist/docs/reference/engine/createModelEngine.md +56 -0
- package/dist/docs/reference/engine/defaultModelingLimits.md +7 -0
- package/dist/docs/reference/engine/modelingWasmUrl.md +7 -0
- package/dist/docs/reference/engine/validateModel.md +48 -0
- package/dist/docs/reference/engine.md +25 -0
- package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +75 -0
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +92 -0
- package/dist/docs/reference/geometry/Anchor3.md +53 -0
- package/dist/docs/reference/geometry/ArcCurve2.md +70 -0
- package/dist/docs/reference/geometry/ArcCurve3.md +94 -0
- package/dist/docs/reference/geometry/AttachTransformOptions.md +62 -0
- package/dist/docs/reference/geometry/AxisAngleRotation3.md +66 -0
- package/dist/docs/reference/geometry/Bounds2.md +39 -0
- package/dist/docs/reference/geometry/Bounds3.md +39 -0
- package/dist/docs/reference/geometry/BoundsFit2.md +52 -0
- package/dist/docs/reference/geometry/BoundsFit3.md +52 -0
- package/dist/docs/reference/geometry/BoundsFitOptions.md +23 -0
- package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +23 -0
- package/dist/docs/reference/geometry/BoxAnchorFace.md +14 -0
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +63 -0
- package/dist/docs/reference/geometry/BoxEdge.md +7 -0
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +14 -0
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +15 -0
- package/dist/docs/reference/geometry/BoxOptions.md +87 -0
- package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +7 -0
- package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +93 -0
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +29 -0
- package/dist/docs/reference/geometry/CircleContourOptions.md +15 -0
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +59 -0
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +107 -0
- package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +41 -0
- package/dist/docs/reference/geometry/ClearanceHoleFit.md +7 -0
- package/dist/docs/reference/geometry/ClosestPointOnPathOptions.md +34 -0
- package/dist/docs/reference/geometry/ClosestPointOnPathResult.md +65 -0
- package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +53 -0
- package/dist/docs/reference/geometry/Contour.md +17 -0
- package/dist/docs/reference/geometry/ContourCurve.md +35 -0
- package/dist/docs/reference/geometry/ContourPoint.md +29 -0
- package/dist/docs/reference/geometry/ContourSegment.md +86 -0
- package/dist/docs/reference/geometry/CorrespondingComponent.md +46 -0
- package/dist/docs/reference/geometry/CorrespondingContour.md +46 -0
- package/dist/docs/reference/geometry/CorrespondingProfile.md +22 -0
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +27 -0
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +70 -0
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +70 -0
- package/dist/docs/reference/geometry/Curve2.md +16 -0
- package/dist/docs/reference/geometry/Curve3.md +16 -0
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +64 -0
- package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +73 -0
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +14 -0
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +87 -0
- package/dist/docs/reference/geometry/CylinderOptions.md +53 -0
- package/dist/docs/reference/geometry/CylindricalGearDimensions.md +209 -0
- package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +7 -0
- package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +71 -0
- package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +82 -0
- package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +34 -0
- package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +41 -0
- package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +47 -0
- package/dist/docs/reference/geometry/CylindricalGearSpec.md +82 -0
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -0
- package/dist/docs/reference/geometry/EdgeTreatment.md +17 -0
- package/dist/docs/reference/geometry/EllipseContourOptions.md +15 -0
- package/dist/docs/reference/geometry/EndTreatments.md +34 -0
- package/dist/docs/reference/geometry/ExtrudeOptions.md +134 -0
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +77 -0
- package/dist/docs/reference/geometry/FittedTextLayout.md +60 -0
- package/dist/docs/reference/geometry/Frame3.md +58 -0
- package/dist/docs/reference/geometry/GeometryError.md +97 -0
- package/dist/docs/reference/geometry/GeometryErrorCode.md +7 -0
- package/dist/docs/reference/geometry/GeometryErrorContext.md +29 -0
- package/dist/docs/reference/geometry/GeometryResolution.md +74 -0
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +62 -0
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +41 -0
- package/dist/docs/reference/geometry/GridPatternOptions.md +42 -0
- package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +14 -0
- package/dist/docs/reference/geometry/HeightfieldOptions.md +67 -0
- package/dist/docs/reference/geometry/HeightfieldPreflight.md +53 -0
- package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +141 -0
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +265 -0
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +53 -0
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +18 -0
- package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +242 -0
- package/dist/docs/reference/geometry/LineCurve2.md +46 -0
- package/dist/docs/reference/geometry/LineCurve3.md +46 -0
- package/dist/docs/reference/geometry/LinearPatternOptions.md +30 -0
- package/dist/docs/reference/geometry/LoftCorrespondence.md +19 -0
- package/dist/docs/reference/geometry/LoftMeshStation.md +27 -0
- package/dist/docs/reference/geometry/LoftOptions.md +84 -0
- package/dist/docs/reference/geometry/LoftPlacement.md +66 -0
- package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +18 -0
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +35 -0
- package/dist/docs/reference/geometry/MetricFastenerSize.md +7 -0
- package/dist/docs/reference/geometry/MetricFastenerStandard.md +72 -0
- package/dist/docs/reference/geometry/MetricHexNutDimensions.md +29 -0
- package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +41 -0
- package/dist/docs/reference/geometry/ModelingLimits.md +126 -0
- package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +17 -0
- package/dist/docs/reference/geometry/Path2.md +14 -0
- package/dist/docs/reference/geometry/Path3.md +14 -0
- package/dist/docs/reference/geometry/PathFrame.md +46 -0
- package/dist/docs/reference/geometry/PathNormalGuide.md +38 -0
- package/dist/docs/reference/geometry/PathPatternOptions.md +46 -0
- package/dist/docs/reference/geometry/PathPlacement.md +34 -0
- package/dist/docs/reference/geometry/Pivot2Options.md +26 -0
- package/dist/docs/reference/geometry/Pivot3Options.md +26 -0
- package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +7 -0
- package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +156 -0
- package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +120 -0
- package/dist/docs/reference/geometry/PlanarPatchQuality.md +190 -0
- package/dist/docs/reference/geometry/PolygonData.md +38 -0
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +92 -0
- package/dist/docs/reference/geometry/PrimitivePlacement.md +31 -0
- package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +83 -0
- package/dist/docs/reference/geometry/PrintableThreadFit.md +7 -0
- package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +45 -0
- package/dist/docs/reference/geometry/Profile.md +22 -0
- package/dist/docs/reference/geometry/ProfileComponent2.md +46 -0
- package/dist/docs/reference/geometry/ProfileContour2.md +34 -0
- package/dist/docs/reference/geometry/ProfileSpan2.md +47 -0
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +36 -0
- package/dist/docs/reference/geometry/RackPitchDimensions.md +113 -0
- package/dist/docs/reference/geometry/RackPitchSpec.md +77 -0
- package/dist/docs/reference/geometry/RadialPatternOptions.md +62 -0
- package/dist/docs/reference/geometry/RadialSizing.md +7 -0
- package/dist/docs/reference/geometry/RadialSizingOptions.md +40 -0
- package/dist/docs/reference/geometry/RectangleContourOptions.md +66 -0
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +34 -0
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +14 -0
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +94 -0
- package/dist/docs/reference/geometry/RegionData.md +14 -0
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +84 -0
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +65 -0
- package/dist/docs/reference/geometry/RevolveOptions.md +82 -0
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +91 -0
- package/dist/docs/reference/geometry/RowLayoutOptions.md +23 -0
- package/dist/docs/reference/geometry/SampleContourOptions.md +71 -0
- package/dist/docs/reference/geometry/SampleHelixOptions.md +95 -0
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +71 -0
- package/dist/docs/reference/geometry/SampledCurve2.md +34 -0
- package/dist/docs/reference/geometry/SampledCurve3.md +34 -0
- package/dist/docs/reference/geometry/SampledThreadHelices.md +58 -0
- package/dist/docs/reference/geometry/SideProfileCurve.md +35 -0
- package/dist/docs/reference/geometry/SideProfilePoint.md +29 -0
- package/dist/docs/reference/geometry/SideProfileSegment.md +86 -0
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +71 -0
- package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +34 -0
- package/dist/docs/reference/geometry/SphereOptions.md +15 -0
- package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +75 -0
- package/dist/docs/reference/geometry/StrokePathCap.md +7 -0
- package/dist/docs/reference/geometry/StrokePathJoin.md +7 -0
- package/dist/docs/reference/geometry/StrokePathRegionOptions.md +85 -0
- package/dist/docs/reference/geometry/SvgImportOptions.md +60 -0
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +61 -0
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +118 -0
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +65 -0
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +53 -0
- package/dist/docs/reference/geometry/SweepOptions.md +109 -0
- package/dist/docs/reference/geometry/SweepOrientation.md +109 -0
- package/dist/docs/reference/geometry/ThreadBevelOptions.md +53 -0
- package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +100 -0
- package/dist/docs/reference/geometry/ThreadCompensationOptions.md +73 -0
- package/dist/docs/reference/geometry/ThreadEndStyle.md +7 -0
- package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +113 -0
- package/dist/docs/reference/geometry/ThreadHandedness.md +7 -0
- package/dist/docs/reference/geometry/ThreadHelixOptions.md +120 -0
- package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +7 -0
- package/dist/docs/reference/geometry/ThreadLeadInShape.md +7 -0
- package/dist/docs/reference/geometry/ThreadProfile.md +82 -0
- package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +49 -0
- package/dist/docs/reference/geometry/ThreadProfileSpec.md +19 -0
- package/dist/docs/reference/geometry/ThreadRole.md +7 -0
- package/dist/docs/reference/geometry/ThreadedNutBevel.md +7 -0
- package/dist/docs/reference/geometry/ThreadedNutOptions.md +269 -0
- package/dist/docs/reference/geometry/ThreadedNutPreflight.md +94 -0
- package/dist/docs/reference/geometry/ThreadedNutShape.md +7 -0
- package/dist/docs/reference/geometry/ThreadedRodOptions.md +242 -0
- package/dist/docs/reference/geometry/TorusOptions.md +105 -0
- package/dist/docs/reference/geometry/Transform2-type.md +255 -0
- package/dist/docs/reference/geometry/Transform2Input.md +19 -0
- package/dist/docs/reference/geometry/Transform2Matrix.md +14 -0
- package/dist/docs/reference/geometry/Transform3-type.md +295 -0
- package/dist/docs/reference/geometry/Transform3Input.md +19 -0
- package/dist/docs/reference/geometry/Transform3Matrix.md +17 -0
- package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +91 -0
- package/dist/docs/reference/geometry/TriangleMesh.md +34 -0
- package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +119 -0
- package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +75 -0
- package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +75 -0
- package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +39 -0
- package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +190 -0
- package/dist/docs/reference/geometry/TriangleMeshSignature.md +107 -0
- package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +41 -0
- package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +29 -0
- package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +51 -0
- package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +91 -0
- package/dist/docs/reference/geometry/TubeOptions.md +138 -0
- package/dist/docs/reference/geometry/Vector2-type.md +269 -0
- package/dist/docs/reference/geometry/Vector2Input.md +19 -0
- package/dist/docs/reference/geometry/Vector2Tuple.md +14 -0
- package/dist/docs/reference/geometry/Vector3-type.md +281 -0
- package/dist/docs/reference/geometry/Vector3Input.md +19 -0
- package/dist/docs/reference/geometry/Vector3Tuple.md +14 -0
- package/dist/docs/reference/geometry/VectorTextArcBaseline.md +53 -0
- package/dist/docs/reference/geometry/VectorTextLayout.md +39 -0
- package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +111 -0
- package/dist/docs/reference/geometry/VectorTextMetrics.md +94 -0
- package/dist/docs/reference/geometry/VectorTextOptions.md +50 -0
- package/dist/docs/reference/geometry/add2.md +36 -0
- package/dist/docs/reference/geometry/add3.md +42 -0
- package/dist/docs/reference/geometry/analyzeTriangleMesh.md +57 -0
- package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +52 -0
- package/dist/docs/reference/geometry/anchorFrame3.md +40 -0
- package/dist/docs/reference/geometry/applyTransformDirection3.md +45 -0
- package/dist/docs/reference/geometry/applyTransformPoint3.md +43 -0
- package/dist/docs/reference/geometry/attachTransform.md +77 -0
- package/dist/docs/reference/geometry/boundsCenter.md +62 -0
- package/dist/docs/reference/geometry/boundsFromSize.md +83 -0
- package/dist/docs/reference/geometry/boundsSize.md +62 -0
- package/dist/docs/reference/geometry/boxAnchor3.md +52 -0
- package/dist/docs/reference/geometry/buildHelicalThreadRidgeMesh.md +68 -0
- package/dist/docs/reference/geometry/buildHelicalThreadSolidMesh.md +102 -0
- package/dist/docs/reference/geometry/categories/bounds-layout.md +35 -0
- package/dist/docs/reference/geometry/categories/curves-paths.md +66 -0
- package/dist/docs/reference/geometry/categories/mechanical.md +101 -0
- package/dist/docs/reference/geometry/categories/meshes.md +73 -0
- package/dist/docs/reference/geometry/categories/pattern-placement.md +34 -0
- package/dist/docs/reference/geometry/categories/primitive-options.md +36 -0
- package/dist/docs/reference/geometry/categories/profiles-regions.md +74 -0
- package/dist/docs/reference/geometry/categories/resolution-errors.md +47 -0
- package/dist/docs/reference/geometry/categories/transforms-math.md +92 -0
- package/dist/docs/reference/geometry/categories/vector-import.md +40 -0
- package/dist/docs/reference/geometry/circleContour.md +33 -0
- package/dist/docs/reference/geometry/closeToAxis.md +34 -0
- package/dist/docs/reference/geometry/closestPointOnPath.md +110 -0
- package/dist/docs/reference/geometry/compensateThreadDiameters.md +51 -0
- package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +42 -0
- package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +56 -0
- package/dist/docs/reference/geometry/composeTransform3.md +44 -0
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +45 -0
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +47 -0
- package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +31 -0
- package/dist/docs/reference/geometry/containsBounds.md +72 -0
- package/dist/docs/reference/geometry/contourContainsPoint.md +33 -0
- package/dist/docs/reference/geometry/createAnchor3.md +67 -0
- package/dist/docs/reference/geometry/createThreadProfile.md +37 -0
- package/dist/docs/reference/geometry/createTriangleMeshSignature.md +60 -0
- package/dist/docs/reference/geometry/cross2.md +36 -0
- package/dist/docs/reference/geometry/cross3.md +42 -0
- package/dist/docs/reference/geometry/cumulativePathLengths.md +33 -0
- package/dist/docs/reference/geometry/cylinderAnchor3.md +60 -0
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +14 -0
- package/dist/docs/reference/geometry/distance2.md +36 -0
- package/dist/docs/reference/geometry/distance3.md +36 -0
- package/dist/docs/reference/geometry/distributeAlongPath.md +51 -0
- package/dist/docs/reference/geometry/dot2.md +36 -0
- package/dist/docs/reference/geometry/dot3.md +42 -0
- package/dist/docs/reference/geometry/ellipseContour.md +33 -0
- package/dist/docs/reference/geometry/eulerTransform3.md +42 -0
- package/dist/docs/reference/geometry/extrudeMesh.md +73 -0
- package/dist/docs/reference/geometry/fitBounds.md +95 -0
- package/dist/docs/reference/geometry/fitTextLayout.md +57 -0
- package/dist/docs/reference/geometry/frameTransform3.md +48 -0
- package/dist/docs/reference/geometry/getMetricClearanceHole.md +33 -0
- package/dist/docs/reference/geometry/getMetricFastenerStandard.md +27 -0
- package/dist/docs/reference/geometry/gridPatternTransforms.md +31 -0
- package/dist/docs/reference/geometry/heightfieldMesh.md +43 -0
- package/dist/docs/reference/geometry/inverseTransform3.md +34 -0
- package/dist/docs/reference/geometry/isGeometryError.md +26 -0
- package/dist/docs/reference/geometry/joinTriangleMeshes.md +36 -0
- package/dist/docs/reference/geometry/layoutRow.md +43 -0
- package/dist/docs/reference/geometry/length2.md +30 -0
- package/dist/docs/reference/geometry/length3.md +30 -0
- package/dist/docs/reference/geometry/lerp2.md +42 -0
- package/dist/docs/reference/geometry/lerp3.md +42 -0
- package/dist/docs/reference/geometry/linearPatternTransforms.md +31 -0
- package/dist/docs/reference/geometry/loftMesh.md +72 -0
- package/dist/docs/reference/geometry/matchProfiles.md +51 -0
- package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +48 -0
- package/dist/docs/reference/geometry/measureTriangleMesh.md +55 -0
- package/dist/docs/reference/geometry/meshBounds.md +35 -0
- package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +29 -0
- package/dist/docs/reference/geometry/normalize2.md +36 -0
- package/dist/docs/reference/geometry/normalize3.md +36 -0
- package/dist/docs/reference/geometry/normalizeContour.md +45 -0
- package/dist/docs/reference/geometry/normalizePolygon.md +37 -0
- package/dist/docs/reference/geometry/normalizeRegion.md +33 -0
- package/dist/docs/reference/geometry/optimizePlanarPatches.md +91 -0
- package/dist/docs/reference/geometry/pathLength.md +33 -0
- package/dist/docs/reference/geometry/pathPatternTransforms.md +57 -0
- package/dist/docs/reference/geometry/preflightHeightfield.md +34 -0
- package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +96 -0
- package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +85 -0
- package/dist/docs/reference/geometry/preflightSvgRegion.md +56 -0
- package/dist/docs/reference/geometry/preflightThreadedNut.md +96 -0
- package/dist/docs/reference/geometry/preflightThreadedRod.md +85 -0
- package/dist/docs/reference/geometry/projectOntoPlane3.md +36 -0
- package/dist/docs/reference/geometry/radialPatternTransforms.md +47 -0
- package/dist/docs/reference/geometry/rectangleContour.md +49 -0
- package/dist/docs/reference/geometry/rectangleProfile.md +53 -0
- package/dist/docs/reference/geometry/regionArea.md +34 -0
- package/dist/docs/reference/geometry/regionBounds.md +27 -0
- package/dist/docs/reference/geometry/regularPolygonContour.md +53 -0
- package/dist/docs/reference/geometry/resamplePolyline2.md +64 -0
- package/dist/docs/reference/geometry/resamplePolyline3.md +67 -0
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +83 -0
- package/dist/docs/reference/geometry/resolveArcSegments.md +67 -0
- package/dist/docs/reference/geometry/resolveCircularSegments.md +62 -0
- package/dist/docs/reference/geometry/resolveCylindricalGear.md +31 -0
- package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +31 -0
- package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +74 -0
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +26 -0
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +59 -0
- package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +27 -0
- package/dist/docs/reference/geometry/resolveRackPitch.md +27 -0
- package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +59 -0
- package/dist/docs/reference/geometry/reverseTriangleMesh.md +30 -0
- package/dist/docs/reference/geometry/revolveMesh.md +76 -0
- package/dist/docs/reference/geometry/rotate2.md +36 -0
- package/dist/docs/reference/geometry/rotationTransform3.md +53 -0
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +50 -0
- package/dist/docs/reference/geometry/sampleContour.md +77 -0
- package/dist/docs/reference/geometry/sampleCurve2.md +61 -0
- package/dist/docs/reference/geometry/sampleCurve3.md +61 -0
- package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +58 -0
- package/dist/docs/reference/geometry/sampleHelix.md +41 -0
- package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +59 -0
- package/dist/docs/reference/geometry/sampleRackToothPath.md +39 -0
- package/dist/docs/reference/geometry/sampleSideProfile.md +73 -0
- package/dist/docs/reference/geometry/sampleTextContours.md +53 -0
- package/dist/docs/reference/geometry/sampleThreadHelices.md +63 -0
- package/dist/docs/reference/geometry/scale2.md +36 -0
- package/dist/docs/reference/geometry/scale3.md +42 -0
- package/dist/docs/reference/geometry/scaleTransform3.md +38 -0
- package/dist/docs/reference/geometry/signedContourArea.md +26 -0
- package/dist/docs/reference/geometry/starContour.md +51 -0
- package/dist/docs/reference/geometry/strokePathRegion.md +63 -0
- package/dist/docs/reference/geometry/subtract2.md +36 -0
- package/dist/docs/reference/geometry/subtract3.md +42 -0
- package/dist/docs/reference/geometry/sweepMesh.md +82 -0
- package/dist/docs/reference/geometry/transform2.md +38 -0
- package/dist/docs/reference/geometry/transform3.md +38 -0
- package/dist/docs/reference/geometry/transformContour.md +42 -0
- package/dist/docs/reference/geometry/transformDeterminant3.md +36 -0
- package/dist/docs/reference/geometry/transformPath2.md +40 -0
- package/dist/docs/reference/geometry/transformPath3.md +33 -0
- package/dist/docs/reference/geometry/transformRegionData.md +40 -0
- package/dist/docs/reference/geometry/transformTriangleMesh.md +42 -0
- package/dist/docs/reference/geometry/translationTransform3.md +35 -0
- package/dist/docs/reference/geometry/triangulateContour.md +26 -0
- package/dist/docs/reference/geometry/validateSolidMesh.md +52 -0
- package/dist/docs/reference/geometry/validateTransform3.md +47 -0
- package/dist/docs/reference/geometry/validateTriangleMesh.md +59 -0
- package/dist/docs/reference/geometry/vector2.md +31 -0
- package/dist/docs/reference/geometry/vector3.md +38 -0
- package/dist/docs/reference/geometry.md +30 -0
- package/dist/docs/reference/model/Anchor3.md +54 -0
- package/dist/docs/reference/model/AttachOptions.md +63 -0
- package/dist/docs/reference/model/Bounds2.md +39 -0
- package/dist/docs/reference/model/Bounds3.md +39 -0
- package/dist/docs/reference/model/BoxEdge.md +15 -0
- package/dist/docs/reference/model/BoxEdgeSelection.md +19 -0
- package/dist/docs/reference/model/BoxEdgeTreatments.md +20 -0
- package/dist/docs/reference/model/BoxOptions.md +92 -0
- package/dist/docs/reference/model/ChamferedEdgeTreatment.md +35 -0
- package/dist/docs/reference/model/CircleContourOptions.md +21 -0
- package/dist/docs/reference/model/CircleOptions.md +21 -0
- package/dist/docs/reference/model/CircularPrimitiveOptions.md +64 -0
- package/dist/docs/reference/model/Computed.md +35 -0
- package/dist/docs/reference/model/ComputedValue.md +20 -0
- package/dist/docs/reference/model/Contour.md +22 -0
- package/dist/docs/reference/model/CorrespondingComponent.md +46 -0
- package/dist/docs/reference/model/CorrespondingContour.md +46 -0
- package/dist/docs/reference/model/CorrespondingProfile.md +22 -0
- package/dist/docs/reference/model/CorrespondingProfileStation.md +27 -0
- package/dist/docs/reference/model/CylinderOptions.md +58 -0
- package/dist/docs/reference/model/DiagnosticOptions.md +23 -0
- package/dist/docs/reference/model/EdgeTreatment.md +22 -0
- package/dist/docs/reference/model/EllipseContourOptions.md +21 -0
- package/dist/docs/reference/model/EllipseOptions.md +21 -0
- package/dist/docs/reference/model/EndTreatments.md +39 -0
- package/dist/docs/reference/model/ExtrudeOptions.md +140 -0
- package/dist/docs/reference/model/FinalizedModel.md +121 -0
- package/dist/docs/reference/model/FinalizedPart.md +87 -0
- package/dist/docs/reference/model/Frame3.md +63 -0
- package/dist/docs/reference/model/GenerateCallback.md +37 -0
- package/dist/docs/reference/model/GenerateContext.md +277 -0
- package/dist/docs/reference/model/GeneratedPart.md +93 -0
- package/dist/docs/reference/model/GenerationDiagnostic.md +41 -0
- package/dist/docs/reference/model/GenerationError.md +54 -0
- package/dist/docs/reference/model/GeometryResolution.md +70 -0
- package/dist/docs/reference/model/GeometrySamplingLimits.md +62 -0
- package/dist/docs/reference/model/GeometryToleranceOptions.md +46 -0
- package/dist/docs/reference/model/GridPatternOptions.md +43 -0
- package/dist/docs/reference/model/HeightfieldOptions.md +67 -0
- package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +140 -0
- package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +58 -0
- package/dist/docs/reference/model/HullOptions.md +72 -0
- package/dist/docs/reference/model/ImmutableBuffer-type.md +80 -0
- package/dist/docs/reference/model/ImmutableTriangleMesh.md +34 -0
- package/dist/docs/reference/model/ImplicitOptions.md +83 -0
- package/dist/docs/reference/model/InternalThreadCutterOptions.md +245 -0
- package/dist/docs/reference/model/LinearPatternOptions.md +31 -0
- package/dist/docs/reference/model/LoftCorrespondence.md +27 -0
- package/dist/docs/reference/model/LoftOptions.md +91 -0
- package/dist/docs/reference/model/LoftPlacement.md +73 -0
- package/dist/docs/reference/model/LoftStation.md +35 -0
- package/dist/docs/reference/model/MatchProfilesOptions.md +35 -0
- package/dist/docs/reference/model/ModelProgram.md +44 -0
- package/dist/docs/reference/model/ModelingLimits.md +126 -0
- package/dist/docs/reference/model/NumericArray.md +7 -0
- package/dist/docs/reference/model/PartGeometry.md +16 -0
- package/dist/docs/reference/model/PartOptions.md +65 -0
- package/dist/docs/reference/model/Path2.md +20 -0
- package/dist/docs/reference/model/PathNormalGuide.md +45 -0
- package/dist/docs/reference/model/PathPatternOptions.md +47 -0
- package/dist/docs/reference/model/PatternSource.md +26 -0
- package/dist/docs/reference/model/Pivot2Options.md +27 -0
- package/dist/docs/reference/model/Pivot3Options.md +27 -0
- package/dist/docs/reference/model/PlaneOptions.md +39 -0
- package/dist/docs/reference/model/PolygonData.md +43 -0
- package/dist/docs/reference/model/PolygonOptions.md +189 -0
- package/dist/docs/reference/model/PrimitivePlacement.md +40 -0
- package/dist/docs/reference/model/PrimitivePlacementOptions.md +88 -0
- package/dist/docs/reference/model/PrintableThreadFit.md +14 -0
- package/dist/docs/reference/model/PrintableThreadFitPolicy.md +50 -0
- package/dist/docs/reference/model/Profile.md +22 -0
- package/dist/docs/reference/model/ProfileComponent2.md +46 -0
- package/dist/docs/reference/model/ProfileContour2.md +34 -0
- package/dist/docs/reference/model/ProfileSpan2.md +47 -0
- package/dist/docs/reference/model/ProfiledEdgeTreatment.md +41 -0
- package/dist/docs/reference/model/RadialPatternOptions.md +63 -0
- package/dist/docs/reference/model/RadialSizing.md +15 -0
- package/dist/docs/reference/model/RadialSizingOptions.md +40 -0
- package/dist/docs/reference/model/RectangleContourOptions.md +72 -0
- package/dist/docs/reference/model/RectangleCornerTreatment.md +40 -0
- package/dist/docs/reference/model/RectangleCornerTreatments.md +20 -0
- package/dist/docs/reference/model/RectangleOptions.md +107 -0
- package/dist/docs/reference/model/RegionData.md +19 -0
- package/dist/docs/reference/model/RegularPolygonOptions.md +53 -0
- package/dist/docs/reference/model/RevolveOptions.md +89 -0
- package/dist/docs/reference/model/RoundedEdgeTreatment.md +96 -0
- package/dist/docs/reference/model/Section.md +490 -0
- package/dist/docs/reference/model/SectionHullOptions.md +72 -0
- package/dist/docs/reference/model/SectionInspection.md +98 -0
- package/dist/docs/reference/model/SectionOffsetJoin.md +16 -0
- package/dist/docs/reference/model/SectionOffsetOptions.md +65 -0
- package/dist/docs/reference/model/SmoothEdgeTreatment.md +76 -0
- package/dist/docs/reference/model/Solid.md +373 -0
- package/dist/docs/reference/model/SolidInspection.md +98 -0
- package/dist/docs/reference/model/SolidRayHit.md +58 -0
- package/dist/docs/reference/model/SphereOptions.md +20 -0
- package/dist/docs/reference/model/StarOptions.md +98 -0
- package/dist/docs/reference/model/StrokeOptions.md +91 -0
- package/dist/docs/reference/model/StrokePathCap.md +16 -0
- package/dist/docs/reference/model/StrokePathJoin.md +16 -0
- package/dist/docs/reference/model/SvgOrigin.md +16 -0
- package/dist/docs/reference/model/SvgPathSectionOptions.md +78 -0
- package/dist/docs/reference/model/SvgSectionOptions.md +66 -0
- package/dist/docs/reference/model/SweepOptions.md +116 -0
- package/dist/docs/reference/model/SweepOrientation.md +116 -0
- package/dist/docs/reference/model/TextSectionOptions.md +41 -0
- package/dist/docs/reference/model/ThreadEndStyle.md +14 -0
- package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +117 -0
- package/dist/docs/reference/model/ThreadHandedness.md +14 -0
- package/dist/docs/reference/model/ThreadLeadInEnvelope.md +14 -0
- package/dist/docs/reference/model/ThreadLeadInShape.md +14 -0
- package/dist/docs/reference/model/ThreadProfile.md +86 -0
- package/dist/docs/reference/model/ThreadRidgeOptions.md +18 -0
- package/dist/docs/reference/model/ThreadedNutBevel.md +14 -0
- package/dist/docs/reference/model/ThreadedNutOptions.md +273 -0
- package/dist/docs/reference/model/ThreadedNutPreflight.md +98 -0
- package/dist/docs/reference/model/ThreadedNutShape.md +14 -0
- package/dist/docs/reference/model/ThreadedRodOptions.md +245 -0
- package/dist/docs/reference/model/TorusOptions.md +110 -0
- package/dist/docs/reference/model/Transform2-type.md +256 -0
- package/dist/docs/reference/model/Transform2Input.md +20 -0
- package/dist/docs/reference/model/Transform2Matrix.md +15 -0
- package/dist/docs/reference/model/Transform3-type.md +296 -0
- package/dist/docs/reference/model/Transform3Input.md +20 -0
- package/dist/docs/reference/model/Transform3Matrix.md +18 -0
- package/dist/docs/reference/model/TriangleMesh.md +42 -0
- package/dist/docs/reference/model/TriangleMeshAnalysis.md +123 -0
- package/dist/docs/reference/model/TriangleMeshMeasurements.md +79 -0
- package/dist/docs/reference/model/TubeOptions.md +143 -0
- package/dist/docs/reference/model/Vector2-type.md +270 -0
- package/dist/docs/reference/model/Vector2Input.md +20 -0
- package/dist/docs/reference/model/Vector2Tuple.md +15 -0
- package/dist/docs/reference/model/Vector3-type.md +282 -0
- package/dist/docs/reference/model/Vector3Input.md +20 -0
- package/dist/docs/reference/model/Vector3Tuple.md +15 -0
- package/dist/docs/reference/model/VectorTextLayout.md +40 -0
- package/dist/docs/reference/model/VectorTextMetrics.md +100 -0
- package/dist/docs/reference/model/anchor.md +46 -0
- package/dist/docs/reference/model/box.md +62 -0
- package/dist/docs/reference/model/categories/boolean-operations.md +37 -0
- package/dist/docs/reference/model/categories/bounded-surfaces.md +26 -0
- package/dist/docs/reference/model/categories/contracts.md +16 -0
- package/dist/docs/reference/model/categories/core-values-errors.md +30 -0
- package/dist/docs/reference/model/categories/explicit-profiles.md +32 -0
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +42 -0
- package/dist/docs/reference/model/categories/generation.md +44 -0
- package/dist/docs/reference/model/categories/inspection.md +23 -0
- package/dist/docs/reference/model/categories/mesh-inspection.md +29 -0
- package/dist/docs/reference/model/categories/primitives.md +61 -0
- package/dist/docs/reference/model/categories/resolution.md +18 -0
- package/dist/docs/reference/model/categories/sections.md +62 -0
- package/dist/docs/reference/model/categories/threads.md +50 -0
- package/dist/docs/reference/model/categories/transforms-placement.md +57 -0
- package/dist/docs/reference/model/circle.md +39 -0
- package/dist/docs/reference/model/components.md +71 -0
- package/dist/docs/reference/model/compose.md +31 -0
- package/dist/docs/reference/model/cylinder.md +52 -0
- package/dist/docs/reference/model/distance.md +45 -0
- package/dist/docs/reference/model/ellipse.md +39 -0
- package/dist/docs/reference/model/extrude.md +83 -0
- package/dist/docs/reference/model/generate.md +46 -0
- package/dist/docs/reference/model/gridPattern.md +80 -0
- package/dist/docs/reference/model/heightfield.md +40 -0
- package/dist/docs/reference/model/hull.md +74 -0
- package/dist/docs/reference/model/immutableBuffer.md +44 -0
- package/dist/docs/reference/model/immutableMesh.md +40 -0
- package/dist/docs/reference/model/implicit.md +47 -0
- package/dist/docs/reference/model/inspectSection.md +38 -0
- package/dist/docs/reference/model/inspectSolid.md +38 -0
- package/dist/docs/reference/model/internalThreadCutter.md +100 -0
- package/dist/docs/reference/model/intersect.md +70 -0
- package/dist/docs/reference/model/isEmpty.md +39 -0
- package/dist/docs/reference/model/linearPattern.md +80 -0
- package/dist/docs/reference/model/loft.md +137 -0
- package/dist/docs/reference/model/matchProfiles.md +42 -0
- package/dist/docs/reference/model/minkowskiSum.md +37 -0
- package/dist/docs/reference/model/pathPattern.md +118 -0
- package/dist/docs/reference/model/polygon.md +40 -0
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +89 -0
- package/dist/docs/reference/model/preflightThreadedNut.md +100 -0
- package/dist/docs/reference/model/preflightThreadedRod.md +89 -0
- package/dist/docs/reference/model/radialPattern.md +113 -0
- package/dist/docs/reference/model/rayCast.md +40 -0
- package/dist/docs/reference/model/rectangle.md +59 -0
- package/dist/docs/reference/model/regularPolygon.md +39 -0
- package/dist/docs/reference/model/revolve.md +74 -0
- package/dist/docs/reference/model/solidFromMesh.md +42 -0
- package/dist/docs/reference/model/sphere.md +42 -0
- package/dist/docs/reference/model/split.md +54 -0
- package/dist/docs/reference/model/splitByPlane.md +66 -0
- package/dist/docs/reference/model/star.md +63 -0
- package/dist/docs/reference/model/stroke.md +74 -0
- package/dist/docs/reference/model/svgPathSection.md +65 -0
- package/dist/docs/reference/model/svgSection.md +64 -0
- package/dist/docs/reference/model/sweep.md +92 -0
- package/dist/docs/reference/model/textSection.md +57 -0
- package/dist/docs/reference/model/threadRidge.md +72 -0
- package/dist/docs/reference/model/threadedNut.md +110 -0
- package/dist/docs/reference/model/threadedRod.md +99 -0
- package/dist/docs/reference/model/toTriangleMesh.md +27 -0
- package/dist/docs/reference/model/torus.md +70 -0
- package/dist/docs/reference/model/transform2.md +39 -0
- package/dist/docs/reference/model/transform3.md +39 -0
- package/dist/docs/reference/model/tube.md +77 -0
- package/dist/docs/reference/model/union.md +72 -0
- package/dist/docs/reference/model/vector2.md +32 -0
- package/dist/docs/reference/model/vector3.md +39 -0
- package/dist/docs/reference/model.md +39 -0
- package/dist/docs/reference/text/Bounds2.md +34 -0
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -0
- package/dist/docs/reference/text/Vector2Tuple.md +7 -0
- package/dist/docs/reference/text/VectorFont.md +186 -0
- package/dist/docs/reference/text/VectorFontOptions.md +17 -0
- package/dist/docs/reference/text/VectorTextArcBaseline.md +53 -0
- package/dist/docs/reference/text/VectorTextLayout.md +34 -0
- package/dist/docs/reference/text/VectorTextLayoutOptions.md +111 -0
- package/dist/docs/reference/text/VectorTextMetrics.md +94 -0
- package/dist/docs/reference/text/VectorTextOptions.md +50 -0
- package/dist/docs/reference/text/categories/font-preparation.md +38 -0
- package/dist/docs/reference/text/prepareVectorFont.md +46 -0
- package/dist/docs/reference/text.md +21 -0
- package/dist/engine/construction-operations.js +10 -3
- package/dist/engine/deferred-context.js +11 -172
- package/dist/engine/execution.js +1 -1
- package/dist/engine/export-3mf.js +2 -2
- package/dist/engine/finalization.js +3 -3
- package/dist/engine/loft-operations.js +4 -4
- package/dist/engine/native/adapter.js +1 -1
- package/dist/engine/native/regions.js +9 -9
- package/dist/engine/native/transforms.js +6 -1
- package/dist/engine/pattern-operations.js +24 -13
- package/dist/engine/placement.js +2 -2
- package/dist/engine/primitive-operations.js +10 -10
- package/dist/engine/primitive-profiles.js +1 -0
- package/dist/engine/profile-mesh.js +7 -7
- package/dist/engine/recipe-realization.js +29 -21
- package/dist/engine/section-operations.js +44 -17
- package/dist/engine/session-graph.js +6 -4
- package/dist/engine/session-native.js +1 -1
- package/dist/engine/session-snapshot.js +3 -2
- package/dist/engine/session.js +4 -5
- package/dist/engine/shape-anchors.js +3 -9
- package/dist/engine/transform-operations.js +42 -25
- package/dist/geometry/bounds.js +117 -0
- package/dist/geometry/cylinder.js +5 -1
- package/dist/geometry/edge-finishing.js +2 -2
- package/dist/geometry/heightfield.js +1 -1
- package/dist/geometry/index.js +20 -13
- package/dist/geometry/{loft-correspondence.js → loft/loft-correspondence.js} +3 -3
- package/dist/geometry/{loft-geometry.js → loft/loft-geometry.js} +8 -8
- package/dist/geometry/{loft-options.js → loft/loft-options.js} +2 -2
- package/dist/geometry/{loft-simple-mesh.js → loft/loft-simple-mesh.js} +6 -6
- package/dist/geometry/{loft-triangulation.js → loft/loft-triangulation.js} +6 -6
- package/dist/geometry/{loft.js → loft/loft.js} +8 -8
- package/dist/geometry/math/immutable-value.js +20 -0
- package/dist/geometry/math/vector-value.js +168 -0
- package/dist/geometry/math/vector2.js +80 -0
- package/dist/geometry/math/vector3.js +42 -8
- package/dist/geometry/mechanical/gear-motion.js +7 -4
- package/dist/geometry/mechanical/gears.js +2 -2
- package/dist/geometry/mechanical/thread-mesh.js +3 -3
- package/dist/geometry/mechanical/thread-profiles.js +2 -2
- package/dist/geometry/mechanical/thread-surface.js +14 -5
- package/dist/geometry/{mesh-centroid.js → mesh/mesh-centroid.js} +1 -1
- package/dist/geometry/{mesh-planar.js → mesh/mesh-planar.js} +1 -1
- package/dist/geometry/{mesh-quality.js → mesh/mesh-quality.js} +2 -2
- package/dist/geometry/{mesh-signature.js → mesh/mesh-signature.js} +2 -2
- package/dist/geometry/{mesh-solid-intersections.js → mesh/mesh-solid-intersections.js} +5 -1
- package/dist/geometry/{mesh-solid.js → mesh/mesh-solid.js} +2 -2
- package/dist/geometry/{mesh.js → mesh/mesh.js} +7 -8
- package/dist/geometry/paths/closest-point.js +74 -0
- package/dist/geometry/paths/frames.js +7 -8
- package/dist/geometry/patterns/options.js +1 -0
- package/dist/{engine/pattern-placements.js → geometry/patterns/placements.js} +22 -8
- package/dist/geometry/patterns.js +25 -0
- package/dist/geometry/primitive-resolution.js +4 -1
- package/dist/geometry/primitive-resolvers.js +9 -9
- package/dist/geometry/profiles/contour.js +3 -3
- package/dist/geometry/profiles/matched.js +3 -3
- package/dist/geometry/profiles/profiles.js +10 -10
- package/dist/geometry/profiles/rectangle.js +7 -7
- package/dist/geometry/profiles/shapes.js +9 -9
- package/dist/geometry/profiles/side-profile.js +37 -0
- package/dist/geometry/regions.js +15 -15
- package/dist/geometry/resolution.js +17 -5
- package/dist/geometry/revolve/revolve-mesh.js +5 -5
- package/dist/geometry/stroke-path.js +50 -46
- package/dist/geometry/svg/errors.js +0 -3
- package/dist/geometry/svg/fill.js +7 -7
- package/dist/geometry/svg/index.js +1 -1
- package/dist/geometry/svg/matrix.js +0 -114
- package/dist/geometry/svg/parser.js +1 -439
- package/dist/geometry/svg-import.js +3 -3
- package/dist/geometry/sweeps/stations.js +4 -4
- package/dist/geometry/sweeps/sweep-closed.js +4 -4
- package/dist/geometry/sweeps/sweep-mesh.js +1 -1
- package/dist/geometry/sweeps/sweep-open.js +6 -6
- package/dist/geometry/sweeps/validation.js +2 -2
- package/dist/geometry/text-fitting.js +85 -0
- package/dist/geometry/tolerance.js +2 -2
- package/dist/geometry/transform-chain.js +172 -0
- package/dist/geometry/transform-geometry.js +31 -27
- package/dist/geometry/transform-matrix.js +14 -0
- package/dist/geometry/transform2.js +60 -0
- package/dist/geometry/transform3.js +70 -26
- package/dist/index.js +3 -0
- package/dist/model/execution-binding.js +10 -5
- package/dist/model/generation.js +1 -1
- package/dist/model/geometry-recipes.js +15 -0
- package/dist/{engine → model}/immutable-generation-data.js +25 -3
- package/dist/model/operation-contracts.js +1 -0
- package/dist/model/operation-dispatch.js +13 -0
- package/dist/model/operations.js +40 -59
- package/dist/model/recipe-declaration.js +193 -0
- package/dist/model/shape-handles.js +15 -4
- package/package.json +10 -8
- package/dist/engine/geometry-recipes.js +0 -12
- /package/dist/geometry/{mesh-edge-table.js → mesh/mesh-edge-table.js} +0 -0
package/dist/api/text.d.ts
CHANGED
|
@@ -1,107 +1,119 @@
|
|
|
1
|
-
/**
|
|
2
|
-
export declare
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
*
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
|
|
57
|
-
*/
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
export declare interface
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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.
|