@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
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
-
import { normalizeContour, normalizeRegion, signedContourArea } from "../regions.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { loftFrame, resolveLoftControls } from "./loft-options.js";
|
|
2
|
+
import { normalizeContour, normalizeRegion, signedContourArea } from "../regions/operations.js";
|
|
3
|
+
import { assertSamplingCount } from "../sampling/limits.js";
|
|
4
|
+
import { resolveGeometryResolution } from "../sampling/resolution.js";
|
|
5
|
+
import { alignLoftRows, assertLoftGrid, loftSubdivisions, sliceLoftRows, subdivideLoftRow, } from "./correspondence.js";
|
|
6
|
+
import { loftTransform, resolveLoftControls } from "./options.js";
|
|
8
7
|
const fail = (message) => {
|
|
9
8
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "loft" });
|
|
10
9
|
};
|
|
@@ -76,10 +75,9 @@ export function prepareLoftGeometry(input, options, limits, authoritative, recip
|
|
|
76
75
|
assertSamplingCount(input.reduce((sum, station) => sum + loftProfilePointCount(station.profile), 0), "loft", 1_000_000);
|
|
77
76
|
if (authoritative && controls.methods.some((method) => method !== "direct"))
|
|
78
77
|
fail("Identified loft landmarks are authoritative and cannot be remapped by geometric correspondence methods.");
|
|
79
|
-
const finalRows =
|
|
78
|
+
const finalRows = 1 + controls.slices.reduce((sum, count) => sum + count, 0);
|
|
80
79
|
assertSamplingCount(finalRows, "loft", limits.maxPathPoints);
|
|
81
|
-
const
|
|
82
|
-
const transforms = frames.map((frame) => frameTransform3(frame));
|
|
80
|
+
const transforms = input.map((station) => loftTransform(station));
|
|
83
81
|
const first = input[0].profile;
|
|
84
82
|
if (!Array.isArray(first.components) ||
|
|
85
83
|
first.components.length === 0 ||
|
|
@@ -153,21 +151,21 @@ export function prepareLoftGeometry(input, options, limits, authoritative, recip
|
|
|
153
151
|
allSpans.push(spans);
|
|
154
152
|
});
|
|
155
153
|
const templates = first.components;
|
|
156
|
-
const
|
|
154
|
+
const stationTransforms = [transforms[0]];
|
|
157
155
|
for (let gap = 0; gap < controls.slices.length; gap++) {
|
|
158
|
-
// Intermediate
|
|
159
|
-
for (let index =
|
|
160
|
-
|
|
161
|
-
|
|
156
|
+
// Intermediate placements are placeholders; vertices use the explicit world grids.
|
|
157
|
+
for (let index = 1; index < controls.slices[gap]; index++)
|
|
158
|
+
stationTransforms.push(transforms[gap]);
|
|
159
|
+
stationTransforms.push(transforms[gap + 1]);
|
|
162
160
|
}
|
|
163
|
-
const stations =
|
|
161
|
+
const stations = stationTransforms.map((transform, row) => {
|
|
164
162
|
let contourIndex = 0;
|
|
165
163
|
const convert = (contour) => {
|
|
166
164
|
const index = contourIndex++;
|
|
167
165
|
return { ...contour, points: allRows[index][row].points, spans: allSpans[index] };
|
|
168
166
|
};
|
|
169
167
|
return {
|
|
170
|
-
|
|
168
|
+
transform,
|
|
171
169
|
profile: {
|
|
172
170
|
components: templates.map((component) => ({
|
|
173
171
|
...component,
|
|
@@ -179,6 +177,6 @@ export function prepareLoftGeometry(input, options, limits, authoritative, recip
|
|
|
179
177
|
});
|
|
180
178
|
return {
|
|
181
179
|
stations,
|
|
182
|
-
world:
|
|
180
|
+
world: stationTransforms.map((_, row) => allRows.map((contour) => contour[row].world)),
|
|
183
181
|
};
|
|
184
182
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { resolveModelingLimits } from "../limits.js";
|
|
3
|
+
import { capturePath2Input, path2InputData } from "../paths/value.js";
|
|
4
|
+
import { assertSamplingCount } from "../sampling/limits.js";
|
|
5
|
+
import { pointLoftProfile, prepareLoftGeometry } from "./geometry.js";
|
|
6
|
+
import { simpleLoftMesh } from "./simple-mesh.js";
|
|
7
|
+
/**
|
|
8
|
+
* Lofts simple point contours at z heights or explicit affine transforms, in input order.
|
|
9
|
+
*
|
|
10
|
+
* Correspondence defaults to direct. CCW-normalized contours retain their
|
|
11
|
+
* seam and original vertices; unequal counts gain subdivisions or repeated fan slots.
|
|
12
|
+
* Both ends use ear-clipped caps, supporting concave profiles without center fans.
|
|
13
|
+
* Intermediate slices interpolate placed world vertices, never frame axes.
|
|
14
|
+
* Transformed coordinates must fit finite Float32 mesh storage.
|
|
15
|
+
* Path2 profiles must be closed; raw point collections are interpreted as closed.
|
|
16
|
+
*
|
|
17
|
+
* @param stations - At least two XY profiles in connection order, each with Z height or affine placement.
|
|
18
|
+
*
|
|
19
|
+
* @example Loft with explicit point correspondence
|
|
20
|
+
* ```ts
|
|
21
|
+
* const bottom = rectangleContour({ size: [20, 12] });
|
|
22
|
+
* const top = rectangleContour({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
|
|
23
|
+
* mesh.loft([{ profile: bottom, z: 0 }, { profile: top, z: 30 }], { correspondence: "reindex" });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function loftMesh(stations, options = {}) {
|
|
27
|
+
if (typeof options !== "object" || options === null || Array.isArray(options))
|
|
28
|
+
throw new GeometryError("INVALID_ARGUMENT", "Loft options must be an object.", {
|
|
29
|
+
operation: "loftMesh",
|
|
30
|
+
});
|
|
31
|
+
const limits = resolveModelingLimits(options.limits);
|
|
32
|
+
if (!Array.isArray(stations) || stations.length < 2)
|
|
33
|
+
throw new GeometryError("INVALID_ARGUMENT", "Loft requires at least two stations.", {
|
|
34
|
+
operation: "loftMesh",
|
|
35
|
+
});
|
|
36
|
+
assertSamplingCount(stations.length, "loftMesh", limits.maxPathPoints);
|
|
37
|
+
const inputs = stations;
|
|
38
|
+
const input = inputs.map(({ profile, ...placement }) => ({
|
|
39
|
+
...placement,
|
|
40
|
+
source: capturePath2Input(profile, true),
|
|
41
|
+
}));
|
|
42
|
+
assertSamplingCount(input.reduce((sum, station) => sum + station.source.count, 0), "loftMesh", 1_000_000);
|
|
43
|
+
let remaining = 1_000_000;
|
|
44
|
+
const profiles = input.map(({ source, ...placement }) => {
|
|
45
|
+
const points = path2InputData(source.input, true, {
|
|
46
|
+
maxPathPoints: Math.max(1, Math.min(limits.maxProfilePoints, remaining)),
|
|
47
|
+
}).points;
|
|
48
|
+
assertSamplingCount(points.length, "loftMesh", remaining);
|
|
49
|
+
remaining -= points.length;
|
|
50
|
+
return { ...placement, profile: pointLoftProfile(points) };
|
|
51
|
+
});
|
|
52
|
+
return simpleLoftMesh(prepareLoftGeometry(profiles, options, limits, false), limits);
|
|
53
|
+
}
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { translationTransform3 } from "../transforms/affine3.js";
|
|
3
|
+
import { transform3 } from "../transforms/value.js";
|
|
4
|
+
/** @internal Resolves placement without sorting stations or interpolating transformations. */
|
|
5
|
+
export function loftTransform(placement, operation = "loft") {
|
|
5
6
|
if (typeof placement !== "object" ||
|
|
6
7
|
placement === null ||
|
|
7
8
|
Array.isArray(placement) ||
|
|
8
|
-
"
|
|
9
|
-
|
|
9
|
+
"frame" in placement ||
|
|
10
|
+
("transform" in placement && placement.transform === undefined) ||
|
|
11
|
+
"z" in placement === "transform" in placement)
|
|
12
|
+
throw new GeometryError("INVALID_ARGUMENT", "Each loft station must specify exactly one z or transform.", { operation });
|
|
10
13
|
if ("z" in placement) {
|
|
11
14
|
if (!Number.isFinite(placement.z))
|
|
12
15
|
throw new GeometryError("NON_FINITE_VALUE", "Loft station z must be finite millimetres.", {
|
|
13
16
|
operation,
|
|
14
17
|
});
|
|
15
|
-
return
|
|
18
|
+
return translationTransform3([0, 0, placement.z]);
|
|
16
19
|
}
|
|
17
|
-
|
|
18
|
-
return placement.frame;
|
|
20
|
+
return transform3(placement.transform).toData();
|
|
19
21
|
}
|
|
20
22
|
/** @internal Validated controls shared by every loft construction route. */
|
|
21
23
|
export function resolveLoftControls(options, stationCount) {
|
|
@@ -42,13 +44,13 @@ export function resolveLoftControls(options, stationCount) {
|
|
|
42
44
|
if (duplicate && distribution !== "segments")
|
|
43
45
|
fail("Vertex-duplication correspondence requires segments distribution.");
|
|
44
46
|
const refine = expand(options.refine, stationCount, 1, "refine");
|
|
45
|
-
const slices = expand(options.slices, stationCount - 1,
|
|
47
|
+
const slices = expand(options.slices, stationCount - 1, 1, "slices");
|
|
46
48
|
for (const count of refine)
|
|
47
49
|
if (!Number.isSafeInteger(count) || count < 1)
|
|
48
50
|
fail("Loft refine values must be positive safe integers.");
|
|
49
51
|
for (const count of slices)
|
|
50
|
-
if (!Number.isSafeInteger(count) || count <
|
|
51
|
-
fail("Loft slices values must be
|
|
52
|
+
if (!Number.isSafeInteger(count) || count < 1)
|
|
53
|
+
fail("Loft slices values must be positive safe integers.");
|
|
52
54
|
return { methods, distribution, refine, slices };
|
|
53
55
|
}
|
|
54
56
|
const fail = (message) => {
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { assertMeshAllocationWithinLimits } from "../limits.js";
|
|
3
|
+
import { analyzeTriangleMesh } from "../mesh/operations.js";
|
|
4
|
+
import { reverseOwnedTriangleWinding } from "../mesh/winding.js";
|
|
5
|
+
import { writeMeshVertex } from "../mesh/write-vertex.js";
|
|
6
|
+
import { triangulateContour } from "../regions/triangulation.js";
|
|
6
7
|
/** @internal Pure closed simple-contour strips, retaining repeated correspondence slots as shared physical vertices. */
|
|
7
|
-
export function simpleLoftMesh(geometry, limits) {
|
|
8
|
+
export function simpleLoftMesh(geometry, limits, closed = false) {
|
|
8
9
|
const count = geometry.world[0][0].length, rowCount = geometry.world.length;
|
|
9
|
-
const maxVertices = count * rowCount, maximumTriangles = 2 * count * (rowCount - 1) + 2 * (count - 2);
|
|
10
|
+
const maxVertices = count * rowCount, maximumTriangles = 2 * count * (closed ? rowCount : rowCount - 1) + (closed ? 0 : 2 * (count - 2));
|
|
10
11
|
const bytes = 12 * (maxVertices + maximumTriangles);
|
|
11
12
|
assertMeshAllocationWithinLimits(maxVertices, maximumTriangles, bytes, "loftMesh", limits);
|
|
12
13
|
const positions = new Float32Array(maxVertices * 3), indices = new Uint32Array(maximumTriangles * 3);
|
|
@@ -61,9 +62,9 @@ export function simpleLoftMesh(geometry, limits) {
|
|
|
61
62
|
indices[cursor++] = b;
|
|
62
63
|
indices[cursor++] = c;
|
|
63
64
|
};
|
|
64
|
-
for (let row = 0; row < rows.length - 1; row++)
|
|
65
|
+
for (let row = 0; row < (closed ? rows.length : rows.length - 1); row++)
|
|
65
66
|
for (let index = 0; index < count; index++) {
|
|
66
|
-
const next = (index + 1) % count, a = rows[row], b = rows[row + 1];
|
|
67
|
+
const next = (index + 1) % count, a = rows[row], b = rows[(row + 1) % rows.length];
|
|
67
68
|
triangle(a.slots[index], a.slots[next], b.slots[next]);
|
|
68
69
|
triangle(a.slots[index], b.slots[next], b.slots[index]);
|
|
69
70
|
}
|
|
@@ -72,20 +73,28 @@ export function simpleLoftMesh(geometry, limits) {
|
|
|
72
73
|
for (let index = 0; index < triangles.length; index += 3)
|
|
73
74
|
triangle(contour.vertices[triangles[index]], contour.vertices[triangles[index + (top ? 1 : 2)]], contour.vertices[triangles[index + (top ? 2 : 1)]]);
|
|
74
75
|
};
|
|
75
|
-
|
|
76
|
-
|
|
76
|
+
if (!closed) {
|
|
77
|
+
cap(0, false);
|
|
78
|
+
cap(rows.length - 1, true);
|
|
79
|
+
}
|
|
77
80
|
const mesh = {
|
|
78
81
|
positions: positions.slice(0, vertexCount * 3),
|
|
79
82
|
indices: indices.slice(0, cursor),
|
|
80
83
|
};
|
|
81
|
-
|
|
84
|
+
let volume;
|
|
85
|
+
try {
|
|
86
|
+
volume = analyzeTriangleMesh(mesh, { requireClosed: true }).signedVolume;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
// Preserve the zero-volume diagnostic ahead of a closure failure for collapsed lofts.
|
|
90
|
+
// Only invalid output needs a second traversal; successful meshes are analyzed once.
|
|
91
|
+
volume = analyzeTriangleMesh(mesh).signedVolume;
|
|
92
|
+
if (volume !== 0)
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
82
95
|
if (volume === 0)
|
|
83
96
|
throw new GeometryError("DEGENERATE_GEOMETRY", "Loft stations collapse to zero enclosed volume.", { operation: "loftMesh" });
|
|
84
97
|
if (volume < 0)
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
mesh.indices[index + 1] = mesh.indices[index + 2];
|
|
88
|
-
mesh.indices[index + 2] = b;
|
|
89
|
-
}
|
|
90
|
-
return validateTriangleMesh(mesh, { requireClosed: true });
|
|
98
|
+
reverseOwnedTriangleWinding(mesh.indices);
|
|
99
|
+
return mesh;
|
|
91
100
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Internal scalar interpolation with exact endpoints and finite convex combinations. */
|
|
2
|
+
export function interpolateCoordinate(a, b, t) {
|
|
3
|
+
if (t === 0)
|
|
4
|
+
return a;
|
|
5
|
+
if (t === 1)
|
|
6
|
+
return b;
|
|
7
|
+
// Opposite signs can overflow b - a even when the interpolated coordinate is finite.
|
|
8
|
+
return a < 0 !== b < 0 ? a * (1 - t) + b * t : a + (b - a) * t;
|
|
9
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
2
|
import { immutableMathClass } from "./immutable-value.js";
|
|
3
3
|
import { add2, cross2, distance2, dot2, length2, lerp2, normalize2, scale2, subtract2, } from "./vector2.js";
|
|
4
|
-
import { add3, cross3, distance3, dot3, length3, lerp3, normalize3, scale3, subtract3, } from "./vector3.js";
|
|
4
|
+
import { add3, cross3, distance3, dot3, length3, lerp3, normalize3, projectOntoPlane3, scale3, subtract3, } from "./vector3.js";
|
|
5
5
|
const finite = (value, operation) => {
|
|
6
6
|
if (!Number.isFinite(value)) {
|
|
7
7
|
throw new GeometryError("NON_FINITE_VALUE", "Vector coordinates and results must be finite.", {
|
|
@@ -130,6 +130,9 @@ const SpatialVector = /* @__PURE__ */ immutableMathClass(class SpatialVector {
|
|
|
130
130
|
cross(other) {
|
|
131
131
|
return new SpatialVector(cross3(this.values, operand3(other, "vector3.cross")), "vector3.cross");
|
|
132
132
|
}
|
|
133
|
+
projectOntoPlane(normal) {
|
|
134
|
+
return new SpatialVector(projectOntoPlane3(this.values, normalize3(operand3(normal, "vector3.projectOntoPlane"), 0)), "vector3.projectOntoPlane");
|
|
135
|
+
}
|
|
133
136
|
length() {
|
|
134
137
|
return finite(length3(this.values), "vector3.length");
|
|
135
138
|
}
|
|
@@ -148,7 +151,9 @@ const SpatialVector = /* @__PURE__ */ immutableMathClass(class SpatialVector {
|
|
|
148
151
|
* Use transform2().applyDirection(value) for rotations and nonuniform scaling.
|
|
149
152
|
*
|
|
150
153
|
* Use `toData()` for frozen tuple interchange, or
|
|
151
|
-
* [normalize2](/docs/reference/
|
|
154
|
+
* [normalize2](/docs/reference/math/normalize2) for tuple-based normalization in numerical loops.
|
|
155
|
+
*
|
|
156
|
+
* @param input - Finite XY tuple or vector; coordinates are copied without changing their units.
|
|
152
157
|
*/
|
|
153
158
|
export function vector2(input) {
|
|
154
159
|
const values = operand2(input, "vector2");
|
|
@@ -162,10 +167,14 @@ export function vector2(input) {
|
|
|
162
167
|
* Use transform3().applyDirection(value) for rotations and nonuniform scaling.
|
|
163
168
|
*
|
|
164
169
|
* Use `toData()` for frozen tuple interchange, or
|
|
165
|
-
* [normalize3](/docs/reference/
|
|
170
|
+
* [normalize3](/docs/reference/math/normalize3) for tuple-based normalization in numerical loops.
|
|
171
|
+
*
|
|
172
|
+
* @param input - Finite XYZ tuple or vector; coordinates are copied without changing their units.
|
|
166
173
|
*
|
|
167
174
|
* @example
|
|
168
175
|
* ```ts
|
|
176
|
+
* import { vector3 } from "@metamesh/modeling/geometry";
|
|
177
|
+
*
|
|
169
178
|
* const direction = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
|
|
170
179
|
* const alignment = direction.dot([0, 0, 1]);
|
|
171
180
|
* ```
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { interpolateCoordinate } from "./interpolation.js";
|
|
2
3
|
/** Adds two finite XY vectors component-wise. */
|
|
3
4
|
export const add2 = (a, b) => [a[0] + b[0], a[1] + b[1]];
|
|
4
5
|
/** Subtracts `b` from `a` component-wise. */
|
|
@@ -13,17 +14,20 @@ export const scale2 = (vector, scale) => [
|
|
|
13
14
|
];
|
|
14
15
|
/** Returns the scalar dot product. */
|
|
15
16
|
export const dot2 = (a, b) => a[0] * b[0] + a[1] * b[1];
|
|
16
|
-
/** Returns the signed scalar cross product; positive means `b` is
|
|
17
|
+
/** Returns the signed scalar cross product; positive means `b` is counterclockwise from `a`. */
|
|
17
18
|
export const cross2 = (a, b) => a[0] * b[1] - a[1] * b[0];
|
|
18
19
|
/** Returns Euclidean vector length in the vector's coordinate units. */
|
|
19
20
|
export const length2 = (vector) => Math.hypot(vector[0], vector[1]);
|
|
20
21
|
/** Returns Euclidean point distance without allocating an intermediate difference vector. */
|
|
21
22
|
export const distance2 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1]);
|
|
22
23
|
/**
|
|
23
|
-
* Returns a unit vector; `epsilon` is a finite,
|
|
24
|
+
* Returns a unit vector; `epsilon` is a finite, nonnegative length threshold (default `1e-12`).
|
|
24
25
|
*
|
|
25
26
|
* Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
|
|
26
27
|
* `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
|
|
28
|
+
*
|
|
29
|
+
* @param vector - Vector with length greater than epsilon.
|
|
30
|
+
* @param epsilon - Minimum length in coordinate units; finite, nonnegative, default 1e-12.
|
|
27
31
|
*/
|
|
28
32
|
export const normalize2 = (vector, epsilon = 1e-12) => {
|
|
29
33
|
const operation = "normalize2";
|
|
@@ -53,11 +57,20 @@ export const normalize2 = (vector, epsilon = 1e-12) => {
|
|
|
53
57
|
}
|
|
54
58
|
return [vector[0] / length, vector[1] / length];
|
|
55
59
|
};
|
|
56
|
-
/** Linearly interpolates two vectors; `t` is dimensionless and may extrapolate. */
|
|
57
|
-
export const lerp2 = (a, b, t) => add2(a, scale2(subtract2(b, a), t));
|
|
58
60
|
/**
|
|
59
|
-
*
|
|
61
|
+
* Linearly interpolates two vectors; `t` is dimensionless and may extrapolate.
|
|
62
|
+
*
|
|
63
|
+
* @param t - Unclamped fraction: 0 selects a, 1 selects b.
|
|
64
|
+
*/
|
|
65
|
+
export const lerp2 = (a, b, t) => [
|
|
66
|
+
interpolateCoordinate(a[0], b[0], t),
|
|
67
|
+
interpolateCoordinate(a[1], b[1], t),
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* Rotates a finite vector counterclockwise in XY by `degrees` about the origin.
|
|
60
71
|
* Throws `NON_FINITE_VALUE` for nonfinite coordinates, angles, or derived coordinates.
|
|
72
|
+
*
|
|
73
|
+
* @param degrees - Counterclockwise angle in degrees.
|
|
61
74
|
*/
|
|
62
75
|
export const rotate2 = (vector, degrees) => {
|
|
63
76
|
if (!Number.isFinite(vector[0]) || !Number.isFinite(vector[1]) || !Number.isFinite(degrees)) {
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { interpolateCoordinate } from "./interpolation.js";
|
|
2
3
|
/**
|
|
3
4
|
* Adds two finite XYZ vectors component-wise.
|
|
4
5
|
* @example
|
|
5
6
|
* ```ts
|
|
7
|
+
* import { add3 } from "@metamesh/modeling/geometry/math";
|
|
8
|
+
*
|
|
6
9
|
* add3([1, 2, 3], [4, 5, 6]); // [5, 7, 9]
|
|
7
10
|
* ```
|
|
8
11
|
*/
|
|
@@ -60,10 +63,13 @@ export const length3 = (vector) => Math.hypot(vector[0], vector[1], vector[2]);
|
|
|
60
63
|
/** Returns Euclidean point distance without allocating an intermediate difference vector. */
|
|
61
64
|
export const distance3 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
|
|
62
65
|
/**
|
|
63
|
-
* Returns a unit vector; `epsilon` is a finite,
|
|
66
|
+
* Returns a unit vector; `epsilon` is a finite, nonnegative length threshold (default `1e-12`).
|
|
64
67
|
*
|
|
65
68
|
* Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
|
|
66
69
|
* `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
|
|
70
|
+
*
|
|
71
|
+
* @param vector - Vector with length greater than epsilon.
|
|
72
|
+
* @param epsilon - Minimum length in coordinate units; finite, nonnegative, default 1e-12.
|
|
67
73
|
*/
|
|
68
74
|
export const normalize3 = (vector, epsilon = 1e-12) => {
|
|
69
75
|
const operation = "normalize3";
|
|
@@ -94,11 +100,28 @@ export const normalize3 = (vector, epsilon = 1e-12) => {
|
|
|
94
100
|
}
|
|
95
101
|
return [vector[0] / length, vector[1] / length, vector[2] / length];
|
|
96
102
|
};
|
|
97
|
-
/**
|
|
98
|
-
|
|
99
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Linearly interpolates two vectors; `t` is dimensionless and may extrapolate.
|
|
105
|
+
*
|
|
106
|
+
* @param t - Unclamped fraction: 0 selects a, 1 selects b.
|
|
107
|
+
*/
|
|
108
|
+
export const lerp3 = (a, b, t) => [
|
|
109
|
+
interpolateCoordinate(a[0], b[0], t),
|
|
110
|
+
interpolateCoordinate(a[1], b[1], t),
|
|
111
|
+
interpolateCoordinate(a[2], b[2], t),
|
|
112
|
+
];
|
|
113
|
+
/**
|
|
114
|
+
* Removes the component parallel to a normalized plane normal.
|
|
115
|
+
*
|
|
116
|
+
* @param normal - Unit plane normal; used without normalization.
|
|
117
|
+
*/
|
|
100
118
|
export const projectOntoPlane3 = (vector, normal) => subtract3(vector, scale3(normal, dot3(vector, normal)));
|
|
101
|
-
/**
|
|
119
|
+
/**
|
|
120
|
+
* Rotates a vector right-handed around a unit axis by `angle` radians.
|
|
121
|
+
*
|
|
122
|
+
* @param axis - Unit rotation axis; used without normalization.
|
|
123
|
+
* @param angle - Right-handed angle in radians.
|
|
124
|
+
*/
|
|
102
125
|
export const rotateAroundAxis3Radians = (vector, axis, angle) => {
|
|
103
126
|
const cosine = Math.cos(angle);
|
|
104
127
|
const sine = Math.sin(angle);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Tuple arithmetic and affine matrix kernels without host state. @packageDocumentation */
|
|
2
|
+
export { add2, subtract2, scale2, dot2, cross2, length2, distance2, normalize2, lerp2, rotate2, } from "./math/vector2.js";
|
|
3
|
+
export { add3, cross3, dot3, length3, distance3, lerp3, normalize3, projectOntoPlane3, scale3, subtract3, } from "./math/vector3.js";
|
|
4
|
+
export { IDENTITY_TRANSFORM3, applyTransformDirection3, applyTransformPoint3, multiplyTransform3, eulerTransform3, inverseTransform3, rotationTransform3, scaleTransform3, transformDeterminant3, translationTransform3, validateTransform3, validateRigidTransform3, } from "./transforms/affine3.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
-
import { polygonClipping } from "../
|
|
2
|
+
import { polygonClipping } from "../regions/clipping.js";
|
|
3
3
|
import { resolveCylindricalGearPair, sampleCylindricalGearOutline, sampleInternalCylindricalGearSpaceOutline, } from "./gears.js";
|
|
4
4
|
const DEFAULT_MOTION_SAMPLES = 24;
|
|
5
5
|
const MAXIMUM_MOTION_SAMPLES = 360;
|
|
@@ -51,10 +51,12 @@ const multiPolygonArea = (multiPolygon) => multiPolygon.reduce((total, polygon)
|
|
|
51
51
|
* Measures sampled kinematic interference over one tooth cycle of an internal gear pair.
|
|
52
52
|
*
|
|
53
53
|
* The driver and ring start with half-tooth offsets for odd tooth counts, then rotate in the
|
|
54
|
-
* same direction at their resolved tooth-count ratio.
|
|
55
|
-
* sampled pinion outline
|
|
56
|
-
*
|
|
57
|
-
*
|
|
54
|
+
* same direction at their resolved tooth-count ratio. Subtracting the ring's center-and-space
|
|
55
|
+
* opening from each sampled pinion outline leaves the area overlapping ring material. This detects
|
|
56
|
+
* involute, tip, and trimming interference that a single assembled pose misses.
|
|
57
|
+
* It is a deterministic model check, not a certified gear-rating calculation.
|
|
58
|
+
*
|
|
59
|
+
* @param spec - Internal pair: external driver pinion and internal driven ring.
|
|
58
60
|
*/
|
|
59
61
|
export function measureInternalCylindricalGearPairMotion(spec, options = {}) {
|
|
60
62
|
if (spec.mesh !== "internal") {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
-
import { signedContourArea } from "../regions.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { signedContourArea } from "../regions/operations.js";
|
|
3
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling/limits.js";
|
|
4
|
+
import { resolveCircularSegments, resolveGeometryResolution, } from "../sampling/resolution.js";
|
|
5
5
|
const DEFAULT_PRESSURE_ANGLE_DEGREES = 20;
|
|
6
6
|
const DEFAULT_CLEARANCE_FACTOR = 0.25;
|
|
7
7
|
const MAXIMUM_TOOTH_COUNT = 1_000;
|
|
@@ -31,6 +31,8 @@ const freezePoints = (points) => {
|
|
|
31
31
|
*
|
|
32
32
|
* The normal-plane limit is `2 / sin²(alpha_n)`. Helical gears use the standard virtual tooth
|
|
33
33
|
* count `z_v = z / cos³(beta)`, so increasing helix angle can reduce the physical tooth count.
|
|
34
|
+
*
|
|
35
|
+
* @param spec - Pressure and signed helix angles in degrees; defaults are 20 and zero.
|
|
34
36
|
*/
|
|
35
37
|
export function minimumCylindricalGearToothCountWithoutUndercut(spec = {}) {
|
|
36
38
|
const pressureAngle = finite(spec.pressureAngle ?? DEFAULT_PRESSURE_ANGLE_DEGREES, "Pressure angle", "minimumCylindricalGearToothCountWithoutUndercut");
|
|
@@ -177,6 +179,8 @@ const resolveCylindricalGearDimensions = (spec, profile) => {
|
|
|
177
179
|
* The gear axis is +Z and the returned radii describe its XY pitch plane. Inputs below the
|
|
178
180
|
* pressure- and helix-dependent no-undercut tooth count are rejected because profile shift is not
|
|
179
181
|
* currently supported.
|
|
182
|
+
*
|
|
183
|
+
* @param spec - Nominal gear dimensions in millimetres and degrees.
|
|
180
184
|
*/
|
|
181
185
|
export function resolveCylindricalGear(spec) {
|
|
182
186
|
return resolveCylindricalGearDimensions(spec, "external");
|
|
@@ -187,6 +191,8 @@ export function resolveCylindricalGear(spec) {
|
|
|
187
191
|
* Both gears must use the same normal module, pressure angle, and helix-angle
|
|
188
192
|
* magnitude. An external pair uses opposite helix hands; an internal pair uses
|
|
189
193
|
* the same hand. The function validates those conjugate pitch invariants.
|
|
194
|
+
*
|
|
195
|
+
* @param spec - Driver and driven gears using the same normal pitch system.
|
|
190
196
|
*/
|
|
191
197
|
export function resolveCylindricalGearPair(spec) {
|
|
192
198
|
if (spec.mesh !== "external" && spec.mesh !== "internal") {
|
|
@@ -413,6 +419,8 @@ const sampleResolvedCylindricalGearOutline = (dimensions, options, operation) =>
|
|
|
413
419
|
* The returned loop is counter-clockwise, closed implicitly without a repeated
|
|
414
420
|
* seam point, and contains no holes. Its center is the origin and its axis is
|
|
415
421
|
* +Z. Bore, hub, keyway, twist, and face-width choices remain generator-owned.
|
|
422
|
+
*
|
|
423
|
+
* @param spec - External gear dimensions in millimetres and degrees; undercut profiles reject.
|
|
416
424
|
*/
|
|
417
425
|
export function sampleCylindricalGearOutline(spec, options = {}) {
|
|
418
426
|
return sampleResolvedCylindricalGearOutline(resolveCylindricalGear(spec), options, "sampleCylindricalGearOutline");
|
|
@@ -424,11 +432,17 @@ export function sampleCylindricalGearOutline(spec, options = {}) {
|
|
|
424
432
|
* dedendum above it. At the pitch circle, positive backlash widens each sampled space
|
|
425
433
|
* tangentially. The returned CCW loop encloses the center and is intended to be reversed
|
|
426
434
|
* when used as a region hole.
|
|
435
|
+
*
|
|
436
|
+
* @param spec - Internal ring dimensions in millimetres and degrees; backlash widens tooth spaces.
|
|
427
437
|
*/
|
|
428
438
|
export function sampleInternalCylindricalGearSpaceOutline(spec, options = {}) {
|
|
429
439
|
return sampleResolvedCylindricalGearOutline(internalCylindricalGearSpaceDimensions(resolveCylindricalGearDimensions(spec, "internal")), options, "sampleInternalCylindricalGearSpaceOutline");
|
|
430
440
|
}
|
|
431
|
-
/**
|
|
441
|
+
/**
|
|
442
|
+
* Resolves a rack segment that is conjugate with the same normal cylindrical pitch system.
|
|
443
|
+
*
|
|
444
|
+
* @param spec - Rack dimensions in millimetres and degrees.
|
|
445
|
+
*/
|
|
432
446
|
export function resolveRackPitch(spec) {
|
|
433
447
|
const reference = resolveCylindricalGear({
|
|
434
448
|
...(spec.backlash === undefined ? {} : { backlash: spec.backlash }),
|
|
@@ -464,6 +478,9 @@ export function resolveRackPitch(spec) {
|
|
|
464
478
|
* The path begins and ends on the root line, omits duplicate adjacent points,
|
|
465
479
|
* and leaves base thickness, mounting features, extrusion, and helical sweep to
|
|
466
480
|
* the owning generator.
|
|
481
|
+
*
|
|
482
|
+
* @param spec - Rack dimensions in millimetres and degrees, along +X.
|
|
483
|
+
* @param limits - Sampling limits; exceeding them throws without coarsening.
|
|
467
484
|
*/
|
|
468
485
|
export function sampleRackToothPath(spec, limits = {}) {
|
|
469
486
|
const dimensions = resolveRackPitch(spec);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
-
import { assertPositivePrimitive, assertPrimitiveOptions } from "../
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { assertPositivePrimitive, assertPrimitiveOptions } from "../primitives/resolvers.js";
|
|
3
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling/limits.js";
|
|
4
|
+
import { resolveAlignedCircularSegments } from "../sampling/resolution.js";
|
|
5
5
|
/** @internal Shared fixed frame; ordinary transforms place the joint in a model. */
|
|
6
6
|
export const knuckleHingeAxis = Object.freeze({
|
|
7
7
|
position: Object.freeze([0, 0, 0]),
|
|
@@ -19,9 +19,11 @@ const invalid = (message) => {
|
|
|
19
19
|
* bounds; an insufficient ceiling rejects instead of reducing quality. Exact counts are intentional
|
|
20
20
|
* facets. Zero allowances describe ideal contact, not a printable running fit.
|
|
21
21
|
*
|
|
22
|
-
* Rejects
|
|
23
|
-
* length, missing/excessive lift-off engagement, and
|
|
22
|
+
* Rejects non-finite or non-positive dimensions, invalid mode/count combinations, exhausted axial
|
|
23
|
+
* length, missing/excessive lift-off engagement, and non-positive conservative faceted barrel walls.
|
|
24
24
|
* Manufacturing minima, strength, mounting, retention, handedness, and motion remain caller policy.
|
|
25
|
+
*
|
|
26
|
+
* @param spec - Joint dimensions in millimetres, mode, and knuckle count.
|
|
25
27
|
*/
|
|
26
28
|
export function resolveKnuckleHinge(spec, options = {}) {
|
|
27
29
|
assertPrimitiveOptions(spec, "resolveKnuckleHinge");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GeometryError } from "../../errors.js";
|
|
2
|
-
import { resolveCircularSegments, resolveGeometryResolution, } from "../../resolution.js";
|
|
2
|
+
import { resolveCircularSegments, resolveGeometryResolution, } from "../../sampling/resolution.js";
|
|
3
3
|
import { resolveGeometryTolerance } from "../../tolerance.js";
|
|
4
4
|
import { compensateThreadProfileForFaceting } from "./profiles.js";
|
|
5
5
|
const frozenFit = (maleRadialInset, femaleRadialOutset, axialBacklash) => Object.freeze({ axialBacklash, femaleRadialOutset, maleRadialInset });
|
|
@@ -32,7 +32,11 @@ const validateFitPolicy = (policy) => {
|
|
|
32
32
|
}
|
|
33
33
|
return Object.freeze({ axialBacklash: axial, femaleRadialOutset: female, maleRadialInset: male });
|
|
34
34
|
};
|
|
35
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Resolves and validates a named or caller-defined print-fit policy.
|
|
37
|
+
*
|
|
38
|
+
* @param fit - Named fit or non-negative per-side radial and total axial allowances, in millimetres.
|
|
39
|
+
*/
|
|
36
40
|
export function resolvePrintableThreadFitPolicy(fit = "normal") {
|
|
37
41
|
if (typeof fit !== "string")
|
|
38
42
|
return validateFitPolicy(fit);
|
|
@@ -82,6 +86,8 @@ export function compensateThreadDiameters(options) {
|
|
|
82
86
|
*
|
|
83
87
|
* An exact `circularSegments` value must already be divisible by `starts`; it is never silently
|
|
84
88
|
* raised. Adaptive policies align upward and fail if that would exceed `maxSegments`.
|
|
89
|
+
*
|
|
90
|
+
* @param options - Nominal diameter, uncompensated profile, and shared mating resolution.
|
|
85
91
|
*/
|
|
86
92
|
export function resolveThreadCircularSegments(options) {
|
|
87
93
|
const operation = "resolveThreadCircularSegments";
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/** Conventional thread helix sampling, independent of surface construction. */
|
|
2
2
|
import { GeometryError } from "../../errors.js";
|
|
3
|
-
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../../sampling
|
|
3
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../../sampling/limits.js";
|
|
4
4
|
import { assertFiniteThreadNumber } from "./profiles.js";
|
|
5
5
|
/**
|
|
6
6
|
* Samples evenly phased thread helices with finite `lead = pitch * starts`.
|
|
7
|
-
* All starts together respect maxPathPoints
|
|
7
|
+
* All starts together respect `maxPathPoints`; excessive counts fail before allocation.
|
|
8
|
+
*
|
|
9
|
+
* @param options - Dimensions in millimetres; lead is pitch multiplied by starts.
|
|
8
10
|
*/
|
|
9
11
|
export function sampleConventionalThreadHelices(options) {
|
|
10
12
|
const operation = "sampleThreadHelices";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Thread input resolution, end/bevel boundaries, and allocation preflight. */
|
|
2
2
|
import { GeometryError } from "../../errors.js";
|
|
3
|
-
import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "../../
|
|
4
|
-
import { resolveCircularSegments, resolveGeometryResolution, } from "../../resolution.js";
|
|
3
|
+
import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "../../limits.js";
|
|
4
|
+
import { resolveCircularSegments, resolveGeometryResolution, } from "../../sampling/resolution.js";
|
|
5
5
|
import { resolveGeometryTolerance } from "../../tolerance.js";
|
|
6
6
|
import { resolveBevel } from "./bevel.js";
|
|
7
7
|
import { assertFiniteThreadNumber, createThreadRidgeSection, freezeThreadProfilePoints, MAX_THREAD_PROFILE_POINTS, } from "./profiles.js";
|
|
@@ -341,6 +341,8 @@ export const resolveHelicalThreadSolidMeshPreflight = (options, operation) => {
|
|
|
341
341
|
* Successful preflight leaves generated coordinate and topology checks to mesh construction.
|
|
342
342
|
*
|
|
343
343
|
* See `mesh.threadSolid` for standalone mesh construction.
|
|
344
|
+
*
|
|
345
|
+
* @param options - Dimensions in millimetres and a validated profile; apply any fit compensation first.
|
|
344
346
|
*/
|
|
345
347
|
export function preflightThreadSolidMesh(options) {
|
|
346
348
|
return resolveHelicalThreadSolidMeshPreflight(options, "preflightThreadSolidMesh").preflight;
|