@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,9 +1,9 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "../limits.js";
|
|
2
3
|
import { vector3Data } from "../math/vector-value.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
|
|
4
|
+
import { writeMeshVertex } from "../mesh/write-vertex.js";
|
|
5
|
+
import { normalizeContour } from "../regions/operations.js";
|
|
6
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling/limits.js";
|
|
7
7
|
import { resolveGeometryTolerance } from "../tolerance.js";
|
|
8
8
|
/** @internal Normalizes simple profiles before cap triangulation or side construction. */
|
|
9
9
|
export function normalizeSweepProfile(profile, operation, limits = {}) {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { flattenSvgPath, SvgVertexBudget } from "
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { flattenSvgPath, SvgVertexBudget } from "../svg/path.js";
|
|
3
3
|
/**
|
|
4
4
|
* Samples a prepared text layout without shaping text again or loading a font.
|
|
5
5
|
*
|
|
6
6
|
* @param layout - Immutable millimetre paths and measurements retained from text preparation.
|
|
7
7
|
* @param resolution - Explicit curve sampling policy; omitted uses the pure default policy.
|
|
8
|
-
* @param limits -
|
|
8
|
+
* @param limits - Profile-point and circle-segment limits.
|
|
9
9
|
* @returns Frozen contours with original glyph winding and no repeated closing vertex.
|
|
10
10
|
* @throws GeometryError for empty outlines, invalid paths or policies, over 1000 paths or selected sampling ceilings.
|
|
11
11
|
*/
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SVGPathData, SVGPathDataTransformer } from "svg-pathdata";
|
|
2
|
-
import { boundsSize, fitBounds } from "
|
|
3
|
-
import {
|
|
2
|
+
import { boundsSize, fitBounds } from "../bounds/operations.js";
|
|
3
|
+
import { bounds2 } from "../bounds/value.js";
|
|
4
|
+
import { GeometryError } from "../errors.js";
|
|
4
5
|
function fail(message) {
|
|
5
6
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "fitTextLayout" });
|
|
6
7
|
}
|
|
@@ -29,7 +30,7 @@ export function fitTextLayout(layout, target, options = {}) {
|
|
|
29
30
|
fail("Prepared text needs visible outlines and ink bounds, with at most 1000 paths.");
|
|
30
31
|
if (boundsSize(layout.metrics.bounds).some((extent) => extent <= 0))
|
|
31
32
|
fail("Prepared text needs positive visible width and height.");
|
|
32
|
-
const fit = fitBounds(layout.metrics.bounds, target, options);
|
|
33
|
+
const fit = fitBounds(layout.metrics.bounds, bounds2(target).toData(), options);
|
|
33
34
|
const { scale, position: [x, y], } = fit;
|
|
34
35
|
let bytes = 0, outputBytes = 0, commands = 0;
|
|
35
36
|
const paths = layout.paths.map((path) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import {
|
|
3
|
-
import { resolveGeometryTolerance } from "
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { dot3, length3, normalize3 } from "../math/vector3.js";
|
|
3
|
+
import { resolveGeometryTolerance } from "../tolerance.js";
|
|
4
|
+
import { resolveFrame3 } from "./frame.js";
|
|
4
5
|
const finiteVector = (vector, label) => {
|
|
5
6
|
if (!Array.isArray(vector) || vector.length !== 3) {
|
|
6
7
|
throw new GeometryError("INVALID_ARGUMENT", `${label} requires exactly three coordinates.`);
|
|
7
8
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
for (let axis = 0; axis < 3; axis++)
|
|
10
|
+
if (!Number.isFinite(vector[axis]))
|
|
11
|
+
throw new GeometryError("NON_FINITE_VALUE", `${label} coordinates must be finite.`);
|
|
11
12
|
};
|
|
12
13
|
const normalized = (vector, label, tolerance) => {
|
|
13
14
|
finiteVector(vector, label);
|
|
@@ -28,15 +29,15 @@ export const IDENTITY_TRANSFORM3 = frozenTransform([
|
|
|
28
29
|
* @param transform - Row-major matrix to validate.
|
|
29
30
|
* @param tolerance - Optional comparison overrides.
|
|
30
31
|
* @returns The original transform after successful validation.
|
|
31
|
-
* @throws
|
|
32
|
+
* @throws [GeometryError](/docs/reference/geometry/GeometryError) For nonfinite, non-affine, or singular matrices.
|
|
32
33
|
*/
|
|
33
34
|
export function validateTransform3(transform, tolerance = {}) {
|
|
34
35
|
if (!Array.isArray(transform) || transform.length !== 16) {
|
|
35
36
|
throw new GeometryError("INVALID_ARGUMENT", "XYZ matrices require exactly sixteen entries.");
|
|
36
37
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
for (let index = 0; index < 16; index++)
|
|
39
|
+
if (!Number.isFinite(transform[index]))
|
|
40
|
+
throw new GeometryError("NON_FINITE_VALUE", "Transforms require sixteen finite values.");
|
|
40
41
|
const scale = Math.max(Math.abs(transform[0]), Math.abs(transform[1]), Math.abs(transform[2]), Math.abs(transform[4]), Math.abs(transform[5]), Math.abs(transform[6]), Math.abs(transform[8]), Math.abs(transform[9]), Math.abs(transform[10]));
|
|
41
42
|
const resolved = resolveGeometryTolerance(scale, tolerance);
|
|
42
43
|
if (Math.abs(transform[12]) > resolved.angular ||
|
|
@@ -64,7 +65,9 @@ export function validateTransform3(transform, tolerance = {}) {
|
|
|
64
65
|
* Scale, shear, reflection, and perspective are rejected within the default angular tolerance.
|
|
65
66
|
* Returns the original row-major 4x4 matrix without copying or normalizing it.
|
|
66
67
|
*
|
|
67
|
-
* @
|
|
68
|
+
* @param transform - Row-major 4x4 matrix with a proper rigid transform.
|
|
69
|
+
*
|
|
70
|
+
* @throws [GeometryError](/docs/reference/geometry/GeometryError) For a malformed, nonfinite, or non-rigid matrix.
|
|
68
71
|
*/
|
|
69
72
|
export function validateRigidTransform3(transform) {
|
|
70
73
|
if (!Array.isArray(transform) || transform.length !== 16)
|
|
@@ -91,7 +94,7 @@ export function validateRigidTransform3(transform) {
|
|
|
91
94
|
/**
|
|
92
95
|
* Creates an immutable translation transform.
|
|
93
96
|
*
|
|
94
|
-
* @param offset - Finite XYZ translation in
|
|
97
|
+
* @param offset - Finite XYZ translation in millimetres.
|
|
95
98
|
* @returns A frozen row-major transform.
|
|
96
99
|
*/
|
|
97
100
|
export function translationTransform3(offset) {
|
|
@@ -104,7 +107,7 @@ export function translationTransform3(offset) {
|
|
|
104
107
|
* Negative components are reflections. Zero components are rejected because
|
|
105
108
|
* they collapse volume and cannot be inverted.
|
|
106
109
|
*
|
|
107
|
-
* @param factors - Finite,
|
|
110
|
+
* @param factors - Finite, nonzero XYZ scale factors.
|
|
108
111
|
* @returns A frozen row-major transform.
|
|
109
112
|
*/
|
|
110
113
|
export function scaleTransform3(factors) {
|
|
@@ -186,30 +189,30 @@ export function rotationTransform3(axis, angle, tolerance = {}) {
|
|
|
186
189
|
*
|
|
187
190
|
* @param rotationDegrees - Finite `[x, y, z]` rotation angles in degrees.
|
|
188
191
|
* @returns A frozen row-major transform.
|
|
189
|
-
* @throws
|
|
192
|
+
* @throws [GeometryError](/docs/reference/geometry/GeometryError) When an angle is nonfinite.
|
|
190
193
|
*/
|
|
191
194
|
export function eulerTransform3(rotationDegrees) {
|
|
192
195
|
finiteVector(rotationDegrees, "Euler rotation");
|
|
193
|
-
return
|
|
196
|
+
return multiplyTransform3(rotationTransform3([0, 0, 1], { degrees: rotationDegrees[2] }), multiplyTransform3(rotationTransform3([0, 1, 0], { degrees: rotationDegrees[1] }), rotationTransform3([1, 0, 0], { degrees: rotationDegrees[0] })));
|
|
194
197
|
}
|
|
195
198
|
/**
|
|
196
199
|
* Composes two affine transforms without mutating either matrix.
|
|
197
200
|
*
|
|
198
|
-
* `
|
|
201
|
+
* `multiplyTransform3(left, right)` returns `left * right`; `right` acts first on column vectors.
|
|
199
202
|
*
|
|
200
|
-
* @param
|
|
201
|
-
* @param
|
|
202
|
-
* @returns A new frozen transform equal to `
|
|
203
|
+
* @param left - Left matrix factor, applied second.
|
|
204
|
+
* @param right - Right matrix factor, applied first.
|
|
205
|
+
* @returns A new frozen transform equal to `left * right`.
|
|
203
206
|
*/
|
|
204
|
-
export function
|
|
205
|
-
validateTransform3(
|
|
206
|
-
validateTransform3(
|
|
207
|
+
export function multiplyTransform3(left, right) {
|
|
208
|
+
validateTransform3(left);
|
|
209
|
+
validateTransform3(right);
|
|
207
210
|
const values = new Array(16).fill(0);
|
|
208
211
|
for (let row = 0; row < 4; row += 1) {
|
|
209
212
|
for (let column = 0; column < 4; column += 1) {
|
|
210
213
|
let value = 0;
|
|
211
214
|
for (let inner = 0; inner < 4; inner += 1) {
|
|
212
|
-
value +=
|
|
215
|
+
value += left[row * 4 + inner] * right[inner * 4 + column];
|
|
213
216
|
}
|
|
214
217
|
values[row * 4 + column] = value;
|
|
215
218
|
}
|
|
@@ -370,41 +373,23 @@ export function applyInverseTranspose3(inverse, normal) {
|
|
|
370
373
|
* @param frame - Frame whose axes become the transform columns.
|
|
371
374
|
* @param tolerance - Optional orthonormality comparison overrides.
|
|
372
375
|
* @returns A frozen rigid transform.
|
|
373
|
-
* @throws
|
|
376
|
+
* @throws [GeometryError](/docs/reference/geometry/GeometryError) When axes are non-unit, non-orthogonal, or left-handed.
|
|
374
377
|
*/
|
|
375
378
|
export function frameTransform3(frame, tolerance = {}) {
|
|
376
|
-
|
|
377
|
-
const resolved = resolveGeometryTolerance(1, tolerance);
|
|
378
|
-
const xLength = length3(frame.xAxis);
|
|
379
|
-
const yLength = length3(frame.yAxis);
|
|
380
|
-
const zLength = length3(frame.zAxis);
|
|
381
|
-
if (Math.abs(xLength - 1) > resolved.angular ||
|
|
382
|
-
Math.abs(yLength - 1) > resolved.angular ||
|
|
383
|
-
Math.abs(zLength - 1) > resolved.angular) {
|
|
384
|
-
throw new GeometryError("INVALID_ARGUMENT", "Frame axes must have unit length.");
|
|
385
|
-
}
|
|
386
|
-
const x = normalized(frame.xAxis, "Frame X axis", resolved.linear);
|
|
387
|
-
const y = normalized(frame.yAxis, "Frame Y axis", resolved.linear);
|
|
388
|
-
const z = normalized(frame.zAxis, "Frame Z axis", resolved.linear);
|
|
389
|
-
if (Math.abs(dot3(x, y)) > resolved.angular ||
|
|
390
|
-
Math.abs(dot3(x, z)) > resolved.angular ||
|
|
391
|
-
Math.abs(dot3(y, z)) > resolved.angular ||
|
|
392
|
-
dot3(cross3(x, y), z) < 1 - resolved.angular) {
|
|
393
|
-
throw new GeometryError("INVALID_ARGUMENT", "Frame axes must be right-handed and mutually orthogonal.");
|
|
394
|
-
}
|
|
379
|
+
const { origin, xAxis: x, yAxis: y, zAxis: z } = resolveFrame3(frame, tolerance);
|
|
395
380
|
return frozenTransform([
|
|
396
381
|
x[0],
|
|
397
382
|
y[0],
|
|
398
383
|
z[0],
|
|
399
|
-
|
|
384
|
+
origin[0],
|
|
400
385
|
x[1],
|
|
401
386
|
y[1],
|
|
402
387
|
z[1],
|
|
403
|
-
|
|
388
|
+
origin[1],
|
|
404
389
|
x[2],
|
|
405
390
|
y[2],
|
|
406
391
|
z[2],
|
|
407
|
-
|
|
392
|
+
origin[2],
|
|
408
393
|
0,
|
|
409
394
|
0,
|
|
410
395
|
0,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { vector3Data } from "
|
|
3
|
-
import { cross3, dot3 } from "
|
|
4
|
-
import { resolveGeometryTolerance } from "
|
|
5
|
-
import {
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { vector3Data } from "../math/vector-value.js";
|
|
3
|
+
import { cross3, dot3 } from "../math/vector3.js";
|
|
4
|
+
import { resolveGeometryTolerance } from "../tolerance.js";
|
|
5
|
+
import { frameTransform3, inverseTransform3, multiplyTransform3 } from "./affine3.js";
|
|
6
|
+
import { transform3 } from "./value.js";
|
|
6
7
|
const boxFaces = {
|
|
7
8
|
back: [
|
|
8
9
|
[0, -1, 0],
|
|
@@ -42,7 +43,9 @@ const assertAnchorOptions = (options, operation) => {
|
|
|
42
43
|
if (typeof options !== "object" || options === null || Array.isArray(options))
|
|
43
44
|
throw new GeometryError("INVALID_ARGUMENT", "Anchor options must be an object.", { operation });
|
|
44
45
|
};
|
|
45
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Creates an outward face-center anchor using the same local origin convention as box().
|
|
48
|
+
*
|
|
46
49
|
* @remarks origin applies an explicit translation. For rotated components, transform the
|
|
47
50
|
* resulting anchor frame explicitly; no anchor is inherited from a Boolean result.
|
|
48
51
|
*/
|
|
@@ -66,10 +69,12 @@ export function boxAnchor3(options) {
|
|
|
66
69
|
return origin[axis] + (direction[axis] * size[axis]) / 2;
|
|
67
70
|
return (origin[axis] + (direction[axis] > 0 ? size[axis] : direction[axis] < 0 ? 0 : size[axis] / 2));
|
|
68
71
|
};
|
|
69
|
-
return anchor3([coordinate(0), coordinate(1), coordinate(2)], direction, up);
|
|
72
|
+
return anchor3({ position: [coordinate(0), coordinate(1), coordinate(2)], direction, up });
|
|
70
73
|
}
|
|
71
|
-
/**
|
|
72
|
-
*
|
|
74
|
+
/**
|
|
75
|
+
* Creates a cap-center or radial-side anchor using cylinder()'s construction origin.
|
|
76
|
+
*
|
|
77
|
+
* @remarks Cylinders use the local Z axis. Side angle uses degrees;
|
|
73
78
|
* origin applies an explicit translation, and arbitrary component transforms remain explicit.
|
|
74
79
|
*/
|
|
75
80
|
export function cylinderAnchor3(options) {
|
|
@@ -90,12 +95,26 @@ export function cylinderAnchor3(options) {
|
|
|
90
95
|
throw new GeometryError("INVALID_ARGUMENT", "Unsupported cylinder anchor face.", { operation });
|
|
91
96
|
const center = options.center ?? true;
|
|
92
97
|
if (face === "top")
|
|
93
|
-
return anchor3(
|
|
98
|
+
return anchor3({
|
|
99
|
+
position: [origin[0], origin[1], origin[2] + (center ? height / 2 : height)],
|
|
100
|
+
direction: [0, 0, 1],
|
|
101
|
+
});
|
|
94
102
|
if (face === "bottom")
|
|
95
|
-
return anchor3(
|
|
103
|
+
return anchor3({
|
|
104
|
+
position: [origin[0], origin[1], origin[2] - (center ? height / 2 : 0)],
|
|
105
|
+
direction: [0, 0, -1],
|
|
106
|
+
});
|
|
96
107
|
const angleRadians = angle * (Math.PI / 180);
|
|
97
108
|
const cosine = Math.cos(angleRadians), sine = Math.sin(angleRadians);
|
|
98
|
-
return anchor3(
|
|
109
|
+
return anchor3({
|
|
110
|
+
position: [
|
|
111
|
+
origin[0] + radius * cosine,
|
|
112
|
+
origin[1] + radius * sine,
|
|
113
|
+
origin[2] + (center ? 0 : height / 2),
|
|
114
|
+
],
|
|
115
|
+
direction: [cosine, sine, 0],
|
|
116
|
+
up: [0, 0, 1],
|
|
117
|
+
});
|
|
99
118
|
}
|
|
100
119
|
const normalized = (vector, label, tolerance) => {
|
|
101
120
|
if (!vector.every(Number.isFinite)) {
|
|
@@ -116,14 +135,13 @@ const normalized = (vector, label, tolerance) => {
|
|
|
116
135
|
* `up` is projected onto the plane perpendicular to `direction`, removing small
|
|
117
136
|
* input drift while preserving its roll intent.
|
|
118
137
|
*
|
|
119
|
-
* @param
|
|
120
|
-
* @param direction - Non-zero outward attachment normal.
|
|
121
|
-
* @param up - Non-parallel roll reference; defaults to +Y.
|
|
122
|
-
* @param tolerance - Optional comparison overrides.
|
|
138
|
+
* @param options - Finite position, orientation guides, and optional comparison overrides.
|
|
123
139
|
* @returns A frozen anchor with unit, orthogonal direction and up vectors.
|
|
124
|
-
* @throws {@link GeometryError} For
|
|
140
|
+
* @throws {@link GeometryError} For nonfinite or degenerate inputs.
|
|
125
141
|
*/
|
|
126
|
-
export function anchor3(
|
|
142
|
+
export function anchor3(options) {
|
|
143
|
+
assertAnchorOptions(options, "anchor3");
|
|
144
|
+
const { position, direction, up = [0, 1, 0], tolerance = {} } = options;
|
|
127
145
|
const coordinates = (input) => {
|
|
128
146
|
const values = vector3Data(input);
|
|
129
147
|
const point = [values[0], values[1], values[2]];
|
|
@@ -159,7 +177,7 @@ export function anchor3(position, direction, up = [0, 1, 0], tolerance = {}) {
|
|
|
159
177
|
* @returns A normalized right-handed frame at the anchor position.
|
|
160
178
|
*/
|
|
161
179
|
export function anchorFrame3(anchor, tolerance = {}) {
|
|
162
|
-
const normalizedAnchor = anchor3(
|
|
180
|
+
const normalizedAnchor = anchor3({ ...anchor, tolerance });
|
|
163
181
|
const xAxis = normalized(cross3(normalizedAnchor.up, normalizedAnchor.direction), "Anchor X axis", 0);
|
|
164
182
|
return Object.freeze({
|
|
165
183
|
origin: normalizedAnchor.position,
|
|
@@ -179,10 +197,11 @@ export function anchorFrame3(anchor, tolerance = {}) {
|
|
|
179
197
|
* @param source - Anchor expressed in the moving object's local coordinates.
|
|
180
198
|
* @param target - Desired anchor pose in destination coordinates.
|
|
181
199
|
* @param options - Alignment, gap, spin, and tolerance policy.
|
|
182
|
-
* @returns
|
|
183
|
-
* @throws {@link GeometryError} For invalid anchors or
|
|
200
|
+
* @returns An immutable affine transform for the moving object.
|
|
201
|
+
* @throws {@link GeometryError} For invalid anchors or nonfinite options.
|
|
184
202
|
*/
|
|
185
203
|
export function attachmentTransform3(source, target, options = {}) {
|
|
204
|
+
assertAnchorOptions(options, "attachmentTransform3");
|
|
186
205
|
const gap = options.gap ?? 0;
|
|
187
206
|
const spin = options.spin ?? 0;
|
|
188
207
|
if (options.alignment !== undefined &&
|
|
@@ -194,11 +213,11 @@ export function attachmentTransform3(source, target, options = {}) {
|
|
|
194
213
|
throw new GeometryError("NON_FINITE_VALUE", "Attachment gap and spin must be finite.");
|
|
195
214
|
}
|
|
196
215
|
const sourceFrame = anchorFrame3(source, options.tolerance);
|
|
197
|
-
const targetAnchor = anchor3(
|
|
216
|
+
const targetAnchor = anchor3({ ...target, tolerance: options.tolerance ?? {} });
|
|
198
217
|
const desiredDirection = (options.alignment ?? "opposed") === "opposed"
|
|
199
218
|
? [-targetAnchor.direction[0], -targetAnchor.direction[1], -targetAnchor.direction[2]]
|
|
200
219
|
: targetAnchor.direction;
|
|
201
|
-
const baseFrame = anchorFrame3(anchor3(targetAnchor
|
|
220
|
+
const baseFrame = anchorFrame3(anchor3({ ...targetAnchor, direction: desiredDirection, tolerance: options.tolerance ?? {} }), options.tolerance);
|
|
202
221
|
const spinRadians = ((spin % 360) * Math.PI) / 180;
|
|
203
222
|
const cosine = Math.cos(spinRadians);
|
|
204
223
|
const sine = Math.sin(spinRadians);
|
|
@@ -222,5 +241,5 @@ export function attachmentTransform3(source, target, options = {}) {
|
|
|
222
241
|
yAxis: spunY,
|
|
223
242
|
zAxis: baseFrame.zAxis,
|
|
224
243
|
};
|
|
225
|
-
return
|
|
244
|
+
return transform3(multiplyTransform3(frameTransform3(desiredFrame, options.tolerance), inverseTransform3(frameTransform3(sourceFrame, options.tolerance))));
|
|
226
245
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { vector2Data } from "
|
|
2
|
-
import { normalizeContour, normalizeRegion, signedContourArea } from "
|
|
3
|
-
import {
|
|
4
|
-
import { embedTransform2 } from "./
|
|
5
|
-
import {
|
|
1
|
+
import { vector2Data } from "../math/vector-value.js";
|
|
2
|
+
import { normalizeContour, normalizeRegion, signedContourArea } from "../regions/operations.js";
|
|
3
|
+
import { applyValidatedTransformPoint3, validateTransform3 } from "./affine3.js";
|
|
4
|
+
import { embedTransform2 } from "./dimensions.js";
|
|
5
|
+
import { readTransformMatrix } from "./matrix-input.js";
|
|
6
6
|
/** Internal owned coordinates for a Path3 result; no mutable coordinates escape the path value. */
|
|
7
7
|
export function transformPath3(path, placement) {
|
|
8
8
|
const transform = readTransformMatrix(placement, 3);
|
|
@@ -28,6 +28,9 @@ const transformContourWithMatrix = (loop, transform, tolerance) => {
|
|
|
28
28
|
/**
|
|
29
29
|
* Transforms serialized polygon data with reflection-safe winding, without an engine.
|
|
30
30
|
* Use Section.transform(placement) when authoring filled geometry; this utility serves pure data preparation.
|
|
31
|
+
*
|
|
32
|
+
* @param region - Millimetre polygons whose boundaries are normalized before placement.
|
|
33
|
+
* @param transform - Planar affine placement; reflections preserve winding.
|
|
31
34
|
*/
|
|
32
35
|
export function transformRegionData(region, transform, tolerance = {}) {
|
|
33
36
|
const planar = embedTransform2(readTransformMatrix(transform, 2), tolerance);
|
|
@@ -1,21 +1,9 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { resolveGeometryTolerance } from "
|
|
3
|
-
import { validateTransform3 } from "./
|
|
4
|
-
/** Embeds
|
|
5
|
-
export function
|
|
6
|
-
|
|
7
|
-
throw new GeometryError("INVALID_ARGUMENT", "XY matrices require exactly nine entries.");
|
|
8
|
-
}
|
|
9
|
-
if (!matrix.every(Number.isFinite)) {
|
|
10
|
-
throw new GeometryError("NON_FINITE_VALUE", "XY transforms require nine finite values.");
|
|
11
|
-
}
|
|
12
|
-
const tolerance = resolveGeometryTolerance(1, options);
|
|
13
|
-
if (Math.abs(matrix[6]) > tolerance.angular ||
|
|
14
|
-
Math.abs(matrix[7]) > tolerance.angular ||
|
|
15
|
-
Math.abs(matrix[8] - 1) > tolerance.angular) {
|
|
16
|
-
throw new GeometryError("INVALID_ARGUMENT", "XY transform final row must be [0, 0, 1].");
|
|
17
|
-
}
|
|
18
|
-
return Object.freeze(validateTransform3([
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { resolveGeometryTolerance } from "../tolerance.js";
|
|
3
|
+
import { validateTransform3 } from "./affine3.js";
|
|
4
|
+
/** @internal Embeds an already validated XY matrix into an owned XYZ matrix without revalidation. */
|
|
5
|
+
export function embedValidatedTransform2(matrix) {
|
|
6
|
+
return [
|
|
19
7
|
matrix[0],
|
|
20
8
|
matrix[1],
|
|
21
9
|
0,
|
|
@@ -32,7 +20,23 @@ export function embedTransform2(matrix, options = {}) {
|
|
|
32
20
|
0,
|
|
33
21
|
0,
|
|
34
22
|
1,
|
|
35
|
-
]
|
|
23
|
+
];
|
|
24
|
+
}
|
|
25
|
+
/** Embeds a validated affine XY matrix into XYZ, leaving Z unchanged. */
|
|
26
|
+
export function embedTransform2(matrix, options = {}) {
|
|
27
|
+
if (!Array.isArray(matrix) || matrix.length !== 9) {
|
|
28
|
+
throw new GeometryError("INVALID_ARGUMENT", "XY matrices require exactly nine entries.");
|
|
29
|
+
}
|
|
30
|
+
if (!matrix.every(Number.isFinite)) {
|
|
31
|
+
throw new GeometryError("NON_FINITE_VALUE", "XY transforms require nine finite values.");
|
|
32
|
+
}
|
|
33
|
+
const tolerance = resolveGeometryTolerance(1, options);
|
|
34
|
+
if (Math.abs(matrix[6]) > tolerance.angular ||
|
|
35
|
+
Math.abs(matrix[7]) > tolerance.angular ||
|
|
36
|
+
Math.abs(matrix[8] - 1) > tolerance.angular) {
|
|
37
|
+
throw new GeometryError("INVALID_ARGUMENT", "XY transform final row must be [0, 0, 1].");
|
|
38
|
+
}
|
|
39
|
+
return Object.freeze(validateTransform3(embedValidatedTransform2(matrix), options));
|
|
36
40
|
}
|
|
37
41
|
/** Restricts an affine XYZ matrix to XY; validates the plane independently of sampled points. */
|
|
38
42
|
export function restrictTransform3(matrix, options = {}) {
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { vector3Data } from "../math/vector-value.js";
|
|
3
|
+
import { cross3, dot3, length3 } from "../math/vector3.js";
|
|
4
|
+
import { resolveGeometryTolerance } from "../tolerance.js";
|
|
5
|
+
const coordinates = (input, label) => {
|
|
6
|
+
const values = vector3Data(input);
|
|
7
|
+
const copied = [values[0], values[1], values[2]];
|
|
8
|
+
if (!copied.every(Number.isFinite))
|
|
9
|
+
throw new GeometryError("NON_FINITE_VALUE", `${label} coordinates must be finite.`);
|
|
10
|
+
return copied;
|
|
11
|
+
};
|
|
12
|
+
/** @internal One validation and normalization owner for frame values and placement conversion. */
|
|
13
|
+
export function resolveFrame3(options, tolerance = {}) {
|
|
14
|
+
if (typeof options !== "object" || options === null || Array.isArray(options))
|
|
15
|
+
throw new GeometryError("INVALID_ARGUMENT", "A frame requires an origin and three axes.");
|
|
16
|
+
const origin = coordinates(options.origin, "Frame origin");
|
|
17
|
+
const resolved = resolveGeometryTolerance(1, tolerance);
|
|
18
|
+
const axis = (input) => {
|
|
19
|
+
const value = coordinates(input, "Frame axis");
|
|
20
|
+
const length = length3(value);
|
|
21
|
+
if (Math.abs(length - 1) > resolved.angular)
|
|
22
|
+
throw new GeometryError("INVALID_ARGUMENT", "Frame axes must have unit length.");
|
|
23
|
+
if (length <= resolved.linear)
|
|
24
|
+
throw new GeometryError("DEGENERATE_GEOMETRY", "Frame axes must have non-zero length.");
|
|
25
|
+
value[0] /= length;
|
|
26
|
+
value[1] /= length;
|
|
27
|
+
value[2] /= length;
|
|
28
|
+
return value;
|
|
29
|
+
};
|
|
30
|
+
const xAxis = axis(options.xAxis);
|
|
31
|
+
const yAxis = axis(options.yAxis);
|
|
32
|
+
const zAxis = axis(options.zAxis);
|
|
33
|
+
if (Math.abs(dot3(xAxis, yAxis)) > resolved.angular ||
|
|
34
|
+
Math.abs(dot3(xAxis, zAxis)) > resolved.angular ||
|
|
35
|
+
Math.abs(dot3(yAxis, zAxis)) > resolved.angular ||
|
|
36
|
+
dot3(cross3(xAxis, yAxis), zAxis) < 1 - resolved.angular)
|
|
37
|
+
throw new GeometryError("INVALID_ARGUMENT", "Frame axes must be right-handed and mutually orthogonal.");
|
|
38
|
+
return { origin, xAxis, yAxis, zAxis };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Creates a copied, deeply frozen plain coordinate frame in world space.
|
|
42
|
+
* Axes must be right-handed, unit length, and mutually orthogonal. Only accepted numerical
|
|
43
|
+
* roundoff is normalized; scale, shear, reflection, and materially invalid bases reject.
|
|
44
|
+
* Frames are placement inputs; use transform3(frame) when affine methods are needed.
|
|
45
|
+
*
|
|
46
|
+
* @example Place an XY profile using an analytic radial frame
|
|
47
|
+
* ```ts
|
|
48
|
+
* const radial = frame3({
|
|
49
|
+
* origin: [20, 0, 5],
|
|
50
|
+
* xAxis: [0, 1, 0],
|
|
51
|
+
* yAxis: [0, 0, 1],
|
|
52
|
+
* zAxis: [1, 0, 0],
|
|
53
|
+
* });
|
|
54
|
+
* const placed = transform3(radial).applyPoint([2, 3, 0]).toData(); // [20, 2, 8]
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export function frame3(options) {
|
|
58
|
+
const frame = resolveFrame3(options);
|
|
59
|
+
Object.freeze(frame.origin);
|
|
60
|
+
Object.freeze(frame.xAxis);
|
|
61
|
+
Object.freeze(frame.yAxis);
|
|
62
|
+
Object.freeze(frame.zAxis);
|
|
63
|
+
return Object.freeze(frame);
|
|
64
|
+
}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { frameTransform3 } from "./affine3.js";
|
|
3
|
+
/** @internal Recognizes frame-shaped data after giving callable toData values precedence. */
|
|
4
|
+
export function isFrame3Input(input) {
|
|
5
|
+
return typeof input === "object" && input !== null && !Array.isArray(input) && "origin" in input;
|
|
6
|
+
}
|
|
2
7
|
export function readTransformMatrix(input, dimension) {
|
|
3
8
|
let matrix = input;
|
|
4
9
|
if (typeof input === "object" && input !== null && !Array.isArray(input)) {
|
|
5
10
|
const method = Reflect.get(input, "toData");
|
|
6
11
|
if (typeof method === "function")
|
|
7
12
|
matrix = Reflect.apply(method, input, []);
|
|
13
|
+
else if (dimension === 3 && isFrame3Input(input))
|
|
14
|
+
matrix = frameTransform3(input);
|
|
8
15
|
}
|
|
9
16
|
const length = dimension === 2 ? 9 : 16;
|
|
10
17
|
if (!Array.isArray(matrix) || matrix.length !== length) {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { immutableMathClass } from "
|
|
3
|
-
import { vector2, vector2Data, vector3, vector3Data, } from "
|
|
4
|
-
import {
|
|
5
|
-
import { embedTransform2, restrictTransform3 } from "./
|
|
6
|
-
import {
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { immutableMathClass } from "../math/immutable-value.js";
|
|
3
|
+
import { vector2, vector2Data, vector3, vector3Data, } from "../math/vector-value.js";
|
|
4
|
+
import { applyInverseTranspose3, applyValidatedTransformDirection3, applyValidatedTransformPoint3, eulerTransform3, IDENTITY_TRANSFORM3, inverseLinearTransform3, inverseTransform3, multiplyTransform3, rotationTransform3, scaleTransform3, translationTransform3, validateTransform3, } from "./affine3.js";
|
|
5
|
+
import { embedTransform2, restrictTransform3 } from "./dimensions.js";
|
|
6
|
+
import { readTransformMatrix } from "./matrix-input.js";
|
|
7
7
|
const pivotTransform = (matrix, pivot) => pivot === undefined
|
|
8
8
|
? matrix
|
|
9
|
-
:
|
|
9
|
+
: multiplyTransform3(translationTransform3(pivot), multiplyTransform3(matrix, translationTransform3([-pivot[0], -pivot[1], -pivot[2]])));
|
|
10
10
|
const xyz = (point) => [point[0], point[1], 0];
|
|
11
11
|
const xy = (point) => [point[0], point[1]];
|
|
12
12
|
const pivot2 = (options) => {
|
|
@@ -75,7 +75,7 @@ const Placement3 = /* @__PURE__ */ immutableMathClass(class Placement3 {
|
|
|
75
75
|
return this.andThen(pivotTransform(scaleTransform3(values), pivot3(options)));
|
|
76
76
|
}
|
|
77
77
|
andThen(next) {
|
|
78
|
-
return new Placement3(
|
|
78
|
+
return new Placement3(multiplyTransform3(snapshotTransform3(readTransformMatrix(next, 3)), this.matrix));
|
|
79
79
|
}
|
|
80
80
|
inverse() {
|
|
81
81
|
return new Placement3(inverseTransform3(this.matrix));
|
|
@@ -148,6 +148,8 @@ const Placement2 = /* @__PURE__ */ immutableMathClass(class Placement2 {
|
|
|
148
148
|
*
|
|
149
149
|
* Use `toData()` for frozen matrix interchange.
|
|
150
150
|
*
|
|
151
|
+
* @param input - XY affine value or row-major 3x3 matrix; copied. Defaults to identity.
|
|
152
|
+
*
|
|
151
153
|
* @example
|
|
152
154
|
* ```ts
|
|
153
155
|
* const placement = transform2().rotate(90).translate([10, 0]);
|
|
@@ -162,19 +164,35 @@ export function transform2(input) {
|
|
|
162
164
|
/**
|
|
163
165
|
* Creates an immutable XYZ transform, identity by default.
|
|
164
166
|
*
|
|
165
|
-
* Values and
|
|
167
|
+
* Values, matrices, and frames are copied and validated.
|
|
166
168
|
* Calls apply in written order; rotations use degrees and pivots use current world coordinates.
|
|
167
169
|
* Zero scales, singular matrices, nonfinite inputs and zero rotation axes throw GeometryError.
|
|
168
|
-
*
|
|
170
|
+
* A frame supplies its origin in millimetres and right-handed orthonormal axes as local-to-world
|
|
171
|
+
* columns. Invalid axes reject; unit-length roundoff is normalized within geometry tolerance.
|
|
169
172
|
*
|
|
170
173
|
* Use `toData()` for frozen matrix interchange.
|
|
171
|
-
* [
|
|
174
|
+
* [multiplyTransform3](/docs/reference/math/multiplyTransform3) multiplies left and right matrices;
|
|
175
|
+
* the right factor acts first on column vectors.
|
|
176
|
+
*
|
|
177
|
+
* @param input - XYZ affine value, row-major 4x4 matrix, or frame; copied. Defaults to identity.
|
|
172
178
|
*
|
|
173
179
|
* @example
|
|
174
180
|
* ```ts
|
|
175
181
|
* const placement = transform3().rotate([0, 0, 90]).translate([10, 0, 0]);
|
|
176
182
|
* placement.applyPoint([1, 0, 0]).toData(); // approximately [10, 1, 0]
|
|
177
183
|
* ```
|
|
184
|
+
*
|
|
185
|
+
* @example Convert a coordinate frame to an affine value
|
|
186
|
+
* ```ts
|
|
187
|
+
* const local = frame3({
|
|
188
|
+
* origin: [10, 0, 0],
|
|
189
|
+
* xAxis: [0, 1, 0],
|
|
190
|
+
* yAxis: [-1, 0, 0],
|
|
191
|
+
* zAxis: [0, 0, 1],
|
|
192
|
+
* });
|
|
193
|
+
* const placement = transform3(local);
|
|
194
|
+
* placement.applyPoint([2, 0, 0]).toData(); // [10, 2, 0]
|
|
195
|
+
* ```
|
|
178
196
|
*/
|
|
179
197
|
export function transform3(input = IDENTITY_TRANSFORM3) {
|
|
180
198
|
return new Placement3(snapshotTransform3(readTransformMatrix(input, 3)));
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/** Immutable
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export { transform2, transform3, } from "./geometry/transform-value.js";
|
|
5
|
-
export { vector2, vector3, } from "./geometry/math/vector-value.js";
|
|
6
|
-
export { path2, path3, } from "./geometry/paths/path-value.js";
|
|
7
|
-
export * from "./model/operations.js";
|
|
8
|
-
export * from "./model/generation.js";
|
|
9
|
-
export { immutableBuffer } from "./geometry/immutable-buffer.js";
|
|
1
|
+
/** Immutable solid and section recipes; the host owns geometry evaluation. @packageDocumentation */
|
|
2
|
+
export { box, circle, cornerCutter, cylinder, edgeCutter, ellipse, extrude, gridPattern, heightfield, holeCutter, hull, implicit, internalThreadCutter, intersect, join, knuckleHinge, linearPattern, loft, minkowskiSum, pathPattern, polygon, radialPattern, rectangle, regularPolygon, revolve, solidFromMesh, sphere, star, stroke, svgPathSection, svgSection, sweep, textSection, threadRidge, threadedNut, threadedRod, torus, tube, union, } from "./model/operations.js";
|
|
3
|
+
export { generate, GenerationError } from "./model/generation.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GeometryError } from "../geometry/errors.js";
|
|
2
2
|
// One protocol key lets locally bundled operation wrappers resolve the host's execution
|
|
3
3
|
// without depending on package instances, class identity, or initializing a native runtime.
|
|
4
|
-
const executionKey = Symbol.for("@metamesh/modeling/execution/
|
|
4
|
+
const executionKey = Symbol.for("@metamesh/modeling/execution/13");
|
|
5
5
|
const bindings = globalThis;
|
|
6
6
|
/** Internal host binding. Executable callbacks are synchronous and may not nest executions. */
|
|
7
7
|
export function bindModelContext(context, build) {
|
|
@@ -10,7 +10,7 @@ export function bindModelContext(context, build) {
|
|
|
10
10
|
operation: "build",
|
|
11
11
|
});
|
|
12
12
|
}
|
|
13
|
-
bindings[executionKey] = { version:
|
|
13
|
+
bindings[executionKey] = { version: 13, context };
|
|
14
14
|
try {
|
|
15
15
|
return build();
|
|
16
16
|
}
|
|
@@ -31,5 +31,5 @@ export function currentModelContext(operation) {
|
|
|
31
31
|
/** Reads an optional binding without initializing an engine or creating ambient authoring state. */
|
|
32
32
|
export function activeModelContext() {
|
|
33
33
|
const binding = bindings[executionKey];
|
|
34
|
-
return binding?.version ===
|
|
34
|
+
return binding?.version === 13 ? binding.context : undefined;
|
|
35
35
|
}
|
package/dist/model/generation.js
CHANGED
|
@@ -18,6 +18,8 @@ export class GenerationError extends Error {
|
|
|
18
18
|
* runtime capture rejects arrays at the root, ordinary class instances, mutable buffers, and functions.
|
|
19
19
|
* Supply live capabilities through services. Use `memo` only for work worth reusing.
|
|
20
20
|
*
|
|
21
|
+
* @param callback - Synchronous callback returning one part or a readonly part array.
|
|
22
|
+
*
|
|
21
23
|
* @example A simple model
|
|
22
24
|
* ```ts
|
|
23
25
|
* const model = generate<{ height: number }>(({ params, part, assert }) => {
|