@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
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { GeometryError } from "../../geometry/errors.js";
|
|
2
|
+
import { captureDiagnosticPath } from "../../model/diagnostic-path.js";
|
|
3
|
+
import { GenerationError, } from "../../model/generation.js";
|
|
4
|
+
import { assertSynchronousScopeResult } from "../native/ownership.js";
|
|
5
|
+
const canonicalId = (id) => typeof id === "string" && id.length <= 64 && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(id);
|
|
6
|
+
function invalid(message) {
|
|
7
|
+
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "memo" });
|
|
8
|
+
}
|
|
9
|
+
/** Owns one revision's parts and diagnostics; caught assertions remain fatal to that revision. */
|
|
10
|
+
export function createGenerationDeclarations(options) {
|
|
11
|
+
const { assertActive, isMemoEvaluating, hasParameter } = options;
|
|
12
|
+
const diagnostics = [];
|
|
13
|
+
const declaredParts = new WeakSet();
|
|
14
|
+
const partIds = new Set();
|
|
15
|
+
let declaring = true;
|
|
16
|
+
let assertionFailure;
|
|
17
|
+
const assertNoFailedAssertion = () => {
|
|
18
|
+
if (assertionFailure !== undefined)
|
|
19
|
+
throw assertionFailure;
|
|
20
|
+
};
|
|
21
|
+
const issue = (severity, message, metadata) => {
|
|
22
|
+
assertActive();
|
|
23
|
+
if (typeof message !== "string" || message.length === 0)
|
|
24
|
+
invalid("Diagnostics require a nonempty message.");
|
|
25
|
+
if (metadata?.parameterId !== undefined && !hasParameter(metadata.parameterId))
|
|
26
|
+
invalid("Diagnostic parameterId must name an existing parameter.");
|
|
27
|
+
diagnostics.push(Object.freeze({
|
|
28
|
+
severity,
|
|
29
|
+
message,
|
|
30
|
+
...(metadata?.parameterId === undefined ? {} : { parameterId: metadata.parameterId }),
|
|
31
|
+
...(metadata?.path === undefined ? {} : { path: captureDiagnosticPath(metadata.path) }),
|
|
32
|
+
}));
|
|
33
|
+
if (severity === "error") {
|
|
34
|
+
// A model's catch block must not turn a failed assertion into a successful revision.
|
|
35
|
+
assertionFailure ??= new GenerationError(diagnostics);
|
|
36
|
+
throw assertionFailure;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const part = (id, value) => {
|
|
40
|
+
assertActive();
|
|
41
|
+
if (!declaring || isMemoEvaluating())
|
|
42
|
+
invalid("Declare parts only in outer generation.");
|
|
43
|
+
if (!canonicalId(id) || partIds.has(id))
|
|
44
|
+
invalid("Part IDs must be unique canonical identifiers.");
|
|
45
|
+
partIds.add(id);
|
|
46
|
+
const configuration = typeof value === "object" && value !== null && "geometry" in value
|
|
47
|
+
? value
|
|
48
|
+
: { geometry: value };
|
|
49
|
+
if ("position" in configuration || "rotation" in configuration)
|
|
50
|
+
invalid("Part placement uses transform.");
|
|
51
|
+
if ([configuration.geometry, configuration.transform].some((item) => typeof item === "function"))
|
|
52
|
+
invalid("Parts require ordinary geometry and transform values.");
|
|
53
|
+
const descriptor = Object.freeze({ ...configuration, id });
|
|
54
|
+
declaredParts.add(descriptor);
|
|
55
|
+
return descriptor;
|
|
56
|
+
};
|
|
57
|
+
function assert(condition, message, metadata) {
|
|
58
|
+
assertActive();
|
|
59
|
+
if (typeof condition !== "boolean")
|
|
60
|
+
invalid("assert requires a boolean condition.");
|
|
61
|
+
if (!condition)
|
|
62
|
+
issue("error", message, metadata);
|
|
63
|
+
}
|
|
64
|
+
const warn = (message, metadata) => {
|
|
65
|
+
if (!declaring || isMemoEvaluating())
|
|
66
|
+
invalid("Warnings must be emitted in outer generation.");
|
|
67
|
+
issue("warning", message, metadata);
|
|
68
|
+
};
|
|
69
|
+
return {
|
|
70
|
+
part,
|
|
71
|
+
assert,
|
|
72
|
+
warn,
|
|
73
|
+
diagnostics: diagnostics,
|
|
74
|
+
get declaring() {
|
|
75
|
+
return declaring;
|
|
76
|
+
},
|
|
77
|
+
assertNoFailedAssertion,
|
|
78
|
+
finish(output) {
|
|
79
|
+
assertSynchronousScopeResult(output, () => new GeometryError("INVALID_ARGUMENT", "Generation callbacks must be synchronous."));
|
|
80
|
+
assertNoFailedAssertion();
|
|
81
|
+
declaring = false;
|
|
82
|
+
const parts = Array.isArray(output)
|
|
83
|
+
? output
|
|
84
|
+
: [output];
|
|
85
|
+
if (parts.length === 0)
|
|
86
|
+
invalid("Generation must return at least one declared part.");
|
|
87
|
+
if (parts.length > options.maxParts)
|
|
88
|
+
throw new GeometryError("COMPLEXITY_LIMIT", `Output exceeds ${options.maxParts} parts.`);
|
|
89
|
+
const ids = new Set();
|
|
90
|
+
for (const descriptor of parts) {
|
|
91
|
+
if (!declaredParts.has(descriptor) || ids.has(descriptor.id))
|
|
92
|
+
invalid("Return each declared output part at most once.");
|
|
93
|
+
ids.add(descriptor.id);
|
|
94
|
+
}
|
|
95
|
+
return parts;
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
@@ -14,46 +14,91 @@ function children(value, includeRecipeOperands = false) {
|
|
|
14
14
|
return includeRecipeOperands ? recipe.call.args : [];
|
|
15
15
|
return generationDataMetadata(value)?.children ?? Object.values(value);
|
|
16
16
|
}
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Projects diagnostic provenance without participating in cache invalidation.
|
|
19
|
+
* Immutable membership summaries and their weak reverse index survive revisions; origin IDs do not.
|
|
20
|
+
*/
|
|
18
21
|
export function createMemoProvenance() {
|
|
19
22
|
const summaries = new WeakMap();
|
|
20
|
-
const
|
|
21
|
-
|
|
23
|
+
const memberships = new WeakMap();
|
|
24
|
+
const summarize = (value) => {
|
|
25
|
+
let summary = summaries.get(value);
|
|
22
26
|
if (summary !== undefined)
|
|
23
27
|
return summary;
|
|
24
28
|
summary = new WeakSet();
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
const reference = new WeakRef(summary);
|
|
30
|
+
const pending = [value];
|
|
31
|
+
while (pending.length > 0) {
|
|
32
|
+
const current = pending.pop();
|
|
33
|
+
if (summary.has(current))
|
|
34
|
+
continue;
|
|
35
|
+
summary.add(current);
|
|
36
|
+
let membership = memberships.get(current);
|
|
37
|
+
if (membership === undefined) {
|
|
38
|
+
membership = { summaries: new Set(), compactAt: 16 };
|
|
39
|
+
memberships.set(current, membership);
|
|
40
|
+
}
|
|
41
|
+
// A surviving child must not retain its obsolete output containers. Weak references
|
|
42
|
+
// preserve warm summaries without keeping roots alive. Geometric compaction amortizes
|
|
43
|
+
// cleanup even when many live outputs share this child; queries also prune dead entries.
|
|
44
|
+
if (membership.summaries.size >= membership.compactAt) {
|
|
45
|
+
for (const known of membership.summaries)
|
|
46
|
+
if (known.deref() === undefined)
|
|
47
|
+
membership.summaries.delete(known);
|
|
48
|
+
membership.compactAt = Math.max(16, membership.summaries.size * 2);
|
|
49
|
+
}
|
|
50
|
+
membership.summaries.add(reference);
|
|
51
|
+
for (const child of children(current))
|
|
52
|
+
if (objectValue(child))
|
|
53
|
+
pending.push(child);
|
|
54
|
+
}
|
|
55
|
+
summaries.set(value, summary);
|
|
34
56
|
return summary;
|
|
35
57
|
};
|
|
36
58
|
return (output, modelParameters, calls) => {
|
|
37
|
-
const
|
|
59
|
+
const origins = new Map();
|
|
60
|
+
const owners = (value) => {
|
|
61
|
+
const found = new Set();
|
|
62
|
+
const membership = memberships.get(value);
|
|
63
|
+
if (membership === undefined)
|
|
64
|
+
return found;
|
|
65
|
+
// Cached dormant outputs can outnumber this revision's calls. Probe the smaller index
|
|
66
|
+
// so a surviving shared child does not make current work proportional to cache history.
|
|
67
|
+
if (origins.size < membership.summaries.size) {
|
|
68
|
+
for (const [summary, ids] of origins)
|
|
69
|
+
if (summary.has(value))
|
|
70
|
+
for (const id of ids)
|
|
71
|
+
found.add(id);
|
|
72
|
+
return found;
|
|
73
|
+
}
|
|
74
|
+
for (const reference of membership.summaries) {
|
|
75
|
+
const summary = reference.deref();
|
|
76
|
+
if (summary === undefined)
|
|
77
|
+
membership.summaries.delete(reference);
|
|
78
|
+
else
|
|
79
|
+
for (const id of origins.get(summary) ?? [])
|
|
80
|
+
found.add(id);
|
|
81
|
+
}
|
|
82
|
+
return found;
|
|
83
|
+
};
|
|
38
84
|
const transitive = new Map();
|
|
39
85
|
const roots = (values) => {
|
|
40
86
|
const found = new Set(), visited = new WeakSet();
|
|
41
|
-
const
|
|
87
|
+
const pending = [...values];
|
|
88
|
+
while (pending.length > 0) {
|
|
89
|
+
const value = pending.pop();
|
|
42
90
|
if (!objectValue(value) || visited.has(value))
|
|
43
|
-
|
|
91
|
+
continue;
|
|
44
92
|
visited.add(value);
|
|
45
|
-
|
|
46
|
-
for (const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (!owned)
|
|
93
|
+
const known = owners(value);
|
|
94
|
+
for (const id of known)
|
|
95
|
+
found.add(id);
|
|
96
|
+
// Once an object has an origin, its owning calls supply transitive dependencies.
|
|
97
|
+
// Only unowned recipes expose operands; containing a recipe never claims its operands.
|
|
98
|
+
if (known.size === 0)
|
|
52
99
|
for (const child of children(value, true))
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
for (const value of values)
|
|
56
|
-
visit(value);
|
|
100
|
+
pending.push(child);
|
|
101
|
+
}
|
|
57
102
|
return found;
|
|
58
103
|
};
|
|
59
104
|
const allParameters = (direct, dependencies) => {
|
|
@@ -64,13 +109,21 @@ export function createMemoProvenance() {
|
|
|
64
109
|
return parameters;
|
|
65
110
|
};
|
|
66
111
|
const computations = calls.map((call) => {
|
|
112
|
+
// Publish this output's origin after reading its inputs: aliases can depend on earlier
|
|
113
|
+
// producers of the same value, while the current call cannot become its own dependency.
|
|
67
114
|
const dependencies = roots(call.inputs);
|
|
68
115
|
const parameters = [...call.parameters.keys()]
|
|
69
116
|
.filter((key) => typeof key === "string")
|
|
70
117
|
.sort();
|
|
71
118
|
transitive.set(call.id, allParameters(parameters, dependencies));
|
|
72
|
-
if (objectValue(call.value))
|
|
73
|
-
|
|
119
|
+
if (objectValue(call.value)) {
|
|
120
|
+
const summary = summarize(call.value);
|
|
121
|
+
const known = origins.get(summary);
|
|
122
|
+
if (known === undefined)
|
|
123
|
+
origins.set(summary, [call.id]);
|
|
124
|
+
else
|
|
125
|
+
known.push(call.id);
|
|
126
|
+
}
|
|
74
127
|
return Object.freeze({
|
|
75
128
|
id: call.id,
|
|
76
129
|
parameters: Object.freeze(parameters),
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { GeometryError } from "../../geometry/errors.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { captureGenerationArguments, captureGenerationValue, compareGenerationValues, generationDataEntries, generationValueBytes, isImmutableGenerationValue, } from "../../model/immutable-generation-data.js";
|
|
2
|
+
import { resolveGeometryResolution } from "../../geometry/sampling/resolution.js";
|
|
3
|
+
import { captureGenerationArguments, captureGenerationValue, compareGenerationValues, generationValueBytes, } from "../../model/immutable-generation-data.js";
|
|
5
4
|
import { assertSynchronousScopeResult } from "../native/ownership.js";
|
|
5
|
+
import { createGenerationDeclarations } from "./declarations.js";
|
|
6
6
|
import { createMemoProvenance } from "./dependencies.js";
|
|
7
|
+
import { createParameterSource } from "./parameters.js";
|
|
7
8
|
const maxEntries = 100_000;
|
|
8
9
|
const maxVersions = 8;
|
|
9
|
-
const source = Symbol("params-source"), contextSource = Symbol("model-context-source"),
|
|
10
|
-
const canonicalId = (id) => typeof id === "string" && id.length <= 64 && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(id);
|
|
10
|
+
const source = Symbol("params-source"), contextSource = Symbol("model-context-source"), negativeZero = Symbol("negative-zero");
|
|
11
11
|
function invalid(message) {
|
|
12
12
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "memo" });
|
|
13
13
|
}
|
|
@@ -33,46 +33,36 @@ function entryOverhead(inputs, parameters) {
|
|
|
33
33
|
bytes += 48 + (typeof key === "string" ? key.length * 2 : 8);
|
|
34
34
|
return bytes;
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
/** Owns bounded successful memo histories and provisional per-revision evaluation. */
|
|
47
|
-
export function createGenerationGraph(options, maxParts) {
|
|
36
|
+
/**
|
|
37
|
+
* Owns bounded successful memo histories and provisional per-revision evaluation.
|
|
38
|
+
* begin() isolates the pending trie from committed history. Retention selects a priority-ordered
|
|
39
|
+
* prefix; only the session may commit it after native cleanup succeeds. Closing a revision drops
|
|
40
|
+
* its temporary references without changing the previously committed cache.
|
|
41
|
+
*/
|
|
42
|
+
export function createGenerationGraph(options, limits) {
|
|
43
|
+
const resolution = Object.freeze(resolveGeometryResolution({ ...options.resolution }, limits));
|
|
44
|
+
const effectiveLimits = Object.freeze({ ...limits });
|
|
48
45
|
let committed = new WeakMap();
|
|
49
46
|
let retained = [];
|
|
50
47
|
let clock = 0;
|
|
51
|
-
|
|
48
|
+
const parameterSource = createParameterSource();
|
|
52
49
|
const validated = new WeakSet();
|
|
53
50
|
const provenance = createMemoProvenance();
|
|
54
51
|
return {
|
|
55
52
|
begin(input, checkReactiveRead) {
|
|
56
|
-
let active = true
|
|
53
|
+
let active = true;
|
|
57
54
|
let checkAccess = checkReactiveRead, previousEntries = committed, pending = new WeakMap();
|
|
58
55
|
let previousRetained = retained, revisionClock = clock, selected;
|
|
59
|
-
const
|
|
60
|
-
const snapshot = captureParameters(inputValues, previousInput, previousSnapshot);
|
|
61
|
-
const keySignature = JSON.stringify(Object.keys(snapshot));
|
|
62
|
-
const stack = [], calls = [], diagnostics = [];
|
|
56
|
+
const stack = [], calls = [];
|
|
63
57
|
let boundContext;
|
|
64
58
|
const completed = [];
|
|
65
59
|
const reported = new WeakSet();
|
|
66
|
-
const
|
|
60
|
+
const outerReads = new Set();
|
|
67
61
|
const assertActive = () => {
|
|
68
62
|
if (!active)
|
|
69
63
|
invalid("The generation context has expired.");
|
|
70
64
|
checkAccess();
|
|
71
65
|
};
|
|
72
|
-
const assertNoFailedAssertion = () => {
|
|
73
|
-
if (assertionFailure !== undefined)
|
|
74
|
-
throw assertionFailure;
|
|
75
|
-
};
|
|
76
66
|
const record = (key, value) => {
|
|
77
67
|
if (stack.length !== 0)
|
|
78
68
|
for (const current of stack)
|
|
@@ -80,6 +70,14 @@ export function createGenerationGraph(options, maxParts) {
|
|
|
80
70
|
else if (typeof key === "string")
|
|
81
71
|
outerReads.add(key);
|
|
82
72
|
};
|
|
73
|
+
const parameters = parameterSource.begin(input, assertActive, record);
|
|
74
|
+
const { params } = parameters;
|
|
75
|
+
const declarations = createGenerationDeclarations({
|
|
76
|
+
maxParts: effectiveLimits.maxParts,
|
|
77
|
+
assertActive,
|
|
78
|
+
isMemoEvaluating: () => stack.length !== 0,
|
|
79
|
+
hasParameter: parameters.has,
|
|
80
|
+
});
|
|
83
81
|
const publish = (entry, node) => {
|
|
84
82
|
if (!reported.has(node)) {
|
|
85
83
|
reported.add(node);
|
|
@@ -99,8 +97,7 @@ export function createGenerationGraph(options, maxParts) {
|
|
|
99
97
|
return entry.value;
|
|
100
98
|
};
|
|
101
99
|
const roots = (entries) => [
|
|
102
|
-
|
|
103
|
-
inputValues,
|
|
100
|
+
...parameters.retainedValues,
|
|
104
101
|
...entries.flatMap((entry) => [entry, ...entry.entry.parameters.values()]),
|
|
105
102
|
];
|
|
106
103
|
// Current tuples take priority. Unused successful tuples stay ordered by last use;
|
|
@@ -183,42 +180,11 @@ export function createGenerationGraph(options, maxParts) {
|
|
|
183
180
|
const sameReads = (left, right) => left === right ||
|
|
184
181
|
(left.parameters.size === right.parameters.size &&
|
|
185
182
|
[...left.parameters].every(([key, value]) => right.parameters.has(key) && Object.is(value, right.parameters.get(key))));
|
|
186
|
-
// One snapshot-backed proxy is shared by outer generation and every call. It is NEVER
|
|
187
|
-
// redirected to another revision, so identity/aliasing within a call remain ordinary JS.
|
|
188
|
-
const params = new Proxy(snapshot, {
|
|
189
|
-
get(target, key) {
|
|
190
|
-
assertActive();
|
|
191
|
-
const value = Reflect.get(target, key);
|
|
192
|
-
if (typeof key === "string")
|
|
193
|
-
record(key, value);
|
|
194
|
-
return value;
|
|
195
|
-
},
|
|
196
|
-
set: () => invalid("Parameters are immutable."),
|
|
197
|
-
deleteProperty: () => invalid("Parameters are immutable."),
|
|
198
|
-
ownKeys(target) {
|
|
199
|
-
assertActive();
|
|
200
|
-
record(keys, keySignature);
|
|
201
|
-
return Reflect.ownKeys(target);
|
|
202
|
-
},
|
|
203
|
-
has(target, key) {
|
|
204
|
-
assertActive();
|
|
205
|
-
record(keys, keySignature);
|
|
206
|
-
return Reflect.has(target, key);
|
|
207
|
-
},
|
|
208
|
-
getOwnPropertyDescriptor(target, key) {
|
|
209
|
-
assertActive();
|
|
210
|
-
record(keys, keySignature);
|
|
211
|
-
const descriptor = Reflect.getOwnPropertyDescriptor(target, key);
|
|
212
|
-
if (typeof key === "string")
|
|
213
|
-
record(key, descriptor?.value);
|
|
214
|
-
return descriptor;
|
|
215
|
-
},
|
|
216
|
-
});
|
|
217
183
|
const memo = ((fn, ...args) => {
|
|
218
184
|
assertActive();
|
|
219
185
|
const parent = stack.at(-1);
|
|
220
186
|
try {
|
|
221
|
-
if (!declaring || typeof fn !== "function")
|
|
187
|
+
if (!declarations.declaring || typeof fn !== "function")
|
|
222
188
|
invalid("Use memo(fn, ...args) during generation.");
|
|
223
189
|
// Normal immutable args compare by identity. Only the explicitly passed current params
|
|
224
190
|
// object is keyed by source + observed field values instead of revision proxy identity.
|
|
@@ -249,7 +215,7 @@ export function createGenerationGraph(options, maxParts) {
|
|
|
249
215
|
return publish(node.state.entry, node);
|
|
250
216
|
}
|
|
251
217
|
calls.push({ fn, inputs, node });
|
|
252
|
-
const previous = history?.find((entry) => [...entry.parameters].every(([key, value]) => Object.is(value,
|
|
218
|
+
const previous = history?.find((entry) => [...entry.parameters].every(([key, value]) => Object.is(value, parameters.read(key))));
|
|
253
219
|
if (previous !== undefined && options.verifyCache !== true) {
|
|
254
220
|
node.state = { kind: "ready", entry: previous };
|
|
255
221
|
return publish(previous, node);
|
|
@@ -264,7 +230,7 @@ export function createGenerationGraph(options, maxParts) {
|
|
|
264
230
|
try {
|
|
265
231
|
const result = Reflect.apply(fn, undefined, args);
|
|
266
232
|
assertSynchronousScopeResult(result, () => new GeometryError("INVALID_ARGUMENT", "Memo functions must be synchronous."));
|
|
267
|
-
assertNoFailedAssertion();
|
|
233
|
+
declarations.assertNoFailedAssertion();
|
|
268
234
|
// Capture is inside the tracked scope: returning/spreading params records all fields.
|
|
269
235
|
let value = captureGenerationValue(result);
|
|
270
236
|
if (previous !== undefined) {
|
|
@@ -299,58 +265,14 @@ export function createGenerationGraph(options, maxParts) {
|
|
|
299
265
|
throw error;
|
|
300
266
|
}
|
|
301
267
|
});
|
|
302
|
-
const issue = (severity, message, metadata) => {
|
|
303
|
-
assertActive();
|
|
304
|
-
if (typeof message !== "string" || message.length === 0)
|
|
305
|
-
invalid("Diagnostics require a nonempty message.");
|
|
306
|
-
if (metadata?.parameterId !== undefined && !Object.hasOwn(snapshot, metadata.parameterId))
|
|
307
|
-
invalid("Diagnostic parameterId must name an existing parameter.");
|
|
308
|
-
diagnostics.push(Object.freeze({
|
|
309
|
-
severity,
|
|
310
|
-
message,
|
|
311
|
-
...(metadata?.parameterId === undefined ? {} : { parameterId: metadata.parameterId }),
|
|
312
|
-
...(metadata?.path === undefined ? {} : { path: captureDiagnosticPath(metadata.path) }),
|
|
313
|
-
}));
|
|
314
|
-
if (severity === "error") {
|
|
315
|
-
assertionFailure ??= new GenerationError(diagnostics);
|
|
316
|
-
throw assertionFailure;
|
|
317
|
-
}
|
|
318
|
-
};
|
|
319
|
-
const part = ((id, value) => {
|
|
320
|
-
assertActive();
|
|
321
|
-
if (!declaring || stack.length !== 0)
|
|
322
|
-
invalid("Declare parts only in outer generation.");
|
|
323
|
-
if (!canonicalId(id) || partIds.has(id))
|
|
324
|
-
invalid("Part IDs must be unique canonical identifiers.");
|
|
325
|
-
partIds.add(id);
|
|
326
|
-
const configuration = typeof value === "object" && value !== null && "geometry" in value
|
|
327
|
-
? value
|
|
328
|
-
: { geometry: value };
|
|
329
|
-
if ("position" in configuration || "rotation" in configuration)
|
|
330
|
-
invalid("Part placement uses transform.");
|
|
331
|
-
if ([configuration.geometry, configuration.transform].some((item) => typeof item === "function"))
|
|
332
|
-
invalid("Parts require ordinary geometry and transform values.");
|
|
333
|
-
const descriptor = Object.freeze({ ...configuration, id });
|
|
334
|
-
declaredParts.add(descriptor);
|
|
335
|
-
return descriptor;
|
|
336
|
-
});
|
|
337
|
-
function assert(condition, message, metadata) {
|
|
338
|
-
assertActive();
|
|
339
|
-
if (typeof condition !== "boolean")
|
|
340
|
-
invalid("assert requires a boolean condition.");
|
|
341
|
-
if (!condition)
|
|
342
|
-
issue("error", message, metadata);
|
|
343
|
-
}
|
|
344
268
|
const context = {
|
|
345
269
|
params,
|
|
270
|
+
resolution,
|
|
271
|
+
limits: effectiveLimits,
|
|
346
272
|
memo,
|
|
347
|
-
part,
|
|
348
|
-
assert,
|
|
349
|
-
warn:
|
|
350
|
-
if (!declaring || stack.length !== 0)
|
|
351
|
-
invalid("Warnings must be emitted in outer generation.");
|
|
352
|
-
issue("warning", message, metadata);
|
|
353
|
-
},
|
|
273
|
+
part: declarations.part,
|
|
274
|
+
assert: declarations.assert,
|
|
275
|
+
warn: declarations.warn,
|
|
354
276
|
};
|
|
355
277
|
return {
|
|
356
278
|
context,
|
|
@@ -360,26 +282,8 @@ export function createGenerationGraph(options, maxParts) {
|
|
|
360
282
|
return supplied;
|
|
361
283
|
},
|
|
362
284
|
assertActive,
|
|
363
|
-
diagnostics,
|
|
364
|
-
finish
|
|
365
|
-
assertSynchronousScopeResult(output, () => new GeometryError("INVALID_ARGUMENT", "Generation callbacks must be synchronous."));
|
|
366
|
-
assertNoFailedAssertion();
|
|
367
|
-
declaring = false;
|
|
368
|
-
const parts = Array.isArray(output)
|
|
369
|
-
? output
|
|
370
|
-
: [output];
|
|
371
|
-
if (parts.length === 0)
|
|
372
|
-
invalid("Generation must return at least one declared part.");
|
|
373
|
-
if (parts.length > maxParts)
|
|
374
|
-
throw new GeometryError("COMPLEXITY_LIMIT", `Output exceeds ${maxParts} parts.`);
|
|
375
|
-
const ids = new Set();
|
|
376
|
-
for (const descriptor of parts) {
|
|
377
|
-
if (!declaredParts.has(descriptor) || ids.has(descriptor.id))
|
|
378
|
-
invalid("Return each declared output part at most once.");
|
|
379
|
-
ids.add(descriptor.id);
|
|
380
|
-
}
|
|
381
|
-
return parts;
|
|
382
|
-
},
|
|
285
|
+
diagnostics: declarations.diagnostics,
|
|
286
|
+
finish: declarations.finish,
|
|
383
287
|
dependencies(output) {
|
|
384
288
|
return provenance(output, outerReads, completed);
|
|
385
289
|
},
|
|
@@ -401,8 +305,7 @@ export function createGenerationGraph(options, maxParts) {
|
|
|
401
305
|
committed = next;
|
|
402
306
|
retained = accepted;
|
|
403
307
|
clock = revisionClock;
|
|
404
|
-
|
|
405
|
-
previousSnapshot = snapshot;
|
|
308
|
+
parameters.commit();
|
|
406
309
|
},
|
|
407
310
|
close() {
|
|
408
311
|
active = false;
|
|
@@ -421,8 +324,7 @@ export function createGenerationGraph(options, maxParts) {
|
|
|
421
324
|
committed = new WeakMap();
|
|
422
325
|
retained = [];
|
|
423
326
|
clock = 0;
|
|
424
|
-
|
|
425
|
-
previousSnapshot = {};
|
|
327
|
+
parameterSource.clear();
|
|
426
328
|
},
|
|
427
329
|
};
|
|
428
330
|
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { GeometryError } from "../../geometry/errors.js";
|
|
2
|
+
import { captureGenerationValue, generationDataEntries, isImmutableGenerationValue, } from "../../model/immutable-generation-data.js";
|
|
3
|
+
const keys = Symbol("parameter-keys");
|
|
4
|
+
function immutable() {
|
|
5
|
+
throw new GeometryError("INVALID_ARGUMENT", "Parameters are immutable.", { operation: "memo" });
|
|
6
|
+
}
|
|
7
|
+
/** Captures supported data and reuses identities only when the entire caller graph is immutable. */
|
|
8
|
+
function captureParameters(input, previous, snapshot) {
|
|
9
|
+
return Object.freeze(Object.fromEntries(Array.from(generationDataEntries(input), ([key, value]) => [
|
|
10
|
+
key,
|
|
11
|
+
Object.is(value, previous[key]) &&
|
|
12
|
+
Object.hasOwn(snapshot, key) &&
|
|
13
|
+
isImmutableGenerationValue(value)
|
|
14
|
+
? snapshot[key]
|
|
15
|
+
: captureGenerationValue(value),
|
|
16
|
+
])));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Owns committed parameter identities and creates a separate guarded snapshot for every revision.
|
|
20
|
+
* The session commits identities only after successful geometry finalization and native cleanup.
|
|
21
|
+
*/
|
|
22
|
+
export function createParameterSource() {
|
|
23
|
+
let previousInput = {}, previousSnapshot = {};
|
|
24
|
+
return {
|
|
25
|
+
begin(input, assertActive, record) {
|
|
26
|
+
const inputValues = input;
|
|
27
|
+
const snapshot = captureParameters(inputValues, previousInput, previousSnapshot);
|
|
28
|
+
const keySignature = JSON.stringify(Object.keys(snapshot));
|
|
29
|
+
// This proxy is never redirected to a later snapshot: aliases within memo calls remain
|
|
30
|
+
// ordinary JavaScript identities and every late read still checks its original revision.
|
|
31
|
+
const params = new Proxy(snapshot, {
|
|
32
|
+
get(target, key) {
|
|
33
|
+
assertActive();
|
|
34
|
+
const value = Reflect.get(target, key);
|
|
35
|
+
if (typeof key === "string")
|
|
36
|
+
record(key, value);
|
|
37
|
+
return value;
|
|
38
|
+
},
|
|
39
|
+
set: immutable,
|
|
40
|
+
deleteProperty: immutable,
|
|
41
|
+
ownKeys(target) {
|
|
42
|
+
assertActive();
|
|
43
|
+
record(keys, keySignature);
|
|
44
|
+
return Reflect.ownKeys(target);
|
|
45
|
+
},
|
|
46
|
+
has(target, key) {
|
|
47
|
+
assertActive();
|
|
48
|
+
record(keys, keySignature);
|
|
49
|
+
return Reflect.has(target, key);
|
|
50
|
+
},
|
|
51
|
+
getOwnPropertyDescriptor(target, key) {
|
|
52
|
+
assertActive();
|
|
53
|
+
record(keys, keySignature);
|
|
54
|
+
const descriptor = Reflect.getOwnPropertyDescriptor(target, key);
|
|
55
|
+
if (typeof key === "string")
|
|
56
|
+
record(key, descriptor?.value);
|
|
57
|
+
return descriptor;
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
params,
|
|
62
|
+
retainedValues: [snapshot, inputValues],
|
|
63
|
+
has: (key) => Object.hasOwn(snapshot, key),
|
|
64
|
+
// Cache validation reads the snapshot directly; using the proxy would record those
|
|
65
|
+
// internal comparisons as new model dependencies.
|
|
66
|
+
read: (key) => key === keys ? keySignature : Reflect.get(snapshot, key),
|
|
67
|
+
commit() {
|
|
68
|
+
previousInput = { ...inputValues };
|
|
69
|
+
previousSnapshot = snapshot;
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
clear() {
|
|
74
|
+
previousInput = {};
|
|
75
|
+
previousSnapshot = {};
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GeometryError } from "../../geometry/errors.js";
|
|
2
|
-
import { resolveModelingLimits } from "../../geometry/
|
|
2
|
+
import { resolveModelingLimits } from "../../geometry/limits.js";
|
|
3
3
|
import { bindModelContext } from "../../model/execution-binding.js";
|
|
4
4
|
import { GenerationError } from "../../model/generation.js";
|
|
5
5
|
import { captureGenerationValue } from "../../model/immutable-generation-data.js";
|
|
@@ -29,7 +29,7 @@ export function createSession(program, suppliedOptions, engineLimits, transactio
|
|
|
29
29
|
// owns their fixed lifetime; copying their enumerable fields would change their semantics.
|
|
30
30
|
const services = (options.services ?? Object.freeze({}));
|
|
31
31
|
const caches = {
|
|
32
|
-
graph: createGenerationGraph(options, limits
|
|
32
|
+
graph: createGenerationGraph(options, limits),
|
|
33
33
|
snapshots: createSnapshotCache(options, limits),
|
|
34
34
|
geometry: createNativeGeometryCache(),
|
|
35
35
|
clear() {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GeometryError } from "../../geometry/errors.js";
|
|
2
2
|
import { isImmutableBuffer, ownImmutableBuffer } from "../../geometry/immutable-buffer.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { validateRigidTransform3 } from "../../geometry/transforms/affine3.js";
|
|
4
|
+
import { transform3 } from "../../geometry/transforms/value.js";
|
|
5
5
|
import { createGeometryFinalizer } from "../finalization.js";
|
|
6
6
|
import { requireModelPart } from "../model-parts.js";
|
|
7
7
|
import { createModelSummary } from "../model-summary.js";
|