@metamesh/modeling 0.19.0 → 0.20.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 +49 -0
- package/README.md +34 -18
- package/dist/api/engine.d.ts +217 -121
- package/dist/api/export.d.ts +123 -79
- package/dist/api/geometry.d.ts +406 -2102
- package/dist/api/index.d.ts +472 -1798
- package/dist/api/math.d.ts +315 -0
- package/dist/api/mechanical.d.ts +1041 -0
- package/dist/api/mesh.d.ts +360 -88
- package/dist/api/text.d.ts +24 -44
- package/dist/docs/guides/concepts.md +67 -33
- package/dist/docs/guides/exporting.md +88 -0
- package/dist/docs/guides/fonts.md +5 -3
- package/dist/docs/guides/fundamentals.md +12 -24
- package/dist/docs/guides/generation.md +24 -16
- package/dist/docs/guides/geometry-values.md +192 -134
- package/dist/docs/guides/hosting.md +51 -96
- package/dist/docs/guides/profiles-and-extrusion.md +159 -11
- package/dist/docs/guides/recipes.md +121 -28
- package/dist/docs/guides/resolution-and-inspection.md +43 -23
- package/dist/docs/guides/solid-joins.md +12 -2
- package/dist/docs/guides/standalone-model.md +4 -2
- package/dist/docs/guides/svg-and-text.md +76 -39
- package/dist/docs/guides/sweeps-and-lofts.md +88 -44
- package/dist/docs/guides/transforms-and-placement.md +113 -103
- package/dist/docs/guides/workers.md +166 -0
- package/dist/docs/manifest.json +4133 -4153
- package/dist/docs/reference/engine/GenerationOptions.md +2 -3
- package/dist/docs/reference/engine/GeometryResource.md +6 -6
- package/dist/docs/reference/engine/ModelDependencies.md +2 -2
- package/dist/docs/reference/engine/ModelEngine.md +2 -3
- package/dist/docs/reference/engine/ModelEngineOptions.md +2 -7
- package/dist/docs/reference/engine/ModelPart.md +6 -6
- package/dist/docs/reference/engine/ModelResult.md +2 -2
- package/dist/docs/reference/engine/ModelRunArguments.md +2 -2
- package/dist/docs/reference/engine/ModelRunOptions.md +2 -3
- package/dist/docs/reference/engine/ModelSession.md +2 -2
- package/dist/docs/reference/engine/SessionOptions.md +2 -3
- package/dist/docs/reference/engine/categories/host-lifecycle.md +9 -3
- package/dist/docs/reference/engine/checkModel.md +6 -2
- package/dist/docs/reference/engine/createModelEngine.md +5 -3
- package/dist/docs/reference/engine/defaultModelingLimits.md +4 -11
- package/dist/docs/reference/engine/modelingWasmUrl.md +2 -2
- package/dist/docs/reference/engine.md +7 -1
- package/dist/docs/reference/export/Export3mfOptions.md +2 -6
- package/dist/docs/reference/export/ExportDiagnostic.md +2 -14
- package/dist/docs/reference/export/ExportFormat.md +2 -14
- package/dist/docs/reference/export/ExportGeometry.md +3 -15
- package/dist/docs/reference/export/ExportGlbOptions.md +14 -18
- package/dist/docs/reference/export/ExportLimits.md +2 -14
- package/dist/docs/reference/export/ExportMaterial.md +2 -14
- package/dist/docs/reference/export/ExportOptions.md +2 -14
- package/dist/docs/reference/export/ExportPart.md +2 -14
- package/dist/docs/reference/export/ExportReport.md +2 -14
- package/dist/docs/reference/export/ExportSink.md +5 -15
- package/dist/docs/reference/export/ExportStlOptions.md +2 -6
- package/dist/docs/reference/export/ExportedFile.md +14 -26
- package/dist/docs/reference/export/categories/mesh-serialization.md +9 -3
- package/dist/docs/reference/export/defaultExportLimits.md +2 -2
- package/dist/docs/reference/export/export3mf.md +4 -6
- package/dist/docs/reference/export/exportGlb.md +8 -10
- package/dist/docs/reference/export/exportStl.md +4 -6
- package/dist/docs/reference/export/write3mf.md +6 -6
- package/dist/docs/reference/export/writeGlb.md +10 -10
- package/dist/docs/reference/export/writeStl.md +6 -6
- package/dist/docs/reference/export.md +9 -3
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +4 -4
- package/dist/docs/reference/geometry/Anchor3-type.md +3 -7
- package/dist/docs/reference/geometry/Anchor3Options.md +70 -0
- package/dist/docs/reference/geometry/ArcCurve2.md +3 -3
- package/dist/docs/reference/geometry/ArcCurve3.md +3 -3
- package/dist/docs/reference/geometry/AttachOptions.md +4 -9
- package/dist/docs/reference/geometry/Bounds2-type.md +9 -30
- package/dist/docs/reference/geometry/Bounds2Data.md +2 -19
- package/dist/docs/reference/geometry/Bounds2Input.md +2 -10
- package/dist/docs/reference/geometry/Bounds2Options.md +2 -6
- package/dist/docs/reference/geometry/Bounds3-type.md +9 -30
- package/dist/docs/reference/geometry/Bounds3Data.md +2 -15
- package/dist/docs/reference/geometry/Bounds3Input.md +2 -10
- package/dist/docs/reference/geometry/Bounds3Options.md +2 -6
- package/dist/docs/reference/geometry/BoundsFit2.md +2 -2
- package/dist/docs/reference/geometry/BoundsFit3.md +2 -2
- package/dist/docs/reference/geometry/BoundsFitOptions.md +2 -2
- package/dist/docs/reference/geometry/BoxAnchorFace.md +3 -3
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +3 -3
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +3 -7
- package/dist/docs/reference/geometry/CircleContourOptions.md +3 -7
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +3 -12
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +2 -2
- package/dist/docs/reference/geometry/CircularSampling.md +2 -2
- package/dist/docs/reference/geometry/CircularSamplingOptions.md +2 -2
- package/dist/docs/reference/geometry/Contour.md +4 -9
- package/dist/docs/reference/geometry/ContourCurve.md +3 -3
- package/dist/docs/reference/geometry/ContourPoint.md +3 -3
- package/dist/docs/reference/geometry/ContourSegment.md +3 -3
- package/dist/docs/reference/geometry/CorrespondingComponent.md +3 -7
- package/dist/docs/reference/geometry/CorrespondingContour.md +3 -7
- package/dist/docs/reference/geometry/CorrespondingProfile.md +3 -7
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +4 -8
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +3 -3
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +3 -3
- package/dist/docs/reference/geometry/Curve2.md +3 -3
- package/dist/docs/reference/geometry/Curve3.md +3 -3
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +3 -11
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +3 -3
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +4 -4
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +2 -2
- package/dist/docs/reference/geometry/EdgeTreatment.md +2 -6
- package/dist/docs/reference/geometry/EllipseContourOptions.md +3 -7
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +9 -18
- package/dist/docs/reference/geometry/FittedTextLayout.md +2 -2
- package/dist/docs/reference/geometry/{Frame3.md → Frame3-type.md} +4 -11
- package/dist/docs/reference/geometry/Frame3Options.md +69 -0
- package/dist/docs/reference/geometry/GeometryError.md +2 -6
- package/dist/docs/reference/geometry/GeometryErrorCode.md +2 -6
- package/dist/docs/reference/geometry/GeometryErrorContext.md +2 -6
- package/dist/docs/reference/geometry/GeometryResolution.md +2 -10
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +3 -11
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +3 -11
- package/dist/docs/reference/geometry/GridPatternOptions.md +7 -9
- package/dist/docs/reference/geometry/ImmutableBuffer-type.md +2 -10
- package/dist/docs/reference/geometry/LineCurve2.md +3 -3
- package/dist/docs/reference/geometry/LineCurve3.md +3 -3
- package/dist/docs/reference/geometry/LinearPatternOptions.md +2 -6
- package/dist/docs/reference/geometry/LoftPlacement.md +13 -21
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +3 -7
- package/dist/docs/reference/geometry/ModelingLimits.md +2 -14
- package/dist/docs/reference/geometry/NumericArray.md +2 -10
- package/dist/docs/reference/geometry/Path2-type.md +153 -12
- package/dist/docs/reference/geometry/Path2Data.md +3 -11
- package/dist/docs/reference/geometry/Path2Input.md +3 -11
- package/dist/docs/reference/geometry/Path3-type.md +153 -12
- package/dist/docs/reference/geometry/Path3Data.md +3 -11
- package/dist/docs/reference/geometry/Path3Input.md +3 -11
- package/dist/docs/reference/geometry/PathFrame.md +3 -3
- package/dist/docs/reference/geometry/PathLocation.md +3 -11
- package/dist/docs/reference/geometry/PathNormalGuide.md +4 -12
- package/dist/docs/reference/geometry/PathOptions.md +3 -7
- package/dist/docs/reference/geometry/PathPatternOptions.md +3 -7
- package/dist/docs/reference/geometry/PathPlacement.md +5 -5
- package/dist/docs/reference/geometry/PathResamplingOptions.md +3 -11
- package/dist/docs/reference/geometry/PathStation.md +87 -0
- package/dist/docs/reference/geometry/PathSubdivisionOptions.md +44 -0
- package/dist/docs/reference/geometry/Pivot2Options.md +3 -11
- package/dist/docs/reference/geometry/Pivot3Options.md +3 -11
- package/dist/docs/reference/geometry/PolygonData.md +4 -8
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +3 -3
- package/dist/docs/reference/geometry/Profile.md +3 -4
- package/dist/docs/reference/geometry/ProfileComponent2.md +3 -7
- package/dist/docs/reference/geometry/ProfileContour2.md +3 -7
- package/dist/docs/reference/geometry/ProfileSpan2.md +3 -7
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +5 -8
- package/dist/docs/reference/geometry/RadialPatternOptions.md +2 -6
- package/dist/docs/reference/geometry/RadialSizing.md +2 -6
- package/dist/docs/reference/geometry/RadialSizingOptions.md +2 -6
- package/dist/docs/reference/geometry/RectangleContourOptions.md +4 -7
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +3 -7
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +3 -7
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +3 -3
- package/dist/docs/reference/geometry/RegionData.md +3 -7
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
- package/dist/docs/reference/geometry/ResolvedGeometryResolution.md +71 -0
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +2 -2
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +2 -6
- package/dist/docs/reference/geometry/RowLayoutOptions.md +2 -2
- package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
- package/dist/docs/reference/geometry/SampleHelixOptions.md +3 -3
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
- package/dist/docs/reference/geometry/SampledCurve2.md +3 -3
- package/dist/docs/reference/geometry/SampledCurve3.md +3 -3
- package/dist/docs/reference/geometry/SideProfileCurve.md +3 -3
- package/dist/docs/reference/geometry/SideProfilePoint.md +3 -3
- package/dist/docs/reference/geometry/SideProfileSegment.md +3 -3
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +2 -6
- package/dist/docs/reference/geometry/SplineOptions.md +69 -0
- package/dist/docs/reference/geometry/StarContourOptions.md +7 -7
- package/dist/docs/reference/geometry/StrokeCap.md +2 -6
- package/dist/docs/reference/geometry/StrokeJoin.md +2 -6
- package/dist/docs/reference/geometry/StrokeOptions.md +3 -7
- package/dist/docs/reference/geometry/SvgImportOptions.md +4 -4
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +2 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +2 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +2 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +2 -2
- package/dist/docs/reference/geometry/Transform2-type.md +3 -11
- package/dist/docs/reference/geometry/Transform2Data.md +3 -11
- package/dist/docs/reference/geometry/Transform2Input.md +3 -11
- package/dist/docs/reference/geometry/Transform3-type.md +4 -12
- package/dist/docs/reference/geometry/Transform3Data.md +3 -11
- package/dist/docs/reference/geometry/Transform3Input.md +6 -13
- package/dist/docs/reference/geometry/Vector2-type.md +3 -11
- package/dist/docs/reference/geometry/Vector2Data.md +3 -15
- package/dist/docs/reference/geometry/Vector2Input.md +3 -11
- package/dist/docs/reference/geometry/Vector3-type.md +27 -11
- package/dist/docs/reference/geometry/Vector3Data.md +3 -11
- package/dist/docs/reference/geometry/Vector3Input.md +3 -11
- package/dist/docs/reference/geometry/VectorTextLayout.md +2 -10
- package/dist/docs/reference/geometry/VectorTextMetrics.md +3 -11
- package/dist/docs/reference/geometry/anchor3.md +17 -26
- package/dist/docs/reference/geometry/anchorFrame3.md +6 -6
- package/dist/docs/reference/geometry/attachmentTransform3.md +8 -8
- package/dist/docs/reference/geometry/bounds2.md +6 -8
- package/dist/docs/reference/geometry/bounds3.md +4 -6
- package/dist/docs/reference/geometry/boundsCenter.md +2 -2
- package/dist/docs/reference/geometry/boundsSize.md +2 -2
- package/dist/docs/reference/geometry/boxAnchor3.md +3 -3
- package/dist/docs/reference/geometry/categories/bounds-layout.md +9 -3
- package/dist/docs/reference/geometry/categories/curves-paths.md +24 -13
- package/dist/docs/reference/geometry/categories/immutable-data.md +40 -0
- package/dist/docs/reference/geometry/categories/pattern-placement.md +10 -4
- package/dist/docs/reference/geometry/categories/primitive-options.md +8 -13
- package/dist/docs/reference/geometry/categories/profiles-regions.md +11 -5
- package/dist/docs/reference/geometry/categories/resolution-errors.md +8 -1
- package/dist/docs/reference/geometry/categories/transforms-math.md +20 -51
- package/dist/docs/reference/geometry/categories/vector-import.md +7 -4
- package/dist/docs/reference/geometry/circleContour.md +3 -3
- package/dist/docs/reference/geometry/closeToAxis.md +7 -3
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +9 -6
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +13 -6
- package/dist/docs/reference/geometry/contourContainsPoint.md +7 -3
- package/dist/docs/reference/geometry/cylinderAnchor3.md +5 -5
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +3 -3
- package/dist/docs/reference/geometry/distributeAlongPath.md +16 -11
- package/dist/docs/reference/geometry/ellipseContour.md +3 -3
- package/dist/docs/reference/geometry/fitBounds.md +10 -2
- package/dist/docs/reference/geometry/fitTextLayout.md +5 -5
- package/dist/docs/reference/geometry/frame3.md +66 -0
- package/dist/docs/reference/geometry/gridPatternTransforms.md +6 -6
- package/dist/docs/reference/geometry/immutableBuffer.md +5 -7
- package/dist/docs/reference/geometry/isGeometryError.md +2 -6
- package/dist/docs/reference/geometry/layoutRow.md +4 -2
- package/dist/docs/reference/geometry/linearPatternTransforms.md +6 -6
- package/dist/docs/reference/geometry/matchProfiles.md +5 -3
- package/dist/docs/reference/geometry/normalizeContour.md +8 -4
- package/dist/docs/reference/geometry/normalizePolygon.md +5 -3
- package/dist/docs/reference/geometry/normalizeRegion.md +5 -3
- package/dist/docs/reference/geometry/path2.md +7 -7
- package/dist/docs/reference/geometry/path3.md +7 -7
- package/dist/docs/reference/geometry/pathPatternTransforms.md +12 -8
- package/dist/docs/reference/geometry/preflightSvgRegion.md +5 -5
- package/dist/docs/reference/geometry/radialPatternTransforms.md +5 -5
- package/dist/docs/reference/geometry/rectangleContour.md +3 -3
- package/dist/docs/reference/geometry/rectangleProfile.md +3 -4
- package/dist/docs/reference/geometry/regionArea.md +3 -3
- package/dist/docs/reference/geometry/regionBounds.md +6 -4
- package/dist/docs/reference/geometry/regularPolygonContour.md +3 -3
- package/dist/docs/reference/geometry/resamplePolyline2.md +7 -3
- package/dist/docs/reference/geometry/resamplePolyline3.md +7 -3
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +5 -5
- package/dist/docs/reference/geometry/resolveArcSegments.md +8 -6
- package/dist/docs/reference/geometry/resolveCircularSampling.md +2 -2
- package/dist/docs/reference/geometry/resolveCircularSegments.md +5 -3
- package/dist/docs/reference/geometry/{resolveExtrusionDivisions.md → resolveExtrusionSlices.md} +16 -15
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +5 -3
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +3 -3
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +12 -5
- package/dist/docs/reference/geometry/sampleContour.md +5 -5
- package/dist/docs/reference/geometry/sampleCurve2.md +7 -3
- package/dist/docs/reference/geometry/sampleCurve3.md +7 -3
- package/dist/docs/reference/geometry/sampleHelix.md +3 -3
- package/dist/docs/reference/geometry/sampleSideProfile.md +5 -5
- package/dist/docs/reference/geometry/sampleTextContours.md +3 -3
- package/dist/docs/reference/geometry/signedContourArea.md +5 -3
- package/dist/docs/reference/geometry/spline2.md +68 -0
- package/dist/docs/reference/geometry/spline3.md +62 -0
- package/dist/docs/reference/geometry/starContour.md +3 -3
- package/dist/docs/reference/geometry/strokeRegionData.md +8 -5
- package/dist/docs/reference/geometry/transform2.md +5 -7
- package/dist/docs/reference/geometry/transform3.md +23 -10
- package/dist/docs/reference/geometry/transformRegionData.md +7 -3
- package/dist/docs/reference/geometry/triangulateContour.md +6 -4
- package/dist/docs/reference/geometry/vector2.md +6 -8
- package/dist/docs/reference/geometry/vector3.md +8 -8
- package/dist/docs/reference/geometry.md +13 -18
- package/dist/docs/reference/{geometry → math}/AxisAngleRotation3.md +4 -5
- package/dist/docs/reference/math/IDENTITY_TRANSFORM3.md +20 -0
- package/dist/docs/reference/math/add2.md +38 -0
- package/dist/docs/reference/math/add3.md +46 -0
- package/dist/docs/reference/math/applyTransformDirection3.md +46 -0
- package/dist/docs/reference/math/applyTransformPoint3.md +44 -0
- package/dist/docs/reference/math/categories/tuple-matrix.md +67 -0
- package/dist/docs/reference/math/cross2.md +38 -0
- package/dist/docs/reference/math/cross3.md +44 -0
- package/dist/docs/reference/math/distance2.md +38 -0
- package/dist/docs/reference/math/distance3.md +38 -0
- package/dist/docs/reference/math/dot2.md +38 -0
- package/dist/docs/reference/math/dot3.md +44 -0
- package/dist/docs/reference/math/eulerTransform3.md +43 -0
- package/dist/docs/reference/math/inverseTransform3.md +36 -0
- package/dist/docs/reference/math/length2.md +32 -0
- package/dist/docs/reference/math/length3.md +32 -0
- package/dist/docs/reference/math/lerp2.md +46 -0
- package/dist/docs/reference/math/lerp3.md +46 -0
- package/dist/docs/reference/math/multiplyTransform3.md +46 -0
- package/dist/docs/reference/math/normalize2.md +45 -0
- package/dist/docs/reference/math/normalize3.md +45 -0
- package/dist/docs/reference/math/projectOntoPlane3.md +40 -0
- package/dist/docs/reference/math/rotate2.md +40 -0
- package/dist/docs/reference/math/rotationTransform3.md +56 -0
- package/dist/docs/reference/math/scale2.md +38 -0
- package/dist/docs/reference/math/scale3.md +44 -0
- package/dist/docs/reference/math/scaleTransform3.md +39 -0
- package/dist/docs/reference/math/subtract2.md +38 -0
- package/dist/docs/reference/math/subtract3.md +44 -0
- package/dist/docs/reference/math/transformDeterminant3.md +38 -0
- package/dist/docs/reference/math/translationTransform3.md +36 -0
- package/dist/docs/reference/math/validateRigidTransform3.md +38 -0
- package/dist/docs/reference/math/validateTransform3.md +48 -0
- package/dist/docs/reference/math.md +22 -0
- package/dist/docs/reference/{geometry → mechanical}/AcmeThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/Bevel.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/BevelSize.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ButtressPressureFlankSide.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ButtressThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleFit.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CompensatedThreadDiameters.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CustomThreadProfileSpec.md +5 -15
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearMeshKind.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearOutlineOptions.md +5 -10
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionOptions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionReport.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairSpec.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearSpec.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/InternalThreadCutterOptions.md +6 -13
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeBaseSpec.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeDimensions.md +4 -5
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeInterval.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSamplingOptions.md +5 -14
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSpec.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/METRIC_FASTENER_STANDARDS.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricFastenerSize.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricFastenerStandard.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricHexNutDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricSocketCapHeadDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/PRINTABLE_THREAD_FIT_POLICIES.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFit.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFitPolicy.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/RackPitchDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/RackPitchSpec.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/SampledThreadHelices.md +4 -8
- package/dist/docs/reference/{geometry → mechanical}/SquareThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/ThreadBevelOptions.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadCircularSegmentsOptions.md +5 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadCompensationOptions.md +4 -5
- package/dist/docs/reference/{geometry → mechanical}/ThreadEndStyle.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadEndTreatmentOptions.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadHandedness.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadHelixOptions.md +5 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInEnvelope.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInShape.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfile-type.md +5 -17
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfileBaseSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfileSpec.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadRidgeOptions.md +7 -18
- package/dist/docs/reference/{geometry → mechanical}/ThreadRole.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/ThreadSolidOptions.md +8 -15
- package/dist/docs/reference/{geometry → mechanical}/ThreadSolidPreflight.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutOptions.md +7 -14
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutPreflight.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutShape.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadedRodOptions.md +6 -13
- package/dist/docs/reference/{geometry → mechanical}/TrapezoidalThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/TriangularThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/categories/mechanical.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadDiameters.md +4 -4
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileAxially.md +12 -6
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileForFaceting.md +13 -3
- package/dist/docs/reference/{geometry → mechanical}/getMetricClearanceHoleDiameter.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/getMetricFastenerStandard.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/measureInternalCylindricalGearPairMotion.md +9 -7
- package/dist/docs/reference/{geometry → mechanical}/minimumCylindricalGearToothCountWithoutUndercut.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/preflightInternalThreadCutter.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/preflightThreadedNut.md +9 -7
- package/dist/docs/reference/{geometry → mechanical}/preflightThreadedRod.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGear.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGearPair.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveKnuckleHinge.md +9 -7
- package/dist/docs/reference/{geometry → mechanical}/resolvePrintableThreadFitPolicy.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveRackPitch.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveThreadCircularSegments.md +7 -5
- package/dist/docs/reference/{geometry → mechanical}/sampleCylindricalGearOutline.md +9 -8
- package/dist/docs/reference/{geometry → mechanical}/sampleInternalCylindricalGearSpaceOutline.md +9 -8
- package/dist/docs/reference/{geometry → mechanical}/sampleRackToothPath.md +10 -8
- package/dist/docs/reference/{geometry → mechanical}/sampleThreadHelices.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/threadProfile.md +7 -3
- package/dist/docs/reference/mechanical.md +19 -0
- package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +128 -0
- package/dist/docs/reference/{geometry → mesh}/HeightfieldMeshLimits.md +5 -13
- package/dist/docs/reference/{geometry → mesh}/HeightfieldPreflight.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/ImmutableTriangleMesh.md +5 -17
- package/dist/docs/reference/mesh/LoftMeshStation.md +32 -0
- package/dist/docs/reference/mesh/MeshRenderOptions.md +3 -3
- package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationFallbackReason.md +4 -8
- package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationOptions.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationResult.md +4 -8
- package/dist/docs/reference/{geometry → mesh}/PlanarPatchQuality.md +4 -12
- package/dist/docs/reference/mesh/RenderMesh.md +19 -19
- package/dist/docs/reference/{geometry → mesh}/SolidMeshValidationOptions.md +4 -12
- package/dist/docs/reference/{geometry → mesh}/TriangleMesh.md +8 -12
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshAnalysis.md +5 -14
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshAnalysisOptions.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshInput.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshMeasurements.md +5 -14
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshQualityOptions.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshQualityReport.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignature.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignatureOptions.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignatureTolerances.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshTopologyAnalysis.md +5 -14
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshValidationOptions.md +4 -9
- package/dist/docs/reference/mesh/analyze.md +26 -18
- package/dist/docs/reference/mesh/analyzeQuality.md +12 -12
- package/dist/docs/reference/mesh/bounds.md +5 -6
- package/dist/docs/reference/mesh/categories/operations.md +37 -4
- package/dist/docs/reference/mesh/centroid.md +5 -6
- package/dist/docs/reference/mesh/extrude.md +21 -20
- package/dist/docs/reference/mesh/heightfield.md +8 -8
- package/dist/docs/reference/mesh/immutable.md +7 -5
- package/dist/docs/reference/mesh/join.md +7 -7
- package/dist/docs/reference/mesh/loft.md +19 -18
- package/dist/docs/reference/mesh/optimizePlanarPatches.md +21 -21
- package/dist/docs/reference/mesh/preflightHeightfield.md +8 -8
- package/dist/docs/reference/mesh/preflightThreadSolid.md +22 -25
- package/dist/docs/reference/mesh/render.md +7 -5
- package/dist/docs/reference/mesh/reverse.md +7 -7
- package/dist/docs/reference/mesh/revolve.md +12 -14
- package/dist/docs/reference/mesh/signature.md +12 -12
- package/dist/docs/reference/mesh/sweep.md +96 -25
- package/dist/docs/reference/mesh/threadRidge.md +19 -18
- package/dist/docs/reference/mesh/threadSolid.md +23 -22
- package/dist/docs/reference/mesh/transform.md +8 -9
- package/dist/docs/reference/mesh/validate.md +11 -11
- package/dist/docs/reference/mesh/validateSolid.md +10 -10
- package/dist/docs/reference/mesh.md +8 -2
- package/dist/docs/reference/model/BoxEdge.md +23 -0
- package/dist/docs/reference/model/BoxEdgeSelection.md +27 -0
- package/dist/docs/reference/model/BoxEdgeTreatments.md +27 -0
- package/dist/docs/reference/{geometry → model}/BoxOptions.md +12 -12
- package/dist/docs/reference/model/CircleOptions.md +4 -5
- package/dist/docs/reference/model/CornerCutterOptions.md +93 -0
- package/dist/docs/reference/model/CornerCutterTreatment.md +53 -0
- package/dist/docs/reference/model/{HoleCutterOverrun.md → CutterOverrun.md} +8 -7
- package/dist/docs/reference/model/CylinderOptions.md +64 -0
- package/dist/docs/reference/model/DiagnosticOptions.md +2 -2
- package/dist/docs/reference/model/EdgeCutterOptions.md +129 -0
- package/dist/docs/reference/model/EllipseOptions.md +4 -5
- package/dist/docs/reference/model/EndTreatments.md +43 -0
- package/dist/docs/reference/model/ExtrudeOptions.md +153 -0
- package/dist/docs/reference/model/GenerateCallback.md +2 -2
- package/dist/docs/reference/model/GenerateContext.md +27 -3
- package/dist/docs/reference/model/GenerationDiagnostic.md +2 -2
- package/dist/docs/reference/model/GenerationError.md +2 -2
- package/dist/docs/reference/{geometry → model}/HeightfieldOptions.md +5 -23
- package/dist/docs/reference/model/HoleCutterOpening.md +27 -0
- package/dist/docs/reference/model/HoleCutterOptions.md +9 -22
- package/dist/docs/reference/model/HoleCutterRecess.md +5 -4
- package/dist/docs/reference/model/HullOptions.md +2 -3
- package/dist/docs/reference/model/ImmutableValue.md +2 -2
- package/dist/docs/reference/model/ImplicitOptions.md +3 -9
- package/dist/docs/reference/model/JoinOptions.md +2 -5
- package/dist/docs/reference/model/JoinTransition.md +2 -2
- package/dist/docs/reference/model/KnuckleHinge-type.md +2 -3
- package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +2 -2
- package/dist/docs/reference/model/KnuckleHingeOptions.md +3 -5
- package/dist/docs/reference/model/KnuckleHingeWeb.md +2 -2
- package/dist/docs/reference/{geometry → model}/LoftCorrespondence.md +8 -11
- package/dist/docs/reference/{geometry → model}/LoftOptions.md +11 -16
- package/dist/docs/reference/model/LoftStation.md +4 -5
- package/dist/docs/reference/model/Memo.md +2 -2
- package/dist/docs/reference/model/ModelProgram.md +2 -2
- package/dist/docs/reference/model/PartDeclaration.md +4 -5
- package/dist/docs/reference/model/PartGeometry.md +3 -5
- package/dist/docs/reference/model/PartOptions.md +4 -5
- package/dist/docs/reference/model/PatternSource.md +4 -4
- package/dist/docs/reference/model/PlaneOptions.md +3 -7
- package/dist/docs/reference/model/PolygonOptions.md +2 -7
- package/dist/docs/reference/model/PrimitiveAttachment.md +50 -0
- package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +111 -0
- package/dist/docs/reference/model/RectangleOptions.md +21 -26
- package/dist/docs/reference/model/RegularPolygonOptions.md +4 -37
- package/dist/docs/reference/{geometry → model}/RevolveOptions.md +15 -24
- package/dist/docs/reference/model/Section.md +115 -53
- package/dist/docs/reference/model/SectionHullOptions.md +2 -3
- package/dist/docs/reference/model/SectionInspection.md +2 -6
- package/dist/docs/reference/model/SectionOffsetJoin.md +2 -2
- package/dist/docs/reference/model/SectionOffsetOptions.md +2 -3
- package/dist/docs/reference/model/Solid.md +24 -12
- package/dist/docs/reference/model/SolidInspection.md +2 -6
- package/dist/docs/reference/model/SolidSegmentHit.md +2 -6
- package/dist/docs/reference/model/SphereOptions.md +27 -0
- package/dist/docs/reference/model/StarOptions.md +21 -23
- package/dist/docs/reference/model/SvgOrigin.md +2 -2
- package/dist/docs/reference/model/SvgPathSectionOptions.md +3 -5
- package/dist/docs/reference/model/SvgSectionOptions.md +3 -6
- package/dist/docs/reference/model/SweepOptions.md +109 -0
- package/dist/docs/reference/model/SweepOrientation.md +119 -0
- package/dist/docs/reference/model/SweepTransformOptions.md +105 -0
- package/dist/docs/reference/model/TextSectionOptions.md +2 -7
- package/dist/docs/reference/{geometry → model}/TorusOptions.md +11 -10
- package/dist/docs/reference/model/TubeOptions.md +84 -0
- package/dist/docs/reference/model/box.md +11 -10
- package/dist/docs/reference/model/categories/boolean-operations.md +9 -3
- package/dist/docs/reference/model/categories/bounded-surfaces.md +13 -1
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +26 -7
- package/dist/docs/reference/model/categories/generation.md +11 -3
- package/dist/docs/reference/model/categories/hinges.md +7 -1
- package/dist/docs/reference/model/categories/mesh-inspection.md +7 -1
- package/dist/docs/reference/model/categories/primitives.md +34 -6
- package/dist/docs/reference/model/categories/sections.md +8 -2
- package/dist/docs/reference/model/categories/threads.md +8 -5
- package/dist/docs/reference/model/categories/transforms-placement.md +15 -10
- package/dist/docs/reference/model/circle.md +7 -3
- package/dist/docs/reference/model/cornerCutter.md +88 -0
- package/dist/docs/reference/model/cylinder.md +6 -5
- package/dist/docs/reference/model/edgeCutter.md +91 -0
- package/dist/docs/reference/model/ellipse.md +7 -3
- package/dist/docs/reference/model/extrude.md +29 -23
- package/dist/docs/reference/model/generate.md +4 -2
- package/dist/docs/reference/model/gridPattern.md +11 -4
- package/dist/docs/reference/model/heightfield.md +5 -5
- package/dist/docs/reference/model/holeCutter.md +26 -12
- package/dist/docs/reference/model/hull.md +2 -2
- package/dist/docs/reference/model/implicit.md +3 -3
- package/dist/docs/reference/model/internalThreadCutter.md +32 -21
- package/dist/docs/reference/model/intersect.md +7 -3
- package/dist/docs/reference/model/join.md +6 -2
- package/dist/docs/reference/model/knuckleHinge.md +2 -3
- package/dist/docs/reference/model/linearPattern.md +11 -4
- package/dist/docs/reference/model/loft.md +28 -24
- package/dist/docs/reference/model/minkowskiSum.md +3 -3
- package/dist/docs/reference/model/pathPattern.md +17 -8
- package/dist/docs/reference/model/polygon.md +8 -3
- package/dist/docs/reference/model/radialPattern.md +11 -4
- package/dist/docs/reference/model/rectangle.md +11 -7
- package/dist/docs/reference/model/regularPolygon.md +7 -3
- package/dist/docs/reference/model/revolve.md +18 -12
- package/dist/docs/reference/model/solidFromMesh.md +10 -6
- package/dist/docs/reference/model/sphere.md +7 -6
- package/dist/docs/reference/model/star.md +11 -7
- package/dist/docs/reference/model/stroke.md +12 -8
- package/dist/docs/reference/model/svgPathSection.md +10 -4
- package/dist/docs/reference/model/svgSection.md +10 -4
- package/dist/docs/reference/model/sweep.md +102 -25
- package/dist/docs/reference/model/textSection.md +7 -3
- package/dist/docs/reference/model/threadRidge.md +16 -17
- package/dist/docs/reference/model/threadedNut.md +25 -22
- package/dist/docs/reference/model/threadedRod.md +21 -18
- package/dist/docs/reference/model/torus.md +13 -12
- package/dist/docs/reference/model/tube.md +6 -5
- package/dist/docs/reference/model/union.md +7 -3
- package/dist/docs/reference/model.md +10 -5
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +2 -2
- package/dist/docs/reference/text/VectorFont.md +38 -34
- package/dist/docs/reference/text/VectorFontOptions.md +2 -2
- package/dist/docs/reference/{geometry → text}/VectorTextArcBaseline.md +2 -11
- package/dist/docs/reference/{geometry → text}/VectorTextLayoutOptions.md +3 -11
- package/dist/docs/reference/{geometry → text}/VectorTextOptions.md +2 -10
- package/dist/docs/reference/text/categories/font-preparation.md +10 -1
- package/dist/docs/reference/text/prepareVectorFont.md +4 -2
- package/dist/docs/reference/text.md +7 -1
- package/dist/engine/execution.js +5 -3
- package/dist/engine/finalization.js +5 -5
- package/dist/engine/index.js +9 -4
- package/dist/engine/native/adapter.js +1 -1
- package/dist/engine/native/construction-mesh.js +15 -5
- package/dist/engine/native/context.js +10 -7
- package/dist/engine/native/index.js +1 -1
- package/dist/engine/native/material-components.js +2 -2
- package/dist/engine/native/mesh-observation.js +1 -1
- package/dist/engine/native/regions.js +44 -24
- package/dist/engine/native/scoped-primitives.js +3 -3
- package/dist/engine/native/scoped-threads.js +1 -13
- package/dist/engine/native/threads.js +2 -2
- package/dist/engine/native/transforms.js +2 -2
- package/dist/engine/operations/construction.js +77 -27
- package/dist/engine/operations/context.js +13 -6
- package/dist/engine/operations/cutters.js +112 -0
- package/dist/engine/operations/environment.js +2 -2
- package/dist/engine/operations/extrusion-finishing.js +42 -16
- package/dist/engine/operations/hole-cutter.js +125 -114
- package/dist/engine/operations/join-collar-profile.js +19 -19
- package/dist/engine/operations/join.js +86 -73
- package/dist/engine/operations/knuckle-hinge.js +25 -20
- package/dist/engine/operations/loft.js +9 -16
- package/dist/engine/operations/mechanical.js +4 -15
- package/dist/engine/operations/primitives/anchors.js +23 -19
- package/dist/engine/operations/primitives/construction.js +38 -12
- package/dist/engine/operations/primitives/correspondence.js +2 -2
- package/dist/engine/operations/primitives/profile-mesh.js +41 -80
- package/dist/engine/operations/primitives/profiles.js +5 -5
- package/dist/engine/operations/sections.js +8 -8
- package/dist/engine/operations/transforms.js +19 -39
- package/dist/engine/placement.js +3 -3
- package/dist/engine/recipe-realization.js +86 -30
- package/dist/engine/session/declarations.js +98 -0
- package/dist/engine/session/dependencies.js +81 -28
- package/dist/engine/session/graph.js +39 -137
- package/dist/engine/session/parameters.js +78 -0
- package/dist/engine/session/session.js +2 -2
- package/dist/engine/session/snapshot-cache.js +2 -2
- package/dist/engine/shape-anchors.js +13 -6
- package/dist/export/3mf.js +9 -2
- package/dist/export/capture.js +10 -6
- package/dist/export/glb.js +7 -2
- package/dist/export/stl.js +21 -6
- package/dist/geometry/{bounds.js → bounds/operations.js} +3 -1
- package/dist/geometry/{bounds-value.js → bounds/value.js} +20 -16
- package/dist/geometry/curves/evaluation.js +5 -6
- package/dist/geometry/curves/sampling.js +30 -6
- package/dist/geometry/{extrusion.js → extrusion/controls.js} +58 -35
- package/dist/geometry/extrusion/mesh.js +92 -0
- package/dist/geometry/extrusion/stations.js +35 -0
- package/dist/geometry/extrusion/twisted-chamfer.js +265 -0
- package/dist/geometry/immutable-buffer.js +7 -1
- package/dist/geometry/index.js +24 -32
- package/dist/geometry/{model-limits.js → limits.js} +1 -1
- package/dist/geometry/loft/{loft-correspondence.js → correspondence.js} +31 -20
- package/dist/geometry/loft/{loft-geometry.js → geometry.js} +15 -17
- package/dist/geometry/loft/mesh.js +53 -0
- package/dist/geometry/loft/{loft-options.js → options.js} +13 -11
- package/dist/geometry/loft/{loft-simple-mesh.js → simple-mesh.js} +26 -17
- package/dist/geometry/math/interpolation.js +9 -0
- package/dist/geometry/math/vector-value.js +12 -3
- package/dist/geometry/math/vector2.js +18 -5
- package/dist/geometry/math/vector3.js +28 -5
- package/dist/geometry/math-api.js +4 -0
- package/dist/geometry/mechanical/gear-motion.js +7 -5
- package/dist/geometry/mechanical/gears.js +21 -4
- package/dist/geometry/mechanical/knuckle-hinge.js +7 -5
- package/dist/geometry/mechanical/threads/fit.js +8 -2
- package/dist/geometry/mechanical/threads/helices.js +4 -2
- package/dist/geometry/mechanical/threads/mesh-plan.js +4 -2
- package/dist/geometry/mechanical/threads/mesh.js +12 -9
- package/dist/geometry/mechanical/threads/profiles.js +18 -4
- package/dist/geometry/mechanical/threads/solids.js +11 -2
- package/dist/geometry/mechanical-api.js +10 -0
- package/dist/geometry/mesh/{mesh-centroid.js → centroid.js} +2 -1
- package/dist/geometry/{heightfield.js → mesh/heightfield.js} +9 -5
- package/dist/geometry/{join-geometry.js → mesh/join-layers.js} +53 -59
- package/dist/geometry/mesh/{mesh.js → operations.js} +11 -18
- package/dist/geometry/mesh/{mesh-planar.js → planar.js} +8 -18
- package/dist/geometry/mesh/{mesh-quality.js → quality.js} +10 -42
- package/dist/geometry/mesh/{mesh-render.js → render-buffers.js} +22 -7
- package/dist/geometry/mesh/{mesh-signature.js → signature.js} +1 -1
- package/dist/geometry/mesh/{mesh-solid-intersections.js → solid-intersections.js} +2 -0
- package/dist/geometry/mesh/{mesh-solid.js → solid.js} +4 -4
- package/dist/geometry/mesh/triangle-quality.js +42 -0
- package/dist/geometry/mesh/winding.js +11 -0
- package/dist/geometry/{numeric.js → mesh/write-vertex.js} +1 -1
- package/dist/geometry/mesh-api.js +12 -11
- package/dist/geometry/paths/distribution.js +43 -0
- package/dist/geometry/paths/editing.js +76 -0
- package/dist/geometry/paths/frames.js +16 -11
- package/dist/geometry/paths/helix.js +1 -1
- package/dist/geometry/paths/resampling.js +46 -61
- package/dist/geometry/paths/{planar.js → rounding.js} +8 -67
- package/dist/geometry/paths/spline.js +116 -0
- package/dist/geometry/paths/traversal.js +107 -0
- package/dist/geometry/paths/{path-value.js → value.js} +97 -18
- package/dist/geometry/patterns/placements.js +20 -29
- package/dist/geometry/{patterns.js → patterns/transforms.js} +11 -7
- package/dist/geometry/primitives/cutters.js +70 -0
- package/dist/geometry/{cylinder.js → primitives/cylinder.js} +4 -4
- package/dist/geometry/{edge-finishing.js → primitives/edges.js} +5 -5
- package/dist/geometry/{primitive-resolvers.js → primitives/resolvers.js} +9 -9
- package/dist/geometry/primitives/sampling.js +41 -0
- package/dist/geometry/profiles/contour.js +19 -7
- package/dist/geometry/profiles/{match-profiles.js → matching.js} +9 -6
- package/dist/geometry/profiles/primitives/circle.js +1 -1
- package/dist/geometry/profiles/primitives/ellipse.js +2 -2
- package/dist/geometry/profiles/primitives/rectangle.js +8 -8
- package/dist/geometry/profiles/primitives/star.js +1 -1
- package/dist/geometry/profiles/side-profile.js +8 -5
- package/dist/geometry/profiles/validation.js +1 -1
- package/dist/geometry/{polygon-clipping.js → regions/clipping.js} +1 -1
- package/dist/geometry/{convex-offset.js → regions/convex-offset.js} +1 -1
- package/dist/geometry/{region-offset.js → regions/offset.js} +7 -5
- package/dist/geometry/{regions.js → regions/operations.js} +59 -22
- package/dist/geometry/{stroke-path.js → regions/stroke.js} +46 -20
- package/dist/geometry/{loft/loft-triangulation.js → regions/triangulation.js} +35 -2
- package/dist/geometry/revolve/{revolve-mesh.js → mesh.js} +9 -10
- package/dist/geometry/{circular-sampling.js → sampling/circular.js} +3 -3
- package/dist/geometry/{sampling-limits.js → sampling/limits.js} +6 -2
- package/dist/geometry/{resolution.js → sampling/resolution.js} +15 -14
- package/dist/geometry/svg/fill.js +4 -3
- package/dist/geometry/svg/import.js +47 -64
- package/dist/geometry/svg/path.js +3 -3
- package/dist/geometry/sweep/closed.js +55 -0
- package/dist/geometry/sweep/mesh.js +30 -0
- package/dist/geometry/{sweeps/sweep-open.js → sweep/open.js} +9 -24
- package/dist/geometry/{sweeps → sweep}/orientation.js +14 -11
- package/dist/geometry/sweep/seam.js +30 -0
- package/dist/geometry/{sweeps → sweep}/stations.js +75 -10
- package/dist/geometry/sweep/transforms.js +30 -0
- package/dist/geometry/{sweeps → sweep}/validation.js +4 -4
- package/dist/geometry/{text-contours.js → text/contours.js} +3 -3
- package/dist/geometry/{text-fitting.js → text/fitting.js} +4 -3
- package/dist/geometry/text/layout.js +1 -0
- package/dist/geometry/{transform3.js → transforms/affine3.js} +31 -46
- package/dist/geometry/{anchors.js → transforms/anchors.js} +43 -24
- package/dist/geometry/{transform-geometry.js → transforms/apply.js} +8 -5
- package/dist/geometry/{transform2.js → transforms/dimensions.js} +23 -19
- package/dist/geometry/transforms/frame.js +64 -0
- package/dist/geometry/{transform-matrix.js → transforms/matrix-input.js} +8 -1
- package/dist/geometry/{transform-value.js → transforms/value.js} +29 -11
- package/dist/index.js +3 -9
- package/dist/model/cutters.js +1 -0
- package/dist/model/execution-binding.js +3 -3
- package/dist/model/generation.js +2 -0
- package/dist/model/immutable-generation-data.js +2 -0
- package/dist/model/operations.js +130 -94
- package/dist/model/recipe-declaration.js +5 -7
- package/dist/text/index.js +3 -0
- package/dist/text/vector-text-layout.js +1 -0
- package/package.json +15 -17
- package/dist/api/export-3mf.d.ts +0 -2
- package/dist/api/export-glb.d.ts +0 -2
- package/dist/api/export-stl.d.ts +0 -2
- package/dist/docs/reference/geometry/BoxEdge.md +0 -17
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +0 -24
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +0 -25
- package/dist/docs/reference/geometry/CylinderOptions.md +0 -63
- package/dist/docs/reference/geometry/EndTreatments.md +0 -44
- package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +0 -144
- package/dist/docs/reference/geometry/ExtrudeOptions.md +0 -156
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +0 -25
- package/dist/docs/reference/geometry/LoftMeshStation.md +0 -41
- package/dist/docs/reference/geometry/PrimitiveAttachment.md +0 -39
- package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +0 -114
- package/dist/docs/reference/geometry/SphereOptions.md +0 -25
- package/dist/docs/reference/geometry/SweepOptions.md +0 -127
- package/dist/docs/reference/geometry/SweepOrientation.md +0 -127
- package/dist/docs/reference/geometry/TubeOptions.md +0 -72
- package/dist/docs/reference/geometry/add2.md +0 -43
- package/dist/docs/reference/geometry/add3.md +0 -49
- package/dist/docs/reference/geometry/applyTransformDirection3.md +0 -52
- package/dist/docs/reference/geometry/applyTransformPoint3.md +0 -50
- package/dist/docs/reference/geometry/categories/meshes.md +0 -68
- package/dist/docs/reference/geometry/composeTransform3.md +0 -51
- package/dist/docs/reference/geometry/cross2.md +0 -43
- package/dist/docs/reference/geometry/cross3.md +0 -49
- package/dist/docs/reference/geometry/distance2.md +0 -43
- package/dist/docs/reference/geometry/distance3.md +0 -43
- package/dist/docs/reference/geometry/dot2.md +0 -43
- package/dist/docs/reference/geometry/dot3.md +0 -49
- package/dist/docs/reference/geometry/eulerTransform3.md +0 -49
- package/dist/docs/reference/geometry/frameTransform3.md +0 -55
- package/dist/docs/reference/geometry/inverseTransform3.md +0 -41
- package/dist/docs/reference/geometry/length2.md +0 -37
- package/dist/docs/reference/geometry/length3.md +0 -37
- package/dist/docs/reference/geometry/lerp2.md +0 -49
- package/dist/docs/reference/geometry/lerp3.md +0 -49
- package/dist/docs/reference/geometry/normalize2.md +0 -46
- package/dist/docs/reference/geometry/normalize3.md +0 -46
- package/dist/docs/reference/geometry/projectOntoPlane3.md +0 -43
- package/dist/docs/reference/geometry/rotate2.md +0 -43
- package/dist/docs/reference/geometry/rotationTransform3.md +0 -60
- package/dist/docs/reference/geometry/scale2.md +0 -43
- package/dist/docs/reference/geometry/scale3.md +0 -49
- package/dist/docs/reference/geometry/scaleTransform3.md +0 -45
- package/dist/docs/reference/geometry/subtract2.md +0 -43
- package/dist/docs/reference/geometry/subtract3.md +0 -49
- package/dist/docs/reference/geometry/transformDeterminant3.md +0 -43
- package/dist/docs/reference/geometry/translationTransform3.md +0 -42
- package/dist/docs/reference/geometry/validateRigidTransform3.md +0 -41
- package/dist/docs/reference/geometry/validateTransform3.md +0 -54
- package/dist/docs/reference/model/Profile.md +0 -30
- package/dist/docs/reference/model/categories/explicit-profiles.md +0 -21
- package/dist/docs/reference/model/matchProfiles.md +0 -48
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +0 -93
- package/dist/docs/reference/model/preflightThreadedNut.md +0 -109
- package/dist/docs/reference/model/preflightThreadedRod.md +0 -93
- package/dist/engine/operations/patterns.js +0 -47
- package/dist/geometry/loft/loft.js +0 -105
- package/dist/geometry/mechanical/index.js +0 -14
- package/dist/geometry/primitive-resolution.js +0 -20
- package/dist/geometry/svg/index.js +0 -1
- package/dist/geometry/sweeps/options.js +0 -29
- package/dist/geometry/sweeps/sweep-closed.js +0 -96
- package/dist/geometry/sweeps/sweep-mesh.js +0 -32
- /package/dist/geometry/mechanical/{standards.js → fastener-standards.js} +0 -0
- /package/dist/geometry/mesh/{mesh-edge-table.js → edge-table.js} +0 -0
- /package/dist/geometry/mesh/{mesh-types.js → types.js} +0 -0
- /package/dist/geometry/mesh/{mesh-view-cache.js → view-cache.js} +0 -0
- /package/dist/geometry/{primitive-options.js → primitives/options.js} +0 -0
- /package/dist/geometry/{text-layout.js → sweep/options.js} +0 -0
|
@@ -9,6 +9,50 @@ Run the examples in a [Studio code Project](https://metamesh.studio/docs/develop
|
|
|
9
9
|
typed controls and prepared services. For a local model, follow the
|
|
10
10
|
[standalone workflow](standalone-model.md) and use its host entry point.
|
|
11
11
|
|
|
12
|
+
## Primitive booleans and repeated placement
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
import { box, cylinder, radialPattern, union } from "@metamesh/modeling";
|
|
18
|
+
import { generate } from "@metamesh/project";
|
|
19
|
+
|
|
20
|
+
export default generate(({ part }) => {
|
|
21
|
+
const hub = cylinder({ height: 12, radius: 14 });
|
|
22
|
+
const arm = box({ size: [30, 6, 6] });
|
|
23
|
+
// Translate first, then rotate the whole arm about the world origin.
|
|
24
|
+
// Its inner end overlaps the hub so union creates one connected part.
|
|
25
|
+
const arms = radialPattern(arm.translate([18, 0, 0]).rotate([0, 0, 30]), {
|
|
26
|
+
count: 6,
|
|
27
|
+
axis: [0, 0, 1],
|
|
28
|
+
angle: 60,
|
|
29
|
+
});
|
|
30
|
+
// Both shapes are Z-centered; extra cutter height clears both hub faces.
|
|
31
|
+
const bore = cylinder({ height: 16, radius: 4 });
|
|
32
|
+
// Combine the repeated features once, then cut the common bore.
|
|
33
|
+
return part("model", union([hub, ...arms]).subtract(bore));
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Position and rotate one arm, repeat it about +Z, union the overlaps, then cut a common bore.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
**Read a transform chain from left to right**
|
|
44
|
+
|
|
45
|
+
`arm.translate(...).rotate(...)` moves the arm, then rotates its new position about the origin.
|
|
46
|
+
Reverse the calls to rotate locally before moving it.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
Keep a deliberate overlap between each arm and the hub so the result is one connected solid.
|
|
51
|
+
|
|
52
|
+
Exact signatures: [`box`](../reference/model/box.md),
|
|
53
|
+
[`cylinder`](../reference/model/cylinder.md), and
|
|
54
|
+
[`radialPattern`](../reference/model/radialPattern.md).
|
|
55
|
+
|
|
12
56
|
## Reuse a transform across shapes and coordinates
|
|
13
57
|
|
|
14
58
|
Use [`transform2`](../reference/geometry/transform2.md) and
|
|
@@ -19,7 +63,7 @@ followed by a translation rotates around the origin, then moves the result:
|
|
|
19
63
|
|
|
20
64
|
|
|
21
65
|
```ts
|
|
22
|
-
import { transform3, vector3 } from "@metamesh/modeling";
|
|
66
|
+
import { transform3, vector3 } from "@metamesh/modeling/geometry";
|
|
23
67
|
|
|
24
68
|
// Calls apply in written order: rotate, then translate.
|
|
25
69
|
const placement = transform3().rotate([0, 0, 90]).translate([20, 0, 5]);
|
|
@@ -31,12 +75,12 @@ export const placedDirection = placement.applyDirection([10, 0, 0]); // approxim
|
|
|
31
75
|
|
|
32
76
|
Pass a transform directly to `solid.transform(placement)`, `section.transform(placement)` and
|
|
33
77
|
matching path helpers. Finished parts accept rigid transforms through `part(id, { geometry, transform })`;
|
|
34
|
-
pattern and attachment
|
|
78
|
+
pattern and attachment transforms work directly. Part placement rejects scale, shear and reflection.
|
|
35
79
|
`toData()` supplies a canonical matrix when another system needs it.
|
|
36
80
|
Construct the placement once and reuse it across point collections.
|
|
37
81
|
|
|
38
82
|
`current.andThen(next)` applies `current` first and `next` second, accepting another chain or a
|
|
39
|
-
same-dimensional matrix
|
|
83
|
+
same-dimensional matrix; 3D composition also accepts a `Frame3`. `inverse()` returns the reverse placement. Each operation returns a new
|
|
40
84
|
chain, so you can derive different placements from a shared starting point.
|
|
41
85
|
|
|
42
86
|
Use `rotate(degrees, { pivot })` or `scale(factors, { pivot })` to work around a world-space pivot after
|
|
@@ -58,20 +102,21 @@ See the [2D placement recipe](transforms-and-placement.md#reuse-a-2d-placement).
|
|
|
58
102
|
### Transform composition order
|
|
59
103
|
|
|
60
104
|
For low-level matrix interoperability, the factories accept existing canonical matrices. Use
|
|
61
|
-
`
|
|
62
|
-
`
|
|
105
|
+
`frame3({ origin, xAxis, yAxis, zAxis })` for an immutable coordinate frame and pass it directly
|
|
106
|
+
where a 3D placement is accepted. `transform3(frame)` adds affine methods when needed. The raw matrix constructors and
|
|
107
|
+
[`multiplyTransform3(after, before)`](../reference/math/multiplyTransform3.md) live in `/geometry/math`; composition applies `before` first:
|
|
63
108
|
|
|
64
109
|
|
|
65
110
|
|
|
66
111
|
```ts
|
|
67
|
-
import { transform3 } from "@metamesh/modeling";
|
|
68
|
-
import { applyTransformPoint3,
|
|
112
|
+
import { transform3 } from "@metamesh/modeling/geometry";
|
|
113
|
+
import { applyTransformPoint3, multiplyTransform3 } from "@metamesh/modeling/geometry/math";
|
|
69
114
|
|
|
70
115
|
const current = transform3().rotate([0, 0, 90]);
|
|
71
116
|
const next = transform3().translate([20, 0, 5]);
|
|
72
117
|
export const chainedPoint = current.andThen(next).applyPoint([10, 0, 0]);
|
|
73
118
|
export const composedPoint = applyTransformPoint3(
|
|
74
|
-
|
|
119
|
+
multiplyTransform3(next.toData(), current.toData()),
|
|
75
120
|
[10, 0, 0]
|
|
76
121
|
); // Both results are approximately [20, 10, 5].
|
|
77
122
|
export const reversedPoint = next.andThen(current).applyPoint([10, 0, 0]);
|
|
@@ -80,6 +125,56 @@ export const reversedPoint = next.andThen(current).applyPoint([10, 0, 0]);
|
|
|
80
125
|
|
|
81
126
|
|
|
82
127
|
|
|
128
|
+
## Named anchors and custom frames
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
import { box, cylinder } from "@metamesh/modeling";
|
|
134
|
+
import { generate } from "@metamesh/project";
|
|
135
|
+
|
|
136
|
+
export default generate(({ part }) => {
|
|
137
|
+
const base = box({ size: [40, 24, 6], center: false });
|
|
138
|
+
// Named anchors follow dimensions: no duplicated half-height calculation.
|
|
139
|
+
// Mating bottom to top opposes the two outward normals automatically.
|
|
140
|
+
const pin = cylinder({ diameter: 8, height: 12 }).attach("bottom", base.anchor("top"), {
|
|
141
|
+
gap: 0.2,
|
|
142
|
+
});
|
|
143
|
+
// Keep the gap and the two physical pieces instead of unioning the assembly.
|
|
144
|
+
return [part("base", { geometry: base }), part("pin", { geometry: pin })];
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
The pin's bottom mates to the base's top with a 0.2 mm gap. They remain two named parts.
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
Ordinary primitives know their named anchors, so `base.anchor("top")` follows the box's dimensions
|
|
153
|
+
and placement. `pin.attach("bottom", base.anchor("top"))` mates opposed directions. Transforms and
|
|
154
|
+
patterns carry those frames with the shape, with outward normals preserved under nonuniform scale
|
|
155
|
+
and reflection. The axis names are `left/right` (−X/+X), `back/front` (−Y/+Y) and `bottom/top` (−Z/+Z).
|
|
156
|
+
|
|
157
|
+
Use `shape.withAnchors({ mount: anchor3({ position, direction, up }) })` to define a custom datum
|
|
158
|
+
without changing the original shape. Existing names remain unless replaced; definitions are copied
|
|
159
|
+
and immutable.
|
|
160
|
+
Boolean and other constructed shapes need explicit definitions because their surfaces may change.
|
|
161
|
+
Anchor names use lowercase kebab-case, with at most 64 characters and 128 definitions per shape.
|
|
162
|
+
Look up anchors during active synchronous generation; the lookup evaluates the required recipe.
|
|
163
|
+
Returned frames are plain data.
|
|
164
|
+
|
|
165
|
+
Primitive anchors describe nominal construction dimensions. Finishing and curve sampling do not
|
|
166
|
+
move them. Tube and torus axial datums may lie over an opening; a cone has no cap anchor at its apex.
|
|
167
|
+
Regular polygons and stars expose only `center`. Custom `Anchor3` frames, including pure
|
|
168
|
+
`boxAnchor3` and `cylinderAnchor3` helpers, work wherever a source or target frame is required.
|
|
169
|
+
|
|
170
|
+
Primitive `attachment` uses the same source/target anchor, `alignment`, `gap`, and `spin`
|
|
171
|
+
options as `attach`, including a named `source`. It applies after local construction; Section
|
|
172
|
+
attachment must preserve the XY plane.
|
|
173
|
+
|
|
174
|
+
The `gap` here separates the two pieces along the target normal; it is a placement distance, not
|
|
175
|
+
a radial fit clearance. Keep separate named parts for an assembly. For one fused part, remove the
|
|
176
|
+
gap, add a small intended overlap, and [`union`](../reference/model/union.md) the solids.
|
|
177
|
+
|
|
83
178
|
## Calculate with vectors
|
|
84
179
|
|
|
85
180
|
Use [`vector2`](../reference/geometry/vector2.md) and [`vector3`](../reference/geometry/vector3.md)
|
|
@@ -126,8 +221,7 @@ same coordinate frame, including touching boundaries. It doesn't establish a man
|
|
|
126
221
|
|
|
127
222
|
|
|
128
223
|
```ts
|
|
129
|
-
import { bounds3 } from "@metamesh/modeling";
|
|
130
|
-
import { fitBounds, layoutRow, rectangleContour } from "@metamesh/modeling/geometry";
|
|
224
|
+
import { bounds3, fitBounds, layoutRow, rectangleContour } from "@metamesh/modeling/geometry";
|
|
131
225
|
import * as mesh from "@metamesh/modeling/geometry/mesh";
|
|
132
226
|
|
|
133
227
|
export const envelope = bounds3({ min: [-10, -5, 0], max: [10, 5, 8] });
|
|
@@ -140,9 +234,9 @@ export const measured = bounds3(mesh.bounds(triangleMesh));
|
|
|
140
234
|
export const fits = envelope.containsBounds(measured); // true
|
|
141
235
|
export const data = measured.toData(); // Frozen { min, max } record for interchange.
|
|
142
236
|
|
|
143
|
-
//
|
|
144
|
-
export const fitting = fitBounds(measured, envelope, { maxScale: 1 });
|
|
145
|
-
export const positions = layoutRow([measured, envelope], { gap: 2 });
|
|
237
|
+
// Pass plain bounds data to collection and placement algorithms.
|
|
238
|
+
export const fitting = fitBounds(measured.toData(), envelope.toData(), { maxScale: 1 });
|
|
239
|
+
export const positions = layoutRow([measured.toData(), envelope.toData()], { gap: 2 });
|
|
146
240
|
```
|
|
147
241
|
|
|
148
242
|
|
|
@@ -151,53 +245,18 @@ Factories snapshot finite, ordered coordinates with finite extents; zero extents
|
|
|
151
245
|
Alternatively construct from nonnegative dimensions with `bounds2({ size: [30, 18] })` or
|
|
152
246
|
`bounds3({ size: [30, 18, 8], center: false })`. Size construction centers on the origin by default;
|
|
153
247
|
size and min/max construction are mutually exclusive.
|
|
154
|
-
`min` and `max` are
|
|
248
|
+
`min` and `max` are fluent vectors, just like `size()` and `center()`. Use `toData()` for the
|
|
249
|
+
value's stable frozen min/max record with coordinate tuples.
|
|
155
250
|
Path `bounds()` queries return matching fluent bounds, or `undefined` for an empty path.
|
|
156
251
|
Mesh and region measurements, inspection results, and engine snapshots retain plain
|
|
157
252
|
`Bounds2Data` or `Bounds3Data`; wrap a measurement when you need fluent queries.
|
|
158
253
|
|
|
159
254
|
Use [`fitBounds`](../reference/geometry/fitBounds.md) to calculate a placement and
|
|
160
255
|
[`layoutRow`](../reference/geometry/layoutRow.md) to arrange a collection. These standalone
|
|
161
|
-
algorithms
|
|
256
|
+
algorithms take plain bounds data; use `bounds.toData()` when you have a fluent value. Supply
|
|
257
|
+
bounds after any intended rotation; an
|
|
162
258
|
axis-aligned box alone doesn't describe the underlying shape.
|
|
163
259
|
|
|
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
260
|
## Reuse a 2D placement
|
|
202
261
|
|
|
203
262
|
Build one [`transform2`](../reference/geometry/transform2.md) chain when the same placement applies
|
|
@@ -206,7 +265,8 @@ to a Section and its plain point data. This placement rotates around `[2, 1]`, t
|
|
|
206
265
|
|
|
207
266
|
|
|
208
267
|
```ts
|
|
209
|
-
import {
|
|
268
|
+
import { pathPattern, polygon, rectangle, union } from "@metamesh/modeling";
|
|
269
|
+
import { path2, transform2 } from "@metamesh/modeling/geometry";
|
|
210
270
|
|
|
211
271
|
const planarPlacement = transform2()
|
|
212
272
|
.rotate(90, { pivot: [2, 1] })
|
|
@@ -261,53 +321,3 @@ export const patternedTabs = union(tabs).extrude({ height: 3 });
|
|
|
261
321
|
|
|
262
322
|
Linear Section patterns use XY directions. Radial Section patterns rotate about an optional XY
|
|
263
323
|
`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.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Run models in a browser Worker
|
|
2
|
+
|
|
3
|
+
Resolve the WASM asset, transfer completed geometry, and optionally reuse delivered resources across edits.
|
|
4
|
+
|
|
5
|
+
Run the engine in a Worker when your browser application needs to keep modeling work off its UI
|
|
6
|
+
thread. Follow [host setup](hosting.md) inside the Worker; your application owns its
|
|
7
|
+
creation, messages, cancellation, and replacement.
|
|
8
|
+
|
|
9
|
+
## Resolve the WASM asset
|
|
10
|
+
|
|
11
|
+
The package includes its matching JS/WASM kernel. Node and unbundled browser modules resolve the
|
|
12
|
+
installed WASM asset automatically. A browser bundler must retain or emit that relative asset;
|
|
13
|
+
[`modelingWasmUrl`](../reference/engine/modelingWasmUrl.md) can supply the emitted URL through
|
|
14
|
+
`createModelEngine({ wasmUrl: modelingWasmUrl })`.
|
|
15
|
+
|
|
16
|
+
## Build once in a Worker
|
|
17
|
+
|
|
18
|
+
This example makes a plate in a module Worker and returns owned geometry buffers. Save the Worker
|
|
19
|
+
source as `model-worker.ts`; the client below resolves that sibling file through your bundler.
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { box, generate } from "@metamesh/modeling";
|
|
25
|
+
import { createModelEngine, modelingWasmUrl } from "@metamesh/modeling/engine";
|
|
26
|
+
|
|
27
|
+
const engine = createModelEngine({ wasmUrl: modelingWasmUrl });
|
|
28
|
+
const plate = generate<{ readonly width: number }>(({ params, part }) =>
|
|
29
|
+
part("plate", box({ size: [params.width, 20, 6] }))
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
globalThis.addEventListener("message", async (event: MessageEvent<{ readonly width: number }>) => {
|
|
33
|
+
try {
|
|
34
|
+
const model = (await engine).run(plate, event.data);
|
|
35
|
+
const parts = model.parts.map((part) => ({
|
|
36
|
+
id: part.id,
|
|
37
|
+
transform: part.transform,
|
|
38
|
+
geometry: {
|
|
39
|
+
positions: part.geometry.positions.copy(),
|
|
40
|
+
indices: part.geometry.indices.copy(),
|
|
41
|
+
},
|
|
42
|
+
}));
|
|
43
|
+
const transfer = parts.flatMap(({ geometry }) => [
|
|
44
|
+
geometry.positions.buffer,
|
|
45
|
+
geometry.indices.buffer,
|
|
46
|
+
]);
|
|
47
|
+
globalThis.postMessage({ ok: true, parts }, { transfer });
|
|
48
|
+
} catch (error) {
|
|
49
|
+
globalThis.postMessage({
|
|
50
|
+
ok: false,
|
|
51
|
+
message: error instanceof Error ? error.message : "Generation failed.",
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
Call `buildPlateInWorker(30)` from your application. This one-shot client waits for the result and
|
|
60
|
+
terminates its Worker in `finally`:
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
import type { ExportPart } from "@metamesh/modeling/export";
|
|
66
|
+
|
|
67
|
+
type ModelWorkerReply =
|
|
68
|
+
| { readonly ok: true; readonly parts: readonly ExportPart[] }
|
|
69
|
+
| { readonly ok: false; readonly message: string };
|
|
70
|
+
|
|
71
|
+
export async function buildPlateInWorker(width: number): Promise<readonly ExportPart[]> {
|
|
72
|
+
const worker = new Worker(new URL("./model-worker.ts", import.meta.url), { type: "module" });
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
return await new Promise((resolve, reject) => {
|
|
76
|
+
worker.addEventListener(
|
|
77
|
+
"message",
|
|
78
|
+
(event: MessageEvent<ModelWorkerReply>) => {
|
|
79
|
+
if (event.data.ok) resolve(event.data.parts);
|
|
80
|
+
else reject(new Error(event.data.message));
|
|
81
|
+
},
|
|
82
|
+
{ once: true }
|
|
83
|
+
);
|
|
84
|
+
worker.addEventListener("error", (event) => reject(new Error(event.message)), { once: true });
|
|
85
|
+
worker.postMessage({ width });
|
|
86
|
+
});
|
|
87
|
+
} finally {
|
|
88
|
+
worker.terminate();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
Pass the returned parts to your viewport or an [exporter](exporting.md). For an editor,
|
|
96
|
+
keep the Worker and a model session alive across edits, identify each request, and ignore stale
|
|
97
|
+
responses. Your application also owns deadlines and cancellation.
|
|
98
|
+
|
|
99
|
+
## Transfer completed geometry
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
**Transfer owned copies of buffers**
|
|
104
|
+
|
|
105
|
+
Transferring a buffer detaches it from the sender. Copy completed data before transferring it;
|
|
106
|
+
keep native handles and cache backing storage inside their engine.
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
## Use the optional delivery adapter
|
|
111
|
+
|
|
112
|
+
For repeated delivery with shared resource references, install the optional SDK:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
pnpm add @metamesh/generator-sdk
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
The `@metamesh/generator-sdk/modeling` adapter provides
|
|
119
|
+
`ModelDeliveryEncoder`. Its copies can be transferred while the engine result remains usable.
|
|
120
|
+
`PartDeliveryDecoder` from `@metamesh/generator-sdk/runtime` hydrates later resource references.
|
|
121
|
+
This one-shot ownership demonstration uses `structuredClone` to exercise the same transfer as
|
|
122
|
+
`worker.postMessage`; it does not create a Worker:
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
import { ModelDeliveryEncoder } from "@metamesh/generator-sdk/modeling";
|
|
128
|
+
// eslint-disable-next-line no-restricted-imports -- Host documentation snippet; Web only displays this code.
|
|
129
|
+
import { PartDeliveryDecoder } from "@metamesh/generator-sdk/runtime";
|
|
130
|
+
import { type ModelResult } from "@metamesh/modeling/engine";
|
|
131
|
+
import { export3mf } from "@metamesh/modeling/export";
|
|
132
|
+
|
|
133
|
+
export async function transferAndExport(model: ModelResult): Promise<Uint8Array> {
|
|
134
|
+
const encoder = new ModelDeliveryEncoder("preview");
|
|
135
|
+
const delivery = encoder.encode(model, {
|
|
136
|
+
revisionId: "preview-1",
|
|
137
|
+
requestId: 1,
|
|
138
|
+
bounds: model.bounds,
|
|
139
|
+
warnings: model.diagnostics,
|
|
140
|
+
});
|
|
141
|
+
const buffers = delivery.parts.flatMap(({ geometry }) =>
|
|
142
|
+
geometry.positions === undefined ? [] : [geometry.positions.buffer, geometry.indices!.buffer]
|
|
143
|
+
);
|
|
144
|
+
// This clone exercises the same ownership transfer as worker.postMessage(delivery, buffers).
|
|
145
|
+
const received = structuredClone(delivery, { transfer: buffers });
|
|
146
|
+
const decoder = new PartDeliveryDecoder({
|
|
147
|
+
maxParts: 64,
|
|
148
|
+
maxVertices: 1_000_000,
|
|
149
|
+
maxTriangles: 2_000_000,
|
|
150
|
+
maxBytes: 96 * 1024 * 1024,
|
|
151
|
+
});
|
|
152
|
+
const parts = decoder.decode(received.parts);
|
|
153
|
+
return (await export3mf(parts, { name: "Transferred model" })).bytes;
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
Keep one encoder and decoder per ordered connection. Clear both when the receiver is replaced.
|
|
160
|
+
Decoded parts contain **local** buffers under `geometry`, plus world placement. Keep these received
|
|
161
|
+
buffers immutable and attached. Pass decoded parts directly to the shared exporters. They read
|
|
162
|
+
local geometry and apply each part's placement once, preserving shared resources where the format
|
|
163
|
+
permits it. Engine `ModelResult.parts` use that same export contract.
|
|
164
|
+
|
|
165
|
+
Continue with [exporting completed parts](exporting.md), or use the
|
|
166
|
+
[Engine API reference](../reference/engine.md) for execution and snapshot contracts.
|