@metamesh/modeling 0.18.0 → 0.19.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 +33 -0
- package/README.md +73 -57
- package/dist/api/engine.d.ts +7 -47
- package/dist/api/export-3mf.d.ts +2 -0
- package/dist/api/export-glb.d.ts +2 -0
- package/dist/api/export-stl.d.ts +2 -0
- package/dist/api/export.d.ts +160 -0
- package/dist/api/geometry.d.ts +7 -7
- package/dist/api/index.d.ts +85 -35
- package/dist/api/mesh.d.ts +35 -6
- package/dist/docs/guides/concepts.md +32 -535
- package/dist/docs/guides/fonts.md +4 -4
- package/dist/docs/guides/generation.md +52 -45
- package/dist/docs/guides/geometry-values.md +193 -0
- package/dist/docs/guides/hosting.md +53 -30
- package/dist/docs/guides/profiles-and-extrusion.md +252 -0
- package/dist/docs/guides/recipes.md +33 -780
- package/dist/docs/guides/resolution-and-inspection.md +133 -0
- package/dist/docs/guides/solid-joins.md +126 -0
- package/dist/docs/guides/standalone-model.md +1 -1
- package/dist/docs/guides/svg-and-text.md +215 -0
- package/dist/docs/guides/sweeps-and-lofts.md +179 -0
- package/dist/docs/guides/transforms-and-placement.md +313 -0
- package/dist/docs/manifest.json +2818 -5862
- package/dist/docs/reference/engine/GenerationOptions.md +10 -4
- package/dist/docs/reference/engine/GeometryResource.md +8 -2
- package/dist/docs/reference/engine/ModelDependencies.md +9 -3
- package/dist/docs/reference/engine/ModelEngine.md +9 -3
- package/dist/docs/reference/engine/ModelEngineOptions.md +9 -3
- package/dist/docs/reference/engine/ModelPart.md +9 -3
- package/dist/docs/reference/engine/ModelResult.md +8 -2
- package/dist/docs/reference/engine/ModelRunArguments.md +7 -1
- package/dist/docs/reference/engine/ModelRunOptions.md +10 -4
- package/dist/docs/reference/engine/ModelSession.md +7 -1
- package/dist/docs/reference/engine/SessionOptions.md +10 -4
- package/dist/docs/reference/engine/categories/host-lifecycle.md +3 -8
- package/dist/docs/reference/engine/checkModel.md +7 -1
- package/dist/docs/reference/engine/createModelEngine.md +10 -3
- package/dist/docs/reference/engine/defaultModelingLimits.md +9 -3
- package/dist/docs/reference/engine/modelingWasmUrl.md +7 -1
- package/dist/docs/reference/engine.md +7 -7
- package/dist/docs/reference/export/Export3mfOptions.md +24 -0
- package/dist/docs/reference/export/ExportDiagnostic.md +59 -0
- package/dist/docs/reference/export/ExportFormat.md +25 -0
- package/dist/docs/reference/export/ExportGeometry.md +39 -0
- package/dist/docs/reference/export/ExportGlbOptions.md +118 -0
- package/dist/docs/reference/export/ExportLimits.md +83 -0
- package/dist/docs/reference/export/ExportMaterial.md +47 -0
- package/dist/docs/reference/export/ExportOptions.md +94 -0
- package/dist/docs/reference/export/ExportPart.md +88 -0
- package/dist/docs/reference/export/ExportReport.md +82 -0
- package/dist/docs/reference/export/ExportSink.md +39 -0
- package/dist/docs/reference/export/ExportStlOptions.md +24 -0
- package/dist/docs/reference/export/ExportedFile.md +110 -0
- package/dist/docs/reference/export/categories/mesh-serialization.md +47 -0
- package/dist/docs/reference/export/defaultExportLimits.md +20 -0
- package/dist/docs/reference/export/export3mf.md +64 -0
- package/dist/docs/reference/export/exportGlb.md +68 -0
- package/dist/docs/reference/export/exportStl.md +64 -0
- package/dist/docs/reference/export/write3mf.md +71 -0
- package/dist/docs/reference/export/writeGlb.md +75 -0
- package/dist/docs/reference/export/writeStl.md +71 -0
- package/dist/docs/reference/export.md +21 -0
- package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +7 -1
- package/dist/docs/reference/geometry/Anchor3-type.md +13 -3
- package/dist/docs/reference/geometry/ArcCurve2.md +8 -2
- package/dist/docs/reference/geometry/ArcCurve3.md +8 -2
- package/dist/docs/reference/geometry/AttachOptions.md +13 -3
- package/dist/docs/reference/geometry/AxisAngleRotation3.md +9 -3
- package/dist/docs/reference/geometry/Bevel.md +16 -2
- package/dist/docs/reference/geometry/BevelSize.md +16 -2
- package/dist/docs/reference/geometry/Bounds2-type.md +18 -4
- package/dist/docs/reference/geometry/Bounds2Data.md +22 -4
- package/dist/docs/reference/geometry/Bounds2Input.md +18 -4
- package/dist/docs/reference/geometry/Bounds2Options.md +14 -4
- package/dist/docs/reference/geometry/Bounds3-type.md +18 -4
- package/dist/docs/reference/geometry/Bounds3Data.md +18 -4
- package/dist/docs/reference/geometry/Bounds3Input.md +18 -4
- package/dist/docs/reference/geometry/Bounds3Options.md +14 -4
- package/dist/docs/reference/geometry/BoundsFit2.md +10 -4
- package/dist/docs/reference/geometry/BoundsFit3.md +10 -4
- package/dist/docs/reference/geometry/BoundsFitOptions.md +10 -4
- package/dist/docs/reference/geometry/BoxAnchorFace.md +9 -3
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +9 -3
- package/dist/docs/reference/geometry/BoxEdge.md +11 -1
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +11 -1
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +11 -1
- package/dist/docs/reference/geometry/BoxOptions.md +11 -1
- package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +16 -2
- package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +11 -1
- package/dist/docs/reference/geometry/CircleContourOptions.md +12 -2
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +15 -1
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +7 -1
- package/dist/docs/reference/geometry/CircularSampling.md +7 -1
- package/dist/docs/reference/geometry/CircularSamplingOptions.md +7 -1
- package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +8 -2
- package/dist/docs/reference/geometry/ClearanceHoleFit.md +8 -2
- package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +8 -2
- package/dist/docs/reference/geometry/Contour.md +12 -2
- package/dist/docs/reference/geometry/ContourCurve.md +8 -2
- package/dist/docs/reference/geometry/ContourPoint.md +8 -2
- package/dist/docs/reference/geometry/ContourSegment.md +8 -2
- package/dist/docs/reference/geometry/CorrespondingComponent.md +12 -2
- package/dist/docs/reference/geometry/CorrespondingContour.md +12 -2
- package/dist/docs/reference/geometry/CorrespondingProfile.md +12 -2
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +12 -2
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +8 -2
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +8 -2
- package/dist/docs/reference/geometry/Curve2.md +8 -2
- package/dist/docs/reference/geometry/Curve3.md +8 -2
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +16 -2
- package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +9 -3
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +9 -3
- package/dist/docs/reference/geometry/CylinderOptions.md +11 -1
- package/dist/docs/reference/geometry/CylindricalGearDimensions.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +8 -2
- package/dist/docs/reference/geometry/CylindricalGearSpec.md +8 -2
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -1
- package/dist/docs/reference/geometry/EdgeTreatment.md +11 -1
- package/dist/docs/reference/geometry/EllipseContourOptions.md +12 -2
- package/dist/docs/reference/geometry/EndTreatments.md +12 -2
- package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +16 -2
- package/dist/docs/reference/geometry/ExtrudeOptions.md +13 -3
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +16 -2
- package/dist/docs/reference/geometry/FittedTextLayout.md +8 -2
- package/dist/docs/reference/geometry/Frame3.md +16 -2
- package/dist/docs/reference/geometry/GeometryError.md +11 -1
- package/dist/docs/reference/geometry/GeometryErrorCode.md +11 -1
- package/dist/docs/reference/geometry/GeometryErrorContext.md +11 -1
- package/dist/docs/reference/geometry/GeometryResolution.md +15 -1
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +16 -2
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +15 -1
- package/dist/docs/reference/geometry/GridPatternOptions.md +12 -2
- package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +12 -2
- package/dist/docs/reference/geometry/HeightfieldOptions.md +16 -2
- package/dist/docs/reference/geometry/HeightfieldPreflight.md +12 -2
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +9 -3
- package/dist/docs/reference/geometry/ImmutableBuffer-type.md +16 -14
- package/dist/docs/reference/geometry/ImmutableTriangleMesh.md +17 -3
- package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +12 -2
- package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +12 -2
- package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +8 -2
- package/dist/docs/reference/geometry/KnuckleHingeInterval.md +8 -2
- package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +12 -2
- package/dist/docs/reference/geometry/KnuckleHingeSpec.md +12 -2
- package/dist/docs/reference/geometry/LineCurve2.md +8 -2
- package/dist/docs/reference/geometry/LineCurve3.md +8 -2
- package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -2
- package/dist/docs/reference/geometry/LoftCorrespondence.md +16 -2
- package/dist/docs/reference/geometry/LoftMeshStation.md +12 -2
- package/dist/docs/reference/geometry/LoftOptions.md +16 -2
- package/dist/docs/reference/geometry/LoftPlacement.md +16 -2
- package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +8 -2
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +12 -2
- package/dist/docs/reference/geometry/MetricFastenerSize.md +8 -2
- package/dist/docs/reference/geometry/MetricFastenerStandard.md +8 -2
- package/dist/docs/reference/geometry/MetricHexNutDimensions.md +8 -2
- package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +8 -2
- package/dist/docs/reference/geometry/ModelingLimits.md +19 -1
- package/dist/docs/reference/geometry/NumericArray.md +16 -2
- package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +8 -2
- package/dist/docs/reference/geometry/Path2-type.md +16 -2
- package/dist/docs/reference/geometry/Path2Data.md +16 -2
- package/dist/docs/reference/geometry/Path2Input.md +16 -2
- package/dist/docs/reference/geometry/Path3-type.md +16 -2
- package/dist/docs/reference/geometry/Path3Data.md +16 -2
- package/dist/docs/reference/geometry/Path3Input.md +16 -2
- package/dist/docs/reference/geometry/PathFrame.md +8 -2
- package/dist/docs/reference/geometry/PathLocation.md +16 -2
- package/dist/docs/reference/geometry/PathNormalGuide.md +16 -2
- package/dist/docs/reference/geometry/PathOptions.md +12 -2
- package/dist/docs/reference/geometry/PathPatternOptions.md +12 -2
- package/dist/docs/reference/geometry/PathPlacement.md +8 -2
- package/dist/docs/reference/geometry/PathResamplingOptions.md +16 -2
- package/dist/docs/reference/geometry/Pivot2Options.md +17 -3
- package/dist/docs/reference/geometry/Pivot3Options.md +17 -3
- package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +12 -2
- package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +12 -2
- package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +12 -2
- package/dist/docs/reference/geometry/PlanarPatchQuality.md +12 -2
- package/dist/docs/reference/geometry/PolygonData.md +12 -2
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +8 -2
- package/dist/docs/reference/geometry/PrimitiveAttachment.md +11 -1
- package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +11 -1
- package/dist/docs/reference/geometry/PrintableThreadFit.md +12 -2
- package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +12 -2
- package/dist/docs/reference/geometry/Profile.md +8 -2
- package/dist/docs/reference/geometry/ProfileComponent2.md +12 -2
- package/dist/docs/reference/geometry/ProfileContour2.md +12 -2
- package/dist/docs/reference/geometry/ProfileSpan2.md +12 -2
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +11 -1
- package/dist/docs/reference/geometry/RackPitchDimensions.md +8 -2
- package/dist/docs/reference/geometry/RackPitchSpec.md +8 -2
- package/dist/docs/reference/geometry/RadialPatternOptions.md +12 -2
- package/dist/docs/reference/geometry/RadialSizing.md +11 -1
- package/dist/docs/reference/geometry/RadialSizingOptions.md +11 -1
- package/dist/docs/reference/geometry/RectangleContourOptions.md +12 -2
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +12 -2
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +12 -2
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +8 -2
- package/dist/docs/reference/geometry/RegionData.md +12 -2
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +8 -2
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +7 -1
- package/dist/docs/reference/geometry/RevolveOptions.md +16 -2
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +11 -1
- package/dist/docs/reference/geometry/RowLayoutOptions.md +10 -4
- package/dist/docs/reference/geometry/SampleContourOptions.md +8 -2
- package/dist/docs/reference/geometry/SampleHelixOptions.md +8 -2
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +8 -2
- package/dist/docs/reference/geometry/SampledCurve2.md +8 -2
- package/dist/docs/reference/geometry/SampledCurve3.md +8 -2
- package/dist/docs/reference/geometry/SampledThreadHelices.md +8 -2
- package/dist/docs/reference/geometry/SideProfileCurve.md +8 -2
- package/dist/docs/reference/geometry/SideProfilePoint.md +8 -2
- package/dist/docs/reference/geometry/SideProfileSegment.md +8 -2
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +11 -1
- package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +12 -2
- package/dist/docs/reference/geometry/SphereOptions.md +11 -1
- package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/StarContourOptions.md +12 -2
- package/dist/docs/reference/geometry/StrokeCap.md +12 -2
- package/dist/docs/reference/geometry/StrokeJoin.md +12 -2
- package/dist/docs/reference/geometry/StrokeOptions.md +12 -2
- package/dist/docs/reference/geometry/SvgImportOptions.md +8 -2
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +8 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +8 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +8 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +8 -2
- package/dist/docs/reference/geometry/SweepOptions.md +16 -2
- package/dist/docs/reference/geometry/SweepOrientation.md +16 -2
- package/dist/docs/reference/geometry/ThreadBevelOptions.md +12 -2
- package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +8 -2
- package/dist/docs/reference/geometry/ThreadCompensationOptions.md +8 -2
- package/dist/docs/reference/geometry/ThreadEndStyle.md +16 -2
- package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +16 -2
- package/dist/docs/reference/geometry/ThreadHandedness.md +16 -2
- package/dist/docs/reference/geometry/ThreadHelixOptions.md +8 -2
- package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +16 -2
- package/dist/docs/reference/geometry/ThreadLeadInShape.md +16 -2
- package/dist/docs/reference/geometry/ThreadProfile-type.md +16 -2
- package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +16 -2
- package/dist/docs/reference/geometry/ThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/ThreadRidgeOptions.md +16 -2
- package/dist/docs/reference/geometry/ThreadRole.md +8 -2
- package/dist/docs/reference/geometry/ThreadSolidOptions.md +12 -2
- package/dist/docs/reference/geometry/ThreadSolidPreflight.md +16 -2
- package/dist/docs/reference/geometry/ThreadedNutOptions.md +12 -2
- package/dist/docs/reference/geometry/ThreadedNutPreflight.md +12 -2
- package/dist/docs/reference/geometry/ThreadedNutShape.md +12 -2
- package/dist/docs/reference/geometry/ThreadedRodOptions.md +12 -2
- package/dist/docs/reference/geometry/TorusOptions.md +11 -1
- package/dist/docs/reference/geometry/Transform2-type.md +17 -3
- package/dist/docs/reference/geometry/Transform2Data.md +17 -3
- package/dist/docs/reference/geometry/Transform2Input.md +17 -3
- package/dist/docs/reference/geometry/Transform3-type.md +17 -3
- package/dist/docs/reference/geometry/Transform3Data.md +17 -3
- package/dist/docs/reference/geometry/Transform3Input.md +17 -3
- package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/TriangleMesh.md +20 -2
- package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +16 -2
- package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshInput.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +16 -2
- package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshSignature.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +12 -2
- package/dist/docs/reference/geometry/TriangleMeshTopologyAnalysis.md +16 -2
- package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +12 -2
- package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/TubeOptions.md +11 -1
- package/dist/docs/reference/geometry/Vector2-type.md +17 -3
- package/dist/docs/reference/geometry/Vector2Data.md +21 -3
- package/dist/docs/reference/geometry/Vector2Input.md +17 -3
- package/dist/docs/reference/geometry/Vector3-type.md +17 -3
- package/dist/docs/reference/geometry/Vector3Data.md +17 -3
- package/dist/docs/reference/geometry/Vector3Input.md +17 -3
- package/dist/docs/reference/geometry/VectorTextArcBaseline.md +12 -2
- package/dist/docs/reference/geometry/VectorTextLayout.md +16 -2
- package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +12 -2
- package/dist/docs/reference/geometry/VectorTextMetrics.md +16 -2
- package/dist/docs/reference/geometry/VectorTextOptions.md +12 -2
- package/dist/docs/reference/geometry/add2.md +9 -3
- package/dist/docs/reference/geometry/add3.md +9 -3
- package/dist/docs/reference/geometry/anchor3.md +9 -3
- package/dist/docs/reference/geometry/anchorFrame3.md +8 -2
- package/dist/docs/reference/geometry/applyTransformDirection3.md +9 -3
- package/dist/docs/reference/geometry/applyTransformPoint3.md +9 -3
- package/dist/docs/reference/geometry/attachmentTransform3.md +9 -3
- package/dist/docs/reference/geometry/bounds2.md +16 -6
- package/dist/docs/reference/geometry/bounds3.md +16 -6
- package/dist/docs/reference/geometry/boundsCenter.md +10 -4
- package/dist/docs/reference/geometry/boundsSize.md +10 -4
- package/dist/docs/reference/geometry/boxAnchor3.md +9 -3
- package/dist/docs/reference/geometry/categories/bounds-layout.md +4 -4
- package/dist/docs/reference/geometry/categories/curves-paths.md +2 -2
- package/dist/docs/reference/geometry/categories/mechanical.md +2 -2
- package/dist/docs/reference/geometry/categories/meshes.md +3 -3
- package/dist/docs/reference/geometry/categories/pattern-placement.md +2 -2
- package/dist/docs/reference/geometry/categories/primitive-options.md +2 -2
- package/dist/docs/reference/geometry/categories/profiles-regions.md +2 -2
- package/dist/docs/reference/geometry/categories/resolution-errors.md +1 -1
- package/dist/docs/reference/geometry/categories/transforms-math.md +3 -3
- package/dist/docs/reference/geometry/categories/vector-import.md +2 -2
- package/dist/docs/reference/geometry/circleContour.md +8 -2
- package/dist/docs/reference/geometry/closeToAxis.md +8 -2
- package/dist/docs/reference/geometry/compensateThreadDiameters.md +8 -2
- package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +8 -2
- package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +8 -2
- package/dist/docs/reference/geometry/composeTransform3.md +9 -3
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +8 -2
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +8 -2
- package/dist/docs/reference/geometry/contourContainsPoint.md +8 -2
- package/dist/docs/reference/geometry/cross2.md +9 -3
- package/dist/docs/reference/geometry/cross3.md +9 -3
- package/dist/docs/reference/geometry/cylinderAnchor3.md +9 -3
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +8 -2
- package/dist/docs/reference/geometry/distance2.md +9 -3
- package/dist/docs/reference/geometry/distance3.md +9 -3
- package/dist/docs/reference/geometry/distributeAlongPath.md +8 -2
- package/dist/docs/reference/geometry/dot2.md +9 -3
- package/dist/docs/reference/geometry/dot3.md +9 -3
- package/dist/docs/reference/geometry/ellipseContour.md +8 -2
- package/dist/docs/reference/geometry/eulerTransform3.md +9 -3
- package/dist/docs/reference/geometry/fitBounds.md +10 -4
- package/dist/docs/reference/geometry/fitTextLayout.md +8 -2
- package/dist/docs/reference/geometry/frameTransform3.md +9 -3
- package/dist/docs/reference/geometry/getMetricClearanceHoleDiameter.md +8 -2
- package/dist/docs/reference/geometry/getMetricFastenerStandard.md +8 -2
- package/dist/docs/reference/geometry/gridPatternTransforms.md +8 -2
- package/dist/docs/reference/geometry/immutableBuffer.md +12 -2
- package/dist/docs/reference/geometry/inverseTransform3.md +9 -3
- package/dist/docs/reference/geometry/isGeometryError.md +11 -1
- package/dist/docs/reference/geometry/layoutRow.md +10 -4
- package/dist/docs/reference/geometry/length2.md +9 -3
- package/dist/docs/reference/geometry/length3.md +9 -3
- package/dist/docs/reference/geometry/lerp2.md +9 -3
- package/dist/docs/reference/geometry/lerp3.md +9 -3
- package/dist/docs/reference/geometry/linearPatternTransforms.md +8 -2
- package/dist/docs/reference/geometry/matchProfiles.md +8 -2
- package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +8 -2
- package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +8 -2
- package/dist/docs/reference/geometry/normalize2.md +9 -3
- package/dist/docs/reference/geometry/normalize3.md +9 -3
- package/dist/docs/reference/geometry/normalizeContour.md +8 -2
- package/dist/docs/reference/geometry/normalizePolygon.md +8 -2
- package/dist/docs/reference/geometry/normalizeRegion.md +8 -2
- package/dist/docs/reference/geometry/path2.md +12 -2
- package/dist/docs/reference/geometry/path3.md +12 -2
- package/dist/docs/reference/geometry/pathPatternTransforms.md +8 -2
- package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +8 -2
- package/dist/docs/reference/geometry/preflightSvgRegion.md +8 -2
- package/dist/docs/reference/geometry/preflightThreadedNut.md +8 -2
- package/dist/docs/reference/geometry/preflightThreadedRod.md +8 -2
- package/dist/docs/reference/geometry/projectOntoPlane3.md +9 -3
- package/dist/docs/reference/geometry/radialPatternTransforms.md +8 -2
- package/dist/docs/reference/geometry/rectangleContour.md +8 -2
- package/dist/docs/reference/geometry/rectangleProfile.md +8 -2
- package/dist/docs/reference/geometry/regionArea.md +8 -2
- package/dist/docs/reference/geometry/regionBounds.md +8 -2
- package/dist/docs/reference/geometry/regularPolygonContour.md +8 -2
- package/dist/docs/reference/geometry/resamplePolyline2.md +8 -2
- package/dist/docs/reference/geometry/resamplePolyline3.md +8 -2
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +7 -1
- package/dist/docs/reference/geometry/resolveArcSegments.md +7 -1
- package/dist/docs/reference/geometry/resolveCircularSampling.md +7 -1
- package/dist/docs/reference/geometry/resolveCircularSegments.md +7 -1
- package/dist/docs/reference/geometry/resolveCylindricalGear.md +8 -2
- package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +8 -2
- package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +8 -2
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +8 -2
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +7 -1
- package/dist/docs/reference/geometry/resolveKnuckleHinge.md +8 -2
- package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +8 -2
- package/dist/docs/reference/geometry/resolveRackPitch.md +8 -2
- package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +8 -2
- package/dist/docs/reference/geometry/rotate2.md +9 -3
- package/dist/docs/reference/geometry/rotationTransform3.md +9 -3
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +8 -2
- package/dist/docs/reference/geometry/sampleContour.md +8 -2
- package/dist/docs/reference/geometry/sampleCurve2.md +8 -2
- package/dist/docs/reference/geometry/sampleCurve3.md +8 -2
- package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +8 -2
- package/dist/docs/reference/geometry/sampleHelix.md +8 -2
- package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +8 -2
- package/dist/docs/reference/geometry/sampleRackToothPath.md +8 -2
- package/dist/docs/reference/geometry/sampleSideProfile.md +8 -2
- package/dist/docs/reference/geometry/sampleTextContours.md +8 -2
- package/dist/docs/reference/geometry/sampleThreadHelices.md +8 -2
- package/dist/docs/reference/geometry/scale2.md +9 -3
- package/dist/docs/reference/geometry/scale3.md +9 -3
- package/dist/docs/reference/geometry/scaleTransform3.md +9 -3
- package/dist/docs/reference/geometry/signedContourArea.md +8 -2
- package/dist/docs/reference/geometry/starContour.md +8 -2
- package/dist/docs/reference/geometry/strokeRegionData.md +8 -2
- package/dist/docs/reference/geometry/subtract2.md +9 -3
- package/dist/docs/reference/geometry/subtract3.md +9 -3
- package/dist/docs/reference/geometry/threadProfile.md +8 -2
- package/dist/docs/reference/geometry/transform2.md +13 -3
- package/dist/docs/reference/geometry/transform3.md +13 -3
- package/dist/docs/reference/geometry/transformDeterminant3.md +9 -3
- package/dist/docs/reference/geometry/transformRegionData.md +8 -2
- package/dist/docs/reference/geometry/translationTransform3.md +9 -3
- package/dist/docs/reference/geometry/triangulateContour.md +8 -2
- package/dist/docs/reference/geometry/validateRigidTransform3.md +9 -3
- package/dist/docs/reference/geometry/validateTransform3.md +9 -3
- package/dist/docs/reference/geometry/vector2.md +13 -3
- package/dist/docs/reference/geometry/vector3.md +13 -3
- package/dist/docs/reference/geometry.md +2 -2
- package/dist/docs/reference/mesh/MeshRenderOptions.md +28 -0
- package/dist/docs/reference/mesh/RenderMesh.md +68 -0
- package/dist/docs/reference/mesh/analyze.md +12 -6
- package/dist/docs/reference/mesh/analyzeQuality.md +11 -5
- package/dist/docs/reference/mesh/bounds.md +10 -4
- package/dist/docs/reference/mesh/categories/operations.md +5 -95
- package/dist/docs/reference/mesh/centroid.md +10 -4
- package/dist/docs/reference/mesh/extrude.md +11 -5
- package/dist/docs/reference/mesh/heightfield.md +11 -5
- package/dist/docs/reference/mesh/immutable.md +13 -9
- package/dist/docs/reference/mesh/join.md +10 -4
- package/dist/docs/reference/mesh/loft.md +11 -5
- package/dist/docs/reference/mesh/optimizePlanarPatches.md +11 -5
- package/dist/docs/reference/mesh/preflightHeightfield.md +11 -5
- package/dist/docs/reference/mesh/preflightThreadSolid.md +10 -4
- package/dist/docs/reference/mesh/render.md +57 -0
- package/dist/docs/reference/mesh/reverse.md +10 -4
- package/dist/docs/reference/mesh/revolve.md +11 -5
- package/dist/docs/reference/mesh/signature.md +11 -5
- package/dist/docs/reference/mesh/sweep.md +12 -6
- package/dist/docs/reference/mesh/threadRidge.md +10 -4
- package/dist/docs/reference/mesh/threadSolid.md +10 -4
- package/dist/docs/reference/mesh/transform.md +11 -5
- package/dist/docs/reference/mesh/validate.md +10 -4
- package/dist/docs/reference/mesh/validateSolid.md +10 -4
- package/dist/docs/reference/mesh.md +1 -1
- package/dist/docs/reference/model/CircleOptions.md +13 -7
- package/dist/docs/reference/model/DiagnosticOptions.md +7 -1
- package/dist/docs/reference/model/EllipseOptions.md +13 -7
- package/dist/docs/reference/model/GenerateCallback.md +7 -1
- package/dist/docs/reference/model/GenerateContext.md +14 -39
- package/dist/docs/reference/model/GenerationDiagnostic.md +7 -1
- package/dist/docs/reference/model/GenerationError.md +8 -2
- package/dist/docs/reference/model/HoleCutterOptions.md +17 -10
- package/dist/docs/reference/model/HoleCutterOverrun.md +10 -3
- package/dist/docs/reference/model/HoleCutterRecess.md +10 -3
- package/dist/docs/reference/model/HullOptions.md +13 -6
- package/dist/docs/reference/model/ImmutableValue.md +7 -1
- package/dist/docs/reference/model/ImplicitOptions.md +12 -6
- package/dist/docs/reference/model/JoinOptions.md +76 -0
- package/dist/docs/reference/model/JoinTransition.md +54 -0
- package/dist/docs/reference/model/KnuckleHinge-type.md +9 -3
- package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +7 -1
- package/dist/docs/reference/model/KnuckleHingeOptions.md +10 -4
- package/dist/docs/reference/model/KnuckleHingeWeb.md +7 -1
- package/dist/docs/reference/model/LoftStation.md +16 -9
- package/dist/docs/reference/model/Memo.md +54 -0
- package/dist/docs/reference/model/ModelProgram.md +7 -1
- package/dist/docs/reference/model/PartDeclaration.md +11 -6
- package/dist/docs/reference/model/PartGeometry.md +10 -4
- package/dist/docs/reference/model/PartOptions.md +11 -6
- package/dist/docs/reference/model/PatternSource.md +10 -4
- package/dist/docs/reference/model/PlaneOptions.md +11 -4
- package/dist/docs/reference/model/PolygonOptions.md +20 -14
- package/dist/docs/reference/model/Profile.md +10 -4
- package/dist/docs/reference/model/RectangleOptions.md +28 -22
- package/dist/docs/reference/model/RegularPolygonOptions.md +13 -7
- package/dist/docs/reference/model/Section.md +68 -74
- package/dist/docs/reference/model/SectionHullOptions.md +13 -6
- package/dist/docs/reference/model/SectionInspection.md +10 -4
- package/dist/docs/reference/model/SectionOffsetJoin.md +10 -4
- package/dist/docs/reference/model/SectionOffsetOptions.md +12 -6
- package/dist/docs/reference/model/Solid.md +101 -53
- package/dist/docs/reference/model/SolidInspection.md +10 -4
- package/dist/docs/reference/model/SolidSegmentHit.md +11 -5
- package/dist/docs/reference/model/StarOptions.md +24 -18
- package/dist/docs/reference/model/SvgOrigin.md +10 -4
- package/dist/docs/reference/model/SvgPathSectionOptions.md +14 -8
- package/dist/docs/reference/model/SvgSectionOptions.md +16 -10
- package/dist/docs/reference/model/TextSectionOptions.md +14 -8
- package/dist/docs/reference/model/box.md +18 -11
- package/dist/docs/reference/model/categories/boolean-operations.md +8 -2
- package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -7
- package/dist/docs/reference/model/categories/explicit-profiles.md +1 -14
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +6 -20
- package/dist/docs/reference/model/categories/generation.md +5 -10
- package/dist/docs/reference/model/categories/hinges.md +1 -4
- package/dist/docs/reference/model/categories/mesh-inspection.md +2 -6
- package/dist/docs/reference/model/categories/primitives.md +5 -21
- package/dist/docs/reference/model/categories/sections.md +4 -15
- package/dist/docs/reference/model/categories/threads.md +2 -39
- package/dist/docs/reference/model/categories/transforms-placement.md +4 -33
- package/dist/docs/reference/model/circle.md +10 -4
- package/dist/docs/reference/model/cylinder.md +13 -6
- package/dist/docs/reference/model/ellipse.md +10 -4
- package/dist/docs/reference/model/extrude.md +26 -19
- package/dist/docs/reference/model/generate.md +8 -2
- package/dist/docs/reference/model/gridPattern.md +15 -9
- package/dist/docs/reference/model/heightfield.md +10 -4
- package/dist/docs/reference/model/holeCutter.md +10 -3
- package/dist/docs/reference/model/hull.md +9 -2
- package/dist/docs/reference/model/implicit.md +9 -3
- package/dist/docs/reference/model/internalThreadCutter.md +23 -17
- package/dist/docs/reference/model/intersect.md +9 -2
- package/dist/docs/reference/model/join.md +89 -0
- package/dist/docs/reference/model/knuckleHinge.md +7 -1
- package/dist/docs/reference/model/linearPattern.md +15 -9
- package/dist/docs/reference/model/loft.md +31 -24
- package/dist/docs/reference/model/matchProfiles.md +14 -8
- package/dist/docs/reference/model/minkowskiSum.md +9 -2
- package/dist/docs/reference/model/pathPattern.md +25 -19
- package/dist/docs/reference/model/polygon.md +13 -7
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +25 -19
- package/dist/docs/reference/model/preflightThreadedNut.md +29 -23
- package/dist/docs/reference/model/preflightThreadedRod.md +25 -19
- package/dist/docs/reference/model/radialPattern.md +15 -9
- package/dist/docs/reference/model/rectangle.md +14 -8
- package/dist/docs/reference/model/regularPolygon.md +10 -4
- package/dist/docs/reference/model/revolve.md +22 -15
- package/dist/docs/reference/model/solidFromMesh.md +12 -6
- package/dist/docs/reference/model/sphere.md +13 -6
- package/dist/docs/reference/model/star.md +12 -6
- package/dist/docs/reference/model/stroke.md +21 -15
- package/dist/docs/reference/model/svgPathSection.md +12 -6
- package/dist/docs/reference/model/svgSection.md +13 -7
- package/dist/docs/reference/model/sweep.md +27 -20
- package/dist/docs/reference/model/textSection.md +15 -9
- package/dist/docs/reference/model/threadRidge.md +21 -15
- package/dist/docs/reference/model/threadedNut.md +27 -21
- package/dist/docs/reference/model/threadedRod.md +23 -17
- package/dist/docs/reference/model/torus.md +20 -13
- package/dist/docs/reference/model/tube.md +13 -6
- package/dist/docs/reference/model/union.md +9 -2
- package/dist/docs/reference/model.md +3 -8
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -1
- package/dist/docs/reference/text/VectorFont.md +39 -33
- package/dist/docs/reference/text/VectorFontOptions.md +7 -1
- package/dist/docs/reference/text/categories/font-preparation.md +1 -13
- package/dist/docs/reference/text/prepareVectorFont.md +7 -1
- package/dist/docs/reference/text.md +1 -1
- package/dist/engine/finalization.js +2 -74
- package/dist/engine/index.js +2 -2
- package/dist/engine/native/construction-mesh.js +41 -0
- package/dist/engine/native/material-components.js +2 -51
- package/dist/engine/native/mesh-observation.js +55 -0
- package/dist/engine/native/regions.js +2 -1
- package/dist/engine/operations/context.js +2 -0
- package/dist/engine/operations/extrusion-finishing.js +17 -16
- package/dist/engine/operations/join-collar-profile.js +120 -0
- package/dist/engine/operations/join.js +508 -0
- package/dist/engine/recipe-realization.js +1 -1
- package/dist/engine/session/dependencies.js +89 -42
- package/dist/engine/session/graph.js +319 -342
- package/dist/engine/session/native-cache.js +1 -1
- package/dist/engine/session/session.js +5 -5
- package/dist/engine/session/snapshot-cache.js +2 -2
- package/dist/export/3mf.js +190 -0
- package/dist/export/capture.js +178 -0
- package/dist/export/glb.js +209 -0
- package/dist/export/index.js +5 -0
- package/dist/export/limits.js +18 -0
- package/dist/export/stl.js +105 -0
- package/dist/export/types.js +1 -0
- package/dist/export/writer.js +54 -0
- package/dist/geometry/bounds-value.js +4 -4
- package/dist/geometry/immutable-buffer.js +4 -6
- package/dist/geometry/join-geometry.js +839 -0
- package/dist/geometry/mesh/mesh-render.js +205 -0
- package/dist/geometry/mesh/mesh-solid-intersections.js +43 -17
- package/dist/geometry/mesh/mesh-solid.js +6 -2
- package/dist/geometry/mesh-api.js +1 -0
- package/dist/geometry/region-offset.js +278 -0
- package/dist/geometry/regions.js +11 -1
- package/dist/model/execution-binding.js +3 -3
- package/dist/model/generation.js +2 -2
- package/dist/model/immutable-generation-data.js +13 -13
- package/dist/model/join.js +1 -0
- package/dist/model/operations.js +20 -0
- package/dist/model/recipe-declaration.js +1 -0
- package/dist/model/shape-handles.js +1 -0
- package/package.json +18 -1
- package/dist/docs/reference/engine/Export3mfOptions.md +0 -46
- package/dist/docs/reference/engine/ExportMeshPart.md +0 -31
- package/dist/docs/reference/engine/ModelingLimits.md +0 -121
- package/dist/docs/reference/engine/export3mf.md +0 -55
- package/dist/docs/reference/mesh/AcmeThreadProfileSpec.md +0 -79
- package/dist/docs/reference/mesh/Bevel.md +0 -18
- package/dist/docs/reference/mesh/BevelSize.md +0 -14
- package/dist/docs/reference/mesh/Bounds2.md +0 -125
- package/dist/docs/reference/mesh/Bounds2Data.md +0 -43
- package/dist/docs/reference/mesh/Bounds2Input.md +0 -19
- package/dist/docs/reference/mesh/Bounds3.md +0 -125
- package/dist/docs/reference/mesh/Bounds3Data.md +0 -43
- package/dist/docs/reference/mesh/Bounds3Input.md +0 -19
- package/dist/docs/reference/mesh/ButtressPressureFlankSide.md +0 -14
- package/dist/docs/reference/mesh/ButtressThreadProfileSpec.md +0 -97
- package/dist/docs/reference/mesh/CircularPrimitiveOptions.md +0 -60
- package/dist/docs/reference/mesh/CurveSamplingOptions.md +0 -69
- package/dist/docs/reference/mesh/CustomThreadProfileSpec.md +0 -77
- package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +0 -129
- package/dist/docs/reference/mesh/ExtrusionSamplingOptions.md +0 -81
- package/dist/docs/reference/mesh/Frame3.md +0 -62
- package/dist/docs/reference/mesh/GeometryResolution.md +0 -74
- package/dist/docs/reference/mesh/GeometrySamplingLimits.md +0 -66
- package/dist/docs/reference/mesh/GeometryToleranceOptions.md +0 -46
- package/dist/docs/reference/mesh/HeightfieldMeshLimits.md +0 -18
- package/dist/docs/reference/mesh/HeightfieldOptions.md +0 -72
- package/dist/docs/reference/mesh/HeightfieldPreflight.md +0 -58
- package/dist/docs/reference/mesh/ImmutableBuffer.md +0 -108
- package/dist/docs/reference/mesh/ImmutableTriangleMesh.md +0 -43
- package/dist/docs/reference/mesh/LoftCorrespondence.md +0 -24
- package/dist/docs/reference/mesh/LoftMeshStation.md +0 -31
- package/dist/docs/reference/mesh/LoftOptions.md +0 -88
- package/dist/docs/reference/mesh/LoftPlacement.md +0 -70
- package/dist/docs/reference/mesh/ModelingLimits.md +0 -130
- package/dist/docs/reference/mesh/NumericArray.md +0 -14
- package/dist/docs/reference/mesh/Path2.md +0 -197
- package/dist/docs/reference/mesh/Path2Data.md +0 -50
- package/dist/docs/reference/mesh/Path2Input.md +0 -20
- package/dist/docs/reference/mesh/Path3.md +0 -197
- package/dist/docs/reference/mesh/Path3Data.md +0 -50
- package/dist/docs/reference/mesh/Path3Input.md +0 -20
- package/dist/docs/reference/mesh/PathLocation.md +0 -69
- package/dist/docs/reference/mesh/PathNormalGuide.md +0 -43
- package/dist/docs/reference/mesh/PathResamplingOptions.md +0 -84
- package/dist/docs/reference/mesh/Pivot2Options.md +0 -26
- package/dist/docs/reference/mesh/Pivot3Options.md +0 -26
- package/dist/docs/reference/mesh/PlanarMeshOptimizationFallbackReason.md +0 -14
- package/dist/docs/reference/mesh/PlanarMeshOptimizationOptions.md +0 -160
- package/dist/docs/reference/mesh/PlanarMeshOptimizationResult.md +0 -124
- package/dist/docs/reference/mesh/PlanarPatchQuality.md +0 -194
- package/dist/docs/reference/mesh/RevolveOptions.md +0 -91
- package/dist/docs/reference/mesh/SolidMeshValidationOptions.md +0 -38
- package/dist/docs/reference/mesh/SquareThreadProfileSpec.md +0 -79
- package/dist/docs/reference/mesh/SweepOptions.md +0 -113
- package/dist/docs/reference/mesh/SweepOrientation.md +0 -113
- package/dist/docs/reference/mesh/ThreadEndStyle.md +0 -14
- package/dist/docs/reference/mesh/ThreadEndTreatmentOptions.md +0 -117
- package/dist/docs/reference/mesh/ThreadHandedness.md +0 -14
- package/dist/docs/reference/mesh/ThreadLeadInEnvelope.md +0 -14
- package/dist/docs/reference/mesh/ThreadLeadInShape.md +0 -14
- package/dist/docs/reference/mesh/ThreadProfile.md +0 -86
- package/dist/docs/reference/mesh/ThreadProfileBaseSpec.md +0 -53
- package/dist/docs/reference/mesh/ThreadProfileSpec.md +0 -23
- package/dist/docs/reference/mesh/ThreadRidgeOptions.md +0 -145
- package/dist/docs/reference/mesh/ThreadSolidOptions.md +0 -222
- package/dist/docs/reference/mesh/ThreadSolidPreflight.md +0 -58
- package/dist/docs/reference/mesh/Transform2.md +0 -256
- package/dist/docs/reference/mesh/Transform2Data.md +0 -14
- package/dist/docs/reference/mesh/Transform2Input.md +0 -19
- package/dist/docs/reference/mesh/Transform3.md +0 -296
- package/dist/docs/reference/mesh/Transform3Data.md +0 -17
- package/dist/docs/reference/mesh/Transform3Input.md +0 -19
- package/dist/docs/reference/mesh/TrapezoidalThreadProfileSpec.md +0 -96
- package/dist/docs/reference/mesh/TriangleMesh.md +0 -34
- package/dist/docs/reference/mesh/TriangleMeshAnalysis.md +0 -129
- package/dist/docs/reference/mesh/TriangleMeshAnalysisOptions.md +0 -79
- package/dist/docs/reference/mesh/TriangleMeshInput.md +0 -19
- package/dist/docs/reference/mesh/TriangleMeshMeasurements.md +0 -79
- package/dist/docs/reference/mesh/TriangleMeshQualityOptions.md +0 -43
- package/dist/docs/reference/mesh/TriangleMeshQualityReport.md +0 -194
- package/dist/docs/reference/mesh/TriangleMeshSignature.md +0 -111
- package/dist/docs/reference/mesh/TriangleMeshSignatureOptions.md +0 -46
- package/dist/docs/reference/mesh/TriangleMeshSignatureTolerances.md +0 -34
- package/dist/docs/reference/mesh/TriangleMeshTopologyAnalysis.md +0 -131
- package/dist/docs/reference/mesh/TriangleMeshValidationOptions.md +0 -55
- package/dist/docs/reference/mesh/TriangularThreadProfileSpec.md +0 -95
- package/dist/docs/reference/mesh/Vector2.md +0 -270
- package/dist/docs/reference/mesh/Vector2Data.md +0 -14
- package/dist/docs/reference/mesh/Vector2Input.md +0 -19
- package/dist/docs/reference/mesh/Vector3.md +0 -282
- package/dist/docs/reference/mesh/Vector3Data.md +0 -14
- package/dist/docs/reference/mesh/Vector3Input.md +0 -19
- package/dist/docs/reference/model/AcmeThreadProfileSpec.md +0 -80
- package/dist/docs/reference/model/Anchor3.md +0 -55
- package/dist/docs/reference/model/AttachOptions.md +0 -69
- package/dist/docs/reference/model/Bevel.md +0 -19
- package/dist/docs/reference/model/BevelSize.md +0 -15
- package/dist/docs/reference/model/Bounds2-type.md +0 -125
- package/dist/docs/reference/model/Bounds2Data.md +0 -44
- package/dist/docs/reference/model/Bounds2Input.md +0 -19
- package/dist/docs/reference/model/Bounds2Options.md +0 -110
- package/dist/docs/reference/model/Bounds3-type.md +0 -125
- package/dist/docs/reference/model/Bounds3Data.md +0 -44
- package/dist/docs/reference/model/Bounds3Input.md +0 -19
- package/dist/docs/reference/model/Bounds3Options.md +0 -110
- package/dist/docs/reference/model/BoxEdge.md +0 -15
- package/dist/docs/reference/model/BoxEdgeSelection.md +0 -19
- package/dist/docs/reference/model/BoxEdgeTreatments.md +0 -20
- package/dist/docs/reference/model/BoxOptions.md +0 -92
- package/dist/docs/reference/model/ButtressPressureFlankSide.md +0 -15
- package/dist/docs/reference/model/ButtressThreadProfileSpec.md +0 -98
- package/dist/docs/reference/model/ChamferedEdgeTreatment.md +0 -35
- package/dist/docs/reference/model/CircleContourOptions.md +0 -21
- package/dist/docs/reference/model/CircularPrimitiveOptions.md +0 -62
- package/dist/docs/reference/model/Computed.md +0 -44
- package/dist/docs/reference/model/ComputedValue.md +0 -24
- package/dist/docs/reference/model/Contour.md +0 -24
- package/dist/docs/reference/model/CorrespondingComponent.md +0 -46
- package/dist/docs/reference/model/CorrespondingContour.md +0 -46
- package/dist/docs/reference/model/CorrespondingProfile.md +0 -22
- package/dist/docs/reference/model/CorrespondingProfileStation.md +0 -27
- package/dist/docs/reference/model/CurveSamplingOptions.md +0 -68
- package/dist/docs/reference/model/CustomThreadProfileSpec.md +0 -78
- package/dist/docs/reference/model/CylinderOptions.md +0 -58
- package/dist/docs/reference/model/EdgeTreatment.md +0 -22
- package/dist/docs/reference/model/EllipseContourOptions.md +0 -21
- package/dist/docs/reference/model/EndTreatments.md +0 -39
- package/dist/docs/reference/model/ExtrudeMeshOptions.md +0 -133
- package/dist/docs/reference/model/ExtrudeOptions.md +0 -149
- package/dist/docs/reference/model/ExtrusionSamplingOptions.md +0 -84
- package/dist/docs/reference/model/Frame3.md +0 -63
- package/dist/docs/reference/model/GeometryError.md +0 -102
- package/dist/docs/reference/model/GeometryErrorCode.md +0 -15
- package/dist/docs/reference/model/GeometryErrorContext.md +0 -35
- package/dist/docs/reference/model/GeometryResolution.md +0 -70
- package/dist/docs/reference/model/GeometrySamplingLimits.md +0 -62
- package/dist/docs/reference/model/GeometryToleranceOptions.md +0 -46
- package/dist/docs/reference/model/GridPatternOptions.md +0 -50
- package/dist/docs/reference/model/HeightfieldOptions.md +0 -68
- package/dist/docs/reference/model/ImmutableBuffer-type.md +0 -108
- package/dist/docs/reference/model/ImmutableTriangleMesh.md +0 -43
- package/dist/docs/reference/model/InternalThreadCutterOptions.md +0 -216
- package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +0 -77
- package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +0 -47
- package/dist/docs/reference/model/KnuckleHingeSpec.md +0 -18
- package/dist/docs/reference/model/LinearPatternOptions.md +0 -39
- package/dist/docs/reference/model/LoftCorrespondence.md +0 -27
- package/dist/docs/reference/model/LoftOptions.md +0 -91
- package/dist/docs/reference/model/LoftPlacement.md +0 -73
- package/dist/docs/reference/model/MatchProfilesOptions.md +0 -35
- package/dist/docs/reference/model/ModelingLimits.md +0 -126
- package/dist/docs/reference/model/NumericArray.md +0 -14
- package/dist/docs/reference/model/Path2-type.md +0 -196
- package/dist/docs/reference/model/Path2Data.md +0 -50
- package/dist/docs/reference/model/Path2Input.md +0 -20
- package/dist/docs/reference/model/Path3-type.md +0 -196
- package/dist/docs/reference/model/Path3Data.md +0 -50
- package/dist/docs/reference/model/Path3Input.md +0 -20
- package/dist/docs/reference/model/PathLocation.md +0 -69
- package/dist/docs/reference/model/PathNormalGuide.md +0 -46
- package/dist/docs/reference/model/PathOptions.md +0 -38
- package/dist/docs/reference/model/PathPatternOptions.md +0 -48
- package/dist/docs/reference/model/PathResamplingOptions.md +0 -84
- package/dist/docs/reference/model/Pivot2Options.md +0 -28
- package/dist/docs/reference/model/Pivot3Options.md +0 -28
- package/dist/docs/reference/model/PolygonData.md +0 -44
- package/dist/docs/reference/model/PrimitiveAttachment.md +0 -39
- package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +0 -110
- package/dist/docs/reference/model/PrintableThreadFit.md +0 -15
- package/dist/docs/reference/model/PrintableThreadFitPolicy.md +0 -51
- package/dist/docs/reference/model/ProfileComponent2.md +0 -46
- package/dist/docs/reference/model/ProfileContour2.md +0 -36
- package/dist/docs/reference/model/ProfileSpan2.md +0 -47
- package/dist/docs/reference/model/ProfiledEdgeTreatment.md +0 -41
- package/dist/docs/reference/model/RadialPatternOptions.md +0 -59
- package/dist/docs/reference/model/RadialSizing.md +0 -15
- package/dist/docs/reference/model/RadialSizingOptions.md +0 -40
- package/dist/docs/reference/model/RectangleContourOptions.md +0 -72
- package/dist/docs/reference/model/RectangleCornerTreatment.md +0 -40
- package/dist/docs/reference/model/RectangleCornerTreatments.md +0 -20
- package/dist/docs/reference/model/RegionData.md +0 -19
- package/dist/docs/reference/model/RevolveOptions.md +0 -94
- package/dist/docs/reference/model/RoundedEdgeTreatment.md +0 -96
- package/dist/docs/reference/model/SmoothEdgeTreatment.md +0 -76
- package/dist/docs/reference/model/SphereOptions.md +0 -20
- package/dist/docs/reference/model/SquareThreadProfileSpec.md +0 -80
- package/dist/docs/reference/model/StarContourOptions.md +0 -81
- package/dist/docs/reference/model/StrokeCap.md +0 -16
- package/dist/docs/reference/model/StrokeJoin.md +0 -16
- package/dist/docs/reference/model/StrokeOptions.md +0 -91
- package/dist/docs/reference/model/SweepOptions.md +0 -116
- package/dist/docs/reference/model/SweepOrientation.md +0 -116
- package/dist/docs/reference/model/ThreadBevelOptions.md +0 -35
- package/dist/docs/reference/model/ThreadEndStyle.md +0 -15
- package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +0 -118
- package/dist/docs/reference/model/ThreadHandedness.md +0 -15
- package/dist/docs/reference/model/ThreadLeadInEnvelope.md +0 -15
- package/dist/docs/reference/model/ThreadLeadInShape.md +0 -15
- package/dist/docs/reference/model/ThreadProfile.md +0 -87
- package/dist/docs/reference/model/ThreadProfileBaseSpec.md +0 -54
- package/dist/docs/reference/model/ThreadProfileSpec.md +0 -24
- package/dist/docs/reference/model/ThreadRidgeOptions.md +0 -141
- package/dist/docs/reference/model/ThreadSolidPreflight.md +0 -59
- package/dist/docs/reference/model/ThreadedNutOptions.md +0 -263
- package/dist/docs/reference/model/ThreadedNutPreflight.md +0 -111
- package/dist/docs/reference/model/ThreadedNutShape.md +0 -15
- package/dist/docs/reference/model/ThreadedRodOptions.md +0 -216
- package/dist/docs/reference/model/TorusOptions.md +0 -110
- package/dist/docs/reference/model/Transform2-type.md +0 -257
- package/dist/docs/reference/model/Transform2Data.md +0 -16
- package/dist/docs/reference/model/Transform2Input.md +0 -21
- package/dist/docs/reference/model/Transform3-type.md +0 -297
- package/dist/docs/reference/model/Transform3Data.md +0 -19
- package/dist/docs/reference/model/Transform3Input.md +0 -21
- package/dist/docs/reference/model/TrapezoidalThreadProfileSpec.md +0 -97
- package/dist/docs/reference/model/TriangleMesh.md +0 -34
- package/dist/docs/reference/model/TriangleMeshAnalysis.md +0 -129
- package/dist/docs/reference/model/TriangleMeshMeasurements.md +0 -79
- package/dist/docs/reference/model/TriangleMeshTopologyAnalysis.md +0 -131
- package/dist/docs/reference/model/TriangularThreadProfileSpec.md +0 -96
- package/dist/docs/reference/model/TubeOptions.md +0 -67
- package/dist/docs/reference/model/Vector2-type.md +0 -271
- package/dist/docs/reference/model/Vector2Data.md +0 -15
- package/dist/docs/reference/model/Vector2Input.md +0 -21
- package/dist/docs/reference/model/Vector3-type.md +0 -283
- package/dist/docs/reference/model/Vector3Data.md +0 -15
- package/dist/docs/reference/model/Vector3Input.md +0 -21
- package/dist/docs/reference/model/VectorTextLayout.md +0 -40
- package/dist/docs/reference/model/VectorTextMetrics.md +0 -100
- package/dist/docs/reference/model/bounds2.md +0 -37
- package/dist/docs/reference/model/bounds3.md +0 -37
- package/dist/docs/reference/model/categories/bounds.md +0 -38
- package/dist/docs/reference/model/categories/contracts.md +0 -16
- package/dist/docs/reference/model/categories/core-values-errors.md +0 -44
- package/dist/docs/reference/model/categories/paths.md +0 -42
- package/dist/docs/reference/model/categories/resolution.md +0 -20
- package/dist/docs/reference/model/immutableBuffer.md +0 -49
- package/dist/docs/reference/model/isGeometryError.md +0 -34
- package/dist/docs/reference/model/path2.md +0 -54
- package/dist/docs/reference/model/path3.md +0 -49
- package/dist/docs/reference/model/transform2.md +0 -46
- package/dist/docs/reference/model/transform3.md +0 -48
- package/dist/docs/reference/model/vector2.md +0 -40
- package/dist/docs/reference/model/vector3.md +0 -47
- package/dist/docs/reference/text/Bounds2Data.md +0 -34
- package/dist/docs/reference/text/Vector2Data.md +0 -7
- package/dist/docs/reference/text/VectorTextArcBaseline.md +0 -53
- package/dist/docs/reference/text/VectorTextLayout.md +0 -34
- package/dist/docs/reference/text/VectorTextLayoutOptions.md +0 -111
- package/dist/docs/reference/text/VectorTextMetrics.md +0 -94
- package/dist/docs/reference/text/VectorTextOptions.md +0 -50
- package/dist/engine/export-3mf.js +0 -23
- package/dist/engine/serialize-3mf.js +0 -116
- /package/dist/{engine → geometry/mesh}/mesh-view-cache.js +0 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Choose resolution and check geometry
|
|
2
|
+
|
|
3
|
+
Set physical sampling, understand preflight limits, and inspect evaluated dimensions and topology.
|
|
4
|
+
|
|
5
|
+
Choose enough geometric detail for the feature you are making, then check the generated result.
|
|
6
|
+
Sampling policy, preflight reports, and inspection answer different questions; a successful check
|
|
7
|
+
does not establish a suitable manufacturing fit.
|
|
8
|
+
|
|
9
|
+
## Coordinates, units, and resolution
|
|
10
|
+
|
|
11
|
+
MetaMesh uses a right-handed coordinate system with **+Z up**. Authored dimensions and curve
|
|
12
|
+
tolerances are millimetres; angular arguments such as `rotate` use degrees.
|
|
13
|
+
Pure [`rotate2`](../reference/geometry/rotate2.md) and transform-value rotations also take degrees.
|
|
14
|
+
The low-level [`rotationTransform3`](../reference/geometry/rotationTransform3.md) constructor
|
|
15
|
+
requires an explicit `{ degrees }` or `{ radians }` angle.
|
|
16
|
+
|
|
17
|
+
`GeometryResolution` controls sampled curves in physical space. Defaults are a `0.05 mm` maximum
|
|
18
|
+
chord error, 16–512 segments per complete circle, and no maximum segment length. Settings apply
|
|
19
|
+
in this order:
|
|
20
|
+
|
|
21
|
+
1. An operation-specific `segments` or `circularSegments` count.
|
|
22
|
+
2. The operation's local `resolution`.
|
|
23
|
+
3. Host session defaults.
|
|
24
|
+
|
|
25
|
+
A shape doesn't carry its sampling policy into later operations; pass it explicitly where needed.
|
|
26
|
+
|
|
27
|
+
Use an exact segment count for intentionally faceted geometry or when two sampled contours must
|
|
28
|
+
match point for point. Use physical chord and segment limits for ordinary printable curves. If a
|
|
29
|
+
requested tolerance can't fit within the safety cap, the operation fails instead of silently
|
|
30
|
+
returning a coarser shape.
|
|
31
|
+
|
|
32
|
+
## Check preflight guarantees
|
|
33
|
+
|
|
34
|
+
Use a preflight to check inputs and see what an operation will require. Each preflight checks
|
|
35
|
+
different things, so read what its report covers:
|
|
36
|
+
|
|
37
|
+
- [`mesh.preflightHeightfield`](../reference/mesh/preflightHeightfield.md) checks grid dimensions,
|
|
38
|
+
coordinate precision, and allocation limits. It returns exact output-buffer vertex, triangle,
|
|
39
|
+
and byte counts without evaluating heights.
|
|
40
|
+
- [`mesh.preflightThreadSolid`](../reference/mesh/preflightThreadSolid.md)
|
|
41
|
+
and related thread preflights check dimensions, sampling, and conservative allocation estimates.
|
|
42
|
+
They return the sampling plan without constructing the final mesh or native solid.
|
|
43
|
+
- [`preflightSvgRegion`](../reference/geometry/preflightSvgRegion.md) parses and samples supported
|
|
44
|
+
SVG geometry, returning a normalized region and import diagnostics. Its counts measure the region
|
|
45
|
+
at the selected resolution; they do not predict later mesh allocation.
|
|
46
|
+
|
|
47
|
+
The `/geometry` and `mesh` preflights run without an engine and use explicit options or package defaults.
|
|
48
|
+
The root [`preflightThreadedRod`](../reference/model/preflightThreadedRod.md),
|
|
49
|
+
[`preflightInternalThreadCutter`](../reference/model/preflightInternalThreadCutter.md), and
|
|
50
|
+
[`preflightThreadedNut`](../reference/model/preflightThreadedNut.md) require active synchronous
|
|
51
|
+
model execution and use the host's resolution and limits.
|
|
52
|
+
|
|
53
|
+
Passing a preflight covers only its documented checks. Construction can still fail while running
|
|
54
|
+
callbacks, meshing, or evaluating native geometry. Constructors enforce their limits even when
|
|
55
|
+
you skip a preflight; use one when its plan or diagnostics help you make a decision.
|
|
56
|
+
|
|
57
|
+
## Lifecycle and inspection
|
|
58
|
+
|
|
59
|
+
Studio or your standalone host handles initialization, cleanup, finalization, Worker recovery,
|
|
60
|
+
preview, and file delivery. Don't manually delete `Section` or `Solid` values. Use
|
|
61
|
+
`shape.inspect()` for bounds, topology counts, area, and volume.
|
|
62
|
+
Its immutable extrema are nested under `facts.bounds.min` and `facts.bounds.max`.
|
|
63
|
+
Native `componentCount` counts disconnected material components. Mesh analysis and signatures use
|
|
64
|
+
`shellCount` for surfaces connected by shared indexed edges: one sealed hollow body has one material
|
|
65
|
+
component and two shells. Open mesh analysis can also count open shells; this count does not certify
|
|
66
|
+
closed topology or geometric validity.
|
|
67
|
+
|
|
68
|
+
Queries such as `shape.inspect()`, `shape.isEmpty()`, `shape.components()`, `shape.anchor(name)`,
|
|
69
|
+
`solid.distance(other)`, and `solid.castSegment(origin, endpoint)` read evaluated geometry.
|
|
70
|
+
These queries and interchange with `solid.toMesh()` or `section.toRegionData()` require the host's
|
|
71
|
+
active synchronous generation. `solid.split(cutter)` returns the intersection and remainder;
|
|
72
|
+
`solid.splitByPlane(plane)` returns the positive and negative sides of the plane.
|
|
73
|
+
Constructing or combining a recipe outside generation doesn't evaluate it.
|
|
74
|
+
|
|
75
|
+
An inspection result describes the generated geometry; it doesn't certify wall thickness,
|
|
76
|
+
overhangs, fits, loads, or manufacturability. Express those requirements in your parameters and
|
|
77
|
+
validation, then check them in your manufacturing workflow.
|
|
78
|
+
|
|
79
|
+
Before preview or export, the host finalizes returned geometry under its configured validation
|
|
80
|
+
and resource policy. Inspecting one shape does not finalize every returned part.
|
|
81
|
+
|
|
82
|
+
## Solid inspection
|
|
83
|
+
|
|
84
|
+
Use `solid.inspect()` during generation to check bounds, volume, and component count. This example
|
|
85
|
+
runs inside a [Studio code Project](https://metamesh.studio/docs/develop/code-projects); a standalone program uses the
|
|
86
|
+
same queries inside its synchronous generation callback:
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
import { box } from "@metamesh/modeling";
|
|
92
|
+
import { generate } from "@metamesh/project";
|
|
93
|
+
|
|
94
|
+
export default generate(({ part }) => {
|
|
95
|
+
const result = box({ size: [40, 30, 5] });
|
|
96
|
+
const measurements = result.inspect();
|
|
97
|
+
|
|
98
|
+
if (measurements.bounds.min[2] < -2.5 || measurements.componentCount !== 1) {
|
|
99
|
+
throw new Error("Unexpected placement or disconnected result.");
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return [part("model", result)];
|
|
103
|
+
});
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
Use [`layoutRow`](../reference/geometry/layoutRow.md) to arrange pieces along +X with an explicit
|
|
109
|
+
gap and place their minimum Y/Z at zero. Pass bounds after any intended rotation, then use the
|
|
110
|
+
returned translations in `part` placement options so you can reuse the geometry.
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
```ts
|
|
115
|
+
import { box, generate, transform3 } from "@metamesh/modeling";
|
|
116
|
+
import { layoutRow } from "@metamesh/modeling/geometry";
|
|
117
|
+
|
|
118
|
+
export const rowModel = generate<Record<never, never>>(({ part }) => {
|
|
119
|
+
const pieces = [box({ size: [20, 10, 6] }), box({ size: [12, 16, 8] })];
|
|
120
|
+
const positions = layoutRow(
|
|
121
|
+
pieces.map((piece) => piece.inspect().bounds),
|
|
122
|
+
{ gap: 4 }
|
|
123
|
+
);
|
|
124
|
+
return pieces.map((geometry, index) =>
|
|
125
|
+
part(`piece-${index}`, { geometry, transform: transform3().translate(positions[index]!) })
|
|
126
|
+
);
|
|
127
|
+
});
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
Check the default, smallest and largest supported dimensions, and every optional feature after
|
|
133
|
+
adapting a recipe. Inspect the current result before [exporting it](https://metamesh.studio/docs/use/export-3mf).
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Join a feature to a base
|
|
2
|
+
|
|
3
|
+
Add a smooth or straight transition between independently modeled solids while retaining their geometry.
|
|
4
|
+
|
|
5
|
+
Use a solid join to connect a mounting boss, handle root, or similar feature to a base. Model and
|
|
6
|
+
position the complete feature first. Choose a smooth blend or straight transition; both retain
|
|
7
|
+
the supplied solids and their existing details.
|
|
8
|
+
|
|
9
|
+
Run the examples in a [Studio code Project](https://metamesh.studio/docs/develop/code-projects), where Studio supplies
|
|
10
|
+
typed controls and prepared services. For a local model, follow the
|
|
11
|
+
[standalone workflow](standalone-model.md) and use its host entry point.
|
|
12
|
+
|
|
13
|
+
## Join an independently modeled feature
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { box, cylinder } from "@metamesh/modeling";
|
|
19
|
+
import { anchor3 } from "@metamesh/modeling/geometry";
|
|
20
|
+
import { generate } from "@metamesh/project";
|
|
21
|
+
|
|
22
|
+
const base = box({ size: [40, 28, 6] });
|
|
23
|
+
const feature = cylinder({
|
|
24
|
+
diameter: 12,
|
|
25
|
+
height: 14,
|
|
26
|
+
center: false,
|
|
27
|
+
ends: { top: { kind: "chamfer", distance: 0.5 } },
|
|
28
|
+
})
|
|
29
|
+
.translate([0, 0, 2])
|
|
30
|
+
.subtract(
|
|
31
|
+
cylinder({ diameter: 4, height: 16, center: false }).rotate([90, 0, 0]).translate([0, 8, 12])
|
|
32
|
+
)
|
|
33
|
+
// Boolean geometry defines its own datum; the collar below the cross-bore stays straight.
|
|
34
|
+
.withAnchors({ mount: anchor3([0, 0, 2], [0, 0, -1]) });
|
|
35
|
+
|
|
36
|
+
const mount = base.join(feature, {
|
|
37
|
+
source: "mount",
|
|
38
|
+
transition: { width: 3, height: 4 },
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
export default generate(({ part }) => part("mount", mount));
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The supplied boss keeps its top chamfer and cross-bore; the join adds only the root transition.
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
Construct and position the feature independently. Here its lower cap lies inside the plate,
|
|
49
|
+
and a straight collar remains below the cross-bore. The Boolean-composed feature defines a
|
|
50
|
+
`mount` datum with its outward normal pointing toward the base. `source: "mount"` resolves that
|
|
51
|
+
datum when the join evaluates, so the completed recipe can be declared before an engine exists.
|
|
52
|
+
|
|
53
|
+
The result has no inherited anchors. Define result datums with `withAnchors` when later work needs them.
|
|
54
|
+
|
|
55
|
+
## Define the connection
|
|
56
|
+
|
|
57
|
+
Call [`solid.join(feature, options)`](../reference/model/Solid.md#join) after constructing and
|
|
58
|
+
positioning the feature. Supply `source`, a named feature datum or explicit `Anchor3`, and a
|
|
59
|
+
`transition` with `width`, `height`, and optional `kind`. The named datum resolves lazily;
|
|
60
|
+
recipe declaration needs no engine.
|
|
61
|
+
The source plane may lie in empty space when the existing feature already spans the selected
|
|
62
|
+
support patch; it is a lower datum, not a required contact plane.
|
|
63
|
+
Joining preserves both operands and adds material, while `union` remains ordinary Boolean fusion.
|
|
64
|
+
|
|
65
|
+
The datum selects the complete feature section in its plane. Holes and disconnected roots are
|
|
66
|
+
supported when each satisfies the same connection requirements. Two straight roots sharing a
|
|
67
|
+
datum plane and axis can therefore receive their transitions in one join; the datum is not a
|
|
68
|
+
selector for the nearest root.
|
|
69
|
+
|
|
70
|
+
Only the local feature collar must be straight and constant-section. The rest of the feature may
|
|
71
|
+
contain bores or other geometry. The actual support patch may be planar, tilted, or curved when
|
|
72
|
+
it forms a continuous height chart along that collar's axis. Unsupported or ambiguous contact,
|
|
73
|
+
an incomplete collar, a gap, or exhausted validation rejects. Joining never positions or extends
|
|
74
|
+
the feature. The straight collar must continue by `height` beyond the highest support contact
|
|
75
|
+
anywhere under the expanded footprint, including its outer transition boundary.
|
|
76
|
+
|
|
77
|
+
Join `width` is the projected normal offset from the feature boundary and `height` is reach along
|
|
78
|
+
its collar axis above local contact. Miter corners can extend farther than the width. Both dimensions
|
|
79
|
+
must be positive, or both zero to disable added blending while still validating the connection.
|
|
80
|
+
|
|
81
|
+
## Choose the transition
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import { box, transform3 } from "@metamesh/modeling";
|
|
87
|
+
import { generate } from "@metamesh/project";
|
|
88
|
+
|
|
89
|
+
const base = box({ size: [24, 20, 4] });
|
|
90
|
+
const rib = box({ size: [8, 4, 12] }).translate([0, 0, 7]);
|
|
91
|
+
|
|
92
|
+
const smooth = base.join(rib, {
|
|
93
|
+
source: "bottom",
|
|
94
|
+
transition: { width: 2, height: 3 },
|
|
95
|
+
});
|
|
96
|
+
const straight = base.join(rib, {
|
|
97
|
+
source: "bottom",
|
|
98
|
+
transition: { kind: "straight", width: 2, height: 3 },
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
export default generate(({ part }) => [
|
|
102
|
+
part("smooth", {
|
|
103
|
+
geometry: smooth,
|
|
104
|
+
color: "#6f9eaa",
|
|
105
|
+
transform: transform3().translate([-16, 0, 0]),
|
|
106
|
+
}),
|
|
107
|
+
part("straight", {
|
|
108
|
+
geometry: straight,
|
|
109
|
+
color: "#d6aa58",
|
|
110
|
+
transform: transform3().translate([16, 0, 0]),
|
|
111
|
+
}),
|
|
112
|
+
]);
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
- `"smooth"` is the default and adds a tangent-matching cubic blend.
|
|
118
|
+
- `"straight"` adds a linear planar bevel along each sampled support facet. On curved support,
|
|
119
|
+
this does not imply one constant bevel angle around the connection.
|
|
120
|
+
|
|
121
|
+
These settings describe transition width and height, rather than a circular fillet radius.
|
|
122
|
+
`"chamfer"` and `"round"` are not join kinds, and a `radius` option is rejected. Use the
|
|
123
|
+
[`JoinOptions`](../reference/model/JoinOptions.md) contract for exact fields. Apply independent
|
|
124
|
+
[free-end finishing](profiles-and-extrusion.md#finish-a-profile-with-a-hole) while
|
|
125
|
+
constructing the feature. Sampling follows the physical policy and preserves the operands'
|
|
126
|
+
supplied facets.
|
|
@@ -40,4 +40,4 @@ pnpm exec metamesh run model.ts --kind model
|
|
|
40
40
|
Continue with [inspection and rendering](https://metamesh.studio/docs/develop/agent-authoring#inspect-the-captured-result),
|
|
41
41
|
or [host the program in your application](hosting.md).
|
|
42
42
|
When you're ready for a different shape, the
|
|
43
|
-
[construction chooser](
|
|
43
|
+
[construction chooser](recipes.md#choose-a-technique) helps you pick an approach.
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# Make solids from SVG and text
|
|
2
|
+
|
|
3
|
+
Extrude imported SVG artwork or exact-font lettering, and fit its visible outline in millimetres.
|
|
4
|
+
|
|
5
|
+
Build a badge, sign, or label from vector artwork. SVG controls supply painted shapes; Font and
|
|
6
|
+
Text controls supply exact lettering. Both become filled Sections that you can extrude or combine
|
|
7
|
+
with other material.
|
|
8
|
+
|
|
9
|
+
Run the examples in a [Studio code Project](https://metamesh.studio/docs/develop/code-projects), where Studio supplies
|
|
10
|
+
typed controls and prepared services. For a local model, follow the
|
|
11
|
+
[standalone workflow](standalone-model.md) and use its host entry point.
|
|
12
|
+
|
|
13
|
+
## SVG sections: fills and strokes are different inputs
|
|
14
|
+
|
|
15
|
+
Use `svgSection` for a complete SVG document, where supported visible fills and bounded strokes
|
|
16
|
+
contribute material. Use `svgPathSection` for path-data text: it is fill-only and does not apply
|
|
17
|
+
stroke styling. Both convert SVG’s Y-down coordinates to the model’s Y-up plane and center the
|
|
18
|
+
painted bounds by default. `origin: "document"` retains the converted document viewport origin.
|
|
19
|
+
|
|
20
|
+
## SVG parameter and extrusion
|
|
21
|
+
|
|
22
|
+
Pass an SVG control's string value from `params` directly to `svgSection`. This example aliases
|
|
23
|
+
`params` as `parameters`:
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import { svgSection } from "@metamesh/modeling";
|
|
29
|
+
import { generate } from "@metamesh/project";
|
|
30
|
+
|
|
31
|
+
export default generate(({ params: parameters, part }) => {
|
|
32
|
+
const profile = svgSection(parameters.profile6);
|
|
33
|
+
return [part("model", profile.extrude({ height: 3, center: true }))];
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
The property name matches the ID in **Model controls**: `profile6` in this example, or
|
|
40
|
+
`parameters.logo` for a control with ID `logo`.
|
|
41
|
+
|
|
42
|
+
`svgSection` also accepts literal SVG documents. Here two nested subpaths make a badge
|
|
43
|
+
with a rectangular opening:
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
import { svgSection } from "@metamesh/modeling";
|
|
49
|
+
import { generate } from "@metamesh/project";
|
|
50
|
+
|
|
51
|
+
export default generate(({ part }) => {
|
|
52
|
+
// Physical root units make the imported artwork exactly 48 × 32 mm.
|
|
53
|
+
// Even-odd filling turns the second closed subpath into an opening.
|
|
54
|
+
const badge = svgSection(`
|
|
55
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="48mm" height="32mm" viewBox="0 0 48 32">
|
|
56
|
+
<path
|
|
57
|
+
fill-rule="evenodd"
|
|
58
|
+
d="M 0 0 H 48 V 32 H 0 Z M 14 8 H 34 V 24 H 14 Z"
|
|
59
|
+
/>
|
|
60
|
+
</svg>
|
|
61
|
+
`);
|
|
62
|
+
// Check the imported topology before using it in the manufacturing solid.
|
|
63
|
+
const measurements = badge.inspect();
|
|
64
|
+
if (measurements.componentCount !== 1 || measurements.contourCount !== 2) {
|
|
65
|
+
throw new Error("Expected one badge with one rectangular opening.");
|
|
66
|
+
}
|
|
67
|
+
return [part("model", badge.extrude({ height: 4, center: true }))];
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
The 48 × 32 mm SVG document retains its physical size and even-odd opening after extrusion.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
The even-odd fill rule makes the second subpath a hole regardless of winding. Complete documents
|
|
76
|
+
honor supported physical root units and `viewBox`. With `svgPathSection`, one user unit defaults
|
|
77
|
+
to 1 mm; its `scale` option chooses another millimetres-per-unit conversion.
|
|
78
|
+
|
|
79
|
+
To choose the finished artwork size, pass `fit` with positioned XY bounds. Fitting preserves
|
|
80
|
+
aspect ratio and centers the painted geometry inside the target; unused SVG canvas margins do
|
|
81
|
+
not reserve space. Adaptive curve tolerance and edge spacing apply at the final millimetre size:
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import { bounds2, svgSection } from "@metamesh/modeling";
|
|
87
|
+
import { generate } from "@metamesh/project";
|
|
88
|
+
|
|
89
|
+
export default generate(({ part }) => {
|
|
90
|
+
const artwork = svgSection('<svg><circle r="1"/></svg>', {
|
|
91
|
+
fit: bounds2({ size: [30, 18] }),
|
|
92
|
+
resolution: { maxChordError: 0.05 },
|
|
93
|
+
});
|
|
94
|
+
return part("artwork", artwork.extrude({ height: 0.8 }));
|
|
95
|
+
});
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
To prepare SVG without an engine, `preflightSvgRegion` from `@metamesh/modeling/geometry` accepts
|
|
101
|
+
the same fit target and returns its applied `fit`, final region, and review metrics. The scale
|
|
102
|
+
and translation map the selected origin's SVG millimetres to model millimetres. Reuse them to
|
|
103
|
+
align layers imported with the same document coordinate system and origin.
|
|
104
|
+
Exact circular segment counts retain precedence over adaptive sampling. Empty artwork cannot
|
|
105
|
+
be fitted, and fitting rejects a requested resolution that exceeds the sampling limits.
|
|
106
|
+
|
|
107
|
+
Visible fills and bounded strokes contribute geometry; editor metadata is ignored. Editor text is
|
|
108
|
+
outlined to visible paths on Apply. Live `<text>`, images, `<use>`, external resources, class-based
|
|
109
|
+
stylesheets, nested SVG viewports, clipping, masks, filters, scripts, animation, gradients, patterns,
|
|
110
|
+
and percentage dimensions are rejected. To generate lettering
|
|
111
|
+
directly, use the [text recipe](#text-from-a-font-parameter). These helpers don't support SVG export,
|
|
112
|
+
project assets, custom font uploads, text on paths, or general SVG layout.
|
|
113
|
+
|
|
114
|
+
## Text and font variability
|
|
115
|
+
|
|
116
|
+
Studio prepares the selected font before generation. `services.text.layout()` shapes the text
|
|
117
|
+
synchronously; cache an expensive shared layout with `memo`, then pass it to `textSection`. A
|
|
118
|
+
stable helper that needs parameters and fixed services receives the full generation context.
|
|
119
|
+
There is no ambient font provider, and export uses the captured mesh rather than shaping again.
|
|
120
|
+
|
|
121
|
+
## Text from a Font parameter
|
|
122
|
+
|
|
123
|
+
Use this recipe for a label, plaque, or raised lettering whose font remains adjustable.
|
|
124
|
+
|
|
125
|
+
1. Open **Model controls**, add a **Font** control with ID `font`, and choose its default face and
|
|
126
|
+
weight. Outfit and JetBrains Mono are bundled starter fonts.
|
|
127
|
+
2. Choose **Apply & return** and use the generation program below in `model.ts`.
|
|
128
|
+
Studio prepares the selected font before the program lays out and extrudes its text.
|
|
129
|
+
3. To make the wording adjustable, add a **Text** control with ID `label` and a non-empty default,
|
|
130
|
+
then replace the literal `"MetaMesh"` with `params.label`.
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
```ts
|
|
135
|
+
import { textSection } from "@metamesh/modeling";
|
|
136
|
+
import { generate } from "@metamesh/project";
|
|
137
|
+
|
|
138
|
+
export default generate(({ params, services, part }) => {
|
|
139
|
+
// The host has loaded the exact selected font before generation.
|
|
140
|
+
const layout = services.text.layout("MetaMesh", {
|
|
141
|
+
fontSize: 8,
|
|
142
|
+
font: params.font,
|
|
143
|
+
letterSpacing: 0.15,
|
|
144
|
+
});
|
|
145
|
+
// textSection preserves counters, such as the enclosed hole in the letter a.
|
|
146
|
+
return [part("label", textSection(layout).extrude({ height: 1.2 }))];
|
|
147
|
+
});
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
The poster uses a pinned bundled Outfit face and preserves the counters inside each letter.
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
`textSection(layout)` converts prepared vector curves into a filled section, preserving holes in
|
|
155
|
+
letters. Extrude that section or combine it with other sections and solids. Use `layout.metrics`
|
|
156
|
+
and its visible `bounds` to size a backing plate or reject text without visible outlines.
|
|
157
|
+
|
|
158
|
+
Check a positioned label with [`bounds.containsBounds()`](../reference/geometry/bounds2.md),
|
|
159
|
+
using [`bounds2({ size })`](../reference/geometry/bounds2.md) for the available rectangle.
|
|
160
|
+
Horizontal `align: "center"` centers advance width; visible ink can remain asymmetric.
|
|
161
|
+
To resize the ink uniformly and center it inside a target, use
|
|
162
|
+
[`fitTextLayout`](../reference/geometry/fitTextLayout.md) before `textSection`. It transforms
|
|
163
|
+
the retained vector paths before sampling, keeping curve tolerance in final millimetres.
|
|
164
|
+
`maxScale: 1` permits shrinking without enlargement. Choose a minimum readable letter height
|
|
165
|
+
and write parameter-specific error messages for your model.
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
```ts
|
|
170
|
+
import {
|
|
171
|
+
bounds2,
|
|
172
|
+
fitTextLayout,
|
|
173
|
+
type FittedTextLayout,
|
|
174
|
+
type VectorTextLayout,
|
|
175
|
+
} from "@metamesh/modeling/geometry";
|
|
176
|
+
|
|
177
|
+
export function labelFits(layout: VectorTextLayout): boolean {
|
|
178
|
+
const ink = layout.metrics.bounds;
|
|
179
|
+
return ink !== null && bounds2({ size: [40, 12] }).containsBounds(ink);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export function fitLabel(layout: VectorTextLayout): FittedTextLayout {
|
|
183
|
+
// Fit visible ink while preserving proportions and preventing enlargement.
|
|
184
|
+
return fitTextLayout(layout, bounds2({ size: [40, 12] }), { maxScale: 1 });
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
| Setting | Meaning |
|
|
191
|
+
| --------------- | ------------------------------------------------------------------------------ |
|
|
192
|
+
| `font` | The complete Font control value, including the exact face revision and weight |
|
|
193
|
+
| `fontSize` | Em size in millimetres; visible capital height depends on the font |
|
|
194
|
+
| `letterSpacing` | Extra millimetres between shaped glyph clusters |
|
|
195
|
+
| `align` | Left, center, or right alignment using the text's advance |
|
|
196
|
+
| `verticalAlign` | First-line baseline by default, or top, center, or bottom using visible bounds |
|
|
197
|
+
| `lineHeight` | Baseline-spacing multiplier; omitted uses the font's natural line spacing |
|
|
198
|
+
|
|
199
|
+
For a circular label, add a [`baseline`](../reference/geometry/VectorTextArcBaseline.md) with
|
|
200
|
+
`kind: "arc"` and a positive `radius` in millimetres to the layout options. The baseline is centered
|
|
201
|
+
at the XY origin; `centerAngle` chooses its alignment datum and `direction` chooses the
|
|
202
|
+
reading direction. Each shaped glyph group rotates without bending. Circular text requires one
|
|
203
|
+
line and baseline vertical alignment; its default horizontal alignment is centered. These helpers
|
|
204
|
+
don't support arbitrary path text or automatic wrapping.
|
|
205
|
+
|
|
206
|
+
Text uses positive Y upward and supports line breaks, with at most 512 UTF-16 units and 16 lines.
|
|
207
|
+
Empty or whitespace-only text can be measured but cannot create a section. Return a parameter error
|
|
208
|
+
for that expected input; a missing glyph also requires different wording or a font that supports it.
|
|
209
|
+
See [`TextSectionOptions`](../reference/model/TextSectionOptions.md) for exact options.
|
|
210
|
+
|
|
211
|
+
Studio loads declared fonts before generation. Export uses the captured visible mesh. Saving a Project
|
|
212
|
+
preserves the exact selection, including its revision, without embedding font bytes. Fonts beyond
|
|
213
|
+
the bundled starters can require internet; ordinary browser caching does not guarantee them offline.
|
|
214
|
+
If loading fails, Studio preserves the selection and last valid model so you can retry or choose a
|
|
215
|
+
replacement. Studio does not support custom font uploads.
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Build sweeps, lofts, and heightfields
|
|
2
|
+
|
|
3
|
+
Sweep a section along a curved path, blend different cross sections with a loft, or sample a heightfield.
|
|
4
|
+
|
|
5
|
+
Use a sweep when one cross section follows a route, a loft when cross sections change between
|
|
6
|
+
stations, or a heightfield when an XY grid can describe the top surface. Choose the representation
|
|
7
|
+
before increasing sampling detail.
|
|
8
|
+
|
|
9
|
+
Run the examples in a [Studio code Project](https://metamesh.studio/docs/develop/code-projects), where Studio supplies
|
|
10
|
+
typed controls and prepared services. For a local model, follow the
|
|
11
|
+
[standalone workflow](standalone-model.md) and use its host entry point.
|
|
12
|
+
|
|
13
|
+
## Rotation-minimizing path sweep
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { rectangle } from "@metamesh/modeling";
|
|
19
|
+
import { generate } from "@metamesh/project";
|
|
20
|
+
|
|
21
|
+
export default generate(({ part }) => {
|
|
22
|
+
// An asymmetric section makes the frame orientation visible in the result.
|
|
23
|
+
const section = rectangle({
|
|
24
|
+
size: [8, 3],
|
|
25
|
+
treatment: { kind: "round", radius: 0.8 },
|
|
26
|
+
});
|
|
27
|
+
const path = [
|
|
28
|
+
[0, 0, 0],
|
|
29
|
+
[15, 0, 8],
|
|
30
|
+
[25, 10, 18],
|
|
31
|
+
[25, 25, 24],
|
|
32
|
+
] as const;
|
|
33
|
+
// The initial normal sets profile +X; transport carries it along the path.
|
|
34
|
+
// The path is open, so the sweep closes both ends with caps.
|
|
35
|
+
return [
|
|
36
|
+
part(
|
|
37
|
+
"model",
|
|
38
|
+
section.sweep(path, { orientation: { kind: "transport", initialNormal: [0, 1, 0] } })
|
|
39
|
+
),
|
|
40
|
+
];
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The asymmetric section makes its transported orientation visible as the path turns.
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
`section.sweep(path, options)` transports a filled shape along a path:
|
|
49
|
+
|
|
50
|
+
- `orientation: { kind: "transport", initialNormal: [0, 1, 0] }` chooses the starting profile-X
|
|
51
|
+
direction. Fixed normals, directed normal guides, and discrete Frenet frames are alternatives;
|
|
52
|
+
the sweep rejects a selected policy that becomes singular.
|
|
53
|
+
- `twist` adds total rotation by physical path length. Set `twistBy: "stations"` to use the authored
|
|
54
|
+
station schedule instead.
|
|
55
|
+
- `scale` accepts a positive uniform size, an XY pair, or one XY pair per normalized station.
|
|
56
|
+
- `closed: true` joins an implicitly closed path without repeated endpoints. Orientation, scales,
|
|
57
|
+
and `seamProfileOffset` must describe a compatible closing seam.
|
|
58
|
+
|
|
59
|
+
Start with the open path above, inspect the first cap and the turns, then replace the rectangle
|
|
60
|
+
with a [`circle`](../reference/model/circle.md) for a round rod. A sweep follows the supplied path
|
|
61
|
+
stations; it does not infer a smooth curve between them. Sample a curve with the
|
|
62
|
+
[path helpers](../reference/geometry/categories/curves-paths.md) when you need a curved trajectory.
|
|
63
|
+
|
|
64
|
+
## Matched-section loft
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import { loft, rectangle } from "@metamesh/modeling";
|
|
70
|
+
import { generate } from "@metamesh/project";
|
|
71
|
+
|
|
72
|
+
export default generate(({ part }) => {
|
|
73
|
+
const base = rectangle({
|
|
74
|
+
size: [24, 16],
|
|
75
|
+
treatment: { kind: "round", radius: 3 },
|
|
76
|
+
});
|
|
77
|
+
// Transform the Section in its XY plane; loft supplies the station heights.
|
|
78
|
+
// Keeping the original rectangle landmarks preserves corner correspondence.
|
|
79
|
+
const top = base.scale([0.8, 1.2]).rotate(10).translate([3, 0]);
|
|
80
|
+
return [
|
|
81
|
+
part(
|
|
82
|
+
"model",
|
|
83
|
+
loft([
|
|
84
|
+
{
|
|
85
|
+
profile: base,
|
|
86
|
+
z: 0,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
profile: top,
|
|
90
|
+
z: 18,
|
|
91
|
+
},
|
|
92
|
+
])
|
|
93
|
+
),
|
|
94
|
+
];
|
|
95
|
+
});
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
The two rounded rectangles retain matching corner identities while their size and pose change.
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
This [`loft`](../reference/model/loft.md) example places a rounded rectangle at two heights. Use
|
|
103
|
+
`scale`, `rotate` and `translate` to pose the top profile in XY; `rotate` takes degrees. Each
|
|
104
|
+
station uses `z` for an ordinary horizontal plane. To tilt a station, pass
|
|
105
|
+
`frame: anchorFrame3(anchor3(position, direction, up))` instead; the direction chooses its
|
|
106
|
+
normal and a nonparallel `up` vector chooses its roll.
|
|
107
|
+
|
|
108
|
+
The primitive retains its corner identities, so `loft` pairs corresponding landmarks without
|
|
109
|
+
extra setup. The same approach works when corners become square or fully rounded. For a hollow
|
|
110
|
+
adapter, loft the outer shape and bore separately, then subtract the bore.
|
|
111
|
+
|
|
112
|
+
Compatible circle or ellipse stations can also transition to rectangles. Invertible XY transforms
|
|
113
|
+
must retain consistent handedness across the stations.
|
|
114
|
+
|
|
115
|
+
Custom hole topology or disconnected components can use an explicit
|
|
116
|
+
[`Profile`](../reference/geometry/Profile.md) family with stable component, contour, and span IDs.
|
|
117
|
+
Prepare [`matchProfiles`](../reference/geometry/matchProfiles.md) once and pass its
|
|
118
|
+
[`CorrespondingProfile`](../reference/geometry/CorrespondingProfile.md) stations to the same `loft`
|
|
119
|
+
function. Topology must remain constant across stations. Arbitrary Boolean Sections default to
|
|
120
|
+
`correspondence: "direct"`; choose `"reindex"`, `"fast-distance"`, or `"distance"` to change the
|
|
121
|
+
association strategy, or use explicit profiles for landmarks. Direct association preserves the supplied seams;
|
|
122
|
+
reindex also chooses a cyclic phase, while distance methods optimize ordered connections. See
|
|
123
|
+
[`LoftOptions`](../reference/geometry/LoftOptions.md) for sampling and work limits.
|
|
124
|
+
|
|
125
|
+
## Sample a heightfield
|
|
126
|
+
|
|
127
|
+
Build a relief tile from absolute Z heights over a rectangular XY grid.
|
|
128
|
+
[`heightfield`](../reference/model/heightfield.md) returns a Solid for Booleans and placement during
|
|
129
|
+
generation. Pure [`mesh.heightfield`](../reference/mesh/heightfield.md) accepts the same options
|
|
130
|
+
and returns an indexed mesh without an engine. Pass it directly as a mesh part, or wrap it in
|
|
131
|
+
[`mesh.immutable`](../reference/mesh/immutable.md) when returning it from a cached computation.
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
```ts
|
|
136
|
+
import { heightfield } from "@metamesh/modeling";
|
|
137
|
+
import { generate } from "@metamesh/project";
|
|
138
|
+
|
|
139
|
+
export default generate(({ part }) => {
|
|
140
|
+
return [
|
|
141
|
+
part(
|
|
142
|
+
"model",
|
|
143
|
+
heightfield({
|
|
144
|
+
coordinates: {
|
|
145
|
+
x: [-20, -18, -14, -8, 0, 8, 14, 18, 20],
|
|
146
|
+
y: [-12, -10, -6, 0, 6, 10, 12],
|
|
147
|
+
},
|
|
148
|
+
triangulation: "min-edge",
|
|
149
|
+
height: ([x, y]) => 3 + 0.8 * Math.cos(x / 6) * Math.cos(y / 5),
|
|
150
|
+
})
|
|
151
|
+
),
|
|
152
|
+
];
|
|
153
|
+
});
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
The uneven axes place more samples near the border. Coordinates are absolute millimetres, strictly
|
|
159
|
+
increasing, and must remain distinct in Float32 storage. For a uniform grid, replace `coordinates`
|
|
160
|
+
with `size: [40, 24]` and `segments: [40, 24]`; this centers the footprint unless `origin` supplies
|
|
161
|
+
its lower-left corner. Choose one sampling form per call.
|
|
162
|
+
|
|
163
|
+
`baseZ` defaults to zero. Every height is an absolute Z coordinate strictly above that base;
|
|
164
|
+
the builder preserves the sampled heights without rescaling them. It closes the top with shared
|
|
165
|
+
boundary walls and a flat underside.
|
|
166
|
+
|
|
167
|
+
| `triangulation` | Selection per top cell |
|
|
168
|
+
| ---------------- | ---------------------------------------------------------------------------- |
|
|
169
|
+
| `"fixed"` | The default lower-left to upper-right diagonal |
|
|
170
|
+
| `"min-edge"` | The shorter 3D diagonal, using the existing corner heights |
|
|
171
|
+
| `"center-error"` | The diagonal whose interpolated center is closest to one extra height sample |
|
|
172
|
+
|
|
173
|
+
All choices keep two triangles per cell and the same vertices. Center matching evaluates one
|
|
174
|
+
additional physical midpoint per cell. Both selection policies use the fixed diagonal for ties.
|
|
175
|
+
Choose sample spacing for the surface detail you need: these policies do not adapt the grid or
|
|
176
|
+
guarantee accuracy throughout each cell. Explicit axes let your model refine selected regions
|
|
177
|
+
while keeping allocation bounded.
|
|
178
|
+
[`mesh.preflightHeightfield`](../reference/mesh/preflightHeightfield.md) reports output counts and
|
|
179
|
+
checks limits without evaluating heights.
|