@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
|
@@ -10,7 +10,7 @@ export { triangulateContour } from "./loft-triangulation.js";
|
|
|
10
10
|
/**
|
|
11
11
|
* Lofts simple point loops at z heights or explicit right-handed frames, in input order.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
13
|
+
* Correspondence defaults to direct. CCW-normalized loops retain their
|
|
14
14
|
* seam and original vertices; unequal counts gain subdivisions or repeated fan slots.
|
|
15
15
|
* Both ends use ear-clipped caps, supporting concave profiles without center fans.
|
|
16
16
|
* Intermediate slices interpolate placed world vertices, never frame axes.
|
|
@@ -21,12 +21,14 @@ export { triangulateContour } from "./loft-triangulation.js";
|
|
|
21
21
|
* ```ts
|
|
22
22
|
* const bottom = rectangleContour({ size: [20, 12] });
|
|
23
23
|
* const top = rectangleContour({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
|
|
24
|
-
*
|
|
24
|
+
* mesh.loft([{ profile: bottom, z: 0 }, { profile: top, z: 30 }], { correspondence: "reindex" });
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
|
-
export function loftMesh(stations, options) {
|
|
28
|
-
if (options
|
|
29
|
-
throw new GeometryError("INVALID_ARGUMENT", "
|
|
27
|
+
export function loftMesh(stations, options = {}) {
|
|
28
|
+
if (typeof options !== "object" || options === null || Array.isArray(options))
|
|
29
|
+
throw new GeometryError("INVALID_ARGUMENT", "Loft options must be an object.", {
|
|
30
|
+
operation: "loftMesh",
|
|
31
|
+
});
|
|
30
32
|
const limits = resolveModelingLimits(options.limits);
|
|
31
33
|
if (!Array.isArray(stations) || stations.length < 2)
|
|
32
34
|
throw new GeometryError("INVALID_ARGUMENT", "Loft requires at least two stations.", {
|
|
@@ -53,16 +55,19 @@ export function loftMesh(stations, options) {
|
|
|
53
55
|
/**
|
|
54
56
|
* Linearly extrudes one simple profile along +Z with robust ear-clipped caps.
|
|
55
57
|
* Path2 profiles must be closed; raw point collections have an implicit closing edge.
|
|
58
|
+
* End treatments are unsupported and reject at runtime. Use Section.extrude for finished ends.
|
|
56
59
|
*
|
|
57
60
|
* @example Extrude point data without an engine
|
|
58
61
|
* ```ts
|
|
59
62
|
* const outline = rectangleContour({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
|
|
60
|
-
*
|
|
63
|
+
* mesh.extrude(outline, { height: 8 });
|
|
61
64
|
* ```
|
|
62
65
|
*/
|
|
63
66
|
export function extrudeMesh(input, options) {
|
|
64
67
|
const { height } = options;
|
|
65
68
|
const { center, scales, twist } = resolveExtrusionControls(height, options, "extrudeMesh");
|
|
69
|
+
if ("ends" in options)
|
|
70
|
+
throw new GeometryError("INVALID_ARGUMENT", "extrudeMesh does not support end treatments. Use Section.extrude instead.", { operation: "extrudeMesh" });
|
|
66
71
|
if (!Number.isFinite(height) || height <= 0) {
|
|
67
72
|
throw new GeometryError("INVALID_ARGUMENT", "Extrusion height must be finite and positive.", {
|
|
68
73
|
operation: "extrudeMesh",
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export { minimumCylindricalGearToothCountWithoutUndercut, resolveCylindricalGear, resolveCylindricalGearPair, resolveRackPitch, sampleCylindricalGearOutline, sampleInternalCylindricalGearSpaceOutline, sampleRackToothPath, } from "./gears.js";
|
|
7
7
|
export { measureInternalCylindricalGearPairMotion } from "./gear-motion.js";
|
|
8
|
-
export {
|
|
9
|
-
export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, threadProfile, } from "./
|
|
10
|
-
export {
|
|
11
|
-
export { sampleConventionalThreadHelices as sampleThreadHelices } from "./
|
|
12
|
-
export { compensateThreadDiameters, PRINTABLE_THREAD_FIT_POLICIES, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./threads.js";
|
|
8
|
+
export { threadRidgeMesh, threadSolidMesh } from "./threads/mesh.js";
|
|
9
|
+
export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, threadProfile, } from "./threads/profiles.js";
|
|
10
|
+
export { preflightThreadSolidMesh } from "./threads/mesh-plan.js";
|
|
11
|
+
export { sampleConventionalThreadHelices as sampleThreadHelices } from "./threads/helices.js";
|
|
12
|
+
export { compensateThreadDiameters, PRINTABLE_THREAD_FIT_POLICIES, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./threads/fit.js";
|
|
13
13
|
export { getMetricClearanceHoleDiameter, getMetricFastenerStandard, METRIC_FASTENER_STANDARDS, } from "./standards.js";
|
|
14
14
|
export { resolveKnuckleHinge, } from "./knuckle-hinge.js";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { GeometryError } from "../../errors.js";
|
|
2
|
+
/** @internal Validates and captures factory-specific automatic bevel sizes. */
|
|
3
|
+
export function resolveBevel(value, automatic, defaults, operation, parameter = "bevel") {
|
|
4
|
+
if (value === undefined)
|
|
5
|
+
return Object.freeze([defaults[0], defaults[1]]);
|
|
6
|
+
const invalid = () => {
|
|
7
|
+
throw new GeometryError("INVALID_ARGUMENT", `${parameter} must be a nonnegative finite size, "auto", or a [bottom, top] pair.`, {
|
|
8
|
+
operation,
|
|
9
|
+
details: { parameter },
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
const pair = Array.isArray(value) ? value : [value, value];
|
|
13
|
+
if (pair.length !== 2)
|
|
14
|
+
invalid();
|
|
15
|
+
const size = (index) => {
|
|
16
|
+
const item = pair[index];
|
|
17
|
+
if (item === "auto")
|
|
18
|
+
return automatic[index];
|
|
19
|
+
if (typeof item !== "number" || !Number.isFinite(item) || item < 0)
|
|
20
|
+
return invalid();
|
|
21
|
+
return item;
|
|
22
|
+
};
|
|
23
|
+
return Object.freeze([size(0), size(1)]);
|
|
24
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { resolveCircularSegments, resolveGeometryResolution, } from "
|
|
3
|
-
import { resolveGeometryTolerance } from "
|
|
4
|
-
import { compensateThreadProfileForFaceting } from "./
|
|
1
|
+
import { GeometryError } from "../../errors.js";
|
|
2
|
+
import { resolveCircularSegments, resolveGeometryResolution, } from "../../resolution.js";
|
|
3
|
+
import { resolveGeometryTolerance } from "../../tolerance.js";
|
|
4
|
+
import { compensateThreadProfileForFaceting } from "./profiles.js";
|
|
5
5
|
const frozenFit = (maleRadialInset, femaleRadialOutset, axialBacklash) => Object.freeze({ axialBacklash, femaleRadialOutset, maleRadialInset });
|
|
6
6
|
/**
|
|
7
7
|
* Conservative baseline print-fit policies in millimetres.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Conventional thread helix sampling, independent of surface construction. */
|
|
2
|
-
import { GeometryError } from "
|
|
3
|
-
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "
|
|
4
|
-
import { assertFiniteThreadNumber } from "./
|
|
2
|
+
import { GeometryError } from "../../errors.js";
|
|
3
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../../sampling-limits.js";
|
|
4
|
+
import { assertFiniteThreadNumber } from "./profiles.js";
|
|
5
5
|
/**
|
|
6
6
|
* Samples evenly phased thread helices with finite `lead = pitch * starts`.
|
|
7
7
|
* All starts together respect maxPathPoints (default 100000); excessive counts fail before allocation.
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/** Thread input resolution, end/bevel boundaries, and allocation preflight. */
|
|
2
|
-
import { GeometryError } from "
|
|
3
|
-
import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "
|
|
4
|
-
import { resolveCircularSegments, resolveGeometryResolution, } from "
|
|
5
|
-
import { resolveGeometryTolerance } from "
|
|
6
|
-
import {
|
|
2
|
+
import { GeometryError } from "../../errors.js";
|
|
3
|
+
import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "../../model-limits.js";
|
|
4
|
+
import { resolveCircularSegments, resolveGeometryResolution, } from "../../resolution.js";
|
|
5
|
+
import { resolveGeometryTolerance } from "../../tolerance.js";
|
|
6
|
+
import { resolveBevel } from "./bevel.js";
|
|
7
|
+
import { assertFiniteThreadNumber, createThreadRidgeSection, freezeThreadProfilePoints, MAX_THREAD_PROFILE_POINTS, } from "./profiles.js";
|
|
7
8
|
const validateMeshingProfile = (profile, linearTolerance, operation) => {
|
|
8
9
|
const pitch = assertFiniteThreadNumber(profile.pitch, "profile.pitch", operation);
|
|
9
10
|
const depth = assertFiniteThreadNumber(profile.depth, "profile.depth", operation);
|
|
@@ -74,7 +75,7 @@ const reindexThreadSectionForMajorEnvelope = (section, pitch, linearTolerance, o
|
|
|
74
75
|
return Object.freeze({ phaseOffset: cutPoint + pitch / 2, section: reindexed });
|
|
75
76
|
};
|
|
76
77
|
/** @internal Resolves shared ridge and solid sampling before construction. */
|
|
77
|
-
export const resolveHelicalThreadMeshOptions = (options, operation, circularSamplingRadius) => {
|
|
78
|
+
export const resolveHelicalThreadMeshOptions = (options, operation, circularSamplingRadius, reservations = [0, 0]) => {
|
|
78
79
|
const diameter = assertFiniteThreadNumber(options.majorDiameter, "majorDiameter", operation);
|
|
79
80
|
const length = assertFiniteThreadNumber(options.length, "length", operation);
|
|
80
81
|
assertFiniteThreadNumber(options.profile.pitch, "profile.pitch", operation);
|
|
@@ -103,8 +104,8 @@ export const resolveHelicalThreadMeshOptions = (options, operation, circularSamp
|
|
|
103
104
|
operation,
|
|
104
105
|
});
|
|
105
106
|
}
|
|
106
|
-
const bottomBoundary = bottom === "standard" ? 0 : endLength;
|
|
107
|
-
const topBoundary = top === "standard" ? length : length - endLength;
|
|
107
|
+
const bottomBoundary = bottom === "standard" ? 0 : Math.max(endLength, reservations[0]);
|
|
108
|
+
const topBoundary = top === "standard" ? length : length - Math.max(endLength, reservations[1]);
|
|
108
109
|
const usable = topBoundary - bottomBoundary;
|
|
109
110
|
if (!(diameter - 2 * options.profile.depth > tolerance.linear)) {
|
|
110
111
|
throw new GeometryError("INVALID_ARGUMENT", "A positive minor diameter is required.", {
|
|
@@ -185,6 +186,7 @@ export const resolveHelicalThreadMeshOptions = (options, operation, circularSamp
|
|
|
185
186
|
});
|
|
186
187
|
}
|
|
187
188
|
return {
|
|
189
|
+
bevel: [0, 0],
|
|
188
190
|
bottom,
|
|
189
191
|
bottomBoundary,
|
|
190
192
|
bottomLeadFullCenter,
|
|
@@ -215,19 +217,14 @@ export const resolveHelicalThreadMeshOptions = (options, operation, circularSamp
|
|
|
215
217
|
};
|
|
216
218
|
/** @internal Resolves the active radial bevel boundary at one axial station. */
|
|
217
219
|
export const threadSurfaceBevelBoundaryAt = (axial, profile, resolved, options) => {
|
|
218
|
-
const bottomBevelSize =
|
|
219
|
-
const topBevelSize = Math.min(options.bevelTopSize ?? options.bevelSize ?? profile.depth, resolved.length / 2);
|
|
220
|
+
const [bottomBevelSize, topBevelSize] = resolved.bevel;
|
|
220
221
|
const bevelOffset = options.bevelOffset ?? 0;
|
|
221
222
|
const bottomFace = bevelOffset;
|
|
222
223
|
const topFace = resolved.length - bevelOffset;
|
|
223
224
|
// Include the zero-depth stations here so callers can solve the exact point where a linear
|
|
224
225
|
// thread flank first meets the bevel. Applying the boundary at zero depth remains a no-op.
|
|
225
|
-
const bottomApplies =
|
|
226
|
-
|
|
227
|
-
axial <= bottomFace + bottomBevelSize + resolved.tolerance.linear;
|
|
228
|
-
const topApplies = options.bevelTop === true &&
|
|
229
|
-
topBevelSize > 0 &&
|
|
230
|
-
axial >= topFace - topBevelSize - resolved.tolerance.linear;
|
|
226
|
+
const bottomApplies = bottomBevelSize > 0 && axial <= bottomFace + bottomBevelSize + resolved.tolerance.linear;
|
|
227
|
+
const topApplies = topBevelSize > 0 && axial >= topFace - topBevelSize - resolved.tolerance.linear;
|
|
231
228
|
if (!bottomApplies && !topApplies)
|
|
232
229
|
return undefined;
|
|
233
230
|
const bottomDepth = bottomApplies
|
|
@@ -265,14 +262,9 @@ export const requirePositiveThreadSurfaceRadius = (radius, resolved, operation)
|
|
|
265
262
|
}
|
|
266
263
|
};
|
|
267
264
|
const resolveMaximumThreadSurfaceRadius = (options, diameter, length, operation) => {
|
|
268
|
-
const
|
|
269
|
-
const bottomBevelSize = assertFiniteThreadNumber(options.bevelBottomSize ?? bevelSize, "bevelBottomSize", operation);
|
|
270
|
-
const topBevelSize = assertFiniteThreadNumber(options.bevelTopSize ?? bevelSize, "bevelTopSize", operation);
|
|
265
|
+
const [bottomBevelSize, topBevelSize] = resolveBevel(options.bevel, [options.profile.depth, options.profile.depth], [0, 0], operation);
|
|
271
266
|
const bevelOffset = assertFiniteThreadNumber(options.bevelOffset ?? 0, "bevelOffset", operation);
|
|
272
|
-
if (
|
|
273
|
-
bottomBevelSize < 0 ||
|
|
274
|
-
topBevelSize < 0 ||
|
|
275
|
-
bevelOffset < 0 ||
|
|
267
|
+
if (bevelOffset < 0 ||
|
|
276
268
|
bevelOffset * 2 > length ||
|
|
277
269
|
(options.bevelMode !== undefined &&
|
|
278
270
|
options.bevelMode !== "inset" &&
|
|
@@ -286,39 +278,33 @@ const resolveMaximumThreadSurfaceRadius = (options, diameter, length, operation)
|
|
|
286
278
|
return majorRadius;
|
|
287
279
|
const outsetRadius = (style, size) => (style === "blunt" ? majorRadius : majorRadius - options.profile.depth) +
|
|
288
280
|
Math.min(size, length / 2);
|
|
289
|
-
return Math.max(majorRadius,
|
|
281
|
+
return Math.max(majorRadius, bottomBevelSize > 0
|
|
290
282
|
? outsetRadius(options.ends?.bottom ?? "blunt", bottomBevelSize)
|
|
291
|
-
: majorRadius, options.
|
|
292
|
-
? outsetRadius(options.ends?.top ?? "blunt", topBevelSize)
|
|
293
|
-
: majorRadius);
|
|
283
|
+
: majorRadius, topBevelSize > 0 ? outsetRadius(options.ends?.top ?? "blunt", topBevelSize) : majorRadius);
|
|
294
284
|
};
|
|
295
285
|
/** @internal Resolves the solid's sampling and conservative allocation plan. */
|
|
296
286
|
export const resolveHelicalThreadSolidMeshPreflight = (options, operation) => {
|
|
297
|
-
const
|
|
298
|
-
const
|
|
299
|
-
const
|
|
300
|
-
const
|
|
301
|
-
const
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
},
|
|
312
|
-
}
|
|
313
|
-
: options;
|
|
314
|
-
const resolved = resolveHelicalThreadMeshOptions(resolvedOptions, operation, (diameter, length) => resolveMaximumThreadSurfaceRadius(resolvedOptions, diameter, length, operation));
|
|
287
|
+
const sizes = resolveBevel(options.bevel, [options.profile.depth, options.profile.depth], [0, 0], operation);
|
|
288
|
+
const bottomBevelSize = Math.min(sizes[0], options.length / 2);
|
|
289
|
+
const topBevelSize = Math.min(sizes[1], options.length / 2);
|
|
290
|
+
const offset = options.bevelOffset ?? 0;
|
|
291
|
+
const base = resolveHelicalThreadMeshOptions(options, operation, (diameter, length) => resolveMaximumThreadSurfaceRadius(options, diameter, length, operation), [
|
|
292
|
+
bottomBevelSize > 0 && (options.ends?.bottom ?? "blunt") === "blunt"
|
|
293
|
+
? offset + bottomBevelSize
|
|
294
|
+
: 0,
|
|
295
|
+
topBevelSize > 0 && (options.ends?.top ?? "blunt") === "blunt" ? offset + topBevelSize : 0,
|
|
296
|
+
]);
|
|
297
|
+
const resolved = {
|
|
298
|
+
...base,
|
|
299
|
+
bevel: [bottomBevelSize, topBevelSize],
|
|
300
|
+
};
|
|
315
301
|
if ((options.bevelMode ?? "inset") === "inset") {
|
|
316
302
|
const majorRadius = resolved.diameter / 2;
|
|
317
|
-
if (
|
|
318
|
-
requirePositiveThreadSurfaceRadius(applyThreadSurfaceBevel(majorRadius, 0, options.profile, resolved,
|
|
303
|
+
if (bottomBevelSize > 0) {
|
|
304
|
+
requirePositiveThreadSurfaceRadius(applyThreadSurfaceBevel(majorRadius, 0, options.profile, resolved, options), resolved, operation);
|
|
319
305
|
}
|
|
320
|
-
if (
|
|
321
|
-
requirePositiveThreadSurfaceRadius(applyThreadSurfaceBevel(majorRadius, resolved.length, options.profile, resolved,
|
|
306
|
+
if (topBevelSize > 0) {
|
|
307
|
+
requirePositiveThreadSurfaceRadius(applyThreadSurfaceBevel(majorRadius, resolved.length, options.profile, resolved, options), resolved, operation);
|
|
322
308
|
}
|
|
323
309
|
}
|
|
324
310
|
const resolution = resolveGeometryResolution(options.resolution, options.limits);
|
|
@@ -354,9 +340,8 @@ export const resolveHelicalThreadSolidMeshPreflight = (options, operation) => {
|
|
|
354
340
|
* `circularSegments` is the selected count; row and triangle counts are conservative estimates.
|
|
355
341
|
* Successful preflight leaves generated coordinate and topology checks to mesh construction.
|
|
356
342
|
*
|
|
357
|
-
*
|
|
343
|
+
* See `mesh.threadSolid` for standalone mesh construction.
|
|
358
344
|
*/
|
|
359
|
-
export function
|
|
360
|
-
return resolveHelicalThreadSolidMeshPreflight(options, "
|
|
361
|
-
.preflight;
|
|
345
|
+
export function preflightThreadSolidMesh(options) {
|
|
346
|
+
return resolveHelicalThreadSolidMeshPreflight(options, "preflightThreadSolidMesh").preflight;
|
|
362
347
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/** Closed ridge and complete-solid mesh construction from resolved thread plans. */
|
|
2
|
-
import { triangulateContour } from "
|
|
3
|
-
import { analyzeTriangleMesh, joinTriangleMeshes, reverseTriangleMesh, validateTriangleMesh, } from "
|
|
4
|
-
import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "
|
|
5
|
-
import { resolveHelicalThreadMeshOptions, resolveHelicalThreadSolidMeshPreflight, } from "./
|
|
6
|
-
import { buildThreadSurfaceColumn, stitchThreadSurfaceColumns } from "./
|
|
2
|
+
import { triangulateContour } from "../../loft/loft.js";
|
|
3
|
+
import { analyzeTriangleMesh, joinTriangleMeshes, reverseTriangleMesh, validateTriangleMesh, } from "../../mesh/mesh.js";
|
|
4
|
+
import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../../model-limits.js";
|
|
5
|
+
import { resolveHelicalThreadMeshOptions, resolveHelicalThreadSolidMeshPreflight, } from "./mesh-plan.js";
|
|
6
|
+
import { buildThreadSurfaceColumn, stitchThreadSurfaceColumns } from "./surface.js";
|
|
7
7
|
const MINIMUM_TAPERED_RIDGE_HEIGHT = 0.0005;
|
|
8
8
|
const buildThreadRidgeComponent = (options) => {
|
|
9
9
|
const { profile } = options;
|
|
@@ -74,8 +74,8 @@ const buildThreadRidgeComponent = (options) => {
|
|
|
74
74
|
* conservative pre-allocation estimate rejects excessive meshes before constructing position
|
|
75
75
|
* arrays.
|
|
76
76
|
*/
|
|
77
|
-
export function
|
|
78
|
-
const operation = "
|
|
77
|
+
export function threadSolidMesh(options) {
|
|
78
|
+
const operation = "threadSolidMesh";
|
|
79
79
|
const { maximumAxialSegmentLength, resolved } = resolveHelicalThreadSolidMeshPreflight(options, operation);
|
|
80
80
|
const positions = [];
|
|
81
81
|
const columns = Array.from({ length: resolved.segments }, (_, column) => buildThreadSurfaceColumn(options.profile, resolved, options, resolved.phase + (column * 2 * Math.PI) / resolved.segments, maximumAxialSegmentLength, positions));
|
|
@@ -113,8 +113,8 @@ export function helicalThreadSolidMesh(options) {
|
|
|
113
113
|
* shaft's radial/axial frame. The mesh is intended for union with its
|
|
114
114
|
* minor-envelope cylinder and never owns WASM objects.
|
|
115
115
|
*/
|
|
116
|
-
export function
|
|
117
|
-
const operation = "
|
|
116
|
+
export function threadRidgeMesh(options) {
|
|
117
|
+
const operation = "threadRidgeMesh";
|
|
118
118
|
const resolved = resolveHelicalThreadMeshOptions(options, operation);
|
|
119
119
|
const z0 = resolved.bottomBoundary - resolved.section[0][0];
|
|
120
120
|
const z1 = resolved.topBoundary - resolved.section.at(-1)[0];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Periodic thread profiles and axial/radial fit compensation. */
|
|
2
|
-
import { GeometryError } from "
|
|
3
|
-
import { triangulateContour } from "
|
|
4
|
-
import { resolveGeometryTolerance } from "
|
|
2
|
+
import { GeometryError } from "../../errors.js";
|
|
3
|
+
import { triangulateContour } from "../../loft/loft.js";
|
|
4
|
+
import { resolveGeometryTolerance } from "../../tolerance.js";
|
|
5
5
|
const BUTTRESS_DEFAULT_DEPTH_RATIO = 0.66271;
|
|
6
6
|
const BUTTRESS_CREST_FLAT_RATIO = 0.16316;
|
|
7
7
|
const BUTTRESS_PRESSURE_ANGLE_RADIANS = (7 * Math.PI) / 180;
|
|
@@ -1,24 +1,17 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { resolveCircularSegments } from "
|
|
3
|
-
import { resolveGeometryTolerance } from "
|
|
4
|
-
import { compensateThreadDiameters,
|
|
5
|
-
import {
|
|
1
|
+
import { GeometryError } from "../../errors.js";
|
|
2
|
+
import { resolveCircularSegments } from "../../resolution.js";
|
|
3
|
+
import { resolveGeometryTolerance } from "../../tolerance.js";
|
|
4
|
+
import { compensateThreadDiameters, preflightThreadSolidMesh, resolveThreadCircularSegments, } from "../index.js";
|
|
5
|
+
import { resolveBevel } from "./bevel.js";
|
|
6
|
+
import { compensateThreadProfileForFaceting, scaleThreadProfileRadially } from "./profiles.js";
|
|
6
7
|
const THREAD_FACETING_MARGIN = 0.001;
|
|
7
|
-
const resolveCompensatedThreadBevelSize = (
|
|
8
|
-
if (options.bevelSize !== undefined)
|
|
9
|
-
return options.bevelSize;
|
|
8
|
+
const resolveCompensatedThreadBevelSize = (role, compensated, style, depth) => {
|
|
10
9
|
if (style !== "blunt")
|
|
11
|
-
return
|
|
10
|
+
return depth;
|
|
12
11
|
const envelopeDiameter = role === "female" ? compensated.majorDiameter : compensated.minorDiameter;
|
|
13
12
|
return envelopeDiameter / 12;
|
|
14
13
|
};
|
|
15
14
|
export const resolveCompensatedThreadSolidMesh = (options, role) => {
|
|
16
|
-
if (options.bevelSize !== undefined &&
|
|
17
|
-
(!Number.isFinite(options.bevelSize) || options.bevelSize < 0)) {
|
|
18
|
-
throw new GeometryError("INVALID_ARGUMENT", "Thread bevel size must be finite and non-negative.", {
|
|
19
|
-
operation: "threadedSolid",
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
15
|
const compensated = compensateThreadDiameters({
|
|
23
16
|
nominalMajorDiameter: options.nominalMajorDiameter,
|
|
24
17
|
threadDepth: options.profile.depth,
|
|
@@ -36,16 +29,18 @@ export const resolveCompensatedThreadSolidMesh = (options, role) => {
|
|
|
36
29
|
const requestedEnds = options.ends ?? {};
|
|
37
30
|
const bottomStyle = requestedEnds.bottom ?? "blunt";
|
|
38
31
|
const topStyle = requestedEnds.top ?? "blunt";
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
32
|
+
const automatic = (dimensions, selectedRole) => [
|
|
33
|
+
resolveCompensatedThreadBevelSize(selectedRole, dimensions, bottomStyle, options.profile.depth),
|
|
34
|
+
resolveCompensatedThreadBevelSize(selectedRole, dimensions, topStyle, options.profile.depth),
|
|
35
|
+
];
|
|
36
|
+
const bevel = resolveBevel(options.bevel, automatic(compensated, role), [0, 0], "threadedSolid");
|
|
37
|
+
const femaleBevel = resolveBevel(options.bevel, automatic(compensatedFemale, "female"), [0, 0], "threadedSolid");
|
|
43
38
|
const starts = options.starts ?? 1;
|
|
44
39
|
const hypotheticalFemaleLength = options.length + options.profile.pitch * 2;
|
|
45
40
|
const femaleBevelOutset = (style, size) => style === "blunt"
|
|
46
41
|
? Math.min(size, hypotheticalFemaleLength / 2)
|
|
47
42
|
: Math.max(0, Math.min(size, hypotheticalFemaleLength / 2) - options.profile.depth);
|
|
48
|
-
const maxRadialOutset = Math.max(
|
|
43
|
+
const maxRadialOutset = Math.max(femaleBevelOutset(bottomStyle, femaleBevel[0]), femaleBevelOutset(topStyle, femaleBevel[1]));
|
|
49
44
|
const segments = resolveThreadCircularSegments({
|
|
50
45
|
nominalMajorDiameter: options.nominalMajorDiameter,
|
|
51
46
|
profile: options.profile,
|
|
@@ -73,7 +68,7 @@ export const resolveCompensatedThreadSolidMesh = (options, role) => {
|
|
|
73
68
|
// translated cutter still starts and stops its thread at the caller's requested coordinates.
|
|
74
69
|
const ends = {
|
|
75
70
|
...requestedEnds,
|
|
76
|
-
endLength:
|
|
71
|
+
endLength: (requestedEnds.endLength ?? 0) + axialExtension,
|
|
77
72
|
leadInEnvelope: role === "female" ? "major" : "minor",
|
|
78
73
|
};
|
|
79
74
|
return Object.freeze({
|
|
@@ -85,17 +80,14 @@ export const resolveCompensatedThreadSolidMesh = (options, role) => {
|
|
|
85
80
|
majorDiameter,
|
|
86
81
|
length: workingLength,
|
|
87
82
|
resolution,
|
|
88
|
-
|
|
83
|
+
bevel,
|
|
89
84
|
bevelMode: role === "female" ? "outset" : "inset",
|
|
90
85
|
bevelOffset: axialExtension,
|
|
91
|
-
bevelTopSize: topBevelSize,
|
|
92
|
-
...(options.bevelBottom === undefined ? {} : { bevelBottom: options.bevelBottom }),
|
|
93
|
-
...(options.bevelTop === undefined ? {} : { bevelTop: options.bevelTop }),
|
|
94
86
|
ends,
|
|
95
87
|
}),
|
|
96
88
|
});
|
|
97
89
|
};
|
|
98
|
-
const preflightCompensatedThreadSolid = (options, role) =>
|
|
90
|
+
const preflightCompensatedThreadSolid = (options, role) => preflightThreadSolidMesh(resolveCompensatedThreadSolidMesh(options, role).meshOptions);
|
|
99
91
|
/**
|
|
100
92
|
* Resolves compensated rod dimensions and checks conservative mesh estimates against output limits.
|
|
101
93
|
*
|
|
@@ -103,8 +95,8 @@ const preflightCompensatedThreadSolid = (options, role) => preflightHelicalThrea
|
|
|
103
95
|
* host execution. It creates planning data without mesh buffers or native objects; returned row
|
|
104
96
|
* and triangle counts are estimates. Mesh validity and native construction are checked later.
|
|
105
97
|
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
98
|
+
* See `mesh.preflightThreadSolid` for standalone mesh estimates.
|
|
99
|
+
* See `mesh.threadSolid` for standalone mesh construction.
|
|
108
100
|
*/
|
|
109
101
|
export function preflightThreadedRodSolid(options) {
|
|
110
102
|
return preflightCompensatedThreadSolid(options, "male");
|
|
@@ -117,8 +109,8 @@ export function preflightThreadedRodSolid(options) {
|
|
|
117
109
|
* creates planning data without mesh buffers or native objects. Row and triangle counts are
|
|
118
110
|
* estimates; mesh validity and native construction are checked later.
|
|
119
111
|
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
112
|
+
* See `mesh.preflightThreadSolid` for standalone mesh estimates.
|
|
113
|
+
* See `mesh.threadSolid` for standalone mesh construction.
|
|
122
114
|
*/
|
|
123
115
|
export function preflightInternalThreadCutterSolid(options) {
|
|
124
116
|
return preflightCompensatedThreadSolid(options, "female");
|
|
@@ -137,27 +129,12 @@ export const resolveThreadedNutSolid = (options, operation) => {
|
|
|
137
129
|
if (!Number.isFinite(options.thickness) || !(options.thickness > 0)) {
|
|
138
130
|
throwInvalidNutScalar("thickness", "thickness", "finite and greater than zero", operation);
|
|
139
131
|
}
|
|
140
|
-
if (options.chamferSize !== undefined &&
|
|
141
|
-
(!Number.isFinite(options.chamferSize) || options.chamferSize < 0)) {
|
|
142
|
-
throwInvalidNutScalar("chamfer size", "chamferSize", "finite and non-negative", operation);
|
|
143
|
-
}
|
|
144
132
|
if (options.shape !== "hex" && options.shape !== "round" && options.shape !== "square") {
|
|
145
133
|
throw new GeometryError("INVALID_ARGUMENT", "Unsupported threaded nut shape.", {
|
|
146
134
|
operation,
|
|
147
135
|
details: { parameter: "shape" },
|
|
148
136
|
});
|
|
149
137
|
}
|
|
150
|
-
const bevel = options.bevel ?? "automatic";
|
|
151
|
-
if (bevel !== "automatic" &&
|
|
152
|
-
bevel !== "both" &&
|
|
153
|
-
bevel !== "inside" &&
|
|
154
|
-
bevel !== "none" &&
|
|
155
|
-
bevel !== "outside") {
|
|
156
|
-
throw new GeometryError("INVALID_ARGUMENT", "Unsupported threaded nut bevel selection.", {
|
|
157
|
-
operation,
|
|
158
|
-
details: { parameter: "bevel" },
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
138
|
const segments = options.shape === "hex"
|
|
162
139
|
? 6
|
|
163
140
|
: options.shape === "square"
|
|
@@ -165,73 +142,65 @@ export const resolveThreadedNutSolid = (options, operation) => {
|
|
|
165
142
|
: resolveCircularSegments(options.width / 2, options.bodyResolution ?? options.resolution, options.limits);
|
|
166
143
|
const sideCosine = Math.cos(Math.PI / segments);
|
|
167
144
|
const outerRadius = options.shape === "round" ? options.width / 2 : options.width / (2 * sideCosine);
|
|
168
|
-
const
|
|
169
|
-
const
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
parameter: "
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
},
|
|
183
|
-
});
|
|
145
|
+
const autoSize = Math.min(options.profile.depth, options.thickness / 4);
|
|
146
|
+
const automatic = [autoSize, autoSize];
|
|
147
|
+
const innerBevel = resolveBevel(options.innerBevel, automatic, automatic, operation, "innerBevel");
|
|
148
|
+
const outerBevel = resolveBevel(options.outerBevel, automatic, automatic, operation, "outerBevel");
|
|
149
|
+
for (const [parameter, sizes] of [
|
|
150
|
+
["innerBevel", innerBevel],
|
|
151
|
+
["outerBevel", outerBevel],
|
|
152
|
+
]) {
|
|
153
|
+
if (sizes[0] + sizes[1] >= options.thickness) {
|
|
154
|
+
throw new GeometryError("DEGENERATE_GEOMETRY", "Nut bevels must leave a positive axial band.", {
|
|
155
|
+
operation,
|
|
156
|
+
details: { parameter, reason: "insufficient-axial-space", thickness: options.thickness },
|
|
157
|
+
});
|
|
158
|
+
}
|
|
184
159
|
}
|
|
185
|
-
const
|
|
186
|
-
const
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
length: options.thickness,
|
|
190
|
-
bevelBottom: inside,
|
|
191
|
-
bevelTop: inside,
|
|
192
|
-
bevelSize: chamferSize,
|
|
193
|
-
}, "female");
|
|
194
|
-
const plainBodyFaceInradius = outerRadius * sideCosine;
|
|
195
|
-
const chamferedBodyFaceInradius = (outerRadius - chamferSize) * sideCosine;
|
|
196
|
-
const bottomBodyFaceInradius = bevelBottom ? chamferedBodyFaceInradius : plainBodyFaceInradius;
|
|
197
|
-
const topBodyFaceInradius = bevelTop ? chamferedBodyFaceInradius : plainBodyFaceInradius;
|
|
160
|
+
const cutter = resolveCompensatedThreadSolidMesh({ ...options, length: options.thickness, bevel: innerBevel }, "female");
|
|
161
|
+
const bodyFaceInradius = (size) => (outerRadius - size) * sideCosine;
|
|
162
|
+
const bottomBodyFaceInradius = bodyFaceInradius(outerBevel[0]);
|
|
163
|
+
const topBodyFaceInradius = bodyFaceInradius(outerBevel[1]);
|
|
198
164
|
const minimumBodyFaceInradius = Math.min(bottomBodyFaceInradius, topBodyFaceInradius);
|
|
199
165
|
const cutterMajorRadius = cutter.meshOptions.majorDiameter / 2;
|
|
200
|
-
const cutterFaceRadiusFor = (style) =>
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
: cutterMajorRadius;
|
|
204
|
-
const bottomCutterFaceRadius = cutterFaceRadiusFor(options.ends?.bottom ?? "blunt");
|
|
205
|
-
const topCutterFaceRadius = cutterFaceRadiusFor(options.ends?.top ?? "blunt");
|
|
166
|
+
const cutterFaceRadiusFor = (style, size) => cutterMajorRadius + (style === "blunt" ? size : Math.max(0, size - options.profile.depth));
|
|
167
|
+
const bottomCutterFaceRadius = cutterFaceRadiusFor(options.ends?.bottom ?? "blunt", innerBevel[0]);
|
|
168
|
+
const topCutterFaceRadius = cutterFaceRadiusFor(options.ends?.top ?? "blunt", innerBevel[1]);
|
|
206
169
|
const cutterFaceRadius = Math.max(bottomCutterFaceRadius, topCutterFaceRadius);
|
|
207
|
-
const
|
|
170
|
+
const bottomFaceWall = bottomBodyFaceInradius - bottomCutterFaceRadius;
|
|
171
|
+
const topFaceWall = topBodyFaceInradius - topCutterFaceRadius;
|
|
172
|
+
const minimumFaceWall = Math.min(bottomFaceWall, topFaceWall);
|
|
208
173
|
const requiredFaceWall = Math.max(THREAD_FACETING_MARGIN, resolveGeometryTolerance(Math.max(options.width, options.thickness, cutter.meshOptions.majorDiameter), options.tolerance).linear);
|
|
209
174
|
if (!(minimumFaceWall > requiredFaceWall)) {
|
|
210
|
-
const
|
|
175
|
+
const end = bottomFaceWall <= topFaceWall ? 0 : 1;
|
|
176
|
+
const parameter = outerBevel[end] > 0 ? "outerBevel" : innerBevel[end] > 0 ? "innerBevel" : "width";
|
|
177
|
+
const chamferIsActive = parameter !== "width";
|
|
211
178
|
throw new GeometryError("DEGENERATE_GEOMETRY", chamferIsActive
|
|
212
179
|
? "Threaded nut chamfer must leave a positive end-face annulus around the compensated thread."
|
|
213
180
|
: "Threaded nut width must leave a positive end-face annulus around the compensated thread.", {
|
|
214
181
|
operation,
|
|
215
182
|
details: {
|
|
216
|
-
|
|
183
|
+
innerBottomBevel: innerBevel[0],
|
|
184
|
+
innerTopBevel: innerBevel[1],
|
|
185
|
+
outerBottomBevel: outerBevel[0],
|
|
186
|
+
outerTopBevel: outerBevel[1],
|
|
217
187
|
cutterFaceRadius,
|
|
218
188
|
minimumBodyFaceInradius,
|
|
219
189
|
minimumFaceWall,
|
|
220
|
-
parameter
|
|
190
|
+
parameter,
|
|
221
191
|
reason: "insufficient-face-annulus",
|
|
222
192
|
requiredFaceWall,
|
|
223
193
|
},
|
|
224
194
|
});
|
|
225
195
|
}
|
|
226
|
-
const thread =
|
|
196
|
+
const thread = preflightThreadSolidMesh(cutter.meshOptions);
|
|
227
197
|
return Object.freeze({
|
|
228
|
-
bevelBottom,
|
|
229
|
-
bevelTop,
|
|
230
198
|
cutter,
|
|
231
199
|
outerRadius,
|
|
232
200
|
preflight: Object.freeze({
|
|
233
201
|
bodySegments: segments,
|
|
234
|
-
|
|
202
|
+
innerBevel,
|
|
203
|
+
outerBevel,
|
|
235
204
|
cutterFaceRadius,
|
|
236
205
|
minimumBodyFaceInradius,
|
|
237
206
|
minimumFaceWall,
|
|
@@ -248,7 +217,7 @@ export const resolveThreadedNutSolid = (options, operation) => {
|
|
|
248
217
|
* `thread` contains conservative cutter estimates, excluding the body and Boolean result.
|
|
249
218
|
* Successful preflight leaves mesh validity, native construction, and manufacturing fit to later checks.
|
|
250
219
|
*
|
|
251
|
-
*
|
|
220
|
+
* See `mesh.preflightThreadSolid` for standalone mesh estimates.
|
|
252
221
|
*/
|
|
253
222
|
export function preflightThreadedNutSolid(options) {
|
|
254
223
|
return resolveThreadedNutSolid(options, "preflightThreadedNutSolid").preflight;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Periodic surface columns and their phase-aware zipper stitching. */
|
|
2
|
-
import { cross3, dot3, length3, subtract3 } from "
|
|
3
|
-
import { applyThreadSurfaceBevel, requirePositiveThreadSurfaceRadius, threadSurfaceBevelBoundaryAt, } from "./
|
|
2
|
+
import { cross3, dot3, length3, subtract3 } from "../../math/vector3.js";
|
|
3
|
+
import { applyThreadSurfaceBevel, requirePositiveThreadSurfaceRadius, threadSurfaceBevelBoundaryAt, } from "./mesh-plan.js";
|
|
4
4
|
const threadLeadInScale = (progress, shape, leadInLength) => {
|
|
5
5
|
if (shape === "cut")
|
|
6
6
|
return progress > 0 ? { height: 1, width: 1 } : { height: 0, width: 1 };
|
|
@@ -140,20 +140,19 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
|
|
|
140
140
|
};
|
|
141
141
|
add(0);
|
|
142
142
|
add(resolved.length);
|
|
143
|
-
const bottomBevelSize =
|
|
144
|
-
const topBevelSize = Math.min(options.bevelTopSize ?? options.bevelSize ?? profile.depth, resolved.length / 2);
|
|
143
|
+
const [bottomBevelSize, topBevelSize] = resolved.bevel;
|
|
145
144
|
const fixedSamples = [resolved.bottomBoundary, resolved.topBoundary];
|
|
146
145
|
if (resolved.bottom === "tapered")
|
|
147
146
|
fixedSamples.push(resolved.bottomBoundary + profile.depth);
|
|
148
147
|
if (resolved.top === "tapered")
|
|
149
148
|
fixedSamples.push(resolved.topBoundary - profile.depth);
|
|
150
|
-
if (
|
|
149
|
+
if (bottomBevelSize > 0) {
|
|
151
150
|
fixedSamples.push(bevelOffset, bevelOffset + bottomBevelSize);
|
|
152
151
|
}
|
|
153
|
-
if (
|
|
152
|
+
if (topBevelSize > 0) {
|
|
154
153
|
fixedSamples.push(resolved.length - bevelOffset - topBevelSize, resolved.length - bevelOffset);
|
|
155
154
|
}
|
|
156
|
-
if (
|
|
155
|
+
if (bottomBevelSize > 0 && topBevelSize > 0) {
|
|
157
156
|
const bottomBevelEnd = bevelOffset + bottomBevelSize;
|
|
158
157
|
const topBevelStart = resolved.length - bevelOffset - topBevelSize;
|
|
159
158
|
if (bottomBevelEnd >= topBevelStart) {
|
|
@@ -348,7 +347,7 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
|
|
|
348
347
|
let previousZ;
|
|
349
348
|
for (const sample of sampled) {
|
|
350
349
|
const radius = radiusAt(sample, sample.z);
|
|
351
|
-
requirePositiveThreadSurfaceRadius(radius, resolved, "
|
|
350
|
+
requirePositiveThreadSurfaceRadius(radius, resolved, "threadSolidMesh");
|
|
352
351
|
if (previousRadius !== undefined &&
|
|
353
352
|
previousZ !== undefined &&
|
|
354
353
|
Math.abs(sample.z - previousZ) <= resolved.tolerance.linear &&
|