{"record":{"id":"967a4a4d0029462b","repo":"stride3d/stride","slug":"vector-component-z-is-invalid-only-x-and-y-are-supported-967a4a","errorCode":null,"errorMessage":"Vector component 'Z' is invalid, only 'X' and 'Y' are supported.","messagePattern":"Vector component 'Z' is invalid, only 'X' and 'Y' are supported\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorComponentCurveViewModel.cs","lineNumber":99,"sourceCode":"        /// <param name=\"realPoint\"></param>\n        protected abstract void UpdateComponent(ref TValue value, Vector2 realPoint);\n\n        /// <inheritdoc/>\n        protected sealed override KeyFrameControlPointViewModel<TValue> CreateKeyFrameControlPoint(IMemberNode keyNode, IMemberNode valueNode, IMemberNode tangentTypeNode)\n        {\n            return (TKeyFrameControlPointViewModel)Activator.CreateInstance(typeof(TKeyFrameControlPointViewModel), this, keyNode, valueNode, tangentTypeNode, Component);\n        }\n    }\n\n    /// <summary>\n    /// Represents the curve of one component of a <see cref=\"Vector2\"/>.\n    /// </summary>\n    public sealed class Vector2ComponentCurveViewModel : VectorComponentCurveViewModel<Vector2, Vector2ComponentControlPointViewModel>\n    {\n        public Vector2ComponentCurveViewModel([NotNull] CurveEditorViewModel editor, CurveViewModelBase parent, [NotNull] ComputeAnimationCurve<Vector2> computeCurve, VectorComponent component)\n            : base(editor, parent, computeCurve, component)\n        {\n            if (component == VectorComponent.Z) throw new ArgumentException(\"Vector component 'Z' is invalid, only 'X' and 'Y' are supported.\", nameof(component));\n            if (component == VectorComponent.W) throw new ArgumentException(\"Vector component 'W' is invalid, only 'X' and 'Y' are supported.\", nameof(component));\n        }\n\n        /// <inheritdoc/>\n        protected override void UpdateComponent(ref Vector2 value, Vector2 realPoint)\n        {\n            // Update the component that is handled by this curve\n            switch (Component)\n            {\n                case VectorComponent.X:\n                    value.X = realPoint.Y;\n                    break;\n\n                case VectorComponent.Y:\n                    value.Y = realPoint.Y;\n                    break;\n\n                default:","sourceCodeStart":81,"sourceCodeEnd":117,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/VectorComponentCurveViewModel.cs#L81-L117","documentation":"Vector2ComponentCurveViewModel edits one component of a Vector2 compute animation curve. Its constructor throws ArgumentException when given VectorComponent.Z, because a Vector2 has no Z channel to edit.","triggerScenarios":"Constructing new Vector2ComponentCurveViewModel(editor, parent, computeCurve, VectorComponent.Z), typically from a generic curve-factory loop over components X..W.","commonSituations":"Curve creation code shared across Vector2/3/4; component lists derived from asset metadata that still mention Z; refactoring a Vector3 curve into Vector2 without updating components.","solutions":["Pass only VectorComponent.X or VectorComponent.Y","Make the curve factory dimension-aware (two components for Vector2)","Remove stale Z entries from component/channel descriptors","Catch ArgumentException and skip invalid component curves"],"exampleFix":"// before\nnew Vector2ComponentCurveViewModel(editor, parent, curve2D, VectorComponent.Z);\n// after\nnew Vector2ComponentCurveViewModel(editor, parent, curve2D, VectorComponent.Y);","handlingStrategy":"validation","validationCode":"if (component is VectorComponent.Z or VectorComponent.W) return null;\nvar curveVm = new Vector2ComponentCurveViewModel(editor, parent, curve, component);","typeGuard":"bool IsValidVector2Component(VectorComponent c) => c is VectorComponent.X or VectorComponent.Y;","tryCatchPattern":"try { vm = new Vector2ComponentCurveViewModel(editor, parent, curve, component); }\ncatch (ArgumentException) { vm = null; }","preventionTips":["Only create X/Y component curves for Vector2 curves","Make the curve factory dimension-aware","Validate channels from asset metadata against the curve type"],"tags":["argument-exception","curve-editor","vector2"],"backgroundTag":"invalid-enum-value","analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}