@metamesh/modeling 0.17.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 +186 -0
- package/README.md +147 -157
- package/dist/api/engine.d.ts +106 -83
- 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 +250 -461
- package/dist/api/index.d.ts +470 -445
- package/dist/api/mesh.d.ts +489 -0
- package/dist/api/text.d.ts +1 -1
- package/dist/docs/guides/concepts.md +32 -495
- package/dist/docs/guides/fonts.md +14 -13
- package/dist/docs/guides/fundamentals.md +30 -29
- package/dist/docs/guides/generation.md +84 -64
- package/dist/docs/guides/geometry-values.md +193 -0
- package/dist/docs/guides/hosting.md +147 -48
- package/dist/docs/guides/profiles-and-extrusion.md +252 -0
- package/dist/docs/guides/recipes.md +33 -769
- 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 +8 -7
- 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 +3224 -4430
- package/dist/docs/reference/engine/GenerationOptions.md +12 -5
- package/dist/docs/reference/engine/GeometryResource.md +19 -13
- package/dist/docs/reference/engine/ModelDependencies.md +9 -3
- package/dist/docs/reference/engine/ModelEngine.md +33 -24
- package/dist/docs/reference/engine/ModelEngineOptions.md +13 -2
- package/dist/docs/reference/engine/ModelPart.md +114 -0
- package/dist/docs/reference/engine/ModelResult.md +181 -0
- package/dist/docs/reference/engine/ModelRunArguments.md +34 -0
- package/dist/docs/reference/engine/ModelRunOptions.md +110 -0
- package/dist/docs/reference/engine/ModelSession.md +22 -16
- package/dist/docs/reference/engine/SessionOptions.md +21 -10
- package/dist/docs/reference/engine/categories/host-lifecycle.md +20 -15
- package/dist/docs/reference/engine/checkModel.md +49 -0
- package/dist/docs/reference/engine/createModelEngine.md +11 -13
- package/dist/docs/reference/engine/defaultModelingLimits.md +15 -2
- package/dist/docs/reference/engine/modelingWasmUrl.md +7 -1
- package/dist/docs/reference/engine.md +8 -15
- 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 +32 -0
- package/dist/docs/reference/geometry/BevelSize.md +28 -0
- 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 +61 -11
- 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 +61 -11
- 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 +12 -6
- 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 +13 -3
- 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 -3
- 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 +11 -5
- 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 +14 -4
- package/dist/docs/reference/geometry/EndTreatments.md +12 -2
- package/dist/docs/reference/{model/ExtrudeOptions.md → geometry/ExtrudeMeshOptions.md} +30 -26
- package/dist/docs/reference/geometry/ExtrudeOptions.md +29 -11
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +18 -4
- 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 +18 -3
- 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 +110 -0
- package/dist/docs/reference/geometry/ImmutableTriangleMesh.md +57 -0
- package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +63 -84
- 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 +18 -4
- 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 +28 -0
- 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 -3
- 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 +14 -4
- 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 +10 -4
- 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 +17 -3
- 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 +84 -0
- 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 +18 -31
- 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 +17 -3
- package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +16 -2
- package/dist/docs/reference/geometry/ThreadProfileSpec.md +16 -2
- package/dist/docs/reference/geometry/{HelicalThreadRidgeMeshOptions.md → ThreadRidgeOptions.md} +19 -5
- package/dist/docs/reference/geometry/ThreadRole.md +8 -2
- package/dist/docs/reference/geometry/{HelicalThreadSolidMeshOptions.md → ThreadSolidOptions.md} +29 -66
- package/dist/docs/reference/geometry/{HelicalThreadSolidMeshPreflight.md → ThreadSolidPreflight.md} +17 -3
- package/dist/docs/reference/geometry/ThreadedNutOptions.md +86 -87
- package/dist/docs/reference/geometry/ThreadedNutPreflight.md +29 -7
- package/dist/docs/reference/geometry/ThreadedNutShape.md +12 -2
- package/dist/docs/reference/geometry/ThreadedRodOptions.md +63 -84
- 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 +19 -6
- package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +25 -5
- package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +13 -3
- package/dist/docs/reference/geometry/TriangleMeshInput.md +29 -0
- 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 +14 -4
- 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 +145 -0
- 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 +20 -86
- 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 +14 -4
- 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 +18 -8
- package/dist/docs/reference/geometry/bounds3.md +18 -8
- 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 +11 -5
- package/dist/docs/reference/geometry/categories/bounds-layout.md +6 -6
- package/dist/docs/reference/geometry/categories/curves-paths.md +3 -3
- package/dist/docs/reference/geometry/categories/mechanical.md +9 -11
- package/dist/docs/reference/geometry/categories/meshes.md +20 -33
- package/dist/docs/reference/geometry/categories/pattern-placement.md +3 -3
- package/dist/docs/reference/geometry/categories/primitive-options.md +4 -4
- package/dist/docs/reference/geometry/categories/profiles-regions.md +6 -5
- package/dist/docs/reference/geometry/categories/resolution-errors.md +3 -3
- package/dist/docs/reference/geometry/categories/transforms-math.md +5 -4
- package/dist/docs/reference/geometry/categories/vector-import.md +4 -4
- 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 +10 -4
- 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/{model → geometry}/immutableBuffer.md +13 -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 +25 -26
- package/dist/docs/reference/geometry/preflightSvgRegion.md +8 -2
- package/dist/docs/reference/geometry/preflightThreadedNut.md +31 -27
- package/dist/docs/reference/geometry/preflightThreadedRod.md +25 -26
- 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 +17 -6
- package/dist/docs/reference/geometry/rectangleProfile.md +9 -3
- 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 +9 -3
- 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 +24 -16
- 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 +41 -0
- 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 +10 -10
- 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 +102 -0
- package/dist/docs/reference/mesh/analyzeQuality.md +62 -0
- package/dist/docs/reference/mesh/bounds.md +45 -0
- package/dist/docs/reference/mesh/categories/operations.md +57 -0
- package/dist/docs/reference/mesh/centroid.md +45 -0
- package/dist/docs/reference/mesh/extrude.md +79 -0
- package/dist/docs/reference/mesh/heightfield.md +57 -0
- package/dist/docs/reference/mesh/immutable.md +51 -0
- package/dist/docs/reference/mesh/join.md +47 -0
- package/dist/docs/reference/mesh/loft.md +83 -0
- package/dist/docs/reference/mesh/optimizePlanarPatches.md +102 -0
- package/dist/docs/reference/mesh/preflightHeightfield.md +48 -0
- package/dist/docs/reference/mesh/preflightThreadSolid.md +96 -0
- package/dist/docs/reference/mesh/render.md +57 -0
- package/dist/docs/reference/mesh/reverse.md +41 -0
- package/dist/docs/reference/{geometry/revolveMesh.md → mesh/revolve.md} +23 -17
- package/dist/docs/reference/mesh/signature.md +70 -0
- package/dist/docs/reference/mesh/sweep.md +92 -0
- package/dist/docs/reference/mesh/threadRidge.md +78 -0
- package/dist/docs/reference/mesh/threadSolid.md +96 -0
- package/dist/docs/reference/mesh/transform.md +53 -0
- package/dist/docs/reference/mesh/validate.md +75 -0
- package/dist/docs/reference/{geometry/validateSolidMesh.md → mesh/validateSolid.md} +23 -11
- package/dist/docs/reference/mesh.md +21 -0
- package/dist/docs/reference/model/CircleOptions.md +13 -7
- package/dist/docs/reference/model/DiagnosticOptions.md +21 -1
- package/dist/docs/reference/model/EllipseOptions.md +13 -7
- package/dist/docs/reference/model/GenerateCallback.md +11 -5
- package/dist/docs/reference/model/GenerateContext.md +26 -99
- package/dist/docs/reference/model/GenerationDiagnostic.md +19 -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 +26 -0
- 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 +8 -2
- package/dist/docs/reference/model/PartDeclaration.md +87 -0
- package/dist/docs/reference/model/PartGeometry.md +10 -4
- package/dist/docs/reference/model/PartOptions.md +16 -22
- 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 +196 -77
- package/dist/docs/reference/model/SectionHullOptions.md +13 -6
- package/dist/docs/reference/model/SectionInspection.md +12 -18
- 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 +339 -54
- package/dist/docs/reference/model/SolidInspection.md +12 -18
- package/dist/docs/reference/model/SolidSegmentHit.md +14 -4
- package/dist/docs/reference/model/StarOptions.md +53 -25
- 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 +13 -11
- 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 +11 -23
- package/dist/docs/reference/model/categories/generation.md +10 -15
- package/dist/docs/reference/model/categories/hinges.md +1 -4
- package/dist/docs/reference/model/categories/mesh-inspection.md +14 -9
- package/dist/docs/reference/model/categories/primitives.md +8 -24
- package/dist/docs/reference/model/categories/sections.md +6 -16
- package/dist/docs/reference/model/categories/threads.md +3 -30
- package/dist/docs/reference/model/categories/transforms-placement.md +5 -35
- 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 +28 -20
- package/dist/docs/reference/model/generate.md +10 -4
- 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 +21 -4
- 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 +31 -33
- package/dist/docs/reference/model/intersect.md +11 -4
- package/dist/docs/reference/model/join.md +89 -0
- package/dist/docs/reference/model/knuckleHinge.md +8 -2
- package/dist/docs/reference/model/linearPattern.md +15 -9
- package/dist/docs/reference/model/loft.md +36 -28
- 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 +33 -35
- package/dist/docs/reference/model/preflightThreadedNut.md +43 -40
- package/dist/docs/reference/model/preflightThreadedRod.md +33 -35
- 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 +25 -17
- package/dist/docs/reference/model/solidFromMesh.md +16 -9
- package/dist/docs/reference/model/sphere.md +13 -6
- package/dist/docs/reference/model/star.md +17 -11
- 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 +29 -21
- 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 +41 -38
- package/dist/docs/reference/model/threadedRod.md +31 -33
- package/dist/docs/reference/model/torus.md +20 -13
- package/dist/docs/reference/model/tube.md +13 -41
- package/dist/docs/reference/model/union.md +11 -4
- package/dist/docs/reference/model.md +11 -20
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +8 -2
- 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 +3 -15
- package/dist/docs/reference/text/prepareVectorFont.md +7 -1
- package/dist/docs/reference/text.md +4 -4
- package/dist/engine/execution.js +10 -6
- package/dist/engine/finalization.js +2 -74
- package/dist/engine/index.js +24 -30
- package/dist/engine/model-parts.js +8 -0
- package/dist/engine/model-summary.js +5 -5
- package/dist/engine/native/construction-mesh.js +41 -0
- package/dist/engine/native/index.js +1 -1
- package/dist/engine/native/material-components.js +5 -54
- package/dist/engine/native/mesh-observation.js +55 -0
- package/dist/engine/native/operations.js +0 -7
- package/dist/engine/native/regions.js +2 -1
- package/dist/engine/native/scoped-primitives.js +5 -4
- package/dist/engine/native/threads.js +14 -14
- package/dist/engine/{construction-operations.js → operations/construction.js} +25 -23
- package/dist/engine/{modeling-context.js → operations/context.js} +12 -10
- package/dist/engine/{operation-environment.js → operations/environment.js} +2 -2
- package/dist/engine/{extrusion-finishing.js → operations/extrusion-finishing.js} +23 -22
- package/dist/engine/{hole-cutter-operation.js → operations/hole-cutter.js} +3 -3
- package/dist/engine/{inspection-operations.js → operations/inspection.js} +6 -6
- package/dist/engine/operations/join-collar-profile.js +120 -0
- package/dist/engine/operations/join.js +508 -0
- package/dist/engine/{knuckle-hinge-operation.js → operations/knuckle-hinge.js} +4 -4
- package/dist/engine/{loft-operations.js → operations/loft.js} +13 -12
- package/dist/engine/{mechanical-operations.js → operations/mechanical.js} +2 -2
- package/dist/engine/{pattern-operations.js → operations/patterns.js} +4 -4
- package/dist/engine/{primitive-anchors.js → operations/primitives/anchors.js} +9 -4
- package/dist/engine/{primitive-operations.js → operations/primitives/construction.js} +18 -19
- package/dist/engine/{primitive-correspondence.js → operations/primitives/correspondence.js} +4 -4
- package/dist/engine/{profile-mesh.js → operations/primitives/profile-mesh.js} +12 -12
- package/dist/engine/{primitive-profiles.js → operations/primitives/profiles.js} +7 -7
- package/dist/engine/{section-operations.js → operations/sections.js} +8 -8
- package/dist/engine/{transform-operations.js → operations/transforms.js} +8 -8
- package/dist/engine/placement.js +3 -4
- package/dist/engine/recipe-realization.js +2 -2
- package/dist/engine/{deferred-context.js → session/deferred-context.js} +4 -4
- package/dist/engine/session/dependencies.js +93 -0
- package/dist/engine/session/graph.js +428 -0
- package/dist/engine/{session-native.js → session/native-cache.js} +2 -2
- package/dist/engine/{session.js → session/session.js} +20 -14
- package/dist/engine/{session-snapshot.js → session/snapshot-cache.js} +30 -60
- 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/anchors.js +4 -11
- package/dist/geometry/bounds-value.js +22 -12
- package/dist/geometry/heightfield.js +10 -12
- package/dist/{model → geometry}/immutable-buffer.js +31 -12
- package/dist/geometry/index.js +16 -22
- package/dist/geometry/join-geometry.js +839 -0
- package/dist/geometry/loft/loft.js +11 -6
- package/dist/geometry/mechanical/index.js +5 -5
- package/dist/geometry/mechanical/threads/bevel.js +24 -0
- package/dist/geometry/mechanical/{threads.js → threads/fit.js} +4 -4
- package/dist/geometry/mechanical/{thread-helices.js → threads/helices.js} +3 -3
- package/dist/geometry/mechanical/{thread-mesh-plan.js → threads/mesh-plan.js} +38 -53
- package/dist/geometry/mechanical/{thread-mesh.js → threads/mesh.js} +9 -9
- package/dist/geometry/mechanical/{thread-profiles.js → threads/profiles.js} +3 -3
- package/dist/geometry/mechanical/{thread-solids.js → threads/solids.js} +58 -89
- package/dist/geometry/mechanical/{thread-surface.js → threads/surface.js} +7 -8
- package/dist/geometry/mesh/mesh-centroid.js +3 -2
- package/dist/geometry/mesh/mesh-planar.js +27 -8
- package/dist/geometry/mesh/mesh-quality.js +2 -1
- package/dist/geometry/mesh/mesh-render.js +205 -0
- package/dist/geometry/mesh/mesh-signature.js +7 -6
- package/dist/geometry/mesh/mesh-solid-intersections.js +43 -17
- package/dist/geometry/mesh/mesh-solid.js +8 -5
- package/dist/geometry/mesh/mesh-types.js +1 -0
- package/dist/geometry/mesh/mesh.js +13 -22
- package/dist/geometry/mesh-api.js +15 -0
- package/dist/geometry/primitive-resolvers.js +42 -14
- package/dist/geometry/profiles/primitives/circle.js +19 -0
- package/dist/geometry/profiles/{shapes.js → primitives/ellipse.js} +6 -10
- package/dist/geometry/profiles/{rectangle.js → primitives/rectangle.js} +14 -12
- package/dist/geometry/profiles/primitives/regular-polygon.js +33 -0
- package/dist/geometry/profiles/primitives/star.js +28 -0
- package/dist/geometry/region-offset.js +278 -0
- package/dist/geometry/regions.js +11 -1
- package/dist/geometry/revolve/revolve-mesh.js +1 -1
- package/dist/geometry/{svg-import.js → svg/import.js} +10 -10
- package/dist/geometry/sweeps/sweep-mesh.js +1 -1
- package/dist/geometry/transform3.js +29 -0
- package/dist/index.js +2 -1
- package/dist/model/diagnostic-path.js +26 -0
- package/dist/model/execution-binding.js +3 -3
- package/dist/model/generation.js +9 -3
- package/dist/model/geometry-recipes.js +1 -1
- package/dist/model/immutable-generation-data.js +45 -14
- package/dist/model/join.js +1 -0
- package/dist/model/operations.js +34 -144
- package/dist/model/recipe-declaration.js +7 -2
- package/dist/model/shape-handles.js +31 -7
- package/dist/text/index.js +1 -1
- package/package.json +38 -11
- package/dist/docs/reference/engine/Export3mfOptions.md +0 -29
- package/dist/docs/reference/engine/ExportMeshPart.md +0 -65
- package/dist/docs/reference/engine/ModelSnapshot.md +0 -184
- package/dist/docs/reference/engine/SnapshotPart.md +0 -133
- package/dist/docs/reference/engine/validateModel.md +0 -48
- package/dist/docs/reference/geometry/ThreadedNutBevel.md +0 -14
- package/dist/docs/reference/geometry/analyzeTriangleMesh.md +0 -61
- package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +0 -56
- package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +0 -39
- package/dist/docs/reference/geometry/computeTriangleMeshSignature.md +0 -64
- package/dist/docs/reference/geometry/extrudeMesh.md +0 -77
- package/dist/docs/reference/geometry/heightfieldMesh.md +0 -52
- package/dist/docs/reference/geometry/helicalThreadRidgeMesh.md +0 -72
- package/dist/docs/reference/geometry/helicalThreadSolidMesh.md +0 -106
- package/dist/docs/reference/geometry/joinTriangleMeshes.md +0 -40
- package/dist/docs/reference/geometry/loftMesh.md +0 -77
- package/dist/docs/reference/geometry/meshBounds.md +0 -39
- package/dist/docs/reference/geometry/optimizePlanarPatches.md +0 -95
- package/dist/docs/reference/geometry/preflightHeightfield.md +0 -43
- package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +0 -105
- package/dist/docs/reference/geometry/reverseTriangleMesh.md +0 -34
- package/dist/docs/reference/geometry/sweepMesh.md +0 -86
- package/dist/docs/reference/geometry/transformTriangleMesh.md +0 -46
- package/dist/docs/reference/geometry/validateTriangleMesh.md +0 -63
- package/dist/docs/reference/model/Anchor3.md +0 -55
- package/dist/docs/reference/model/AttachOptions.md +0 -69
- 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 -70
- 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 -70
- 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/ChamferedEdgeTreatment.md +0 -35
- package/dist/docs/reference/model/CircleContourOptions.md +0 -21
- package/dist/docs/reference/model/CircularPrimitiveOptions.md +0 -64
- package/dist/docs/reference/model/Computed.md +0 -40
- 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/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/FinalizedModel.md +0 -131
- package/dist/docs/reference/model/FinalizedPart.md +0 -87
- package/dist/docs/reference/model/Frame3.md +0 -63
- package/dist/docs/reference/model/GeneratedPart.md +0 -97
- 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 -67
- package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +0 -141
- package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +0 -59
- package/dist/docs/reference/model/ImmutableBuffer-type.md +0 -84
- package/dist/docs/reference/model/ImmutableTriangleMesh.md +0 -38
- package/dist/docs/reference/model/InternalThreadCutterOptions.md +0 -246
- 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 -83
- 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 -41
- 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/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/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/ThreadRidgeOptions.md +0 -19
- package/dist/docs/reference/model/ThreadedNutBevel.md +0 -15
- package/dist/docs/reference/model/ThreadedNutOptions.md +0 -274
- package/dist/docs/reference/model/ThreadedNutPreflight.md +0 -99
- package/dist/docs/reference/model/ThreadedNutShape.md +0 -15
- package/dist/docs/reference/model/ThreadedRodOptions.md +0 -246
- 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/TriangleMesh.md +0 -42
- package/dist/docs/reference/model/TriangleMeshAnalysis.md +0 -123
- package/dist/docs/reference/model/TriangleMeshMeasurements.md +0 -79
- package/dist/docs/reference/model/TubeOptions.md +0 -143
- 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/anchor.md +0 -47
- package/dist/docs/reference/model/bounds2.md +0 -37
- package/dist/docs/reference/model/bounds3.md +0 -37
- package/dist/docs/reference/model/castSegment.md +0 -40
- package/dist/docs/reference/model/categories/bounds.md +0 -38
- package/dist/docs/reference/model/categories/contracts.md +0 -18
- package/dist/docs/reference/model/categories/core-values-errors.md +0 -30
- package/dist/docs/reference/model/categories/inspection.md +0 -29
- package/dist/docs/reference/model/categories/paths.md +0 -41
- package/dist/docs/reference/model/categories/resolution.md +0 -20
- package/dist/docs/reference/model/components.md +0 -71
- package/dist/docs/reference/model/compose.md +0 -31
- package/dist/docs/reference/model/distance.md +0 -45
- package/dist/docs/reference/model/immutableMesh.md +0 -44
- package/dist/docs/reference/model/inspectSection.md +0 -38
- package/dist/docs/reference/model/inspectSolid.md +0 -38
- package/dist/docs/reference/model/isEmpty.md +0 -39
- package/dist/docs/reference/model/path2.md +0 -54
- package/dist/docs/reference/model/path3.md +0 -49
- package/dist/docs/reference/model/split.md +0 -54
- package/dist/docs/reference/model/splitByPlane.md +0 -66
- 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 -116
- package/dist/engine/model-dependencies.js +0 -46
- package/dist/engine/session-graph.js +0 -449
- package/dist/geometry/profiles/profiles.js +0 -71
- /package/dist/engine/{primitive-profile-types.js → operations/primitives/profile-types.js} +0 -0
- /package/dist/{engine → geometry/mesh}/mesh-view-cache.js +0 -0
- /package/dist/geometry/profiles/{matched.js → match-profiles.js} +0 -0
|
@@ -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.
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
# Place shapes and coordinate parts
|
|
2
|
+
|
|
3
|
+
Position shapes, align mating parts, and repeat features with transforms, anchors, patterns, and bounds.
|
|
4
|
+
|
|
5
|
+
Build a placement once, then reuse it for the shape, its measurements, and any related parts. Keep
|
|
6
|
+
local construction separate from finished part placement so repeated parts can share geometry.
|
|
7
|
+
|
|
8
|
+
Run the examples in a [Studio code Project](https://metamesh.studio/docs/develop/code-projects), where Studio supplies
|
|
9
|
+
typed controls and prepared services. For a local model, follow the
|
|
10
|
+
[standalone workflow](standalone-model.md) and use its host entry point.
|
|
11
|
+
|
|
12
|
+
## Reuse a transform across shapes and coordinates
|
|
13
|
+
|
|
14
|
+
Use [`transform2`](../reference/geometry/transform2.md) and
|
|
15
|
+
[`transform3`](../reference/geometry/transform3.md) chains for reusable placements. They are immutable
|
|
16
|
+
and pure, so you don't need an engine to build them. Calls apply in written order. A rotation
|
|
17
|
+
followed by a translation rotates around the origin, then moves the result:
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { transform3, vector3 } from "@metamesh/modeling";
|
|
23
|
+
|
|
24
|
+
// Calls apply in written order: rotate, then translate.
|
|
25
|
+
const placement = transform3().rotate([0, 0, 90]).translate([20, 0, 5]);
|
|
26
|
+
export const placedPoint = placement.applyPoint([10, 0, 0]); // approximately [20, 10, 5]
|
|
27
|
+
export const placedDirection = placement.applyDirection([10, 0, 0]); // approximately [0, 10, 0]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
Pass a transform directly to `solid.transform(placement)`, `section.transform(placement)` and
|
|
33
|
+
matching path helpers. Finished parts accept rigid transforms through `part(id, { geometry, transform })`;
|
|
34
|
+
pattern and attachment matrices work directly. Part placement rejects scale, shear and reflection.
|
|
35
|
+
`toData()` supplies a canonical matrix when another system needs it.
|
|
36
|
+
Construct the placement once and reuse it across point collections.
|
|
37
|
+
|
|
38
|
+
`current.andThen(next)` applies `current` first and `next` second, accepting another chain or a
|
|
39
|
+
same-dimensional matrix. `inverse()` returns the reverse placement. Each operation returns a new
|
|
40
|
+
chain, so you can derive different placements from a shared starting point.
|
|
41
|
+
|
|
42
|
+
Use `rotate(degrees, { pivot })` or `scale(factors, { pivot })` to work around a world-space pivot after
|
|
43
|
+
the preceding operations. In 3D, `rotate` takes XYZ Euler degrees, applied about global X, Y, then
|
|
44
|
+
Z; `rotateAxis(axis, degrees, { pivot })` normalizes its nonzero axis. Omitted pivots use the
|
|
45
|
+
coordinate origin. Uniform and per-axis scales must be finite and nonzero; negative factors reflect.
|
|
46
|
+
Nonfinite inputs, invalid axes, and singular matrices throw `GeometryError`.
|
|
47
|
+
|
|
48
|
+
`applyPoint` includes translation. `applyDirection` excludes translation and preserves scale;
|
|
49
|
+
its result is not normalized. `applyNormal` applies the inverse transpose and returns a unit normal,
|
|
50
|
+
including under nonuniform scaling; it rejects zero normals. All three return fluent vectors.
|
|
51
|
+
|
|
52
|
+
`Transform2` works directly with Sections and pure XY helpers; its `Transform2Data` is the same
|
|
53
|
+
canonical 3x3 representation throughout. Use `to3D()` when that XY placement
|
|
54
|
+
also needs to position a Solid or 3D path. The reverse `to2D()` conversion rejects transforms
|
|
55
|
+
that move the XY plane or collapse its dimensions; it doesn't project 3D points.
|
|
56
|
+
See the [2D placement recipe](transforms-and-placement.md#reuse-a-2d-placement).
|
|
57
|
+
|
|
58
|
+
### Transform composition order
|
|
59
|
+
|
|
60
|
+
For low-level matrix interoperability, the factories accept existing canonical matrices. Use
|
|
61
|
+
`transform3(frameTransform3(frame))` for an orthonormal frame. The raw constructors and
|
|
62
|
+
`composeTransform3(after, before)` remain available; composition applies `before` first:
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
```ts
|
|
67
|
+
import { transform3 } from "@metamesh/modeling";
|
|
68
|
+
import { applyTransformPoint3, composeTransform3 } from "@metamesh/modeling/geometry";
|
|
69
|
+
|
|
70
|
+
const current = transform3().rotate([0, 0, 90]);
|
|
71
|
+
const next = transform3().translate([20, 0, 5]);
|
|
72
|
+
export const chainedPoint = current.andThen(next).applyPoint([10, 0, 0]);
|
|
73
|
+
export const composedPoint = applyTransformPoint3(
|
|
74
|
+
composeTransform3(next.toData(), current.toData()),
|
|
75
|
+
[10, 0, 0]
|
|
76
|
+
); // Both results are approximately [20, 10, 5].
|
|
77
|
+
export const reversedPoint = next.andThen(current).applyPoint([10, 0, 0]);
|
|
78
|
+
// approximately [0, 30, 5]
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
## Calculate with vectors
|
|
84
|
+
|
|
85
|
+
Use [`vector2`](../reference/geometry/vector2.md) and [`vector3`](../reference/geometry/vector3.md)
|
|
86
|
+
for readable arithmetic chains. Operands accept tuples or vectors; `dot`, `length` and `distance`
|
|
87
|
+
return numbers. `cross` returns a signed scalar in 2D and a right-handed vector in 3D.
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
export const direction = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
|
|
93
|
+
export const alignment = direction.dot([0, 0, 1]); // number
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
Values snapshot their input and operations return new values. `toData()` returns the value's
|
|
99
|
+
frozen coordinate tuple without allocating another copy. Normalization rejects zero-length vectors;
|
|
100
|
+
nonfinite coordinates, scalar parameters and overflowing results throw `GeometryError`.
|
|
101
|
+
|
|
102
|
+
For rotations and nonuniform scaling, use a reusable transform's `applyDirection`. Use
|
|
103
|
+
`applyNormal` for surface normals:
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
```ts
|
|
108
|
+
const stretched = transform3().scale([2, 1, 1]);
|
|
109
|
+
export const normal = stretched.applyNormal([1, 1, 0]);
|
|
110
|
+
export const tangent = stretched.applyDirection([1, -1, 0]);
|
|
111
|
+
export const perpendicular = normal.dot(tangent); // approximately 0
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
Fluent math and shape transforms accept vector values directly; compose a transform for part placement. Serialized
|
|
117
|
+
geometry and low-level kernels use tuples. Keep model-specific equations beside the model.
|
|
118
|
+
|
|
119
|
+
## Measure and compare bounds
|
|
120
|
+
|
|
121
|
+
Use [`bounds2`](../reference/geometry/bounds2.md) and
|
|
122
|
+
[`bounds3`](../reference/geometry/bounds3.md) for immutable axis-aligned bounds. `size()` and
|
|
123
|
+
`center()` return fluent vectors. `containsBounds(other)` tests positioned containment in the
|
|
124
|
+
same coordinate frame, including touching boundaries. It doesn't establish a manufacturing fit.
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
import { bounds3 } from "@metamesh/modeling";
|
|
130
|
+
import { fitBounds, layoutRow, rectangleContour } from "@metamesh/modeling/geometry";
|
|
131
|
+
import * as mesh from "@metamesh/modeling/geometry/mesh";
|
|
132
|
+
|
|
133
|
+
export const envelope = bounds3({ min: [-10, -5, 0], max: [10, 5, 8] });
|
|
134
|
+
export const size = envelope.size(); // Vector3: [20, 10, 8] mm
|
|
135
|
+
export const center = envelope.center(); // Vector3: [0, 0, 4] mm
|
|
136
|
+
|
|
137
|
+
const triangleMesh = mesh.extrude(rectangleContour({ size: [12, 6] }), { height: 4 });
|
|
138
|
+
// Mesh measurements are plain data. Wrap once for fluent queries.
|
|
139
|
+
export const measured = bounds3(mesh.bounds(triangleMesh));
|
|
140
|
+
export const fits = envelope.containsBounds(measured); // true
|
|
141
|
+
export const data = measured.toData(); // Frozen { min, max } record for interchange.
|
|
142
|
+
|
|
143
|
+
// Collection and placement algorithms accept bounds values directly.
|
|
144
|
+
export const fitting = fitBounds(measured, envelope, { maxScale: 1 });
|
|
145
|
+
export const positions = layoutRow([measured, envelope], { gap: 2 });
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
Factories snapshot finite, ordered coordinates with finite extents; zero extents are valid.
|
|
151
|
+
Alternatively construct from nonnegative dimensions with `bounds2({ size: [30, 18] })` or
|
|
152
|
+
`bounds3({ size: [30, 18, 8], center: false })`. Size construction centers on the origin by default;
|
|
153
|
+
size and min/max construction are mutually exclusive.
|
|
154
|
+
`min` and `max` are frozen tuples, and `toData()` returns the value's stable frozen plain record.
|
|
155
|
+
Path `bounds()` queries return matching fluent bounds, or `undefined` for an empty path.
|
|
156
|
+
Mesh and region measurements, inspection results, and engine snapshots retain plain
|
|
157
|
+
`Bounds2Data` or `Bounds3Data`; wrap a measurement when you need fluent queries.
|
|
158
|
+
|
|
159
|
+
Use [`fitBounds`](../reference/geometry/fitBounds.md) to calculate a placement and
|
|
160
|
+
[`layoutRow`](../reference/geometry/layoutRow.md) to arrange a collection. These standalone
|
|
161
|
+
algorithms accept values or plain records. Supply bounds after any intended rotation; an
|
|
162
|
+
axis-aligned box alone doesn't describe the underlying shape.
|
|
163
|
+
|
|
164
|
+
## Primitive booleans and repeated placement
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
```ts
|
|
169
|
+
import { box, cylinder, radialPattern, union } from "@metamesh/modeling";
|
|
170
|
+
import { generate } from "@metamesh/project";
|
|
171
|
+
|
|
172
|
+
export default generate(({ part }) => {
|
|
173
|
+
const hub = cylinder({ height: 12, radius: 14 });
|
|
174
|
+
const arm = box({ size: [30, 6, 6] });
|
|
175
|
+
// Translate first, then rotate the whole arm about the world origin.
|
|
176
|
+
// Its inner end overlaps the hub so union creates one connected part.
|
|
177
|
+
const arms = radialPattern(arm.translate([18, 0, 0]).rotate([0, 0, 30]), {
|
|
178
|
+
count: 6,
|
|
179
|
+
axis: [0, 0, 1],
|
|
180
|
+
angle: 60,
|
|
181
|
+
});
|
|
182
|
+
// Both shapes are Z-centered; extra cutter height clears both hub faces.
|
|
183
|
+
const bore = cylinder({ height: 16, radius: 4 });
|
|
184
|
+
// Combine the repeated features once, then cut the common bore.
|
|
185
|
+
return [part("model", union([hub, ...arms]).subtract(bore))];
|
|
186
|
+
});
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Position and rotate one arm, repeat it about +Z, union the overlaps, then cut a common bore.
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
Transforms apply in written order: `arm.translate(...).rotate(...)` moves the arm first, then rotates
|
|
194
|
+
its position about the origin. Reversing those calls rotates the arm locally before moving it.
|
|
195
|
+
Keep a deliberate overlap between each arm and the hub so the result is one connected solid.
|
|
196
|
+
|
|
197
|
+
Exact signatures: [`box`](../reference/model/box.md),
|
|
198
|
+
[`cylinder`](../reference/model/cylinder.md), and
|
|
199
|
+
[`radialPattern`](../reference/model/radialPattern.md).
|
|
200
|
+
|
|
201
|
+
## Reuse a 2D placement
|
|
202
|
+
|
|
203
|
+
Build one [`transform2`](../reference/geometry/transform2.md) chain when the same placement applies
|
|
204
|
+
to a Section and its plain point data. This placement rotates around `[2, 1]`, then translates:
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
```ts
|
|
209
|
+
import { path2, pathPattern, polygon, rectangle, transform2, union } from "@metamesh/modeling";
|
|
210
|
+
|
|
211
|
+
const planarPlacement = transform2()
|
|
212
|
+
.rotate(90, { pivot: [2, 1] })
|
|
213
|
+
.translate([10, 0]);
|
|
214
|
+
const outline = [
|
|
215
|
+
[0, 0],
|
|
216
|
+
[4, 0],
|
|
217
|
+
[0, 2],
|
|
218
|
+
] as const;
|
|
219
|
+
|
|
220
|
+
// Shape construction and composition are pure; the host evaluates the finished body.
|
|
221
|
+
export const placedBody = polygon({ outer: outline, holes: [] })
|
|
222
|
+
.transform(planarPlacement)
|
|
223
|
+
.extrude({ height: 8 });
|
|
224
|
+
|
|
225
|
+
// Paths accept the same placement. Matrices and tuples remain available for interchange.
|
|
226
|
+
export const sectionMatrix = planarPlacement.toData();
|
|
227
|
+
export const placedContour = path2(outline, { closed: true }).transform(planarPlacement);
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
Pass the placement directly to `section.transform(planarPlacement)` or `path.transform(planarPlacement)`.
|
|
233
|
+
Fill the transformed closed path with `polygon(placedContour)` when you need material.
|
|
234
|
+
[`transformRegionData`](../reference/geometry/transformRegionData.md) serves serialized filled data.
|
|
235
|
+
|
|
236
|
+
A negative scale factor reflects the placement. Paths retain traversal order, including closed
|
|
237
|
+
paths; filled Sections and serialized regions restore outer and hole winding. `andThen(next)`
|
|
238
|
+
composes another placement in execution order;
|
|
239
|
+
reuse the placement instead of rebuilding the chain for every point. Use `toData()` when another
|
|
240
|
+
system needs the matrix.
|
|
241
|
+
|
|
242
|
+
Section path patterns consume `Path2` values directly. Tangent orientation aligns the Section's
|
|
243
|
+
local +X direction with the path while preserving its XY plane:
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
```ts
|
|
248
|
+
const guide = path2([
|
|
249
|
+
[0, 0],
|
|
250
|
+
[12, 0],
|
|
251
|
+
[12, 12],
|
|
252
|
+
]);
|
|
253
|
+
const tabs = pathPattern(rectangle({ size: [4, 2] }), guide, {
|
|
254
|
+
count: 5,
|
|
255
|
+
orientation: "tangent",
|
|
256
|
+
});
|
|
257
|
+
export const patternedTabs = union(tabs).extrude({ height: 3 });
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
Linear Section patterns use XY directions. Radial Section patterns rotate about an optional XY
|
|
263
|
+
`pivot` using the implicit +Z axis; spatial Solid patterns retain their explicit rotation axis.
|
|
264
|
+
|
|
265
|
+
## Named anchors and custom frames
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
```ts
|
|
270
|
+
import { box, cylinder } from "@metamesh/modeling";
|
|
271
|
+
import { generate } from "@metamesh/project";
|
|
272
|
+
|
|
273
|
+
export default generate(({ part }) => {
|
|
274
|
+
const base = box({ size: [40, 24, 6], center: false });
|
|
275
|
+
// Named anchors follow dimensions: no duplicated half-height calculation.
|
|
276
|
+
// Mating bottom to top opposes the two outward normals automatically.
|
|
277
|
+
const pin = cylinder({ diameter: 8, height: 12 }).attach("bottom", base.anchor("top"), {
|
|
278
|
+
gap: 0.2,
|
|
279
|
+
});
|
|
280
|
+
// Keep the gap and the two physical pieces instead of unioning the assembly.
|
|
281
|
+
return [part("base", { geometry: base }), part("pin", { geometry: pin })];
|
|
282
|
+
});
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
The pin's bottom mates to the base's top with a 0.2 mm gap. They remain two named parts.
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
Ordinary primitives know their named anchors, so `base.anchor("top")` follows the box's dimensions
|
|
290
|
+
and placement. `pin.attach("bottom", base.anchor("top"))` mates opposed directions. Transforms and
|
|
291
|
+
patterns carry those frames with the shape, with outward normals preserved under nonuniform scale
|
|
292
|
+
and reflection. The axis names are `left/right` (−X/+X), `back/front` (−Y/+Y) and `bottom/top` (−Z/+Z).
|
|
293
|
+
|
|
294
|
+
Use `shape.withAnchors({ mount: anchor3(position, direction, up) })` to define a custom datum
|
|
295
|
+
without changing the original shape. Existing names remain unless replaced; definitions are copied
|
|
296
|
+
and immutable.
|
|
297
|
+
Boolean and other constructed shapes need explicit definitions because their surfaces may change.
|
|
298
|
+
Anchor names use lowercase kebab-case, with at most 64 characters and 128 definitions per shape.
|
|
299
|
+
Look up anchors during active synchronous generation; the lookup evaluates the required recipe.
|
|
300
|
+
Returned frames are plain data.
|
|
301
|
+
|
|
302
|
+
Primitive anchors describe nominal construction dimensions. Finishing and curve sampling do not
|
|
303
|
+
move them. Tube and torus axial datums may lie over an opening; a cone has no cap anchor at its apex.
|
|
304
|
+
Regular polygons and stars expose only `center`. Custom `Anchor3` frames, including pure
|
|
305
|
+
`boxAnchor3` and `cylinderAnchor3` helpers, work wherever a source or target frame is required.
|
|
306
|
+
|
|
307
|
+
Primitive `attachment` uses the same source/target anchor, `alignment`, `gap`, and `spin`
|
|
308
|
+
options as `attach`, including a named `source`. It applies after local construction; Section
|
|
309
|
+
attachment must preserve the XY plane.
|
|
310
|
+
|
|
311
|
+
The `gap` here separates the two pieces along the target normal; it is a placement distance, not
|
|
312
|
+
a radial fit clearance. Keep separate named parts for an assembly. For one fused part, remove the
|
|
313
|
+
gap, add a small intended overlap, and [`union`](../reference/model/union.md) the solids.
|