@metamesh/modeling 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/README.md +34 -18
- package/dist/api/engine.d.ts +217 -121
- package/dist/api/export.d.ts +123 -79
- package/dist/api/geometry.d.ts +406 -2102
- package/dist/api/index.d.ts +472 -1798
- package/dist/api/math.d.ts +315 -0
- package/dist/api/mechanical.d.ts +1041 -0
- package/dist/api/mesh.d.ts +360 -88
- package/dist/api/text.d.ts +24 -44
- package/dist/docs/guides/concepts.md +67 -33
- package/dist/docs/guides/exporting.md +88 -0
- package/dist/docs/guides/fonts.md +5 -3
- package/dist/docs/guides/fundamentals.md +12 -24
- package/dist/docs/guides/generation.md +24 -16
- package/dist/docs/guides/geometry-values.md +192 -134
- package/dist/docs/guides/hosting.md +51 -96
- package/dist/docs/guides/profiles-and-extrusion.md +159 -11
- package/dist/docs/guides/recipes.md +121 -28
- package/dist/docs/guides/resolution-and-inspection.md +43 -23
- package/dist/docs/guides/solid-joins.md +12 -2
- package/dist/docs/guides/standalone-model.md +4 -2
- package/dist/docs/guides/svg-and-text.md +76 -39
- package/dist/docs/guides/sweeps-and-lofts.md +88 -44
- package/dist/docs/guides/transforms-and-placement.md +113 -103
- package/dist/docs/guides/workers.md +166 -0
- package/dist/docs/manifest.json +4133 -4153
- package/dist/docs/reference/engine/GenerationOptions.md +2 -3
- package/dist/docs/reference/engine/GeometryResource.md +6 -6
- package/dist/docs/reference/engine/ModelDependencies.md +2 -2
- package/dist/docs/reference/engine/ModelEngine.md +2 -3
- package/dist/docs/reference/engine/ModelEngineOptions.md +2 -7
- package/dist/docs/reference/engine/ModelPart.md +6 -6
- package/dist/docs/reference/engine/ModelResult.md +2 -2
- package/dist/docs/reference/engine/ModelRunArguments.md +2 -2
- package/dist/docs/reference/engine/ModelRunOptions.md +2 -3
- package/dist/docs/reference/engine/ModelSession.md +2 -2
- package/dist/docs/reference/engine/SessionOptions.md +2 -3
- package/dist/docs/reference/engine/categories/host-lifecycle.md +9 -3
- package/dist/docs/reference/engine/checkModel.md +6 -2
- package/dist/docs/reference/engine/createModelEngine.md +5 -3
- package/dist/docs/reference/engine/defaultModelingLimits.md +4 -11
- package/dist/docs/reference/engine/modelingWasmUrl.md +2 -2
- package/dist/docs/reference/engine.md +7 -1
- package/dist/docs/reference/export/Export3mfOptions.md +2 -6
- package/dist/docs/reference/export/ExportDiagnostic.md +2 -14
- package/dist/docs/reference/export/ExportFormat.md +2 -14
- package/dist/docs/reference/export/ExportGeometry.md +3 -15
- package/dist/docs/reference/export/ExportGlbOptions.md +14 -18
- package/dist/docs/reference/export/ExportLimits.md +2 -14
- package/dist/docs/reference/export/ExportMaterial.md +2 -14
- package/dist/docs/reference/export/ExportOptions.md +2 -14
- package/dist/docs/reference/export/ExportPart.md +2 -14
- package/dist/docs/reference/export/ExportReport.md +2 -14
- package/dist/docs/reference/export/ExportSink.md +5 -15
- package/dist/docs/reference/export/ExportStlOptions.md +2 -6
- package/dist/docs/reference/export/ExportedFile.md +14 -26
- package/dist/docs/reference/export/categories/mesh-serialization.md +9 -3
- package/dist/docs/reference/export/defaultExportLimits.md +2 -2
- package/dist/docs/reference/export/export3mf.md +4 -6
- package/dist/docs/reference/export/exportGlb.md +8 -10
- package/dist/docs/reference/export/exportStl.md +4 -6
- package/dist/docs/reference/export/write3mf.md +6 -6
- package/dist/docs/reference/export/writeGlb.md +10 -10
- package/dist/docs/reference/export/writeStl.md +6 -6
- package/dist/docs/reference/export.md +9 -3
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +4 -4
- package/dist/docs/reference/geometry/Anchor3-type.md +3 -7
- package/dist/docs/reference/geometry/Anchor3Options.md +70 -0
- package/dist/docs/reference/geometry/ArcCurve2.md +3 -3
- package/dist/docs/reference/geometry/ArcCurve3.md +3 -3
- package/dist/docs/reference/geometry/AttachOptions.md +4 -9
- package/dist/docs/reference/geometry/Bounds2-type.md +9 -30
- package/dist/docs/reference/geometry/Bounds2Data.md +2 -19
- package/dist/docs/reference/geometry/Bounds2Input.md +2 -10
- package/dist/docs/reference/geometry/Bounds2Options.md +2 -6
- package/dist/docs/reference/geometry/Bounds3-type.md +9 -30
- package/dist/docs/reference/geometry/Bounds3Data.md +2 -15
- package/dist/docs/reference/geometry/Bounds3Input.md +2 -10
- package/dist/docs/reference/geometry/Bounds3Options.md +2 -6
- package/dist/docs/reference/geometry/BoundsFit2.md +2 -2
- package/dist/docs/reference/geometry/BoundsFit3.md +2 -2
- package/dist/docs/reference/geometry/BoundsFitOptions.md +2 -2
- package/dist/docs/reference/geometry/BoxAnchorFace.md +3 -3
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +3 -3
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +3 -7
- package/dist/docs/reference/geometry/CircleContourOptions.md +3 -7
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +3 -12
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +2 -2
- package/dist/docs/reference/geometry/CircularSampling.md +2 -2
- package/dist/docs/reference/geometry/CircularSamplingOptions.md +2 -2
- package/dist/docs/reference/geometry/Contour.md +4 -9
- package/dist/docs/reference/geometry/ContourCurve.md +3 -3
- package/dist/docs/reference/geometry/ContourPoint.md +3 -3
- package/dist/docs/reference/geometry/ContourSegment.md +3 -3
- package/dist/docs/reference/geometry/CorrespondingComponent.md +3 -7
- package/dist/docs/reference/geometry/CorrespondingContour.md +3 -7
- package/dist/docs/reference/geometry/CorrespondingProfile.md +3 -7
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +4 -8
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +3 -3
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +3 -3
- package/dist/docs/reference/geometry/Curve2.md +3 -3
- package/dist/docs/reference/geometry/Curve3.md +3 -3
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +3 -11
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +3 -3
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +4 -4
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +2 -2
- package/dist/docs/reference/geometry/EdgeTreatment.md +2 -6
- package/dist/docs/reference/geometry/EllipseContourOptions.md +3 -7
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +9 -18
- package/dist/docs/reference/geometry/FittedTextLayout.md +2 -2
- package/dist/docs/reference/geometry/{Frame3.md → Frame3-type.md} +4 -11
- package/dist/docs/reference/geometry/Frame3Options.md +69 -0
- package/dist/docs/reference/geometry/GeometryError.md +2 -6
- package/dist/docs/reference/geometry/GeometryErrorCode.md +2 -6
- package/dist/docs/reference/geometry/GeometryErrorContext.md +2 -6
- package/dist/docs/reference/geometry/GeometryResolution.md +2 -10
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +3 -11
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +3 -11
- package/dist/docs/reference/geometry/GridPatternOptions.md +7 -9
- package/dist/docs/reference/geometry/ImmutableBuffer-type.md +2 -10
- package/dist/docs/reference/geometry/LineCurve2.md +3 -3
- package/dist/docs/reference/geometry/LineCurve3.md +3 -3
- package/dist/docs/reference/geometry/LinearPatternOptions.md +2 -6
- package/dist/docs/reference/geometry/LoftPlacement.md +13 -21
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +3 -7
- package/dist/docs/reference/geometry/ModelingLimits.md +2 -14
- package/dist/docs/reference/geometry/NumericArray.md +2 -10
- package/dist/docs/reference/geometry/Path2-type.md +153 -12
- package/dist/docs/reference/geometry/Path2Data.md +3 -11
- package/dist/docs/reference/geometry/Path2Input.md +3 -11
- package/dist/docs/reference/geometry/Path3-type.md +153 -12
- package/dist/docs/reference/geometry/Path3Data.md +3 -11
- package/dist/docs/reference/geometry/Path3Input.md +3 -11
- package/dist/docs/reference/geometry/PathFrame.md +3 -3
- package/dist/docs/reference/geometry/PathLocation.md +3 -11
- package/dist/docs/reference/geometry/PathNormalGuide.md +4 -12
- package/dist/docs/reference/geometry/PathOptions.md +3 -7
- package/dist/docs/reference/geometry/PathPatternOptions.md +3 -7
- package/dist/docs/reference/geometry/PathPlacement.md +5 -5
- package/dist/docs/reference/geometry/PathResamplingOptions.md +3 -11
- package/dist/docs/reference/geometry/PathStation.md +87 -0
- package/dist/docs/reference/geometry/PathSubdivisionOptions.md +44 -0
- package/dist/docs/reference/geometry/Pivot2Options.md +3 -11
- package/dist/docs/reference/geometry/Pivot3Options.md +3 -11
- package/dist/docs/reference/geometry/PolygonData.md +4 -8
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +3 -3
- package/dist/docs/reference/geometry/Profile.md +3 -4
- package/dist/docs/reference/geometry/ProfileComponent2.md +3 -7
- package/dist/docs/reference/geometry/ProfileContour2.md +3 -7
- package/dist/docs/reference/geometry/ProfileSpan2.md +3 -7
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +5 -8
- package/dist/docs/reference/geometry/RadialPatternOptions.md +2 -6
- package/dist/docs/reference/geometry/RadialSizing.md +2 -6
- package/dist/docs/reference/geometry/RadialSizingOptions.md +2 -6
- package/dist/docs/reference/geometry/RectangleContourOptions.md +4 -7
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +3 -7
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +3 -7
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +3 -3
- package/dist/docs/reference/geometry/RegionData.md +3 -7
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
- package/dist/docs/reference/geometry/ResolvedGeometryResolution.md +71 -0
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +2 -2
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +2 -6
- package/dist/docs/reference/geometry/RowLayoutOptions.md +2 -2
- package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
- package/dist/docs/reference/geometry/SampleHelixOptions.md +3 -3
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
- package/dist/docs/reference/geometry/SampledCurve2.md +3 -3
- package/dist/docs/reference/geometry/SampledCurve3.md +3 -3
- package/dist/docs/reference/geometry/SideProfileCurve.md +3 -3
- package/dist/docs/reference/geometry/SideProfilePoint.md +3 -3
- package/dist/docs/reference/geometry/SideProfileSegment.md +3 -3
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +2 -6
- package/dist/docs/reference/geometry/SplineOptions.md +69 -0
- package/dist/docs/reference/geometry/StarContourOptions.md +7 -7
- package/dist/docs/reference/geometry/StrokeCap.md +2 -6
- package/dist/docs/reference/geometry/StrokeJoin.md +2 -6
- package/dist/docs/reference/geometry/StrokeOptions.md +3 -7
- package/dist/docs/reference/geometry/SvgImportOptions.md +4 -4
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +2 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +2 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +2 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +2 -2
- package/dist/docs/reference/geometry/Transform2-type.md +3 -11
- package/dist/docs/reference/geometry/Transform2Data.md +3 -11
- package/dist/docs/reference/geometry/Transform2Input.md +3 -11
- package/dist/docs/reference/geometry/Transform3-type.md +4 -12
- package/dist/docs/reference/geometry/Transform3Data.md +3 -11
- package/dist/docs/reference/geometry/Transform3Input.md +6 -13
- package/dist/docs/reference/geometry/Vector2-type.md +3 -11
- package/dist/docs/reference/geometry/Vector2Data.md +3 -15
- package/dist/docs/reference/geometry/Vector2Input.md +3 -11
- package/dist/docs/reference/geometry/Vector3-type.md +27 -11
- package/dist/docs/reference/geometry/Vector3Data.md +3 -11
- package/dist/docs/reference/geometry/Vector3Input.md +3 -11
- package/dist/docs/reference/geometry/VectorTextLayout.md +2 -10
- package/dist/docs/reference/geometry/VectorTextMetrics.md +3 -11
- package/dist/docs/reference/geometry/anchor3.md +17 -26
- package/dist/docs/reference/geometry/anchorFrame3.md +6 -6
- package/dist/docs/reference/geometry/attachmentTransform3.md +8 -8
- package/dist/docs/reference/geometry/bounds2.md +6 -8
- package/dist/docs/reference/geometry/bounds3.md +4 -6
- package/dist/docs/reference/geometry/boundsCenter.md +2 -2
- package/dist/docs/reference/geometry/boundsSize.md +2 -2
- package/dist/docs/reference/geometry/boxAnchor3.md +3 -3
- package/dist/docs/reference/geometry/categories/bounds-layout.md +9 -3
- package/dist/docs/reference/geometry/categories/curves-paths.md +24 -13
- package/dist/docs/reference/geometry/categories/immutable-data.md +40 -0
- package/dist/docs/reference/geometry/categories/pattern-placement.md +10 -4
- package/dist/docs/reference/geometry/categories/primitive-options.md +8 -13
- package/dist/docs/reference/geometry/categories/profiles-regions.md +11 -5
- package/dist/docs/reference/geometry/categories/resolution-errors.md +8 -1
- package/dist/docs/reference/geometry/categories/transforms-math.md +20 -51
- package/dist/docs/reference/geometry/categories/vector-import.md +7 -4
- package/dist/docs/reference/geometry/circleContour.md +3 -3
- package/dist/docs/reference/geometry/closeToAxis.md +7 -3
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +9 -6
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +13 -6
- package/dist/docs/reference/geometry/contourContainsPoint.md +7 -3
- package/dist/docs/reference/geometry/cylinderAnchor3.md +5 -5
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +3 -3
- package/dist/docs/reference/geometry/distributeAlongPath.md +16 -11
- package/dist/docs/reference/geometry/ellipseContour.md +3 -3
- package/dist/docs/reference/geometry/fitBounds.md +10 -2
- package/dist/docs/reference/geometry/fitTextLayout.md +5 -5
- package/dist/docs/reference/geometry/frame3.md +66 -0
- package/dist/docs/reference/geometry/gridPatternTransforms.md +6 -6
- package/dist/docs/reference/geometry/immutableBuffer.md +5 -7
- package/dist/docs/reference/geometry/isGeometryError.md +2 -6
- package/dist/docs/reference/geometry/layoutRow.md +4 -2
- package/dist/docs/reference/geometry/linearPatternTransforms.md +6 -6
- package/dist/docs/reference/geometry/matchProfiles.md +5 -3
- package/dist/docs/reference/geometry/normalizeContour.md +8 -4
- package/dist/docs/reference/geometry/normalizePolygon.md +5 -3
- package/dist/docs/reference/geometry/normalizeRegion.md +5 -3
- package/dist/docs/reference/geometry/path2.md +7 -7
- package/dist/docs/reference/geometry/path3.md +7 -7
- package/dist/docs/reference/geometry/pathPatternTransforms.md +12 -8
- package/dist/docs/reference/geometry/preflightSvgRegion.md +5 -5
- package/dist/docs/reference/geometry/radialPatternTransforms.md +5 -5
- package/dist/docs/reference/geometry/rectangleContour.md +3 -3
- package/dist/docs/reference/geometry/rectangleProfile.md +3 -4
- package/dist/docs/reference/geometry/regionArea.md +3 -3
- package/dist/docs/reference/geometry/regionBounds.md +6 -4
- package/dist/docs/reference/geometry/regularPolygonContour.md +3 -3
- package/dist/docs/reference/geometry/resamplePolyline2.md +7 -3
- package/dist/docs/reference/geometry/resamplePolyline3.md +7 -3
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +5 -5
- package/dist/docs/reference/geometry/resolveArcSegments.md +8 -6
- package/dist/docs/reference/geometry/resolveCircularSampling.md +2 -2
- package/dist/docs/reference/geometry/resolveCircularSegments.md +5 -3
- package/dist/docs/reference/geometry/{resolveExtrusionDivisions.md → resolveExtrusionSlices.md} +16 -15
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +5 -3
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +3 -3
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +12 -5
- package/dist/docs/reference/geometry/sampleContour.md +5 -5
- package/dist/docs/reference/geometry/sampleCurve2.md +7 -3
- package/dist/docs/reference/geometry/sampleCurve3.md +7 -3
- package/dist/docs/reference/geometry/sampleHelix.md +3 -3
- package/dist/docs/reference/geometry/sampleSideProfile.md +5 -5
- package/dist/docs/reference/geometry/sampleTextContours.md +3 -3
- package/dist/docs/reference/geometry/signedContourArea.md +5 -3
- package/dist/docs/reference/geometry/spline2.md +68 -0
- package/dist/docs/reference/geometry/spline3.md +62 -0
- package/dist/docs/reference/geometry/starContour.md +3 -3
- package/dist/docs/reference/geometry/strokeRegionData.md +8 -5
- package/dist/docs/reference/geometry/transform2.md +5 -7
- package/dist/docs/reference/geometry/transform3.md +23 -10
- package/dist/docs/reference/geometry/transformRegionData.md +7 -3
- package/dist/docs/reference/geometry/triangulateContour.md +6 -4
- package/dist/docs/reference/geometry/vector2.md +6 -8
- package/dist/docs/reference/geometry/vector3.md +8 -8
- package/dist/docs/reference/geometry.md +13 -18
- package/dist/docs/reference/{geometry → math}/AxisAngleRotation3.md +4 -5
- package/dist/docs/reference/math/IDENTITY_TRANSFORM3.md +20 -0
- package/dist/docs/reference/math/add2.md +38 -0
- package/dist/docs/reference/math/add3.md +46 -0
- package/dist/docs/reference/math/applyTransformDirection3.md +46 -0
- package/dist/docs/reference/math/applyTransformPoint3.md +44 -0
- package/dist/docs/reference/math/categories/tuple-matrix.md +67 -0
- package/dist/docs/reference/math/cross2.md +38 -0
- package/dist/docs/reference/math/cross3.md +44 -0
- package/dist/docs/reference/math/distance2.md +38 -0
- package/dist/docs/reference/math/distance3.md +38 -0
- package/dist/docs/reference/math/dot2.md +38 -0
- package/dist/docs/reference/math/dot3.md +44 -0
- package/dist/docs/reference/math/eulerTransform3.md +43 -0
- package/dist/docs/reference/math/inverseTransform3.md +36 -0
- package/dist/docs/reference/math/length2.md +32 -0
- package/dist/docs/reference/math/length3.md +32 -0
- package/dist/docs/reference/math/lerp2.md +46 -0
- package/dist/docs/reference/math/lerp3.md +46 -0
- package/dist/docs/reference/math/multiplyTransform3.md +46 -0
- package/dist/docs/reference/math/normalize2.md +45 -0
- package/dist/docs/reference/math/normalize3.md +45 -0
- package/dist/docs/reference/math/projectOntoPlane3.md +40 -0
- package/dist/docs/reference/math/rotate2.md +40 -0
- package/dist/docs/reference/math/rotationTransform3.md +56 -0
- package/dist/docs/reference/math/scale2.md +38 -0
- package/dist/docs/reference/math/scale3.md +44 -0
- package/dist/docs/reference/math/scaleTransform3.md +39 -0
- package/dist/docs/reference/math/subtract2.md +38 -0
- package/dist/docs/reference/math/subtract3.md +44 -0
- package/dist/docs/reference/math/transformDeterminant3.md +38 -0
- package/dist/docs/reference/math/translationTransform3.md +36 -0
- package/dist/docs/reference/math/validateRigidTransform3.md +38 -0
- package/dist/docs/reference/math/validateTransform3.md +48 -0
- package/dist/docs/reference/math.md +22 -0
- package/dist/docs/reference/{geometry → mechanical}/AcmeThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/Bevel.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/BevelSize.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ButtressPressureFlankSide.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ButtressThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleFit.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CompensatedThreadDiameters.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CustomThreadProfileSpec.md +5 -15
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearMeshKind.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearOutlineOptions.md +5 -10
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionOptions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionReport.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairSpec.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearSpec.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/InternalThreadCutterOptions.md +6 -13
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeBaseSpec.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeDimensions.md +4 -5
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeInterval.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSamplingOptions.md +5 -14
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSpec.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/METRIC_FASTENER_STANDARDS.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricFastenerSize.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricFastenerStandard.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricHexNutDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricSocketCapHeadDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/PRINTABLE_THREAD_FIT_POLICIES.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFit.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFitPolicy.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/RackPitchDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/RackPitchSpec.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/SampledThreadHelices.md +4 -8
- package/dist/docs/reference/{geometry → mechanical}/SquareThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/ThreadBevelOptions.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadCircularSegmentsOptions.md +5 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadCompensationOptions.md +4 -5
- package/dist/docs/reference/{geometry → mechanical}/ThreadEndStyle.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadEndTreatmentOptions.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadHandedness.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadHelixOptions.md +5 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInEnvelope.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInShape.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfile-type.md +5 -17
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfileBaseSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfileSpec.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadRidgeOptions.md +7 -18
- package/dist/docs/reference/{geometry → mechanical}/ThreadRole.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/ThreadSolidOptions.md +8 -15
- package/dist/docs/reference/{geometry → mechanical}/ThreadSolidPreflight.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutOptions.md +7 -14
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutPreflight.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutShape.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadedRodOptions.md +6 -13
- package/dist/docs/reference/{geometry → mechanical}/TrapezoidalThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/TriangularThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/categories/mechanical.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadDiameters.md +4 -4
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileAxially.md +12 -6
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileForFaceting.md +13 -3
- package/dist/docs/reference/{geometry → mechanical}/getMetricClearanceHoleDiameter.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/getMetricFastenerStandard.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/measureInternalCylindricalGearPairMotion.md +9 -7
- package/dist/docs/reference/{geometry → mechanical}/minimumCylindricalGearToothCountWithoutUndercut.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/preflightInternalThreadCutter.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/preflightThreadedNut.md +9 -7
- package/dist/docs/reference/{geometry → mechanical}/preflightThreadedRod.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGear.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGearPair.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveKnuckleHinge.md +9 -7
- package/dist/docs/reference/{geometry → mechanical}/resolvePrintableThreadFitPolicy.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveRackPitch.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveThreadCircularSegments.md +7 -5
- package/dist/docs/reference/{geometry → mechanical}/sampleCylindricalGearOutline.md +9 -8
- package/dist/docs/reference/{geometry → mechanical}/sampleInternalCylindricalGearSpaceOutline.md +9 -8
- package/dist/docs/reference/{geometry → mechanical}/sampleRackToothPath.md +10 -8
- package/dist/docs/reference/{geometry → mechanical}/sampleThreadHelices.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/threadProfile.md +7 -3
- package/dist/docs/reference/mechanical.md +19 -0
- package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +128 -0
- package/dist/docs/reference/{geometry → mesh}/HeightfieldMeshLimits.md +5 -13
- package/dist/docs/reference/{geometry → mesh}/HeightfieldPreflight.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/ImmutableTriangleMesh.md +5 -17
- package/dist/docs/reference/mesh/LoftMeshStation.md +32 -0
- package/dist/docs/reference/mesh/MeshRenderOptions.md +3 -3
- package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationFallbackReason.md +4 -8
- package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationOptions.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationResult.md +4 -8
- package/dist/docs/reference/{geometry → mesh}/PlanarPatchQuality.md +4 -12
- package/dist/docs/reference/mesh/RenderMesh.md +19 -19
- package/dist/docs/reference/{geometry → mesh}/SolidMeshValidationOptions.md +4 -12
- package/dist/docs/reference/{geometry → mesh}/TriangleMesh.md +8 -12
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshAnalysis.md +5 -14
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshAnalysisOptions.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshInput.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshMeasurements.md +5 -14
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshQualityOptions.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshQualityReport.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignature.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignatureOptions.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignatureTolerances.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshTopologyAnalysis.md +5 -14
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshValidationOptions.md +4 -9
- package/dist/docs/reference/mesh/analyze.md +26 -18
- package/dist/docs/reference/mesh/analyzeQuality.md +12 -12
- package/dist/docs/reference/mesh/bounds.md +5 -6
- package/dist/docs/reference/mesh/categories/operations.md +37 -4
- package/dist/docs/reference/mesh/centroid.md +5 -6
- package/dist/docs/reference/mesh/extrude.md +21 -20
- package/dist/docs/reference/mesh/heightfield.md +8 -8
- package/dist/docs/reference/mesh/immutable.md +7 -5
- package/dist/docs/reference/mesh/join.md +7 -7
- package/dist/docs/reference/mesh/loft.md +19 -18
- package/dist/docs/reference/mesh/optimizePlanarPatches.md +21 -21
- package/dist/docs/reference/mesh/preflightHeightfield.md +8 -8
- package/dist/docs/reference/mesh/preflightThreadSolid.md +22 -25
- package/dist/docs/reference/mesh/render.md +7 -5
- package/dist/docs/reference/mesh/reverse.md +7 -7
- package/dist/docs/reference/mesh/revolve.md +12 -14
- package/dist/docs/reference/mesh/signature.md +12 -12
- package/dist/docs/reference/mesh/sweep.md +96 -25
- package/dist/docs/reference/mesh/threadRidge.md +19 -18
- package/dist/docs/reference/mesh/threadSolid.md +23 -22
- package/dist/docs/reference/mesh/transform.md +8 -9
- package/dist/docs/reference/mesh/validate.md +11 -11
- package/dist/docs/reference/mesh/validateSolid.md +10 -10
- package/dist/docs/reference/mesh.md +8 -2
- package/dist/docs/reference/model/BoxEdge.md +23 -0
- package/dist/docs/reference/model/BoxEdgeSelection.md +27 -0
- package/dist/docs/reference/model/BoxEdgeTreatments.md +27 -0
- package/dist/docs/reference/{geometry → model}/BoxOptions.md +12 -12
- package/dist/docs/reference/model/CircleOptions.md +4 -5
- package/dist/docs/reference/model/CornerCutterOptions.md +93 -0
- package/dist/docs/reference/model/CornerCutterTreatment.md +53 -0
- package/dist/docs/reference/model/{HoleCutterOverrun.md → CutterOverrun.md} +8 -7
- package/dist/docs/reference/model/CylinderOptions.md +64 -0
- package/dist/docs/reference/model/DiagnosticOptions.md +2 -2
- package/dist/docs/reference/model/EdgeCutterOptions.md +129 -0
- package/dist/docs/reference/model/EllipseOptions.md +4 -5
- package/dist/docs/reference/model/EndTreatments.md +43 -0
- package/dist/docs/reference/model/ExtrudeOptions.md +153 -0
- package/dist/docs/reference/model/GenerateCallback.md +2 -2
- package/dist/docs/reference/model/GenerateContext.md +27 -3
- package/dist/docs/reference/model/GenerationDiagnostic.md +2 -2
- package/dist/docs/reference/model/GenerationError.md +2 -2
- package/dist/docs/reference/{geometry → model}/HeightfieldOptions.md +5 -23
- package/dist/docs/reference/model/HoleCutterOpening.md +27 -0
- package/dist/docs/reference/model/HoleCutterOptions.md +9 -22
- package/dist/docs/reference/model/HoleCutterRecess.md +5 -4
- package/dist/docs/reference/model/HullOptions.md +2 -3
- package/dist/docs/reference/model/ImmutableValue.md +2 -2
- package/dist/docs/reference/model/ImplicitOptions.md +3 -9
- package/dist/docs/reference/model/JoinOptions.md +2 -5
- package/dist/docs/reference/model/JoinTransition.md +2 -2
- package/dist/docs/reference/model/KnuckleHinge-type.md +2 -3
- package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +2 -2
- package/dist/docs/reference/model/KnuckleHingeOptions.md +3 -5
- package/dist/docs/reference/model/KnuckleHingeWeb.md +2 -2
- package/dist/docs/reference/{geometry → model}/LoftCorrespondence.md +8 -11
- package/dist/docs/reference/{geometry → model}/LoftOptions.md +11 -16
- package/dist/docs/reference/model/LoftStation.md +4 -5
- package/dist/docs/reference/model/Memo.md +2 -2
- package/dist/docs/reference/model/ModelProgram.md +2 -2
- package/dist/docs/reference/model/PartDeclaration.md +4 -5
- package/dist/docs/reference/model/PartGeometry.md +3 -5
- package/dist/docs/reference/model/PartOptions.md +4 -5
- package/dist/docs/reference/model/PatternSource.md +4 -4
- package/dist/docs/reference/model/PlaneOptions.md +3 -7
- package/dist/docs/reference/model/PolygonOptions.md +2 -7
- package/dist/docs/reference/model/PrimitiveAttachment.md +50 -0
- package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +111 -0
- package/dist/docs/reference/model/RectangleOptions.md +21 -26
- package/dist/docs/reference/model/RegularPolygonOptions.md +4 -37
- package/dist/docs/reference/{geometry → model}/RevolveOptions.md +15 -24
- package/dist/docs/reference/model/Section.md +115 -53
- package/dist/docs/reference/model/SectionHullOptions.md +2 -3
- package/dist/docs/reference/model/SectionInspection.md +2 -6
- package/dist/docs/reference/model/SectionOffsetJoin.md +2 -2
- package/dist/docs/reference/model/SectionOffsetOptions.md +2 -3
- package/dist/docs/reference/model/Solid.md +24 -12
- package/dist/docs/reference/model/SolidInspection.md +2 -6
- package/dist/docs/reference/model/SolidSegmentHit.md +2 -6
- package/dist/docs/reference/model/SphereOptions.md +27 -0
- package/dist/docs/reference/model/StarOptions.md +21 -23
- package/dist/docs/reference/model/SvgOrigin.md +2 -2
- package/dist/docs/reference/model/SvgPathSectionOptions.md +3 -5
- package/dist/docs/reference/model/SvgSectionOptions.md +3 -6
- package/dist/docs/reference/model/SweepOptions.md +109 -0
- package/dist/docs/reference/model/SweepOrientation.md +119 -0
- package/dist/docs/reference/model/SweepTransformOptions.md +105 -0
- package/dist/docs/reference/model/TextSectionOptions.md +2 -7
- package/dist/docs/reference/{geometry → model}/TorusOptions.md +11 -10
- package/dist/docs/reference/model/TubeOptions.md +84 -0
- package/dist/docs/reference/model/box.md +11 -10
- package/dist/docs/reference/model/categories/boolean-operations.md +9 -3
- package/dist/docs/reference/model/categories/bounded-surfaces.md +13 -1
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +26 -7
- package/dist/docs/reference/model/categories/generation.md +11 -3
- package/dist/docs/reference/model/categories/hinges.md +7 -1
- package/dist/docs/reference/model/categories/mesh-inspection.md +7 -1
- package/dist/docs/reference/model/categories/primitives.md +34 -6
- package/dist/docs/reference/model/categories/sections.md +8 -2
- package/dist/docs/reference/model/categories/threads.md +8 -5
- package/dist/docs/reference/model/categories/transforms-placement.md +15 -10
- package/dist/docs/reference/model/circle.md +7 -3
- package/dist/docs/reference/model/cornerCutter.md +88 -0
- package/dist/docs/reference/model/cylinder.md +6 -5
- package/dist/docs/reference/model/edgeCutter.md +91 -0
- package/dist/docs/reference/model/ellipse.md +7 -3
- package/dist/docs/reference/model/extrude.md +29 -23
- package/dist/docs/reference/model/generate.md +4 -2
- package/dist/docs/reference/model/gridPattern.md +11 -4
- package/dist/docs/reference/model/heightfield.md +5 -5
- package/dist/docs/reference/model/holeCutter.md +26 -12
- package/dist/docs/reference/model/hull.md +2 -2
- package/dist/docs/reference/model/implicit.md +3 -3
- package/dist/docs/reference/model/internalThreadCutter.md +32 -21
- package/dist/docs/reference/model/intersect.md +7 -3
- package/dist/docs/reference/model/join.md +6 -2
- package/dist/docs/reference/model/knuckleHinge.md +2 -3
- package/dist/docs/reference/model/linearPattern.md +11 -4
- package/dist/docs/reference/model/loft.md +28 -24
- package/dist/docs/reference/model/minkowskiSum.md +3 -3
- package/dist/docs/reference/model/pathPattern.md +17 -8
- package/dist/docs/reference/model/polygon.md +8 -3
- package/dist/docs/reference/model/radialPattern.md +11 -4
- package/dist/docs/reference/model/rectangle.md +11 -7
- package/dist/docs/reference/model/regularPolygon.md +7 -3
- package/dist/docs/reference/model/revolve.md +18 -12
- package/dist/docs/reference/model/solidFromMesh.md +10 -6
- package/dist/docs/reference/model/sphere.md +7 -6
- package/dist/docs/reference/model/star.md +11 -7
- package/dist/docs/reference/model/stroke.md +12 -8
- package/dist/docs/reference/model/svgPathSection.md +10 -4
- package/dist/docs/reference/model/svgSection.md +10 -4
- package/dist/docs/reference/model/sweep.md +102 -25
- package/dist/docs/reference/model/textSection.md +7 -3
- package/dist/docs/reference/model/threadRidge.md +16 -17
- package/dist/docs/reference/model/threadedNut.md +25 -22
- package/dist/docs/reference/model/threadedRod.md +21 -18
- package/dist/docs/reference/model/torus.md +13 -12
- package/dist/docs/reference/model/tube.md +6 -5
- package/dist/docs/reference/model/union.md +7 -3
- package/dist/docs/reference/model.md +10 -5
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +2 -2
- package/dist/docs/reference/text/VectorFont.md +38 -34
- package/dist/docs/reference/text/VectorFontOptions.md +2 -2
- package/dist/docs/reference/{geometry → text}/VectorTextArcBaseline.md +2 -11
- package/dist/docs/reference/{geometry → text}/VectorTextLayoutOptions.md +3 -11
- package/dist/docs/reference/{geometry → text}/VectorTextOptions.md +2 -10
- package/dist/docs/reference/text/categories/font-preparation.md +10 -1
- package/dist/docs/reference/text/prepareVectorFont.md +4 -2
- package/dist/docs/reference/text.md +7 -1
- package/dist/engine/execution.js +5 -3
- package/dist/engine/finalization.js +5 -5
- package/dist/engine/index.js +9 -4
- package/dist/engine/native/adapter.js +1 -1
- package/dist/engine/native/construction-mesh.js +15 -5
- package/dist/engine/native/context.js +10 -7
- package/dist/engine/native/index.js +1 -1
- package/dist/engine/native/material-components.js +2 -2
- package/dist/engine/native/mesh-observation.js +1 -1
- package/dist/engine/native/regions.js +44 -24
- package/dist/engine/native/scoped-primitives.js +3 -3
- package/dist/engine/native/scoped-threads.js +1 -13
- package/dist/engine/native/threads.js +2 -2
- package/dist/engine/native/transforms.js +2 -2
- package/dist/engine/operations/construction.js +77 -27
- package/dist/engine/operations/context.js +13 -6
- package/dist/engine/operations/cutters.js +112 -0
- package/dist/engine/operations/environment.js +2 -2
- package/dist/engine/operations/extrusion-finishing.js +42 -16
- package/dist/engine/operations/hole-cutter.js +125 -114
- package/dist/engine/operations/join-collar-profile.js +19 -19
- package/dist/engine/operations/join.js +86 -73
- package/dist/engine/operations/knuckle-hinge.js +25 -20
- package/dist/engine/operations/loft.js +9 -16
- package/dist/engine/operations/mechanical.js +4 -15
- package/dist/engine/operations/primitives/anchors.js +23 -19
- package/dist/engine/operations/primitives/construction.js +38 -12
- package/dist/engine/operations/primitives/correspondence.js +2 -2
- package/dist/engine/operations/primitives/profile-mesh.js +41 -80
- package/dist/engine/operations/primitives/profiles.js +5 -5
- package/dist/engine/operations/sections.js +8 -8
- package/dist/engine/operations/transforms.js +19 -39
- package/dist/engine/placement.js +3 -3
- package/dist/engine/recipe-realization.js +86 -30
- package/dist/engine/session/declarations.js +98 -0
- package/dist/engine/session/dependencies.js +81 -28
- package/dist/engine/session/graph.js +39 -137
- package/dist/engine/session/parameters.js +78 -0
- package/dist/engine/session/session.js +2 -2
- package/dist/engine/session/snapshot-cache.js +2 -2
- package/dist/engine/shape-anchors.js +13 -6
- package/dist/export/3mf.js +9 -2
- package/dist/export/capture.js +10 -6
- package/dist/export/glb.js +7 -2
- package/dist/export/stl.js +21 -6
- package/dist/geometry/{bounds.js → bounds/operations.js} +3 -1
- package/dist/geometry/{bounds-value.js → bounds/value.js} +20 -16
- package/dist/geometry/curves/evaluation.js +5 -6
- package/dist/geometry/curves/sampling.js +30 -6
- package/dist/geometry/{extrusion.js → extrusion/controls.js} +58 -35
- package/dist/geometry/extrusion/mesh.js +92 -0
- package/dist/geometry/extrusion/stations.js +35 -0
- package/dist/geometry/extrusion/twisted-chamfer.js +265 -0
- package/dist/geometry/immutable-buffer.js +7 -1
- package/dist/geometry/index.js +24 -32
- package/dist/geometry/{model-limits.js → limits.js} +1 -1
- package/dist/geometry/loft/{loft-correspondence.js → correspondence.js} +31 -20
- package/dist/geometry/loft/{loft-geometry.js → geometry.js} +15 -17
- package/dist/geometry/loft/mesh.js +53 -0
- package/dist/geometry/loft/{loft-options.js → options.js} +13 -11
- package/dist/geometry/loft/{loft-simple-mesh.js → simple-mesh.js} +26 -17
- package/dist/geometry/math/interpolation.js +9 -0
- package/dist/geometry/math/vector-value.js +12 -3
- package/dist/geometry/math/vector2.js +18 -5
- package/dist/geometry/math/vector3.js +28 -5
- package/dist/geometry/math-api.js +4 -0
- package/dist/geometry/mechanical/gear-motion.js +7 -5
- package/dist/geometry/mechanical/gears.js +21 -4
- package/dist/geometry/mechanical/knuckle-hinge.js +7 -5
- package/dist/geometry/mechanical/threads/fit.js +8 -2
- package/dist/geometry/mechanical/threads/helices.js +4 -2
- package/dist/geometry/mechanical/threads/mesh-plan.js +4 -2
- package/dist/geometry/mechanical/threads/mesh.js +12 -9
- package/dist/geometry/mechanical/threads/profiles.js +18 -4
- package/dist/geometry/mechanical/threads/solids.js +11 -2
- package/dist/geometry/mechanical-api.js +10 -0
- package/dist/geometry/mesh/{mesh-centroid.js → centroid.js} +2 -1
- package/dist/geometry/{heightfield.js → mesh/heightfield.js} +9 -5
- package/dist/geometry/{join-geometry.js → mesh/join-layers.js} +53 -59
- package/dist/geometry/mesh/{mesh.js → operations.js} +11 -18
- package/dist/geometry/mesh/{mesh-planar.js → planar.js} +8 -18
- package/dist/geometry/mesh/{mesh-quality.js → quality.js} +10 -42
- package/dist/geometry/mesh/{mesh-render.js → render-buffers.js} +22 -7
- package/dist/geometry/mesh/{mesh-signature.js → signature.js} +1 -1
- package/dist/geometry/mesh/{mesh-solid-intersections.js → solid-intersections.js} +2 -0
- package/dist/geometry/mesh/{mesh-solid.js → solid.js} +4 -4
- package/dist/geometry/mesh/triangle-quality.js +42 -0
- package/dist/geometry/mesh/winding.js +11 -0
- package/dist/geometry/{numeric.js → mesh/write-vertex.js} +1 -1
- package/dist/geometry/mesh-api.js +12 -11
- package/dist/geometry/paths/distribution.js +43 -0
- package/dist/geometry/paths/editing.js +76 -0
- package/dist/geometry/paths/frames.js +16 -11
- package/dist/geometry/paths/helix.js +1 -1
- package/dist/geometry/paths/resampling.js +46 -61
- package/dist/geometry/paths/{planar.js → rounding.js} +8 -67
- package/dist/geometry/paths/spline.js +116 -0
- package/dist/geometry/paths/traversal.js +107 -0
- package/dist/geometry/paths/{path-value.js → value.js} +97 -18
- package/dist/geometry/patterns/placements.js +20 -29
- package/dist/geometry/{patterns.js → patterns/transforms.js} +11 -7
- package/dist/geometry/primitives/cutters.js +70 -0
- package/dist/geometry/{cylinder.js → primitives/cylinder.js} +4 -4
- package/dist/geometry/{edge-finishing.js → primitives/edges.js} +5 -5
- package/dist/geometry/{primitive-resolvers.js → primitives/resolvers.js} +9 -9
- package/dist/geometry/primitives/sampling.js +41 -0
- package/dist/geometry/profiles/contour.js +19 -7
- package/dist/geometry/profiles/{match-profiles.js → matching.js} +9 -6
- package/dist/geometry/profiles/primitives/circle.js +1 -1
- package/dist/geometry/profiles/primitives/ellipse.js +2 -2
- package/dist/geometry/profiles/primitives/rectangle.js +8 -8
- package/dist/geometry/profiles/primitives/star.js +1 -1
- package/dist/geometry/profiles/side-profile.js +8 -5
- package/dist/geometry/profiles/validation.js +1 -1
- package/dist/geometry/{polygon-clipping.js → regions/clipping.js} +1 -1
- package/dist/geometry/{convex-offset.js → regions/convex-offset.js} +1 -1
- package/dist/geometry/{region-offset.js → regions/offset.js} +7 -5
- package/dist/geometry/{regions.js → regions/operations.js} +59 -22
- package/dist/geometry/{stroke-path.js → regions/stroke.js} +46 -20
- package/dist/geometry/{loft/loft-triangulation.js → regions/triangulation.js} +35 -2
- package/dist/geometry/revolve/{revolve-mesh.js → mesh.js} +9 -10
- package/dist/geometry/{circular-sampling.js → sampling/circular.js} +3 -3
- package/dist/geometry/{sampling-limits.js → sampling/limits.js} +6 -2
- package/dist/geometry/{resolution.js → sampling/resolution.js} +15 -14
- package/dist/geometry/svg/fill.js +4 -3
- package/dist/geometry/svg/import.js +47 -64
- package/dist/geometry/svg/path.js +3 -3
- package/dist/geometry/sweep/closed.js +55 -0
- package/dist/geometry/sweep/mesh.js +30 -0
- package/dist/geometry/{sweeps/sweep-open.js → sweep/open.js} +9 -24
- package/dist/geometry/{sweeps → sweep}/orientation.js +14 -11
- package/dist/geometry/sweep/seam.js +30 -0
- package/dist/geometry/{sweeps → sweep}/stations.js +75 -10
- package/dist/geometry/sweep/transforms.js +30 -0
- package/dist/geometry/{sweeps → sweep}/validation.js +4 -4
- package/dist/geometry/{text-contours.js → text/contours.js} +3 -3
- package/dist/geometry/{text-fitting.js → text/fitting.js} +4 -3
- package/dist/geometry/text/layout.js +1 -0
- package/dist/geometry/{transform3.js → transforms/affine3.js} +31 -46
- package/dist/geometry/{anchors.js → transforms/anchors.js} +43 -24
- package/dist/geometry/{transform-geometry.js → transforms/apply.js} +8 -5
- package/dist/geometry/{transform2.js → transforms/dimensions.js} +23 -19
- package/dist/geometry/transforms/frame.js +64 -0
- package/dist/geometry/{transform-matrix.js → transforms/matrix-input.js} +8 -1
- package/dist/geometry/{transform-value.js → transforms/value.js} +29 -11
- package/dist/index.js +3 -9
- package/dist/model/cutters.js +1 -0
- package/dist/model/execution-binding.js +3 -3
- package/dist/model/generation.js +2 -0
- package/dist/model/immutable-generation-data.js +2 -0
- package/dist/model/operations.js +130 -94
- package/dist/model/recipe-declaration.js +5 -7
- package/dist/text/index.js +3 -0
- package/dist/text/vector-text-layout.js +1 -0
- package/package.json +15 -17
- package/dist/api/export-3mf.d.ts +0 -2
- package/dist/api/export-glb.d.ts +0 -2
- package/dist/api/export-stl.d.ts +0 -2
- package/dist/docs/reference/geometry/BoxEdge.md +0 -17
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +0 -24
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +0 -25
- package/dist/docs/reference/geometry/CylinderOptions.md +0 -63
- package/dist/docs/reference/geometry/EndTreatments.md +0 -44
- package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +0 -144
- package/dist/docs/reference/geometry/ExtrudeOptions.md +0 -156
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +0 -25
- package/dist/docs/reference/geometry/LoftMeshStation.md +0 -41
- package/dist/docs/reference/geometry/PrimitiveAttachment.md +0 -39
- package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +0 -114
- package/dist/docs/reference/geometry/SphereOptions.md +0 -25
- package/dist/docs/reference/geometry/SweepOptions.md +0 -127
- package/dist/docs/reference/geometry/SweepOrientation.md +0 -127
- package/dist/docs/reference/geometry/TubeOptions.md +0 -72
- package/dist/docs/reference/geometry/add2.md +0 -43
- package/dist/docs/reference/geometry/add3.md +0 -49
- package/dist/docs/reference/geometry/applyTransformDirection3.md +0 -52
- package/dist/docs/reference/geometry/applyTransformPoint3.md +0 -50
- package/dist/docs/reference/geometry/categories/meshes.md +0 -68
- package/dist/docs/reference/geometry/composeTransform3.md +0 -51
- package/dist/docs/reference/geometry/cross2.md +0 -43
- package/dist/docs/reference/geometry/cross3.md +0 -49
- package/dist/docs/reference/geometry/distance2.md +0 -43
- package/dist/docs/reference/geometry/distance3.md +0 -43
- package/dist/docs/reference/geometry/dot2.md +0 -43
- package/dist/docs/reference/geometry/dot3.md +0 -49
- package/dist/docs/reference/geometry/eulerTransform3.md +0 -49
- package/dist/docs/reference/geometry/frameTransform3.md +0 -55
- package/dist/docs/reference/geometry/inverseTransform3.md +0 -41
- package/dist/docs/reference/geometry/length2.md +0 -37
- package/dist/docs/reference/geometry/length3.md +0 -37
- package/dist/docs/reference/geometry/lerp2.md +0 -49
- package/dist/docs/reference/geometry/lerp3.md +0 -49
- package/dist/docs/reference/geometry/normalize2.md +0 -46
- package/dist/docs/reference/geometry/normalize3.md +0 -46
- package/dist/docs/reference/geometry/projectOntoPlane3.md +0 -43
- package/dist/docs/reference/geometry/rotate2.md +0 -43
- package/dist/docs/reference/geometry/rotationTransform3.md +0 -60
- package/dist/docs/reference/geometry/scale2.md +0 -43
- package/dist/docs/reference/geometry/scale3.md +0 -49
- package/dist/docs/reference/geometry/scaleTransform3.md +0 -45
- package/dist/docs/reference/geometry/subtract2.md +0 -43
- package/dist/docs/reference/geometry/subtract3.md +0 -49
- package/dist/docs/reference/geometry/transformDeterminant3.md +0 -43
- package/dist/docs/reference/geometry/translationTransform3.md +0 -42
- package/dist/docs/reference/geometry/validateRigidTransform3.md +0 -41
- package/dist/docs/reference/geometry/validateTransform3.md +0 -54
- package/dist/docs/reference/model/Profile.md +0 -30
- package/dist/docs/reference/model/categories/explicit-profiles.md +0 -21
- package/dist/docs/reference/model/matchProfiles.md +0 -48
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +0 -93
- package/dist/docs/reference/model/preflightThreadedNut.md +0 -109
- package/dist/docs/reference/model/preflightThreadedRod.md +0 -93
- package/dist/engine/operations/patterns.js +0 -47
- package/dist/geometry/loft/loft.js +0 -105
- package/dist/geometry/mechanical/index.js +0 -14
- package/dist/geometry/primitive-resolution.js +0 -20
- package/dist/geometry/svg/index.js +0 -1
- package/dist/geometry/sweeps/options.js +0 -29
- package/dist/geometry/sweeps/sweep-closed.js +0 -96
- package/dist/geometry/sweeps/sweep-mesh.js +0 -32
- /package/dist/geometry/mechanical/{standards.js → fastener-standards.js} +0 -0
- /package/dist/geometry/mesh/{mesh-edge-table.js → edge-table.js} +0 -0
- /package/dist/geometry/mesh/{mesh-types.js → types.js} +0 -0
- /package/dist/geometry/mesh/{mesh-view-cache.js → view-cache.js} +0 -0
- /package/dist/geometry/{primitive-options.js → primitives/options.js} +0 -0
- /package/dist/geometry/{text-layout.js → sweep/options.js} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { anchor3 } from "../geometry/anchors.js";
|
|
2
1
|
import { GeometryError } from "../geometry/errors.js";
|
|
3
|
-
import { applyInverseTranspose3,
|
|
2
|
+
import { applyInverseTranspose3, applyValidatedTransformDirection3, applyValidatedTransformPoint3, inverseLinearTransform3, validateTransform3, } from "../geometry/transforms/affine3.js";
|
|
3
|
+
import { anchor3 } from "../geometry/transforms/anchors.js";
|
|
4
4
|
const maximumAnchors = 128;
|
|
5
5
|
function fail(operation, message) {
|
|
6
6
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation });
|
|
@@ -15,7 +15,7 @@ function copyAnchor(anchor, operation) {
|
|
|
15
15
|
for (const vector of [anchor.position, anchor.direction, anchor.up])
|
|
16
16
|
if (!Array.isArray(vector) || vector.length !== 3 || !vector.every(Number.isFinite))
|
|
17
17
|
fail(operation, "Anchor vectors must contain exactly three finite coordinates.");
|
|
18
|
-
return anchor3(anchor.position, anchor.direction, anchor.up);
|
|
18
|
+
return anchor3({ position: anchor.position, direction: anchor.direction, up: anchor.up });
|
|
19
19
|
}
|
|
20
20
|
function unit(vector) {
|
|
21
21
|
const maximum = Math.max(...vector.map(Math.abs));
|
|
@@ -27,7 +27,11 @@ function unit(vector) {
|
|
|
27
27
|
}
|
|
28
28
|
/** Maps positions affinely, outward normals by inverse transpose, and roll tangents linearly. */
|
|
29
29
|
function transformedAnchor(anchor, matrix, inverse) {
|
|
30
|
-
return anchor3(
|
|
30
|
+
return anchor3({
|
|
31
|
+
position: applyValidatedTransformPoint3(matrix, anchor.position),
|
|
32
|
+
direction: applyInverseTranspose3(inverse, anchor.direction),
|
|
33
|
+
up: unit(applyValidatedTransformDirection3(matrix, anchor.up)),
|
|
34
|
+
});
|
|
31
35
|
}
|
|
32
36
|
/** Run-owned immutable anchor metadata. Geometry operations acquire metadata only deliberately. */
|
|
33
37
|
export function createShapeAnchorOwner(assertShape, aliasShape) {
|
|
@@ -75,10 +79,13 @@ export function createShapeAnchorOwner(assertShape, aliasShape) {
|
|
|
75
79
|
if (definitions === undefined)
|
|
76
80
|
return result;
|
|
77
81
|
const inverse = inverseLinearTransform3(matrix);
|
|
78
|
-
|
|
82
|
+
validateTransform3(matrix);
|
|
83
|
+
// Names and inputs already belong to this owner; transformedAnchor returns frozen values.
|
|
84
|
+
anchors.set(result, Object.freeze(Object.fromEntries(Object.entries(definitions).map(([name, value]) => [
|
|
79
85
|
name,
|
|
80
86
|
transformedAnchor(value, matrix, inverse),
|
|
81
|
-
])));
|
|
87
|
+
]))));
|
|
88
|
+
return result;
|
|
82
89
|
},
|
|
83
90
|
dispose() {
|
|
84
91
|
anchors.clear();
|
package/dist/export/3mf.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Zip, ZipDeflate } from "fflate";
|
|
2
2
|
import { GeometryError } from "../geometry/errors.js";
|
|
3
|
-
import { MeshViewCache } from "../geometry/mesh/
|
|
3
|
+
import { MeshViewCache } from "../geometry/mesh/view-cache.js";
|
|
4
4
|
import { captureExport } from "./capture.js";
|
|
5
5
|
import { collectExport, createExportWriter } from "./writer.js";
|
|
6
6
|
const coreNamespace = "http://schemas.microsoft.com/3dmanufacturing/core/2015/02";
|
|
@@ -130,6 +130,9 @@ function* modelXml(captured) {
|
|
|
130
130
|
* names, combined with appearance through multiproperties; display colors never select filament.
|
|
131
131
|
* Captures mutable inputs before awaiting and awaits each owned output chunk for backpressure.
|
|
132
132
|
* The host owns destination closing and cleanup of partial output after rejection.
|
|
133
|
+
*
|
|
134
|
+
* @param parts - Closed, outward-wound parts in output order.
|
|
135
|
+
* @param sink - Receives each chunk; return a promise to pause writing.
|
|
133
136
|
*/
|
|
134
137
|
export async function write3mf(parts, sink, options = {}) {
|
|
135
138
|
const captured = captureExport(parts, options, "3mf");
|
|
@@ -184,7 +187,11 @@ export async function write3mf(parts, sink, options = {}) {
|
|
|
184
187
|
zip.terminate();
|
|
185
188
|
}
|
|
186
189
|
}
|
|
187
|
-
/**
|
|
190
|
+
/**
|
|
191
|
+
* Serializes selected completed meshes as an owned 3MF file without initializing an engine.
|
|
192
|
+
*
|
|
193
|
+
* @param parts - Closed, outward-wound parts in output order, with local geometry in millimetres.
|
|
194
|
+
*/
|
|
188
195
|
export async function export3mf(parts, options = {}) {
|
|
189
196
|
return collectExport((sink) => write3mf(parts, sink, options));
|
|
190
197
|
}
|
package/dist/export/capture.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { GeometryError } from "../geometry/errors.js";
|
|
2
2
|
import { immutableBufferView, isImmutableBuffer } from "../geometry/immutable-buffer.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { IDENTITY_TRANSFORM3, validateRigidTransform3 } from "../geometry/
|
|
3
|
+
import { analyzeTriangleMesh, transformTriangleMesh, } from "../geometry/mesh/operations.js";
|
|
4
|
+
import { analyzeSolidMesh } from "../geometry/mesh/solid.js";
|
|
5
|
+
import { MeshViewCache } from "../geometry/mesh/view-cache.js";
|
|
6
|
+
import { IDENTITY_TRANSFORM3, validateRigidTransform3 } from "../geometry/transforms/affine3.js";
|
|
7
7
|
import { resolveExportLimits } from "./limits.js";
|
|
8
8
|
// Array.isArray's any[] predicate must not erase the already typed public contracts below.
|
|
9
9
|
const isArray = Array.isArray;
|
|
@@ -65,7 +65,12 @@ export function captureExport(parts, options, format) {
|
|
|
65
65
|
bytes += source.byteLength;
|
|
66
66
|
if (bytes > limits.maxBytes)
|
|
67
67
|
throw new GeometryError("COMPLEXITY_LIMIT", "Export snapshot exceeds maxBytes.");
|
|
68
|
-
|
|
68
|
+
// Typed-array methods and species are caller-overridable; constructors guarantee an owned copy.
|
|
69
|
+
const captured = immutable
|
|
70
|
+
? source
|
|
71
|
+
: (source instanceof Float32Array
|
|
72
|
+
? new Float32Array(source)
|
|
73
|
+
: new Uint32Array(source));
|
|
69
74
|
if (ranges === undefined) {
|
|
70
75
|
ranges = new Map();
|
|
71
76
|
viewKeys.set(source.buffer, ranges);
|
|
@@ -172,7 +177,6 @@ export function captureExport(parts, options, format) {
|
|
|
172
177
|
materials: Object.freeze(materials),
|
|
173
178
|
name,
|
|
174
179
|
limits,
|
|
175
|
-
meshValidation,
|
|
176
180
|
...(signal === undefined ? {} : { signal }),
|
|
177
181
|
});
|
|
178
182
|
}
|
package/dist/export/glb.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GeometryError } from "../geometry/errors.js";
|
|
2
|
-
import {
|
|
2
|
+
import { renderValidatedMesh } from "../geometry/mesh/render-buffers.js";
|
|
3
3
|
import { captureExport } from "./capture.js";
|
|
4
4
|
import { collectExport, createExportWriter } from "./writer.js";
|
|
5
5
|
const alignedLength = (length) => Math.ceil(length / 4) * 4;
|
|
@@ -16,6 +16,8 @@ function baseColor(color) {
|
|
|
16
16
|
* Serializes captured local meshes as uncompressed glTF 2.0 binary, in metres and Y-up.
|
|
17
17
|
* Preserves named parts, placement, shared geometry and display appearance. Authored normals take
|
|
18
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.
|
|
19
21
|
*/
|
|
20
22
|
export function exportGlb(parts, options = {}) {
|
|
21
23
|
return collectExport((sink) => writeGlb(parts, sink, options));
|
|
@@ -24,6 +26,9 @@ export function exportGlb(parts, options = {}) {
|
|
|
24
26
|
* Writes owned GLB chunks with backpressure, cancellation and explicit output limits.
|
|
25
27
|
* Plans accessor and container lengths before writing, then emits bounded binary chunks.
|
|
26
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.
|
|
27
32
|
*/
|
|
28
33
|
export async function writeGlb(parts, sink, options = {}) {
|
|
29
34
|
const captured = captureExport(parts, options, "glb");
|
|
@@ -74,7 +79,7 @@ export async function writeGlb(parts, sink, options = {}) {
|
|
|
74
79
|
let geometry = geometryAccessors.get(part.geometry);
|
|
75
80
|
if (geometry === undefined) {
|
|
76
81
|
const rendered = part.geometry.normals === undefined
|
|
77
|
-
?
|
|
82
|
+
? renderValidatedMesh(part.geometry, creaseAngle)
|
|
78
83
|
: { ...part.geometry, normals: part.geometry.normals };
|
|
79
84
|
const min = [Infinity, Infinity, Infinity];
|
|
80
85
|
const max = [-Infinity, -Infinity, -Infinity];
|
package/dist/export/stl.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GeometryError } from "../geometry/errors.js";
|
|
2
|
+
import { IDENTITY_TRANSFORM3 } from "../geometry/transforms/affine3.js";
|
|
2
3
|
import { captureExport } from "./capture.js";
|
|
3
4
|
import { collectExport, createExportWriter } from "./writer.js";
|
|
4
5
|
const TRIANGLES_PER_CHUNK = 1_024;
|
|
@@ -6,6 +7,8 @@ const TRIANGLES_PER_CHUNK = 1_024;
|
|
|
6
7
|
* Serializes a captured model as binary STL in millimetres and Z-up coordinates.
|
|
7
8
|
* Placement is baked into triangles. Diagnostics describe dropped names, appearance and materials.
|
|
8
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.
|
|
9
12
|
*/
|
|
10
13
|
export function exportStl(parts, options = {}) {
|
|
11
14
|
return collectExport((sink) => writeStl(parts, sink, options));
|
|
@@ -13,6 +16,9 @@ export function exportStl(parts, options = {}) {
|
|
|
13
16
|
/**
|
|
14
17
|
* Writes owned binary STL chunks to a sink, awaiting backpressure after each bounded chunk.
|
|
15
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.
|
|
16
22
|
*/
|
|
17
23
|
export async function writeStl(parts, sink, options = {}) {
|
|
18
24
|
const captured = captureExport(parts, options, "stl");
|
|
@@ -35,19 +41,28 @@ export async function writeStl(parts, sink, options = {}) {
|
|
|
35
41
|
for (const part of captured.parts) {
|
|
36
42
|
const { positions, indices } = part.geometry;
|
|
37
43
|
const matrix = part.transform;
|
|
44
|
+
const identity = matrix.every((value, index) => Object.is(value, IDENTITY_TRANSFORM3[index]));
|
|
38
45
|
for (let offset = 0; offset < indices.length; offset += 3) {
|
|
39
46
|
for (let corner = 0; corner < 3; corner += 1) {
|
|
40
47
|
const index = indices[offset + corner] * 3;
|
|
41
48
|
const x = positions[index];
|
|
42
49
|
const y = positions[index + 1];
|
|
43
50
|
const z = positions[index + 2];
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
triangle[corner * 3 +
|
|
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;
|
|
50
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
|
+
}
|
|
51
66
|
}
|
|
52
67
|
const ux = triangle[3] - triangle[0];
|
|
53
68
|
const uy = triangle[4] - triangle[1];
|
|
@@ -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;
|
|
@@ -113,6 +113,8 @@ const SpatialBounds = /* @__PURE__ */ immutableMathClass(class SpatialBounds {
|
|
|
113
113
|
* Size construction centers on the origin unless `center` is false. Size and extrema are exclusive.
|
|
114
114
|
* Compiled Generator packages passing these values to host recipes or memo data require
|
|
115
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));
|
|
@@ -125,6 +127,8 @@ export function bounds2(input) {
|
|
|
125
127
|
* Size construction centers on the origin unless `center` is false. Size and extrema are exclusive.
|
|
126
128
|
* Compiled Generator packages passing these values to host recipes or memo data require
|
|
127
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
|
|
@@ -1,12 +1,27 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { vector2Data } from "
|
|
3
|
-
import { assertPositivePrimitive, assertPrimitiveOptions } from "
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { vector2Data } from "../math/vector-value.js";
|
|
3
|
+
import { assertPositivePrimitive, assertPrimitiveOptions } from "../primitives/resolvers.js";
|
|
4
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits } from "../sampling/limits.js";
|
|
5
|
+
import { resolveGeometryResolution } from "../sampling/resolution.js";
|
|
6
6
|
const isArray = (value) => Array.isArray(value);
|
|
7
|
+
const extrusionKeys = new Set([
|
|
8
|
+
"height",
|
|
9
|
+
"center",
|
|
10
|
+
"ends",
|
|
11
|
+
"slices",
|
|
12
|
+
"limits",
|
|
13
|
+
"resolution",
|
|
14
|
+
"scale",
|
|
15
|
+
"twist",
|
|
16
|
+
]);
|
|
7
17
|
/** @internal Validates shared extrusion controls and expands top scale before kernel allocation. */
|
|
8
18
|
export function resolveExtrusionControls(height, options, operation) {
|
|
9
19
|
assertPrimitiveOptions(options, operation);
|
|
20
|
+
for (const key of Object.keys(options))
|
|
21
|
+
if (!extrusionKeys.has(key))
|
|
22
|
+
throw new GeometryError("INVALID_ARGUMENT", `Unsupported extrusion option: ${key}.`, {
|
|
23
|
+
operation,
|
|
24
|
+
});
|
|
10
25
|
assertPositivePrimitive(height, "height", operation);
|
|
11
26
|
if (options.center !== undefined && typeof options.center !== "boolean") {
|
|
12
27
|
throw new GeometryError("INVALID_ARGUMENT", "center must be boolean when supplied.", {
|
|
@@ -17,40 +32,46 @@ export function resolveExtrusionControls(height, options, operation) {
|
|
|
17
32
|
if (!Number.isFinite(twist)) {
|
|
18
33
|
throw new GeometryError("NON_FINITE_VALUE", "twist must be finite.", { operation });
|
|
19
34
|
}
|
|
20
|
-
const
|
|
21
|
-
const values = typeof
|
|
35
|
+
const scale = options.scale ?? 1;
|
|
36
|
+
const values = typeof scale === "number" ? [scale, scale] : vector2Data(scale);
|
|
22
37
|
const scales = [values[0], values[1]];
|
|
23
38
|
if (!Number.isFinite(scales[0]) || !Number.isFinite(scales[1])) {
|
|
24
|
-
throw new GeometryError("NON_FINITE_VALUE", "
|
|
39
|
+
throw new GeometryError("NON_FINITE_VALUE", "scale values must be finite.", { operation });
|
|
25
40
|
}
|
|
26
|
-
if (
|
|
27
|
-
(
|
|
28
|
-
|
|
41
|
+
if (scales.some((value) => value < 0) || (scales[0] === 0) !== (scales[1] === 0))
|
|
42
|
+
throw new GeometryError("INVALID_ARGUMENT", "scale must be positive on both axes or zero on both axes for an apex.", { operation });
|
|
43
|
+
if (options.slices !== undefined &&
|
|
44
|
+
(!Number.isSafeInteger(options.slices) || options.slices < 1)) {
|
|
45
|
+
throw new GeometryError("INVALID_ARGUMENT", "slices must be a positive safe integer.", {
|
|
29
46
|
operation,
|
|
30
47
|
});
|
|
31
48
|
}
|
|
32
|
-
if (options.
|
|
33
|
-
assertSamplingCount(options.
|
|
49
|
+
if (options.slices !== undefined)
|
|
50
|
+
assertSamplingCount(options.slices + 1, operation, resolveGeometrySamplingLimits(options.limits).maxPathPoints);
|
|
34
51
|
return { scales, twist, center: options.center ?? false };
|
|
35
52
|
}
|
|
36
53
|
/**
|
|
37
|
-
* Resolves
|
|
54
|
+
* Resolves longitudinal intervals for ordinary linear extrusion from physical curve resolution.
|
|
38
55
|
*
|
|
39
56
|
* Accepts one XY loop or a filled XY region, including every hole and disconnected component.
|
|
40
|
-
*
|
|
57
|
+
* End treatments are unsupported; native finishing inserts its own treatment stations.
|
|
58
|
+
* Explicit positive `slices` override physical sampling. Otherwise chord error bounds
|
|
41
59
|
* the triangulated side surface, including rotation across each profile edge. Optional segment
|
|
42
|
-
* length bounds station travel including Z. Straight extrusions
|
|
60
|
+
* length bounds station travel including Z. Straight extrusions use one interval by default.
|
|
43
61
|
* Exceeding the selected maxPathPoints ceiling raises `COMPLEXITY_LIMIT` instead of reducing fidelity.
|
|
44
62
|
*
|
|
45
63
|
* @param profile - Ordered XY millimetre contours with implicit closing edges.
|
|
46
64
|
* @param height - Positive extrusion height in millimetres.
|
|
47
|
-
* @param options - Twist, scale, exact
|
|
48
|
-
* @returns
|
|
65
|
+
* @param options - Twist, scale, exact slices, and physical resolution controls.
|
|
66
|
+
* @returns Positive interval count, creating one more profile layer than intervals.
|
|
49
67
|
*/
|
|
50
|
-
export function
|
|
68
|
+
export function resolveExtrusionSlices(profile, height, options = {}) {
|
|
69
|
+
assertPrimitiveOptions(options, "resolveExtrusionSlices");
|
|
70
|
+
if ("ends" in options)
|
|
71
|
+
throw new GeometryError("INVALID_ARGUMENT", "resolveExtrusionSlices does not support end treatments.", { operation: "resolveExtrusionSlices" });
|
|
51
72
|
if (!isArray(profile) || profile.length === 0)
|
|
52
73
|
throw new GeometryError("INVALID_ARGUMENT", "Extrusion sampling needs an XY loop or region.", {
|
|
53
|
-
operation: "
|
|
74
|
+
operation: "resolveExtrusionSlices",
|
|
54
75
|
});
|
|
55
76
|
const contours = [];
|
|
56
77
|
if (Array.isArray(profile[0]))
|
|
@@ -64,25 +85,25 @@ export function resolveExtrusionDivisions(profile, height, options = {}) {
|
|
|
64
85
|
!isArray(component.outer) ||
|
|
65
86
|
!isArray(component.holes))
|
|
66
87
|
throw new GeometryError("INVALID_ARGUMENT", "Extrusion regions need outer and hole contours.", {
|
|
67
|
-
operation: "
|
|
88
|
+
operation: "resolveExtrusionSlices",
|
|
68
89
|
});
|
|
69
|
-
assertSamplingCount(count + 3 * (component.holes.length + 1), "
|
|
90
|
+
assertSamplingCount(count + 3 * (component.holes.length + 1), "resolveExtrusionSlices", maximum);
|
|
70
91
|
for (const contour of [component.outer, ...component.holes]) {
|
|
71
92
|
if (!isArray(contour) || contour.length < 3)
|
|
72
93
|
throw new GeometryError("INVALID_ARGUMENT", "Extrusion contours need at least three XY points.", {
|
|
73
|
-
operation: "
|
|
94
|
+
operation: "resolveExtrusionSlices",
|
|
74
95
|
});
|
|
75
96
|
count += contour.length;
|
|
76
|
-
assertSamplingCount(count, "
|
|
97
|
+
assertSamplingCount(count, "resolveExtrusionSlices", maximum);
|
|
77
98
|
contours.push(contour);
|
|
78
99
|
}
|
|
79
100
|
}
|
|
80
101
|
}
|
|
81
|
-
return
|
|
102
|
+
return resolveExtrusionContourSlices(contours, height, options);
|
|
82
103
|
}
|
|
83
104
|
/** @internal Shared sampling preflight over explicit contours, without rebuilding filled topology. */
|
|
84
|
-
export function
|
|
85
|
-
const operation = "
|
|
105
|
+
export function resolveExtrusionContourSlices(contours, height, options) {
|
|
106
|
+
const operation = "resolveExtrusionSlices";
|
|
86
107
|
const { scales, twist } = resolveExtrusionControls(height, options, operation);
|
|
87
108
|
const limits = resolveGeometrySamplingLimits(options.limits);
|
|
88
109
|
let radius = 0, maximumEdgeLength = 0, profileCount = 0;
|
|
@@ -109,8 +130,8 @@ export function resolveExtrusionContourDivisions(contours, height, options) {
|
|
|
109
130
|
maximumEdgeLength = Math.max(maximumEdgeLength, Math.hypot(next[0] - point[0], next[1] - point[1]));
|
|
110
131
|
}
|
|
111
132
|
}
|
|
112
|
-
if (options.
|
|
113
|
-
return options.
|
|
133
|
+
if (options.slices !== undefined)
|
|
134
|
+
return options.slices;
|
|
114
135
|
const policy = resolveGeometryResolution(options.resolution, options.limits);
|
|
115
136
|
const angle = (Math.abs(twist) * Math.PI) / 180;
|
|
116
137
|
const maximumScale = Math.max(1, Math.abs(scales[0]), Math.abs(scales[1]));
|
|
@@ -122,11 +143,13 @@ export function resolveExtrusionContourDivisions(contours, height, options) {
|
|
|
122
143
|
// Uniform untwisted taper is planar. Anisotropic taper can introduce a
|
|
123
144
|
// mixed edge/station derivative even when the vertex trajectories are straight.
|
|
124
145
|
b = (maximumEdgeLength * (maximumScale * angle + Math.abs(scales[0] - scales[1]))) / 4;
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
146
|
+
const physicalSlices = Math.max(1, Math.ceil((b + Math.hypot(b, 2 * Math.sqrt(a * policy.maxChordError))) / (2 * policy.maxChordError)));
|
|
147
|
+
const angularSlices = Math.max(1, Math.ceil(((policy.circularSegments ?? policy.minSegments) * Math.abs(twist)) / 360));
|
|
148
|
+
// An exact angular schedule does not waive the surface error caused by changing scale.
|
|
149
|
+
const chordSegments = policy.circularSegments === undefined || scaleChange > 0
|
|
150
|
+
? Math.max(physicalSlices, angularSlices)
|
|
151
|
+
: angularSlices;
|
|
152
|
+
const angularCap = Math.max(1, scaleChange === 0 ? 0 : policy.maxSegments, Math.ceil((policy.maxSegments * Math.abs(twist)) / 360));
|
|
130
153
|
if (chordSegments > angularCap) {
|
|
131
154
|
throw new GeometryError("COMPLEXITY_LIMIT", "Extrusion surface refinement exceeds the full-circle interval safety limit.", {
|
|
132
155
|
operation,
|
|
@@ -143,5 +166,5 @@ export function resolveExtrusionContourDivisions(contours, height, options) {
|
|
|
143
166
|
const lengthSegments = policy.maxSegmentLength === undefined ? 1 : Math.ceil(travel / policy.maxSegmentLength);
|
|
144
167
|
const segments = Math.max(1, chordSegments, lengthSegments);
|
|
145
168
|
assertSamplingCount(segments + 1, operation, resolveGeometrySamplingLimits(options.limits).maxPathPoints);
|
|
146
|
-
return segments
|
|
169
|
+
return segments;
|
|
147
170
|
}
|