{"record":{"id":"abbe8eccae042fff","repo":"stride3d/stride","slug":"vector-component-w-is-invalid-only-x-y-and-z-are-supported","errorCode":null,"errorMessage":"Vector component 'W' is invalid, only 'X', 'Y' and 'Z' are supported.","messagePattern":"Vector component 'W' is invalid, only 'X', 'Y' and 'Z' are supported\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ControlPoints/VectorComponentControlPointViewModel.cs","lineNumber":80,"sourceCode":"                    ValueBinding.Value = new Vector2(current.X, (float)value);\n                    break;\n\n                case VectorComponent.Z:\n                case VectorComponent.W:\n                    throw new NotSupportedException();\n\n                default:\n                    throw new ArgumentOutOfRangeException();\n            }\n        }\n    }\n\n    public sealed class Vector3ComponentControlPointViewModel : VectorComponentControlPointViewModel<Vector3>\n    {\n        public Vector3ComponentControlPointViewModel([NotNull] CurveViewModelBase curve, [NotNull] IMemberNode keyNode, [NotNull] IMemberNode valueNode, [NotNull] IMemberNode tangentTypeNode, VectorComponent component)\n            : base(curve, keyNode, valueNode, tangentTypeNode, component)\n        {\n            if (component == VectorComponent.W) throw new ArgumentException(\"Vector component 'W' is invalid, only 'X', 'Y' and 'Z' are supported.\", nameof(component));\n        }\n        \n        protected override double GetValue()\n        {\n            switch (Component)\n            {\n                case VectorComponent.X:\n                    return ValueBinding.Value.X;\n\n                case VectorComponent.Y:\n                    return ValueBinding.Value.Y;\n\n                case VectorComponent.Z:\n                    return ValueBinding.Value.Z;\n\n                case VectorComponent.W:\n                    throw new NotSupportedException();\n","sourceCodeStart":62,"sourceCodeEnd":98,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/editor/Stride.Assets.Presentation/CurveEditor/ViewModels/ControlPoints/VectorComponentControlPointViewModel.cs#L62-L98","documentation":"A Vector3 has only X, Y and Z components. The Vector3ComponentControlPointViewModel constructor rejects VectorComponent.W with ArgumentException, since there is no fourth component to bind on a Vector3 keyframe.","triggerScenarios":"Constructing new Vector3ComponentControlPointViewModel(curve, keyNode, valueNode, tangentTypeNode, VectorComponent.W) — e.g. a generic factory iterating all four components for any vector curve.","commonSituations":"Shared component loops written for Vector4 reused for Vector3; asset channels that include W while the curve was converted to Vector3; editor templates listing all components.","solutions":["Pass only X, Y or Z to this constructor","Make the factory enumerate 3 components for Vector3 curves","Trim W entries from component lists when curves change dimension","Catch ArgumentException to skip invalid components gracefully"],"exampleFix":"// before\nnew Vector3ComponentControlPointViewModel(curve, key, value, tangent, VectorComponent.W);\n// after\nnew Vector3ComponentControlPointViewModel(curve, key, value, tangent, VectorComponent.Z);","handlingStrategy":"validation","validationCode":"if (component == VectorComponent.W) return null; // invalid for Vector3\nvar vm = new Vector3ComponentControlPointViewModel(curve, key, value, tangent, component);","typeGuard":"bool IsValidVector3Component(VectorComponent c) => c is VectorComponent.X or VectorComponent.Y or VectorComponent.Z;","tryCatchPattern":"try { vm = new Vector3ComponentControlPointViewModel(curve, key, value, tangent, component); }\ncatch (ArgumentException) { vm = null; }","preventionTips":["Dimension-aware component enumeration in generic factories","Drop W channels when migrating curves from Vector4 to Vector3","Unit-test component construction boundaries"],"tags":["argument-exception","curve-editor","vector3"],"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"}