@metamesh/modeling 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/README.md +34 -18
- package/dist/api/engine.d.ts +217 -121
- package/dist/api/export.d.ts +123 -79
- package/dist/api/geometry.d.ts +406 -2102
- package/dist/api/index.d.ts +472 -1798
- package/dist/api/math.d.ts +315 -0
- package/dist/api/mechanical.d.ts +1041 -0
- package/dist/api/mesh.d.ts +360 -88
- package/dist/api/text.d.ts +24 -44
- package/dist/docs/guides/concepts.md +67 -33
- package/dist/docs/guides/exporting.md +88 -0
- package/dist/docs/guides/fonts.md +5 -3
- package/dist/docs/guides/fundamentals.md +12 -24
- package/dist/docs/guides/generation.md +24 -16
- package/dist/docs/guides/geometry-values.md +192 -134
- package/dist/docs/guides/hosting.md +51 -96
- package/dist/docs/guides/profiles-and-extrusion.md +159 -11
- package/dist/docs/guides/recipes.md +121 -28
- package/dist/docs/guides/resolution-and-inspection.md +43 -23
- package/dist/docs/guides/solid-joins.md +12 -2
- package/dist/docs/guides/standalone-model.md +4 -2
- package/dist/docs/guides/svg-and-text.md +76 -39
- package/dist/docs/guides/sweeps-and-lofts.md +88 -44
- package/dist/docs/guides/transforms-and-placement.md +113 -103
- package/dist/docs/guides/workers.md +166 -0
- package/dist/docs/manifest.json +4133 -4153
- package/dist/docs/reference/engine/GenerationOptions.md +2 -3
- package/dist/docs/reference/engine/GeometryResource.md +6 -6
- package/dist/docs/reference/engine/ModelDependencies.md +2 -2
- package/dist/docs/reference/engine/ModelEngine.md +2 -3
- package/dist/docs/reference/engine/ModelEngineOptions.md +2 -7
- package/dist/docs/reference/engine/ModelPart.md +6 -6
- package/dist/docs/reference/engine/ModelResult.md +2 -2
- package/dist/docs/reference/engine/ModelRunArguments.md +2 -2
- package/dist/docs/reference/engine/ModelRunOptions.md +2 -3
- package/dist/docs/reference/engine/ModelSession.md +2 -2
- package/dist/docs/reference/engine/SessionOptions.md +2 -3
- package/dist/docs/reference/engine/categories/host-lifecycle.md +9 -3
- package/dist/docs/reference/engine/checkModel.md +6 -2
- package/dist/docs/reference/engine/createModelEngine.md +5 -3
- package/dist/docs/reference/engine/defaultModelingLimits.md +4 -11
- package/dist/docs/reference/engine/modelingWasmUrl.md +2 -2
- package/dist/docs/reference/engine.md +7 -1
- package/dist/docs/reference/export/Export3mfOptions.md +2 -6
- package/dist/docs/reference/export/ExportDiagnostic.md +2 -14
- package/dist/docs/reference/export/ExportFormat.md +2 -14
- package/dist/docs/reference/export/ExportGeometry.md +3 -15
- package/dist/docs/reference/export/ExportGlbOptions.md +14 -18
- package/dist/docs/reference/export/ExportLimits.md +2 -14
- package/dist/docs/reference/export/ExportMaterial.md +2 -14
- package/dist/docs/reference/export/ExportOptions.md +2 -14
- package/dist/docs/reference/export/ExportPart.md +2 -14
- package/dist/docs/reference/export/ExportReport.md +2 -14
- package/dist/docs/reference/export/ExportSink.md +5 -15
- package/dist/docs/reference/export/ExportStlOptions.md +2 -6
- package/dist/docs/reference/export/ExportedFile.md +14 -26
- package/dist/docs/reference/export/categories/mesh-serialization.md +9 -3
- package/dist/docs/reference/export/defaultExportLimits.md +2 -2
- package/dist/docs/reference/export/export3mf.md +4 -6
- package/dist/docs/reference/export/exportGlb.md +8 -10
- package/dist/docs/reference/export/exportStl.md +4 -6
- package/dist/docs/reference/export/write3mf.md +6 -6
- package/dist/docs/reference/export/writeGlb.md +10 -10
- package/dist/docs/reference/export/writeStl.md +6 -6
- package/dist/docs/reference/export.md +9 -3
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +4 -4
- package/dist/docs/reference/geometry/Anchor3-type.md +3 -7
- package/dist/docs/reference/geometry/Anchor3Options.md +70 -0
- package/dist/docs/reference/geometry/ArcCurve2.md +3 -3
- package/dist/docs/reference/geometry/ArcCurve3.md +3 -3
- package/dist/docs/reference/geometry/AttachOptions.md +4 -9
- package/dist/docs/reference/geometry/Bounds2-type.md +9 -30
- package/dist/docs/reference/geometry/Bounds2Data.md +2 -19
- package/dist/docs/reference/geometry/Bounds2Input.md +2 -10
- package/dist/docs/reference/geometry/Bounds2Options.md +2 -6
- package/dist/docs/reference/geometry/Bounds3-type.md +9 -30
- package/dist/docs/reference/geometry/Bounds3Data.md +2 -15
- package/dist/docs/reference/geometry/Bounds3Input.md +2 -10
- package/dist/docs/reference/geometry/Bounds3Options.md +2 -6
- package/dist/docs/reference/geometry/BoundsFit2.md +2 -2
- package/dist/docs/reference/geometry/BoundsFit3.md +2 -2
- package/dist/docs/reference/geometry/BoundsFitOptions.md +2 -2
- package/dist/docs/reference/geometry/BoxAnchorFace.md +3 -3
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +3 -3
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +3 -7
- package/dist/docs/reference/geometry/CircleContourOptions.md +3 -7
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +3 -12
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +2 -2
- package/dist/docs/reference/geometry/CircularSampling.md +2 -2
- package/dist/docs/reference/geometry/CircularSamplingOptions.md +2 -2
- package/dist/docs/reference/geometry/Contour.md +4 -9
- package/dist/docs/reference/geometry/ContourCurve.md +3 -3
- package/dist/docs/reference/geometry/ContourPoint.md +3 -3
- package/dist/docs/reference/geometry/ContourSegment.md +3 -3
- package/dist/docs/reference/geometry/CorrespondingComponent.md +3 -7
- package/dist/docs/reference/geometry/CorrespondingContour.md +3 -7
- package/dist/docs/reference/geometry/CorrespondingProfile.md +3 -7
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +4 -8
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +3 -3
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +3 -3
- package/dist/docs/reference/geometry/Curve2.md +3 -3
- package/dist/docs/reference/geometry/Curve3.md +3 -3
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +3 -11
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +3 -3
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +4 -4
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +2 -2
- package/dist/docs/reference/geometry/EdgeTreatment.md +2 -6
- package/dist/docs/reference/geometry/EllipseContourOptions.md +3 -7
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +9 -18
- package/dist/docs/reference/geometry/FittedTextLayout.md +2 -2
- package/dist/docs/reference/geometry/{Frame3.md → Frame3-type.md} +4 -11
- package/dist/docs/reference/geometry/Frame3Options.md +69 -0
- package/dist/docs/reference/geometry/GeometryError.md +2 -6
- package/dist/docs/reference/geometry/GeometryErrorCode.md +2 -6
- package/dist/docs/reference/geometry/GeometryErrorContext.md +2 -6
- package/dist/docs/reference/geometry/GeometryResolution.md +2 -10
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +3 -11
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +3 -11
- package/dist/docs/reference/geometry/GridPatternOptions.md +7 -9
- package/dist/docs/reference/geometry/ImmutableBuffer-type.md +2 -10
- package/dist/docs/reference/geometry/LineCurve2.md +3 -3
- package/dist/docs/reference/geometry/LineCurve3.md +3 -3
- package/dist/docs/reference/geometry/LinearPatternOptions.md +2 -6
- package/dist/docs/reference/geometry/LoftPlacement.md +13 -21
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +3 -7
- package/dist/docs/reference/geometry/ModelingLimits.md +2 -14
- package/dist/docs/reference/geometry/NumericArray.md +2 -10
- package/dist/docs/reference/geometry/Path2-type.md +153 -12
- package/dist/docs/reference/geometry/Path2Data.md +3 -11
- package/dist/docs/reference/geometry/Path2Input.md +3 -11
- package/dist/docs/reference/geometry/Path3-type.md +153 -12
- package/dist/docs/reference/geometry/Path3Data.md +3 -11
- package/dist/docs/reference/geometry/Path3Input.md +3 -11
- package/dist/docs/reference/geometry/PathFrame.md +3 -3
- package/dist/docs/reference/geometry/PathLocation.md +3 -11
- package/dist/docs/reference/geometry/PathNormalGuide.md +4 -12
- package/dist/docs/reference/geometry/PathOptions.md +3 -7
- package/dist/docs/reference/geometry/PathPatternOptions.md +3 -7
- package/dist/docs/reference/geometry/PathPlacement.md +5 -5
- package/dist/docs/reference/geometry/PathResamplingOptions.md +3 -11
- package/dist/docs/reference/geometry/PathStation.md +87 -0
- package/dist/docs/reference/geometry/PathSubdivisionOptions.md +44 -0
- package/dist/docs/reference/geometry/Pivot2Options.md +3 -11
- package/dist/docs/reference/geometry/Pivot3Options.md +3 -11
- package/dist/docs/reference/geometry/PolygonData.md +4 -8
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +3 -3
- package/dist/docs/reference/geometry/Profile.md +3 -4
- package/dist/docs/reference/geometry/ProfileComponent2.md +3 -7
- package/dist/docs/reference/geometry/ProfileContour2.md +3 -7
- package/dist/docs/reference/geometry/ProfileSpan2.md +3 -7
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +5 -8
- package/dist/docs/reference/geometry/RadialPatternOptions.md +2 -6
- package/dist/docs/reference/geometry/RadialSizing.md +2 -6
- package/dist/docs/reference/geometry/RadialSizingOptions.md +2 -6
- package/dist/docs/reference/geometry/RectangleContourOptions.md +4 -7
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +3 -7
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +3 -7
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +3 -3
- package/dist/docs/reference/geometry/RegionData.md +3 -7
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
- package/dist/docs/reference/geometry/ResolvedGeometryResolution.md +71 -0
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +2 -2
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +2 -6
- package/dist/docs/reference/geometry/RowLayoutOptions.md +2 -2
- package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
- package/dist/docs/reference/geometry/SampleHelixOptions.md +3 -3
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
- package/dist/docs/reference/geometry/SampledCurve2.md +3 -3
- package/dist/docs/reference/geometry/SampledCurve3.md +3 -3
- package/dist/docs/reference/geometry/SideProfileCurve.md +3 -3
- package/dist/docs/reference/geometry/SideProfilePoint.md +3 -3
- package/dist/docs/reference/geometry/SideProfileSegment.md +3 -3
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +2 -6
- package/dist/docs/reference/geometry/SplineOptions.md +69 -0
- package/dist/docs/reference/geometry/StarContourOptions.md +7 -7
- package/dist/docs/reference/geometry/StrokeCap.md +2 -6
- package/dist/docs/reference/geometry/StrokeJoin.md +2 -6
- package/dist/docs/reference/geometry/StrokeOptions.md +3 -7
- package/dist/docs/reference/geometry/SvgImportOptions.md +4 -4
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +2 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +2 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +2 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +2 -2
- package/dist/docs/reference/geometry/Transform2-type.md +3 -11
- package/dist/docs/reference/geometry/Transform2Data.md +3 -11
- package/dist/docs/reference/geometry/Transform2Input.md +3 -11
- package/dist/docs/reference/geometry/Transform3-type.md +4 -12
- package/dist/docs/reference/geometry/Transform3Data.md +3 -11
- package/dist/docs/reference/geometry/Transform3Input.md +6 -13
- package/dist/docs/reference/geometry/Vector2-type.md +3 -11
- package/dist/docs/reference/geometry/Vector2Data.md +3 -15
- package/dist/docs/reference/geometry/Vector2Input.md +3 -11
- package/dist/docs/reference/geometry/Vector3-type.md +27 -11
- package/dist/docs/reference/geometry/Vector3Data.md +3 -11
- package/dist/docs/reference/geometry/Vector3Input.md +3 -11
- package/dist/docs/reference/geometry/VectorTextLayout.md +2 -10
- package/dist/docs/reference/geometry/VectorTextMetrics.md +3 -11
- package/dist/docs/reference/geometry/anchor3.md +17 -26
- package/dist/docs/reference/geometry/anchorFrame3.md +6 -6
- package/dist/docs/reference/geometry/attachmentTransform3.md +8 -8
- package/dist/docs/reference/geometry/bounds2.md +6 -8
- package/dist/docs/reference/geometry/bounds3.md +4 -6
- package/dist/docs/reference/geometry/boundsCenter.md +2 -2
- package/dist/docs/reference/geometry/boundsSize.md +2 -2
- package/dist/docs/reference/geometry/boxAnchor3.md +3 -3
- package/dist/docs/reference/geometry/categories/bounds-layout.md +9 -3
- package/dist/docs/reference/geometry/categories/curves-paths.md +24 -13
- package/dist/docs/reference/geometry/categories/immutable-data.md +40 -0
- package/dist/docs/reference/geometry/categories/pattern-placement.md +10 -4
- package/dist/docs/reference/geometry/categories/primitive-options.md +8 -13
- package/dist/docs/reference/geometry/categories/profiles-regions.md +11 -5
- package/dist/docs/reference/geometry/categories/resolution-errors.md +8 -1
- package/dist/docs/reference/geometry/categories/transforms-math.md +20 -51
- package/dist/docs/reference/geometry/categories/vector-import.md +7 -4
- package/dist/docs/reference/geometry/circleContour.md +3 -3
- package/dist/docs/reference/geometry/closeToAxis.md +7 -3
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +9 -6
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +13 -6
- package/dist/docs/reference/geometry/contourContainsPoint.md +7 -3
- package/dist/docs/reference/geometry/cylinderAnchor3.md +5 -5
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +3 -3
- package/dist/docs/reference/geometry/distributeAlongPath.md +16 -11
- package/dist/docs/reference/geometry/ellipseContour.md +3 -3
- package/dist/docs/reference/geometry/fitBounds.md +10 -2
- package/dist/docs/reference/geometry/fitTextLayout.md +5 -5
- package/dist/docs/reference/geometry/frame3.md +66 -0
- package/dist/docs/reference/geometry/gridPatternTransforms.md +6 -6
- package/dist/docs/reference/geometry/immutableBuffer.md +5 -7
- package/dist/docs/reference/geometry/isGeometryError.md +2 -6
- package/dist/docs/reference/geometry/layoutRow.md +4 -2
- package/dist/docs/reference/geometry/linearPatternTransforms.md +6 -6
- package/dist/docs/reference/geometry/matchProfiles.md +5 -3
- package/dist/docs/reference/geometry/normalizeContour.md +8 -4
- package/dist/docs/reference/geometry/normalizePolygon.md +5 -3
- package/dist/docs/reference/geometry/normalizeRegion.md +5 -3
- package/dist/docs/reference/geometry/path2.md +7 -7
- package/dist/docs/reference/geometry/path3.md +7 -7
- package/dist/docs/reference/geometry/pathPatternTransforms.md +12 -8
- package/dist/docs/reference/geometry/preflightSvgRegion.md +5 -5
- package/dist/docs/reference/geometry/radialPatternTransforms.md +5 -5
- package/dist/docs/reference/geometry/rectangleContour.md +3 -3
- package/dist/docs/reference/geometry/rectangleProfile.md +3 -4
- package/dist/docs/reference/geometry/regionArea.md +3 -3
- package/dist/docs/reference/geometry/regionBounds.md +6 -4
- package/dist/docs/reference/geometry/regularPolygonContour.md +3 -3
- package/dist/docs/reference/geometry/resamplePolyline2.md +7 -3
- package/dist/docs/reference/geometry/resamplePolyline3.md +7 -3
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +5 -5
- package/dist/docs/reference/geometry/resolveArcSegments.md +8 -6
- package/dist/docs/reference/geometry/resolveCircularSampling.md +2 -2
- package/dist/docs/reference/geometry/resolveCircularSegments.md +5 -3
- package/dist/docs/reference/geometry/{resolveExtrusionDivisions.md → resolveExtrusionSlices.md} +16 -15
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +5 -3
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +3 -3
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +12 -5
- package/dist/docs/reference/geometry/sampleContour.md +5 -5
- package/dist/docs/reference/geometry/sampleCurve2.md +7 -3
- package/dist/docs/reference/geometry/sampleCurve3.md +7 -3
- package/dist/docs/reference/geometry/sampleHelix.md +3 -3
- package/dist/docs/reference/geometry/sampleSideProfile.md +5 -5
- package/dist/docs/reference/geometry/sampleTextContours.md +3 -3
- package/dist/docs/reference/geometry/signedContourArea.md +5 -3
- package/dist/docs/reference/geometry/spline2.md +68 -0
- package/dist/docs/reference/geometry/spline3.md +62 -0
- package/dist/docs/reference/geometry/starContour.md +3 -3
- package/dist/docs/reference/geometry/strokeRegionData.md +8 -5
- package/dist/docs/reference/geometry/transform2.md +5 -7
- package/dist/docs/reference/geometry/transform3.md +23 -10
- package/dist/docs/reference/geometry/transformRegionData.md +7 -3
- package/dist/docs/reference/geometry/triangulateContour.md +6 -4
- package/dist/docs/reference/geometry/vector2.md +6 -8
- package/dist/docs/reference/geometry/vector3.md +8 -8
- package/dist/docs/reference/geometry.md +13 -18
- package/dist/docs/reference/{geometry → math}/AxisAngleRotation3.md +4 -5
- package/dist/docs/reference/math/IDENTITY_TRANSFORM3.md +20 -0
- package/dist/docs/reference/math/add2.md +38 -0
- package/dist/docs/reference/math/add3.md +46 -0
- package/dist/docs/reference/math/applyTransformDirection3.md +46 -0
- package/dist/docs/reference/math/applyTransformPoint3.md +44 -0
- package/dist/docs/reference/math/categories/tuple-matrix.md +67 -0
- package/dist/docs/reference/math/cross2.md +38 -0
- package/dist/docs/reference/math/cross3.md +44 -0
- package/dist/docs/reference/math/distance2.md +38 -0
- package/dist/docs/reference/math/distance3.md +38 -0
- package/dist/docs/reference/math/dot2.md +38 -0
- package/dist/docs/reference/math/dot3.md +44 -0
- package/dist/docs/reference/math/eulerTransform3.md +43 -0
- package/dist/docs/reference/math/inverseTransform3.md +36 -0
- package/dist/docs/reference/math/length2.md +32 -0
- package/dist/docs/reference/math/length3.md +32 -0
- package/dist/docs/reference/math/lerp2.md +46 -0
- package/dist/docs/reference/math/lerp3.md +46 -0
- package/dist/docs/reference/math/multiplyTransform3.md +46 -0
- package/dist/docs/reference/math/normalize2.md +45 -0
- package/dist/docs/reference/math/normalize3.md +45 -0
- package/dist/docs/reference/math/projectOntoPlane3.md +40 -0
- package/dist/docs/reference/math/rotate2.md +40 -0
- package/dist/docs/reference/math/rotationTransform3.md +56 -0
- package/dist/docs/reference/math/scale2.md +38 -0
- package/dist/docs/reference/math/scale3.md +44 -0
- package/dist/docs/reference/math/scaleTransform3.md +39 -0
- package/dist/docs/reference/math/subtract2.md +38 -0
- package/dist/docs/reference/math/subtract3.md +44 -0
- package/dist/docs/reference/math/transformDeterminant3.md +38 -0
- package/dist/docs/reference/math/translationTransform3.md +36 -0
- package/dist/docs/reference/math/validateRigidTransform3.md +38 -0
- package/dist/docs/reference/math/validateTransform3.md +48 -0
- package/dist/docs/reference/math.md +22 -0
- package/dist/docs/reference/{geometry → mechanical}/AcmeThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/Bevel.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/BevelSize.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ButtressPressureFlankSide.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ButtressThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleFit.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CompensatedThreadDiameters.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CustomThreadProfileSpec.md +5 -15
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearMeshKind.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearOutlineOptions.md +5 -10
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionOptions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionReport.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairSpec.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearSpec.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/InternalThreadCutterOptions.md +6 -13
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeBaseSpec.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeDimensions.md +4 -5
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeInterval.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSamplingOptions.md +5 -14
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSpec.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/METRIC_FASTENER_STANDARDS.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricFastenerSize.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricFastenerStandard.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricHexNutDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricSocketCapHeadDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/PRINTABLE_THREAD_FIT_POLICIES.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFit.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFitPolicy.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/RackPitchDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/RackPitchSpec.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/SampledThreadHelices.md +4 -8
- package/dist/docs/reference/{geometry → mechanical}/SquareThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/ThreadBevelOptions.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadCircularSegmentsOptions.md +5 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadCompensationOptions.md +4 -5
- package/dist/docs/reference/{geometry → mechanical}/ThreadEndStyle.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadEndTreatmentOptions.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadHandedness.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadHelixOptions.md +5 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInEnvelope.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInShape.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfile-type.md +5 -17
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfileBaseSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfileSpec.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadRidgeOptions.md +7 -18
- package/dist/docs/reference/{geometry → mechanical}/ThreadRole.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/ThreadSolidOptions.md +8 -15
- package/dist/docs/reference/{geometry → mechanical}/ThreadSolidPreflight.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutOptions.md +7 -14
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutPreflight.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutShape.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadedRodOptions.md +6 -13
- package/dist/docs/reference/{geometry → mechanical}/TrapezoidalThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/TriangularThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/categories/mechanical.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadDiameters.md +4 -4
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileAxially.md +12 -6
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileForFaceting.md +13 -3
- package/dist/docs/reference/{geometry → mechanical}/getMetricClearanceHoleDiameter.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/getMetricFastenerStandard.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/measureInternalCylindricalGearPairMotion.md +9 -7
- package/dist/docs/reference/{geometry → mechanical}/minimumCylindricalGearToothCountWithoutUndercut.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/preflightInternalThreadCutter.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/preflightThreadedNut.md +9 -7
- package/dist/docs/reference/{geometry → mechanical}/preflightThreadedRod.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGear.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGearPair.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveKnuckleHinge.md +9 -7
- package/dist/docs/reference/{geometry → mechanical}/resolvePrintableThreadFitPolicy.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveRackPitch.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveThreadCircularSegments.md +7 -5
- package/dist/docs/reference/{geometry → mechanical}/sampleCylindricalGearOutline.md +9 -8
- package/dist/docs/reference/{geometry → mechanical}/sampleInternalCylindricalGearSpaceOutline.md +9 -8
- package/dist/docs/reference/{geometry → mechanical}/sampleRackToothPath.md +10 -8
- package/dist/docs/reference/{geometry → mechanical}/sampleThreadHelices.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/threadProfile.md +7 -3
- package/dist/docs/reference/mechanical.md +19 -0
- package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +128 -0
- package/dist/docs/reference/{geometry → mesh}/HeightfieldMeshLimits.md +5 -13
- package/dist/docs/reference/{geometry → mesh}/HeightfieldPreflight.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/ImmutableTriangleMesh.md +5 -17
- package/dist/docs/reference/mesh/LoftMeshStation.md +32 -0
- package/dist/docs/reference/mesh/MeshRenderOptions.md +3 -3
- package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationFallbackReason.md +4 -8
- package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationOptions.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationResult.md +4 -8
- package/dist/docs/reference/{geometry → mesh}/PlanarPatchQuality.md +4 -12
- package/dist/docs/reference/mesh/RenderMesh.md +19 -19
- package/dist/docs/reference/{geometry → mesh}/SolidMeshValidationOptions.md +4 -12
- package/dist/docs/reference/{geometry → mesh}/TriangleMesh.md +8 -12
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshAnalysis.md +5 -14
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshAnalysisOptions.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshInput.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshMeasurements.md +5 -14
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshQualityOptions.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshQualityReport.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignature.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignatureOptions.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignatureTolerances.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshTopologyAnalysis.md +5 -14
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshValidationOptions.md +4 -9
- package/dist/docs/reference/mesh/analyze.md +26 -18
- package/dist/docs/reference/mesh/analyzeQuality.md +12 -12
- package/dist/docs/reference/mesh/bounds.md +5 -6
- package/dist/docs/reference/mesh/categories/operations.md +37 -4
- package/dist/docs/reference/mesh/centroid.md +5 -6
- package/dist/docs/reference/mesh/extrude.md +21 -20
- package/dist/docs/reference/mesh/heightfield.md +8 -8
- package/dist/docs/reference/mesh/immutable.md +7 -5
- package/dist/docs/reference/mesh/join.md +7 -7
- package/dist/docs/reference/mesh/loft.md +19 -18
- package/dist/docs/reference/mesh/optimizePlanarPatches.md +21 -21
- package/dist/docs/reference/mesh/preflightHeightfield.md +8 -8
- package/dist/docs/reference/mesh/preflightThreadSolid.md +22 -25
- package/dist/docs/reference/mesh/render.md +7 -5
- package/dist/docs/reference/mesh/reverse.md +7 -7
- package/dist/docs/reference/mesh/revolve.md +12 -14
- package/dist/docs/reference/mesh/signature.md +12 -12
- package/dist/docs/reference/mesh/sweep.md +96 -25
- package/dist/docs/reference/mesh/threadRidge.md +19 -18
- package/dist/docs/reference/mesh/threadSolid.md +23 -22
- package/dist/docs/reference/mesh/transform.md +8 -9
- package/dist/docs/reference/mesh/validate.md +11 -11
- package/dist/docs/reference/mesh/validateSolid.md +10 -10
- package/dist/docs/reference/mesh.md +8 -2
- package/dist/docs/reference/model/BoxEdge.md +23 -0
- package/dist/docs/reference/model/BoxEdgeSelection.md +27 -0
- package/dist/docs/reference/model/BoxEdgeTreatments.md +27 -0
- package/dist/docs/reference/{geometry → model}/BoxOptions.md +12 -12
- package/dist/docs/reference/model/CircleOptions.md +4 -5
- package/dist/docs/reference/model/CornerCutterOptions.md +93 -0
- package/dist/docs/reference/model/CornerCutterTreatment.md +53 -0
- package/dist/docs/reference/model/{HoleCutterOverrun.md → CutterOverrun.md} +8 -7
- package/dist/docs/reference/model/CylinderOptions.md +64 -0
- package/dist/docs/reference/model/DiagnosticOptions.md +2 -2
- package/dist/docs/reference/model/EdgeCutterOptions.md +129 -0
- package/dist/docs/reference/model/EllipseOptions.md +4 -5
- package/dist/docs/reference/model/EndTreatments.md +43 -0
- package/dist/docs/reference/model/ExtrudeOptions.md +153 -0
- package/dist/docs/reference/model/GenerateCallback.md +2 -2
- package/dist/docs/reference/model/GenerateContext.md +27 -3
- package/dist/docs/reference/model/GenerationDiagnostic.md +2 -2
- package/dist/docs/reference/model/GenerationError.md +2 -2
- package/dist/docs/reference/{geometry → model}/HeightfieldOptions.md +5 -23
- package/dist/docs/reference/model/HoleCutterOpening.md +27 -0
- package/dist/docs/reference/model/HoleCutterOptions.md +9 -22
- package/dist/docs/reference/model/HoleCutterRecess.md +5 -4
- package/dist/docs/reference/model/HullOptions.md +2 -3
- package/dist/docs/reference/model/ImmutableValue.md +2 -2
- package/dist/docs/reference/model/ImplicitOptions.md +3 -9
- package/dist/docs/reference/model/JoinOptions.md +2 -5
- package/dist/docs/reference/model/JoinTransition.md +2 -2
- package/dist/docs/reference/model/KnuckleHinge-type.md +2 -3
- package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +2 -2
- package/dist/docs/reference/model/KnuckleHingeOptions.md +3 -5
- package/dist/docs/reference/model/KnuckleHingeWeb.md +2 -2
- package/dist/docs/reference/{geometry → model}/LoftCorrespondence.md +8 -11
- package/dist/docs/reference/{geometry → model}/LoftOptions.md +11 -16
- package/dist/docs/reference/model/LoftStation.md +4 -5
- package/dist/docs/reference/model/Memo.md +2 -2
- package/dist/docs/reference/model/ModelProgram.md +2 -2
- package/dist/docs/reference/model/PartDeclaration.md +4 -5
- package/dist/docs/reference/model/PartGeometry.md +3 -5
- package/dist/docs/reference/model/PartOptions.md +4 -5
- package/dist/docs/reference/model/PatternSource.md +4 -4
- package/dist/docs/reference/model/PlaneOptions.md +3 -7
- package/dist/docs/reference/model/PolygonOptions.md +2 -7
- package/dist/docs/reference/model/PrimitiveAttachment.md +50 -0
- package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +111 -0
- package/dist/docs/reference/model/RectangleOptions.md +21 -26
- package/dist/docs/reference/model/RegularPolygonOptions.md +4 -37
- package/dist/docs/reference/{geometry → model}/RevolveOptions.md +15 -24
- package/dist/docs/reference/model/Section.md +115 -53
- package/dist/docs/reference/model/SectionHullOptions.md +2 -3
- package/dist/docs/reference/model/SectionInspection.md +2 -6
- package/dist/docs/reference/model/SectionOffsetJoin.md +2 -2
- package/dist/docs/reference/model/SectionOffsetOptions.md +2 -3
- package/dist/docs/reference/model/Solid.md +24 -12
- package/dist/docs/reference/model/SolidInspection.md +2 -6
- package/dist/docs/reference/model/SolidSegmentHit.md +2 -6
- package/dist/docs/reference/model/SphereOptions.md +27 -0
- package/dist/docs/reference/model/StarOptions.md +21 -23
- package/dist/docs/reference/model/SvgOrigin.md +2 -2
- package/dist/docs/reference/model/SvgPathSectionOptions.md +3 -5
- package/dist/docs/reference/model/SvgSectionOptions.md +3 -6
- package/dist/docs/reference/model/SweepOptions.md +109 -0
- package/dist/docs/reference/model/SweepOrientation.md +119 -0
- package/dist/docs/reference/model/SweepTransformOptions.md +105 -0
- package/dist/docs/reference/model/TextSectionOptions.md +2 -7
- package/dist/docs/reference/{geometry → model}/TorusOptions.md +11 -10
- package/dist/docs/reference/model/TubeOptions.md +84 -0
- package/dist/docs/reference/model/box.md +11 -10
- package/dist/docs/reference/model/categories/boolean-operations.md +9 -3
- package/dist/docs/reference/model/categories/bounded-surfaces.md +13 -1
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +26 -7
- package/dist/docs/reference/model/categories/generation.md +11 -3
- package/dist/docs/reference/model/categories/hinges.md +7 -1
- package/dist/docs/reference/model/categories/mesh-inspection.md +7 -1
- package/dist/docs/reference/model/categories/primitives.md +34 -6
- package/dist/docs/reference/model/categories/sections.md +8 -2
- package/dist/docs/reference/model/categories/threads.md +8 -5
- package/dist/docs/reference/model/categories/transforms-placement.md +15 -10
- package/dist/docs/reference/model/circle.md +7 -3
- package/dist/docs/reference/model/cornerCutter.md +88 -0
- package/dist/docs/reference/model/cylinder.md +6 -5
- package/dist/docs/reference/model/edgeCutter.md +91 -0
- package/dist/docs/reference/model/ellipse.md +7 -3
- package/dist/docs/reference/model/extrude.md +29 -23
- package/dist/docs/reference/model/generate.md +4 -2
- package/dist/docs/reference/model/gridPattern.md +11 -4
- package/dist/docs/reference/model/heightfield.md +5 -5
- package/dist/docs/reference/model/holeCutter.md +26 -12
- package/dist/docs/reference/model/hull.md +2 -2
- package/dist/docs/reference/model/implicit.md +3 -3
- package/dist/docs/reference/model/internalThreadCutter.md +32 -21
- package/dist/docs/reference/model/intersect.md +7 -3
- package/dist/docs/reference/model/join.md +6 -2
- package/dist/docs/reference/model/knuckleHinge.md +2 -3
- package/dist/docs/reference/model/linearPattern.md +11 -4
- package/dist/docs/reference/model/loft.md +28 -24
- package/dist/docs/reference/model/minkowskiSum.md +3 -3
- package/dist/docs/reference/model/pathPattern.md +17 -8
- package/dist/docs/reference/model/polygon.md +8 -3
- package/dist/docs/reference/model/radialPattern.md +11 -4
- package/dist/docs/reference/model/rectangle.md +11 -7
- package/dist/docs/reference/model/regularPolygon.md +7 -3
- package/dist/docs/reference/model/revolve.md +18 -12
- package/dist/docs/reference/model/solidFromMesh.md +10 -6
- package/dist/docs/reference/model/sphere.md +7 -6
- package/dist/docs/reference/model/star.md +11 -7
- package/dist/docs/reference/model/stroke.md +12 -8
- package/dist/docs/reference/model/svgPathSection.md +10 -4
- package/dist/docs/reference/model/svgSection.md +10 -4
- package/dist/docs/reference/model/sweep.md +102 -25
- package/dist/docs/reference/model/textSection.md +7 -3
- package/dist/docs/reference/model/threadRidge.md +16 -17
- package/dist/docs/reference/model/threadedNut.md +25 -22
- package/dist/docs/reference/model/threadedRod.md +21 -18
- package/dist/docs/reference/model/torus.md +13 -12
- package/dist/docs/reference/model/tube.md +6 -5
- package/dist/docs/reference/model/union.md +7 -3
- package/dist/docs/reference/model.md +10 -5
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +2 -2
- package/dist/docs/reference/text/VectorFont.md +38 -34
- package/dist/docs/reference/text/VectorFontOptions.md +2 -2
- package/dist/docs/reference/{geometry → text}/VectorTextArcBaseline.md +2 -11
- package/dist/docs/reference/{geometry → text}/VectorTextLayoutOptions.md +3 -11
- package/dist/docs/reference/{geometry → text}/VectorTextOptions.md +2 -10
- package/dist/docs/reference/text/categories/font-preparation.md +10 -1
- package/dist/docs/reference/text/prepareVectorFont.md +4 -2
- package/dist/docs/reference/text.md +7 -1
- package/dist/engine/execution.js +5 -3
- package/dist/engine/finalization.js +5 -5
- package/dist/engine/index.js +9 -4
- package/dist/engine/native/adapter.js +1 -1
- package/dist/engine/native/construction-mesh.js +15 -5
- package/dist/engine/native/context.js +10 -7
- package/dist/engine/native/index.js +1 -1
- package/dist/engine/native/material-components.js +2 -2
- package/dist/engine/native/mesh-observation.js +1 -1
- package/dist/engine/native/regions.js +44 -24
- package/dist/engine/native/scoped-primitives.js +3 -3
- package/dist/engine/native/scoped-threads.js +1 -13
- package/dist/engine/native/threads.js +2 -2
- package/dist/engine/native/transforms.js +2 -2
- package/dist/engine/operations/construction.js +77 -27
- package/dist/engine/operations/context.js +13 -6
- package/dist/engine/operations/cutters.js +112 -0
- package/dist/engine/operations/environment.js +2 -2
- package/dist/engine/operations/extrusion-finishing.js +42 -16
- package/dist/engine/operations/hole-cutter.js +125 -114
- package/dist/engine/operations/join-collar-profile.js +19 -19
- package/dist/engine/operations/join.js +86 -73
- package/dist/engine/operations/knuckle-hinge.js +25 -20
- package/dist/engine/operations/loft.js +9 -16
- package/dist/engine/operations/mechanical.js +4 -15
- package/dist/engine/operations/primitives/anchors.js +23 -19
- package/dist/engine/operations/primitives/construction.js +38 -12
- package/dist/engine/operations/primitives/correspondence.js +2 -2
- package/dist/engine/operations/primitives/profile-mesh.js +41 -80
- package/dist/engine/operations/primitives/profiles.js +5 -5
- package/dist/engine/operations/sections.js +8 -8
- package/dist/engine/operations/transforms.js +19 -39
- package/dist/engine/placement.js +3 -3
- package/dist/engine/recipe-realization.js +86 -30
- package/dist/engine/session/declarations.js +98 -0
- package/dist/engine/session/dependencies.js +81 -28
- package/dist/engine/session/graph.js +39 -137
- package/dist/engine/session/parameters.js +78 -0
- package/dist/engine/session/session.js +2 -2
- package/dist/engine/session/snapshot-cache.js +2 -2
- package/dist/engine/shape-anchors.js +13 -6
- package/dist/export/3mf.js +9 -2
- package/dist/export/capture.js +10 -6
- package/dist/export/glb.js +7 -2
- package/dist/export/stl.js +21 -6
- package/dist/geometry/{bounds.js → bounds/operations.js} +3 -1
- package/dist/geometry/{bounds-value.js → bounds/value.js} +20 -16
- package/dist/geometry/curves/evaluation.js +5 -6
- package/dist/geometry/curves/sampling.js +30 -6
- package/dist/geometry/{extrusion.js → extrusion/controls.js} +58 -35
- package/dist/geometry/extrusion/mesh.js +92 -0
- package/dist/geometry/extrusion/stations.js +35 -0
- package/dist/geometry/extrusion/twisted-chamfer.js +265 -0
- package/dist/geometry/immutable-buffer.js +7 -1
- package/dist/geometry/index.js +24 -32
- package/dist/geometry/{model-limits.js → limits.js} +1 -1
- package/dist/geometry/loft/{loft-correspondence.js → correspondence.js} +31 -20
- package/dist/geometry/loft/{loft-geometry.js → geometry.js} +15 -17
- package/dist/geometry/loft/mesh.js +53 -0
- package/dist/geometry/loft/{loft-options.js → options.js} +13 -11
- package/dist/geometry/loft/{loft-simple-mesh.js → simple-mesh.js} +26 -17
- package/dist/geometry/math/interpolation.js +9 -0
- package/dist/geometry/math/vector-value.js +12 -3
- package/dist/geometry/math/vector2.js +18 -5
- package/dist/geometry/math/vector3.js +28 -5
- package/dist/geometry/math-api.js +4 -0
- package/dist/geometry/mechanical/gear-motion.js +7 -5
- package/dist/geometry/mechanical/gears.js +21 -4
- package/dist/geometry/mechanical/knuckle-hinge.js +7 -5
- package/dist/geometry/mechanical/threads/fit.js +8 -2
- package/dist/geometry/mechanical/threads/helices.js +4 -2
- package/dist/geometry/mechanical/threads/mesh-plan.js +4 -2
- package/dist/geometry/mechanical/threads/mesh.js +12 -9
- package/dist/geometry/mechanical/threads/profiles.js +18 -4
- package/dist/geometry/mechanical/threads/solids.js +11 -2
- package/dist/geometry/mechanical-api.js +10 -0
- package/dist/geometry/mesh/{mesh-centroid.js → centroid.js} +2 -1
- package/dist/geometry/{heightfield.js → mesh/heightfield.js} +9 -5
- package/dist/geometry/{join-geometry.js → mesh/join-layers.js} +53 -59
- package/dist/geometry/mesh/{mesh.js → operations.js} +11 -18
- package/dist/geometry/mesh/{mesh-planar.js → planar.js} +8 -18
- package/dist/geometry/mesh/{mesh-quality.js → quality.js} +10 -42
- package/dist/geometry/mesh/{mesh-render.js → render-buffers.js} +22 -7
- package/dist/geometry/mesh/{mesh-signature.js → signature.js} +1 -1
- package/dist/geometry/mesh/{mesh-solid-intersections.js → solid-intersections.js} +2 -0
- package/dist/geometry/mesh/{mesh-solid.js → solid.js} +4 -4
- package/dist/geometry/mesh/triangle-quality.js +42 -0
- package/dist/geometry/mesh/winding.js +11 -0
- package/dist/geometry/{numeric.js → mesh/write-vertex.js} +1 -1
- package/dist/geometry/mesh-api.js +12 -11
- package/dist/geometry/paths/distribution.js +43 -0
- package/dist/geometry/paths/editing.js +76 -0
- package/dist/geometry/paths/frames.js +16 -11
- package/dist/geometry/paths/helix.js +1 -1
- package/dist/geometry/paths/resampling.js +46 -61
- package/dist/geometry/paths/{planar.js → rounding.js} +8 -67
- package/dist/geometry/paths/spline.js +116 -0
- package/dist/geometry/paths/traversal.js +107 -0
- package/dist/geometry/paths/{path-value.js → value.js} +97 -18
- package/dist/geometry/patterns/placements.js +20 -29
- package/dist/geometry/{patterns.js → patterns/transforms.js} +11 -7
- package/dist/geometry/primitives/cutters.js +70 -0
- package/dist/geometry/{cylinder.js → primitives/cylinder.js} +4 -4
- package/dist/geometry/{edge-finishing.js → primitives/edges.js} +5 -5
- package/dist/geometry/{primitive-resolvers.js → primitives/resolvers.js} +9 -9
- package/dist/geometry/primitives/sampling.js +41 -0
- package/dist/geometry/profiles/contour.js +19 -7
- package/dist/geometry/profiles/{match-profiles.js → matching.js} +9 -6
- package/dist/geometry/profiles/primitives/circle.js +1 -1
- package/dist/geometry/profiles/primitives/ellipse.js +2 -2
- package/dist/geometry/profiles/primitives/rectangle.js +8 -8
- package/dist/geometry/profiles/primitives/star.js +1 -1
- package/dist/geometry/profiles/side-profile.js +8 -5
- package/dist/geometry/profiles/validation.js +1 -1
- package/dist/geometry/{polygon-clipping.js → regions/clipping.js} +1 -1
- package/dist/geometry/{convex-offset.js → regions/convex-offset.js} +1 -1
- package/dist/geometry/{region-offset.js → regions/offset.js} +7 -5
- package/dist/geometry/{regions.js → regions/operations.js} +59 -22
- package/dist/geometry/{stroke-path.js → regions/stroke.js} +46 -20
- package/dist/geometry/{loft/loft-triangulation.js → regions/triangulation.js} +35 -2
- package/dist/geometry/revolve/{revolve-mesh.js → mesh.js} +9 -10
- package/dist/geometry/{circular-sampling.js → sampling/circular.js} +3 -3
- package/dist/geometry/{sampling-limits.js → sampling/limits.js} +6 -2
- package/dist/geometry/{resolution.js → sampling/resolution.js} +15 -14
- package/dist/geometry/svg/fill.js +4 -3
- package/dist/geometry/svg/import.js +47 -64
- package/dist/geometry/svg/path.js +3 -3
- package/dist/geometry/sweep/closed.js +55 -0
- package/dist/geometry/sweep/mesh.js +30 -0
- package/dist/geometry/{sweeps/sweep-open.js → sweep/open.js} +9 -24
- package/dist/geometry/{sweeps → sweep}/orientation.js +14 -11
- package/dist/geometry/sweep/seam.js +30 -0
- package/dist/geometry/{sweeps → sweep}/stations.js +75 -10
- package/dist/geometry/sweep/transforms.js +30 -0
- package/dist/geometry/{sweeps → sweep}/validation.js +4 -4
- package/dist/geometry/{text-contours.js → text/contours.js} +3 -3
- package/dist/geometry/{text-fitting.js → text/fitting.js} +4 -3
- package/dist/geometry/text/layout.js +1 -0
- package/dist/geometry/{transform3.js → transforms/affine3.js} +31 -46
- package/dist/geometry/{anchors.js → transforms/anchors.js} +43 -24
- package/dist/geometry/{transform-geometry.js → transforms/apply.js} +8 -5
- package/dist/geometry/{transform2.js → transforms/dimensions.js} +23 -19
- package/dist/geometry/transforms/frame.js +64 -0
- package/dist/geometry/{transform-matrix.js → transforms/matrix-input.js} +8 -1
- package/dist/geometry/{transform-value.js → transforms/value.js} +29 -11
- package/dist/index.js +3 -9
- package/dist/model/cutters.js +1 -0
- package/dist/model/execution-binding.js +3 -3
- package/dist/model/generation.js +2 -0
- package/dist/model/immutable-generation-data.js +2 -0
- package/dist/model/operations.js +130 -94
- package/dist/model/recipe-declaration.js +5 -7
- package/dist/text/index.js +3 -0
- package/dist/text/vector-text-layout.js +1 -0
- package/package.json +15 -17
- package/dist/api/export-3mf.d.ts +0 -2
- package/dist/api/export-glb.d.ts +0 -2
- package/dist/api/export-stl.d.ts +0 -2
- package/dist/docs/reference/geometry/BoxEdge.md +0 -17
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +0 -24
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +0 -25
- package/dist/docs/reference/geometry/CylinderOptions.md +0 -63
- package/dist/docs/reference/geometry/EndTreatments.md +0 -44
- package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +0 -144
- package/dist/docs/reference/geometry/ExtrudeOptions.md +0 -156
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +0 -25
- package/dist/docs/reference/geometry/LoftMeshStation.md +0 -41
- package/dist/docs/reference/geometry/PrimitiveAttachment.md +0 -39
- package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +0 -114
- package/dist/docs/reference/geometry/SphereOptions.md +0 -25
- package/dist/docs/reference/geometry/SweepOptions.md +0 -127
- package/dist/docs/reference/geometry/SweepOrientation.md +0 -127
- package/dist/docs/reference/geometry/TubeOptions.md +0 -72
- package/dist/docs/reference/geometry/add2.md +0 -43
- package/dist/docs/reference/geometry/add3.md +0 -49
- package/dist/docs/reference/geometry/applyTransformDirection3.md +0 -52
- package/dist/docs/reference/geometry/applyTransformPoint3.md +0 -50
- package/dist/docs/reference/geometry/categories/meshes.md +0 -68
- package/dist/docs/reference/geometry/composeTransform3.md +0 -51
- package/dist/docs/reference/geometry/cross2.md +0 -43
- package/dist/docs/reference/geometry/cross3.md +0 -49
- package/dist/docs/reference/geometry/distance2.md +0 -43
- package/dist/docs/reference/geometry/distance3.md +0 -43
- package/dist/docs/reference/geometry/dot2.md +0 -43
- package/dist/docs/reference/geometry/dot3.md +0 -49
- package/dist/docs/reference/geometry/eulerTransform3.md +0 -49
- package/dist/docs/reference/geometry/frameTransform3.md +0 -55
- package/dist/docs/reference/geometry/inverseTransform3.md +0 -41
- package/dist/docs/reference/geometry/length2.md +0 -37
- package/dist/docs/reference/geometry/length3.md +0 -37
- package/dist/docs/reference/geometry/lerp2.md +0 -49
- package/dist/docs/reference/geometry/lerp3.md +0 -49
- package/dist/docs/reference/geometry/normalize2.md +0 -46
- package/dist/docs/reference/geometry/normalize3.md +0 -46
- package/dist/docs/reference/geometry/projectOntoPlane3.md +0 -43
- package/dist/docs/reference/geometry/rotate2.md +0 -43
- package/dist/docs/reference/geometry/rotationTransform3.md +0 -60
- package/dist/docs/reference/geometry/scale2.md +0 -43
- package/dist/docs/reference/geometry/scale3.md +0 -49
- package/dist/docs/reference/geometry/scaleTransform3.md +0 -45
- package/dist/docs/reference/geometry/subtract2.md +0 -43
- package/dist/docs/reference/geometry/subtract3.md +0 -49
- package/dist/docs/reference/geometry/transformDeterminant3.md +0 -43
- package/dist/docs/reference/geometry/translationTransform3.md +0 -42
- package/dist/docs/reference/geometry/validateRigidTransform3.md +0 -41
- package/dist/docs/reference/geometry/validateTransform3.md +0 -54
- package/dist/docs/reference/model/Profile.md +0 -30
- package/dist/docs/reference/model/categories/explicit-profiles.md +0 -21
- package/dist/docs/reference/model/matchProfiles.md +0 -48
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +0 -93
- package/dist/docs/reference/model/preflightThreadedNut.md +0 -109
- package/dist/docs/reference/model/preflightThreadedRod.md +0 -93
- package/dist/engine/operations/patterns.js +0 -47
- package/dist/geometry/loft/loft.js +0 -105
- package/dist/geometry/mechanical/index.js +0 -14
- package/dist/geometry/primitive-resolution.js +0 -20
- package/dist/geometry/svg/index.js +0 -1
- package/dist/geometry/sweeps/options.js +0 -29
- package/dist/geometry/sweeps/sweep-closed.js +0 -96
- package/dist/geometry/sweeps/sweep-mesh.js +0 -32
- /package/dist/geometry/mechanical/{standards.js → fastener-standards.js} +0 -0
- /package/dist/geometry/mesh/{mesh-edge-table.js → edge-table.js} +0 -0
- /package/dist/geometry/mesh/{mesh-types.js → types.js} +0 -0
- /package/dist/geometry/mesh/{mesh-view-cache.js → view-cache.js} +0 -0
- /package/dist/geometry/{primitive-options.js → primitives/options.js} +0 -0
- /package/dist/geometry/{text-layout.js → sweep/options.js} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
2
|
import { immutableMeshView } from "../immutable-buffer.js";
|
|
3
3
|
import { resolveGeometryTolerance, } from "../tolerance.js";
|
|
4
|
+
import { triangleQuality } from "./triangle-quality.js";
|
|
4
5
|
const DEFAULT_MAXIMUM_TRIANGLE_COUNT = 200_000;
|
|
5
6
|
const FLOAT32_EPSILON = 2 ** -23;
|
|
6
7
|
const MINIMUM_PLANAR_ANGULAR_TOLERANCE = 1e-5;
|
|
@@ -10,18 +11,9 @@ const pointAt = (positions, vertex) => [
|
|
|
10
11
|
positions[vertex * 3 + 1],
|
|
11
12
|
positions[vertex * 3 + 2],
|
|
12
13
|
];
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
left[1] - right[1],
|
|
16
|
-
left[2] - right[2],
|
|
17
|
-
];
|
|
14
|
+
// Keep these kernels local to isolate V8's array-type feedback from other modeling operations.
|
|
15
|
+
// Shared helpers see more array representations, which can slow hot loops even when inlined.
|
|
18
16
|
const dot = (left, right) => left[0] * right[0] + left[1] * right[1] + left[2] * right[2];
|
|
19
|
-
const cross = (left, right) => [
|
|
20
|
-
left[1] * right[2] - left[2] * right[1],
|
|
21
|
-
left[2] * right[0] - left[0] * right[2],
|
|
22
|
-
left[0] * right[1] - left[1] * right[0],
|
|
23
|
-
];
|
|
24
|
-
const length = (vector) => Math.hypot(vector[0], vector[1], vector[2]);
|
|
25
17
|
const maximumUint32 = (values) => {
|
|
26
18
|
let maximum = 0;
|
|
27
19
|
for (const value of values)
|
|
@@ -80,46 +72,22 @@ const meshBoundsAndExtent = (positions) => {
|
|
|
80
72
|
extent: Math.max(maximum[0] - minimum[0], maximum[1] - minimum[1], maximum[2] - minimum[2]),
|
|
81
73
|
};
|
|
82
74
|
};
|
|
83
|
-
const triangleAngles = (first, second, third) => {
|
|
84
|
-
const firstSecond = subtract(second, first);
|
|
85
|
-
const firstThird = subtract(third, first);
|
|
86
|
-
const secondThird = subtract(third, second);
|
|
87
|
-
const lengthFirstSecond = length(firstSecond);
|
|
88
|
-
const lengthFirstThird = length(firstThird);
|
|
89
|
-
const lengthSecondThird = length(secondThird);
|
|
90
|
-
if (lengthFirstSecond === 0 || lengthFirstThird === 0 || lengthSecondThird === 0) {
|
|
91
|
-
return [0, 0, 0];
|
|
92
|
-
}
|
|
93
|
-
const thirdFirst = subtract(first, third);
|
|
94
|
-
const secondFirst = [-firstSecond[0], -firstSecond[1], -firstSecond[2]];
|
|
95
|
-
const thirdSecond = [-secondThird[0], -secondThird[1], -secondThird[2]];
|
|
96
|
-
return [
|
|
97
|
-
Math.atan2(length(cross(firstSecond, firstThird)), dot(firstSecond, firstThird)),
|
|
98
|
-
Math.atan2(length(cross(secondThird, secondFirst)), dot(secondThird, secondFirst)),
|
|
99
|
-
Math.atan2(length(cross(thirdFirst, thirdSecond)), dot(thirdFirst, thirdSecond)),
|
|
100
|
-
];
|
|
101
|
-
};
|
|
102
75
|
const faceAnalysis = (positions, vertices, index) => {
|
|
103
76
|
const first = pointAt(positions, vertices[0]);
|
|
104
77
|
const second = pointAt(positions, vertices[1]);
|
|
105
78
|
const third = pointAt(positions, vertices[2]);
|
|
106
|
-
const
|
|
107
|
-
const
|
|
108
|
-
const secondThird = subtract(third, second);
|
|
109
|
-
const product = cross(firstSecond, firstThird);
|
|
110
|
-
const doubleArea = length(product);
|
|
79
|
+
const quality = triangleQuality(first, second, third, "hypot");
|
|
80
|
+
const { doubleArea } = quality;
|
|
111
81
|
const area = doubleArea / 2;
|
|
112
|
-
const longestEdge = Math.max(length(firstSecond), length(firstThird), length(secondThird));
|
|
113
82
|
const normal = doubleArea === 0
|
|
114
83
|
? undefined
|
|
115
|
-
: [
|
|
116
|
-
const angles = triangleAngles(first, second, third);
|
|
84
|
+
: [quality.crossX / doubleArea, quality.crossY / doubleArea, quality.crossZ / doubleArea];
|
|
117
85
|
return {
|
|
118
86
|
area,
|
|
119
|
-
aspectRatio:
|
|
87
|
+
aspectRatio: quality.aspectRatio,
|
|
120
88
|
doubleArea,
|
|
121
89
|
index,
|
|
122
|
-
minimumAngleRadians: Math.min(...angles),
|
|
90
|
+
minimumAngleRadians: Math.min(...quality.angles),
|
|
123
91
|
normal,
|
|
124
92
|
planeOffset: normal === undefined ? undefined : dot(normal, first),
|
|
125
93
|
vertices,
|
|
@@ -234,7 +202,7 @@ const buildPatchAnalysis = (faces, edges, faceIndices, id) => {
|
|
|
234
202
|
},
|
|
235
203
|
};
|
|
236
204
|
};
|
|
237
|
-
/** @internal */
|
|
205
|
+
/** @internal Builds fresh bounded geometry and topology facts without mutating source buffers. */
|
|
238
206
|
export function buildTriangleMeshQualityAnalysis(mesh, options = {}) {
|
|
239
207
|
const source = immutableMeshView(mesh);
|
|
240
208
|
const maxTriangles = positiveInteger(options.maxTriangles ?? DEFAULT_MAXIMUM_TRIANGLE_COUNT, "Maximum analyzed triangle count");
|
|
@@ -389,7 +357,7 @@ export function buildTriangleMeshQualityAnalysis(mesh, options = {}) {
|
|
|
389
357
|
* Degenerate triangles are reported rather than rejected, while malformed buffers, non-finite
|
|
390
358
|
* positions, missing vertex references, and the configured complexity limit throw.
|
|
391
359
|
*
|
|
392
|
-
* @param mesh - Indexed triangle mesh in
|
|
360
|
+
* @param mesh - Indexed triangle mesh in consistent units.
|
|
393
361
|
* @param options - Scale-aware tolerance and analysis budget.
|
|
394
362
|
* @returns A deterministic report without mutating or copying the mesh.
|
|
395
363
|
*/
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
2
|
import { immutableMeshView } from "../immutable-buffer.js";
|
|
3
|
-
import { validateTriangleMesh } from "./
|
|
3
|
+
import { validateTriangleMesh } from "./operations.js";
|
|
4
4
|
const MAX_NORMAL_COMPARISONS = 50_000_000;
|
|
5
|
+
// Float32 integer coordinates share low zero bits. Mix high bits before masking a table slot.
|
|
6
|
+
function mixHash(value) {
|
|
7
|
+
value = Math.imul(value ^ (value >>> 16), 0x7feb352d);
|
|
8
|
+
value = Math.imul(value ^ (value >>> 15), 0x846ca68b);
|
|
9
|
+
return value ^ (value >>> 16);
|
|
10
|
+
}
|
|
5
11
|
function tableCapacity(count) {
|
|
6
12
|
let capacity = 16;
|
|
7
13
|
while (capacity < count * 2)
|
|
@@ -16,6 +22,8 @@ function tableCapacity(count) {
|
|
|
16
22
|
* Returns owned buffers; every triangle retains its coordinates, order and winding.
|
|
17
23
|
* Pathological vertex fans exceeding 50 million normal comparisons reject with a complexity error.
|
|
18
24
|
*
|
|
25
|
+
* @param input - Indexed mesh to copy; source buffers remain unchanged.
|
|
26
|
+
*
|
|
19
27
|
* @example
|
|
20
28
|
* ```ts
|
|
21
29
|
* import * as mesh from "@metamesh/modeling/geometry/mesh";
|
|
@@ -30,8 +38,15 @@ export function renderMesh(input, options = {}) {
|
|
|
30
38
|
throw new GeometryError("INVALID_ARGUMENT", "Crease angle must be from 0 through 180 degrees.", {
|
|
31
39
|
operation: "renderMesh",
|
|
32
40
|
});
|
|
33
|
-
|
|
34
|
-
|
|
41
|
+
const mesh = immutableMeshView(input);
|
|
42
|
+
validateTriangleMesh(mesh);
|
|
43
|
+
return renderValidatedMesh(mesh, angle);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @internal Renders exact privately captured buffer ranges already validated with the default
|
|
47
|
+
* mesh tolerance. The buffers must remain unchanged, and angle must be validated in [0, 180].
|
|
48
|
+
*/
|
|
49
|
+
export function renderValidatedMesh({ positions, indices }, angle) {
|
|
35
50
|
const vertexCount = positions.length / 3;
|
|
36
51
|
const cornerCount = indices.length;
|
|
37
52
|
const faceCount = cornerCount / 3;
|
|
@@ -67,7 +82,7 @@ export function renderMesh(input, options = {}) {
|
|
|
67
82
|
Math.imul(positions[offset + 2] === 0 ? 0 : positionBits[offset + 2], 83_492_791);
|
|
68
83
|
for (let vertex = 0; vertex < vertexCount; vertex += 1) {
|
|
69
84
|
const offset = vertex * 3;
|
|
70
|
-
let slot = positionHash(offset) & positionMask;
|
|
85
|
+
let slot = mixHash(positionHash(offset)) & positionMask;
|
|
71
86
|
while (positionTable[slot] !== 0) {
|
|
72
87
|
const id = positionTable[slot] - 1;
|
|
73
88
|
const other = representatives[id] * 3;
|
|
@@ -153,7 +168,7 @@ export function renderMesh(input, options = {}) {
|
|
|
153
168
|
Math.imul(candidateNormal[0] === 0 ? 0 : normalBits[0], 49_979_687) ^
|
|
154
169
|
Math.imul(candidateNormal[1] === 0 ? 0 : normalBits[1], 67_867_967) ^
|
|
155
170
|
Math.imul(candidateNormal[2] === 0 ? 0 : normalBits[2], 86_028_121);
|
|
156
|
-
let slot = hash & renderMask;
|
|
171
|
+
let slot = mixHash(hash) & renderMask;
|
|
157
172
|
while (renderTable[slot] !== 0) {
|
|
158
173
|
const offset = (renderTable[slot] - 1) * 3;
|
|
159
174
|
if (renderPositions[offset] === positions[positionOffset] &&
|
|
@@ -179,12 +194,12 @@ export function renderMesh(input, options = {}) {
|
|
|
179
194
|
renderTable = new Uint32Array(tableCapacity(capacity));
|
|
180
195
|
renderMask = renderTable.length - 1;
|
|
181
196
|
for (let index = 0; index < renderedCount; index += 1) {
|
|
182
|
-
let target = renderHash(index * 3) & renderMask;
|
|
197
|
+
let target = mixHash(renderHash(index * 3)) & renderMask;
|
|
183
198
|
while (renderTable[target] !== 0)
|
|
184
199
|
target = (target + 1) & renderMask;
|
|
185
200
|
renderTable[target] = index + 1;
|
|
186
201
|
}
|
|
187
|
-
slot = hash & renderMask;
|
|
202
|
+
slot = mixHash(hash) & renderMask;
|
|
188
203
|
while (renderTable[slot] !== 0)
|
|
189
204
|
slot = (slot + 1) & renderMask;
|
|
190
205
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
2
|
import { immutableMeshView } from "../immutable-buffer.js";
|
|
3
|
-
import { analyzeTriangleMesh, validateTriangleMesh } from "./
|
|
3
|
+
import { analyzeTriangleMesh, validateTriangleMesh } from "./operations.js";
|
|
4
4
|
const DEFAULT_POSITION_TOLERANCE = 1e-5;
|
|
5
5
|
const DEFAULT_VOLUME_TOLERANCE = 1e-4;
|
|
6
6
|
const DEFAULT_MAXIMUM_TRIANGLE_COUNT = 200_000;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
2
|
import { immutableMeshView } from "../immutable-buffer.js";
|
|
3
3
|
import { resolveGeometryTolerance } from "../tolerance.js";
|
|
4
|
-
import { IndexedMeshEdgeTable } from "./
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { IndexedMeshEdgeTable } from "./edge-table.js";
|
|
5
|
+
import { analyzeTriangleMesh, } from "./operations.js";
|
|
6
|
+
import { prepareSolidTriangle, trianglesIntersectBeyondSharedBoundary, triangleSolidAngle, } from "./solid-intersections.js";
|
|
7
7
|
const MAXIMUM_TRIANGLES = 200_000;
|
|
8
8
|
const MAXIMUM_TESTS = 2_000_000;
|
|
9
9
|
/**
|
|
@@ -18,7 +18,7 @@ const MAXIMUM_TESTS = 2_000_000;
|
|
|
18
18
|
* Input buffers are freshly inspected and never modified; units are millimetres.
|
|
19
19
|
*
|
|
20
20
|
* @param mesh - Closed triangle mesh to inspect.
|
|
21
|
-
* @param options -
|
|
21
|
+
* @param options - Lower work limit and tolerance for numeric comparisons.
|
|
22
22
|
* @returns The original mesh after every requested check succeeds.
|
|
23
23
|
*/
|
|
24
24
|
export function validateSolidMesh(mesh, options = {}) {
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const magnitude = (x, y, z, calculation) => calculation === "hypot" ? Math.hypot(x, y, z) : Math.sqrt(x * x + y * y + z * z);
|
|
2
|
+
const cornerAngle = (ux, uy, uz, vx, vy, vz, calculation) => Math.atan2(magnitude(uy * vz - uz * vy, uz * vx - ux * vz, ux * vy - uy * vx, calculation), ux * vx + uy * vy + uz * vz);
|
|
3
|
+
/** @internal Shape measurements using the caller's selected length arithmetic and tolerances. */
|
|
4
|
+
export function triangleQuality(first, second, third, calculation) {
|
|
5
|
+
const abx = second[0] - first[0], aby = second[1] - first[1], abz = second[2] - first[2];
|
|
6
|
+
const acx = third[0] - first[0], acy = third[1] - first[1], acz = third[2] - first[2];
|
|
7
|
+
const bcx = third[0] - second[0], bcy = third[1] - second[1], bcz = third[2] - second[2];
|
|
8
|
+
const cax = first[0] - third[0], cay = first[1] - third[1], caz = first[2] - third[2];
|
|
9
|
+
const crossX = aby * acz - abz * acy, crossY = abz * acx - abx * acz, crossZ = abx * acy - aby * acx;
|
|
10
|
+
const doubleArea = magnitude(crossX, crossY, crossZ, calculation);
|
|
11
|
+
let longestEdgeSquared;
|
|
12
|
+
let collapsed = false;
|
|
13
|
+
if (calculation === "hypot") {
|
|
14
|
+
const ab = Math.hypot(abx, aby, abz), ac = Math.hypot(acx, acy, acz), bc = Math.hypot(bcx, bcy, bcz);
|
|
15
|
+
longestEdgeSquared = Math.max(ab, ac, bc) ** 2;
|
|
16
|
+
collapsed = ab === 0 || ac === 0 || bc === 0;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
longestEdgeSquared = Math.max(abx * abx + aby * aby + abz * abz, bcx * bcx + bcy * bcy + bcz * bcz, cax * cax + cay * cay + caz * caz);
|
|
20
|
+
}
|
|
21
|
+
// Quality reporting negates these edges; flip comparison subtracts them directly.
|
|
22
|
+
// Preserve both evaluation paths, including signed zero, for deterministic quality ordering.
|
|
23
|
+
const bax = calculation === "hypot" ? -abx : first[0] - second[0], bay = calculation === "hypot" ? -aby : first[1] - second[1], baz = calculation === "hypot" ? -abz : first[2] - second[2];
|
|
24
|
+
const cbx = calculation === "hypot" ? -bcx : second[0] - third[0], cby = calculation === "hypot" ? -bcy : second[1] - third[1], cbz = calculation === "hypot" ? -bcz : second[2] - third[2];
|
|
25
|
+
const angles = collapsed
|
|
26
|
+
? [0, 0, 0]
|
|
27
|
+
: [
|
|
28
|
+
Math.atan2(doubleArea, abx * acx + aby * acy + abz * acz),
|
|
29
|
+
cornerAngle(bcx, bcy, bcz, bax, bay, baz, calculation),
|
|
30
|
+
cornerAngle(cax, cay, caz, cbx, cby, cbz, calculation),
|
|
31
|
+
];
|
|
32
|
+
return {
|
|
33
|
+
angles,
|
|
34
|
+
aspectRatio: doubleArea === 0
|
|
35
|
+
? Number.POSITIVE_INFINITY
|
|
36
|
+
: (Math.sqrt(3) * longestEdgeSquared) / (2 * doubleArea),
|
|
37
|
+
crossX,
|
|
38
|
+
crossY,
|
|
39
|
+
crossZ,
|
|
40
|
+
doubleArea,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal Reverses validated, exclusively owned triangle indices in place.
|
|
3
|
+
* Global reversal preserves areas and closed topology; caller-owned public meshes need copies.
|
|
4
|
+
*/
|
|
5
|
+
export function reverseOwnedTriangleWinding(indices) {
|
|
6
|
+
for (let offset = 0; offset < indices.length; offset += 3) {
|
|
7
|
+
const second = indices[offset + 1];
|
|
8
|
+
indices[offset + 1] = indices[offset + 2];
|
|
9
|
+
indices[offset + 2] = second;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
2
|
/** @internal Writes one finite, representable manufacturing vertex before checking mesh topology. */
|
|
3
3
|
export function writeMeshVertex(positions, offset, point, operation) {
|
|
4
4
|
for (let axis = 0; axis < 3; axis += 1) {
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/** Pure triangle mesh construction, processing, and inspection without a host engine. */
|
|
2
|
-
export { extrudeMesh as extrude
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
2
|
+
export { extrudeMesh as extrude } from "./extrusion/mesh.js";
|
|
3
|
+
export { loftMesh as loft } from "./loft/mesh.js";
|
|
4
|
+
export { revolveMesh as revolve } from "./revolve/mesh.js";
|
|
5
|
+
export { sweepMesh as sweep } from "./sweep/mesh.js";
|
|
6
|
+
export { heightfieldMesh as heightfield, preflightHeightfield } from "./mesh/heightfield.js";
|
|
6
7
|
export { threadRidgeMesh as threadRidge, threadSolidMesh as threadSolid, } from "./mechanical/threads/mesh.js";
|
|
7
8
|
export { preflightThreadSolidMesh as preflightThreadSolid } from "./mechanical/threads/mesh-plan.js";
|
|
8
|
-
export { transformTriangleMesh as transform, joinTriangleMeshes as join, reverseTriangleMesh as reverse, meshBounds as bounds, analyzeTriangleMesh as analyze, validateTriangleMesh as validate, } from "./mesh/
|
|
9
|
-
export { computeTriangleMeshCentroid as centroid } from "./mesh/
|
|
10
|
-
export { analyzeTriangleMeshQuality as analyzeQuality } from "./mesh/
|
|
11
|
-
export { computeTriangleMeshSignature as signature } from "./mesh/
|
|
12
|
-
export { validateSolidMesh as validateSolid } from "./mesh/
|
|
13
|
-
export { renderMesh as render } from "./mesh/
|
|
14
|
-
export { optimizePlanarPatches } from "./mesh/
|
|
9
|
+
export { transformTriangleMesh as transform, joinTriangleMeshes as join, reverseTriangleMesh as reverse, meshBounds as bounds, analyzeTriangleMesh as analyze, validateTriangleMesh as validate, } from "./mesh/operations.js";
|
|
10
|
+
export { computeTriangleMeshCentroid as centroid } from "./mesh/centroid.js";
|
|
11
|
+
export { analyzeTriangleMeshQuality as analyzeQuality } from "./mesh/quality.js";
|
|
12
|
+
export { computeTriangleMeshSignature as signature } from "./mesh/signature.js";
|
|
13
|
+
export { validateSolidMesh as validateSolid } from "./mesh/solid.js";
|
|
14
|
+
export { renderMesh as render } from "./mesh/render-buffers.js";
|
|
15
|
+
export { optimizePlanarPatches } from "./mesh/planar.js";
|
|
15
16
|
export { immutableMesh as immutable } from "./immutable-buffer.js";
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling/limits.js";
|
|
3
|
+
import { createPathTraversal, locatePathDistance, writePathPoint, writePathTangent, } from "./traversal.js";
|
|
4
|
+
import { path3InputData } from "./value.js";
|
|
5
|
+
/**
|
|
6
|
+
* Places an exact item count at equal arc-length intervals along a sampled XYZ path.
|
|
7
|
+
*
|
|
8
|
+
* Open paths retain both endpoints when count exceeds one; closed paths omit the seam endpoint.
|
|
9
|
+
* Zero-length edges are skipped. Invalid counts, repeated closed seams, nonfinite lengths,
|
|
10
|
+
* zero-length paths, and exhausted budgets throw GeometryError.
|
|
11
|
+
*
|
|
12
|
+
* @param input - XYZ path or points in millimetres.
|
|
13
|
+
* @param count - Positive placement count; one selects the path start.
|
|
14
|
+
* @param closed - Raw-point closure, false by default; must match a path value.
|
|
15
|
+
* @param limits - Limits on input points and output placements.
|
|
16
|
+
*/
|
|
17
|
+
export function distributeAlongPath(input, count, closed, limits = {}) {
|
|
18
|
+
if (!Number.isSafeInteger(count) || count < 1)
|
|
19
|
+
throw new GeometryError("INVALID_ARGUMENT", "Path distribution count must be a positive integer.", { operation: "distributeAlongPath" });
|
|
20
|
+
assertSamplingCount(count, "distributeAlongPath", resolveGeometrySamplingLimits(limits).maxPathPoints);
|
|
21
|
+
const data = path3InputData(input, closed, limits);
|
|
22
|
+
const path = data.points;
|
|
23
|
+
if (path.length < (data.closed ? 3 : 2))
|
|
24
|
+
throw new GeometryError("INVALID_ARGUMENT", `${data.closed ? "Closed" : "Open"} distribution paths need more points.`, { operation: "distributeAlongPath" });
|
|
25
|
+
if (data.closed && path[0].every((coordinate, axis) => coordinate === path.at(-1)[axis]))
|
|
26
|
+
throw new GeometryError("INVALID_ARGUMENT", "Closed distribution paths omit their repeated seam point.", { operation: "distributeAlongPath" });
|
|
27
|
+
const traversal = createPathTraversal(path, data.closed);
|
|
28
|
+
if (traversal.length === 0)
|
|
29
|
+
throw new GeometryError("DEGENERATE_GEOMETRY", "Cannot distribute along a zero-length path.", {
|
|
30
|
+
operation: "distributeAlongPath",
|
|
31
|
+
});
|
|
32
|
+
const denominator = data.closed ? count : Math.max(1, count - 1);
|
|
33
|
+
let cursor = 0;
|
|
34
|
+
return Array.from({ length: count }, (_, index) => {
|
|
35
|
+
const location = locatePathDistance(traversal, traversal.length * (index / denominator), cursor);
|
|
36
|
+
cursor = location.edgeIndex;
|
|
37
|
+
const position = [0, 0, 0];
|
|
38
|
+
const tangent = [0, 0, 0];
|
|
39
|
+
writePathPoint(traversal, location, position);
|
|
40
|
+
writePathTangent(traversal, location, tangent);
|
|
41
|
+
return { position, tangent };
|
|
42
|
+
});
|
|
43
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { assertSamplingCount } from "../sampling/limits.js";
|
|
3
|
+
import { locatePathDistance, pathEdgeLength, validatePathDistance, writePathPoint, } from "./traversal.js";
|
|
4
|
+
const invalid = (message) => {
|
|
5
|
+
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "path" });
|
|
6
|
+
};
|
|
7
|
+
function pointAt(traversal, distance) {
|
|
8
|
+
const point = [];
|
|
9
|
+
writePathPoint(traversal, locatePathDistance(traversal, distance), point);
|
|
10
|
+
point.length = traversal.points[0].length;
|
|
11
|
+
return point;
|
|
12
|
+
}
|
|
13
|
+
/** Internal directed extraction; only cut endpoints are interpolated, and original interior vertices survive. */
|
|
14
|
+
export function trimPathPoints(traversal, start, end, maximum) {
|
|
15
|
+
validatePathDistance(start, traversal.length);
|
|
16
|
+
validatePathDistance(end, traversal.length);
|
|
17
|
+
if (start >= end)
|
|
18
|
+
invalid("Trim distances must be strictly increasing.");
|
|
19
|
+
const first = start === 0 ? 1 : locatePathDistance(traversal, start).edgeIndex + 1;
|
|
20
|
+
let after = first;
|
|
21
|
+
if (end === traversal.length) {
|
|
22
|
+
// Preserve authored terminal corners even when a small edge was rounded out of the total.
|
|
23
|
+
after = traversal.points.length - (traversal.closed ? 0 : 1);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
while (after < traversal.points.length && traversal.cumulative[after] < end)
|
|
27
|
+
after++;
|
|
28
|
+
}
|
|
29
|
+
assertSamplingCount(2 + after - first, "path.trim", maximum);
|
|
30
|
+
const points = [pointAt(traversal, start)];
|
|
31
|
+
for (let vertex = first; vertex < after; vertex++)
|
|
32
|
+
points.push(traversal.points[vertex]);
|
|
33
|
+
points.push(pointAt(traversal, end));
|
|
34
|
+
return points;
|
|
35
|
+
}
|
|
36
|
+
/** Internal split of one directed traversal into two open paths, with one shared cut position. */
|
|
37
|
+
export function splitPathPoints(traversal, distance, maximum) {
|
|
38
|
+
validatePathDistance(distance, traversal.length);
|
|
39
|
+
if (distance === 0 || distance === traversal.length)
|
|
40
|
+
invalid("Split distance must lie strictly inside the path.");
|
|
41
|
+
return [
|
|
42
|
+
trimPathPoints(traversal, 0, distance, maximum),
|
|
43
|
+
trimPathPoints(traversal, distance, traversal.length, maximum),
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
/** Internal edge subdivision; exact original vertices and closure survive, including repeated adjacent vertices. */
|
|
47
|
+
export function subdividePathPoints(traversal, maxSegmentLength, maximum) {
|
|
48
|
+
if (!Number.isFinite(maxSegmentLength) || maxSegmentLength <= 0)
|
|
49
|
+
invalid("maxSegmentLength must be finite and positive.");
|
|
50
|
+
const { points, closed } = traversal;
|
|
51
|
+
const count = closed ? points.length : Math.max(0, points.length - 1);
|
|
52
|
+
const divisions = [];
|
|
53
|
+
let required = closed ? 0 : Math.min(1, points.length);
|
|
54
|
+
for (let edge = 0; edge < count; edge++) {
|
|
55
|
+
const intervals = Math.max(1, Math.ceil(pathEdgeLength(points[edge], points[(edge + 1) % points.length]) / maxSegmentLength));
|
|
56
|
+
required += intervals;
|
|
57
|
+
assertSamplingCount(required, "path.subdivide", maximum);
|
|
58
|
+
divisions.push(intervals);
|
|
59
|
+
}
|
|
60
|
+
const result = points.length === 0 ? [] : [points[0]];
|
|
61
|
+
const scratch = [];
|
|
62
|
+
for (let edge = 0; edge < count; edge++) {
|
|
63
|
+
const intervals = divisions[edge];
|
|
64
|
+
for (let step = 1; step <= intervals; step++) {
|
|
65
|
+
if (closed && edge === count - 1 && step === intervals)
|
|
66
|
+
break;
|
|
67
|
+
if (step === intervals)
|
|
68
|
+
result.push(points[edge + 1]);
|
|
69
|
+
else {
|
|
70
|
+
writePathPoint(traversal, { edgeIndex: edge, fraction: step / intervals }, scratch);
|
|
71
|
+
result.push(scratch.slice(0, points[0].length));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
2
|
import { vector3Data } from "../math/vector-value.js";
|
|
3
3
|
import { cross3, dot3, length3, normalize3, projectOntoPlane3, rotateAroundAxis3Radians, scale3, subtract3, } from "../math/vector3.js";
|
|
4
|
-
import { path3InputData } from "./
|
|
4
|
+
import { path3InputData } from "./value.js";
|
|
5
5
|
const guideData = (input, operation) => {
|
|
6
6
|
const coordinates = vector3Data(input);
|
|
7
7
|
if (!coordinates.every(Number.isFinite))
|
|
@@ -52,9 +52,13 @@ const transportNormal = (normal, previousTangent, tangent) => {
|
|
|
52
52
|
* Builds rotation-minimizing frames by parallel-transporting the previous normal.
|
|
53
53
|
*
|
|
54
54
|
* This avoids the sudden profile flips produced by picking a fresh up-vector per ring.
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
55
|
+
* Nonfinite guides and unusable path tangents throw GeometryError. A finite initial guide
|
|
56
|
+
* parallel to the tangent selects a canonical fallback.
|
|
57
|
+
*
|
|
58
|
+
* @param input - Open XYZ path or points in millimetres; at least two points.
|
|
59
|
+
* @param initialNormal - Preferred starting X direction; the first normalGuide result wins.
|
|
60
|
+
* @param normalGuide - Profile X guide at each point; its sign follows the transported normal.
|
|
61
|
+
* @param limits - Point limits, checked before creating frames or calling guides.
|
|
58
62
|
*/
|
|
59
63
|
export const computeParallelTransportFrames = (input, initialNormal, normalGuide, limits = {}) => {
|
|
60
64
|
const { points: path } = path3InputData(input, false, limits);
|
|
@@ -77,15 +81,15 @@ export const computeParallelTransportFrames = (input, initialNormal, normalGuide
|
|
|
77
81
|
for (let index = 1; index < tangents.length; index += 1) {
|
|
78
82
|
const previousTangent = tangents[index - 1];
|
|
79
83
|
const tangent = tangents[index];
|
|
84
|
+
const transported = transportNormal(normal, previousTangent, tangent);
|
|
80
85
|
const guide = normalGuide?.(path[index], index);
|
|
81
86
|
if (guide === undefined) {
|
|
82
|
-
normal =
|
|
87
|
+
normal = transported;
|
|
83
88
|
}
|
|
84
89
|
else {
|
|
85
90
|
const guided = normalize3(projectOntoPlane3(guideData(guide, "computeParallelTransportFrames"), tangent));
|
|
86
|
-
//
|
|
87
|
-
|
|
88
|
-
normal = dot3(guided, normal) < 0 ? scale3(guided, -1) : guided;
|
|
91
|
+
// Compare in the new tangent plane so a bend cannot reverse the profile's orientation.
|
|
92
|
+
normal = dot3(guided, transported) < 0 ? scale3(guided, -1) : guided;
|
|
89
93
|
}
|
|
90
94
|
// Reprojection removes accumulated floating-point drift.
|
|
91
95
|
normal = normalize3(projectOntoPlane3(normal, tangent));
|
|
@@ -109,10 +113,11 @@ const signedAngleAround = (from, to, axis) => Math.atan2(dot3(axis, cross3(from,
|
|
|
109
113
|
* Centered cyclic tangents are parallel-transported around the loop. Transporting the last
|
|
110
114
|
* normal back to the first tangent measures seam holonomy; distributing that residual rotation
|
|
111
115
|
* uniformly over all path intervals avoids a visible seam or accumulated frame flip.
|
|
112
|
-
* The maxPathPoints ceiling (default 100000) bounds path points and frames.
|
|
113
|
-
* Requires closed path values; raw tuples are interpreted as closed and must omit their seam point.
|
|
114
|
-
* Invalid paths throw GeometryError.
|
|
115
116
|
* Nonfinite initial normals reject; finite parallel preferences select a canonical fallback.
|
|
117
|
+
*
|
|
118
|
+
* @param input - Closed XYZ path or points in millimetres, with no repeated seam.
|
|
119
|
+
* @param initialNormal - Preferred profile X direction at the seam.
|
|
120
|
+
* @param limits - Limits on input points and output frames.
|
|
116
121
|
*/
|
|
117
122
|
export const computeClosedParallelTransportFrames = (input, initialNormal, limits = {}) => {
|
|
118
123
|
const { points: path } = path3InputData(input, true, limits);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
-
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling
|
|
2
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling/limits.js";
|
|
3
3
|
/**
|
|
4
4
|
* Creates `segments + 1` points including exact helix endpoints from finite positive dimensions.
|
|
5
5
|
*
|