@metamesh/modeling 0.12.0 → 0.14.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 +40 -0
- package/README.md +103 -72
- package/dist/api/engine.d.ts +123 -97
- package/dist/api/geometry.d.ts +4232 -3307
- package/dist/api/index.d.ts +2758 -2268
- package/dist/api/text.d.ts +119 -107
- package/dist/docs/guides/concepts.md +300 -0
- package/dist/docs/guides/fonts.md +59 -0
- package/dist/docs/guides/fundamentals.md +137 -0
- package/dist/docs/guides/generation.md +223 -0
- package/dist/docs/guides/hosting.md +91 -0
- package/dist/docs/guides/recipes.md +718 -0
- package/dist/docs/manifest.json +10703 -0
- package/dist/docs/reference/engine/Export3mfOptions.md +29 -0
- package/dist/docs/reference/engine/ExportMeshPart.md +65 -0
- package/dist/docs/reference/engine/GenerationOptions.md +62 -0
- package/dist/docs/reference/engine/GeometryResource.md +77 -0
- package/dist/docs/reference/engine/ModelDependencies.md +41 -0
- package/dist/docs/reference/engine/ModelEngine.md +103 -0
- package/dist/docs/reference/engine/ModelEngineOptions.md +33 -0
- package/dist/docs/reference/engine/ModelSession.md +96 -0
- package/dist/docs/reference/engine/ModelSnapshot.md +173 -0
- package/dist/docs/reference/engine/SessionOptions.md +123 -0
- package/dist/docs/reference/engine/SnapshotPart.md +130 -0
- package/dist/docs/reference/engine/categories/host-lifecycle.md +37 -0
- package/dist/docs/reference/engine/createModelEngine.md +56 -0
- package/dist/docs/reference/engine/defaultModelingLimits.md +7 -0
- package/dist/docs/reference/engine/modelingWasmUrl.md +7 -0
- package/dist/docs/reference/engine/validateModel.md +48 -0
- package/dist/docs/reference/engine.md +25 -0
- package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +75 -0
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +92 -0
- package/dist/docs/reference/geometry/Anchor3.md +53 -0
- package/dist/docs/reference/geometry/ArcCurve2.md +70 -0
- package/dist/docs/reference/geometry/ArcCurve3.md +94 -0
- package/dist/docs/reference/geometry/AttachTransformOptions.md +62 -0
- package/dist/docs/reference/geometry/AxisAngleRotation3.md +66 -0
- package/dist/docs/reference/geometry/Bounds2.md +39 -0
- package/dist/docs/reference/geometry/Bounds3.md +39 -0
- package/dist/docs/reference/geometry/BoundsFit2.md +52 -0
- package/dist/docs/reference/geometry/BoundsFit3.md +52 -0
- package/dist/docs/reference/geometry/BoundsFitOptions.md +23 -0
- package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +23 -0
- package/dist/docs/reference/geometry/BoxAnchorFace.md +14 -0
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +63 -0
- package/dist/docs/reference/geometry/BoxEdge.md +7 -0
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +14 -0
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +15 -0
- package/dist/docs/reference/geometry/BoxOptions.md +87 -0
- package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +7 -0
- package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +93 -0
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +29 -0
- package/dist/docs/reference/geometry/CircleContourOptions.md +15 -0
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +59 -0
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +107 -0
- package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +41 -0
- package/dist/docs/reference/geometry/ClearanceHoleFit.md +7 -0
- package/dist/docs/reference/geometry/ClosestPointOnPathOptions.md +34 -0
- package/dist/docs/reference/geometry/ClosestPointOnPathResult.md +65 -0
- package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +53 -0
- package/dist/docs/reference/geometry/Contour.md +17 -0
- package/dist/docs/reference/geometry/ContourCurve.md +35 -0
- package/dist/docs/reference/geometry/ContourPoint.md +29 -0
- package/dist/docs/reference/geometry/ContourSegment.md +86 -0
- package/dist/docs/reference/geometry/CorrespondingComponent.md +46 -0
- package/dist/docs/reference/geometry/CorrespondingContour.md +46 -0
- package/dist/docs/reference/geometry/CorrespondingProfile.md +22 -0
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +27 -0
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +70 -0
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +70 -0
- package/dist/docs/reference/geometry/Curve2.md +16 -0
- package/dist/docs/reference/geometry/Curve3.md +16 -0
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +64 -0
- package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +73 -0
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +14 -0
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +87 -0
- package/dist/docs/reference/geometry/CylinderOptions.md +53 -0
- package/dist/docs/reference/geometry/CylindricalGearDimensions.md +209 -0
- package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +7 -0
- package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +71 -0
- package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +82 -0
- package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +34 -0
- package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +41 -0
- package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +47 -0
- package/dist/docs/reference/geometry/CylindricalGearSpec.md +82 -0
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -0
- package/dist/docs/reference/geometry/EdgeTreatment.md +17 -0
- package/dist/docs/reference/geometry/EllipseContourOptions.md +15 -0
- package/dist/docs/reference/geometry/EndTreatments.md +34 -0
- package/dist/docs/reference/geometry/ExtrudeOptions.md +134 -0
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +77 -0
- package/dist/docs/reference/geometry/FittedTextLayout.md +60 -0
- package/dist/docs/reference/geometry/Frame3.md +58 -0
- package/dist/docs/reference/geometry/GeometryError.md +97 -0
- package/dist/docs/reference/geometry/GeometryErrorCode.md +7 -0
- package/dist/docs/reference/geometry/GeometryErrorContext.md +29 -0
- package/dist/docs/reference/geometry/GeometryResolution.md +74 -0
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +62 -0
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +41 -0
- package/dist/docs/reference/geometry/GridPatternOptions.md +42 -0
- package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +14 -0
- package/dist/docs/reference/geometry/HeightfieldOptions.md +67 -0
- package/dist/docs/reference/geometry/HeightfieldPreflight.md +53 -0
- package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +141 -0
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +265 -0
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +53 -0
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +18 -0
- package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +242 -0
- package/dist/docs/reference/geometry/LineCurve2.md +46 -0
- package/dist/docs/reference/geometry/LineCurve3.md +46 -0
- package/dist/docs/reference/geometry/LinearPatternOptions.md +30 -0
- package/dist/docs/reference/geometry/LoftCorrespondence.md +19 -0
- package/dist/docs/reference/geometry/LoftMeshStation.md +27 -0
- package/dist/docs/reference/geometry/LoftOptions.md +84 -0
- package/dist/docs/reference/geometry/LoftPlacement.md +66 -0
- package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +18 -0
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +35 -0
- package/dist/docs/reference/geometry/MetricFastenerSize.md +7 -0
- package/dist/docs/reference/geometry/MetricFastenerStandard.md +72 -0
- package/dist/docs/reference/geometry/MetricHexNutDimensions.md +29 -0
- package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +41 -0
- package/dist/docs/reference/geometry/ModelingLimits.md +126 -0
- package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +17 -0
- package/dist/docs/reference/geometry/Path2.md +14 -0
- package/dist/docs/reference/geometry/Path3.md +14 -0
- package/dist/docs/reference/geometry/PathFrame.md +46 -0
- package/dist/docs/reference/geometry/PathNormalGuide.md +38 -0
- package/dist/docs/reference/geometry/PathPatternOptions.md +46 -0
- package/dist/docs/reference/geometry/PathPlacement.md +34 -0
- package/dist/docs/reference/geometry/Pivot2Options.md +26 -0
- package/dist/docs/reference/geometry/Pivot3Options.md +26 -0
- package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +7 -0
- package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +156 -0
- package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +120 -0
- package/dist/docs/reference/geometry/PlanarPatchQuality.md +190 -0
- package/dist/docs/reference/geometry/PolygonData.md +38 -0
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +92 -0
- package/dist/docs/reference/geometry/PrimitivePlacement.md +31 -0
- package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +83 -0
- package/dist/docs/reference/geometry/PrintableThreadFit.md +7 -0
- package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +45 -0
- package/dist/docs/reference/geometry/Profile.md +22 -0
- package/dist/docs/reference/geometry/ProfileComponent2.md +46 -0
- package/dist/docs/reference/geometry/ProfileContour2.md +34 -0
- package/dist/docs/reference/geometry/ProfileSpan2.md +47 -0
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +36 -0
- package/dist/docs/reference/geometry/RackPitchDimensions.md +113 -0
- package/dist/docs/reference/geometry/RackPitchSpec.md +77 -0
- package/dist/docs/reference/geometry/RadialPatternOptions.md +62 -0
- package/dist/docs/reference/geometry/RadialSizing.md +7 -0
- package/dist/docs/reference/geometry/RadialSizingOptions.md +40 -0
- package/dist/docs/reference/geometry/RectangleContourOptions.md +66 -0
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +34 -0
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +14 -0
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +94 -0
- package/dist/docs/reference/geometry/RegionData.md +14 -0
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +84 -0
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +65 -0
- package/dist/docs/reference/geometry/RevolveOptions.md +82 -0
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +91 -0
- package/dist/docs/reference/geometry/RowLayoutOptions.md +23 -0
- package/dist/docs/reference/geometry/SampleContourOptions.md +71 -0
- package/dist/docs/reference/geometry/SampleHelixOptions.md +95 -0
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +71 -0
- package/dist/docs/reference/geometry/SampledCurve2.md +34 -0
- package/dist/docs/reference/geometry/SampledCurve3.md +34 -0
- package/dist/docs/reference/geometry/SampledThreadHelices.md +58 -0
- package/dist/docs/reference/geometry/SideProfileCurve.md +35 -0
- package/dist/docs/reference/geometry/SideProfilePoint.md +29 -0
- package/dist/docs/reference/geometry/SideProfileSegment.md +86 -0
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +71 -0
- package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +34 -0
- package/dist/docs/reference/geometry/SphereOptions.md +15 -0
- package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +75 -0
- package/dist/docs/reference/geometry/StrokePathCap.md +7 -0
- package/dist/docs/reference/geometry/StrokePathJoin.md +7 -0
- package/dist/docs/reference/geometry/StrokePathRegionOptions.md +85 -0
- package/dist/docs/reference/geometry/SvgImportOptions.md +60 -0
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +61 -0
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +118 -0
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +65 -0
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +53 -0
- package/dist/docs/reference/geometry/SweepOptions.md +109 -0
- package/dist/docs/reference/geometry/SweepOrientation.md +109 -0
- package/dist/docs/reference/geometry/ThreadBevelOptions.md +53 -0
- package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +100 -0
- package/dist/docs/reference/geometry/ThreadCompensationOptions.md +73 -0
- package/dist/docs/reference/geometry/ThreadEndStyle.md +7 -0
- package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +113 -0
- package/dist/docs/reference/geometry/ThreadHandedness.md +7 -0
- package/dist/docs/reference/geometry/ThreadHelixOptions.md +120 -0
- package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +7 -0
- package/dist/docs/reference/geometry/ThreadLeadInShape.md +7 -0
- package/dist/docs/reference/geometry/ThreadProfile.md +82 -0
- package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +49 -0
- package/dist/docs/reference/geometry/ThreadProfileSpec.md +19 -0
- package/dist/docs/reference/geometry/ThreadRole.md +7 -0
- package/dist/docs/reference/geometry/ThreadedNutBevel.md +7 -0
- package/dist/docs/reference/geometry/ThreadedNutOptions.md +269 -0
- package/dist/docs/reference/geometry/ThreadedNutPreflight.md +94 -0
- package/dist/docs/reference/geometry/ThreadedNutShape.md +7 -0
- package/dist/docs/reference/geometry/ThreadedRodOptions.md +242 -0
- package/dist/docs/reference/geometry/TorusOptions.md +105 -0
- package/dist/docs/reference/geometry/Transform2-type.md +255 -0
- package/dist/docs/reference/geometry/Transform2Input.md +19 -0
- package/dist/docs/reference/geometry/Transform2Matrix.md +14 -0
- package/dist/docs/reference/geometry/Transform3-type.md +295 -0
- package/dist/docs/reference/geometry/Transform3Input.md +19 -0
- package/dist/docs/reference/geometry/Transform3Matrix.md +17 -0
- package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +91 -0
- package/dist/docs/reference/geometry/TriangleMesh.md +34 -0
- package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +119 -0
- package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +75 -0
- package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +75 -0
- package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +39 -0
- package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +190 -0
- package/dist/docs/reference/geometry/TriangleMeshSignature.md +107 -0
- package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +41 -0
- package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +29 -0
- package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +51 -0
- package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +91 -0
- package/dist/docs/reference/geometry/TubeOptions.md +138 -0
- package/dist/docs/reference/geometry/Vector2-type.md +269 -0
- package/dist/docs/reference/geometry/Vector2Input.md +19 -0
- package/dist/docs/reference/geometry/Vector2Tuple.md +14 -0
- package/dist/docs/reference/geometry/Vector3-type.md +281 -0
- package/dist/docs/reference/geometry/Vector3Input.md +19 -0
- package/dist/docs/reference/geometry/Vector3Tuple.md +14 -0
- package/dist/docs/reference/geometry/VectorTextArcBaseline.md +53 -0
- package/dist/docs/reference/geometry/VectorTextLayout.md +39 -0
- package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +111 -0
- package/dist/docs/reference/geometry/VectorTextMetrics.md +94 -0
- package/dist/docs/reference/geometry/VectorTextOptions.md +50 -0
- package/dist/docs/reference/geometry/add2.md +36 -0
- package/dist/docs/reference/geometry/add3.md +42 -0
- package/dist/docs/reference/geometry/analyzeTriangleMesh.md +57 -0
- package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +52 -0
- package/dist/docs/reference/geometry/anchorFrame3.md +40 -0
- package/dist/docs/reference/geometry/applyTransformDirection3.md +45 -0
- package/dist/docs/reference/geometry/applyTransformPoint3.md +43 -0
- package/dist/docs/reference/geometry/attachTransform.md +77 -0
- package/dist/docs/reference/geometry/boundsCenter.md +62 -0
- package/dist/docs/reference/geometry/boundsFromSize.md +83 -0
- package/dist/docs/reference/geometry/boundsSize.md +62 -0
- package/dist/docs/reference/geometry/boxAnchor3.md +52 -0
- package/dist/docs/reference/geometry/buildHelicalThreadRidgeMesh.md +68 -0
- package/dist/docs/reference/geometry/buildHelicalThreadSolidMesh.md +102 -0
- package/dist/docs/reference/geometry/categories/bounds-layout.md +35 -0
- package/dist/docs/reference/geometry/categories/curves-paths.md +66 -0
- package/dist/docs/reference/geometry/categories/mechanical.md +101 -0
- package/dist/docs/reference/geometry/categories/meshes.md +73 -0
- package/dist/docs/reference/geometry/categories/pattern-placement.md +34 -0
- package/dist/docs/reference/geometry/categories/primitive-options.md +36 -0
- package/dist/docs/reference/geometry/categories/profiles-regions.md +74 -0
- package/dist/docs/reference/geometry/categories/resolution-errors.md +47 -0
- package/dist/docs/reference/geometry/categories/transforms-math.md +92 -0
- package/dist/docs/reference/geometry/categories/vector-import.md +40 -0
- package/dist/docs/reference/geometry/circleContour.md +33 -0
- package/dist/docs/reference/geometry/closeToAxis.md +34 -0
- package/dist/docs/reference/geometry/closestPointOnPath.md +110 -0
- package/dist/docs/reference/geometry/compensateThreadDiameters.md +51 -0
- package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +42 -0
- package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +56 -0
- package/dist/docs/reference/geometry/composeTransform3.md +44 -0
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +45 -0
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +47 -0
- package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +31 -0
- package/dist/docs/reference/geometry/containsBounds.md +72 -0
- package/dist/docs/reference/geometry/contourContainsPoint.md +33 -0
- package/dist/docs/reference/geometry/createAnchor3.md +67 -0
- package/dist/docs/reference/geometry/createThreadProfile.md +37 -0
- package/dist/docs/reference/geometry/createTriangleMeshSignature.md +60 -0
- package/dist/docs/reference/geometry/cross2.md +36 -0
- package/dist/docs/reference/geometry/cross3.md +42 -0
- package/dist/docs/reference/geometry/cumulativePathLengths.md +33 -0
- package/dist/docs/reference/geometry/cylinderAnchor3.md +60 -0
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +14 -0
- package/dist/docs/reference/geometry/distance2.md +36 -0
- package/dist/docs/reference/geometry/distance3.md +36 -0
- package/dist/docs/reference/geometry/distributeAlongPath.md +51 -0
- package/dist/docs/reference/geometry/dot2.md +36 -0
- package/dist/docs/reference/geometry/dot3.md +42 -0
- package/dist/docs/reference/geometry/ellipseContour.md +33 -0
- package/dist/docs/reference/geometry/eulerTransform3.md +42 -0
- package/dist/docs/reference/geometry/extrudeMesh.md +73 -0
- package/dist/docs/reference/geometry/fitBounds.md +95 -0
- package/dist/docs/reference/geometry/fitTextLayout.md +57 -0
- package/dist/docs/reference/geometry/frameTransform3.md +48 -0
- package/dist/docs/reference/geometry/getMetricClearanceHole.md +33 -0
- package/dist/docs/reference/geometry/getMetricFastenerStandard.md +27 -0
- package/dist/docs/reference/geometry/gridPatternTransforms.md +31 -0
- package/dist/docs/reference/geometry/heightfieldMesh.md +43 -0
- package/dist/docs/reference/geometry/inverseTransform3.md +34 -0
- package/dist/docs/reference/geometry/isGeometryError.md +26 -0
- package/dist/docs/reference/geometry/joinTriangleMeshes.md +36 -0
- package/dist/docs/reference/geometry/layoutRow.md +43 -0
- package/dist/docs/reference/geometry/length2.md +30 -0
- package/dist/docs/reference/geometry/length3.md +30 -0
- package/dist/docs/reference/geometry/lerp2.md +42 -0
- package/dist/docs/reference/geometry/lerp3.md +42 -0
- package/dist/docs/reference/geometry/linearPatternTransforms.md +31 -0
- package/dist/docs/reference/geometry/loftMesh.md +72 -0
- package/dist/docs/reference/geometry/matchProfiles.md +51 -0
- package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +48 -0
- package/dist/docs/reference/geometry/measureTriangleMesh.md +55 -0
- package/dist/docs/reference/geometry/meshBounds.md +35 -0
- package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +29 -0
- package/dist/docs/reference/geometry/normalize2.md +36 -0
- package/dist/docs/reference/geometry/normalize3.md +36 -0
- package/dist/docs/reference/geometry/normalizeContour.md +45 -0
- package/dist/docs/reference/geometry/normalizePolygon.md +37 -0
- package/dist/docs/reference/geometry/normalizeRegion.md +33 -0
- package/dist/docs/reference/geometry/optimizePlanarPatches.md +91 -0
- package/dist/docs/reference/geometry/pathLength.md +33 -0
- package/dist/docs/reference/geometry/pathPatternTransforms.md +57 -0
- package/dist/docs/reference/geometry/preflightHeightfield.md +34 -0
- package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +96 -0
- package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +85 -0
- package/dist/docs/reference/geometry/preflightSvgRegion.md +56 -0
- package/dist/docs/reference/geometry/preflightThreadedNut.md +96 -0
- package/dist/docs/reference/geometry/preflightThreadedRod.md +85 -0
- package/dist/docs/reference/geometry/projectOntoPlane3.md +36 -0
- package/dist/docs/reference/geometry/radialPatternTransforms.md +47 -0
- package/dist/docs/reference/geometry/rectangleContour.md +49 -0
- package/dist/docs/reference/geometry/rectangleProfile.md +53 -0
- package/dist/docs/reference/geometry/regionArea.md +34 -0
- package/dist/docs/reference/geometry/regionBounds.md +27 -0
- package/dist/docs/reference/geometry/regularPolygonContour.md +53 -0
- package/dist/docs/reference/geometry/resamplePolyline2.md +64 -0
- package/dist/docs/reference/geometry/resamplePolyline3.md +67 -0
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +83 -0
- package/dist/docs/reference/geometry/resolveArcSegments.md +67 -0
- package/dist/docs/reference/geometry/resolveCircularSegments.md +62 -0
- package/dist/docs/reference/geometry/resolveCylindricalGear.md +31 -0
- package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +31 -0
- package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +74 -0
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +26 -0
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +59 -0
- package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +27 -0
- package/dist/docs/reference/geometry/resolveRackPitch.md +27 -0
- package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +59 -0
- package/dist/docs/reference/geometry/reverseTriangleMesh.md +30 -0
- package/dist/docs/reference/geometry/revolveMesh.md +76 -0
- package/dist/docs/reference/geometry/rotate2.md +36 -0
- package/dist/docs/reference/geometry/rotationTransform3.md +53 -0
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +50 -0
- package/dist/docs/reference/geometry/sampleContour.md +77 -0
- package/dist/docs/reference/geometry/sampleCurve2.md +61 -0
- package/dist/docs/reference/geometry/sampleCurve3.md +61 -0
- package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +58 -0
- package/dist/docs/reference/geometry/sampleHelix.md +41 -0
- package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +59 -0
- package/dist/docs/reference/geometry/sampleRackToothPath.md +39 -0
- package/dist/docs/reference/geometry/sampleSideProfile.md +73 -0
- package/dist/docs/reference/geometry/sampleTextContours.md +53 -0
- package/dist/docs/reference/geometry/sampleThreadHelices.md +63 -0
- package/dist/docs/reference/geometry/scale2.md +36 -0
- package/dist/docs/reference/geometry/scale3.md +42 -0
- package/dist/docs/reference/geometry/scaleTransform3.md +38 -0
- package/dist/docs/reference/geometry/signedContourArea.md +26 -0
- package/dist/docs/reference/geometry/starContour.md +51 -0
- package/dist/docs/reference/geometry/strokePathRegion.md +63 -0
- package/dist/docs/reference/geometry/subtract2.md +36 -0
- package/dist/docs/reference/geometry/subtract3.md +42 -0
- package/dist/docs/reference/geometry/sweepMesh.md +82 -0
- package/dist/docs/reference/geometry/transform2.md +38 -0
- package/dist/docs/reference/geometry/transform3.md +38 -0
- package/dist/docs/reference/geometry/transformContour.md +42 -0
- package/dist/docs/reference/geometry/transformDeterminant3.md +36 -0
- package/dist/docs/reference/geometry/transformPath2.md +40 -0
- package/dist/docs/reference/geometry/transformPath3.md +33 -0
- package/dist/docs/reference/geometry/transformRegionData.md +40 -0
- package/dist/docs/reference/geometry/transformTriangleMesh.md +42 -0
- package/dist/docs/reference/geometry/translationTransform3.md +35 -0
- package/dist/docs/reference/geometry/triangulateContour.md +26 -0
- package/dist/docs/reference/geometry/validateSolidMesh.md +52 -0
- package/dist/docs/reference/geometry/validateTransform3.md +47 -0
- package/dist/docs/reference/geometry/validateTriangleMesh.md +59 -0
- package/dist/docs/reference/geometry/vector2.md +31 -0
- package/dist/docs/reference/geometry/vector3.md +38 -0
- package/dist/docs/reference/geometry.md +30 -0
- package/dist/docs/reference/model/Anchor3.md +54 -0
- package/dist/docs/reference/model/AttachOptions.md +63 -0
- package/dist/docs/reference/model/Bounds2.md +39 -0
- package/dist/docs/reference/model/Bounds3.md +39 -0
- package/dist/docs/reference/model/BoxEdge.md +15 -0
- package/dist/docs/reference/model/BoxEdgeSelection.md +19 -0
- package/dist/docs/reference/model/BoxEdgeTreatments.md +20 -0
- package/dist/docs/reference/model/BoxOptions.md +92 -0
- package/dist/docs/reference/model/ChamferedEdgeTreatment.md +35 -0
- package/dist/docs/reference/model/CircleContourOptions.md +21 -0
- package/dist/docs/reference/model/CircleOptions.md +21 -0
- package/dist/docs/reference/model/CircularPrimitiveOptions.md +64 -0
- package/dist/docs/reference/model/Computed.md +35 -0
- package/dist/docs/reference/model/ComputedValue.md +20 -0
- package/dist/docs/reference/model/Contour.md +22 -0
- package/dist/docs/reference/model/CorrespondingComponent.md +46 -0
- package/dist/docs/reference/model/CorrespondingContour.md +46 -0
- package/dist/docs/reference/model/CorrespondingProfile.md +22 -0
- package/dist/docs/reference/model/CorrespondingProfileStation.md +27 -0
- package/dist/docs/reference/model/CylinderOptions.md +58 -0
- package/dist/docs/reference/model/DiagnosticOptions.md +23 -0
- package/dist/docs/reference/model/EdgeTreatment.md +22 -0
- package/dist/docs/reference/model/EllipseContourOptions.md +21 -0
- package/dist/docs/reference/model/EllipseOptions.md +21 -0
- package/dist/docs/reference/model/EndTreatments.md +39 -0
- package/dist/docs/reference/model/ExtrudeOptions.md +140 -0
- package/dist/docs/reference/model/FinalizedModel.md +121 -0
- package/dist/docs/reference/model/FinalizedPart.md +87 -0
- package/dist/docs/reference/model/Frame3.md +63 -0
- package/dist/docs/reference/model/GenerateCallback.md +37 -0
- package/dist/docs/reference/model/GenerateContext.md +277 -0
- package/dist/docs/reference/model/GeneratedPart.md +93 -0
- package/dist/docs/reference/model/GenerationDiagnostic.md +41 -0
- package/dist/docs/reference/model/GenerationError.md +54 -0
- package/dist/docs/reference/model/GeometryResolution.md +70 -0
- package/dist/docs/reference/model/GeometrySamplingLimits.md +62 -0
- package/dist/docs/reference/model/GeometryToleranceOptions.md +46 -0
- package/dist/docs/reference/model/GridPatternOptions.md +43 -0
- package/dist/docs/reference/model/HeightfieldOptions.md +67 -0
- package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +140 -0
- package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +58 -0
- package/dist/docs/reference/model/HullOptions.md +72 -0
- package/dist/docs/reference/model/ImmutableBuffer-type.md +80 -0
- package/dist/docs/reference/model/ImmutableTriangleMesh.md +34 -0
- package/dist/docs/reference/model/ImplicitOptions.md +83 -0
- package/dist/docs/reference/model/InternalThreadCutterOptions.md +245 -0
- package/dist/docs/reference/model/LinearPatternOptions.md +31 -0
- package/dist/docs/reference/model/LoftCorrespondence.md +27 -0
- package/dist/docs/reference/model/LoftOptions.md +91 -0
- package/dist/docs/reference/model/LoftPlacement.md +73 -0
- package/dist/docs/reference/model/LoftStation.md +35 -0
- package/dist/docs/reference/model/MatchProfilesOptions.md +35 -0
- package/dist/docs/reference/model/ModelProgram.md +44 -0
- package/dist/docs/reference/model/ModelingLimits.md +126 -0
- package/dist/docs/reference/model/NumericArray.md +7 -0
- package/dist/docs/reference/model/PartGeometry.md +16 -0
- package/dist/docs/reference/model/PartOptions.md +65 -0
- package/dist/docs/reference/model/Path2.md +20 -0
- package/dist/docs/reference/model/PathNormalGuide.md +45 -0
- package/dist/docs/reference/model/PathPatternOptions.md +47 -0
- package/dist/docs/reference/model/PatternSource.md +26 -0
- package/dist/docs/reference/model/Pivot2Options.md +27 -0
- package/dist/docs/reference/model/Pivot3Options.md +27 -0
- package/dist/docs/reference/model/PlaneOptions.md +39 -0
- package/dist/docs/reference/model/PolygonData.md +43 -0
- package/dist/docs/reference/model/PolygonOptions.md +189 -0
- package/dist/docs/reference/model/PrimitivePlacement.md +40 -0
- package/dist/docs/reference/model/PrimitivePlacementOptions.md +88 -0
- package/dist/docs/reference/model/PrintableThreadFit.md +14 -0
- package/dist/docs/reference/model/PrintableThreadFitPolicy.md +50 -0
- package/dist/docs/reference/model/Profile.md +22 -0
- package/dist/docs/reference/model/ProfileComponent2.md +46 -0
- package/dist/docs/reference/model/ProfileContour2.md +34 -0
- package/dist/docs/reference/model/ProfileSpan2.md +47 -0
- package/dist/docs/reference/model/ProfiledEdgeTreatment.md +41 -0
- package/dist/docs/reference/model/RadialPatternOptions.md +63 -0
- package/dist/docs/reference/model/RadialSizing.md +15 -0
- package/dist/docs/reference/model/RadialSizingOptions.md +40 -0
- package/dist/docs/reference/model/RectangleContourOptions.md +72 -0
- package/dist/docs/reference/model/RectangleCornerTreatment.md +40 -0
- package/dist/docs/reference/model/RectangleCornerTreatments.md +20 -0
- package/dist/docs/reference/model/RectangleOptions.md +107 -0
- package/dist/docs/reference/model/RegionData.md +19 -0
- package/dist/docs/reference/model/RegularPolygonOptions.md +53 -0
- package/dist/docs/reference/model/RevolveOptions.md +89 -0
- package/dist/docs/reference/model/RoundedEdgeTreatment.md +96 -0
- package/dist/docs/reference/model/Section.md +490 -0
- package/dist/docs/reference/model/SectionHullOptions.md +72 -0
- package/dist/docs/reference/model/SectionInspection.md +98 -0
- package/dist/docs/reference/model/SectionOffsetJoin.md +16 -0
- package/dist/docs/reference/model/SectionOffsetOptions.md +65 -0
- package/dist/docs/reference/model/SmoothEdgeTreatment.md +76 -0
- package/dist/docs/reference/model/Solid.md +373 -0
- package/dist/docs/reference/model/SolidInspection.md +98 -0
- package/dist/docs/reference/model/SolidRayHit.md +58 -0
- package/dist/docs/reference/model/SphereOptions.md +20 -0
- package/dist/docs/reference/model/StarOptions.md +98 -0
- package/dist/docs/reference/model/StrokeOptions.md +91 -0
- package/dist/docs/reference/model/StrokePathCap.md +16 -0
- package/dist/docs/reference/model/StrokePathJoin.md +16 -0
- package/dist/docs/reference/model/SvgOrigin.md +16 -0
- package/dist/docs/reference/model/SvgPathSectionOptions.md +78 -0
- package/dist/docs/reference/model/SvgSectionOptions.md +66 -0
- package/dist/docs/reference/model/SweepOptions.md +116 -0
- package/dist/docs/reference/model/SweepOrientation.md +116 -0
- package/dist/docs/reference/model/TextSectionOptions.md +41 -0
- package/dist/docs/reference/model/ThreadEndStyle.md +14 -0
- package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +117 -0
- package/dist/docs/reference/model/ThreadHandedness.md +14 -0
- package/dist/docs/reference/model/ThreadLeadInEnvelope.md +14 -0
- package/dist/docs/reference/model/ThreadLeadInShape.md +14 -0
- package/dist/docs/reference/model/ThreadProfile.md +86 -0
- package/dist/docs/reference/model/ThreadRidgeOptions.md +18 -0
- package/dist/docs/reference/model/ThreadedNutBevel.md +14 -0
- package/dist/docs/reference/model/ThreadedNutOptions.md +273 -0
- package/dist/docs/reference/model/ThreadedNutPreflight.md +98 -0
- package/dist/docs/reference/model/ThreadedNutShape.md +14 -0
- package/dist/docs/reference/model/ThreadedRodOptions.md +245 -0
- package/dist/docs/reference/model/TorusOptions.md +110 -0
- package/dist/docs/reference/model/Transform2-type.md +256 -0
- package/dist/docs/reference/model/Transform2Input.md +20 -0
- package/dist/docs/reference/model/Transform2Matrix.md +15 -0
- package/dist/docs/reference/model/Transform3-type.md +296 -0
- package/dist/docs/reference/model/Transform3Input.md +20 -0
- package/dist/docs/reference/model/Transform3Matrix.md +18 -0
- package/dist/docs/reference/model/TriangleMesh.md +42 -0
- package/dist/docs/reference/model/TriangleMeshAnalysis.md +123 -0
- package/dist/docs/reference/model/TriangleMeshMeasurements.md +79 -0
- package/dist/docs/reference/model/TubeOptions.md +143 -0
- package/dist/docs/reference/model/Vector2-type.md +270 -0
- package/dist/docs/reference/model/Vector2Input.md +20 -0
- package/dist/docs/reference/model/Vector2Tuple.md +15 -0
- package/dist/docs/reference/model/Vector3-type.md +282 -0
- package/dist/docs/reference/model/Vector3Input.md +20 -0
- package/dist/docs/reference/model/Vector3Tuple.md +15 -0
- package/dist/docs/reference/model/VectorTextLayout.md +40 -0
- package/dist/docs/reference/model/VectorTextMetrics.md +100 -0
- package/dist/docs/reference/model/anchor.md +46 -0
- package/dist/docs/reference/model/box.md +62 -0
- package/dist/docs/reference/model/categories/boolean-operations.md +37 -0
- package/dist/docs/reference/model/categories/bounded-surfaces.md +26 -0
- package/dist/docs/reference/model/categories/contracts.md +16 -0
- package/dist/docs/reference/model/categories/core-values-errors.md +30 -0
- package/dist/docs/reference/model/categories/explicit-profiles.md +32 -0
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +42 -0
- package/dist/docs/reference/model/categories/generation.md +44 -0
- package/dist/docs/reference/model/categories/inspection.md +23 -0
- package/dist/docs/reference/model/categories/mesh-inspection.md +29 -0
- package/dist/docs/reference/model/categories/primitives.md +61 -0
- package/dist/docs/reference/model/categories/resolution.md +18 -0
- package/dist/docs/reference/model/categories/sections.md +62 -0
- package/dist/docs/reference/model/categories/threads.md +50 -0
- package/dist/docs/reference/model/categories/transforms-placement.md +57 -0
- package/dist/docs/reference/model/circle.md +39 -0
- package/dist/docs/reference/model/components.md +71 -0
- package/dist/docs/reference/model/compose.md +31 -0
- package/dist/docs/reference/model/cylinder.md +52 -0
- package/dist/docs/reference/model/distance.md +45 -0
- package/dist/docs/reference/model/ellipse.md +39 -0
- package/dist/docs/reference/model/extrude.md +83 -0
- package/dist/docs/reference/model/generate.md +46 -0
- package/dist/docs/reference/model/gridPattern.md +80 -0
- package/dist/docs/reference/model/heightfield.md +40 -0
- package/dist/docs/reference/model/hull.md +74 -0
- package/dist/docs/reference/model/immutableBuffer.md +44 -0
- package/dist/docs/reference/model/immutableMesh.md +40 -0
- package/dist/docs/reference/model/implicit.md +47 -0
- package/dist/docs/reference/model/inspectSection.md +38 -0
- package/dist/docs/reference/model/inspectSolid.md +38 -0
- package/dist/docs/reference/model/internalThreadCutter.md +100 -0
- package/dist/docs/reference/model/intersect.md +70 -0
- package/dist/docs/reference/model/isEmpty.md +39 -0
- package/dist/docs/reference/model/linearPattern.md +80 -0
- package/dist/docs/reference/model/loft.md +137 -0
- package/dist/docs/reference/model/matchProfiles.md +42 -0
- package/dist/docs/reference/model/minkowskiSum.md +37 -0
- package/dist/docs/reference/model/pathPattern.md +118 -0
- package/dist/docs/reference/model/polygon.md +40 -0
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +89 -0
- package/dist/docs/reference/model/preflightThreadedNut.md +100 -0
- package/dist/docs/reference/model/preflightThreadedRod.md +89 -0
- package/dist/docs/reference/model/radialPattern.md +113 -0
- package/dist/docs/reference/model/rayCast.md +40 -0
- package/dist/docs/reference/model/rectangle.md +59 -0
- package/dist/docs/reference/model/regularPolygon.md +39 -0
- package/dist/docs/reference/model/revolve.md +74 -0
- package/dist/docs/reference/model/solidFromMesh.md +42 -0
- package/dist/docs/reference/model/sphere.md +42 -0
- package/dist/docs/reference/model/split.md +54 -0
- package/dist/docs/reference/model/splitByPlane.md +66 -0
- package/dist/docs/reference/model/star.md +63 -0
- package/dist/docs/reference/model/stroke.md +74 -0
- package/dist/docs/reference/model/svgPathSection.md +65 -0
- package/dist/docs/reference/model/svgSection.md +64 -0
- package/dist/docs/reference/model/sweep.md +92 -0
- package/dist/docs/reference/model/textSection.md +57 -0
- package/dist/docs/reference/model/threadRidge.md +72 -0
- package/dist/docs/reference/model/threadedNut.md +110 -0
- package/dist/docs/reference/model/threadedRod.md +99 -0
- package/dist/docs/reference/model/toTriangleMesh.md +27 -0
- package/dist/docs/reference/model/torus.md +70 -0
- package/dist/docs/reference/model/transform2.md +39 -0
- package/dist/docs/reference/model/transform3.md +39 -0
- package/dist/docs/reference/model/tube.md +77 -0
- package/dist/docs/reference/model/union.md +72 -0
- package/dist/docs/reference/model/vector2.md +32 -0
- package/dist/docs/reference/model/vector3.md +39 -0
- package/dist/docs/reference/model.md +39 -0
- package/dist/docs/reference/text/Bounds2.md +34 -0
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -0
- package/dist/docs/reference/text/Vector2Tuple.md +7 -0
- package/dist/docs/reference/text/VectorFont.md +186 -0
- package/dist/docs/reference/text/VectorFontOptions.md +17 -0
- package/dist/docs/reference/text/VectorTextArcBaseline.md +53 -0
- package/dist/docs/reference/text/VectorTextLayout.md +34 -0
- package/dist/docs/reference/text/VectorTextLayoutOptions.md +111 -0
- package/dist/docs/reference/text/VectorTextMetrics.md +94 -0
- package/dist/docs/reference/text/VectorTextOptions.md +50 -0
- package/dist/docs/reference/text/categories/font-preparation.md +38 -0
- package/dist/docs/reference/text/prepareVectorFont.md +46 -0
- package/dist/docs/reference/text.md +21 -0
- package/dist/engine/construction-operations.js +10 -3
- package/dist/engine/deferred-context.js +11 -172
- package/dist/engine/execution.js +1 -1
- package/dist/engine/export-3mf.js +2 -2
- package/dist/engine/finalization.js +3 -3
- package/dist/engine/loft-operations.js +4 -4
- package/dist/engine/native/adapter.js +1 -1
- package/dist/engine/native/regions.js +9 -9
- package/dist/engine/native/transforms.js +6 -1
- package/dist/engine/pattern-operations.js +24 -13
- package/dist/engine/placement.js +2 -2
- package/dist/engine/primitive-operations.js +10 -10
- package/dist/engine/primitive-profiles.js +1 -0
- package/dist/engine/profile-mesh.js +7 -7
- package/dist/engine/recipe-realization.js +29 -21
- package/dist/engine/section-operations.js +44 -17
- package/dist/engine/session-graph.js +6 -4
- package/dist/engine/session-native.js +1 -1
- package/dist/engine/session-snapshot.js +3 -2
- package/dist/engine/session.js +4 -5
- package/dist/engine/shape-anchors.js +3 -9
- package/dist/engine/transform-operations.js +42 -25
- package/dist/geometry/bounds.js +117 -0
- package/dist/geometry/cylinder.js +5 -1
- package/dist/geometry/edge-finishing.js +2 -2
- package/dist/geometry/heightfield.js +1 -1
- package/dist/geometry/index.js +20 -13
- package/dist/geometry/{loft-correspondence.js → loft/loft-correspondence.js} +3 -3
- package/dist/geometry/{loft-geometry.js → loft/loft-geometry.js} +8 -8
- package/dist/geometry/{loft-options.js → loft/loft-options.js} +2 -2
- package/dist/geometry/{loft-simple-mesh.js → loft/loft-simple-mesh.js} +6 -6
- package/dist/geometry/{loft-triangulation.js → loft/loft-triangulation.js} +6 -6
- package/dist/geometry/{loft.js → loft/loft.js} +8 -8
- package/dist/geometry/math/immutable-value.js +20 -0
- package/dist/geometry/math/vector-value.js +168 -0
- package/dist/geometry/math/vector2.js +80 -0
- package/dist/geometry/math/vector3.js +42 -8
- package/dist/geometry/mechanical/gear-motion.js +7 -4
- package/dist/geometry/mechanical/gears.js +2 -2
- package/dist/geometry/mechanical/thread-mesh.js +3 -3
- package/dist/geometry/mechanical/thread-profiles.js +2 -2
- package/dist/geometry/mechanical/thread-surface.js +14 -5
- package/dist/geometry/{mesh-centroid.js → mesh/mesh-centroid.js} +1 -1
- package/dist/geometry/{mesh-planar.js → mesh/mesh-planar.js} +1 -1
- package/dist/geometry/{mesh-quality.js → mesh/mesh-quality.js} +2 -2
- package/dist/geometry/{mesh-signature.js → mesh/mesh-signature.js} +2 -2
- package/dist/geometry/{mesh-solid-intersections.js → mesh/mesh-solid-intersections.js} +5 -1
- package/dist/geometry/{mesh-solid.js → mesh/mesh-solid.js} +2 -2
- package/dist/geometry/{mesh.js → mesh/mesh.js} +7 -8
- package/dist/geometry/paths/closest-point.js +74 -0
- package/dist/geometry/paths/frames.js +7 -8
- package/dist/geometry/patterns/options.js +1 -0
- package/dist/{engine/pattern-placements.js → geometry/patterns/placements.js} +22 -8
- package/dist/geometry/patterns.js +25 -0
- package/dist/geometry/primitive-resolution.js +4 -1
- package/dist/geometry/primitive-resolvers.js +9 -9
- package/dist/geometry/profiles/contour.js +3 -3
- package/dist/geometry/profiles/matched.js +3 -3
- package/dist/geometry/profiles/profiles.js +10 -10
- package/dist/geometry/profiles/rectangle.js +7 -7
- package/dist/geometry/profiles/shapes.js +9 -9
- package/dist/geometry/profiles/side-profile.js +37 -0
- package/dist/geometry/regions.js +15 -15
- package/dist/geometry/resolution.js +17 -5
- package/dist/geometry/revolve/revolve-mesh.js +5 -5
- package/dist/geometry/stroke-path.js +50 -46
- package/dist/geometry/svg/errors.js +0 -3
- package/dist/geometry/svg/fill.js +7 -7
- package/dist/geometry/svg/index.js +1 -1
- package/dist/geometry/svg/matrix.js +0 -114
- package/dist/geometry/svg/parser.js +1 -439
- package/dist/geometry/svg-import.js +3 -3
- package/dist/geometry/sweeps/stations.js +4 -4
- package/dist/geometry/sweeps/sweep-closed.js +4 -4
- package/dist/geometry/sweeps/sweep-mesh.js +1 -1
- package/dist/geometry/sweeps/sweep-open.js +6 -6
- package/dist/geometry/sweeps/validation.js +2 -2
- package/dist/geometry/text-fitting.js +85 -0
- package/dist/geometry/tolerance.js +2 -2
- package/dist/geometry/transform-chain.js +172 -0
- package/dist/geometry/transform-geometry.js +31 -27
- package/dist/geometry/transform-matrix.js +14 -0
- package/dist/geometry/transform2.js +60 -0
- package/dist/geometry/transform3.js +70 -26
- package/dist/index.js +3 -0
- package/dist/model/execution-binding.js +10 -5
- package/dist/model/generation.js +1 -1
- package/dist/model/geometry-recipes.js +15 -0
- package/dist/{engine → model}/immutable-generation-data.js +25 -3
- package/dist/model/operation-contracts.js +1 -0
- package/dist/model/operation-dispatch.js +13 -0
- package/dist/model/operations.js +40 -59
- package/dist/model/recipe-declaration.js +193 -0
- package/dist/model/shape-handles.js +15 -4
- package/package.json +10 -8
- package/dist/engine/geometry-recipes.js +0 -12
- /package/dist/geometry/{mesh-edge-table.js → mesh/mesh-edge-table.js} +0 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { immutableMathClass } from "./immutable-value.js";
|
|
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";
|
|
5
|
+
const finite = (value, operation) => {
|
|
6
|
+
if (!Number.isFinite(value)) {
|
|
7
|
+
throw new GeometryError("NON_FINITE_VALUE", "Vector coordinates and results must be finite.", {
|
|
8
|
+
operation,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
return value;
|
|
12
|
+
};
|
|
13
|
+
const validateCoordinates = (values, operation) => {
|
|
14
|
+
for (const coordinate of values)
|
|
15
|
+
finite(coordinate, operation);
|
|
16
|
+
};
|
|
17
|
+
const operand2 = (input, operation) => {
|
|
18
|
+
const values = vector2Data(input);
|
|
19
|
+
validateCoordinates(values, operation);
|
|
20
|
+
return values;
|
|
21
|
+
};
|
|
22
|
+
const operand3 = (input, operation) => {
|
|
23
|
+
const values = vector3Data(input);
|
|
24
|
+
validateCoordinates(values, operation);
|
|
25
|
+
return values;
|
|
26
|
+
};
|
|
27
|
+
function invalidVector(dimensions) {
|
|
28
|
+
throw new GeometryError("INVALID_ARGUMENT", `Expected a ${dimensions}D vector or coordinate tuple.`, {
|
|
29
|
+
operation: `vector${dimensions}`,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const tupleData = (input, dimensions) => {
|
|
33
|
+
if (typeof input !== "object" || input === null)
|
|
34
|
+
return invalidVector(dimensions);
|
|
35
|
+
let values = input;
|
|
36
|
+
if (!Array.isArray(input)) {
|
|
37
|
+
const method = Reflect.get(input, "toArray");
|
|
38
|
+
if (typeof method !== "function")
|
|
39
|
+
return invalidVector(dimensions);
|
|
40
|
+
values = Reflect.apply(method, input, []);
|
|
41
|
+
}
|
|
42
|
+
if (!Array.isArray(values) || values.length !== dimensions)
|
|
43
|
+
return invalidVector(dimensions);
|
|
44
|
+
return values;
|
|
45
|
+
};
|
|
46
|
+
/** Internal tuple view; validates dimension and shape without allocating or checking finiteness. */
|
|
47
|
+
export const vector2Data = (input) => tupleData(input, 2);
|
|
48
|
+
/** Internal tuple view; validates dimension and shape without allocating or checking finiteness. */
|
|
49
|
+
export const vector3Data = (input) => tupleData(input, 3);
|
|
50
|
+
const PlanarVector = /* @__PURE__ */ immutableMathClass(class PlanarVector {
|
|
51
|
+
values;
|
|
52
|
+
constructor(values, operation = "vector2") {
|
|
53
|
+
this.values = values;
|
|
54
|
+
validateCoordinates(values, operation);
|
|
55
|
+
Object.freeze(values);
|
|
56
|
+
Object.freeze(this);
|
|
57
|
+
}
|
|
58
|
+
get x() {
|
|
59
|
+
return this.values[0];
|
|
60
|
+
}
|
|
61
|
+
get y() {
|
|
62
|
+
return this.values[1];
|
|
63
|
+
}
|
|
64
|
+
add(other) {
|
|
65
|
+
return new PlanarVector(add2(this.values, operand2(other, "vector2.add")), "vector2.add");
|
|
66
|
+
}
|
|
67
|
+
subtract(other) {
|
|
68
|
+
return new PlanarVector(subtract2(this.values, operand2(other, "vector2.subtract")), "vector2.subtract");
|
|
69
|
+
}
|
|
70
|
+
scale(factor) {
|
|
71
|
+
return new PlanarVector(scale2(this.values, finite(factor, "vector2.scale")), "vector2.scale");
|
|
72
|
+
}
|
|
73
|
+
normalize(epsilon) {
|
|
74
|
+
return new PlanarVector(normalize2(this.values, epsilon), "vector2.normalize");
|
|
75
|
+
}
|
|
76
|
+
lerp(other, t) {
|
|
77
|
+
return new PlanarVector(lerp2(this.values, operand2(other, "vector2.lerp"), finite(t, "vector2.lerp")), "vector2.lerp");
|
|
78
|
+
}
|
|
79
|
+
dot(other) {
|
|
80
|
+
return finite(dot2(this.values, operand2(other, "vector2.dot")), "vector2.dot");
|
|
81
|
+
}
|
|
82
|
+
cross(other) {
|
|
83
|
+
return finite(cross2(this.values, operand2(other, "vector2.cross")), "vector2.cross");
|
|
84
|
+
}
|
|
85
|
+
length() {
|
|
86
|
+
return finite(length2(this.values), "vector2.length");
|
|
87
|
+
}
|
|
88
|
+
distance(other) {
|
|
89
|
+
return finite(distance2(this.values, operand2(other, "vector2.distance")), "vector2.distance");
|
|
90
|
+
}
|
|
91
|
+
toArray() {
|
|
92
|
+
return this.values;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
const SpatialVector = /* @__PURE__ */ immutableMathClass(class SpatialVector {
|
|
96
|
+
values;
|
|
97
|
+
constructor(values, operation = "vector3") {
|
|
98
|
+
this.values = values;
|
|
99
|
+
validateCoordinates(values, operation);
|
|
100
|
+
Object.freeze(values);
|
|
101
|
+
Object.freeze(this);
|
|
102
|
+
}
|
|
103
|
+
get x() {
|
|
104
|
+
return this.values[0];
|
|
105
|
+
}
|
|
106
|
+
get y() {
|
|
107
|
+
return this.values[1];
|
|
108
|
+
}
|
|
109
|
+
get z() {
|
|
110
|
+
return this.values[2];
|
|
111
|
+
}
|
|
112
|
+
add(other) {
|
|
113
|
+
return new SpatialVector(add3(this.values, operand3(other, "vector3.add")), "vector3.add");
|
|
114
|
+
}
|
|
115
|
+
subtract(other) {
|
|
116
|
+
return new SpatialVector(subtract3(this.values, operand3(other, "vector3.subtract")), "vector3.subtract");
|
|
117
|
+
}
|
|
118
|
+
scale(factor) {
|
|
119
|
+
return new SpatialVector(scale3(this.values, finite(factor, "vector3.scale")), "vector3.scale");
|
|
120
|
+
}
|
|
121
|
+
normalize(epsilon) {
|
|
122
|
+
return new SpatialVector(normalize3(this.values, epsilon), "vector3.normalize");
|
|
123
|
+
}
|
|
124
|
+
lerp(other, t) {
|
|
125
|
+
return new SpatialVector(lerp3(this.values, operand3(other, "vector3.lerp"), finite(t, "vector3.lerp")), "vector3.lerp");
|
|
126
|
+
}
|
|
127
|
+
dot(other) {
|
|
128
|
+
return finite(dot3(this.values, operand3(other, "vector3.dot")), "vector3.dot");
|
|
129
|
+
}
|
|
130
|
+
cross(other) {
|
|
131
|
+
return new SpatialVector(cross3(this.values, operand3(other, "vector3.cross")), "vector3.cross");
|
|
132
|
+
}
|
|
133
|
+
length() {
|
|
134
|
+
return finite(length3(this.values), "vector3.length");
|
|
135
|
+
}
|
|
136
|
+
distance(other) {
|
|
137
|
+
return finite(distance3(this.values, operand3(other, "vector3.distance")), "vector3.distance");
|
|
138
|
+
}
|
|
139
|
+
toArray() {
|
|
140
|
+
return this.values;
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
/**
|
|
144
|
+
* Creates immutable XY arithmetic from a finite tuple or vector, snapshotting the coordinates.
|
|
145
|
+
* Values and results are finite. Invalid dimensions throw `INVALID_ARGUMENT`; nonfinite coordinates
|
|
146
|
+
* and overflow throw `NON_FINITE_VALUE` GeometryError.
|
|
147
|
+
* Use transform2().applyDirection(value) for rotations and nonuniform scaling.
|
|
148
|
+
*/
|
|
149
|
+
export function vector2(input) {
|
|
150
|
+
const values = operand2(input, "vector2");
|
|
151
|
+
return new PlanarVector([values[0], values[1]]);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Creates immutable XYZ arithmetic from a finite tuple or vector, snapshotting the coordinates.
|
|
155
|
+
* Values and results are finite. Invalid dimensions throw `INVALID_ARGUMENT`; nonfinite coordinates
|
|
156
|
+
* and overflow throw `NON_FINITE_VALUE` GeometryError.
|
|
157
|
+
* Use transform3().applyDirection(value) for rotations and nonuniform scaling.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```ts
|
|
161
|
+
* const direction = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
|
|
162
|
+
* const alignment = direction.dot([0, 0, 1]);
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
export function vector3(input) {
|
|
166
|
+
const values = operand3(input, "vector3");
|
|
167
|
+
return new SpatialVector([values[0], values[1], values[2]]);
|
|
168
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
/** Adds two finite XY vectors component-wise. */
|
|
3
|
+
export const add2 = (a, b) => [a[0] + b[0], a[1] + b[1]];
|
|
4
|
+
/** Subtracts `b` from `a` component-wise. */
|
|
5
|
+
export const subtract2 = (a, b) => [
|
|
6
|
+
a[0] - b[0],
|
|
7
|
+
a[1] - b[1],
|
|
8
|
+
];
|
|
9
|
+
/** Multiplies a vector by a dimensionless scalar. */
|
|
10
|
+
export const scale2 = (vector, scale) => [
|
|
11
|
+
vector[0] * scale,
|
|
12
|
+
vector[1] * scale,
|
|
13
|
+
];
|
|
14
|
+
/** Returns the scalar dot product. */
|
|
15
|
+
export const dot2 = (a, b) => a[0] * b[0] + a[1] * b[1];
|
|
16
|
+
/** Returns the signed scalar cross product; positive means `b` is counter-clockwise from `a`. */
|
|
17
|
+
export const cross2 = (a, b) => a[0] * b[1] - a[1] * b[0];
|
|
18
|
+
/** Returns Euclidean vector length in the vector's coordinate units. */
|
|
19
|
+
export const length2 = (vector) => Math.hypot(vector[0], vector[1]);
|
|
20
|
+
/** Returns Euclidean point distance without allocating an intermediate difference vector. */
|
|
21
|
+
export const distance2 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1]);
|
|
22
|
+
/**
|
|
23
|
+
* Returns a unit vector; `epsilon` is a finite, non-negative length threshold (default `1e-12`).
|
|
24
|
+
* Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
|
|
25
|
+
* `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
|
|
26
|
+
*/
|
|
27
|
+
export const normalize2 = (vector, epsilon = 1e-12) => {
|
|
28
|
+
const operation = "normalize2";
|
|
29
|
+
if (!Number.isFinite(epsilon) || epsilon < 0) {
|
|
30
|
+
throw new GeometryError("INVALID_TOLERANCE", "epsilon must be finite and non-negative.", {
|
|
31
|
+
operation,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
const length = length2(vector);
|
|
35
|
+
if (!Number.isFinite(length)) {
|
|
36
|
+
throw new GeometryError("NON_FINITE_VALUE", "Cannot normalize a vector without finite length.", {
|
|
37
|
+
operation,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (length <= epsilon) {
|
|
41
|
+
throw new GeometryError("DEGENERATE_GEOMETRY", "Cannot normalize a zero-length vector.", {
|
|
42
|
+
operation,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
// Subnormal lengths lose relative precision; rescale only this rare case before division.
|
|
46
|
+
if (length < 2 ** -1022) {
|
|
47
|
+
const maximum = Math.max(Math.abs(vector[0]), Math.abs(vector[1]));
|
|
48
|
+
const x = vector[0] / maximum;
|
|
49
|
+
const y = vector[1] / maximum;
|
|
50
|
+
const scaledLength = Math.hypot(x, y);
|
|
51
|
+
return [x / scaledLength, y / scaledLength];
|
|
52
|
+
}
|
|
53
|
+
return [vector[0] / length, vector[1] / length];
|
|
54
|
+
};
|
|
55
|
+
/** Linearly interpolates two vectors; `t` is dimensionless and may extrapolate. */
|
|
56
|
+
export const lerp2 = (a, b, t) => add2(a, scale2(subtract2(b, a), t));
|
|
57
|
+
/**
|
|
58
|
+
* Rotates a finite vector counter-clockwise in XY by `degrees` about the origin.
|
|
59
|
+
* Throws `NON_FINITE_VALUE` for nonfinite coordinates, angles, or derived coordinates.
|
|
60
|
+
*/
|
|
61
|
+
export const rotate2 = (vector, degrees) => {
|
|
62
|
+
if (!Number.isFinite(vector[0]) || !Number.isFinite(vector[1]) || !Number.isFinite(degrees)) {
|
|
63
|
+
throw new GeometryError("NON_FINITE_VALUE", "Rotation coordinates and angle must be finite.", {
|
|
64
|
+
operation: "rotate2",
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
const radians = degrees * (Math.PI / 180);
|
|
68
|
+
const cosine = Math.cos(radians);
|
|
69
|
+
const sine = Math.sin(radians);
|
|
70
|
+
const rotated = [
|
|
71
|
+
vector[0] * cosine - vector[1] * sine,
|
|
72
|
+
vector[0] * sine + vector[1] * cosine,
|
|
73
|
+
];
|
|
74
|
+
if (!Number.isFinite(rotated[0]) || !Number.isFinite(rotated[1])) {
|
|
75
|
+
throw new GeometryError("NON_FINITE_VALUE", "Rotated coordinates must remain finite.", {
|
|
76
|
+
operation: "rotate2",
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return rotated;
|
|
80
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
1
2
|
/**
|
|
2
3
|
* Adds two finite XYZ vectors component-wise.
|
|
3
4
|
* @example
|
|
@@ -5,7 +6,11 @@
|
|
|
5
6
|
* add3([1, 2, 3], [4, 5, 6]); // [5, 7, 9]
|
|
6
7
|
* ```
|
|
7
8
|
*/
|
|
8
|
-
export const add3 = (a, b) => [
|
|
9
|
+
export const add3 = (a, b) => [
|
|
10
|
+
a[0] + b[0],
|
|
11
|
+
a[1] + b[1],
|
|
12
|
+
a[2] + b[2],
|
|
13
|
+
];
|
|
9
14
|
/**
|
|
10
15
|
* Subtracts `b` from `a`.
|
|
11
16
|
* @example
|
|
@@ -13,7 +18,11 @@ export const add3 = (a, b) => [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
|
|
|
13
18
|
* subtract3([4, 5, 6], [1, 2, 3]); // [3, 3, 3]
|
|
14
19
|
* ```
|
|
15
20
|
*/
|
|
16
|
-
export const subtract3 = (a, b) => [
|
|
21
|
+
export const subtract3 = (a, b) => [
|
|
22
|
+
a[0] - b[0],
|
|
23
|
+
a[1] - b[1],
|
|
24
|
+
a[2] - b[2],
|
|
25
|
+
];
|
|
17
26
|
/**
|
|
18
27
|
* Multiplies a vector by a dimensionless scalar.
|
|
19
28
|
* @example
|
|
@@ -48,23 +57,48 @@ export const cross3 = (a, b) => [
|
|
|
48
57
|
];
|
|
49
58
|
/** Returns Euclidean vector length in the vector's coordinate units. */
|
|
50
59
|
export const length3 = (vector) => Math.hypot(vector[0], vector[1], vector[2]);
|
|
51
|
-
/**
|
|
60
|
+
/** Returns Euclidean point distance without allocating an intermediate difference vector. */
|
|
61
|
+
export const distance3 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
|
|
62
|
+
/**
|
|
63
|
+
* Returns a unit vector; `epsilon` is a finite, non-negative length threshold (default `1e-12`).
|
|
64
|
+
* Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
|
|
65
|
+
* `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
|
|
66
|
+
*/
|
|
52
67
|
export const normalize3 = (vector, epsilon = 1e-12) => {
|
|
68
|
+
const operation = "normalize3";
|
|
69
|
+
if (!Number.isFinite(epsilon) || epsilon < 0) {
|
|
70
|
+
throw new GeometryError("INVALID_TOLERANCE", "epsilon must be finite and non-negative.", {
|
|
71
|
+
operation,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
53
74
|
const length = length3(vector);
|
|
54
75
|
if (!Number.isFinite(length)) {
|
|
55
|
-
throw new
|
|
76
|
+
throw new GeometryError("NON_FINITE_VALUE", "Cannot normalize a vector without finite length.", {
|
|
77
|
+
operation,
|
|
78
|
+
});
|
|
56
79
|
}
|
|
57
80
|
if (length <= epsilon) {
|
|
58
|
-
throw new
|
|
81
|
+
throw new GeometryError("DEGENERATE_GEOMETRY", "Cannot normalize a zero-length vector.", {
|
|
82
|
+
operation,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
// Subnormal lengths lose relative precision; rescale only this rare case before division.
|
|
86
|
+
if (length < 2 ** -1022) {
|
|
87
|
+
const maximum = Math.max(Math.abs(vector[0]), Math.abs(vector[1]), Math.abs(vector[2]));
|
|
88
|
+
const x = vector[0] / maximum;
|
|
89
|
+
const y = vector[1] / maximum;
|
|
90
|
+
const z = vector[2] / maximum;
|
|
91
|
+
const scaledLength = Math.hypot(x, y, z);
|
|
92
|
+
return [x / scaledLength, y / scaledLength, z / scaledLength];
|
|
59
93
|
}
|
|
60
|
-
return
|
|
94
|
+
return [vector[0] / length, vector[1] / length, vector[2] / length];
|
|
61
95
|
};
|
|
62
96
|
/** Linearly interpolates two vectors; `t` is dimensionless and may extrapolate. */
|
|
63
97
|
export const lerp3 = (a, b, t) => add3(a, scale3(subtract3(b, a), t));
|
|
64
98
|
/** Removes the component parallel to a normalized plane normal. */
|
|
65
99
|
export const projectOntoPlane3 = (vector, normal) => subtract3(vector, scale3(normal, dot3(vector, normal)));
|
|
66
|
-
/** Rotates a vector right-handed around
|
|
67
|
-
export const
|
|
100
|
+
/** Rotates a vector right-handed around a unit axis by `angle` radians. */
|
|
101
|
+
export const rotateAroundAxis3Radians = (vector, axis, angle) => {
|
|
68
102
|
const cosine = Math.cos(angle);
|
|
69
103
|
const sine = Math.sin(angle);
|
|
70
104
|
return add3(add3(scale3(vector, cosine), scale3(cross3(axis, vector), sine)), scale3(axis, dot3(axis, vector) * (1 - cosine)));
|
|
@@ -50,7 +50,8 @@ const multiPolygonArea = (multiPolygon) => multiPolygon.reduce((total, polygon)
|
|
|
50
50
|
/**
|
|
51
51
|
* Measures sampled kinematic interference over one tooth cycle of an internal gear pair.
|
|
52
52
|
*
|
|
53
|
-
* The driver and ring
|
|
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. Each
|
|
54
55
|
* sampled pinion outline is subtracted from the ring's center-and-space opening; remaining area is
|
|
55
56
|
* solid overlap. This catches involute, tip, and trimming interference that a single assembled pose
|
|
56
57
|
* misses. It is a deterministic model check, not a certified gear-rating calculation.
|
|
@@ -71,11 +72,13 @@ export function measureInternalCylindricalGearPairMotion(spec, options = {}) {
|
|
|
71
72
|
const ringTipRadius = pair.driven.pitchRadius - pair.driven.addendum;
|
|
72
73
|
const contactWindow = contactWindowPolygon(pair.centerDistance, pair.driver.outsideRadius, ringTipRadius);
|
|
73
74
|
const initialRingPhase = pair.driven.toothCount % 2 === 0 ? 0 : pair.driven.angularPitch / 2;
|
|
75
|
+
const initialDriverPhase = pair.driver.toothCount % 2 === 0 ? 0 : pair.driver.angularPitch / 2;
|
|
74
76
|
let maximumOverlapArea = 0;
|
|
75
|
-
let maximumPhase =
|
|
77
|
+
let maximumPhase = initialDriverPhase;
|
|
76
78
|
for (let sample = 0; sample < samples; sample += 1) {
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
+
const phase = (pair.driver.angularPitch * sample) / samples;
|
|
80
|
+
const driverPhase = initialDriverPhase + phase;
|
|
81
|
+
const drivenPhase = initialRingPhase + phase / pair.ratio;
|
|
79
82
|
const posedDriver = clippingPolygon(transformedLoop(driver, driverPhase));
|
|
80
83
|
const posedSpace = clippingPolygon(transformedLoop(ringSpace, drivenPhase, pair.centerDistance));
|
|
81
84
|
const contactDriver = polygonClipping.intersection(posedDriver, contactWindow);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
-
import {
|
|
2
|
+
import { signedContourArea } from "../regions.js";
|
|
3
3
|
import { resolveCircularSegments, resolveGeometryResolution, } from "../resolution.js";
|
|
4
4
|
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
|
|
5
5
|
const DEFAULT_PRESSURE_ANGLE_DEGREES = 20;
|
|
@@ -398,7 +398,7 @@ const sampleResolvedCylindricalGearOutline = (dimensions, options, operation) =>
|
|
|
398
398
|
}
|
|
399
399
|
}
|
|
400
400
|
points.pop();
|
|
401
|
-
if (!(
|
|
401
|
+
if (!(signedContourArea(points) > 0)) {
|
|
402
402
|
throw new GeometryError("INVALID_TOPOLOGY", "The sampled gear outline must be counter-clockwise.", {
|
|
403
403
|
operation,
|
|
404
404
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Closed ridge and complete-solid mesh construction from resolved thread plans. */
|
|
2
|
-
import {
|
|
3
|
-
import { joinTriangleMeshes, measureTriangleMesh, reverseTriangleMesh, validateTriangleMesh, } from "../mesh.js";
|
|
2
|
+
import { triangulateContour } from "../loft/loft.js";
|
|
3
|
+
import { joinTriangleMeshes, measureTriangleMesh, reverseTriangleMesh, validateTriangleMesh, } from "../mesh/mesh.js";
|
|
4
4
|
import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../model-limits.js";
|
|
5
5
|
import { resolveHelicalThreadMeshOptions, resolveHelicalThreadSolidMeshPreflight, } from "./thread-mesh-plan.js";
|
|
6
6
|
import { buildThreadSurfaceColumn, stitchThreadSurfaceColumns } from "./thread-surface.js";
|
|
@@ -45,7 +45,7 @@ const buildThreadRidgeComponent = (options) => {
|
|
|
45
45
|
const c = (column + 1) * size + next, d = (column + 1) * size + point;
|
|
46
46
|
indices.push(a, b, c, a, c, d);
|
|
47
47
|
}
|
|
48
|
-
const capTriangles =
|
|
48
|
+
const capTriangles = triangulateContour([...section].reverse());
|
|
49
49
|
const cap = (column, top) => {
|
|
50
50
|
for (let offset = 0; offset < capTriangles.length; offset += 3) {
|
|
51
51
|
const a = column * size + (size - 1 - capTriangles[offset]);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Periodic thread profiles and axial/radial fit compensation. */
|
|
2
2
|
import { GeometryError } from "../errors.js";
|
|
3
|
-
import {
|
|
3
|
+
import { triangulateContour } from "../loft/loft.js";
|
|
4
4
|
import { resolveGeometryTolerance } from "../tolerance.js";
|
|
5
5
|
const BUTTRESS_DEFAULT_DEPTH_RATIO = 0.66271;
|
|
6
6
|
const BUTTRESS_CREST_FLAT_RATIO = 0.16316;
|
|
@@ -207,7 +207,7 @@ export const createThreadRidgeSection = (points, minimum, linearTolerance, opera
|
|
|
207
207
|
// closing the ridge section retraces its minor-envelope edge, creating overlapping cap faces and
|
|
208
208
|
// zero-area triangles. Keep exactly the connected tooth plus its two root transition points.
|
|
209
209
|
const section = points.slice(firstRaised - 1, lastRaised + 2);
|
|
210
|
-
|
|
210
|
+
triangulateContour([...section].reverse());
|
|
211
211
|
return section;
|
|
212
212
|
};
|
|
213
213
|
const standardProfile = (kind, pitch, depth, root, crest, leftRun, rightRun) => {
|
|
@@ -124,7 +124,7 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
|
|
|
124
124
|
};
|
|
125
125
|
const candidates = [];
|
|
126
126
|
let order = 0;
|
|
127
|
-
const add = (z, kind = "regular", profileRadial, endFactor, surfaceRadius, profileOrdinal, atLeadTip = false) => {
|
|
127
|
+
const add = (z, { kind = "regular", profileRadial, endFactor, surfaceRadius, profileOrdinal, atLeadTip = false, } = {}) => {
|
|
128
128
|
if (z < -resolved.tolerance.linear || z > resolved.length + resolved.tolerance.linear)
|
|
129
129
|
return;
|
|
130
130
|
candidates.push({
|
|
@@ -182,7 +182,12 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
|
|
|
182
182
|
// redundant in this sparse mesher and would reintroduce dense, near-collinear triangles.
|
|
183
183
|
for (const [profileIndex, [profileAxial, profileRadial],] of resolved.surfaceSection.entries()) {
|
|
184
184
|
const profileRadius = majorRadius + profileRadial;
|
|
185
|
-
add(center + profileAxial * scale.width,
|
|
185
|
+
add(center + profileAxial * scale.width, {
|
|
186
|
+
kind: "profile",
|
|
187
|
+
surfaceRadius: leadInEnvelopeRadius + (profileRadius - leadInEnvelopeRadius) * scale.height,
|
|
188
|
+
profileOrdinal: period * resolved.surfaceSection.length + profileIndex,
|
|
189
|
+
atLeadTip: atBottomTip || atTopTip,
|
|
190
|
+
});
|
|
186
191
|
}
|
|
187
192
|
}
|
|
188
193
|
}
|
|
@@ -191,7 +196,11 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
|
|
|
191
196
|
const firstPeriod = Math.ceil((activeMinimum - phaseShift - profileAxial - resolved.tolerance.linear) / profile.pitch);
|
|
192
197
|
const lastPeriod = Math.floor((activeMaximum - phaseShift - profileAxial + resolved.tolerance.linear) / profile.pitch);
|
|
193
198
|
for (let period = firstPeriod; period <= lastPeriod; period += 1) {
|
|
194
|
-
add(phaseShift + profileAxial + period * profile.pitch,
|
|
199
|
+
add(phaseShift + profileAxial + period * profile.pitch, {
|
|
200
|
+
kind: "profile",
|
|
201
|
+
profileRadial,
|
|
202
|
+
profileOrdinal: period * resolved.surfaceSection.length + profileIndex,
|
|
203
|
+
});
|
|
195
204
|
}
|
|
196
205
|
}
|
|
197
206
|
}
|
|
@@ -199,14 +208,14 @@ export const buildThreadSurfaceColumn = (profile, resolved, options, angle, maxi
|
|
|
199
208
|
!usesScaledLeadIn &&
|
|
200
209
|
resolved.bottomBoundary > resolved.tolerance.linear &&
|
|
201
210
|
resolved.bottomBoundary < resolved.length - resolved.tolerance.linear) {
|
|
202
|
-
add(resolved.bottomBoundary, "forced-bottom",
|
|
211
|
+
add(resolved.bottomBoundary, { kind: "forced-bottom", endFactor: 0 });
|
|
203
212
|
}
|
|
204
213
|
const upperThreadBoundary = resolved.topBoundary;
|
|
205
214
|
if (resolved.top === "blunt" &&
|
|
206
215
|
!usesScaledLeadIn &&
|
|
207
216
|
upperThreadBoundary > resolved.tolerance.linear &&
|
|
208
217
|
upperThreadBoundary < resolved.length - resolved.tolerance.linear) {
|
|
209
|
-
add(upperThreadBoundary, "forced-top",
|
|
218
|
+
add(upperThreadBoundary, { kind: "forced-top", endFactor: 0 });
|
|
210
219
|
}
|
|
211
220
|
candidates.sort((left, right) => left.z - right.z || left.order - right.order);
|
|
212
221
|
const normalized = [];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { resolveGeometryTolerance, } from "
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { resolveGeometryTolerance, } from "../tolerance.js";
|
|
3
3
|
const DEFAULT_MAXIMUM_TRIANGLE_COUNT = 200_000;
|
|
4
4
|
const FLOAT32_EPSILON = 2 ** -23;
|
|
5
5
|
const MINIMUM_PLANAR_ANGULAR_TOLERANCE = 1e-5;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { analyzeTriangleMesh, validateTriangleMesh
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { analyzeTriangleMesh, validateTriangleMesh } from "./mesh.js";
|
|
3
3
|
const DEFAULT_POSITION_TOLERANCE = 1e-5;
|
|
4
4
|
const DEFAULT_VOLUME_TOLERANCE = 1e-4;
|
|
5
5
|
const DEFAULT_MAXIMUM_TRIANGLE_COUNT = 200_000;
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
const subtract = (a, b) => [
|
|
1
|
+
const subtract = (a, b) => [
|
|
2
|
+
a[0] - b[0],
|
|
3
|
+
a[1] - b[1],
|
|
4
|
+
a[2] - b[2],
|
|
5
|
+
];
|
|
2
6
|
const dot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
3
7
|
const cross = (a, b) => [
|
|
4
8
|
a[1] * b[2] - a[2] * b[1],
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { resolveGeometryTolerance } from "../tolerance.js";
|
|
2
3
|
import { IndexedMeshEdgeTable } from "./mesh-edge-table.js";
|
|
3
4
|
import { prepareSolidTriangle, trianglesIntersectBeyondSharedBoundary, triangleSolidAngle, } from "./mesh-solid-intersections.js";
|
|
4
5
|
import { analyzeTriangleMesh } from "./mesh.js";
|
|
5
|
-
import { resolveGeometryTolerance } from "./tolerance.js";
|
|
6
6
|
const MAXIMUM_TRIANGLES = 200_000;
|
|
7
7
|
const MAXIMUM_TESTS = 2_000_000;
|
|
8
8
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { writeMeshVertex } from "../numeric.js";
|
|
3
|
+
import { resolveGeometryTolerance } from "../tolerance.js";
|
|
4
|
+
import { transformDeterminant3, validateTransform3 } from "../transform3.js";
|
|
2
5
|
import { IndexedMeshEdgeTable } from "./mesh-edge-table.js";
|
|
3
|
-
import { writeMeshVertex } from "./numeric.js";
|
|
4
|
-
import { resolveGeometryTolerance } from "./tolerance.js";
|
|
5
|
-
import { transformDeterminant3, validateTransform3 } from "./transform3.js";
|
|
6
6
|
function inspectTriangleMesh(mesh, options = {}, mode = "validate", topology = false) {
|
|
7
7
|
// Snapshot meshes can expose owned-copy accessors. Read each buffer once before traversal.
|
|
8
8
|
const source = { positions: mesh.positions, indices: mesh.indices };
|
|
@@ -161,10 +161,9 @@ export function analyzeTriangleMesh(mesh, options = {}) {
|
|
|
161
161
|
/**
|
|
162
162
|
* Validates mesh buffers, indices, triangle area, and optionally closed topology.
|
|
163
163
|
*
|
|
164
|
-
* Closed validation requires
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
* of geometric self-intersections between faces.
|
|
164
|
+
* Closed validation requires exactly two oppositely directed uses per edge, rejecting boundary
|
|
165
|
+
* and non-manifold edges. It establishes edge connectivity without detecting geometric
|
|
166
|
+
* self-intersections between faces. The mesh is neither mutated nor copied.
|
|
168
167
|
*
|
|
169
168
|
* @param mesh - Mesh to inspect.
|
|
170
169
|
* @param options - Empty-mesh, topology, and tolerance policy.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
|
|
3
|
+
export function closestPointOnPath(path, point, options = {}) {
|
|
4
|
+
const fail = (message, code = "INVALID_ARGUMENT") => {
|
|
5
|
+
throw new GeometryError(code, message, { operation: "closestPointOnPath" });
|
|
6
|
+
};
|
|
7
|
+
const dimensions = point.length;
|
|
8
|
+
const closed = options.closed ?? false;
|
|
9
|
+
if (typeof closed !== "boolean" || (dimensions !== 2 && dimensions !== 3))
|
|
10
|
+
fail("Use a 2D or 3D point and a boolean closed option.");
|
|
11
|
+
assertSamplingCount(path.length, "closestPointOnPath", resolveGeometrySamplingLimits(options.limits).maxPathPoints);
|
|
12
|
+
if (path.length < (closed ? 3 : 2))
|
|
13
|
+
fail("Open paths need two points; closed paths need three.");
|
|
14
|
+
const validate = (value) => {
|
|
15
|
+
if (value.length !== dimensions)
|
|
16
|
+
fail("Path and query points must have the same dimension.");
|
|
17
|
+
if (!Number.isFinite(value[0]) ||
|
|
18
|
+
!Number.isFinite(value[1]) ||
|
|
19
|
+
(dimensions === 3 && !Number.isFinite(value[2])))
|
|
20
|
+
fail("Path and query coordinates must be finite.", "NON_FINITE_VALUE");
|
|
21
|
+
};
|
|
22
|
+
validate(point);
|
|
23
|
+
validate(path[0]);
|
|
24
|
+
let bestDistance = Infinity, bestSquared = Infinity, edgeIndex = 0, fraction = 0;
|
|
25
|
+
let bestX = 0, bestY = 0, bestZ = 0;
|
|
26
|
+
const count = closed ? path.length : path.length - 1;
|
|
27
|
+
for (let i = 0; i < count; i++) {
|
|
28
|
+
const a = path[i], b = path[(i + 1) % path.length];
|
|
29
|
+
validate(b);
|
|
30
|
+
const dx = b[0] - a[0], dy = b[1] - a[1], dz = (b[2] ?? 0) - (a[2] ?? 0);
|
|
31
|
+
const px = point[0] - a[0], py = point[1] - a[1], pz = (point[2] ?? 0) - (a[2] ?? 0);
|
|
32
|
+
const lengthSquared = dx * dx + dy * dy + dz * dz;
|
|
33
|
+
let projection = (px * dx + py * dy + pz * dz) / lengthSquared;
|
|
34
|
+
if (!Number.isFinite(projection)) {
|
|
35
|
+
// Normalize only extreme extents; ordinary boundary scans use scalar squared arithmetic.
|
|
36
|
+
const scale = Math.max(Math.abs(dx), Math.abs(dy), Math.abs(dz));
|
|
37
|
+
if (!Number.isFinite(scale))
|
|
38
|
+
fail("Path extent exceeds finite arithmetic.", "NON_FINITE_VALUE");
|
|
39
|
+
if (scale === 0)
|
|
40
|
+
projection = 0;
|
|
41
|
+
else {
|
|
42
|
+
const ux = dx / scale, uy = dy / scale, uz = dz / scale;
|
|
43
|
+
const denominator = ux * ux + uy * uy + uz * uz;
|
|
44
|
+
projection =
|
|
45
|
+
(px * (ux / denominator) + py * (uy / denominator) + pz * (uz / denominator)) / scale;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const t = Math.max(0, Math.min(1, projection));
|
|
49
|
+
const x = a[0] + t * dx, y = a[1] + t * dy, z = (a[2] ?? 0) + t * dz;
|
|
50
|
+
const rx = point[0] - x, ry = point[1] - y, rz = (point[2] ?? 0) - z;
|
|
51
|
+
const squared = rx * rx + ry * ry + rz * rz;
|
|
52
|
+
if (squared > 0 && Number.isFinite(squared) && squared >= bestSquared)
|
|
53
|
+
continue;
|
|
54
|
+
const distance = squared > 0 && Number.isFinite(squared) ? Math.sqrt(squared) : Math.hypot(rx, ry, rz);
|
|
55
|
+
if (!Number.isFinite(distance))
|
|
56
|
+
fail("Path distance exceeds finite arithmetic.", "NON_FINITE_VALUE");
|
|
57
|
+
if (distance < bestDistance) {
|
|
58
|
+
bestDistance = distance;
|
|
59
|
+
bestSquared = squared;
|
|
60
|
+
edgeIndex = i;
|
|
61
|
+
fraction = t;
|
|
62
|
+
bestX = x;
|
|
63
|
+
bestY = y;
|
|
64
|
+
bestZ = z;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const position = dimensions === 2 ? [bestX, bestY] : [bestX, bestY, bestZ];
|
|
68
|
+
return Object.freeze({
|
|
69
|
+
point: Object.freeze(position),
|
|
70
|
+
distance: bestDistance,
|
|
71
|
+
edgeIndex,
|
|
72
|
+
fraction,
|
|
73
|
+
});
|
|
74
|
+
}
|