@metamesh/modeling 0.18.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 +82 -0
- package/README.md +96 -64
- package/dist/api/engine.d.ts +216 -160
- package/dist/api/export.d.ts +204 -0
- package/dist/api/geometry.d.ts +410 -2106
- package/dist/api/index.d.ts +545 -1821
- package/dist/api/math.d.ts +315 -0
- package/dist/api/mechanical.d.ts +1041 -0
- package/dist/api/mesh.d.ts +395 -94
- package/dist/api/text.d.ts +24 -44
- package/dist/docs/guides/concepts.md +54 -523
- package/dist/docs/guides/exporting.md +88 -0
- package/dist/docs/guides/fonts.md +7 -5
- package/dist/docs/guides/fundamentals.md +12 -24
- package/dist/docs/guides/generation.md +76 -61
- package/dist/docs/guides/geometry-values.md +251 -0
- package/dist/docs/guides/hosting.md +58 -80
- package/dist/docs/guides/profiles-and-extrusion.md +400 -0
- package/dist/docs/guides/recipes.md +52 -706
- package/dist/docs/guides/resolution-and-inspection.md +153 -0
- package/dist/docs/guides/solid-joins.md +136 -0
- package/dist/docs/guides/standalone-model.md +5 -3
- package/dist/docs/guides/svg-and-text.md +252 -0
- package/dist/docs/guides/sweeps-and-lofts.md +223 -0
- package/dist/docs/guides/transforms-and-placement.md +323 -0
- package/dist/docs/guides/workers.md +166 -0
- package/dist/docs/manifest.json +5539 -8603
- package/dist/docs/reference/engine/GenerationOptions.md +9 -4
- package/dist/docs/reference/engine/GeometryResource.md +11 -5
- package/dist/docs/reference/engine/ModelDependencies.md +9 -3
- package/dist/docs/reference/engine/ModelEngine.md +8 -3
- package/dist/docs/reference/engine/ModelEngineOptions.md +6 -5
- package/dist/docs/reference/engine/ModelPart.md +12 -6
- package/dist/docs/reference/engine/ModelResult.md +8 -2
- package/dist/docs/reference/engine/ModelRunArguments.md +7 -1
- package/dist/docs/reference/engine/ModelRunOptions.md +9 -4
- package/dist/docs/reference/engine/ModelSession.md +7 -1
- package/dist/docs/reference/engine/SessionOptions.md +9 -4
- package/dist/docs/reference/engine/categories/host-lifecycle.md +11 -10
- package/dist/docs/reference/engine/checkModel.md +11 -1
- package/dist/docs/reference/engine/createModelEngine.md +13 -4
- package/dist/docs/reference/engine/defaultModelingLimits.md +7 -8
- package/dist/docs/reference/engine/modelingWasmUrl.md +7 -1
- package/dist/docs/reference/engine.md +13 -7
- package/dist/docs/reference/export/Export3mfOptions.md +20 -0
- package/dist/docs/reference/export/ExportDiagnostic.md +47 -0
- package/dist/docs/reference/export/ExportFormat.md +13 -0
- package/dist/docs/reference/export/ExportGeometry.md +27 -0
- package/dist/docs/reference/export/ExportGlbOptions.md +114 -0
- package/dist/docs/reference/export/ExportLimits.md +71 -0
- package/dist/docs/reference/export/ExportMaterial.md +35 -0
- package/dist/docs/reference/export/ExportOptions.md +82 -0
- package/dist/docs/reference/export/ExportPart.md +76 -0
- package/dist/docs/reference/export/ExportReport.md +70 -0
- package/dist/docs/reference/export/ExportSink.md +29 -0
- package/dist/docs/reference/export/ExportStlOptions.md +20 -0
- package/dist/docs/reference/export/ExportedFile.md +98 -0
- package/dist/docs/reference/export/categories/mesh-serialization.md +53 -0
- package/dist/docs/reference/export/defaultExportLimits.md +20 -0
- package/dist/docs/reference/export/export3mf.md +62 -0
- package/dist/docs/reference/export/exportGlb.md +66 -0
- package/dist/docs/reference/export/exportStl.md +62 -0
- package/dist/docs/reference/export/write3mf.md +71 -0
- package/dist/docs/reference/export/writeGlb.md +75 -0
- package/dist/docs/reference/export/writeStl.md +71 -0
- package/dist/docs/reference/export.md +27 -0
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +9 -3
- package/dist/docs/reference/geometry/Anchor3-type.md +9 -3
- package/dist/docs/reference/geometry/Anchor3Options.md +70 -0
- package/dist/docs/reference/geometry/ArcCurve2.md +8 -2
- package/dist/docs/reference/geometry/ArcCurve3.md +8 -2
- package/dist/docs/reference/geometry/AttachOptions.md +10 -5
- package/dist/docs/reference/geometry/Bounds2-type.md +17 -24
- package/dist/docs/reference/geometry/Bounds2Data.md +10 -9
- package/dist/docs/reference/geometry/Bounds2Input.md +10 -4
- package/dist/docs/reference/geometry/Bounds2Options.md +10 -4
- package/dist/docs/reference/geometry/Bounds3-type.md +17 -24
- package/dist/docs/reference/geometry/Bounds3Data.md +10 -9
- package/dist/docs/reference/geometry/Bounds3Input.md +10 -4
- package/dist/docs/reference/geometry/Bounds3Options.md +10 -4
- package/dist/docs/reference/geometry/BoundsFit2.md +10 -4
- package/dist/docs/reference/geometry/BoundsFit3.md +10 -4
- package/dist/docs/reference/geometry/BoundsFitOptions.md +10 -4
- package/dist/docs/reference/geometry/BoxAnchorFace.md +9 -3
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +9 -3
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +8 -2
- package/dist/docs/reference/geometry/CircleContourOptions.md +8 -2
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +8 -3
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +7 -1
- package/dist/docs/reference/geometry/CircularSampling.md +7 -1
- package/dist/docs/reference/geometry/CircularSamplingOptions.md +7 -1
- package/dist/docs/reference/geometry/Contour.md +9 -4
- package/dist/docs/reference/geometry/ContourCurve.md +8 -2
- package/dist/docs/reference/geometry/ContourPoint.md +8 -2
- package/dist/docs/reference/geometry/ContourSegment.md +8 -2
- package/dist/docs/reference/geometry/CorrespondingComponent.md +8 -2
- package/dist/docs/reference/geometry/CorrespondingContour.md +8 -2
- package/dist/docs/reference/geometry/CorrespondingProfile.md +8 -2
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +9 -3
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +8 -2
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +8 -2
- package/dist/docs/reference/geometry/Curve2.md +8 -2
- package/dist/docs/reference/geometry/Curve3.md +8 -2
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +8 -2
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +9 -3
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +10 -4
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -1
- package/dist/docs/reference/geometry/EdgeTreatment.md +7 -1
- package/dist/docs/reference/geometry/EllipseContourOptions.md +8 -2
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +15 -10
- package/dist/docs/reference/geometry/FittedTextLayout.md +8 -2
- package/dist/docs/reference/geometry/{Frame3.md → Frame3-type.md} +9 -2
- package/dist/docs/reference/geometry/Frame3Options.md +69 -0
- package/dist/docs/reference/geometry/GeometryError.md +7 -1
- package/dist/docs/reference/geometry/GeometryErrorCode.md +7 -1
- package/dist/docs/reference/geometry/GeometryErrorContext.md +7 -1
- package/dist/docs/reference/geometry/GeometryResolution.md +7 -1
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +8 -2
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +8 -2
- package/dist/docs/reference/geometry/GridPatternOptions.md +13 -5
- package/dist/docs/reference/geometry/ImmutableBuffer-type.md +8 -14
- package/dist/docs/reference/geometry/LineCurve2.md +8 -2
- package/dist/docs/reference/geometry/LineCurve3.md +8 -2
- package/dist/docs/reference/geometry/LinearPatternOptions.md +8 -2
- package/dist/docs/reference/geometry/LoftPlacement.md +19 -13
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +8 -2
- package/dist/docs/reference/geometry/ModelingLimits.md +7 -1
- package/dist/docs/reference/geometry/NumericArray.md +8 -2
- package/dist/docs/reference/geometry/Path2-type.md +158 -3
- package/dist/docs/reference/geometry/Path2Data.md +8 -2
- package/dist/docs/reference/geometry/Path2Input.md +8 -2
- package/dist/docs/reference/geometry/Path3-type.md +158 -3
- package/dist/docs/reference/geometry/Path3Data.md +8 -2
- package/dist/docs/reference/geometry/Path3Input.md +8 -2
- package/dist/docs/reference/geometry/PathFrame.md +8 -2
- package/dist/docs/reference/geometry/PathLocation.md +8 -2
- package/dist/docs/reference/geometry/PathNormalGuide.md +9 -3
- package/dist/docs/reference/geometry/PathOptions.md +8 -2
- package/dist/docs/reference/geometry/PathPatternOptions.md +9 -3
- package/dist/docs/reference/geometry/PathPlacement.md +10 -4
- package/dist/docs/reference/geometry/PathResamplingOptions.md +8 -2
- 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 +9 -3
- package/dist/docs/reference/geometry/Pivot3Options.md +9 -3
- package/dist/docs/reference/geometry/PolygonData.md +9 -3
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +8 -2
- package/dist/docs/reference/geometry/Profile.md +8 -3
- package/dist/docs/reference/geometry/ProfileComponent2.md +8 -2
- package/dist/docs/reference/geometry/ProfileContour2.md +8 -2
- package/dist/docs/reference/geometry/ProfileSpan2.md +8 -2
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +10 -3
- package/dist/docs/reference/geometry/RadialPatternOptions.md +8 -2
- package/dist/docs/reference/geometry/RadialSizing.md +7 -1
- package/dist/docs/reference/geometry/RadialSizingOptions.md +7 -1
- package/dist/docs/reference/geometry/RectangleContourOptions.md +9 -2
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +8 -2
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +8 -2
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +8 -2
- package/dist/docs/reference/geometry/RegionData.md +8 -2
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +8 -2
- package/dist/docs/reference/geometry/ResolvedGeometryResolution.md +71 -0
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +7 -1
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +7 -1
- package/dist/docs/reference/geometry/RowLayoutOptions.md +10 -4
- package/dist/docs/reference/geometry/SampleContourOptions.md +8 -2
- package/dist/docs/reference/geometry/SampleHelixOptions.md +8 -2
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +8 -2
- package/dist/docs/reference/geometry/SampledCurve2.md +8 -2
- package/dist/docs/reference/geometry/SampledCurve3.md +8 -2
- package/dist/docs/reference/geometry/SideProfileCurve.md +8 -2
- package/dist/docs/reference/geometry/SideProfilePoint.md +8 -2
- package/dist/docs/reference/geometry/SideProfileSegment.md +8 -2
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +7 -1
- package/dist/docs/reference/geometry/SplineOptions.md +69 -0
- package/dist/docs/reference/geometry/StarContourOptions.md +12 -2
- package/dist/docs/reference/geometry/StrokeCap.md +8 -2
- package/dist/docs/reference/geometry/StrokeJoin.md +8 -2
- package/dist/docs/reference/geometry/StrokeOptions.md +9 -3
- package/dist/docs/reference/geometry/SvgImportOptions.md +10 -4
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +8 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +8 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +8 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +8 -2
- package/dist/docs/reference/geometry/Transform2-type.md +9 -3
- package/dist/docs/reference/geometry/Transform2Data.md +9 -3
- package/dist/docs/reference/geometry/Transform2Input.md +9 -3
- package/dist/docs/reference/geometry/Transform3-type.md +10 -4
- package/dist/docs/reference/geometry/Transform3Data.md +9 -3
- package/dist/docs/reference/geometry/Transform3Input.md +12 -5
- package/dist/docs/reference/geometry/Vector2-type.md +9 -3
- package/dist/docs/reference/geometry/Vector2Data.md +9 -3
- package/dist/docs/reference/geometry/Vector2Input.md +9 -3
- package/dist/docs/reference/geometry/Vector3-type.md +33 -3
- package/dist/docs/reference/geometry/Vector3Data.md +9 -3
- package/dist/docs/reference/geometry/Vector3Input.md +9 -3
- package/dist/docs/reference/geometry/VectorTextLayout.md +8 -2
- package/dist/docs/reference/geometry/VectorTextMetrics.md +9 -3
- package/dist/docs/reference/geometry/anchor3.md +23 -26
- package/dist/docs/reference/geometry/anchorFrame3.md +11 -5
- package/dist/docs/reference/geometry/attachmentTransform3.md +14 -8
- package/dist/docs/reference/geometry/bounds2.md +16 -8
- package/dist/docs/reference/geometry/bounds3.md +14 -6
- package/dist/docs/reference/geometry/boundsCenter.md +10 -4
- package/dist/docs/reference/geometry/boundsSize.md +10 -4
- package/dist/docs/reference/geometry/boxAnchor3.md +9 -3
- package/dist/docs/reference/geometry/categories/bounds-layout.md +12 -6
- 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 +11 -5
- 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 +8 -5
- package/dist/docs/reference/geometry/circleContour.md +8 -2
- package/dist/docs/reference/geometry/closeToAxis.md +12 -2
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +14 -5
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +18 -5
- package/dist/docs/reference/geometry/contourContainsPoint.md +12 -2
- package/dist/docs/reference/geometry/cylinderAnchor3.md +11 -5
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +8 -2
- package/dist/docs/reference/geometry/distributeAlongPath.md +21 -10
- package/dist/docs/reference/geometry/ellipseContour.md +8 -2
- package/dist/docs/reference/geometry/fitBounds.md +18 -4
- package/dist/docs/reference/geometry/fitTextLayout.md +11 -5
- package/dist/docs/reference/geometry/frame3.md +66 -0
- package/dist/docs/reference/geometry/gridPatternTransforms.md +12 -6
- package/dist/docs/reference/geometry/immutableBuffer.md +11 -3
- package/dist/docs/reference/geometry/isGeometryError.md +7 -1
- package/dist/docs/reference/geometry/layoutRow.md +12 -4
- package/dist/docs/reference/geometry/linearPatternTransforms.md +12 -6
- package/dist/docs/reference/geometry/matchProfiles.md +10 -2
- package/dist/docs/reference/geometry/normalizeContour.md +13 -3
- package/dist/docs/reference/geometry/normalizePolygon.md +10 -2
- package/dist/docs/reference/geometry/normalizeRegion.md +10 -2
- package/dist/docs/reference/geometry/path2.md +12 -2
- package/dist/docs/reference/geometry/path3.md +12 -2
- package/dist/docs/reference/geometry/pathPatternTransforms.md +18 -8
- package/dist/docs/reference/geometry/preflightSvgRegion.md +11 -5
- package/dist/docs/reference/geometry/radialPatternTransforms.md +11 -5
- package/dist/docs/reference/geometry/rectangleContour.md +8 -2
- package/dist/docs/reference/geometry/rectangleProfile.md +8 -3
- package/dist/docs/reference/geometry/regionArea.md +8 -2
- package/dist/docs/reference/geometry/regionBounds.md +11 -3
- package/dist/docs/reference/geometry/regularPolygonContour.md +8 -2
- package/dist/docs/reference/geometry/resamplePolyline2.md +12 -2
- package/dist/docs/reference/geometry/resamplePolyline3.md +12 -2
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +10 -4
- package/dist/docs/reference/geometry/resolveArcSegments.md +13 -5
- package/dist/docs/reference/geometry/resolveCircularSampling.md +7 -1
- package/dist/docs/reference/geometry/resolveCircularSegments.md +10 -2
- package/dist/docs/reference/geometry/resolveExtrusionSlices.md +85 -0
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +10 -2
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +8 -2
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +17 -4
- package/dist/docs/reference/geometry/sampleContour.md +10 -4
- package/dist/docs/reference/geometry/sampleCurve2.md +12 -2
- package/dist/docs/reference/geometry/sampleCurve3.md +12 -2
- package/dist/docs/reference/geometry/sampleHelix.md +8 -2
- package/dist/docs/reference/geometry/sampleSideProfile.md +10 -4
- package/dist/docs/reference/geometry/sampleTextContours.md +9 -3
- package/dist/docs/reference/geometry/signedContourArea.md +10 -2
- 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 +8 -2
- package/dist/docs/reference/geometry/strokeRegionData.md +14 -5
- package/dist/docs/reference/geometry/transform2.md +11 -3
- package/dist/docs/reference/geometry/transform3.md +29 -6
- package/dist/docs/reference/geometry/transformRegionData.md +12 -2
- package/dist/docs/reference/geometry/triangulateContour.md +11 -3
- package/dist/docs/reference/geometry/vector2.md +12 -4
- package/dist/docs/reference/geometry/vector3.md +14 -4
- package/dist/docs/reference/geometry.md +13 -18
- package/dist/docs/reference/{geometry → math}/AxisAngleRotation3.md +8 -3
- 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 +9 -4
- package/dist/docs/reference/{geometry → mechanical}/Bevel.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/BevelSize.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/ButtressPressureFlankSide.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/ButtressThreadProfileSpec.md +9 -4
- package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleDimensions.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleFit.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/CompensatedThreadDiameters.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/CustomThreadProfileSpec.md +10 -6
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearDimensions.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearMeshKind.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearOutlineOptions.md +9 -8
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairDimensions.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionOptions.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionReport.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairSpec.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearSpec.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/InternalThreadCutterOptions.md +11 -8
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeBaseSpec.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeDimensions.md +9 -4
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeInterval.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSamplingOptions.md +9 -8
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSpec.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/METRIC_FASTENER_STANDARDS.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/MetricFastenerSize.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/MetricFastenerStandard.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/MetricHexNutDimensions.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/MetricSocketCapHeadDimensions.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/PRINTABLE_THREAD_FIT_POLICIES.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFit.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFitPolicy.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/RackPitchDimensions.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/RackPitchSpec.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/SampledThreadHelices.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/SquareThreadProfileSpec.md +9 -4
- package/dist/docs/reference/{geometry → mechanical}/ThreadBevelOptions.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/ThreadCircularSegmentsOptions.md +10 -6
- package/dist/docs/reference/{geometry → mechanical}/ThreadCompensationOptions.md +9 -4
- package/dist/docs/reference/{geometry → mechanical}/ThreadEndStyle.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/ThreadEndTreatmentOptions.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/ThreadHandedness.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/ThreadHelixOptions.md +10 -6
- package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInEnvelope.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInShape.md +8 -2
- package/dist/docs/reference/{mesh/ThreadProfile.md → mechanical/ThreadProfile-type.md} +8 -6
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfileBaseSpec.md +9 -4
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfileSpec.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/ThreadRidgeOptions.md +12 -9
- package/dist/docs/reference/{geometry → mechanical}/ThreadRole.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/ThreadSolidOptions.md +13 -10
- package/dist/docs/reference/{geometry → mechanical}/ThreadSolidPreflight.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutOptions.md +12 -9
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutPreflight.md +8 -2
- package/dist/docs/reference/mechanical/ThreadedNutShape.md +20 -0
- package/dist/docs/reference/{geometry → mechanical}/ThreadedRodOptions.md +11 -8
- package/dist/docs/reference/{geometry → mechanical}/TrapezoidalThreadProfileSpec.md +9 -4
- package/dist/docs/reference/{geometry → mechanical}/TriangularThreadProfileSpec.md +9 -4
- package/dist/docs/reference/{geometry → mechanical}/categories/mechanical.md +9 -3
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadDiameters.md +9 -3
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileAxially.md +17 -5
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileForFaceting.md +18 -2
- package/dist/docs/reference/{geometry → mechanical}/getMetricClearanceHoleDiameter.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/getMetricFastenerStandard.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/measureInternalCylindricalGearPairMotion.md +14 -6
- package/dist/docs/reference/{geometry → mechanical}/minimumCylindricalGearToothCountWithoutUndercut.md +10 -2
- package/dist/docs/reference/{geometry → mechanical}/preflightInternalThreadCutter.md +13 -5
- package/dist/docs/reference/{geometry → mechanical}/preflightThreadedNut.md +14 -6
- package/dist/docs/reference/{geometry → mechanical}/preflightThreadedRod.md +13 -5
- package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGear.md +10 -2
- package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGearPair.md +10 -2
- package/dist/docs/reference/{geometry → mechanical}/resolveKnuckleHinge.md +14 -6
- package/dist/docs/reference/{geometry → mechanical}/resolvePrintableThreadFitPolicy.md +10 -2
- package/dist/docs/reference/{geometry → mechanical}/resolveRackPitch.md +10 -2
- package/dist/docs/reference/{geometry → mechanical}/resolveThreadCircularSegments.md +12 -4
- package/dist/docs/reference/{geometry → mechanical}/sampleCylindricalGearOutline.md +14 -7
- package/dist/docs/reference/{geometry → mechanical}/sampleInternalCylindricalGearSpaceOutline.md +14 -7
- package/dist/docs/reference/{geometry → mechanical}/sampleRackToothPath.md +15 -7
- package/dist/docs/reference/{geometry → mechanical}/sampleThreadHelices.md +13 -5
- package/dist/docs/reference/{geometry → mechanical}/threadProfile.md +12 -2
- package/dist/docs/reference/mechanical.md +19 -0
- package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +39 -40
- package/dist/docs/reference/mesh/HeightfieldMeshLimits.md +8 -6
- package/dist/docs/reference/mesh/HeightfieldPreflight.md +8 -2
- package/dist/docs/reference/mesh/ImmutableTriangleMesh.md +8 -6
- package/dist/docs/reference/mesh/LoftMeshStation.md +8 -7
- package/dist/docs/reference/mesh/MeshRenderOptions.md +28 -0
- package/dist/docs/reference/mesh/PlanarMeshOptimizationFallbackReason.md +9 -3
- package/dist/docs/reference/mesh/PlanarMeshOptimizationOptions.md +11 -6
- package/dist/docs/reference/mesh/PlanarMeshOptimizationResult.md +13 -7
- package/dist/docs/reference/mesh/PlanarPatchQuality.md +7 -5
- package/dist/docs/reference/mesh/RenderMesh.md +68 -0
- package/dist/docs/reference/mesh/SolidMeshValidationOptions.md +7 -5
- package/dist/docs/reference/mesh/TriangleMesh.md +16 -2
- package/dist/docs/reference/mesh/TriangleMeshAnalysis.md +16 -11
- package/dist/docs/reference/mesh/TriangleMeshAnalysisOptions.md +12 -7
- package/dist/docs/reference/mesh/TriangleMeshInput.md +9 -3
- package/dist/docs/reference/mesh/TriangleMeshMeasurements.md +10 -5
- package/dist/docs/reference/mesh/TriangleMeshQualityOptions.md +9 -4
- package/dist/docs/reference/mesh/TriangleMeshQualityReport.md +9 -3
- package/dist/docs/reference/mesh/TriangleMeshSignature.md +9 -4
- package/dist/docs/reference/mesh/TriangleMeshSignatureOptions.md +8 -2
- package/dist/docs/reference/mesh/TriangleMeshSignatureTolerances.md +8 -2
- package/dist/docs/reference/mesh/TriangleMeshTopologyAnalysis.md +17 -12
- package/dist/docs/reference/mesh/TriangleMeshValidationOptions.md +9 -4
- package/dist/docs/reference/mesh/analyze.md +28 -14
- package/dist/docs/reference/mesh/analyzeQuality.md +15 -9
- package/dist/docs/reference/mesh/bounds.md +10 -5
- package/dist/docs/reference/mesh/categories/operations.md +24 -81
- package/dist/docs/reference/mesh/centroid.md +10 -5
- package/dist/docs/reference/mesh/extrude.md +25 -18
- package/dist/docs/reference/mesh/heightfield.md +13 -7
- package/dist/docs/reference/mesh/immutable.md +16 -10
- package/dist/docs/reference/mesh/join.md +11 -5
- package/dist/docs/reference/mesh/loft.md +23 -16
- package/dist/docs/reference/mesh/optimizePlanarPatches.md +24 -18
- package/dist/docs/reference/mesh/preflightHeightfield.md +13 -7
- package/dist/docs/reference/mesh/preflightThreadSolid.md +27 -24
- package/dist/docs/reference/mesh/render.md +59 -0
- package/dist/docs/reference/mesh/reverse.md +11 -5
- package/dist/docs/reference/mesh/revolve.md +17 -13
- package/dist/docs/reference/mesh/signature.md +15 -9
- package/dist/docs/reference/mesh/sweep.md +101 -24
- package/dist/docs/reference/mesh/threadRidge.md +24 -17
- package/dist/docs/reference/mesh/threadSolid.md +28 -21
- package/dist/docs/reference/mesh/transform.md +12 -7
- package/dist/docs/reference/mesh/validate.md +15 -9
- package/dist/docs/reference/mesh/validateSolid.md +14 -8
- package/dist/docs/reference/mesh.md +8 -2
- package/dist/docs/reference/model/BoxEdge.md +11 -3
- package/dist/docs/reference/model/BoxEdgeSelection.md +11 -3
- package/dist/docs/reference/model/BoxEdgeTreatments.md +12 -5
- package/dist/docs/reference/model/BoxOptions.md +14 -9
- package/dist/docs/reference/model/CircleOptions.md +11 -6
- package/dist/docs/reference/model/CornerCutterOptions.md +93 -0
- package/dist/docs/reference/model/CornerCutterTreatment.md +53 -0
- package/dist/docs/reference/model/CutterOverrun.md +43 -0
- package/dist/docs/reference/model/CylinderOptions.md +12 -6
- package/dist/docs/reference/model/DiagnosticOptions.md +7 -1
- package/dist/docs/reference/model/EdgeCutterOptions.md +129 -0
- package/dist/docs/reference/model/EllipseOptions.md +11 -6
- package/dist/docs/reference/model/EndTreatments.md +13 -9
- package/dist/docs/reference/model/ExtrudeOptions.md +48 -44
- package/dist/docs/reference/model/GenerateCallback.md +7 -1
- package/dist/docs/reference/model/GenerateContext.md +23 -24
- package/dist/docs/reference/model/GenerationDiagnostic.md +7 -1
- package/dist/docs/reference/model/GenerationError.md +8 -2
- package/dist/docs/reference/model/HeightfieldOptions.md +8 -8
- package/dist/docs/reference/model/HoleCutterOpening.md +27 -0
- package/dist/docs/reference/model/HoleCutterOptions.md +19 -25
- package/dist/docs/reference/model/HoleCutterRecess.md +13 -5
- package/dist/docs/reference/model/HullOptions.md +12 -6
- package/dist/docs/reference/model/ImmutableValue.md +7 -1
- package/dist/docs/reference/model/ImplicitOptions.md +9 -9
- package/dist/docs/reference/model/JoinOptions.md +73 -0
- package/dist/docs/reference/model/JoinTransition.md +54 -0
- package/dist/docs/reference/model/KnuckleHinge-type.md +8 -3
- package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +7 -1
- package/dist/docs/reference/model/KnuckleHingeOptions.md +8 -4
- package/dist/docs/reference/model/KnuckleHingeWeb.md +7 -1
- package/dist/docs/reference/model/LoftCorrespondence.md +13 -5
- package/dist/docs/reference/model/LoftOptions.md +16 -10
- package/dist/docs/reference/model/LoftStation.md +16 -10
- package/dist/docs/reference/model/Memo.md +54 -0
- package/dist/docs/reference/model/ModelProgram.md +7 -1
- package/dist/docs/reference/model/PartDeclaration.md +12 -8
- package/dist/docs/reference/model/PartGeometry.md +8 -4
- package/dist/docs/reference/model/PartOptions.md +12 -8
- package/dist/docs/reference/model/PatternSource.md +11 -5
- package/dist/docs/reference/model/PlaneOptions.md +11 -8
- package/dist/docs/reference/model/PolygonOptions.md +17 -16
- package/dist/docs/reference/model/PrimitiveAttachment.md +15 -4
- package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +18 -17
- package/dist/docs/reference/model/RectangleOptions.md +31 -30
- package/dist/docs/reference/model/RegularPolygonOptions.md +11 -38
- package/dist/docs/reference/model/RevolveOptions.md +19 -17
- package/dist/docs/reference/model/Section.md +128 -72
- package/dist/docs/reference/model/SectionHullOptions.md +12 -6
- package/dist/docs/reference/model/SectionInspection.md +8 -6
- package/dist/docs/reference/model/SectionOffsetJoin.md +10 -4
- package/dist/docs/reference/model/SectionOffsetOptions.md +11 -6
- package/dist/docs/reference/model/Solid.md +113 -53
- package/dist/docs/reference/model/SolidInspection.md +8 -6
- package/dist/docs/reference/model/SolidSegmentHit.md +9 -7
- package/dist/docs/reference/model/SphereOptions.md +12 -5
- package/dist/docs/reference/model/StarOptions.md +33 -29
- package/dist/docs/reference/model/SvgOrigin.md +10 -4
- package/dist/docs/reference/model/SvgPathSectionOptions.md +13 -9
- package/dist/docs/reference/model/SvgSectionOptions.md +14 -11
- package/dist/docs/reference/model/SweepOptions.md +21 -28
- package/dist/docs/reference/model/SweepOrientation.md +19 -16
- package/dist/docs/reference/model/SweepTransformOptions.md +105 -0
- package/dist/docs/reference/model/TextSectionOptions.md +11 -10
- package/dist/docs/reference/model/TorusOptions.md +13 -7
- package/dist/docs/reference/model/TubeOptions.md +25 -8
- package/dist/docs/reference/model/box.md +14 -6
- package/dist/docs/reference/model/categories/boolean-operations.md +16 -4
- package/dist/docs/reference/model/categories/bounded-surfaces.md +7 -1
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +21 -16
- package/dist/docs/reference/model/categories/generation.md +15 -12
- package/dist/docs/reference/model/categories/hinges.md +7 -4
- package/dist/docs/reference/model/categories/mesh-inspection.md +8 -6
- package/dist/docs/reference/model/categories/primitives.md +32 -20
- package/dist/docs/reference/model/categories/sections.md +11 -16
- package/dist/docs/reference/model/categories/threads.md +9 -43
- package/dist/docs/reference/model/categories/transforms-placement.md +17 -41
- package/dist/docs/reference/model/circle.md +15 -5
- package/dist/docs/reference/model/cornerCutter.md +88 -0
- package/dist/docs/reference/model/cylinder.md +11 -3
- package/dist/docs/reference/model/edgeCutter.md +91 -0
- package/dist/docs/reference/model/ellipse.md +15 -5
- package/dist/docs/reference/model/extrude.md +37 -24
- package/dist/docs/reference/model/generate.md +10 -2
- package/dist/docs/reference/model/gridPattern.md +22 -9
- package/dist/docs/reference/model/heightfield.md +7 -1
- package/dist/docs/reference/model/holeCutter.md +34 -13
- package/dist/docs/reference/model/hull.md +9 -2
- package/dist/docs/reference/model/implicit.md +10 -4
- package/dist/docs/reference/model/internalThreadCutter.md +38 -21
- package/dist/docs/reference/model/intersect.md +14 -3
- package/dist/docs/reference/model/join.md +93 -0
- package/dist/docs/reference/model/knuckleHinge.md +7 -2
- package/dist/docs/reference/model/linearPattern.md +22 -9
- package/dist/docs/reference/model/loft.md +27 -16
- package/dist/docs/reference/model/minkowskiSum.md +10 -3
- package/dist/docs/reference/model/pathPattern.md +36 -21
- package/dist/docs/reference/model/polygon.md +18 -7
- package/dist/docs/reference/model/radialPattern.md +22 -9
- package/dist/docs/reference/model/rectangle.md +22 -12
- package/dist/docs/reference/model/regularPolygon.md +15 -5
- package/dist/docs/reference/model/revolve.md +26 -13
- package/dist/docs/reference/model/solidFromMesh.md +16 -6
- package/dist/docs/reference/model/sphere.md +12 -4
- package/dist/docs/reference/model/star.md +20 -10
- package/dist/docs/reference/model/stroke.md +29 -19
- package/dist/docs/reference/model/svgPathSection.md +20 -8
- package/dist/docs/reference/model/svgSection.md +21 -9
- package/dist/docs/reference/model/sweep.md +108 -24
- package/dist/docs/reference/model/textSection.md +19 -9
- package/dist/docs/reference/model/threadRidge.md +22 -17
- package/dist/docs/reference/model/threadedNut.md +31 -22
- package/dist/docs/reference/model/threadedRod.md +27 -18
- package/dist/docs/reference/model/torus.md +13 -5
- package/dist/docs/reference/model/tube.md +11 -3
- package/dist/docs/reference/model/union.md +14 -3
- package/dist/docs/reference/model.md +11 -11
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -1
- package/dist/docs/reference/text/VectorFont.md +22 -12
- package/dist/docs/reference/text/VectorFontOptions.md +7 -1
- package/dist/docs/reference/text/VectorTextArcBaseline.md +7 -1
- package/dist/docs/reference/text/VectorTextLayoutOptions.md +8 -2
- package/dist/docs/reference/text/VectorTextOptions.md +7 -1
- package/dist/docs/reference/text/categories/font-preparation.md +7 -10
- package/dist/docs/reference/text/prepareVectorFont.md +9 -1
- package/dist/docs/reference/text.md +7 -1
- package/dist/engine/execution.js +5 -3
- package/dist/engine/finalization.js +6 -78
- package/dist/engine/index.js +11 -6
- package/dist/engine/native/adapter.js +1 -1
- package/dist/engine/native/construction-mesh.js +51 -0
- package/dist/engine/native/context.js +10 -7
- package/dist/engine/native/index.js +1 -1
- package/dist/engine/native/material-components.js +4 -53
- package/dist/engine/native/mesh-observation.js +55 -0
- package/dist/engine/native/regions.js +44 -23
- 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 +15 -6
- package/dist/engine/operations/cutters.js +112 -0
- package/dist/engine/operations/environment.js +2 -2
- package/dist/engine/operations/extrusion-finishing.js +56 -29
- package/dist/engine/operations/hole-cutter.js +125 -114
- package/dist/engine/operations/join-collar-profile.js +120 -0
- package/dist/engine/operations/join.js +521 -0
- 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 +87 -31
- package/dist/engine/session/declarations.js +98 -0
- package/dist/engine/session/dependencies.js +139 -39
- package/dist/engine/session/graph.js +290 -411
- package/dist/engine/session/native-cache.js +1 -1
- package/dist/engine/session/parameters.js +78 -0
- package/dist/engine/session/session.js +7 -7
- package/dist/engine/session/snapshot-cache.js +4 -4
- package/dist/engine/shape-anchors.js +13 -6
- package/dist/export/3mf.js +197 -0
- package/dist/export/capture.js +182 -0
- package/dist/export/glb.js +214 -0
- package/dist/export/index.js +5 -0
- package/dist/export/limits.js +18 -0
- package/dist/export/stl.js +120 -0
- package/dist/export/writer.js +54 -0
- package/dist/geometry/{bounds.js → bounds/operations.js} +3 -1
- package/dist/geometry/{bounds-value.js → bounds/value.js} +24 -20
- 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 +11 -7
- 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/mesh/join-layers.js +833 -0
- 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/render-buffers.js +220 -0
- package/dist/geometry/mesh/{mesh-signature.js → signature.js} +1 -1
- package/dist/geometry/mesh/{mesh-solid-intersections.js → solid-intersections.js} +45 -17
- package/dist/geometry/mesh/{mesh-solid.js → solid.js} +10 -6
- 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 -10
- 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/regions/offset.js +280 -0
- package/dist/geometry/{regions.js → regions/operations.js} +70 -23
- 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/sweep/options.js +1 -0
- 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 +4 -2
- package/dist/model/immutable-generation-data.js +15 -13
- package/dist/model/join.js +1 -0
- package/dist/model/operations.js +150 -94
- package/dist/model/recipe-declaration.js +6 -7
- package/dist/model/shape-handles.js +1 -0
- package/dist/text/index.js +3 -0
- package/dist/text/vector-text-layout.js +1 -0
- package/package.json +20 -5
- package/dist/docs/reference/engine/Export3mfOptions.md +0 -46
- package/dist/docs/reference/engine/ExportMeshPart.md +0 -31
- package/dist/docs/reference/engine/ModelingLimits.md +0 -121
- package/dist/docs/reference/engine/export3mf.md +0 -55
- package/dist/docs/reference/geometry/BoxEdge.md +0 -7
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +0 -14
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +0 -15
- package/dist/docs/reference/geometry/BoxOptions.md +0 -87
- package/dist/docs/reference/geometry/CylinderOptions.md +0 -53
- package/dist/docs/reference/geometry/EndTreatments.md +0 -34
- package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +0 -130
- package/dist/docs/reference/geometry/ExtrudeOptions.md +0 -146
- package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +0 -18
- package/dist/docs/reference/geometry/HeightfieldOptions.md +0 -72
- package/dist/docs/reference/geometry/HeightfieldPreflight.md +0 -58
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +0 -19
- package/dist/docs/reference/geometry/ImmutableTriangleMesh.md +0 -43
- package/dist/docs/reference/geometry/LoftCorrespondence.md +0 -24
- package/dist/docs/reference/geometry/LoftMeshStation.md +0 -31
- package/dist/docs/reference/geometry/LoftOptions.md +0 -88
- package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +0 -14
- package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +0 -160
- package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +0 -124
- package/dist/docs/reference/geometry/PlanarPatchQuality.md +0 -194
- package/dist/docs/reference/geometry/PrimitiveAttachment.md +0 -29
- package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +0 -104
- package/dist/docs/reference/geometry/RevolveOptions.md +0 -91
- package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +0 -38
- package/dist/docs/reference/geometry/SphereOptions.md +0 -15
- package/dist/docs/reference/geometry/SweepOptions.md +0 -113
- package/dist/docs/reference/geometry/SweepOrientation.md +0 -113
- package/dist/docs/reference/geometry/ThreadProfile-type.md +0 -86
- package/dist/docs/reference/geometry/ThreadedNutShape.md +0 -14
- package/dist/docs/reference/geometry/TorusOptions.md +0 -105
- package/dist/docs/reference/geometry/TriangleMesh.md +0 -34
- package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +0 -129
- package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +0 -79
- package/dist/docs/reference/geometry/TriangleMeshInput.md +0 -19
- package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +0 -79
- package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +0 -43
- package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +0 -194
- package/dist/docs/reference/geometry/TriangleMeshSignature.md +0 -111
- package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +0 -46
- package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +0 -34
- package/dist/docs/reference/geometry/TriangleMeshTopologyAnalysis.md +0 -131
- package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +0 -55
- package/dist/docs/reference/geometry/TubeOptions.md +0 -62
- package/dist/docs/reference/geometry/VectorTextArcBaseline.md +0 -58
- package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +0 -115
- package/dist/docs/reference/geometry/VectorTextOptions.md +0 -54
- package/dist/docs/reference/geometry/add2.md +0 -37
- package/dist/docs/reference/geometry/add3.md +0 -43
- package/dist/docs/reference/geometry/applyTransformDirection3.md +0 -46
- package/dist/docs/reference/geometry/applyTransformPoint3.md +0 -44
- package/dist/docs/reference/geometry/categories/meshes.md +0 -68
- package/dist/docs/reference/geometry/composeTransform3.md +0 -45
- package/dist/docs/reference/geometry/cross2.md +0 -37
- package/dist/docs/reference/geometry/cross3.md +0 -43
- package/dist/docs/reference/geometry/distance2.md +0 -37
- package/dist/docs/reference/geometry/distance3.md +0 -37
- package/dist/docs/reference/geometry/dot2.md +0 -37
- package/dist/docs/reference/geometry/dot3.md +0 -43
- package/dist/docs/reference/geometry/eulerTransform3.md +0 -43
- package/dist/docs/reference/geometry/frameTransform3.md +0 -49
- package/dist/docs/reference/geometry/inverseTransform3.md +0 -35
- package/dist/docs/reference/geometry/length2.md +0 -31
- package/dist/docs/reference/geometry/length3.md +0 -31
- package/dist/docs/reference/geometry/lerp2.md +0 -43
- package/dist/docs/reference/geometry/lerp3.md +0 -43
- package/dist/docs/reference/geometry/normalize2.md +0 -40
- package/dist/docs/reference/geometry/normalize3.md +0 -40
- package/dist/docs/reference/geometry/projectOntoPlane3.md +0 -37
- package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +0 -78
- package/dist/docs/reference/geometry/rotate2.md +0 -37
- package/dist/docs/reference/geometry/rotationTransform3.md +0 -54
- package/dist/docs/reference/geometry/scale2.md +0 -37
- package/dist/docs/reference/geometry/scale3.md +0 -43
- package/dist/docs/reference/geometry/scaleTransform3.md +0 -39
- package/dist/docs/reference/geometry/subtract2.md +0 -37
- package/dist/docs/reference/geometry/subtract3.md +0 -43
- package/dist/docs/reference/geometry/transformDeterminant3.md +0 -37
- package/dist/docs/reference/geometry/translationTransform3.md +0 -36
- package/dist/docs/reference/geometry/validateRigidTransform3.md +0 -35
- package/dist/docs/reference/geometry/validateTransform3.md +0 -48
- package/dist/docs/reference/mesh/AcmeThreadProfileSpec.md +0 -79
- package/dist/docs/reference/mesh/Bevel.md +0 -18
- package/dist/docs/reference/mesh/BevelSize.md +0 -14
- package/dist/docs/reference/mesh/Bounds2.md +0 -125
- package/dist/docs/reference/mesh/Bounds2Data.md +0 -43
- package/dist/docs/reference/mesh/Bounds2Input.md +0 -19
- package/dist/docs/reference/mesh/Bounds3.md +0 -125
- package/dist/docs/reference/mesh/Bounds3Data.md +0 -43
- package/dist/docs/reference/mesh/Bounds3Input.md +0 -19
- package/dist/docs/reference/mesh/ButtressPressureFlankSide.md +0 -14
- package/dist/docs/reference/mesh/ButtressThreadProfileSpec.md +0 -97
- package/dist/docs/reference/mesh/CircularPrimitiveOptions.md +0 -60
- package/dist/docs/reference/mesh/CurveSamplingOptions.md +0 -69
- package/dist/docs/reference/mesh/CustomThreadProfileSpec.md +0 -77
- package/dist/docs/reference/mesh/ExtrusionSamplingOptions.md +0 -81
- package/dist/docs/reference/mesh/Frame3.md +0 -62
- package/dist/docs/reference/mesh/GeometryResolution.md +0 -74
- package/dist/docs/reference/mesh/GeometrySamplingLimits.md +0 -66
- package/dist/docs/reference/mesh/GeometryToleranceOptions.md +0 -46
- package/dist/docs/reference/mesh/HeightfieldOptions.md +0 -72
- package/dist/docs/reference/mesh/ImmutableBuffer.md +0 -108
- package/dist/docs/reference/mesh/LoftCorrespondence.md +0 -24
- package/dist/docs/reference/mesh/LoftOptions.md +0 -88
- package/dist/docs/reference/mesh/LoftPlacement.md +0 -70
- package/dist/docs/reference/mesh/ModelingLimits.md +0 -130
- package/dist/docs/reference/mesh/NumericArray.md +0 -14
- package/dist/docs/reference/mesh/Path2.md +0 -197
- package/dist/docs/reference/mesh/Path2Data.md +0 -50
- package/dist/docs/reference/mesh/Path2Input.md +0 -20
- package/dist/docs/reference/mesh/Path3.md +0 -197
- package/dist/docs/reference/mesh/Path3Data.md +0 -50
- package/dist/docs/reference/mesh/Path3Input.md +0 -20
- package/dist/docs/reference/mesh/PathLocation.md +0 -69
- package/dist/docs/reference/mesh/PathNormalGuide.md +0 -43
- package/dist/docs/reference/mesh/PathResamplingOptions.md +0 -84
- package/dist/docs/reference/mesh/Pivot2Options.md +0 -26
- package/dist/docs/reference/mesh/Pivot3Options.md +0 -26
- package/dist/docs/reference/mesh/RevolveOptions.md +0 -91
- package/dist/docs/reference/mesh/SquareThreadProfileSpec.md +0 -79
- package/dist/docs/reference/mesh/SweepOptions.md +0 -113
- package/dist/docs/reference/mesh/SweepOrientation.md +0 -113
- package/dist/docs/reference/mesh/ThreadEndStyle.md +0 -14
- package/dist/docs/reference/mesh/ThreadEndTreatmentOptions.md +0 -117
- package/dist/docs/reference/mesh/ThreadHandedness.md +0 -14
- package/dist/docs/reference/mesh/ThreadLeadInEnvelope.md +0 -14
- package/dist/docs/reference/mesh/ThreadLeadInShape.md +0 -14
- package/dist/docs/reference/mesh/ThreadProfileBaseSpec.md +0 -53
- package/dist/docs/reference/mesh/ThreadProfileSpec.md +0 -23
- package/dist/docs/reference/mesh/ThreadRidgeOptions.md +0 -145
- package/dist/docs/reference/mesh/ThreadSolidOptions.md +0 -222
- package/dist/docs/reference/mesh/ThreadSolidPreflight.md +0 -58
- package/dist/docs/reference/mesh/Transform2.md +0 -256
- package/dist/docs/reference/mesh/Transform2Data.md +0 -14
- package/dist/docs/reference/mesh/Transform2Input.md +0 -19
- package/dist/docs/reference/mesh/Transform3.md +0 -296
- package/dist/docs/reference/mesh/Transform3Data.md +0 -17
- package/dist/docs/reference/mesh/Transform3Input.md +0 -19
- package/dist/docs/reference/mesh/TrapezoidalThreadProfileSpec.md +0 -96
- package/dist/docs/reference/mesh/TriangularThreadProfileSpec.md +0 -95
- package/dist/docs/reference/mesh/Vector2.md +0 -270
- package/dist/docs/reference/mesh/Vector2Data.md +0 -14
- package/dist/docs/reference/mesh/Vector2Input.md +0 -19
- package/dist/docs/reference/mesh/Vector3.md +0 -282
- package/dist/docs/reference/mesh/Vector3Data.md +0 -14
- package/dist/docs/reference/mesh/Vector3Input.md +0 -19
- package/dist/docs/reference/model/AcmeThreadProfileSpec.md +0 -80
- package/dist/docs/reference/model/Anchor3.md +0 -55
- package/dist/docs/reference/model/AttachOptions.md +0 -69
- package/dist/docs/reference/model/Bevel.md +0 -19
- package/dist/docs/reference/model/BevelSize.md +0 -15
- package/dist/docs/reference/model/Bounds2-type.md +0 -125
- package/dist/docs/reference/model/Bounds2Data.md +0 -44
- package/dist/docs/reference/model/Bounds2Input.md +0 -19
- package/dist/docs/reference/model/Bounds2Options.md +0 -110
- package/dist/docs/reference/model/Bounds3-type.md +0 -125
- package/dist/docs/reference/model/Bounds3Data.md +0 -44
- package/dist/docs/reference/model/Bounds3Input.md +0 -19
- package/dist/docs/reference/model/Bounds3Options.md +0 -110
- package/dist/docs/reference/model/ButtressPressureFlankSide.md +0 -15
- package/dist/docs/reference/model/ButtressThreadProfileSpec.md +0 -98
- package/dist/docs/reference/model/ChamferedEdgeTreatment.md +0 -35
- package/dist/docs/reference/model/CircleContourOptions.md +0 -21
- package/dist/docs/reference/model/CircularPrimitiveOptions.md +0 -62
- package/dist/docs/reference/model/Computed.md +0 -44
- package/dist/docs/reference/model/ComputedValue.md +0 -24
- package/dist/docs/reference/model/Contour.md +0 -24
- package/dist/docs/reference/model/CorrespondingComponent.md +0 -46
- package/dist/docs/reference/model/CorrespondingContour.md +0 -46
- package/dist/docs/reference/model/CorrespondingProfile.md +0 -22
- package/dist/docs/reference/model/CorrespondingProfileStation.md +0 -27
- package/dist/docs/reference/model/CurveSamplingOptions.md +0 -68
- package/dist/docs/reference/model/CustomThreadProfileSpec.md +0 -78
- package/dist/docs/reference/model/EdgeTreatment.md +0 -22
- package/dist/docs/reference/model/EllipseContourOptions.md +0 -21
- package/dist/docs/reference/model/ExtrudeMeshOptions.md +0 -133
- package/dist/docs/reference/model/ExtrusionSamplingOptions.md +0 -84
- package/dist/docs/reference/model/Frame3.md +0 -63
- package/dist/docs/reference/model/GeometryError.md +0 -102
- package/dist/docs/reference/model/GeometryErrorCode.md +0 -15
- package/dist/docs/reference/model/GeometryErrorContext.md +0 -35
- package/dist/docs/reference/model/GeometryResolution.md +0 -70
- package/dist/docs/reference/model/GeometrySamplingLimits.md +0 -62
- package/dist/docs/reference/model/GeometryToleranceOptions.md +0 -46
- package/dist/docs/reference/model/GridPatternOptions.md +0 -50
- package/dist/docs/reference/model/HoleCutterOverrun.md +0 -35
- package/dist/docs/reference/model/ImmutableBuffer-type.md +0 -108
- package/dist/docs/reference/model/ImmutableTriangleMesh.md +0 -43
- package/dist/docs/reference/model/InternalThreadCutterOptions.md +0 -216
- package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +0 -77
- package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +0 -47
- package/dist/docs/reference/model/KnuckleHingeSpec.md +0 -18
- package/dist/docs/reference/model/LinearPatternOptions.md +0 -39
- package/dist/docs/reference/model/LoftPlacement.md +0 -73
- package/dist/docs/reference/model/MatchProfilesOptions.md +0 -35
- package/dist/docs/reference/model/ModelingLimits.md +0 -126
- package/dist/docs/reference/model/NumericArray.md +0 -14
- package/dist/docs/reference/model/Path2-type.md +0 -196
- package/dist/docs/reference/model/Path2Data.md +0 -50
- package/dist/docs/reference/model/Path2Input.md +0 -20
- package/dist/docs/reference/model/Path3-type.md +0 -196
- package/dist/docs/reference/model/Path3Data.md +0 -50
- package/dist/docs/reference/model/Path3Input.md +0 -20
- package/dist/docs/reference/model/PathLocation.md +0 -69
- package/dist/docs/reference/model/PathNormalGuide.md +0 -46
- package/dist/docs/reference/model/PathOptions.md +0 -38
- package/dist/docs/reference/model/PathPatternOptions.md +0 -48
- package/dist/docs/reference/model/PathResamplingOptions.md +0 -84
- package/dist/docs/reference/model/Pivot2Options.md +0 -28
- package/dist/docs/reference/model/Pivot3Options.md +0 -28
- package/dist/docs/reference/model/PolygonData.md +0 -44
- package/dist/docs/reference/model/PrintableThreadFit.md +0 -15
- package/dist/docs/reference/model/PrintableThreadFitPolicy.md +0 -51
- package/dist/docs/reference/model/Profile.md +0 -24
- package/dist/docs/reference/model/ProfileComponent2.md +0 -46
- package/dist/docs/reference/model/ProfileContour2.md +0 -36
- package/dist/docs/reference/model/ProfileSpan2.md +0 -47
- package/dist/docs/reference/model/ProfiledEdgeTreatment.md +0 -41
- package/dist/docs/reference/model/RadialPatternOptions.md +0 -59
- package/dist/docs/reference/model/RadialSizing.md +0 -15
- package/dist/docs/reference/model/RadialSizingOptions.md +0 -40
- package/dist/docs/reference/model/RectangleContourOptions.md +0 -72
- package/dist/docs/reference/model/RectangleCornerTreatment.md +0 -40
- package/dist/docs/reference/model/RectangleCornerTreatments.md +0 -20
- package/dist/docs/reference/model/RegionData.md +0 -19
- package/dist/docs/reference/model/RoundedEdgeTreatment.md +0 -96
- package/dist/docs/reference/model/SmoothEdgeTreatment.md +0 -76
- package/dist/docs/reference/model/SquareThreadProfileSpec.md +0 -80
- package/dist/docs/reference/model/StarContourOptions.md +0 -81
- package/dist/docs/reference/model/StrokeCap.md +0 -16
- package/dist/docs/reference/model/StrokeJoin.md +0 -16
- package/dist/docs/reference/model/StrokeOptions.md +0 -91
- package/dist/docs/reference/model/ThreadBevelOptions.md +0 -35
- package/dist/docs/reference/model/ThreadEndStyle.md +0 -15
- package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +0 -118
- package/dist/docs/reference/model/ThreadHandedness.md +0 -15
- package/dist/docs/reference/model/ThreadLeadInEnvelope.md +0 -15
- package/dist/docs/reference/model/ThreadLeadInShape.md +0 -15
- package/dist/docs/reference/model/ThreadProfile.md +0 -87
- package/dist/docs/reference/model/ThreadProfileBaseSpec.md +0 -54
- package/dist/docs/reference/model/ThreadProfileSpec.md +0 -24
- package/dist/docs/reference/model/ThreadRidgeOptions.md +0 -141
- package/dist/docs/reference/model/ThreadSolidPreflight.md +0 -59
- package/dist/docs/reference/model/ThreadedNutOptions.md +0 -263
- package/dist/docs/reference/model/ThreadedNutPreflight.md +0 -111
- package/dist/docs/reference/model/ThreadedNutShape.md +0 -15
- package/dist/docs/reference/model/ThreadedRodOptions.md +0 -216
- package/dist/docs/reference/model/Transform2-type.md +0 -257
- package/dist/docs/reference/model/Transform2Data.md +0 -16
- package/dist/docs/reference/model/Transform2Input.md +0 -21
- package/dist/docs/reference/model/Transform3-type.md +0 -297
- package/dist/docs/reference/model/Transform3Data.md +0 -19
- package/dist/docs/reference/model/Transform3Input.md +0 -21
- package/dist/docs/reference/model/TrapezoidalThreadProfileSpec.md +0 -97
- package/dist/docs/reference/model/TriangleMesh.md +0 -34
- package/dist/docs/reference/model/TriangleMeshAnalysis.md +0 -129
- package/dist/docs/reference/model/TriangleMeshMeasurements.md +0 -79
- package/dist/docs/reference/model/TriangleMeshTopologyAnalysis.md +0 -131
- package/dist/docs/reference/model/TriangularThreadProfileSpec.md +0 -96
- package/dist/docs/reference/model/Vector2-type.md +0 -271
- package/dist/docs/reference/model/Vector2Data.md +0 -15
- package/dist/docs/reference/model/Vector2Input.md +0 -21
- package/dist/docs/reference/model/Vector3-type.md +0 -283
- package/dist/docs/reference/model/Vector3Data.md +0 -15
- package/dist/docs/reference/model/Vector3Input.md +0 -21
- package/dist/docs/reference/model/VectorTextLayout.md +0 -40
- package/dist/docs/reference/model/VectorTextMetrics.md +0 -100
- package/dist/docs/reference/model/bounds2.md +0 -37
- package/dist/docs/reference/model/bounds3.md +0 -37
- package/dist/docs/reference/model/categories/bounds.md +0 -38
- package/dist/docs/reference/model/categories/contracts.md +0 -16
- package/dist/docs/reference/model/categories/core-values-errors.md +0 -44
- package/dist/docs/reference/model/categories/explicit-profiles.md +0 -34
- package/dist/docs/reference/model/categories/paths.md +0 -42
- package/dist/docs/reference/model/categories/resolution.md +0 -20
- package/dist/docs/reference/model/immutableBuffer.md +0 -49
- package/dist/docs/reference/model/isGeometryError.md +0 -34
- package/dist/docs/reference/model/matchProfiles.md +0 -42
- package/dist/docs/reference/model/path2.md +0 -54
- package/dist/docs/reference/model/path3.md +0 -49
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +0 -87
- package/dist/docs/reference/model/preflightThreadedNut.md +0 -103
- package/dist/docs/reference/model/preflightThreadedRod.md +0 -87
- package/dist/docs/reference/model/transform2.md +0 -46
- package/dist/docs/reference/model/transform3.md +0 -48
- package/dist/docs/reference/model/vector2.md +0 -40
- package/dist/docs/reference/model/vector3.md +0 -47
- package/dist/docs/reference/text/Bounds2Data.md +0 -34
- package/dist/docs/reference/text/Vector2Data.md +0 -7
- package/dist/docs/reference/text/VectorTextLayout.md +0 -34
- package/dist/docs/reference/text/VectorTextMetrics.md +0 -94
- package/dist/engine/export-3mf.js +0 -23
- package/dist/engine/operations/patterns.js +0 -47
- package/dist/engine/serialize-3mf.js +0 -116
- 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/mesh/mesh-types.js → export/types.js} +0 -0
- /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/{primitive-options.js → mesh/types.js} +0 -0
- /package/dist/{engine/mesh-view-cache.js → geometry/mesh/view-cache.js} +0 -0
- /package/dist/geometry/{text-layout.js → primitives/options.js} +0 -0
|
@@ -1,14 +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 {
|
|
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";
|
|
14
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
|
*
|
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
import { curveFailure,
|
|
1
|
+
import { curveFailure, validateCurvePoint3 } from "../curves/evaluation.js";
|
|
2
2
|
import { assertSampleVertexCount, createPlanarSampleWriter, createSpatialSampleWriter, resolveSamplingBudget, } from "../curves/sampling.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
if (!Number.isFinite(value))
|
|
9
|
-
curveFailure("NON_FINITE_VALUE", "Curve extent exceeds finite arithmetic.");
|
|
10
|
-
return value;
|
|
11
|
-
};
|
|
12
|
-
function resamplePolyline(path, dimensions, options, createWriter, includeTangents = true) {
|
|
3
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits } from "../sampling/limits.js";
|
|
4
|
+
import { resolveGeometryResolution } from "../sampling/resolution.js";
|
|
5
|
+
import { createPathTraversal, locatePathDistance, pathEdgeLength, writePathPoint, writePathTangent, } from "./traversal.js";
|
|
6
|
+
const isArray = (value) => Array.isArray(value);
|
|
7
|
+
function resamplePolyline(path, dimensions, options, createWriter, output = {}) {
|
|
13
8
|
const maximum = resolveSamplingBudget(options);
|
|
9
|
+
if (!isArray(path))
|
|
10
|
+
curveFailure("INVALID_ARGUMENT", "Polyline points must be an array.");
|
|
14
11
|
if (options.closed !== undefined && typeof options.closed !== "boolean")
|
|
15
12
|
curveFailure("INVALID_ARGUMENT", "closed must be a boolean.");
|
|
16
13
|
const closed = options.closed ?? false;
|
|
@@ -19,42 +16,35 @@ function resamplePolyline(path, dimensions, options, createWriter, includeTangen
|
|
|
19
16
|
assertSamplingCount(path.length, "sampleCurve", resolveGeometrySamplingLimits(options.limits).maxPathPoints, "Polyline input exceeds the configured path point ceiling.");
|
|
20
17
|
if (options.segments !== undefined)
|
|
21
18
|
assertSampleVertexCount(options.segments + (closed ? 0 : 1), maximum);
|
|
22
|
-
// Keep caller point references only within this synchronous operation. Unlike 2D promotion,
|
|
23
|
-
// normalization needs no extra 3D vector for every input point.
|
|
24
19
|
const points = [];
|
|
25
|
-
const
|
|
26
|
-
let
|
|
27
|
-
|
|
28
|
-
if (input.length !== dimensions)
|
|
20
|
+
const count = path.length;
|
|
21
|
+
for (let index = 0; index < count; index++) {
|
|
22
|
+
const input = path[index];
|
|
23
|
+
if (!isArray(input) || input.length !== dimensions)
|
|
29
24
|
curveFailure(dimensions === 2 ? "INVALID_ARGUMENT" : "NON_FINITE_VALUE", dimensions === 2
|
|
30
25
|
? "Planar curve points must have two coordinates."
|
|
31
26
|
: "Curve coordinates must be finite three-dimensional points.");
|
|
32
|
-
|
|
27
|
+
const point = output.ownedInput
|
|
28
|
+
? input
|
|
29
|
+
: dimensions === 2
|
|
30
|
+
? [input[0], input[1]]
|
|
31
|
+
: [input[0], input[1], input[2]];
|
|
32
|
+
if (!output.ownedInput && !point.every(Number.isFinite))
|
|
33
33
|
curveFailure("NON_FINITE_VALUE", "Curve coordinates must be finite three-dimensional points.");
|
|
34
34
|
const previous = points.at(-1);
|
|
35
|
-
|
|
36
|
-
if (previous !== undefined && length === 0)
|
|
35
|
+
if (previous !== undefined && pathEdgeLength(previous, point) === 0)
|
|
37
36
|
continue;
|
|
38
|
-
|
|
39
|
-
if (!Number.isFinite(total))
|
|
40
|
-
curveFailure("NON_FINITE_VALUE", "Polyline length exceeds finite arithmetic.");
|
|
41
|
-
points.push(input);
|
|
42
|
-
lengths.push(total);
|
|
37
|
+
points.push(point);
|
|
43
38
|
}
|
|
44
39
|
if (closed) {
|
|
45
|
-
if (points.length > 1 &&
|
|
40
|
+
if (points.length > 1 && pathEdgeLength(points[0], points.at(-1)) === 0) {
|
|
46
41
|
points.pop();
|
|
47
|
-
lengths.pop();
|
|
48
|
-
total = lengths.at(-1) ?? 0;
|
|
49
42
|
}
|
|
50
43
|
if (points.length < 3)
|
|
51
44
|
curveFailure("DEGENERATE_GEOMETRY", "A closed polyline needs at least three distinct consecutive points.");
|
|
52
|
-
total += distance(points.at(-1), points[0]);
|
|
53
|
-
if (!Number.isFinite(total))
|
|
54
|
-
curveFailure("NON_FINITE_VALUE", "Polyline length exceeds finite arithmetic.");
|
|
55
|
-
points.push(points[0]);
|
|
56
|
-
lengths.push(total);
|
|
57
45
|
}
|
|
46
|
+
const traversal = createPathTraversal(points, closed);
|
|
47
|
+
const total = traversal.length;
|
|
58
48
|
if (total === 0)
|
|
59
49
|
curveFailure("DEGENERATE_GEOMETRY", "A zero-length polyline cannot be resampled.");
|
|
60
50
|
const policy = options.segments === undefined
|
|
@@ -62,7 +52,7 @@ function resamplePolyline(path, dimensions, options, createWriter, includeTangen
|
|
|
62
52
|
: undefined;
|
|
63
53
|
const segments = options.segments ??
|
|
64
54
|
(policy?.maxSegmentLength === undefined
|
|
65
|
-
? points.length - 1
|
|
55
|
+
? points.length - (closed ? 0 : 1)
|
|
66
56
|
: Math.max(closed ? 3 : 1, Math.ceil(total / policy.maxSegmentLength)));
|
|
67
57
|
if (closed && segments < 3)
|
|
68
58
|
curveFailure("INVALID_ARGUMENT", "Closed polyline sampling needs at least three segments.");
|
|
@@ -70,39 +60,29 @@ function resamplePolyline(path, dimensions, options, createWriter, includeTangen
|
|
|
70
60
|
assertSampleVertexCount(vertexCount, maximum);
|
|
71
61
|
const writer = createWriter();
|
|
72
62
|
const point = [0, 0, 0], tangent = [0, 0, 0];
|
|
73
|
-
let source =
|
|
63
|
+
let source = 0;
|
|
74
64
|
for (let i = 0; i < vertexCount; i++) {
|
|
75
65
|
const at = total * (i / segments);
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const a = points[source - 1], b = points[source];
|
|
80
|
-
if (i === 0 || i === segments) {
|
|
81
|
-
const endpoint = i === 0 ? points[0] : points.at(-1);
|
|
82
|
-
point[0] = endpoint[0];
|
|
83
|
-
point[1] = endpoint[1];
|
|
84
|
-
point[2] = z(endpoint);
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
const t = (at - lengths[source - 1]) / (lengths[source] - lengths[source - 1]);
|
|
88
|
-
// Preserve the original direct interpolation order used by existing mechanical paths.
|
|
89
|
-
point[0] = a[0] + (b[0] - a[0]) * t;
|
|
90
|
-
point[1] = a[1] + (b[1] - a[1]) * t;
|
|
91
|
-
point[2] = z(a) + (z(b) - z(a)) * t;
|
|
92
|
-
}
|
|
66
|
+
const location = locatePathDistance(traversal, at, source);
|
|
67
|
+
source = location.edgeIndex;
|
|
68
|
+
writePathPoint(traversal, location, point);
|
|
93
69
|
validateCurvePoint3(point);
|
|
94
|
-
if (
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
70
|
+
if (closed &&
|
|
71
|
+
i === vertexCount - 1 &&
|
|
72
|
+
point.every((coordinate, axis) => coordinate === (points[0][axis] ?? 0)))
|
|
73
|
+
curveFailure("DEGENERATE_GEOMETRY", "Closed resampling must not repeat its seam point; select a different segment count.");
|
|
74
|
+
if (output.tangents !== false)
|
|
75
|
+
writePathTangent(traversal, location, tangent);
|
|
100
76
|
writer.append(point, tangent);
|
|
101
77
|
}
|
|
102
78
|
return writer.finish();
|
|
103
79
|
}
|
|
104
80
|
/**
|
|
105
81
|
* Resamples a spatial polyline at equal arc lengths with directed outgoing tangents.
|
|
82
|
+
*
|
|
83
|
+
* @param path - XYZ points in millimetres; duplicate neighbors are removed.
|
|
84
|
+
* @param options - Closure and exact intervals or physical edge spacing.
|
|
85
|
+
*
|
|
106
86
|
* @remarks Open paths retain both endpoints; closed paths include the closing edge and omit the
|
|
107
87
|
* repeated seam. Repeated adjacent inputs and explicit closing duplicates are removed. Physical
|
|
108
88
|
* maxSegmentLength bounds arc-length intervals; exact counts override that policy. Output edges
|
|
@@ -115,7 +95,12 @@ function resamplePolyline(path, dimensions, options, createWriter, includeTangen
|
|
|
115
95
|
export function resamplePolyline3(path, options = {}) {
|
|
116
96
|
return resamplePolyline(path, 3, options, createSpatialSampleWriter);
|
|
117
97
|
}
|
|
118
|
-
/**
|
|
98
|
+
/**
|
|
99
|
+
* Resamples a planar polyline with the same point, tangent, seam and budget guarantees as 3D.
|
|
100
|
+
*
|
|
101
|
+
* @param path - XY points in millimetres; duplicate neighbors are removed.
|
|
102
|
+
* @param options - Closure and exact intervals or physical edge spacing.
|
|
103
|
+
*
|
|
119
104
|
* @remarks Only final 2D output vectors are copied and frozen. No immutable 3D intermediate is built.
|
|
120
105
|
* @example
|
|
121
106
|
* ```ts
|
|
@@ -133,7 +118,7 @@ export function resamplePath2Points(path, options) {
|
|
|
133
118
|
points.push([point[0], point[1]]);
|
|
134
119
|
},
|
|
135
120
|
finish: () => points,
|
|
136
|
-
}), false);
|
|
121
|
+
}), { tangents: false, ownedInput: true });
|
|
137
122
|
}
|
|
138
123
|
/** Internal points-only writer; avoids calculating and allocating tangents discarded by Path3. */
|
|
139
124
|
export function resamplePath3Points(path, options) {
|
|
@@ -143,5 +128,5 @@ export function resamplePath3Points(path, options) {
|
|
|
143
128
|
points.push([point[0], point[1], point[2]]);
|
|
144
129
|
},
|
|
145
130
|
finish: () => points,
|
|
146
|
-
}), false);
|
|
131
|
+
}), { tangents: false, ownedInput: true });
|
|
147
132
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
2
|
import { length3, normalize3, subtract3 } from "../math/vector3.js";
|
|
3
|
-
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling
|
|
4
|
-
import { path3InputData } from "./
|
|
3
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling/limits.js";
|
|
4
|
+
import { path3InputData } from "./value.js";
|
|
5
5
|
const invalidPath = (message, operation) => {
|
|
6
6
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation });
|
|
7
7
|
};
|
|
@@ -12,69 +12,6 @@ const requireFinitePathValues = (values, operation) => {
|
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
|
-
const segmentLengths = (path, closed) => path.map((point, index) => {
|
|
16
|
-
if (!closed && index === path.length - 1)
|
|
17
|
-
return 0;
|
|
18
|
-
const next = path[(index + 1) % path.length];
|
|
19
|
-
const delta = subtract3(next, point);
|
|
20
|
-
return Math.hypot(delta[0], delta[1], delta[2]);
|
|
21
|
-
});
|
|
22
|
-
/**
|
|
23
|
-
* Places an exact item count at equal arc-length intervals along a sampled path.
|
|
24
|
-
*
|
|
25
|
-
* Coordinates are unit-agnostic. Closed paths must omit their duplicated seam;
|
|
26
|
-
* open paths include both endpoints when `count` is greater than one.
|
|
27
|
-
* Coordinates and total length must be finite. Input points and output placements are each
|
|
28
|
-
* limited by maxPathPoints (default 100000); exact counts exceeding that ceiling reject before length calculation.
|
|
29
|
-
* Closure defaults to the path value's metadata, or false for tuples. An explicit conflicting closure rejects.
|
|
30
|
-
* Invalid arguments and degenerate paths throw GeometryError.
|
|
31
|
-
*/
|
|
32
|
-
export const distributeAlongPath = (input, count, closed, limits = {}) => {
|
|
33
|
-
if (!Number.isInteger(count) || count < 1) {
|
|
34
|
-
invalidPath("Path distribution count must be a positive integer.", "distributeAlongPath");
|
|
35
|
-
}
|
|
36
|
-
const maximum = resolveGeometrySamplingLimits(limits).maxPathPoints;
|
|
37
|
-
assertSamplingCount(count, "distributeAlongPath", maximum);
|
|
38
|
-
const { points: path, closed: closePath } = path3InputData(input, closed, limits);
|
|
39
|
-
if (path.length < (closePath ? 3 : 2)) {
|
|
40
|
-
invalidPath(`${closePath ? "Closed" : "Open"} distribution paths need more points.`, "distributeAlongPath");
|
|
41
|
-
}
|
|
42
|
-
if (closePath && path[0].every((coordinate, axis) => coordinate === path.at(-1)[axis]))
|
|
43
|
-
invalidPath("Closed distribution paths omit their repeated seam point.", "distributeAlongPath");
|
|
44
|
-
const lengths = segmentLengths(path, closePath);
|
|
45
|
-
const total = lengths.reduce((sum, length) => sum + length, 0);
|
|
46
|
-
requireFinitePathValues([total], "distributeAlongPath");
|
|
47
|
-
if (!(total > 0))
|
|
48
|
-
throw new GeometryError("DEGENERATE_GEOMETRY", "Cannot distribute along a zero-length path.", {
|
|
49
|
-
operation: "distributeAlongPath",
|
|
50
|
-
});
|
|
51
|
-
const denominator = closePath ? count : Math.max(1, count - 1);
|
|
52
|
-
let traversed = 0;
|
|
53
|
-
let segment = 0;
|
|
54
|
-
return Array.from({ length: count }, (_, itemIndex) => {
|
|
55
|
-
const target = total * (itemIndex / denominator);
|
|
56
|
-
for (; segment < lengths.length; segment += 1) {
|
|
57
|
-
const length = lengths[segment];
|
|
58
|
-
if (length === 0)
|
|
59
|
-
continue;
|
|
60
|
-
if (target <= traversed + length || segment === lengths.length - 1) {
|
|
61
|
-
const start = path[segment];
|
|
62
|
-
const end = path[(segment + 1) % path.length];
|
|
63
|
-
const amount = Math.min(1, Math.max(0, (target - traversed) / length));
|
|
64
|
-
return {
|
|
65
|
-
position: [
|
|
66
|
-
start[0] + (end[0] - start[0]) * amount,
|
|
67
|
-
start[1] + (end[1] - start[1]) * amount,
|
|
68
|
-
start[2] + (end[2] - start[2]) * amount,
|
|
69
|
-
],
|
|
70
|
-
tangent: normalize3(subtract3(end, start)),
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
traversed += length;
|
|
74
|
-
}
|
|
75
|
-
return invalidPath("Path distribution invariant failed.", "distributeAlongPath");
|
|
76
|
-
});
|
|
77
|
-
};
|
|
78
15
|
/**
|
|
79
16
|
* Replaces each vertex of a non-duplicated closed polyline with a sampled
|
|
80
17
|
* quadratic corner in the same coordinate system as the input.
|
|
@@ -82,8 +19,12 @@ export const distributeAlongPath = (input, count, closed, limits = {}) => {
|
|
|
82
19
|
* `radius` is the desired tangent distance for a right angle and is capped to
|
|
83
20
|
* 45% of adjacent segment lengths to prevent neighboring corners from crossing.
|
|
84
21
|
* The returned path does not duplicate its closing point.
|
|
85
|
-
*
|
|
86
|
-
*
|
|
22
|
+
* Invalid coordinates, topology, dimensions, or exhausted budgets throw GeometryError.
|
|
23
|
+
*
|
|
24
|
+
* @param input - Closed XYZ path or points in millimetres, without a repeated seam.
|
|
25
|
+
* @param radius - Positive right-angle tangent distance in millimetres.
|
|
26
|
+
* @param segmentsPerCorner - Quadratic intervals per corner; a positive integer.
|
|
27
|
+
* @param limits - Limits on input and rounded path points.
|
|
87
28
|
*/
|
|
88
29
|
export const roundClosedPolylinePath = (input, radius, segmentsPerCorner, limits = {}) => {
|
|
89
30
|
const maximum = resolveGeometrySamplingLimits(limits).maxPathPoints;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { sampleCubicControlPoints } from "../curves/sampling.js";
|
|
2
|
+
import { GeometryError } from "../errors.js";
|
|
3
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling/limits.js";
|
|
4
|
+
import { pathEdgeLength } from "./traversal.js";
|
|
5
|
+
import { path2, path2InputData, path3, path3InputData, } from "./value.js";
|
|
6
|
+
const fail = (message) => {
|
|
7
|
+
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "spline" });
|
|
8
|
+
};
|
|
9
|
+
function optionsPolicy(options, input) {
|
|
10
|
+
if (typeof options !== "object" || options === null || Array.isArray(options))
|
|
11
|
+
fail("Spline options must be an object.");
|
|
12
|
+
if (options.closed !== undefined && typeof options.closed !== "boolean")
|
|
13
|
+
fail("Spline closed must be a boolean.");
|
|
14
|
+
if (options.segmentsPerSpan !== undefined &&
|
|
15
|
+
(!Number.isSafeInteger(options.segmentsPerSpan) || options.segmentsPerSpan < 1))
|
|
16
|
+
fail("segmentsPerSpan must be a positive safe integer.");
|
|
17
|
+
const maximum = resolveGeometrySamplingLimits(options.limits).maxPathPoints;
|
|
18
|
+
if (Array.isArray(input) && options.segmentsPerSpan !== undefined)
|
|
19
|
+
assertSamplingCount((input.length - (options.closed ? 0 : 1)) * options.segmentsPerSpan +
|
|
20
|
+
(options.closed ? 0 : 1), "spline", maximum);
|
|
21
|
+
return maximum;
|
|
22
|
+
}
|
|
23
|
+
/** Converts one centripetal Catmull–Rom span into equivalent cubic Bézier controls. */
|
|
24
|
+
function controls(points, edge, closed) {
|
|
25
|
+
const count = points.length;
|
|
26
|
+
const start = points[edge], end = points[(edge + 1) % count];
|
|
27
|
+
const before = points[(edge - 1 + count) % count], after = points[(edge + 2) % count];
|
|
28
|
+
// Square-root chord lengths define the knots; one-sided secants avoid extrapolated endpoints.
|
|
29
|
+
const span = Math.sqrt(pathEdgeLength(start, end));
|
|
30
|
+
const previous = !closed && edge === 0 ? span : Math.sqrt(pathEdgeLength(before, start));
|
|
31
|
+
const next = !closed && edge === count - 2 ? span : Math.sqrt(pathEdgeLength(end, after));
|
|
32
|
+
const first = [], second = [];
|
|
33
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
34
|
+
const a = start[axis] ?? 0, b = end[axis] ?? 0;
|
|
35
|
+
const delta = b - a;
|
|
36
|
+
const incoming = !closed && edge === 0 ? delta : a - (before[axis] ?? 0);
|
|
37
|
+
const outgoing = !closed && edge === count - 2 ? delta : (after[axis] ?? 0) - b;
|
|
38
|
+
// Unit-span derivatives become Bézier controls at one third of each endpoint tangent.
|
|
39
|
+
const firstTangent = (incoming / previous) * span * (span / (previous + span)) +
|
|
40
|
+
delta * (previous / (previous + span));
|
|
41
|
+
const secondTangent = delta * (next / (span + next)) + (outgoing / next) * span * (span / (span + next));
|
|
42
|
+
first.push(a + firstTangent / 3);
|
|
43
|
+
second.push(b - secondTangent / 3);
|
|
44
|
+
}
|
|
45
|
+
return [
|
|
46
|
+
[start[0], start[1], start[2] ?? 0],
|
|
47
|
+
first,
|
|
48
|
+
second,
|
|
49
|
+
[end[0], end[1], end[2] ?? 0],
|
|
50
|
+
];
|
|
51
|
+
}
|
|
52
|
+
function splinePoints(points, closed, options, maximum) {
|
|
53
|
+
if (points.length < (closed ? 3 : 2))
|
|
54
|
+
fail("Open splines need two waypoints; closed splines need three.");
|
|
55
|
+
const spans = points.length - (closed ? 0 : 1);
|
|
56
|
+
// Every span needs an output edge, even before adaptive physical refinement.
|
|
57
|
+
assertSamplingCount(spans * (options.segmentsPerSpan ?? 1) + (closed ? 0 : 1), "spline", maximum);
|
|
58
|
+
for (let edge = 0; edge < spans; edge++)
|
|
59
|
+
if (pathEdgeLength(points[edge], points[(edge + 1) % points.length]) === 0)
|
|
60
|
+
fail("Spline waypoints must not contain adjacent duplicates or a repeated closed seam.");
|
|
61
|
+
const result = [points[0]];
|
|
62
|
+
for (let edge = 0; edge < spans; edge++) {
|
|
63
|
+
const omitSeam = closed && edge === spans - 1;
|
|
64
|
+
// Reserve one endpoint for each later span; the final closed endpoint is not retained.
|
|
65
|
+
const reserved = spans - edge - 1 - (closed ? 1 : 0);
|
|
66
|
+
const budget = maximum - result.length - reserved + 1;
|
|
67
|
+
sampleCubicControlPoints(controls(points, edge, closed), {
|
|
68
|
+
...(options.segmentsPerSpan === undefined ? {} : { segments: options.segmentsPerSpan }),
|
|
69
|
+
...(options.resolution === undefined ? {} : { resolution: options.resolution }),
|
|
70
|
+
limits: options.limits ?? {},
|
|
71
|
+
maxVertices: budget,
|
|
72
|
+
}, (sample, endpoint) => {
|
|
73
|
+
if (omitSeam && endpoint)
|
|
74
|
+
return;
|
|
75
|
+
result.push((points[0].length === 2
|
|
76
|
+
? [sample[0], sample[1]]
|
|
77
|
+
: [sample[0], sample[1], sample[2]]));
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Samples an immutable XY centripetal Catmull–Rom path through every waypoint in traversal order.
|
|
84
|
+
* Open endpoints use one-sided secants; closed paths are periodic and omit their repeated seam.
|
|
85
|
+
* Adjacent duplicate waypoints reject. The default physical policy bounds each cubic control hull;
|
|
86
|
+
* segmentsPerSpan instead selects exact uniform parameters per span. Sampling never coarsens to fit
|
|
87
|
+
* maxPathPoints. Invalid topology, nonfinite arithmetic, and exhausted budgets throw GeometryError.
|
|
88
|
+
*
|
|
89
|
+
* @param input - XY waypoints in millimetres; path values retain closure.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* const route = spline2([[0, 0], [10, 8], [25, 0]], { resolution: { maxChordError: 0.02 } });
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export function spline2(input, options = {}) {
|
|
97
|
+
const maximum = optionsPolicy(options, input);
|
|
98
|
+
const data = path2InputData(input, options.closed, options.limits);
|
|
99
|
+
return path2(splinePoints(data.points, data.closed, options, maximum), {
|
|
100
|
+
closed: data.closed,
|
|
101
|
+
limits: options.limits ?? {},
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Samples an immutable XYZ centripetal Catmull–Rom path with the same interpolation, seam, sampling, and ceiling rules as spline2.
|
|
106
|
+
*
|
|
107
|
+
* @param input - XYZ waypoints in millimetres; path values retain closure.
|
|
108
|
+
*/
|
|
109
|
+
export function spline3(input, options = {}) {
|
|
110
|
+
const maximum = optionsPolicy(options, input);
|
|
111
|
+
const data = path3InputData(input, options.closed, options.limits);
|
|
112
|
+
return path3(splinePoints(data.points, data.closed, options, maximum), {
|
|
113
|
+
closed: data.closed,
|
|
114
|
+
limits: options.limits ?? {},
|
|
115
|
+
});
|
|
116
|
+
}
|