public static void ResetNodeConrol(bool NeedResetLoadValue, CodeGenerateSystem.Controls.NodesContainerControl mLinkedNodesContainer, StructNodeControlConstructionParams csparam) { if (NeedResetLoadValue == false) { return; } Macross.NodesControlAssist NodesControlAssist = mLinkedNodesContainer.HostControl as Macross.NodesControlAssist; MacrossPanelBase MacrossOpPanel = NodesControlAssist.HostControl.MacrossOpPanel; IMacrossOperationContainer NodesControlAssist_HostControl = NodesControlAssist.HostControl; var categoryDic = csparam.CategoryDic; csparam.CategoryDic = new Dictionary <string, Category>(); foreach (var categorydic in categoryDic) { csparam.CategoryDic[categorydic.Key] = new Category(MacrossOpPanel); for (int i = 0; i < categorydic.Value.Items.Count; i++) { csparam.CategoryDic[categorydic.Key].Items.Add(categorydic.Value.Items[i]); categorydic.Value.Items[i].SetParentCategory(csparam.CategoryDic[categorydic.Key]); var data = new Macross.CategoryItem.InitializeData(); data.Reset(); categorydic.Value.Items[i].Initialize(NodesControlAssist_HostControl, data); } } }
private void CreateParticleMethodCategory(string methodname, float x, float y) { Macross.NodesControlAssist NodesControlAssist = mLinkedNodesContainer.HostControl as Macross.NodesControlAssist; //加入列表信息 Macross.Category category; var csparam = CSParam as ParticleShapeConeControlConstructionParams; if (!csparam.CategoryDic.TryGetValue(Macross.MacrossPanelBase.GraphCategoryName, out category)) { return; } var HostControl = this.HostNodesContainer.HostControl; var item = new Macross.CategoryItem(null, category); item.CategoryItemType = Macross.CategoryItem.enCategoryItemType.OverrideFunction; var data = new Macross.CategoryItem.InitializeData(); data.Reset(); var MacrossOpPanel = NodesControlAssist.HostControl.MacrossOpPanel; item.Initialize(MacrossOpPanel.HostControl, data); //HostControl.CreateNodesContainer(item); //MainGridItem.Children.Add(item); item.Name = methodname; category.Items.Add(item); //加入结点信息 Type type = typeof(EngineNS.Bricks.Particle.ParticleEmitShapeNode); System.Reflection.MethodInfo methodInfo = type.GetMethod(methodname); System.Reflection.ParameterInfo[] paramstype = methodInfo.GetParameters(); //拷貝方法的attribute. var attrts = methodInfo.GetCustomAttributes(true); string displayname = ""; for (int i = 0; i < attrts.Length; i++) { var displayattr = attrts[i] as System.ComponentModel.DisplayNameAttribute; if (displayattr != null) { displayname = displayattr.DisplayName; break; } } //var CustomFunctionData = new Macross.ResourceInfos.MacrossResourceInfo.CustomFunctionData(); var methodinfo = CodeDomNode.Program.GetMethodInfoAssistFromMethodInfo(methodInfo, type, CodeDomNode.MethodInfoAssist.enHostType.Base, ""); var nodeType = typeof(CodeDomNode.MethodOverride); var csParam = new CodeDomNode.MethodOverride.MethodOverrideConstructParam() { CSType = mLinkedNodesContainer.CSType, HostNodesContainer = mLinkedNodesContainer, ConstructParam = "", MethodInfo = methodinfo, DisplayName = displayname, }; //var center = nodesContainer.NodesControl.GetViewCenter(); var node = mLinkedNodesContainer.AddOrigionNode(nodeType, csParam, x, y); node.IsDeleteable = true; //重写双击事件 不需要进入二级编辑 //item.OnDoubleClick -= item.OnDoubleClick; Type ItemType = item.GetType(); FieldInfo _Field = item.GetType().GetField("OnDoubleClick", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static); if (_Field != null) { object _FieldValue = _Field.GetValue(item); if (_FieldValue != null && _FieldValue is Delegate) { Delegate _ObjectDelegate = (Delegate)_FieldValue; Delegate[] invokeList = _ObjectDelegate.GetInvocationList(); foreach (Delegate del in invokeList) { ItemType.GetEvent("OnDoubleClick").RemoveEventHandler(item, del); } } } item.OnDoubleClick += (categoryItem) => { mLinkedNodesContainer.FocusNode(node); }; //NodesControlAssist.Save(); }