@metamesh/modeling 0.12.0 → 0.13.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 +27 -0
- package/README.md +60 -72
- package/dist/api/engine.d.ts +123 -97
- package/dist/api/geometry.d.ts +3896 -3307
- package/dist/api/index.d.ts +2489 -2268
- package/dist/api/text.d.ts +119 -107
- package/dist/docs/guides/concepts.md +197 -0
- package/dist/docs/guides/fonts.md +51 -0
- package/dist/docs/guides/fundamentals.md +135 -0
- package/dist/docs/guides/generation.md +221 -0
- package/dist/docs/guides/hosting.md +88 -0
- package/dist/docs/guides/recipes.md +668 -0
- package/dist/docs/manifest.json +9851 -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 +79 -0
- package/dist/docs/reference/geometry/Anchor3.md +49 -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 +58 -0
- package/dist/docs/reference/geometry/AxisAngleRotation3.md +61 -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 +7 -0
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +59 -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/ClearanceHoleDimensions.md +41 -0
- package/dist/docs/reference/geometry/ClearanceHoleFit.md +7 -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 +7 -0
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +83 -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 +65 -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 +14 -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/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/Polygon.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/Region.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/Transform3.md +12 -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.md +7 -0
- package/dist/docs/reference/geometry/Vector3.md +7 -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/add3.md +38 -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 +41 -0
- package/dist/docs/reference/geometry/applyTransformPoint3.md +39 -0
- package/dist/docs/reference/geometry/attachTransform.md +73 -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 +48 -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 +63 -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 +46 -0
- package/dist/docs/reference/geometry/categories/transforms-math.md +63 -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/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 +40 -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 +63 -0
- package/dist/docs/reference/geometry/createThreadProfile.md +37 -0
- package/dist/docs/reference/geometry/createTriangleMeshSignature.md +60 -0
- package/dist/docs/reference/geometry/cross3.md +38 -0
- package/dist/docs/reference/geometry/cumulativePathLengths.md +33 -0
- package/dist/docs/reference/geometry/cylinderAnchor3.md +56 -0
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +14 -0
- package/dist/docs/reference/geometry/distributeAlongPath.md +51 -0
- package/dist/docs/reference/geometry/dot3.md +38 -0
- package/dist/docs/reference/geometry/ellipseContour.md +33 -0
- package/dist/docs/reference/geometry/eulerTransform3.md +38 -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 +44 -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 +30 -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/length3.md +26 -0
- package/dist/docs/reference/geometry/lerp3.md +38 -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 +47 -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/normalize3.md +32 -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 +32 -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 +79 -0
- package/dist/docs/reference/geometry/resolveArcSegments.md +67 -0
- package/dist/docs/reference/geometry/resolveCircularSegments.md +61 -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/rotateAroundAxis3.md +38 -0
- package/dist/docs/reference/geometry/rotationTransform3.md +49 -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/scale3.md +38 -0
- package/dist/docs/reference/geometry/scaleTransform3.md +34 -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/subtract3.md +38 -0
- package/dist/docs/reference/geometry/sweepMesh.md +82 -0
- package/dist/docs/reference/geometry/transformContour.md +42 -0
- package/dist/docs/reference/geometry/transformDeterminant3.md +32 -0
- package/dist/docs/reference/geometry/transformPath2.md +40 -0
- package/dist/docs/reference/geometry/transformPath3.md +33 -0
- package/dist/docs/reference/geometry/transformRegion.md +40 -0
- package/dist/docs/reference/geometry/transformTriangleMesh.md +42 -0
- package/dist/docs/reference/geometry/translationTransform3.md +31 -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 +43 -0
- package/dist/docs/reference/geometry/validateTriangleMesh.md +59 -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/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/PlaneOptions.md +39 -0
- package/dist/docs/reference/model/Polygon-type.md +43 -0
- package/dist/docs/reference/model/PolygonOptions.md +112 -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/Region.md +19 -0
- package/dist/docs/reference/model/RegionOffsetJoin.md +16 -0
- package/dist/docs/reference/model/RegionOffsetOptions.md +65 -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 +450 -0
- package/dist/docs/reference/model/SectionHullOptions.md +72 -0
- package/dist/docs/reference/model/SectionInspection.md +98 -0
- package/dist/docs/reference/model/SmoothEdgeTreatment.md +76 -0
- package/dist/docs/reference/model/Solid.md +350 -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/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.md +15 -0
- package/dist/docs/reference/model/Transform3.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.md +15 -0
- package/dist/docs/reference/model/Vector3.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 +59 -0
- package/dist/docs/reference/model/categories/threads.md +50 -0
- package/dist/docs/reference/model/categories/transforms-placement.md +43 -0
- package/dist/docs/reference/model/circle.md +39 -0
- package/dist/docs/reference/model/components.md +68 -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/fromRegion.md +33 -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/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/toRegion.md +33 -0
- package/dist/docs/reference/model/toTriangleMesh.md +27 -0
- package/dist/docs/reference/model/torus.md +70 -0
- package/dist/docs/reference/model/tube.md +77 -0
- package/dist/docs/reference/model/union.md +72 -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/Vector2.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 +12 -3
- 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/pattern-operations.js +24 -13
- package/dist/engine/pattern-transform.js +9 -0
- package/dist/engine/placement.js +2 -2
- package/dist/engine/primitive-operations.js +10 -10
- package/dist/engine/profile-mesh.js +7 -7
- package/dist/engine/section-operations.js +25 -14
- package/dist/engine/session-graph.js +5 -3
- package/dist/engine/session.js +1 -2
- 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 +15 -12
- 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/vector3.js +5 -1
- 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.js → mesh/mesh-solid.js} +2 -2
- package/dist/geometry/{mesh.js → mesh/mesh.js} +7 -8
- package/dist/geometry/paths/frames.js +4 -5
- 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-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/revolve/revolve-mesh.js +5 -5
- package/dist/geometry/stroke-path.js +2 -2
- 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/sweep-closed.js +1 -1
- package/dist/geometry/sweeps/sweep-mesh.js +1 -1
- package/dist/geometry/sweeps/sweep-open.js +3 -3
- 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-geometry.js +9 -9
- package/dist/model/execution-binding.js +3 -3
- package/dist/model/generation.js +1 -1
- package/dist/model/operation-contracts.js +1 -0
- package/dist/model/operation-dispatch.js +6 -0
- package/dist/model/operations.js +19 -49
- package/package.json +10 -8
- /package/dist/geometry/{mesh-edge-table.js → mesh/mesh-edge-table.js} +0 -0
- /package/dist/geometry/{mesh-solid-intersections.js → mesh/mesh-solid-intersections.js} +0 -0
package/dist/geometry/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/** Pure geometry foundations without host initialization. @packageDocumentation */
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
2
|
+
export { boundsFromSize, boundsSize, boundsCenter, containsBounds, fitBounds, layoutRow, } from "./bounds.js";
|
|
3
|
+
export { fitTextLayout } from "./text-fitting.js";
|
|
4
|
+
export { gridPatternTransforms, linearPatternTransforms, radialPatternTransforms, pathPatternTransforms, } from "./patterns.js";
|
|
5
|
+
export { validateSolidMesh } from "./mesh/mesh-solid.js";
|
|
6
|
+
export { computeTriangleMeshCentroid } from "./mesh/mesh-centroid.js";
|
|
4
7
|
export { matchProfiles, } from "./profiles/matched.js";
|
|
5
8
|
export { heightfieldMesh, preflightHeightfield, } from "./heightfield.js";
|
|
6
9
|
export { preflightThreadedRodSolid as preflightThreadedRod, preflightInternalThreadCutterSolid as preflightInternalThreadCutter, preflightThreadedNutSolid as preflightThreadedNut, } from "./mechanical/thread-solids.js";
|
|
@@ -8,7 +11,7 @@ export { anchorFrame3, attachTransform, boxAnchor3, createAnchor3, cylinderAncho
|
|
|
8
11
|
export { defaultGeometrySamplingLimits, resolveGeometrySamplingLimits, } from "./sampling-limits.js";
|
|
9
12
|
export { GeometryError, isGeometryError, } from "./errors.js";
|
|
10
13
|
export { resolveExtrusionDivisions, } from "./extrusion.js";
|
|
11
|
-
export { extrudeMesh, loftMesh,
|
|
14
|
+
export { extrudeMesh, loftMesh, triangulateContour, } from "./loft/loft.js";
|
|
12
15
|
export { add3, cross3, dot3, length3, lerp3, normalize3, projectOntoPlane3, rotateAroundAxis3, scale3, subtract3, } from "./math/vector3.js";
|
|
13
16
|
export { minimumCylindricalGearToothCountWithoutUndercut, resolveCylindricalGear, resolveCylindricalGearPair, resolveRackPitch, sampleCylindricalGearOutline, sampleInternalCylindricalGearSpaceOutline, sampleRackToothPath, } from "./mechanical/gears.js";
|
|
14
17
|
export { measureInternalCylindricalGearPairMotion, } from "./mechanical/gear-motion.js";
|
|
@@ -18,27 +21,27 @@ export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, cre
|
|
|
18
21
|
export { preflightHelicalThreadSolidMesh, } from "./mechanical/thread-mesh-plan.js";
|
|
19
22
|
export { sampleConventionalThreadHelices as sampleThreadHelices, } from "./mechanical/thread-helices.js";
|
|
20
23
|
export { PRINTABLE_THREAD_FIT_POLICIES, compensateThreadDiameters, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./mechanical/threads.js";
|
|
21
|
-
export { analyzeTriangleMesh, joinTriangleMeshes, measureTriangleMesh, meshBounds, reverseTriangleMesh, transformTriangleMesh, validateTriangleMesh, } from "./mesh.js";
|
|
22
|
-
export { createTriangleMeshSignature, } from "./mesh-signature.js";
|
|
23
|
-
export { optimizePlanarPatches, } from "./mesh-planar.js";
|
|
24
|
-
export { analyzeTriangleMeshQuality, } from "./mesh-quality.js";
|
|
24
|
+
export { analyzeTriangleMesh, joinTriangleMeshes, measureTriangleMesh, meshBounds, reverseTriangleMesh, transformTriangleMesh, validateTriangleMesh, } from "./mesh/mesh.js";
|
|
25
|
+
export { createTriangleMeshSignature, } from "./mesh/mesh-signature.js";
|
|
26
|
+
export { optimizePlanarPatches, } from "./mesh/mesh-planar.js";
|
|
27
|
+
export { analyzeTriangleMeshQuality, } from "./mesh/mesh-quality.js";
|
|
25
28
|
export { computeClosedParallelTransportFrames, computeParallelTransportFrames, } from "./paths/frames.js";
|
|
26
29
|
export { sampleHelix } from "./paths/helix.js";
|
|
27
30
|
export { cumulativePathLengths, pathLength } from "./paths/path.js";
|
|
28
31
|
export { distributeAlongPath, roundClosedPolylinePath, } from "./paths/planar.js";
|
|
29
|
-
export {
|
|
30
|
-
export { sampleSideProfile, } from "./profiles/side-profile.js";
|
|
32
|
+
export { circleContour, rectangleContour, regularPolygonContour, starContour, } from "./profiles/profiles.js";
|
|
33
|
+
export { closeToAxis, sampleSideProfile, } from "./profiles/side-profile.js";
|
|
31
34
|
export { sampleContour, } from "./profiles/contour.js";
|
|
32
|
-
export {
|
|
35
|
+
export { ellipseContour } from "./profiles/shapes.js";
|
|
33
36
|
export { rectangleProfile, } from "./profiles/rectangle.js";
|
|
34
|
-
export {
|
|
37
|
+
export { contourContainsPoint, normalizeContour, normalizePolygon, normalizeRegion, regionArea, regionBounds, signedContourArea, } from "./regions.js";
|
|
35
38
|
export { resolveAlignedCircularSegments, resolveArcSegments, resolveCircularSegments, } from "./resolution.js";
|
|
36
39
|
export { revolveMesh } from "./revolve/revolve-mesh.js";
|
|
37
40
|
export { preflightSvgRegion, } from "./svg-import.js";
|
|
38
41
|
export { strokePathRegion, } from "./stroke-path.js";
|
|
39
42
|
export { sweepMesh } from "./sweeps/sweep-mesh.js";
|
|
40
43
|
export { DEFAULT_GEOMETRY_TOLERANCE, resolveGeometryTolerance, } from "./tolerance.js";
|
|
41
|
-
export {
|
|
44
|
+
export { transformContour, transformPath2, transformPath3, transformRegion, } from "./transform-geometry.js";
|
|
42
45
|
export { IDENTITY_TRANSFORM3, applyTransformDirection3, applyTransformPoint3, composeTransform3, eulerTransform3, frameTransform3, inverseTransform3, rotationTransform3, scaleTransform3, transformDeterminant3, translationTransform3, validateTransform3, } from "./transform3.js";
|
|
43
46
|
export { sampleTextContours } from "./text-contours.js";
|
|
44
47
|
export { sampleCurve2, sampleCurve3 } from "./curves/sampling.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { assertMeshAllocationWithinLimits } from "
|
|
3
|
-
import { assertSamplingCount } from "
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { assertMeshAllocationWithinLimits } from "../model-limits.js";
|
|
3
|
+
import { assertSamplingCount } from "../sampling-limits.js";
|
|
4
4
|
const maximumComparisons = 8_000_000;
|
|
5
5
|
const fail = (message) => {
|
|
6
6
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "loft" });
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { normalizeContour, normalizeRegion, signedContourArea } from "../regions.js";
|
|
3
|
+
import { resolveGeometryResolution } from "../resolution.js";
|
|
4
|
+
import { assertSamplingCount } from "../sampling-limits.js";
|
|
5
|
+
import { frameTransform3 } from "../transform3.js";
|
|
2
6
|
import { alignLoftRows, assertLoftGrid, loftSubdivisions, sliceLoftRows, subdivideLoftRow, } from "./loft-correspondence.js";
|
|
3
7
|
import { loftFrame, resolveLoftControls } from "./loft-options.js";
|
|
4
|
-
import { normalizeLoop2, normalizeRegion2, signedAreaLoop2 } from "./regions.js";
|
|
5
|
-
import { resolveGeometryResolution } from "./resolution.js";
|
|
6
|
-
import { assertSamplingCount } from "./sampling-limits.js";
|
|
7
|
-
import { frameTransform3 } from "./transform3.js";
|
|
8
8
|
const fail = (message) => {
|
|
9
9
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "loft" });
|
|
10
10
|
};
|
|
@@ -55,8 +55,8 @@ function checkedLoop(points, outer, authoritative, limits) {
|
|
|
55
55
|
if (!Array.isArray(points))
|
|
56
56
|
fail("Loft contours must be ordered point arrays.");
|
|
57
57
|
assertSamplingCount(points.length, "loft", limits.maxProfilePoints);
|
|
58
|
-
|
|
59
|
-
const sameWinding =
|
|
58
|
+
normalizeContour(points, outer);
|
|
59
|
+
const sameWinding = signedContourArea(points) > 0 === outer;
|
|
60
60
|
if (!sameWinding && authoritative)
|
|
61
61
|
fail("Identified loft contours must retain outer CCW and hole CW winding.");
|
|
62
62
|
const copied = points.map((point) => [point[0], point[1]]);
|
|
@@ -106,7 +106,7 @@ export function prepareLoftGeometry(input, options, limits, authoritative, recip
|
|
|
106
106
|
const maxLengths = input.map((_, index) => recipeSampled?.[index] === true ? undefined : resolution.maxSegmentLength);
|
|
107
107
|
// Validate every original station's filled topology, including middle stations.
|
|
108
108
|
// Inserted world grids may have no useful local plane and are checked by mesh topology.
|
|
109
|
-
input.forEach((station) =>
|
|
109
|
+
input.forEach((station) => normalizeRegion(station.profile.components.map((component) => ({
|
|
110
110
|
outer: component.outer.points,
|
|
111
111
|
holes: component.holes.map((hole) => hole.points),
|
|
112
112
|
}))));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { frameTransform3 } from "
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { frameTransform3 } from "../transform3.js";
|
|
3
3
|
/** @internal Resolves placement without sorting stations or interpolating their axes. */
|
|
4
4
|
export function loftFrame(placement, operation = "loft") {
|
|
5
5
|
if (typeof placement !== "object" ||
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { measureTriangleMesh, validateTriangleMesh } from "../mesh/mesh.js";
|
|
3
|
+
import { assertMeshAllocationWithinLimits } from "../model-limits.js";
|
|
4
|
+
import { writeMeshVertex } from "../numeric.js";
|
|
5
|
+
import { triangulateContour } from "./loft-triangulation.js";
|
|
6
6
|
/** @internal Pure closed simple-contour strips, retaining repeated correspondence slots as shared physical vertices. */
|
|
7
7
|
export function simpleLoftMesh(geometry, limits) {
|
|
8
8
|
const count = geometry.world[0][0].length, rowCount = geometry.world.length;
|
|
@@ -68,7 +68,7 @@ export function simpleLoftMesh(geometry, limits) {
|
|
|
68
68
|
triangle(a.slots[index], b.slots[next], b.slots[index]);
|
|
69
69
|
}
|
|
70
70
|
const cap = (row, top) => {
|
|
71
|
-
const contour = rows[row], triangles =
|
|
71
|
+
const contour = rows[row], triangles = triangulateContour(contour.points);
|
|
72
72
|
for (let index = 0; index < triangles.length; index += 3)
|
|
73
73
|
triangle(contour.vertices[triangles[index]], contour.vertices[triangles[index + (top ? 1 : 2)]], contour.vertices[triangles[index + (top ? 2 : 1)]]);
|
|
74
74
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import {
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { normalizeContour } from "../regions.js";
|
|
3
3
|
const maximumComparisons = 8_000_000;
|
|
4
4
|
const cross = (a, b, c) => (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
|
|
5
5
|
const pointInTriangle = (point, a, b, c, epsilon) => {
|
|
@@ -9,12 +9,12 @@ const pointInTriangle = (point, a, b, c, epsilon) => {
|
|
|
9
9
|
return ab >= -epsilon && bc >= -epsilon && ca >= -epsilon;
|
|
10
10
|
};
|
|
11
11
|
/** Ear-clips one normalized simple CCW loop into stable local vertex indices. */
|
|
12
|
-
export function
|
|
13
|
-
const normalized =
|
|
12
|
+
export function triangulateContour(loop) {
|
|
13
|
+
const normalized = normalizeContour(loop, true);
|
|
14
14
|
const assertComparisonLimit = (requiredCount) => {
|
|
15
15
|
if (requiredCount > maximumComparisons)
|
|
16
16
|
throw new GeometryError("COMPLEXITY_LIMIT", "Profile cap triangulation exceeds its eight-million-comparison work limit.", {
|
|
17
|
-
operation: "
|
|
17
|
+
operation: "triangulateContour",
|
|
18
18
|
details: { requiredCount, allowedCount: maximumComparisons },
|
|
19
19
|
});
|
|
20
20
|
};
|
|
@@ -59,7 +59,7 @@ export function triangulateLoop2(loop) {
|
|
|
59
59
|
break;
|
|
60
60
|
}
|
|
61
61
|
if (!clipped) {
|
|
62
|
-
throw new GeometryError("INVALID_TOPOLOGY", "Profile cap triangulation could not find a valid ear.", { operation: "
|
|
62
|
+
throw new GeometryError("INVALID_TOPOLOGY", "Profile cap triangulation could not find a valid ear.", { operation: "triangulateContour" });
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
triangles.push(remaining[0], remaining[1], remaining[2]);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { resolveExtrusionControls, resolveExtrusionDivisions, } from "
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { resolveExtrusionControls, resolveExtrusionDivisions, } from "../extrusion.js";
|
|
3
|
+
import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../model-limits.js";
|
|
4
|
+
import { assertSamplingCount } from "../sampling-limits.js";
|
|
3
5
|
import { pointLoftProfile, prepareLoftGeometry } from "./loft-geometry.js";
|
|
4
6
|
import {} from "./loft-options.js";
|
|
5
7
|
import { simpleLoftMesh } from "./loft-simple-mesh.js";
|
|
6
|
-
|
|
7
|
-
import { assertSamplingCount } from "./sampling-limits.js";
|
|
8
|
-
export { triangulateLoop2 } from "./loft-triangulation.js";
|
|
8
|
+
export { triangulateContour } from "./loft-triangulation.js";
|
|
9
9
|
/**
|
|
10
10
|
* Lofts simple point loops at z heights or explicit right-handed frames, in input order.
|
|
11
11
|
*
|
|
@@ -17,8 +17,8 @@ export { triangulateLoop2 } from "./loft-triangulation.js";
|
|
|
17
17
|
*
|
|
18
18
|
* @example Loft with explicit point correspondence
|
|
19
19
|
* ```ts
|
|
20
|
-
* const bottom =
|
|
21
|
-
* const top =
|
|
20
|
+
* const bottom = rectangleContour({ size: [20, 12] });
|
|
21
|
+
* const top = rectangleContour({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
|
|
22
22
|
* loftMesh([{ profile: bottom, z: 0 }, { profile: top, z: 30 }], { correspondence: "reindex" });
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
@@ -48,7 +48,7 @@ export function loftMesh(stations, options) {
|
|
|
48
48
|
*
|
|
49
49
|
* @example Extrude point data without an engine
|
|
50
50
|
* ```ts
|
|
51
|
-
* const outline =
|
|
51
|
+
* const outline = rectangleContour({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
|
|
52
52
|
* extrudeMesh(outline, { height: 8 });
|
|
53
53
|
* ```
|
|
54
54
|
*/
|
|
@@ -13,7 +13,11 @@ export const add3 = (a, b) => [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
|
|
|
13
13
|
* subtract3([4, 5, 6], [1, 2, 3]); // [3, 3, 3]
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
|
-
export const subtract3 = (a, b) => [
|
|
16
|
+
export const subtract3 = (a, b) => [
|
|
17
|
+
a[0] - b[0],
|
|
18
|
+
a[1] - b[1],
|
|
19
|
+
a[2] - b[2],
|
|
20
|
+
];
|
|
17
21
|
/**
|
|
18
22
|
* Multiplies a vector by a dimensionless scalar.
|
|
19
23
|
* @example
|
|
@@ -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,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.
|
|
@@ -88,11 +88,10 @@ const signedAngleAround = (from, to, axis) => Math.atan2(dot3(axis, cross3(from,
|
|
|
88
88
|
/**
|
|
89
89
|
* Builds rotation-minimizing frames for a non-duplicated closed path.
|
|
90
90
|
*
|
|
91
|
-
* Centered cyclic tangents are parallel-transported around the loop.
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* The maxPathPoints ceiling (default100000) bounds path points and frames.
|
|
91
|
+
* Centered cyclic tangents are parallel-transported around the loop. Transporting the last
|
|
92
|
+
* normal back to the first tangent measures seam holonomy; distributing that residual rotation
|
|
93
|
+
* uniformly over all path intervals avoids a visible seam or accumulated frame flip.
|
|
94
|
+
* The maxPathPoints ceiling (default 100000) bounds path points and frames.
|
|
96
95
|
*/
|
|
97
96
|
export const computeClosedParallelTransportFrames = (path, initialNormal, limits = {}) => {
|
|
98
97
|
if (path.length < 3) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { GeometryError } from "../
|
|
2
|
-
import { cross3, dot3, scale3 } from "../
|
|
3
|
-
import { distributeAlongPath } from "../
|
|
4
|
-
import { normalizeSweepPath } from "../
|
|
5
|
-
import { composeTransform3, frameTransform3, IDENTITY_TRANSFORM3, rotationTransform3, translationTransform3, } from "../
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { cross3, dot3, scale3 } from "../math/vector3.js";
|
|
3
|
+
import { distributeAlongPath } from "../paths/planar.js";
|
|
4
|
+
import { normalizeSweepPath } from "../sweeps/validation.js";
|
|
5
|
+
import { composeTransform3, frameTransform3, IDENTITY_TRANSFORM3, rotationTransform3, translationTransform3, } from "../transform3.js";
|
|
6
6
|
const fail = (operation, message) => {
|
|
7
7
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation });
|
|
8
8
|
};
|
|
@@ -24,7 +24,7 @@ const finite = (value, operation) => {
|
|
|
24
24
|
return value;
|
|
25
25
|
};
|
|
26
26
|
const vector = (value, operation) => {
|
|
27
|
-
if (!Array.isArray(value) || value.length !== 3 || !value.every(Number.isFinite))
|
|
27
|
+
if (!Array.isArray(value) || value.length !== 3 || !Array.from(value).every(Number.isFinite))
|
|
28
28
|
fail(operation, "Pattern vectors require three finite coordinates.");
|
|
29
29
|
return value;
|
|
30
30
|
};
|
|
@@ -111,16 +111,30 @@ export function gridPatternPlan(options) {
|
|
|
111
111
|
fail(operation, "Grid count and spacing require matching XY or XYZ tuples.");
|
|
112
112
|
if (options.center !== undefined && typeof options.center !== "boolean")
|
|
113
113
|
fail(operation, "Grid center must be a boolean.");
|
|
114
|
-
const counts = [options.count[0], options.count[1], options.count[2]
|
|
114
|
+
const counts = [options.count[0], options.count[1], dimensions === 3 ? options.count[2] : 1];
|
|
115
115
|
counts.forEach((count) => patternCount(count, operation));
|
|
116
116
|
const count = patternCount(counts[0] * counts[1] * counts[2], operation);
|
|
117
|
-
const spacing = [
|
|
117
|
+
const spacing = [
|
|
118
|
+
options.spacing[0],
|
|
119
|
+
options.spacing[1],
|
|
120
|
+
dimensions === 3 ? options.spacing[2] : 0,
|
|
121
|
+
];
|
|
118
122
|
const extent = spacing.map((distance, axis) => {
|
|
119
123
|
finite(distance, operation);
|
|
120
124
|
if (counts[axis] > 1 && distance === 0)
|
|
121
125
|
fail(operation, "Repeated grid axes require nonzero spacing.");
|
|
122
126
|
return finite(distance * (counts[axis] - 1), operation);
|
|
123
127
|
});
|
|
128
|
+
if (options.frame !== undefined) {
|
|
129
|
+
optionsObject(options.frame, operation);
|
|
130
|
+
for (const coordinates of [
|
|
131
|
+
options.frame.origin,
|
|
132
|
+
options.frame.xAxis,
|
|
133
|
+
options.frame.yAxis,
|
|
134
|
+
options.frame.zAxis,
|
|
135
|
+
])
|
|
136
|
+
vector(coordinates, operation);
|
|
137
|
+
}
|
|
124
138
|
const frame = options.frame === undefined ? IDENTITY_TRANSFORM3 : frameTransform3(options.frame);
|
|
125
139
|
return {
|
|
126
140
|
count,
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { gridPatternPlan, linearPatternPlan, pathPatternPlan, radialPatternPlan, } from "./patterns/placements.js";
|
|
2
|
+
import { resolveGeometrySamplingLimits } from "./sampling-limits.js";
|
|
3
|
+
function transforms(plan) {
|
|
4
|
+
return Object.freeze(Array.from({ length: plan.count }, (_, index) => Object.freeze(plan.transformAt(index))));
|
|
5
|
+
}
|
|
6
|
+
/** Equal linear placements in millimetres, including the original at the origin. */
|
|
7
|
+
export function linearPatternTransforms(options) {
|
|
8
|
+
return transforms(linearPatternPlan(options));
|
|
9
|
+
}
|
|
10
|
+
/** Rotations about an explicit axis; angles use degrees and the first placement is identity. */
|
|
11
|
+
export function radialPatternTransforms(options) {
|
|
12
|
+
return transforms(radialPatternPlan(options));
|
|
13
|
+
}
|
|
14
|
+
/** XY or XYZ grid placements in millimetres, in X-fastest order. */
|
|
15
|
+
export function gridPatternTransforms(options) {
|
|
16
|
+
return transforms(gridPatternPlan(options));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Equal physical arc-length placements along a sampled XYZ path. Tangent orientation maps +Z
|
|
20
|
+
* onto the local path tangent; fixed orientation only translates. Closed paths omit a repeated seam.
|
|
21
|
+
* Explicit sampling ceilings bound both input points and output placements.
|
|
22
|
+
*/
|
|
23
|
+
export function pathPatternTransforms(path, options, limits) {
|
|
24
|
+
return transforms(pathPatternPlan(path, options, resolveGeometrySamplingLimits(limits)));
|
|
25
|
+
}
|
|
@@ -112,17 +112,17 @@ export function resolveBoxPrimitive(options) {
|
|
|
112
112
|
if (selections.length === 0 || selections.length > 12)
|
|
113
113
|
throw new GeometryError("INVALID_ARGUMENT", "Box treatments require a nonempty map of nominal edges or groups.", { operation });
|
|
114
114
|
const cuts = [];
|
|
115
|
+
const selectedEdges = new Set();
|
|
115
116
|
for (const [selection, selected] of selections) {
|
|
116
117
|
const setbacks = edgeTreatmentSetbacks(selected, operation, Math.PI / 2, options.limits);
|
|
117
|
-
if (setbacks.some((value) => value <= 0))
|
|
118
|
-
throw new GeometryError("INVALID_ARGUMENT", "Box treatments require positive setbacks.", {
|
|
119
|
-
operation,
|
|
120
|
-
});
|
|
121
118
|
for (const edge of expandBoxEdges(selection)) {
|
|
122
|
-
if (
|
|
119
|
+
if (selectedEdges.has(edge))
|
|
123
120
|
throw new GeometryError("INVALID_ARGUMENT", "Box edge selections must not overlap.", {
|
|
124
121
|
operation,
|
|
125
122
|
});
|
|
123
|
+
selectedEdges.add(edge);
|
|
124
|
+
if (setbacks[0] === 0 && setbacks[1] === 0)
|
|
125
|
+
continue;
|
|
126
126
|
const [first, second] = edge.split("-"), a = boxFaceAxes[first][0], b = boxFaceAxes[second][0];
|
|
127
127
|
if (setbacks[0] >= dimensions[b] || setbacks[1] >= dimensions[a])
|
|
128
128
|
throw new GeometryError("INVALID_ARGUMENT", "Box edge setbacks must fit their adjoining dimensions.", { operation });
|
|
@@ -134,6 +134,8 @@ export function resolveBoxPrimitive(options) {
|
|
|
134
134
|
});
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
|
+
if (cuts.length === 0)
|
|
138
|
+
return base;
|
|
137
139
|
for (const cut of cuts) {
|
|
138
140
|
const [first, second] = cut.edge.split("-"), [a, sa] = boxFaceAxes[first], [b, sb] = boxFaceAxes[second];
|
|
139
141
|
for (const other of cuts) {
|
|
@@ -167,10 +169,8 @@ export function resolveBoxPrimitive(options) {
|
|
|
167
169
|
};
|
|
168
170
|
}
|
|
169
171
|
const setbacks = edgeTreatmentSetbacks(treatment, operation, Math.PI / 2, options.limits);
|
|
170
|
-
if (setbacks
|
|
171
|
-
|
|
172
|
-
operation,
|
|
173
|
-
});
|
|
172
|
+
if (setbacks[0] === 0 && setbacks[1] === 0)
|
|
173
|
+
return base;
|
|
174
174
|
const distance = setbacks[0];
|
|
175
175
|
assertPositivePrimitive(distance, "edge treatment size", operation);
|
|
176
176
|
const inner = [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { sampleCurve2 } from "../curves/sampling.js";
|
|
2
2
|
import { GeometryError } from "../errors.js";
|
|
3
|
-
import {
|
|
3
|
+
import { normalizeContour } from "../regions.js";
|
|
4
4
|
import { resolveGeometrySamplingLimits } from "../sampling-limits.js";
|
|
5
5
|
import { requireProfileVertexCount } from "./validation.js";
|
|
6
6
|
const OPERATION = "sampleContour";
|
|
@@ -12,7 +12,7 @@ function invalid(message) {
|
|
|
12
12
|
* Physical scaling precedes adaptive curve sampling; the final end must repeat start exactly.
|
|
13
13
|
* Shared anchors and the closing seam are emitted once. Winding normalization may change the
|
|
14
14
|
* starting vertex. The sampled loop is checked for self-intersection and degeneracy by
|
|
15
|
-
* `
|
|
15
|
+
* `normalizeContour`; this is a single contour without holes. No editor modes or normalized
|
|
16
16
|
* coordinate range are required. No native engine, SDK, or ambient resolution is used.
|
|
17
17
|
*
|
|
18
18
|
* @param curve - Closed contour in millimetres unless positive scales convert its coordinates.
|
|
@@ -98,5 +98,5 @@ export function sampleContour(curve, options = {}) {
|
|
|
98
98
|
output.push(sampled[pointIndex]);
|
|
99
99
|
start = end;
|
|
100
100
|
}
|
|
101
|
-
return
|
|
101
|
+
return normalizeContour(output, true);
|
|
102
102
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { planarCubicControl } from "../curves/evaluation.js";
|
|
2
2
|
import { resolveLineSegmentCount, resolveUniformCubicSegments } from "../curves/sampling.js";
|
|
3
3
|
import { GeometryError } from "../errors.js";
|
|
4
|
-
import {
|
|
4
|
+
import { normalizeRegion, signedContourArea } from "../regions.js";
|
|
5
5
|
import { resolveArcSegments, resolveGeometryResolution } from "../resolution.js";
|
|
6
6
|
import { assertSamplingCount, resolveGeometrySamplingLimits } from "../sampling-limits.js";
|
|
7
7
|
import { createProfileSpanSampler } from "./span-sampling.js";
|
|
@@ -167,7 +167,7 @@ export function matchProfiles(profiles, options = {}) {
|
|
|
167
167
|
spans.push(span.id);
|
|
168
168
|
}
|
|
169
169
|
});
|
|
170
|
-
const area =
|
|
170
|
+
const area = signedContourArea(points);
|
|
171
171
|
if (!(contourIndex === 0 ? area > 0 : area < 0))
|
|
172
172
|
fail("Outer contours must be CCW and holes CW; matching never reorders winding.");
|
|
173
173
|
return Object.freeze({
|
|
@@ -183,7 +183,7 @@ export function matchProfiles(profiles, options = {}) {
|
|
|
183
183
|
});
|
|
184
184
|
});
|
|
185
185
|
// This validates intersections and containment, without changing logical slots or topology.
|
|
186
|
-
|
|
186
|
+
normalizeRegion(components.map((component) => ({
|
|
187
187
|
outer: component.outer.points,
|
|
188
188
|
holes: component.holes.map((hole) => hole.points),
|
|
189
189
|
})));
|