@metamesh/modeling 0.13.0 → 0.15.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 +55 -0
- package/README.md +67 -9
- package/dist/api/engine.d.ts +14 -7
- package/dist/api/geometry.d.ts +787 -447
- package/dist/api/index.d.ts +637 -250
- package/dist/api/text.d.ts +6 -4
- package/dist/docs/guides/concepts.md +135 -17
- package/dist/docs/guides/fonts.md +8 -0
- package/dist/docs/guides/fundamentals.md +8 -3
- package/dist/docs/guides/generation.md +6 -4
- package/dist/docs/guides/hosting.md +27 -14
- package/dist/docs/guides/recipes.md +82 -11
- package/dist/docs/manifest.json +1911 -856
- package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
- package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
- package/dist/docs/reference/engine/GenerationOptions.md +1 -1
- package/dist/docs/reference/engine/GeometryResource.md +1 -1
- package/dist/docs/reference/engine/ModelDependencies.md +1 -1
- package/dist/docs/reference/engine/ModelEngine.md +1 -1
- package/dist/docs/reference/engine/ModelEngineOptions.md +4 -8
- package/dist/docs/reference/engine/ModelSession.md +1 -1
- package/dist/docs/reference/engine/ModelSnapshot.md +20 -9
- package/dist/docs/reference/engine/SessionOptions.md +1 -1
- package/dist/docs/reference/engine/SnapshotPart.md +4 -4
- package/dist/docs/reference/engine/categories/host-lifecycle.md +2 -2
- package/dist/docs/reference/engine/createModelEngine.md +3 -3
- package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
- package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
- package/dist/docs/reference/engine/validateModel.md +1 -1
- package/dist/docs/reference/engine.md +2 -2
- package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +17 -4
- package/dist/docs/reference/geometry/{Anchor3.md → Anchor3-type.md} +9 -5
- package/dist/docs/reference/geometry/ArcCurve2.md +7 -7
- package/dist/docs/reference/geometry/ArcCurve3.md +9 -9
- package/dist/docs/reference/geometry/{AttachTransformOptions.md → AttachOptions.md} +14 -5
- package/dist/docs/reference/geometry/AxisAngleRotation3.md +6 -1
- package/dist/docs/reference/geometry/Bounds2.md +4 -4
- package/dist/docs/reference/geometry/Bounds3.md +4 -4
- package/dist/docs/reference/geometry/BoundsFit2.md +3 -3
- package/dist/docs/reference/geometry/BoundsFit3.md +3 -3
- package/dist/docs/reference/geometry/BoundsFitOptions.md +1 -1
- package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +1 -1
- package/dist/docs/reference/geometry/BoxAnchorFace.md +8 -1
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +8 -4
- package/dist/docs/reference/geometry/BoxEdge.md +1 -1
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
- package/dist/docs/reference/geometry/BoxOptions.md +10 -10
- package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +1 -1
- package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/CircleContourOptions.md +1 -1
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +107 -0
- package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +1 -1
- package/dist/docs/reference/geometry/ClearanceHoleFit.md +1 -1
- package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +1 -1
- package/dist/docs/reference/geometry/Contour.md +3 -3
- package/dist/docs/reference/geometry/ContourCurve.md +1 -1
- package/dist/docs/reference/geometry/ContourPoint.md +1 -1
- package/dist/docs/reference/geometry/ContourSegment.md +1 -1
- package/dist/docs/reference/geometry/CorrespondingComponent.md +1 -1
- package/dist/docs/reference/geometry/CorrespondingContour.md +1 -1
- package/dist/docs/reference/geometry/CorrespondingProfile.md +1 -1
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +1 -1
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +6 -6
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +6 -6
- package/dist/docs/reference/geometry/Curve2.md +1 -1
- package/dist/docs/reference/geometry/Curve3.md +1 -1
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +5 -3
- package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +3 -3
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +8 -1
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +9 -5
- package/dist/docs/reference/geometry/CylinderOptions.md +3 -3
- package/dist/docs/reference/geometry/CylindricalGearDimensions.md +3 -3
- package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +3 -3
- package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearSpec.md +6 -6
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
- package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/EllipseContourOptions.md +3 -3
- package/dist/docs/reference/geometry/EndTreatments.md +1 -1
- package/dist/docs/reference/geometry/ExtrudeOptions.md +6 -6
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +5 -5
- package/dist/docs/reference/geometry/FittedTextLayout.md +1 -1
- package/dist/docs/reference/geometry/Frame3.md +6 -6
- package/dist/docs/reference/geometry/GeometryError.md +1 -1
- package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
- package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
- package/dist/docs/reference/geometry/GeometryResolution.md +14 -5
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
- package/dist/docs/reference/geometry/GridPatternOptions.md +11 -5
- package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
- package/dist/docs/reference/geometry/HeightfieldOptions.md +5 -5
- package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
- package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +5 -5
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +6 -6
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +1 -1
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +7 -3
- package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +6 -6
- package/dist/docs/reference/geometry/LineCurve2.md +4 -4
- package/dist/docs/reference/geometry/LineCurve3.md +4 -4
- package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -5
- package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
- package/dist/docs/reference/geometry/LoftMeshStation.md +4 -4
- package/dist/docs/reference/geometry/LoftOptions.md +1 -1
- package/dist/docs/reference/geometry/LoftPlacement.md +1 -1
- package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +1 -1
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +1 -1
- package/dist/docs/reference/geometry/MetricFastenerSize.md +1 -1
- package/dist/docs/reference/geometry/MetricFastenerStandard.md +1 -1
- package/dist/docs/reference/geometry/MetricHexNutDimensions.md +1 -1
- package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +1 -1
- package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
- package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
- package/dist/docs/reference/geometry/Path2-type.md +192 -0
- package/dist/docs/reference/geometry/Path2Data.md +14 -0
- package/dist/docs/reference/geometry/Path2Input.md +15 -0
- package/dist/docs/reference/geometry/Path3-type.md +192 -0
- package/dist/docs/reference/geometry/Path3Data.md +14 -0
- package/dist/docs/reference/geometry/Path3Input.md +15 -0
- package/dist/docs/reference/geometry/PathFrame.md +5 -5
- package/dist/docs/reference/geometry/PathLocation.md +65 -0
- package/dist/docs/reference/geometry/PathNormalGuide.md +6 -5
- package/dist/docs/reference/geometry/PathOptions.md +34 -0
- package/dist/docs/reference/geometry/PathPatternOptions.md +3 -3
- package/dist/docs/reference/geometry/PathPlacement.md +4 -4
- package/dist/docs/reference/geometry/PathResamplingOptions.md +80 -0
- package/dist/docs/reference/geometry/Pivot2Options.md +26 -0
- package/dist/docs/reference/geometry/Pivot3Options.md +26 -0
- package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +1 -1
- package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +22 -22
- package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +1 -1
- package/dist/docs/reference/geometry/PlanarPatchQuality.md +3 -3
- package/dist/docs/reference/geometry/{Polygon.md → PolygonData.md} +2 -2
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +4 -4
- package/dist/docs/reference/geometry/PrimitiveAttachment.md +31 -0
- package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +104 -0
- package/dist/docs/reference/geometry/PrintableThreadFit.md +1 -1
- package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +1 -1
- package/dist/docs/reference/geometry/Profile.md +1 -1
- package/dist/docs/reference/geometry/ProfileComponent2.md +1 -1
- package/dist/docs/reference/geometry/ProfileContour2.md +1 -1
- package/dist/docs/reference/geometry/ProfileSpan2.md +3 -3
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +3 -3
- package/dist/docs/reference/geometry/RackPitchDimensions.md +1 -1
- package/dist/docs/reference/geometry/RackPitchSpec.md +5 -5
- package/dist/docs/reference/geometry/RadialPatternOptions.md +17 -22
- package/dist/docs/reference/geometry/RadialSizing.md +1 -1
- package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
- package/dist/docs/reference/geometry/RectangleContourOptions.md +3 -3
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +1 -1
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +1 -1
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +3 -3
- package/dist/docs/reference/geometry/RegionData.md +14 -0
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
- package/dist/docs/reference/geometry/RevolveOptions.md +9 -4
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/RowLayoutOptions.md +1 -1
- package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
- package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
- package/dist/docs/reference/geometry/SampledCurve2.md +4 -4
- package/dist/docs/reference/geometry/SampledCurve3.md +4 -4
- package/dist/docs/reference/geometry/SampledThreadHelices.md +3 -3
- package/dist/docs/reference/geometry/SideProfileCurve.md +1 -1
- package/dist/docs/reference/geometry/SideProfilePoint.md +1 -1
- package/dist/docs/reference/geometry/SideProfileSegment.md +1 -1
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +3 -3
- package/dist/docs/reference/geometry/SphereOptions.md +3 -3
- package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/StrokeCap.md +7 -0
- package/dist/docs/reference/geometry/StrokeJoin.md +7 -0
- package/dist/docs/reference/geometry/{StrokePathRegionOptions.md → StrokeOptions.md} +8 -8
- package/dist/docs/reference/geometry/SvgImportOptions.md +1 -1
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +3 -3
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +13 -13
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +11 -11
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +9 -9
- package/dist/docs/reference/geometry/SweepOptions.md +6 -6
- package/dist/docs/reference/geometry/SweepOrientation.md +7 -7
- package/dist/docs/reference/geometry/ThreadBevelOptions.md +1 -1
- package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +5 -5
- package/dist/docs/reference/geometry/ThreadCompensationOptions.md +1 -1
- package/dist/docs/reference/geometry/ThreadEndStyle.md +1 -1
- package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +1 -1
- package/dist/docs/reference/geometry/ThreadHandedness.md +1 -1
- package/dist/docs/reference/geometry/ThreadHelixOptions.md +3 -3
- package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
- package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
- package/dist/docs/reference/geometry/{ThreadProfile.md → ThreadProfile-type.md} +3 -3
- package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
- package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/ThreadRole.md +1 -1
- package/dist/docs/reference/geometry/ThreadedNutBevel.md +1 -1
- package/dist/docs/reference/geometry/ThreadedNutOptions.md +6 -6
- package/dist/docs/reference/geometry/ThreadedNutPreflight.md +1 -1
- package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
- package/dist/docs/reference/geometry/ThreadedRodOptions.md +6 -6
- package/dist/docs/reference/geometry/TorusOptions.md +8 -8
- package/dist/docs/reference/geometry/Transform2-type.md +255 -0
- package/dist/docs/reference/geometry/Transform2Input.md +19 -0
- package/dist/docs/reference/geometry/Transform2Matrix.md +14 -0
- package/dist/docs/reference/geometry/Transform3-type.md +295 -0
- package/dist/docs/reference/geometry/Transform3Input.md +19 -0
- package/dist/docs/reference/geometry/Transform3Matrix.md +17 -0
- package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +5 -4
- package/dist/docs/reference/geometry/TriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +2 -2
- package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +3 -3
- package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshSignature.md +2 -2
- package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +3 -3
- package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +1 -1
- package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/TubeOptions.md +8 -8
- package/dist/docs/reference/geometry/Vector2-type.md +269 -0
- package/dist/docs/reference/geometry/Vector2Input.md +19 -0
- package/dist/docs/reference/geometry/Vector2Tuple.md +14 -0
- package/dist/docs/reference/geometry/Vector3-type.md +281 -0
- package/dist/docs/reference/geometry/Vector3Input.md +19 -0
- package/dist/docs/reference/geometry/Vector3Tuple.md +14 -0
- package/dist/docs/reference/geometry/VectorTextArcBaseline.md +3 -3
- package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
- package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +1 -1
- package/dist/docs/reference/geometry/VectorTextMetrics.md +1 -1
- package/dist/docs/reference/geometry/VectorTextOptions.md +1 -1
- package/dist/docs/reference/geometry/add2.md +36 -0
- package/dist/docs/reference/geometry/add3.md +10 -6
- package/dist/docs/reference/geometry/analyzeTriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +2 -2
- package/dist/docs/reference/geometry/{createAnchor3.md → anchor3.md} +13 -9
- package/dist/docs/reference/geometry/anchorFrame3.md +5 -5
- package/dist/docs/reference/geometry/applyTransformDirection3.md +11 -7
- package/dist/docs/reference/geometry/applyTransformPoint3.md +11 -7
- package/dist/docs/reference/geometry/attachmentTransform3.md +77 -0
- package/dist/docs/reference/geometry/boundsCenter.md +7 -7
- package/dist/docs/reference/geometry/boundsFromSize.md +7 -7
- package/dist/docs/reference/geometry/boundsSize.md +7 -7
- package/dist/docs/reference/geometry/boxAnchor3.md +10 -6
- package/dist/docs/reference/geometry/categories/bounds-layout.md +1 -1
- package/dist/docs/reference/geometry/categories/curves-paths.md +15 -10
- package/dist/docs/reference/geometry/categories/mechanical.md +6 -6
- package/dist/docs/reference/geometry/categories/meshes.md +3 -4
- package/dist/docs/reference/geometry/categories/pattern-placement.md +7 -7
- package/dist/docs/reference/geometry/categories/primitive-options.md +4 -4
- package/dist/docs/reference/geometry/categories/profiles-regions.md +5 -6
- package/dist/docs/reference/geometry/categories/resolution-errors.md +3 -2
- package/dist/docs/reference/geometry/categories/transforms-math.md +41 -12
- package/dist/docs/reference/geometry/categories/vector-import.md +5 -5
- package/dist/docs/reference/geometry/circleContour.md +1 -1
- package/dist/docs/reference/geometry/closeToAxis.md +4 -4
- package/dist/docs/reference/geometry/compensateThreadDiameters.md +1 -1
- package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +5 -5
- package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +5 -5
- package/dist/docs/reference/geometry/composeTransform3.md +10 -6
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +10 -6
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +8 -7
- package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +4 -4
- package/dist/docs/reference/geometry/{createTriangleMeshSignature.md → computeTriangleMeshSignature.md} +4 -4
- package/dist/docs/reference/geometry/containsBounds.md +1 -1
- package/dist/docs/reference/geometry/contourContainsPoint.md +4 -4
- package/dist/docs/reference/geometry/cross2.md +36 -0
- package/dist/docs/reference/geometry/cross3.md +10 -6
- package/dist/docs/reference/geometry/cylinderAnchor3.md +10 -6
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/geometry/distance2.md +36 -0
- package/dist/docs/reference/geometry/distance3.md +36 -0
- package/dist/docs/reference/geometry/distributeAlongPath.md +8 -6
- package/dist/docs/reference/geometry/dot2.md +36 -0
- package/dist/docs/reference/geometry/dot3.md +9 -5
- package/dist/docs/reference/geometry/ellipseContour.md +1 -1
- package/dist/docs/reference/geometry/eulerTransform3.md +10 -6
- package/dist/docs/reference/geometry/extrudeMesh.md +8 -8
- package/dist/docs/reference/geometry/fitBounds.md +1 -1
- package/dist/docs/reference/geometry/fitTextLayout.md +1 -1
- package/dist/docs/reference/geometry/frameTransform3.md +8 -4
- package/dist/docs/reference/geometry/{getMetricClearanceHole.md → getMetricClearanceHoleDiameter.md} +3 -3
- package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
- package/dist/docs/reference/geometry/gridPatternTransforms.md +5 -5
- package/dist/docs/reference/geometry/heightfieldMesh.md +1 -1
- package/dist/docs/reference/geometry/{buildHelicalThreadRidgeMesh.md → helicalThreadRidgeMesh.md} +5 -5
- package/dist/docs/reference/geometry/{buildHelicalThreadSolidMesh.md → helicalThreadSolidMesh.md} +5 -5
- package/dist/docs/reference/geometry/inverseTransform3.md +9 -5
- package/dist/docs/reference/geometry/isGeometryError.md +1 -1
- package/dist/docs/reference/geometry/joinTriangleMeshes.md +1 -1
- package/dist/docs/reference/geometry/layoutRow.md +4 -4
- package/dist/docs/reference/geometry/length2.md +30 -0
- package/dist/docs/reference/geometry/length3.md +8 -4
- package/dist/docs/reference/geometry/lerp2.md +42 -0
- package/dist/docs/reference/geometry/lerp3.md +10 -6
- package/dist/docs/reference/geometry/linearPatternTransforms.md +5 -5
- package/dist/docs/reference/geometry/loftMesh.md +2 -1
- package/dist/docs/reference/geometry/matchProfiles.md +1 -1
- package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +3 -2
- package/dist/docs/reference/geometry/meshBounds.md +1 -1
- package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +3 -3
- package/dist/docs/reference/geometry/normalize2.md +36 -0
- package/dist/docs/reference/geometry/normalize3.md +10 -6
- package/dist/docs/reference/geometry/normalizeContour.md +4 -4
- package/dist/docs/reference/geometry/normalizePolygon.md +5 -5
- package/dist/docs/reference/geometry/normalizeRegion.md +5 -5
- package/dist/docs/reference/geometry/optimizePlanarPatches.md +11 -11
- package/dist/docs/reference/geometry/path2.md +42 -0
- package/dist/docs/reference/geometry/path3.md +42 -0
- package/dist/docs/reference/geometry/pathPatternTransforms.md +8 -8
- package/dist/docs/reference/geometry/preflightHeightfield.md +1 -1
- package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +3 -3
- package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +3 -3
- package/dist/docs/reference/geometry/preflightSvgRegion.md +1 -1
- package/dist/docs/reference/geometry/preflightThreadedNut.md +3 -3
- package/dist/docs/reference/geometry/preflightThreadedRod.md +3 -3
- package/dist/docs/reference/geometry/projectOntoPlane3.md +10 -6
- package/dist/docs/reference/geometry/radialPatternTransforms.md +4 -20
- package/dist/docs/reference/geometry/rectangleContour.md +2 -2
- package/dist/docs/reference/geometry/rectangleProfile.md +2 -2
- package/dist/docs/reference/geometry/regionArea.md +4 -4
- package/dist/docs/reference/geometry/regionBounds.md +4 -4
- package/dist/docs/reference/geometry/regularPolygonContour.md +5 -5
- package/dist/docs/reference/geometry/resamplePolyline2.md +5 -5
- package/dist/docs/reference/geometry/resamplePolyline3.md +5 -5
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +8 -4
- package/dist/docs/reference/geometry/resolveArcSegments.md +6 -6
- package/dist/docs/reference/geometry/resolveCircularSegments.md +6 -5
- package/dist/docs/reference/geometry/resolveCylindricalGear.md +1 -1
- package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +1 -1
- package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +6 -6
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
- package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +1 -1
- package/dist/docs/reference/geometry/resolveRackPitch.md +1 -1
- package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +4 -4
- package/dist/docs/reference/geometry/reverseTriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/revolveMesh.md +10 -10
- package/dist/docs/reference/geometry/rotate2.md +36 -0
- package/dist/docs/reference/geometry/rotationTransform3.md +10 -6
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +8 -6
- package/dist/docs/reference/geometry/sampleContour.md +3 -3
- package/dist/docs/reference/geometry/sampleCurve2.md +3 -3
- package/dist/docs/reference/geometry/sampleCurve3.md +2 -2
- package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
- package/dist/docs/reference/geometry/sampleHelix.md +5 -5
- package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
- package/dist/docs/reference/geometry/sampleRackToothPath.md +4 -4
- package/dist/docs/reference/geometry/sampleSideProfile.md +6 -6
- package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
- package/dist/docs/reference/geometry/sampleThreadHelices.md +2 -2
- package/dist/docs/reference/geometry/scale2.md +36 -0
- package/dist/docs/reference/geometry/scale3.md +9 -5
- package/dist/docs/reference/geometry/scaleTransform3.md +10 -6
- package/dist/docs/reference/geometry/signedContourArea.md +1 -1
- package/dist/docs/reference/geometry/starContour.md +4 -4
- package/dist/docs/reference/geometry/strokeRegionData.md +63 -0
- package/dist/docs/reference/geometry/subtract2.md +36 -0
- package/dist/docs/reference/geometry/subtract3.md +10 -6
- package/dist/docs/reference/geometry/sweepMesh.md +9 -9
- package/dist/docs/reference/geometry/{createThreadProfile.md → threadProfile.md} +6 -6
- package/dist/docs/reference/geometry/transform2.md +38 -0
- package/dist/docs/reference/geometry/transform3.md +38 -0
- package/dist/docs/reference/geometry/transformDeterminant3.md +8 -4
- package/dist/docs/reference/geometry/transformRegionData.md +40 -0
- package/dist/docs/reference/geometry/transformTriangleMesh.md +6 -6
- package/dist/docs/reference/geometry/translationTransform3.md +10 -6
- package/dist/docs/reference/geometry/triangulateContour.md +1 -1
- package/dist/docs/reference/geometry/validateSolidMesh.md +2 -2
- package/dist/docs/reference/geometry/validateTransform3.md +9 -5
- package/dist/docs/reference/geometry/validateTriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/vector2.md +31 -0
- package/dist/docs/reference/geometry/vector3.md +38 -0
- package/dist/docs/reference/geometry.md +3 -3
- package/dist/docs/reference/model/Anchor3.md +5 -5
- package/dist/docs/reference/model/AttachOptions.md +10 -5
- package/dist/docs/reference/model/Bounds2.md +4 -4
- package/dist/docs/reference/model/Bounds3.md +4 -4
- package/dist/docs/reference/model/BoxEdge.md +1 -1
- package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
- package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
- package/dist/docs/reference/model/BoxOptions.md +10 -10
- package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
- package/dist/docs/reference/model/CircleContourOptions.md +1 -1
- package/dist/docs/reference/model/CircleOptions.md +3 -3
- package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
- package/dist/docs/reference/model/Computed.md +1 -1
- package/dist/docs/reference/model/ComputedValue.md +1 -1
- package/dist/docs/reference/model/Contour.md +3 -3
- package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
- package/dist/docs/reference/model/CorrespondingContour.md +1 -1
- package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
- package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
- package/dist/docs/reference/model/CylinderOptions.md +3 -3
- package/dist/docs/reference/model/DiagnosticOptions.md +1 -1
- package/dist/docs/reference/model/EdgeTreatment.md +1 -1
- package/dist/docs/reference/model/EllipseContourOptions.md +3 -3
- package/dist/docs/reference/model/EllipseOptions.md +3 -3
- package/dist/docs/reference/model/EndTreatments.md +1 -1
- package/dist/docs/reference/model/ExtrudeOptions.md +6 -6
- package/dist/docs/reference/model/FinalizedModel.md +18 -8
- package/dist/docs/reference/model/FinalizedPart.md +1 -1
- package/dist/docs/reference/model/Frame3.md +6 -6
- package/dist/docs/reference/model/GenerateCallback.md +1 -1
- package/dist/docs/reference/model/GenerateContext.md +5 -5
- package/dist/docs/reference/model/GeneratedPart.md +6 -6
- package/dist/docs/reference/model/GenerationDiagnostic.md +1 -1
- package/dist/docs/reference/model/GenerationError.md +1 -1
- package/dist/docs/reference/model/GeometryResolution.md +5 -5
- package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
- package/dist/docs/reference/model/GridPatternOptions.md +11 -5
- package/dist/docs/reference/model/HeightfieldOptions.md +5 -5
- package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +3 -3
- package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +1 -1
- package/dist/docs/reference/model/HullOptions.md +7 -7
- package/dist/docs/reference/model/ImmutableBuffer-type.md +1 -1
- package/dist/docs/reference/model/ImmutableTriangleMesh.md +1 -1
- package/dist/docs/reference/model/ImplicitOptions.md +4 -4
- package/dist/docs/reference/model/InternalThreadCutterOptions.md +4 -4
- package/dist/docs/reference/model/LinearPatternOptions.md +12 -5
- package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
- package/dist/docs/reference/model/LoftOptions.md +1 -1
- package/dist/docs/reference/model/LoftPlacement.md +1 -1
- package/dist/docs/reference/model/LoftStation.md +4 -4
- package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
- package/dist/docs/reference/model/ModelProgram.md +1 -1
- package/dist/docs/reference/model/ModelingLimits.md +1 -1
- package/dist/docs/reference/model/NumericArray.md +1 -1
- package/dist/docs/reference/model/PartGeometry.md +1 -1
- package/dist/docs/reference/model/PartOptions.md +6 -6
- package/dist/docs/reference/model/Path2-type.md +192 -0
- package/dist/docs/reference/model/Path2Data.md +14 -0
- package/dist/docs/reference/model/Path2Input.md +15 -0
- package/dist/docs/reference/model/Path3-type.md +192 -0
- package/dist/docs/reference/model/Path3Data.md +14 -0
- package/dist/docs/reference/model/Path3Input.md +15 -0
- package/dist/docs/reference/model/PathLocation.md +65 -0
- package/dist/docs/reference/model/PathNormalGuide.md +6 -5
- package/dist/docs/reference/model/PathOptions.md +34 -0
- package/dist/docs/reference/model/PathPatternOptions.md +3 -3
- package/dist/docs/reference/model/PathResamplingOptions.md +79 -0
- package/dist/docs/reference/model/PatternSource.md +2 -2
- package/dist/docs/reference/model/Pivot2Options.md +27 -0
- package/dist/docs/reference/model/Pivot3Options.md +27 -0
- package/dist/docs/reference/model/PlaneOptions.md +3 -3
- package/dist/docs/reference/model/{Polygon-type.md → PolygonData.md} +2 -2
- package/dist/docs/reference/model/PolygonOptions.md +85 -8
- package/dist/docs/reference/model/{PrimitivePlacement.md → PrimitiveAttachment.md} +7 -7
- package/dist/docs/reference/model/{PrimitivePlacementOptions.md → PrimitiveAttachmentOptions.md} +41 -20
- package/dist/docs/reference/model/PrintableThreadFit.md +1 -1
- package/dist/docs/reference/model/PrintableThreadFitPolicy.md +1 -1
- package/dist/docs/reference/model/Profile.md +1 -1
- package/dist/docs/reference/model/ProfileComponent2.md +1 -1
- package/dist/docs/reference/model/ProfileContour2.md +1 -1
- package/dist/docs/reference/model/ProfileSpan2.md +3 -3
- package/dist/docs/reference/model/ProfiledEdgeTreatment.md +3 -3
- package/dist/docs/reference/model/RadialPatternOptions.md +17 -22
- package/dist/docs/reference/model/RadialSizing.md +1 -1
- package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
- package/dist/docs/reference/model/RectangleContourOptions.md +3 -3
- package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
- package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
- package/dist/docs/reference/model/RectangleOptions.md +10 -10
- package/dist/docs/reference/model/{Region.md → RegionData.md} +4 -4
- package/dist/docs/reference/model/RegularPolygonOptions.md +5 -5
- package/dist/docs/reference/model/RevolveOptions.md +9 -4
- package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
- package/dist/docs/reference/model/Section.md +81 -40
- package/dist/docs/reference/model/SectionHullOptions.md +7 -7
- package/dist/docs/reference/model/SectionInspection.md +10 -10
- package/dist/docs/reference/model/{RegionOffsetJoin.md → SectionOffsetJoin.md} +3 -3
- package/dist/docs/reference/model/{RegionOffsetOptions.md → SectionOffsetOptions.md} +4 -4
- package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
- package/dist/docs/reference/model/Solid.md +66 -26
- package/dist/docs/reference/model/SolidInspection.md +7 -7
- package/dist/docs/reference/model/{SolidRayHit.md → SolidSegmentHit.md} +6 -6
- package/dist/docs/reference/model/SphereOptions.md +3 -3
- package/dist/docs/reference/model/StarOptions.md +10 -10
- package/dist/docs/reference/model/StrokeCap.md +16 -0
- package/dist/docs/reference/model/StrokeJoin.md +16 -0
- package/dist/docs/reference/model/StrokeOptions.md +91 -0
- package/dist/docs/reference/model/SvgOrigin.md +1 -1
- package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
- package/dist/docs/reference/model/SvgSectionOptions.md +1 -1
- package/dist/docs/reference/model/SweepOptions.md +6 -6
- package/dist/docs/reference/model/SweepOrientation.md +7 -7
- package/dist/docs/reference/model/TextSectionOptions.md +1 -1
- package/dist/docs/reference/model/ThreadEndStyle.md +1 -1
- package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +1 -1
- package/dist/docs/reference/model/ThreadHandedness.md +1 -1
- package/dist/docs/reference/model/ThreadLeadInEnvelope.md +1 -1
- package/dist/docs/reference/model/ThreadLeadInShape.md +1 -1
- package/dist/docs/reference/model/ThreadProfile.md +3 -3
- package/dist/docs/reference/model/ThreadRidgeOptions.md +1 -1
- package/dist/docs/reference/model/ThreadedNutBevel.md +1 -1
- package/dist/docs/reference/model/ThreadedNutOptions.md +4 -4
- package/dist/docs/reference/model/ThreadedNutPreflight.md +1 -1
- package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
- package/dist/docs/reference/model/ThreadedRodOptions.md +4 -4
- package/dist/docs/reference/model/TorusOptions.md +8 -8
- package/dist/docs/reference/model/Transform2-type.md +256 -0
- package/dist/docs/reference/model/Transform2Input.md +20 -0
- package/dist/docs/reference/model/Transform2Matrix.md +15 -0
- package/dist/docs/reference/model/Transform3-type.md +296 -0
- package/dist/docs/reference/model/Transform3Input.md +20 -0
- package/dist/docs/reference/model/{Transform3.md → Transform3Matrix.md} +3 -3
- package/dist/docs/reference/model/TriangleMesh.md +1 -1
- package/dist/docs/reference/model/TriangleMeshAnalysis.md +2 -2
- package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
- package/dist/docs/reference/model/TubeOptions.md +8 -8
- package/dist/docs/reference/model/Vector2-type.md +270 -0
- package/dist/docs/reference/model/Vector2Input.md +20 -0
- package/dist/docs/reference/model/{Vector2.md → Vector2Tuple.md} +3 -3
- package/dist/docs/reference/model/Vector3-type.md +282 -0
- package/dist/docs/reference/model/Vector3Input.md +20 -0
- package/dist/docs/reference/model/{Vector3.md → Vector3Tuple.md} +3 -3
- package/dist/docs/reference/model/VectorTextLayout.md +1 -1
- package/dist/docs/reference/model/VectorTextMetrics.md +1 -1
- package/dist/docs/reference/model/anchor.md +1 -1
- package/dist/docs/reference/model/box.md +4 -4
- package/dist/docs/reference/model/castSegment.md +40 -0
- package/dist/docs/reference/model/categories/boolean-operations.md +4 -4
- package/dist/docs/reference/model/categories/bounded-surfaces.md +3 -3
- package/dist/docs/reference/model/categories/contracts.md +2 -2
- package/dist/docs/reference/model/categories/core-values-errors.md +5 -5
- package/dist/docs/reference/model/categories/explicit-profiles.md +3 -3
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +2 -2
- package/dist/docs/reference/model/categories/generation.md +1 -1
- package/dist/docs/reference/model/categories/inspection.md +7 -8
- package/dist/docs/reference/model/categories/mesh-inspection.md +2 -2
- package/dist/docs/reference/model/categories/paths.md +33 -0
- package/dist/docs/reference/model/categories/primitives.md +3 -3
- package/dist/docs/reference/model/categories/resolution.md +2 -2
- package/dist/docs/reference/model/categories/sections.md +10 -8
- package/dist/docs/reference/model/categories/threads.md +5 -5
- package/dist/docs/reference/model/categories/transforms-placement.md +27 -13
- package/dist/docs/reference/model/circle.md +1 -1
- package/dist/docs/reference/model/components.md +10 -7
- package/dist/docs/reference/model/compose.md +1 -1
- package/dist/docs/reference/model/cylinder.md +1 -1
- package/dist/docs/reference/model/distance.md +2 -2
- package/dist/docs/reference/model/ellipse.md +1 -1
- package/dist/docs/reference/model/extrude.md +3 -3
- package/dist/docs/reference/model/generate.md +1 -1
- package/dist/docs/reference/model/gridPattern.md +4 -4
- package/dist/docs/reference/model/heightfield.md +2 -2
- package/dist/docs/reference/model/hull.md +2 -2
- package/dist/docs/reference/model/immutableBuffer.md +1 -1
- package/dist/docs/reference/model/immutableMesh.md +1 -1
- package/dist/docs/reference/model/implicit.md +3 -3
- package/dist/docs/reference/model/inspectSection.md +1 -1
- package/dist/docs/reference/model/inspectSolid.md +1 -1
- package/dist/docs/reference/model/internalThreadCutter.md +4 -4
- package/dist/docs/reference/model/intersect.md +1 -1
- package/dist/docs/reference/model/isEmpty.md +2 -2
- package/dist/docs/reference/model/linearPattern.md +4 -4
- package/dist/docs/reference/model/loft.md +1 -1
- package/dist/docs/reference/model/matchProfiles.md +2 -2
- package/dist/docs/reference/model/minkowskiSum.md +1 -1
- package/dist/docs/reference/model/path2.md +42 -0
- package/dist/docs/reference/model/path3.md +42 -0
- package/dist/docs/reference/model/pathPattern.md +13 -12
- package/dist/docs/reference/model/polygon.md +4 -4
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +3 -3
- package/dist/docs/reference/model/preflightThreadedNut.md +3 -3
- package/dist/docs/reference/model/preflightThreadedRod.md +3 -3
- package/dist/docs/reference/model/radialPattern.md +5 -37
- package/dist/docs/reference/model/rectangle.md +4 -4
- package/dist/docs/reference/model/regularPolygon.md +1 -1
- package/dist/docs/reference/model/revolve.md +5 -4
- package/dist/docs/reference/model/solidFromMesh.md +1 -1
- package/dist/docs/reference/model/sphere.md +1 -1
- package/dist/docs/reference/model/split.md +1 -1
- package/dist/docs/reference/model/splitByPlane.md +1 -1
- package/dist/docs/reference/model/star.md +4 -4
- package/dist/docs/reference/model/stroke.md +74 -0
- package/dist/docs/reference/model/svgPathSection.md +1 -1
- package/dist/docs/reference/model/svgSection.md +1 -1
- package/dist/docs/reference/model/sweep.md +7 -7
- package/dist/docs/reference/model/textSection.md +1 -1
- package/dist/docs/reference/model/threadRidge.md +2 -2
- package/dist/docs/reference/model/threadedNut.md +4 -4
- package/dist/docs/reference/model/threadedRod.md +4 -4
- package/dist/docs/reference/model/torus.md +3 -3
- package/dist/docs/reference/model/transform2.md +39 -0
- package/dist/docs/reference/model/transform3.md +39 -0
- package/dist/docs/reference/model/tube.md +3 -3
- package/dist/docs/reference/model/union.md +1 -1
- package/dist/docs/reference/model/vector2.md +32 -0
- package/dist/docs/reference/model/vector3.md +39 -0
- package/dist/docs/reference/model.md +9 -8
- package/dist/docs/reference/text/Bounds2.md +4 -4
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
- package/dist/docs/reference/text/Vector2Tuple.md +7 -0
- package/dist/docs/reference/text/VectorFont.md +2 -2
- package/dist/docs/reference/text/VectorFontOptions.md +1 -1
- package/dist/docs/reference/text/VectorTextArcBaseline.md +3 -3
- package/dist/docs/reference/text/VectorTextLayout.md +1 -1
- package/dist/docs/reference/text/VectorTextLayoutOptions.md +1 -1
- package/dist/docs/reference/text/VectorTextMetrics.md +1 -1
- package/dist/docs/reference/text/VectorTextOptions.md +1 -1
- package/dist/docs/reference/text/categories/font-preparation.md +4 -4
- package/dist/docs/reference/text/prepareVectorFont.md +2 -2
- package/dist/docs/reference/text.md +1 -1
- package/dist/engine/construction-operations.js +31 -14
- package/dist/engine/deferred-context.js +11 -181
- package/dist/engine/execution.js +39 -8
- package/dist/engine/extrusion-finishing.js +1 -1
- package/dist/engine/index.js +6 -1
- package/dist/engine/inspection-operations.js +13 -11
- package/dist/engine/loft-operations.js +35 -14
- package/dist/engine/model-summary.js +8 -5
- package/dist/engine/native/material-components.js +305 -0
- package/dist/engine/native/regions.js +2 -1
- package/dist/engine/native/threads.js +3 -3
- package/dist/engine/native/transforms.js +11 -8
- package/dist/engine/operation-environment.js +2 -2
- package/dist/engine/pattern-operations.js +3 -3
- package/dist/engine/placement.js +2 -2
- package/dist/engine/primitive-anchors.js +17 -17
- package/dist/engine/primitive-operations.js +1 -1
- package/dist/engine/primitive-profiles.js +8 -7
- package/dist/engine/profile-mesh.js +7 -7
- package/dist/engine/recipe-realization.js +35 -21
- package/dist/engine/section-operations.js +52 -11
- package/dist/engine/session-graph.js +1 -1
- package/dist/engine/session-native.js +1 -1
- package/dist/engine/session-snapshot.js +17 -6
- package/dist/engine/session.js +13 -8
- package/dist/engine/shape-anchors.js +5 -11
- package/dist/engine/transform-operations.js +66 -49
- package/dist/geometry/anchors.js +40 -33
- package/dist/geometry/curves/sampling.js +14 -14
- package/dist/geometry/edge-finishing.js +1 -1
- package/dist/geometry/extrusion.js +13 -16
- package/dist/geometry/index.js +13 -10
- package/dist/geometry/loft/loft-simple-mesh.js +6 -6
- package/dist/geometry/loft/loft.js +22 -13
- package/dist/geometry/math/immutable-value.js +20 -0
- package/dist/geometry/math/vector-value.js +168 -0
- package/dist/geometry/math/vector2.js +80 -0
- package/dist/geometry/math/vector3.js +37 -7
- package/dist/geometry/mechanical/gear-motion.js +8 -5
- package/dist/geometry/mechanical/gears.js +38 -38
- package/dist/geometry/mechanical/index.js +3 -3
- package/dist/geometry/mechanical/standards.js +1 -1
- package/dist/geometry/mechanical/thread-helices.js +2 -3
- package/dist/geometry/mechanical/thread-mesh-plan.js +4 -5
- package/dist/geometry/mechanical/thread-mesh.js +7 -7
- package/dist/geometry/mechanical/thread-profiles.js +5 -5
- package/dist/geometry/mechanical/thread-solids.js +2 -2
- package/dist/geometry/mechanical/thread-surface.js +1 -1
- package/dist/geometry/mechanical/threads.js +8 -8
- package/dist/geometry/mesh/mesh-planar.js +25 -27
- package/dist/geometry/mesh/mesh-quality.js +5 -5
- package/dist/geometry/mesh/mesh-signature.js +13 -13
- package/dist/geometry/mesh/mesh-solid-intersections.js +5 -1
- package/dist/geometry/mesh/mesh-solid.js +7 -7
- package/dist/geometry/mesh/mesh.js +4 -15
- package/dist/geometry/paths/closest-point.js +63 -0
- package/dist/geometry/paths/frames.js +44 -14
- package/dist/geometry/paths/helix.js +16 -6
- package/dist/geometry/paths/path-value.js +252 -0
- package/dist/geometry/paths/planar.js +36 -23
- package/dist/geometry/paths/resampling.js +27 -5
- package/dist/geometry/patterns/placements.js +100 -27
- package/dist/geometry/patterns.js +2 -2
- package/dist/geometry/polygon-clipping.js +17 -0
- package/dist/geometry/primitive-resolution.js +4 -1
- package/dist/geometry/profiles/contour.js +6 -6
- package/dist/geometry/profiles/matched.js +4 -4
- package/dist/geometry/profiles/profiles.js +4 -4
- package/dist/geometry/profiles/rectangle.js +4 -4
- package/dist/geometry/profiles/side-profile.js +7 -7
- package/dist/geometry/profiles/span-sampling.js +1 -1
- package/dist/geometry/resolution.js +51 -39
- package/dist/geometry/revolve/revolve-mesh.js +12 -7
- package/dist/geometry/stroke-path.js +57 -68
- package/dist/geometry/svg/fill.js +7 -21
- package/dist/geometry/svg-import.js +23 -23
- package/dist/geometry/sweeps/options.js +5 -4
- package/dist/geometry/sweeps/orientation.js +5 -5
- package/dist/geometry/sweeps/stations.js +14 -14
- package/dist/geometry/sweeps/sweep-closed.js +5 -5
- package/dist/geometry/sweeps/sweep-mesh.js +9 -3
- package/dist/geometry/sweeps/sweep-open.js +4 -4
- package/dist/geometry/sweeps/validation.js +4 -7
- package/dist/geometry/transform-chain.js +172 -0
- package/dist/geometry/transform-geometry.js +27 -30
- package/dist/geometry/transform-matrix.js +14 -0
- package/dist/geometry/transform2.js +60 -0
- package/dist/geometry/transform3.js +70 -26
- package/dist/index.js +4 -0
- package/dist/model/execution-binding.js +10 -5
- package/dist/model/geometry-recipes.js +15 -0
- package/dist/{engine → model}/immutable-generation-data.js +88 -6
- package/dist/model/operation-dispatch.js +10 -3
- package/dist/model/operations.js +45 -35
- package/dist/model/recipe-declaration.js +199 -0
- package/dist/model/shape-handles.js +17 -5
- package/dist/text/index.js +15 -9
- package/dist/text/vector-text-layout.js +31 -26
- package/package.json +1 -1
- package/dist/docs/reference/geometry/Path2.md +0 -14
- package/dist/docs/reference/geometry/Path3.md +0 -14
- package/dist/docs/reference/geometry/PrimitivePlacement.md +0 -31
- package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +0 -83
- package/dist/docs/reference/geometry/Region.md +0 -14
- package/dist/docs/reference/geometry/StrokePathCap.md +0 -7
- package/dist/docs/reference/geometry/StrokePathJoin.md +0 -7
- package/dist/docs/reference/geometry/Transform3.md +0 -12
- package/dist/docs/reference/geometry/Vector2.md +0 -7
- package/dist/docs/reference/geometry/Vector3.md +0 -7
- package/dist/docs/reference/geometry/attachTransform.md +0 -73
- package/dist/docs/reference/geometry/cumulativePathLengths.md +0 -33
- package/dist/docs/reference/geometry/measureTriangleMesh.md +0 -55
- package/dist/docs/reference/geometry/pathLength.md +0 -33
- package/dist/docs/reference/geometry/rotateAroundAxis3.md +0 -38
- package/dist/docs/reference/geometry/strokePathRegion.md +0 -63
- package/dist/docs/reference/geometry/transformContour.md +0 -42
- package/dist/docs/reference/geometry/transformPath2.md +0 -40
- package/dist/docs/reference/geometry/transformPath3.md +0 -33
- package/dist/docs/reference/geometry/transformRegion.md +0 -40
- package/dist/docs/reference/model/Transform2.md +0 -15
- package/dist/docs/reference/model/fromRegion.md +0 -33
- package/dist/docs/reference/model/rayCast.md +0 -40
- package/dist/docs/reference/model/toRegion.md +0 -33
- package/dist/docs/reference/model/toTriangleMesh.md +0 -27
- package/dist/docs/reference/text/Vector2.md +0 -7
- package/dist/engine/geometry-recipes.js +0 -12
- package/dist/engine/pattern-transform.js +0 -9
- package/dist/geometry/paths/path.js +0 -32
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { GeometryError } from "./errors.js";
|
|
2
|
+
export function readTransformMatrix(input, dimension) {
|
|
3
|
+
let matrix = input;
|
|
4
|
+
if (typeof input === "object" && input !== null && !Array.isArray(input)) {
|
|
5
|
+
const method = Reflect.get(input, "toMatrix");
|
|
6
|
+
if (typeof method === "function")
|
|
7
|
+
matrix = Reflect.apply(method, input, []);
|
|
8
|
+
}
|
|
9
|
+
const length = dimension === 2 ? 9 : 16;
|
|
10
|
+
if (!Array.isArray(matrix) || matrix.length !== length) {
|
|
11
|
+
throw new GeometryError("INVALID_ARGUMENT", `A ${dimension}D placement requires a canonical ${length}-element matrix.`);
|
|
12
|
+
}
|
|
13
|
+
return matrix;
|
|
14
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { GeometryError } from "./errors.js";
|
|
2
|
+
import { resolveGeometryTolerance } from "./tolerance.js";
|
|
3
|
+
import { validateTransform3 } from "./transform3.js";
|
|
4
|
+
/** Embeds a validated affine XY matrix into XYZ, leaving Z unchanged. */
|
|
5
|
+
export function embedTransform2(matrix, options = {}) {
|
|
6
|
+
if (!Array.isArray(matrix) || matrix.length !== 9) {
|
|
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([
|
|
19
|
+
matrix[0],
|
|
20
|
+
matrix[1],
|
|
21
|
+
0,
|
|
22
|
+
matrix[2],
|
|
23
|
+
matrix[3],
|
|
24
|
+
matrix[4],
|
|
25
|
+
0,
|
|
26
|
+
matrix[5],
|
|
27
|
+
0,
|
|
28
|
+
0,
|
|
29
|
+
1,
|
|
30
|
+
0,
|
|
31
|
+
0,
|
|
32
|
+
0,
|
|
33
|
+
0,
|
|
34
|
+
1,
|
|
35
|
+
], options));
|
|
36
|
+
}
|
|
37
|
+
/** Restricts an affine XYZ matrix to XY; validates the plane independently of sampled points. */
|
|
38
|
+
export function restrictTransform3(matrix, options = {}) {
|
|
39
|
+
validateTransform3(matrix, options);
|
|
40
|
+
const tolerance = resolveGeometryTolerance(1, options);
|
|
41
|
+
if (Math.abs(matrix[8]) > tolerance.angular ||
|
|
42
|
+
Math.abs(matrix[9]) > tolerance.angular ||
|
|
43
|
+
Math.abs(matrix[11]) > tolerance.linear) {
|
|
44
|
+
throw new GeometryError("INVALID_ARGUMENT", "A 2D transform must preserve the XY plane.");
|
|
45
|
+
}
|
|
46
|
+
const result = [
|
|
47
|
+
matrix[0],
|
|
48
|
+
matrix[1],
|
|
49
|
+
matrix[3],
|
|
50
|
+
matrix[4],
|
|
51
|
+
matrix[5],
|
|
52
|
+
matrix[7],
|
|
53
|
+
0,
|
|
54
|
+
0,
|
|
55
|
+
1,
|
|
56
|
+
];
|
|
57
|
+
// Restriction can be singular even when the tolerated 3D matrix is invertible.
|
|
58
|
+
embedTransform2(result, options);
|
|
59
|
+
return Object.freeze(result);
|
|
60
|
+
}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import { GeometryError } from "./errors.js";
|
|
2
|
+
import { cross3, dot3, length3, normalize3 } from "./math/vector3.js";
|
|
2
3
|
import { resolveGeometryTolerance } from "./tolerance.js";
|
|
3
4
|
const finiteVector = (vector, label) => {
|
|
5
|
+
if (!Array.isArray(vector) || vector.length !== 3) {
|
|
6
|
+
throw new GeometryError("INVALID_ARGUMENT", `${label} requires exactly three coordinates.`);
|
|
7
|
+
}
|
|
4
8
|
if (!vector.every(Number.isFinite)) {
|
|
5
9
|
throw new GeometryError("NON_FINITE_VALUE", `${label} coordinates must be finite.`);
|
|
6
10
|
}
|
|
7
11
|
};
|
|
8
|
-
const dot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
9
|
-
const cross = (a, b) => [
|
|
10
|
-
a[1] * b[2] - a[2] * b[1],
|
|
11
|
-
a[2] * b[0] - a[0] * b[2],
|
|
12
|
-
a[0] * b[1] - a[1] * b[0],
|
|
13
|
-
];
|
|
14
|
-
const length = (vector) => Math.hypot(vector[0], vector[1], vector[2]);
|
|
15
12
|
const normalized = (vector, label, tolerance) => {
|
|
16
13
|
finiteVector(vector, label);
|
|
17
|
-
const magnitude =
|
|
14
|
+
const magnitude = length3(vector);
|
|
18
15
|
if (magnitude <= tolerance) {
|
|
19
16
|
throw new GeometryError("DEGENERATE_GEOMETRY", `${label} must have non-zero length.`);
|
|
20
17
|
}
|
|
@@ -34,7 +31,10 @@ export const IDENTITY_TRANSFORM3 = frozenTransform([
|
|
|
34
31
|
* @throws {@link GeometryError} For non-finite, non-affine, or singular matrices.
|
|
35
32
|
*/
|
|
36
33
|
export function validateTransform3(transform, tolerance = {}) {
|
|
37
|
-
if (transform.length !== 16
|
|
34
|
+
if (!Array.isArray(transform) || transform.length !== 16) {
|
|
35
|
+
throw new GeometryError("INVALID_ARGUMENT", "XYZ matrices require exactly sixteen entries.");
|
|
36
|
+
}
|
|
37
|
+
if (!transform.every(Number.isFinite)) {
|
|
38
38
|
throw new GeometryError("NON_FINITE_VALUE", "Transforms require sixteen finite values.");
|
|
39
39
|
}
|
|
40
40
|
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]));
|
|
@@ -120,7 +120,12 @@ export function rotationTransform3(axis, angle, tolerance = {}) {
|
|
|
120
120
|
if (!Number.isFinite(radians)) {
|
|
121
121
|
throw new GeometryError("NON_FINITE_VALUE", "Rotation angle must be finite.");
|
|
122
122
|
}
|
|
123
|
-
|
|
123
|
+
finiteVector(axis, "Rotation axis");
|
|
124
|
+
const axisLength = length3(axis);
|
|
125
|
+
if (!Number.isFinite(axisLength)) {
|
|
126
|
+
throw new GeometryError("NON_FINITE_VALUE", "Rotation axis length must be finite.");
|
|
127
|
+
}
|
|
128
|
+
const resolved = resolveGeometryTolerance(axisLength, tolerance);
|
|
124
129
|
const [x, y, z] = normalized(axis, "Rotation axis", resolved.linear);
|
|
125
130
|
const cosine = Math.cos(radians);
|
|
126
131
|
const sine = Math.sin(radians);
|
|
@@ -156,10 +161,7 @@ export function rotationTransform3(axis, angle, tolerance = {}) {
|
|
|
156
161
|
*/
|
|
157
162
|
export function eulerTransform3(rotationDegrees) {
|
|
158
163
|
finiteVector(rotationDegrees, "Euler rotation");
|
|
159
|
-
|
|
160
|
-
const y = (rotationDegrees[1] * Math.PI) / 180;
|
|
161
|
-
const z = (rotationDegrees[2] * Math.PI) / 180;
|
|
162
|
-
return composeTransform3(rotationTransform3([0, 0, 1], { radians: z }), composeTransform3(rotationTransform3([0, 1, 0], { radians: y }), rotationTransform3([1, 0, 0], { radians: x })));
|
|
164
|
+
return composeTransform3(rotationTransform3([0, 0, 1], { degrees: rotationDegrees[2] }), composeTransform3(rotationTransform3([0, 1, 0], { degrees: rotationDegrees[1] }), rotationTransform3([1, 0, 0], { degrees: rotationDegrees[0] })));
|
|
163
165
|
}
|
|
164
166
|
/**
|
|
165
167
|
* Composes two affine transforms without mutating either matrix.
|
|
@@ -196,12 +198,18 @@ export function composeTransform3(after, before) {
|
|
|
196
198
|
*/
|
|
197
199
|
export function applyTransformPoint3(transform, point) {
|
|
198
200
|
validateTransform3(transform);
|
|
201
|
+
return applyValidatedTransformPoint3(transform, point);
|
|
202
|
+
}
|
|
203
|
+
/** Internal application kernel for a matrix already validated by its collection or immutable chain. */
|
|
204
|
+
export function applyValidatedTransformPoint3(transform, point) {
|
|
199
205
|
finiteVector(point, "Point");
|
|
200
|
-
|
|
206
|
+
const result = [
|
|
201
207
|
transform[0] * point[0] + transform[1] * point[1] + transform[2] * point[2] + transform[3],
|
|
202
208
|
transform[4] * point[0] + transform[5] * point[1] + transform[6] * point[2] + transform[7],
|
|
203
209
|
transform[8] * point[0] + transform[9] * point[1] + transform[10] * point[2] + transform[11],
|
|
204
210
|
];
|
|
211
|
+
finiteVector(result, "Transformed point");
|
|
212
|
+
return result;
|
|
205
213
|
}
|
|
206
214
|
/**
|
|
207
215
|
* Applies only the linear component of an affine transform to a direction.
|
|
@@ -214,12 +222,18 @@ export function applyTransformPoint3(transform, point) {
|
|
|
214
222
|
*/
|
|
215
223
|
export function applyTransformDirection3(transform, direction) {
|
|
216
224
|
validateTransform3(transform);
|
|
225
|
+
return applyValidatedTransformDirection3(transform, direction);
|
|
226
|
+
}
|
|
227
|
+
/** Internal application kernel for a matrix already validated by an immutable chain. */
|
|
228
|
+
export function applyValidatedTransformDirection3(transform, direction) {
|
|
217
229
|
finiteVector(direction, "Direction");
|
|
218
|
-
|
|
230
|
+
const result = [
|
|
219
231
|
transform[0] * direction[0] + transform[1] * direction[1] + transform[2] * direction[2],
|
|
220
232
|
transform[4] * direction[0] + transform[5] * direction[1] + transform[6] * direction[2],
|
|
221
233
|
transform[8] * direction[0] + transform[9] * direction[1] + transform[10] * direction[2],
|
|
222
234
|
];
|
|
235
|
+
finiteVector(result, "Transformed direction");
|
|
236
|
+
return result;
|
|
223
237
|
}
|
|
224
238
|
/**
|
|
225
239
|
* Returns the determinant of a transform's linear 3x3 component.
|
|
@@ -266,9 +280,9 @@ export function inverseTransform3(transform) {
|
|
|
266
280
|
];
|
|
267
281
|
const translation = [transform[3], transform[7], transform[11]];
|
|
268
282
|
const inverseTranslation = [
|
|
269
|
-
-
|
|
270
|
-
-
|
|
271
|
-
-
|
|
283
|
+
-dot3([inverseLinear[0], inverseLinear[1], inverseLinear[2]], translation),
|
|
284
|
+
-dot3([inverseLinear[3], inverseLinear[4], inverseLinear[5]], translation),
|
|
285
|
+
-dot3([inverseLinear[6], inverseLinear[7], inverseLinear[8]], translation),
|
|
272
286
|
];
|
|
273
287
|
const inverse = frozenTransform([
|
|
274
288
|
inverseLinear[0],
|
|
@@ -291,6 +305,36 @@ export function inverseTransform3(transform) {
|
|
|
291
305
|
validateTransform3(inverse);
|
|
292
306
|
return inverse;
|
|
293
307
|
}
|
|
308
|
+
/** Internal inverse linear map; translation cannot affect normals or overflow their inverse. */
|
|
309
|
+
export function inverseLinearTransform3(matrix) {
|
|
310
|
+
return inverseTransform3([
|
|
311
|
+
matrix[0],
|
|
312
|
+
matrix[1],
|
|
313
|
+
matrix[2],
|
|
314
|
+
0,
|
|
315
|
+
matrix[4],
|
|
316
|
+
matrix[5],
|
|
317
|
+
matrix[6],
|
|
318
|
+
0,
|
|
319
|
+
matrix[8],
|
|
320
|
+
matrix[9],
|
|
321
|
+
matrix[10],
|
|
322
|
+
0,
|
|
323
|
+
0,
|
|
324
|
+
0,
|
|
325
|
+
0,
|
|
326
|
+
1,
|
|
327
|
+
]);
|
|
328
|
+
}
|
|
329
|
+
/** Internal unit normal application for a validated inverse linear transform. */
|
|
330
|
+
export function applyInverseTranspose3(inverse, normal) {
|
|
331
|
+
const unit = normalize3(normal, 0);
|
|
332
|
+
return normalize3([
|
|
333
|
+
inverse[0] * unit[0] + inverse[4] * unit[1] + inverse[8] * unit[2],
|
|
334
|
+
inverse[1] * unit[0] + inverse[5] * unit[1] + inverse[9] * unit[2],
|
|
335
|
+
inverse[2] * unit[0] + inverse[6] * unit[1] + inverse[10] * unit[2],
|
|
336
|
+
], 0);
|
|
337
|
+
}
|
|
294
338
|
/**
|
|
295
339
|
* Converts a right-handed orthonormal frame into a local-to-world transform.
|
|
296
340
|
*
|
|
@@ -302,9 +346,9 @@ export function inverseTransform3(transform) {
|
|
|
302
346
|
export function frameTransform3(frame, tolerance = {}) {
|
|
303
347
|
finiteVector(frame.origin, "Frame origin");
|
|
304
348
|
const resolved = resolveGeometryTolerance(1, tolerance);
|
|
305
|
-
const xLength =
|
|
306
|
-
const yLength =
|
|
307
|
-
const zLength =
|
|
349
|
+
const xLength = length3(frame.xAxis);
|
|
350
|
+
const yLength = length3(frame.yAxis);
|
|
351
|
+
const zLength = length3(frame.zAxis);
|
|
308
352
|
if (Math.abs(xLength - 1) > resolved.angular ||
|
|
309
353
|
Math.abs(yLength - 1) > resolved.angular ||
|
|
310
354
|
Math.abs(zLength - 1) > resolved.angular) {
|
|
@@ -313,10 +357,10 @@ export function frameTransform3(frame, tolerance = {}) {
|
|
|
313
357
|
const x = normalized(frame.xAxis, "Frame X axis", resolved.linear);
|
|
314
358
|
const y = normalized(frame.yAxis, "Frame Y axis", resolved.linear);
|
|
315
359
|
const z = normalized(frame.zAxis, "Frame Z axis", resolved.linear);
|
|
316
|
-
if (Math.abs(
|
|
317
|
-
Math.abs(
|
|
318
|
-
Math.abs(
|
|
319
|
-
|
|
360
|
+
if (Math.abs(dot3(x, y)) > resolved.angular ||
|
|
361
|
+
Math.abs(dot3(x, z)) > resolved.angular ||
|
|
362
|
+
Math.abs(dot3(y, z)) > resolved.angular ||
|
|
363
|
+
dot3(cross3(x, y), z) < 1 - resolved.angular) {
|
|
320
364
|
throw new GeometryError("INVALID_ARGUMENT", "Frame axes must be right-handed and mutually orthogonal.");
|
|
321
365
|
}
|
|
322
366
|
return frozenTransform([
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/** Immutable modeling recipes and math values; the host owns geometry evaluation. @packageDocumentation */
|
|
2
|
+
export { transform2, transform3, } from "./geometry/transform-chain.js";
|
|
3
|
+
export { vector2, vector3, } from "./geometry/math/vector-value.js";
|
|
4
|
+
export { path2, path3, } from "./geometry/paths/path-value.js";
|
|
1
5
|
export * from "./model/operations.js";
|
|
2
6
|
export * from "./model/generation.js";
|
|
3
7
|
export { immutableBuffer, immutableMesh } from "./model/immutable-buffer.js";
|
|
@@ -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/7");
|
|
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: 7, context };
|
|
14
14
|
try {
|
|
15
15
|
return build();
|
|
16
16
|
}
|
|
@@ -20,11 +20,16 @@ export function bindModelContext(context, build) {
|
|
|
20
20
|
}
|
|
21
21
|
/** Resolves the private realm protocol; imported functions carry no native state themselves. */
|
|
22
22
|
export function currentModelContext(operation) {
|
|
23
|
-
const
|
|
24
|
-
if (
|
|
23
|
+
const context = activeModelContext();
|
|
24
|
+
if (context === undefined) {
|
|
25
25
|
throw new GeometryError("INVALID_ARGUMENT", "Modeling functions can only run inside generate().", {
|
|
26
26
|
operation,
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
|
-
return
|
|
29
|
+
return context;
|
|
30
|
+
}
|
|
31
|
+
/** Reads an optional binding without initializing an engine or creating ambient authoring state. */
|
|
32
|
+
export function activeModelContext() {
|
|
33
|
+
const binding = bindings[executionKey];
|
|
34
|
+
return binding?.version === 7 ? binding.context : undefined;
|
|
30
35
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createSectionHandle, createSolidHandle } from "./shape-handles.js";
|
|
2
|
+
// One realm protocol lets bundled authoring code declare recipes before a host is initialized.
|
|
3
|
+
// The payload contains no native handles and the engine remains responsible for realization.
|
|
4
|
+
const recipeKey = Symbol.for("@metamesh/modeling/recipe/7");
|
|
5
|
+
/** Reads private recipe metadata without requiring an execution context. */
|
|
6
|
+
export const geometryRecipe = (value) => Object.getOwnPropertyDescriptor(value, recipeKey)?.value;
|
|
7
|
+
/** Recognizes only opaque recipe handles issued by this engine. */
|
|
8
|
+
export const isGeometryRecipe = (value) => typeof value === "object" && value !== null && geometryRecipe(value) !== undefined;
|
|
9
|
+
/** Creates an immutable opaque handle for a recorded operation. */
|
|
10
|
+
export function recordGeometryRecipe(recipe, dispatch) {
|
|
11
|
+
const metadata = Object.freeze({ ...recipe, call: Object.freeze(recipe.call) });
|
|
12
|
+
return recipe.kind === "solid"
|
|
13
|
+
? createSolidHandle(dispatch, { [recipeKey]: { value: metadata } })
|
|
14
|
+
: createSectionHandle(dispatch, { [recipeKey]: { value: metadata } });
|
|
15
|
+
}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import { GeometryError } from "../geometry/errors.js";
|
|
2
|
-
import {
|
|
2
|
+
import { isImmutableMathValue } from "../geometry/math/immutable-value.js";
|
|
3
3
|
import { geometryRecipe, isGeometryRecipe } from "./geometry-recipes.js";
|
|
4
|
+
import { adoptImmutableBuffer, immutableBuffer, immutableBufferView, isImmutableBuffer, } from "./immutable-buffer.js";
|
|
4
5
|
const mutableBufferMessage = "Generation data cannot contain mutable typed arrays or raw ArrayBuffers. Use immutableBuffer(array) or immutableMesh(mesh) before caching them or declaring dependencies.";
|
|
6
|
+
const capturedMetadata = new WeakMap();
|
|
7
|
+
const noChildren = Object.freeze([]);
|
|
8
|
+
/** Reuses field accounting only for containers captured or deeply validated by this owner. */
|
|
9
|
+
export function generationDataMetadata(value) {
|
|
10
|
+
return capturedMetadata.get(value);
|
|
11
|
+
}
|
|
12
|
+
const scalarBytes = (value) => (typeof value === "string" ? value.length * 2 : 8);
|
|
5
13
|
/** Iterates plain fields; recipe capture may read each enumerable accessor once. */
|
|
6
14
|
export function* generationDataEntries(value, captureAccessors = false) {
|
|
7
15
|
const prototype = Object.getPrototypeOf(value);
|
|
@@ -44,6 +52,33 @@ export function generationValueBytes(values, ceiling) {
|
|
|
44
52
|
if (seen.has(value))
|
|
45
53
|
return;
|
|
46
54
|
seen.add(value);
|
|
55
|
+
const metadata = capturedMetadata.get(value);
|
|
56
|
+
if (metadata !== undefined) {
|
|
57
|
+
if (depth === 128 && metadata.bytes > 0) {
|
|
58
|
+
bytes = Infinity;
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
bytes += 32 + metadata.bytes;
|
|
62
|
+
for (const child of metadata.children)
|
|
63
|
+
visit(child, depth + 1);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (isImmutableMathValue(value)) {
|
|
67
|
+
bytes += 32;
|
|
68
|
+
const data = mathValueData(value);
|
|
69
|
+
visit(data, depth + 1);
|
|
70
|
+
if (typeof data === "object" &&
|
|
71
|
+
data !== null &&
|
|
72
|
+
"dimension" in data &&
|
|
73
|
+
(data.dimension === 2 || data.dimension === 3) &&
|
|
74
|
+
"points" in data &&
|
|
75
|
+
Array.isArray(data.points)) {
|
|
76
|
+
// A path retains private numerical tuples as well as its frozen interchange view.
|
|
77
|
+
// Charge both stores conservatively; the outer seen set still counts value aliases once.
|
|
78
|
+
bytes += 64 + data.points.length * (40 + 8 * data.dimension);
|
|
79
|
+
}
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
47
82
|
const array = isImmutableBuffer(value)
|
|
48
83
|
? immutableBufferView(value)
|
|
49
84
|
: ArrayBuffer.isView(value)
|
|
@@ -91,11 +126,16 @@ export function compareGenerationValues(left, right) {
|
|
|
91
126
|
const matches = visited.get(a) ?? new Set();
|
|
92
127
|
matches.add(b);
|
|
93
128
|
visited.set(a, matches);
|
|
129
|
+
if (isImmutableMathValue(a) || isImmutableMathValue(b)) {
|
|
130
|
+
return isImmutableMathValue(a) && isImmutableMathValue(b)
|
|
131
|
+
? compare(mathValueData(a), mathValueData(b), depth + 1)
|
|
132
|
+
: "different";
|
|
133
|
+
}
|
|
94
134
|
const recipeA = geometryRecipe(a), recipeB = geometryRecipe(b);
|
|
95
135
|
if (recipeA !== undefined || recipeB !== undefined) {
|
|
96
136
|
if (recipeA === undefined ||
|
|
97
137
|
recipeB === undefined ||
|
|
98
|
-
recipeA.
|
|
138
|
+
recipeA.observedSession !== recipeB.observedSession ||
|
|
99
139
|
recipeA.kind !== recipeB.kind ||
|
|
100
140
|
recipeA.call.method !== recipeB.call.method ||
|
|
101
141
|
recipeA.index !== recipeB.index)
|
|
@@ -144,13 +184,31 @@ export function compareGenerationValues(left, right) {
|
|
|
144
184
|
};
|
|
145
185
|
return compare(left, right);
|
|
146
186
|
}
|
|
187
|
+
function mathValueData(value) {
|
|
188
|
+
for (const name of ["toArray", "toMatrix"]) {
|
|
189
|
+
const method = Reflect.get(value, name);
|
|
190
|
+
if (typeof method === "function") {
|
|
191
|
+
const data = Reflect.apply(method, value, []);
|
|
192
|
+
// Closure and dimension change path behavior; tuple interchange omits both for empty paths.
|
|
193
|
+
const closed = Reflect.get(value, "closed");
|
|
194
|
+
return typeof closed === "boolean"
|
|
195
|
+
? { dimension: Reflect.get(value, "dimension"), points: data, closed }
|
|
196
|
+
: data;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
throw new TypeError("Immutable math values must expose their canonical numeric data.");
|
|
200
|
+
}
|
|
147
201
|
function captureValue(value, mode, readerAllowed = () => false, validated) {
|
|
148
202
|
const recipeInputs = mode === "recipe";
|
|
149
203
|
const seen = new Map();
|
|
204
|
+
const metadata = new Map();
|
|
150
205
|
const copy = (input) => {
|
|
151
206
|
if (typeof input === "function" && !recipeInputs && !readerAllowed(input))
|
|
152
207
|
throw new GeometryError("INVALID_ARGUMENT", "Computed values and dependencies cannot contain arbitrary function closures.", { operation: "computed" });
|
|
153
|
-
if (typeof input !== "object" ||
|
|
208
|
+
if (typeof input !== "object" ||
|
|
209
|
+
input === null ||
|
|
210
|
+
isGeometryRecipe(input) ||
|
|
211
|
+
isImmutableMathValue(input))
|
|
154
212
|
return input;
|
|
155
213
|
if (isImmutableBuffer(input))
|
|
156
214
|
return adoptImmutableBuffer(input);
|
|
@@ -169,20 +227,42 @@ function captureValue(value, mode, readerAllowed = () => false, validated) {
|
|
|
169
227
|
if (input instanceof ArrayBuffer)
|
|
170
228
|
throw new TypeError(mutableBufferMessage);
|
|
171
229
|
const entries = generationDataEntries(input, recipeInputs);
|
|
230
|
+
let bytes = 0;
|
|
231
|
+
const children = [];
|
|
232
|
+
const recordField = (key, field) => {
|
|
233
|
+
bytes += 16 + key.length * 2;
|
|
234
|
+
if (typeof field === "object" && field !== null)
|
|
235
|
+
children.push(field);
|
|
236
|
+
else
|
|
237
|
+
bytes += scalarBytes(field);
|
|
238
|
+
};
|
|
172
239
|
if (mode === "dependency") {
|
|
173
240
|
if (!Object.isFrozen(input))
|
|
174
241
|
throw new GeometryError("INVALID_ARGUMENT", "Computed dependencies require deeply immutable objects and arrays. Read params inside the callback, use a computed value, or depend on individual scalar values.", { operation: "computed" });
|
|
175
242
|
seen.set(input, input);
|
|
176
|
-
for (const [, field] of entries)
|
|
243
|
+
for (const [key, field] of entries) {
|
|
177
244
|
copy(field);
|
|
245
|
+
recordField(key, field);
|
|
246
|
+
}
|
|
247
|
+
metadata.set(input, {
|
|
248
|
+
bytes,
|
|
249
|
+
children: children.length ? Object.freeze(children) : noChildren,
|
|
250
|
+
});
|
|
178
251
|
return input;
|
|
179
252
|
}
|
|
180
253
|
const result = Array.isArray(input)
|
|
181
254
|
? new Array(input.length)
|
|
182
255
|
: Object.create(Object.getPrototypeOf(input) === null ? null : Object.prototype);
|
|
183
256
|
seen.set(input, result);
|
|
184
|
-
for (const [key, field] of entries)
|
|
185
|
-
|
|
257
|
+
for (const [key, field] of entries) {
|
|
258
|
+
const value = copy(field);
|
|
259
|
+
Object.defineProperty(result, key, { value, enumerable: true });
|
|
260
|
+
recordField(key, value);
|
|
261
|
+
}
|
|
262
|
+
metadata.set(result, {
|
|
263
|
+
bytes,
|
|
264
|
+
children: children.length ? Object.freeze(children) : noChildren,
|
|
265
|
+
});
|
|
186
266
|
return Object.freeze(result);
|
|
187
267
|
};
|
|
188
268
|
const result = copy(value);
|
|
@@ -190,6 +270,8 @@ function captureValue(value, mode, readerAllowed = () => false, validated) {
|
|
|
190
270
|
if (mode === "dependency")
|
|
191
271
|
for (const input of seen.keys())
|
|
192
272
|
validated?.add(input);
|
|
273
|
+
for (const [value, entry] of metadata)
|
|
274
|
+
capturedMetadata.set(value, entry);
|
|
193
275
|
return result;
|
|
194
276
|
}
|
|
195
277
|
/** Validates while capturing immutable data; only explicitly allowed session readers may be functions. */
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { activeModelContext } from "./execution-binding.js";
|
|
2
|
+
import { declarePortableOperation } from "./recipe-declaration.js";
|
|
2
3
|
/** Resolves a typed operation for this execution without retaining the host context. */
|
|
3
4
|
export function invokeModelOperation(name, args) {
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
return dispatchModelOperation(name, args);
|
|
6
|
+
}
|
|
7
|
+
/** Shared facade dispatcher; portable declaration and execution use the same operation contract. */
|
|
8
|
+
export function dispatchModelOperation(name, args) {
|
|
9
|
+
const context = activeModelContext();
|
|
10
|
+
return context === undefined
|
|
11
|
+
? declarePortableOperation(name, args, dispatchModelOperation)
|
|
12
|
+
: Reflect.apply(context[name], undefined, args);
|
|
6
13
|
}
|