public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context)
        {
            var valueEvaluateMethod = new CodeMemberMethod();

            valueEvaluateMethod.Name       = ValidName + "_InputEvaluate";
            valueEvaluateMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final;
            valueEvaluateMethod.ReturnType = new CodeTypeReference(typeof(EngineNS.Vector3));
            var valueEvaluateMethodContex = new GenerateCodeContext_Method(context.ClassContext, valueEvaluateMethod);
            var tempInputName             = "tempInput";
            CodeVariableDeclarationStatement tempInput = new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(EngineNS.Vector3)), tempInputName, new CodeObjectCreateExpression(typeof(EngineNS.Vector3), new CodeExpression[] { new CodePrimitiveExpression(0), new CodePrimitiveExpression(0), new CodePrimitiveExpression(0) }));

            valueEvaluateMethod.Statements.Add(tempInput);
            CodeExpression xValue = null;
            CodeExpression yValue = null;

            xValue = await Helper.GetEvaluateValueExpression(codeClass, valueEvaluateMethodContex, valueEvaluateMethod, mXLinkHandle, 0);

            if (!Is1D)
            {
                yValue = await Helper.GetEvaluateValueExpression(codeClass, valueEvaluateMethodContex, valueEvaluateMethod, mYLinkHandle, 0);
            }

            CodeAssignStatement xValueAssign = new CodeAssignStatement();

            xValueAssign.Left  = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(tempInputName), "X");
            xValueAssign.Right = xValue;
            valueEvaluateMethod.Statements.Add(xValueAssign);
            if (!Is1D)
            {
                CodeAssignStatement yValueAssign = new CodeAssignStatement();
                yValueAssign.Left  = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(tempInputName), "Y");
                yValueAssign.Right = yValue;
                valueEvaluateMethod.Statements.Add(yValueAssign);
            }
            valueEvaluateMethod.Statements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression(tempInputName)));
            codeClass.Members.Add(valueEvaluateMethod);


            Type bsType;

            if (Is1D)
            {
                bsType = typeof(EngineNS.Bricks.Animation.BlendTree.Node.BlendTree_BlendSpace1D);
            }
            else
            {
                bsType = typeof(EngineNS.Bricks.Animation.BlendTree.Node.BlendTree_BlendSpace2D);
            }
            var createLABSMethodInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeTypeReferenceExpression(bsType), "CreateSync"), new CodeExpression[] { new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(EngineNS.RName)), "GetRName", new CodeExpression[] { new CodePrimitiveExpression(FileName.Name) }) });
            CodeVariableDeclarationStatement stateVarDeclaration = new CodeVariableDeclarationStatement(bsType, ValidName, createLABSMethodInvoke);

            codeStatementCollection.Add(stateVarDeclaration);


            var syncPlayPercentGropAssign = new CodeAssignStatement();

            syncPlayPercentGropAssign.Left  = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "SyncPlayPercentGrop");
            syncPlayPercentGropAssign.Right = new CodePrimitiveExpression(SyncPlayPercentGrop);
            codeStatementCollection.Add(syncPlayPercentGropAssign);

            CodeAssignStatement inputFuncAssign = new CodeAssignStatement();

            inputFuncAssign.Left  = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "EvaluateInput");
            inputFuncAssign.Right = new CodeVariableReferenceExpression(valueEvaluateMethod.Name);
            codeStatementCollection.Add(inputFuncAssign);
            List <string> nofifies = new List <string>();
            var           info     = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(FileName.Address + ".rinfo", null);

            EngineNS.Bricks.Animation.AnimNode.BlendSpace bs = null;
            if (Is1D)
            {
                bs = EngineNS.Bricks.Animation.AnimNode.BlendSpace1D.CreateSync(FileName);
            }
            else
            {
                bs = EngineNS.Bricks.Animation.AnimNode.BlendSpace2D.CreateSync(FileName);
            }
            if (info != null)
            {
                for (int j = 0; j < bs.Samples.Count; ++j)
                {
                    var clip = bs.GetAnimationSample(j);

                    var refInfo = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(clip.AnimationName.Address + ".rinfo", null);

                    var animationInfo = refInfo as EditorCommon.ResourceInfos.AnimationClipResourceInfo;
                    nofifies.Clear();
                    foreach (var pair in animationInfo.NotifyTrackMap)
                    {
                        nofifies.Add(pair.NotifyName);
                    }
                    for (int i = 0; i < nofifies.Count; ++i)
                    {
                        var notify          = nofifies[i];
                        var validNotifyName = StringRegex.GetValidName(notify);
                        validNotifyName = "Anim_Notify_" + validNotifyName;
                        if (hasTheNotifyMethod(codeClass, validNotifyName))
                        {
                            var attachNotifyEventExp = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "BlendSpace"), "AttachNotifyEvent"), new CodeExpression[] { new CodePrimitiveExpression(j), new CodePrimitiveExpression(i), new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), validNotifyName) });
                            //CodeArrayIndexerExpression arrayIndex = new CodeArrayIndexerExpression(new CodeFieldReferenceExpression(animRef, "Notifies"), new CodePrimitiveExpression(i));
                            //CodeAttachEventStatement attachEvent = new CodeAttachEventStatement(arrayIndex, "OnNotify", new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), validNotifyName));
                            codeStatementCollection.Add(attachNotifyEventExp);
                        }
                    }
                }
            }
            return;
        }
        public LABlendSpaceControl(LABlendSpaceControlConstructionParams csParam)
            : base(csParam)
        {
            InitConstruction();
            NodeName            = csParam.NodeName;
            Is1D                = csParam.Is1D;
            FileName            = csParam.FileName;
            SyncPlayPercentGrop = csParam.SyncPlayPercentGrop;
            OnAdded             = csParam.OnAdded;
            BindingTemplateClassInstanceProperties();
            if (Is1D)
            {
                var bs1 = EditorCommon.Utility.EditableAnimationOperation.CreateBlendSpace1D(FileName);
                csParam.XName = bs1.BlendAxises[0].AxisName;
                bs1.BlendAxises[0].OnAxisNameChange += LABlendSpaceControl_OnXAxisNameChange;
            }
            else
            {
                var bs2 = EditorCommon.Utility.EditableAnimationOperation.CreateBlendSpace(FileName);
                csParam.XName = bs2.BlendAxises[0].AxisName;
                csParam.YName = bs2.BlendAxises[1].AxisName;
                bs2.BlendAxises[0].OnAxisNameChange += LABlendSpaceControl_OnXAxisNameChange;
                bs2.BlendAxises[1].OnAxisNameChange += LABlendSpaceControl_OnYAxisNameChange;
            }


            IsOnlyReturnValue = true;
            XValueHandle.NameStringVisible = Visibility.Visible;
            XValueHandle.NameString        = csParam.XName;
            if (Is1D)
            {
                YValueHandle.Visibility = Visibility.Collapsed;
            }
            else
            {
                YValueHandle.Visibility        = Visibility.Visible;
                YValueHandle.NameStringVisible = Visibility.Visible;
                YValueHandle.NameString        = csParam.YName;
            }

            AddLinkPinInfo("XLinkHandle", mXLinkHandle, null);
            AddLinkPinInfo("YLinkHandle", YValueHandle, null);
            AddLinkPinInfo("OutLinkHandle", mOutLinkHandle, null);
            if (Is1D)
            {
                TitleImage = TryFindResource("AnimationNode_BlendSpace1D_64x") as ImageSource;
            }
            else
            {
                TitleImage = TryFindResource("AnimationNode_BlendSpace_64x") as ImageSource;
            }

            EngineNS.Bricks.Animation.AnimNode.BlendSpace bs = null;
            if (Is1D)
            {
                bs = EngineNS.Bricks.Animation.AnimNode.BlendSpace1D.CreateSync(FileName);
            }
            else
            {
                bs = EngineNS.Bricks.Animation.AnimNode.BlendSpace2D.CreateSync(FileName);
            }
            if (bs != null)
            {
                OnAdded?.Invoke(EngineNS.RName.GetRName(bs.GetElementProperty(EngineNS.Bricks.Animation.AnimNode.ElementPropertyType.EPT_Skeleton)));
            }
        }