@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
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { GeometryError } from "../geometry/errors.js";
|
|
2
|
+
import { renderValidatedMesh } from "../geometry/mesh/render-buffers.js";
|
|
3
|
+
import { captureExport } from "./capture.js";
|
|
4
|
+
import { collectExport, createExportWriter } from "./writer.js";
|
|
5
|
+
const alignedLength = (length) => Math.ceil(length / 4) * 4;
|
|
6
|
+
const linearChannel = (value) => value <= 0.04045 ? value / 12.92 : ((value + 0.055) / 1.055) ** 2.4;
|
|
7
|
+
function baseColor(color) {
|
|
8
|
+
return [
|
|
9
|
+
linearChannel(Number.parseInt(color.slice(1, 3), 16) / 255),
|
|
10
|
+
linearChannel(Number.parseInt(color.slice(3, 5), 16) / 255),
|
|
11
|
+
linearChannel(Number.parseInt(color.slice(5, 7), 16) / 255),
|
|
12
|
+
1,
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Serializes captured local meshes as uncompressed glTF 2.0 binary, in metres and Y-up.
|
|
17
|
+
* Preserves named parts, placement, shared geometry and display appearance. Authored normals take
|
|
18
|
+
* precedence over crease-aware shading; no engine, renderer or optional compression codec is loaded.
|
|
19
|
+
*
|
|
20
|
+
* @param parts - Parts in output order, with local geometry in millimetres and Z-up.
|
|
21
|
+
*/
|
|
22
|
+
export function exportGlb(parts, options = {}) {
|
|
23
|
+
return collectExport((sink) => writeGlb(parts, sink, options));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Writes owned GLB chunks with backpressure, cancellation and explicit output limits.
|
|
27
|
+
* Plans accessor and container lengths before writing, then emits bounded binary chunks.
|
|
28
|
+
* Hosts own sink completion, scheduling and recovery after a partially written failure.
|
|
29
|
+
*
|
|
30
|
+
* @param parts - Parts in output order; mutable geometry is copied before writing.
|
|
31
|
+
* @param sink - Receives each chunk; return a promise to pause writing.
|
|
32
|
+
*/
|
|
33
|
+
export async function writeGlb(parts, sink, options = {}) {
|
|
34
|
+
const captured = captureExport(parts, options, "glb");
|
|
35
|
+
const creaseAngle = options.creaseAngle ?? 20;
|
|
36
|
+
if (!Number.isFinite(creaseAngle) || creaseAngle < 0 || creaseAngle > 180)
|
|
37
|
+
throw new GeometryError("INVALID_ARGUMENT", "Crease angle must be from 0 through 180 degrees.", {
|
|
38
|
+
operation: "exportGlb",
|
|
39
|
+
});
|
|
40
|
+
const writer = createExportWriter(captured, sink, "glb");
|
|
41
|
+
const accessors = [];
|
|
42
|
+
const bufferViews = [];
|
|
43
|
+
const attributes = [];
|
|
44
|
+
const materials = [];
|
|
45
|
+
const meshes = [];
|
|
46
|
+
const nodes = [];
|
|
47
|
+
const geometryAccessors = new Map();
|
|
48
|
+
const materialIndices = new Map();
|
|
49
|
+
const meshIndices = new Map();
|
|
50
|
+
let binaryLength = 0;
|
|
51
|
+
let lastYield = performance.now();
|
|
52
|
+
const addAttribute = (data, componentType, type, bounds) => {
|
|
53
|
+
const byteLength = data.length * (componentType === 5123 ? 2 : 4);
|
|
54
|
+
const bufferView = bufferViews.length;
|
|
55
|
+
bufferViews.push({
|
|
56
|
+
buffer: 0,
|
|
57
|
+
byteOffset: binaryLength,
|
|
58
|
+
byteLength,
|
|
59
|
+
target: type === "SCALAR" ? 34963 : 34962,
|
|
60
|
+
});
|
|
61
|
+
binaryLength += alignedLength(byteLength);
|
|
62
|
+
if (binaryLength > captured.limits.maxOutputBytes || binaryLength >= 0x1_0000_0000)
|
|
63
|
+
throw new GeometryError("COMPLEXITY_LIMIT", "GLB binary data exceeds the output limits.", {
|
|
64
|
+
operation: "exportGlb",
|
|
65
|
+
});
|
|
66
|
+
attributes.push({ data, componentType, byteLength });
|
|
67
|
+
const accessor = accessors.length;
|
|
68
|
+
accessors.push({
|
|
69
|
+
bufferView,
|
|
70
|
+
componentType,
|
|
71
|
+
count: data.length / (type === "VEC3" ? 3 : 1),
|
|
72
|
+
type,
|
|
73
|
+
...bounds,
|
|
74
|
+
});
|
|
75
|
+
return accessor;
|
|
76
|
+
};
|
|
77
|
+
for (const part of captured.parts) {
|
|
78
|
+
captured.signal?.throwIfAborted();
|
|
79
|
+
let geometry = geometryAccessors.get(part.geometry);
|
|
80
|
+
if (geometry === undefined) {
|
|
81
|
+
const rendered = part.geometry.normals === undefined
|
|
82
|
+
? renderValidatedMesh(part.geometry, creaseAngle)
|
|
83
|
+
: { ...part.geometry, normals: part.geometry.normals };
|
|
84
|
+
const min = [Infinity, Infinity, Infinity];
|
|
85
|
+
const max = [-Infinity, -Infinity, -Infinity];
|
|
86
|
+
for (let index = 0; index < rendered.positions.length; index += 3)
|
|
87
|
+
for (let axis = 0; axis < 3; axis += 1) {
|
|
88
|
+
min[axis] = Math.min(min[axis], rendered.positions[index + axis]);
|
|
89
|
+
max[axis] = Math.max(max[axis], rendered.positions[index + axis]);
|
|
90
|
+
}
|
|
91
|
+
const position = addAttribute(rendered.positions, 5126, "VEC3", { min, max });
|
|
92
|
+
const normal = addAttribute(rendered.normals, 5126, "VEC3");
|
|
93
|
+
let maximumIndex = 0;
|
|
94
|
+
for (const index of rendered.indices)
|
|
95
|
+
maximumIndex = Math.max(maximumIndex, index);
|
|
96
|
+
// glTF reserves the component type's largest integer for primitive restart.
|
|
97
|
+
const indices = addAttribute(rendered.indices, maximumIndex < 65_535 ? 5123 : 5125, "SCALAR");
|
|
98
|
+
geometry = { position, normal, indices };
|
|
99
|
+
geometryAccessors.set(part.geometry, geometry);
|
|
100
|
+
}
|
|
101
|
+
const color = part.color ?? "#ffffff";
|
|
102
|
+
const materialKey = `${part.materialId ?? ""}:${color.toLowerCase()}`;
|
|
103
|
+
let material = materialIndices.get(materialKey);
|
|
104
|
+
if (material === undefined) {
|
|
105
|
+
material = materials.length;
|
|
106
|
+
materials.push({
|
|
107
|
+
...(part.materialId === undefined
|
|
108
|
+
? {}
|
|
109
|
+
: { name: part.materialId, extras: { materialId: part.materialId } }),
|
|
110
|
+
pbrMetallicRoughness: {
|
|
111
|
+
baseColorFactor: baseColor(color),
|
|
112
|
+
metallicFactor: 0,
|
|
113
|
+
roughnessFactor: 1,
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
materialIndices.set(materialKey, material);
|
|
117
|
+
}
|
|
118
|
+
const meshKey = `${geometry.position}:${material}`;
|
|
119
|
+
let mesh = meshIndices.get(meshKey);
|
|
120
|
+
if (mesh === undefined) {
|
|
121
|
+
mesh = meshes.length;
|
|
122
|
+
meshes.push({
|
|
123
|
+
primitives: [
|
|
124
|
+
{
|
|
125
|
+
attributes: { POSITION: geometry.position, NORMAL: geometry.normal },
|
|
126
|
+
indices: geometry.indices,
|
|
127
|
+
material,
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
});
|
|
131
|
+
meshIndices.set(meshKey, mesh);
|
|
132
|
+
}
|
|
133
|
+
const transform = part.transform;
|
|
134
|
+
const matrix = Array.from({ length: 16 }, (_, index) => transform[(index % 4) * 4 + Math.floor(index / 4)]);
|
|
135
|
+
nodes.push({ name: part.id, mesh, matrix });
|
|
136
|
+
if (performance.now() - lastYield >= 16) {
|
|
137
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
138
|
+
lastYield = performance.now();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
captured.signal?.throwIfAborted();
|
|
142
|
+
const rootNode = nodes.length;
|
|
143
|
+
nodes.push({
|
|
144
|
+
name: captured.name,
|
|
145
|
+
// Column-major matrix: x'=x/1000, y'=z/1000, z'=-y/1000.
|
|
146
|
+
matrix: [0.001, 0, 0, 0, 0, 0, -0.001, 0, 0, 0.001, 0, 0, 0, 0, 0, 1],
|
|
147
|
+
children: Array.from({ length: rootNode }, (_, index) => index),
|
|
148
|
+
});
|
|
149
|
+
const json = new TextEncoder().encode(JSON.stringify({
|
|
150
|
+
asset: { version: "2.0", generator: "MetaMesh" },
|
|
151
|
+
scene: 0,
|
|
152
|
+
scenes: [{ name: captured.name, nodes: [rootNode] }],
|
|
153
|
+
nodes,
|
|
154
|
+
meshes,
|
|
155
|
+
materials,
|
|
156
|
+
accessors,
|
|
157
|
+
bufferViews,
|
|
158
|
+
buffers: [{ byteLength: binaryLength }],
|
|
159
|
+
}));
|
|
160
|
+
const paddedJsonLength = alignedLength(json.byteLength);
|
|
161
|
+
const fileLength = 12 + 8 + paddedJsonLength + 8 + binaryLength;
|
|
162
|
+
if (fileLength >= 0x1_0000_0000 || fileLength > captured.limits.maxOutputBytes)
|
|
163
|
+
throw new GeometryError("COMPLEXITY_LIMIT", "GLB container exceeds the output limits.", {
|
|
164
|
+
operation: "exportGlb",
|
|
165
|
+
});
|
|
166
|
+
const header = new Uint8Array(20);
|
|
167
|
+
const headerView = new DataView(header.buffer);
|
|
168
|
+
headerView.setUint32(0, 0x46546c67, true);
|
|
169
|
+
headerView.setUint32(4, 2, true);
|
|
170
|
+
headerView.setUint32(8, fileLength, true);
|
|
171
|
+
headerView.setUint32(12, paddedJsonLength, true);
|
|
172
|
+
headerView.setUint32(16, 0x4e4f534a, true);
|
|
173
|
+
await writer.write(header);
|
|
174
|
+
const paddedJson = new Uint8Array(paddedJsonLength).fill(0x20);
|
|
175
|
+
paddedJson.set(json);
|
|
176
|
+
for (let start = 0; start < paddedJson.length; start += 65_536)
|
|
177
|
+
await writer.write(paddedJson.slice(start, start + 65_536));
|
|
178
|
+
const binaryHeader = new Uint8Array(8);
|
|
179
|
+
const binaryHeaderView = new DataView(binaryHeader.buffer);
|
|
180
|
+
binaryHeaderView.setUint32(0, binaryLength, true);
|
|
181
|
+
binaryHeaderView.setUint32(4, 0x004e4942, true);
|
|
182
|
+
await writer.write(binaryHeader);
|
|
183
|
+
for (const attribute of attributes) {
|
|
184
|
+
const width = attribute.componentType === 5123 ? 2 : 4;
|
|
185
|
+
const elementsPerChunk = 65_536 / width;
|
|
186
|
+
for (let start = 0; start < attribute.data.length; start += elementsPerChunk) {
|
|
187
|
+
const count = Math.min(elementsPerChunk, attribute.data.length - start);
|
|
188
|
+
const chunk = new Uint8Array(count * width);
|
|
189
|
+
const view = new DataView(chunk.buffer);
|
|
190
|
+
for (let index = 0; index < count; index += 1) {
|
|
191
|
+
const value = attribute.data[start + index];
|
|
192
|
+
if (attribute.componentType === 5126)
|
|
193
|
+
view.setFloat32(index * width, value, true);
|
|
194
|
+
else if (attribute.componentType === 5123)
|
|
195
|
+
view.setUint16(index * width, value, true);
|
|
196
|
+
else
|
|
197
|
+
view.setUint32(index * width, value, true);
|
|
198
|
+
}
|
|
199
|
+
await writer.write(chunk);
|
|
200
|
+
}
|
|
201
|
+
const padding = alignedLength(attribute.byteLength) - attribute.byteLength;
|
|
202
|
+
if (padding > 0)
|
|
203
|
+
await writer.write(new Uint8Array(padding));
|
|
204
|
+
}
|
|
205
|
+
const diagnostics = [];
|
|
206
|
+
const assigned = captured.parts.filter((part) => part.materialId !== undefined);
|
|
207
|
+
if (assigned.length > 0)
|
|
208
|
+
diagnostics.push({
|
|
209
|
+
code: "MATERIAL_ASSIGNMENTS_DROPPED",
|
|
210
|
+
message: "GLB preserves material identities as metadata and appearance, without print material assignment semantics.",
|
|
211
|
+
partIds: assigned.map((part) => part.id),
|
|
212
|
+
});
|
|
213
|
+
return writer.report(diagnostics);
|
|
214
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Runtime-independent completed-mesh export. All input coordinates are millimetres, right-handed, and Z-up. @packageDocumentation */
|
|
2
|
+
export { export3mf, write3mf } from "./3mf.js";
|
|
3
|
+
export { exportStl, writeStl } from "./stl.js";
|
|
4
|
+
export { exportGlb, writeGlb } from "./glb.js";
|
|
5
|
+
export { defaultExportLimits } from "./limits.js";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { GeometryError } from "../geometry/errors.js";
|
|
2
|
+
/** Default standalone export policy: 64 parts, one million vertices, two million triangles, 96 MiB input, 512 MiB output. */
|
|
3
|
+
export const defaultExportLimits = Object.freeze({
|
|
4
|
+
maxParts: 64,
|
|
5
|
+
maxVertices: 1_000_000,
|
|
6
|
+
maxTriangles: 2_000_000,
|
|
7
|
+
maxBytes: 96 * 1024 * 1024,
|
|
8
|
+
maxOutputBytes: 512 * 1024 * 1024,
|
|
9
|
+
});
|
|
10
|
+
export function resolveExportLimits(overrides = {}) {
|
|
11
|
+
if (typeof overrides !== "object" || overrides === null || Array.isArray(overrides))
|
|
12
|
+
throw new GeometryError("INVALID_ARGUMENT", "Export limits must be an object.");
|
|
13
|
+
const limits = { ...defaultExportLimits, ...overrides };
|
|
14
|
+
for (const key of Object.keys(defaultExportLimits))
|
|
15
|
+
if (!Number.isSafeInteger(limits[key]) || limits[key] < 1)
|
|
16
|
+
throw new GeometryError("INVALID_ARGUMENT", `${key} must be a positive safe integer.`);
|
|
17
|
+
return Object.freeze(limits);
|
|
18
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { GeometryError } from "../geometry/errors.js";
|
|
2
|
+
import { IDENTITY_TRANSFORM3 } from "../geometry/transforms/affine3.js";
|
|
3
|
+
import { captureExport } from "./capture.js";
|
|
4
|
+
import { collectExport, createExportWriter } from "./writer.js";
|
|
5
|
+
const TRIANGLES_PER_CHUNK = 1_024;
|
|
6
|
+
/**
|
|
7
|
+
* Serializes a captured model as binary STL in millimetres and Z-up coordinates.
|
|
8
|
+
* Placement is baked into triangles. Diagnostics describe dropped names, appearance and materials.
|
|
9
|
+
* Mutable input is captured before the first await; no engine or renderer is needed.
|
|
10
|
+
*
|
|
11
|
+
* @param parts - Parts in output order, with local geometry in millimetres.
|
|
12
|
+
*/
|
|
13
|
+
export function exportStl(parts, options = {}) {
|
|
14
|
+
return collectExport((sink) => writeStl(parts, sink, options));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Writes owned binary STL chunks to a sink, awaiting backpressure after each bounded chunk.
|
|
18
|
+
* The host owns sink completion and recovery after failure. Honors cancellation and output limits.
|
|
19
|
+
*
|
|
20
|
+
* @param parts - Parts in output order; mutable geometry is copied before writing.
|
|
21
|
+
* @param sink - Receives each chunk; return a promise to pause writing.
|
|
22
|
+
*/
|
|
23
|
+
export async function writeStl(parts, sink, options = {}) {
|
|
24
|
+
const captured = captureExport(parts, options, "stl");
|
|
25
|
+
const writer = createExportWriter(captured, sink, "stl");
|
|
26
|
+
const triangleCount = captured.parts.reduce((total, part) => total + part.geometry.indices.length / 3, 0);
|
|
27
|
+
const byteLength = 84 + triangleCount * 50;
|
|
28
|
+
if (triangleCount >= 0x1_0000_0000 || byteLength > captured.limits.maxOutputBytes)
|
|
29
|
+
throw new GeometryError("COMPLEXITY_LIMIT", "Binary STL exceeds the output limits.", {
|
|
30
|
+
operation: "exportStl",
|
|
31
|
+
});
|
|
32
|
+
const header = new Uint8Array(84);
|
|
33
|
+
header.set(new TextEncoder().encode(`MetaMesh ${captured.name}`).subarray(0, 80));
|
|
34
|
+
new DataView(header.buffer).setUint32(80, triangleCount, true);
|
|
35
|
+
await writer.write(header);
|
|
36
|
+
let chunk = new Uint8Array(Math.min(TRIANGLES_PER_CHUNK, triangleCount) * 50);
|
|
37
|
+
let view = new DataView(chunk.buffer);
|
|
38
|
+
let writtenTriangles = 0;
|
|
39
|
+
let chunkTriangles = 0;
|
|
40
|
+
const triangle = new Float32Array(9);
|
|
41
|
+
for (const part of captured.parts) {
|
|
42
|
+
const { positions, indices } = part.geometry;
|
|
43
|
+
const matrix = part.transform;
|
|
44
|
+
const identity = matrix.every((value, index) => Object.is(value, IDENTITY_TRANSFORM3[index]));
|
|
45
|
+
for (let offset = 0; offset < indices.length; offset += 3) {
|
|
46
|
+
for (let corner = 0; corner < 3; corner += 1) {
|
|
47
|
+
const index = indices[offset + corner] * 3;
|
|
48
|
+
const x = positions[index];
|
|
49
|
+
const y = positions[index + 1];
|
|
50
|
+
const z = positions[index + 2];
|
|
51
|
+
if (identity) {
|
|
52
|
+
// Capture already validated these Float32 values. Match the identity dot product's
|
|
53
|
+
// positive zero without repeating its arithmetic for every indexed triangle corner.
|
|
54
|
+
triangle[corner * 3] = x === 0 ? 0 : x;
|
|
55
|
+
triangle[corner * 3 + 1] = y === 0 ? 0 : y;
|
|
56
|
+
triangle[corner * 3 + 2] = z === 0 ? 0 : z;
|
|
57
|
+
}
|
|
58
|
+
else
|
|
59
|
+
for (let axis = 0; axis < 3; axis += 1) {
|
|
60
|
+
const row = axis * 4;
|
|
61
|
+
const value = Math.fround(matrix[row] * x + matrix[row + 1] * y + matrix[row + 2] * z + matrix[row + 3]);
|
|
62
|
+
if (!Number.isFinite(value))
|
|
63
|
+
throw new GeometryError("NON_FINITE_VALUE", "Placed STL positions must fit finite Float32 coordinates.", { operation: "exportStl" });
|
|
64
|
+
triangle[corner * 3 + axis] = value;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const ux = triangle[3] - triangle[0];
|
|
68
|
+
const uy = triangle[4] - triangle[1];
|
|
69
|
+
const uz = triangle[5] - triangle[2];
|
|
70
|
+
const vx = triangle[6] - triangle[0];
|
|
71
|
+
const vy = triangle[7] - triangle[1];
|
|
72
|
+
const vz = triangle[8] - triangle[2];
|
|
73
|
+
const nx = uy * vz - uz * vy;
|
|
74
|
+
const ny = uz * vx - ux * vz;
|
|
75
|
+
const nz = ux * vy - uy * vx;
|
|
76
|
+
const length = Math.hypot(nx, ny, nz);
|
|
77
|
+
if (length === 0)
|
|
78
|
+
throw new GeometryError("DEGENERATE_GEOMETRY", "Placed STL triangles must retain nonzero area in Float32 coordinates.", { operation: "exportStl" });
|
|
79
|
+
const target = chunkTriangles * 50;
|
|
80
|
+
view.setFloat32(target, nx === 0 ? 0 : nx / length, true);
|
|
81
|
+
view.setFloat32(target + 4, ny === 0 ? 0 : ny / length, true);
|
|
82
|
+
view.setFloat32(target + 8, nz === 0 ? 0 : nz / length, true);
|
|
83
|
+
for (let index = 0; index < 9; index += 1)
|
|
84
|
+
view.setFloat32(target + 12 + index * 4, triangle[index], true);
|
|
85
|
+
view.setUint16(target + 48, 0, true);
|
|
86
|
+
chunkTriangles += 1;
|
|
87
|
+
writtenTriangles += 1;
|
|
88
|
+
if (chunkTriangles * 50 === chunk.byteLength) {
|
|
89
|
+
await writer.write(chunk);
|
|
90
|
+
chunkTriangles = 0;
|
|
91
|
+
if (writtenTriangles < triangleCount) {
|
|
92
|
+
chunk = new Uint8Array(Math.min(TRIANGLES_PER_CHUNK, triangleCount - writtenTriangles) * 50);
|
|
93
|
+
view = new DataView(chunk.buffer);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const diagnostics = [
|
|
99
|
+
{
|
|
100
|
+
code: "PART_NAMES_DROPPED",
|
|
101
|
+
message: "Binary STL stores triangles without semantic part names.",
|
|
102
|
+
partIds: captured.parts.map((part) => part.id),
|
|
103
|
+
},
|
|
104
|
+
];
|
|
105
|
+
const colored = captured.parts.filter((part) => part.color !== undefined);
|
|
106
|
+
if (colored.length > 0)
|
|
107
|
+
diagnostics.push({
|
|
108
|
+
code: "APPEARANCE_DROPPED",
|
|
109
|
+
message: "Portable binary STL does not preserve display colors.",
|
|
110
|
+
partIds: colored.map((part) => part.id),
|
|
111
|
+
});
|
|
112
|
+
const assigned = captured.parts.filter((part) => part.materialId !== undefined);
|
|
113
|
+
if (assigned.length > 0)
|
|
114
|
+
diagnostics.push({
|
|
115
|
+
code: "MATERIAL_ASSIGNMENTS_DROPPED",
|
|
116
|
+
message: "Binary STL does not preserve print material assignments.",
|
|
117
|
+
partIds: assigned.map((part) => part.id),
|
|
118
|
+
});
|
|
119
|
+
return writer.report(diagnostics);
|
|
120
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { GeometryError } from "../geometry/errors.js";
|
|
2
|
+
const mediaTypes = {
|
|
3
|
+
"3mf": "model/3mf",
|
|
4
|
+
stl: "model/stl",
|
|
5
|
+
glb: "model/gltf-binary",
|
|
6
|
+
};
|
|
7
|
+
/** Shared output accounting and backpressure. Input resources are never passed to the host sink. */
|
|
8
|
+
export function createExportWriter(captured, sink, format) {
|
|
9
|
+
if (typeof sink !== "function")
|
|
10
|
+
throw new TypeError("An export sink must be a function.");
|
|
11
|
+
let byteLength = 0;
|
|
12
|
+
let lastYield = performance.now();
|
|
13
|
+
return {
|
|
14
|
+
async write(chunk) {
|
|
15
|
+
captured.signal?.throwIfAborted();
|
|
16
|
+
const chunkLength = chunk.byteLength;
|
|
17
|
+
if (byteLength + chunkLength > captured.limits.maxOutputBytes)
|
|
18
|
+
throw new GeometryError("COMPLEXITY_LIMIT", "Encoded export exceeds maxOutputBytes.", {
|
|
19
|
+
operation: `export${format}`,
|
|
20
|
+
});
|
|
21
|
+
await sink(chunk);
|
|
22
|
+
// The sink owns this chunk and may transfer/detach its buffer before resolving.
|
|
23
|
+
byteLength += chunkLength;
|
|
24
|
+
// Yield to the host's task queue so a Worker can receive cancellation while writing.
|
|
25
|
+
if (performance.now() - lastYield >= 16) {
|
|
26
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
27
|
+
lastYield = performance.now();
|
|
28
|
+
}
|
|
29
|
+
captured.signal?.throwIfAborted();
|
|
30
|
+
},
|
|
31
|
+
report(diagnostics = []) {
|
|
32
|
+
return Object.freeze({
|
|
33
|
+
mediaType: mediaTypes[format],
|
|
34
|
+
extension: format,
|
|
35
|
+
byteLength,
|
|
36
|
+
diagnostics: Object.freeze([...diagnostics]),
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** Buffered convenience over the same streaming implementation; allocation is bounded by the writer's output ceiling. */
|
|
42
|
+
export async function collectExport(write) {
|
|
43
|
+
const chunks = [];
|
|
44
|
+
const report = await write((chunk) => {
|
|
45
|
+
chunks.push(chunk);
|
|
46
|
+
});
|
|
47
|
+
const bytes = new Uint8Array(report.byteLength);
|
|
48
|
+
let offset = 0;
|
|
49
|
+
for (const chunk of chunks) {
|
|
50
|
+
bytes.set(chunk, offset);
|
|
51
|
+
offset += chunk.byteLength;
|
|
52
|
+
}
|
|
53
|
+
return Object.freeze({ ...report, bytes });
|
|
54
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
2
|
function fail(operation, message) {
|
|
3
3
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation });
|
|
4
4
|
}
|
|
@@ -81,6 +81,8 @@ export function fitBounds(source, target, options = {}) {
|
|
|
81
81
|
*
|
|
82
82
|
* Each minimum Y/Z becomes zero, and the first minimum X becomes zero. Supply bounds after
|
|
83
83
|
* any intended part rotation; translations apply to those bounds. An empty input returns [].
|
|
84
|
+
*
|
|
85
|
+
* @param bounds - XYZ bounds in row order, after any part rotation.
|
|
84
86
|
*/
|
|
85
87
|
export function layoutRow(bounds, options = {}) {
|
|
86
88
|
const operation = "layoutRow";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { GeometryError, isGeometryError } from "../errors.js";
|
|
2
|
+
import { immutableMathClass } from "../math/immutable-value.js";
|
|
3
|
+
import { vector2, vector2Data, vector3, vector3Data, } from "../math/vector-value.js";
|
|
4
|
+
import { boundsCenter, boundsSize, containsBounds, validateBounds } from "./operations.js";
|
|
5
5
|
function fail(dimension, message) {
|
|
6
6
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation: `bounds${dimension}` });
|
|
7
7
|
}
|
|
@@ -64,19 +64,19 @@ const PlanarBounds = /* @__PURE__ */ immutableMathClass(class PlanarBounds {
|
|
|
64
64
|
min;
|
|
65
65
|
max;
|
|
66
66
|
constructor(data) {
|
|
67
|
-
this
|
|
68
|
-
this.
|
|
69
|
-
this
|
|
67
|
+
this.min = vector2(data.min);
|
|
68
|
+
this.max = vector2(data.max);
|
|
69
|
+
this.#data = Object.freeze({ min: this.min.toData(), max: this.max.toData() });
|
|
70
70
|
Object.freeze(this);
|
|
71
71
|
}
|
|
72
72
|
size() {
|
|
73
|
-
return vector2(boundsSize(this));
|
|
73
|
+
return vector2(boundsSize(this.#data));
|
|
74
74
|
}
|
|
75
75
|
center() {
|
|
76
|
-
return vector2(boundsCenter(this));
|
|
76
|
+
return vector2(boundsCenter(this.#data));
|
|
77
77
|
}
|
|
78
78
|
containsBounds(other) {
|
|
79
|
-
return containsBounds(this, other);
|
|
79
|
+
return containsBounds(this.#data, snapshot(other, 2));
|
|
80
80
|
}
|
|
81
81
|
toData() {
|
|
82
82
|
return this.#data;
|
|
@@ -87,19 +87,19 @@ const SpatialBounds = /* @__PURE__ */ immutableMathClass(class SpatialBounds {
|
|
|
87
87
|
min;
|
|
88
88
|
max;
|
|
89
89
|
constructor(data) {
|
|
90
|
-
this
|
|
91
|
-
this.
|
|
92
|
-
this
|
|
90
|
+
this.min = vector3(data.min);
|
|
91
|
+
this.max = vector3(data.max);
|
|
92
|
+
this.#data = Object.freeze({ min: this.min.toData(), max: this.max.toData() });
|
|
93
93
|
Object.freeze(this);
|
|
94
94
|
}
|
|
95
95
|
size() {
|
|
96
|
-
return vector3(boundsSize(this));
|
|
96
|
+
return vector3(boundsSize(this.#data));
|
|
97
97
|
}
|
|
98
98
|
center() {
|
|
99
|
-
return vector3(boundsCenter(this));
|
|
99
|
+
return vector3(boundsCenter(this.#data));
|
|
100
100
|
}
|
|
101
101
|
containsBounds(other) {
|
|
102
|
-
return containsBounds(this, other);
|
|
102
|
+
return containsBounds(this.#data, snapshot(other, 3));
|
|
103
103
|
}
|
|
104
104
|
toData() {
|
|
105
105
|
return this.#data;
|
|
@@ -111,8 +111,10 @@ const SpatialBounds = /* @__PURE__ */ immutableMathClass(class SpatialBounds {
|
|
|
111
111
|
* Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
|
|
112
112
|
* overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
|
|
113
113
|
* Size construction centers on the origin unless `center` is false. Size and extrema are exclusive.
|
|
114
|
-
* Compiled Generator packages passing these values to host recipes or
|
|
115
|
-
*
|
|
114
|
+
* Compiled Generator packages passing these values to host recipes or memo data require
|
|
115
|
+
* the current Modeling runtime.
|
|
116
|
+
*
|
|
117
|
+
* @param input - Ordered extrema, nonnegative size, or an existing XY bounds value to snapshot.
|
|
116
118
|
*/
|
|
117
119
|
export function bounds2(input) {
|
|
118
120
|
return new PlanarBounds(snapshot(input, 2));
|
|
@@ -123,8 +125,10 @@ export function bounds2(input) {
|
|
|
123
125
|
* Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
|
|
124
126
|
* overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
|
|
125
127
|
* Size construction centers on the origin unless `center` is false. Size and extrema are exclusive.
|
|
126
|
-
* Compiled Generator packages passing these values to host recipes or
|
|
127
|
-
*
|
|
128
|
+
* Compiled Generator packages passing these values to host recipes or memo data require
|
|
129
|
+
* the current Modeling runtime.
|
|
130
|
+
*
|
|
131
|
+
* @param input - Ordered extrema, nonnegative size, or an existing XYZ bounds value to snapshot.
|
|
128
132
|
*/
|
|
129
133
|
export function bounds3(input) {
|
|
130
134
|
return new SpatialBounds(snapshot(input, 3));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
2
|
// This parameter-space probe only resolves stationary tangent direction; it does not control
|
|
3
|
-
// geometric sampling tolerance or move output points.
|
|
3
|
+
// geometric sampling tolerance or move output points.
|
|
4
4
|
const STATIONARY_TANGENT_PROBE = 0.000001;
|
|
5
5
|
/** @internal Shared structured failures for evaluation and sampling. */
|
|
6
6
|
export function curveFailure(code, message) {
|
|
@@ -34,7 +34,7 @@ export function curveDistance(a, b) {
|
|
|
34
34
|
curveFailure("NON_FINITE_VALUE", "Curve extent exceeds finite arithmetic.");
|
|
35
35
|
return result;
|
|
36
36
|
}
|
|
37
|
-
/** @internal Weighted interpolation
|
|
37
|
+
/** @internal Weighted interpolation avoids overflow between finite large coordinates. */
|
|
38
38
|
export function interpolateCurvePoint(a, b, t, result) {
|
|
39
39
|
result[0] = a[0] * (1 - t) + b[0] * t;
|
|
40
40
|
result[1] = a[1] * (1 - t) + b[1] * t;
|
|
@@ -59,7 +59,7 @@ export function curveDirection(a, b, result) {
|
|
|
59
59
|
result[2] = b[2] - a[2];
|
|
60
60
|
normalizeCurveDirection(result, result);
|
|
61
61
|
}
|
|
62
|
-
/** @internal
|
|
62
|
+
/** @internal Bounds deviation from the finite chord rather than its infinite supporting line. */
|
|
63
63
|
export function distanceToCurveChord(point, start, end) {
|
|
64
64
|
const extent = curveDistance(start, end);
|
|
65
65
|
if (extent === 0)
|
|
@@ -120,8 +120,7 @@ export class CubicEvaluator {
|
|
|
120
120
|
interpolateCurvePoint(this.#d, this.#e, t, result);
|
|
121
121
|
}
|
|
122
122
|
tangent(t, point, result) {
|
|
123
|
-
// Profile correspondence needs points only
|
|
124
|
-
// retaining the established derivative arithmetic without allocating unused controls.
|
|
123
|
+
// Profile correspondence needs points only; calculate derivative controls only for tangents.
|
|
125
124
|
const control = this.#control;
|
|
126
125
|
const derivative = (this.#derivative ??= [
|
|
127
126
|
[control[1][0] - control[0][0], control[1][1] - control[0][1], control[1][2] - control[0][2]],
|
|
@@ -136,7 +135,7 @@ export class CubicEvaluator {
|
|
|
136
135
|
return;
|
|
137
136
|
}
|
|
138
137
|
// At stationary endpoints or cusps, use an outgoing one-sided secant when available.
|
|
139
|
-
// A fixed
|
|
138
|
+
// A fixed parameter probe keeps the fallback independent of output spacing.
|
|
140
139
|
if (t < 1) {
|
|
141
140
|
this.point(Math.min(1, t + STATIONARY_TANGENT_PROBE), this.#probe);
|
|
142
141
|
if (curveDistance(point, this.#probe) > 0) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits } from "../sampling/limits.js";
|
|
2
|
+
import { resolveArcSegments, resolveGeometryResolution, } from "../sampling/resolution.js";
|
|
3
3
|
import { CubicEvaluator, curveDirection, curveDistance, curveFailure, distanceToCurveChord, interpolateCurvePoint, liftPointTo3D, normalizeCurveDirection, planarCubicControl, splitCubicControl, validateCurvePoint3, } from "./evaluation.js";
|
|
4
4
|
/** @internal Final planar results never create a discarded immutable 3D snapshot. */
|
|
5
5
|
export function createPlanarSampleWriter() {
|
|
@@ -125,8 +125,8 @@ function sampleArc(curve, options, maximum, createWriter) {
|
|
|
125
125
|
}
|
|
126
126
|
return writer.finish();
|
|
127
127
|
}
|
|
128
|
-
|
|
129
|
-
|
|
128
|
+
// The control hull bounds curve deviation and each sampled edge's physical length.
|
|
129
|
+
function cubicControlMeetsPolicy(control, policy) {
|
|
130
130
|
const length = curveDistance(control[0], control[1]) +
|
|
131
131
|
curveDistance(control[1], control[2]) +
|
|
132
132
|
curveDistance(control[2], control[3]);
|
|
@@ -134,7 +134,8 @@ export function cubicControlMeetsPolicy(control, policy) {
|
|
|
134
134
|
return (flat <= policy.maxChordError &&
|
|
135
135
|
(policy.maxSegmentLength === undefined || length <= policy.maxSegmentLength));
|
|
136
136
|
}
|
|
137
|
-
/**
|
|
137
|
+
/**
|
|
138
|
+
* @internal Profiles use a checked uniform parameter grid instead of an adaptive leaf count.
|
|
138
139
|
* Every control interval must meet the physical policy, including flatter regions subdivided to
|
|
139
140
|
* match curved ones. The depth-first traversal retains only one bounded stack, without output points.
|
|
140
141
|
*/
|
|
@@ -192,6 +193,20 @@ function resolveCubicParameters(control, options, maximum) {
|
|
|
192
193
|
}
|
|
193
194
|
return parameters;
|
|
194
195
|
}
|
|
196
|
+
/** @internal Point-only cubic sampling reuses physical subdivision without discarded tangent calculations. */
|
|
197
|
+
export function sampleCubicControlPoints(control, options, append) {
|
|
198
|
+
for (const point of control)
|
|
199
|
+
validateCurvePoint3(point);
|
|
200
|
+
const parameters = resolveCubicParameters(control, options, resolveSamplingBudget(options));
|
|
201
|
+
const evaluator = new CubicEvaluator(control);
|
|
202
|
+
const point = [0, 0, 0];
|
|
203
|
+
// The caller already retains this span's first waypoint.
|
|
204
|
+
for (let index = 1; index < parameters.length; index++) {
|
|
205
|
+
const t = parameters[index];
|
|
206
|
+
evaluator.point(t, point);
|
|
207
|
+
append(point, t === 1);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
195
210
|
function sampleCubicBezier(curve, options, maximum, createWriter) {
|
|
196
211
|
const control = [
|
|
197
212
|
validateCurvePoint3(curve.start),
|
|
@@ -226,6 +241,10 @@ function sampleCurve(curve, options, createWriter) {
|
|
|
226
241
|
}
|
|
227
242
|
/**
|
|
228
243
|
* Samples a spatial curve, preserving endpoints and directed unit tangents.
|
|
244
|
+
*
|
|
245
|
+
* @param curve - XYZ curve in millimetres; arc angles use degrees.
|
|
246
|
+
* @param options - Physical sampling or an exact interval count, within vertex limits.
|
|
247
|
+
*
|
|
229
248
|
* @remarks Exact counts use uniform curve parameters, not equal physical distances. Adaptive cubics
|
|
230
249
|
* bound the full control hull. Full-circle arcs repeat their endpoint; closed polylines do not.
|
|
231
250
|
* @example
|
|
@@ -236,7 +255,12 @@ function sampleCurve(curve, options, createWriter) {
|
|
|
236
255
|
export function sampleCurve3(curve, options = {}) {
|
|
237
256
|
return sampleCurve(curve, options, createSpatialSampleWriter);
|
|
238
257
|
}
|
|
239
|
-
/**
|
|
258
|
+
/**
|
|
259
|
+
* Samples a planar curve with the same guarantees and policy as spatial sampling.
|
|
260
|
+
*
|
|
261
|
+
* @param curve - XY curve in millimetres; arc angles use degrees.
|
|
262
|
+
* @param options - Physical sampling or an exact interval count, within vertex limits.
|
|
263
|
+
*
|
|
240
264
|
* @remarks Returned planar points and tangents are copied and frozen. At stationary tangents, outgoing secants are preferred and endpoints use a backward fallback.
|
|
241
265
|
* @example
|
|
242
266
|
* ```ts
|