public void CreateTemplateClass(List <CodeGenerateSystem.Base.CustomPropertyInfo> cpInfos) { var csParam = CSParam as ReturnCustomConstructParam; mTemplateClassInstance = CodeGenerateSystem.Base.PropertyClassGenerator.CreateClassInstanceFromCustomPropertys(cpInfos, this, $"CustomReturn_{csParam.MethodInfo.MethodName}_{Guid.NewGuid().ToString().Replace("-","_")}", false); InitTemplateClass_WPF(cpInfos); }
public static void SaveClassInstanceProperties(CodeGenerateSystem.Base.GeneratorClassBase classInstance, EngineNS.IO.XndAttrib att) { if (classInstance == null) { return; } var pros = classInstance.GetType().GetProperties(); att.Write((int)pros.Length); foreach (var pro in pros) { att.Write(pro.Name); var typeSaveStr = EngineNS.Rtti.RttiHelper.GetTypeSaveString(pro.PropertyType); att.Write(typeSaveStr); var serializer = EngineNS.IO.Serializer.TypeDescGenerator.Instance.GetSerializer(pro.PropertyType); if (serializer == null && pro.PropertyType.IsInterface == false) { throw new InvalidOperationException($"保存属性失败,{pro.Name}({pro.PropertyType.FullName})找不到对应的序列化器"); } var infoDesc = new EngineNS.Rtti.PropMemberDesc(pro); var val = pro.GetValue(classInstance); serializer.WriteValue(val, att); } }
public ColorControl(CodeGenerateSystem.Base.ConstructionParams csParam) : base(csParam) { var cpInfos = new List <CodeGenerateSystem.Base.CustomPropertyInfo>(); var cpInfo = CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(EngineNS.Color), "Color", new Attribute[] { new DisplayNameAttribute("颜色"), new EngineNS.Editor.Editor_ColorPicker(), new EngineNS.Rtti.MetaDataAttribute() }); cpInfos.Add(cpInfo); mTemplateClassInstance = CodeGenerateSystem.Base.PropertyClassGenerator.CreateClassInstanceFromCustomPropertys(cpInfos, this); InitConstruction(); var linkType = CodeGenerateSystem.Base.LinkPinControl.GetLinkTypeFromTypeString(mValueType.FullName); AddLinkPinInfo("Ctrlvalue_ColorIn", mCtrlvalue_ColorIn, null); AddLinkPinInfo("Ctrlvalue_ColorOut", mCtrlvalue_ColorOut, null); mInComponentLinks.Add(mCtrlValueInR); mInComponentLinks.Add(mCtrlValueInG); mInComponentLinks.Add(mCtrlValueInB); mInComponentLinks.Add(mCtrlValueInA); AddLinkPinInfo("CtrlValueInR", mCtrlValueInR, null); AddLinkPinInfo("CtrlValueInG", mCtrlValueInG, null); AddLinkPinInfo("CtrlValueInB", mCtrlValueInB, null); AddLinkPinInfo("CtrlValueInA", mCtrlValueInA, null); mOutComponentLinks.Add(mCtrlValueOutR); mOutComponentLinks.Add(mCtrlValueOutG); mOutComponentLinks.Add(mCtrlValueOutB); mOutComponentLinks.Add(mCtrlValueOutA); AddLinkPinInfo("CtrlValueOutR", mCtrlValueOutR, null); AddLinkPinInfo("CtrlValueOutG", mCtrlValueOutG, null); AddLinkPinInfo("CtrlValueOutB", mCtrlValueOutB, null); AddLinkPinInfo("CtrlValueOutA", mCtrlValueOutA, null); }
public BezierControl(CodeGenerateSystem.Base.ConstructionParams csParam) : base(csParam) { var cpInfos = new List <CodeGenerateSystem.Base.CustomPropertyInfo>(); cpInfos.Add(CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(double), "XMax", new Attribute[] { new EngineNS.Rtti.MetaDataAttribute() })); cpInfos.Add(CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(double), "XMin", new Attribute[] { new EngineNS.Rtti.MetaDataAttribute() })); cpInfos.Add(CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(double), "YMax", new Attribute[] { new EngineNS.Rtti.MetaDataAttribute() })); cpInfos.Add(CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(double), "YMin", new Attribute[] { new EngineNS.Rtti.MetaDataAttribute() })); cpInfos.Add(CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(bool), "XLoop", new Attribute[] { new EngineNS.Rtti.MetaDataAttribute() })); mTemplateClassInstance = CodeGenerateSystem.Base.PropertyClassGenerator.CreateClassInstanceFromCustomPropertys(cpInfos, this); InitConstruction(); NodeName = "Bezier"; // X输入 AddLinkPinInfo("CtrlValueInputHandle", mCtrlValueInputHandle, null); // Y输出 AddLinkPinInfo("CtrlValueOutputHandle", mCtrlValueOutputHandle, null); // Y轴最大值 AddLinkPinInfo("CtrlValueYMaxInputHandle", mCtrlValueYMaxInputHandle, null); // Y轴最小值 AddLinkPinInfo("CtrlValueYMinInputHandle", mCtrlValueYMinInputHandle, null); // X轴最小值 AddLinkPinInfo("CtrlValueXMinInputHandle", mCtrlValueXMinInputHandle, null); // X轴最大值 AddLinkPinInfo("CtrlValueXMaxInputHandle", mCtrlValueXMaxInputHandle, null); // X循环 AddLinkPinInfo("CtrlValueXLoopHandle", mCtrlValueXLoopHandle, null); }
private void Btn_ClassSetting_Click(object sender, RoutedEventArgs e) { if (CurrentResourceInfo.BaseType == null) { EditorCommon.MessageBox.Show("找不到当前Macross的基类"); return; } if (mClassSettingPropertiesClassInstance == null) { var atts = CurrentResourceInfo.BaseType.GetCustomAttributes(typeof(EngineNS.Editor.Editor_MacrossClassAttribute), true); var att = atts[0] as EngineNS.Editor.Editor_MacrossClassAttribute; var csType = att.CSType; List <CodeGenerateSystem.Base.CustomPropertyInfo> cpInfos = new List <CodeGenerateSystem.Base.CustomPropertyInfo>(); var baseTypeCPInfo = new CodeGenerateSystem.Base.CustomPropertyInfo() { PropertyName = "BaseType", PropertyType = typeof(Type), DefaultValue = CurrentResourceInfo.BaseType, CurrentValue = CurrentResourceInfo.BaseType, }; // Editor.Editor_BaseTypeDefine 限定类型基类 baseTypeCPInfo.PropertyAttributes.Add(new EngineNS.Editor.Editor_TypeFilterAttribute(EngineNS.Editor.Editor_TypeFilterAttribute.enTypeFilter.Class, EngineNS.Editor.Editor_MacrossClassAttribute.enMacrossType.Inheritable)); cpInfos.Add(baseTypeCPInfo); var initParam = new CodeGenerateSystem.Base.ConstructionParams() { CSType = csType, }; var tempNode = new TempNode(initParam); mClassSettingPropertiesClassInstance = CodeGenerateSystem.Base.PropertyClassGenerator.CreateClassInstanceFromCustomPropertys(cpInfos, tempNode, "MCSetting_" + EngineNS.Editor.Assist.GetValuedGUIDString(Guid.NewGuid()), false); var classType = mClassSettingPropertiesClassInstance.GetType(); //var classType = CodeGenerateSystem.Base.PropertyClassGenerator.CreateTypeFromCustomPropertys(cpInfos, "MacrossClassSettingDynamicAssembly", ); //mClassSettingPropertiesClassInstance = System.Activator.CreateInstance(classType) as CodeGenerateSystem.Base.GeneratorClassBase; //mClassSettingPropertiesClassInstance.CSType = csType; foreach (var cpInfo in cpInfos) { var pro = classType.GetProperty(cpInfo.PropertyName); pro.SetValue(mClassSettingPropertiesClassInstance, cpInfo.CurrentValue, null); } mClassSettingPropertiesClassInstance.OnPropertyChangedAction = (propertyName, newValue, oldValue) => { switch (propertyName) { case "BaseType": CurrentResourceInfo.ResetBaseType((Type)newValue); break; } }; } var ctrl = LinksTabControl.SelectedContent as MacrossLinkControl; ctrl.PG.Instance = mClassSettingPropertiesClassInstance; }
public void CreateTemplateClas() { var param = CSParam as CreateObjectConstructionParams; mClassProperties.Clear(); if (param.CreateType != null) { var properties = param.CreateType.GetProperties(); foreach (var property in properties) { var att = EngineNS.Rtti.AttributeHelper.GetCustomAttribute(property, typeof(EngineNS.Editor.MacrossMemberAttribute).FullName, true); if (att == null) { continue; } var cpInfo = new CodeGenerateSystem.Base.CustomPropertyInfo() { PropertyName = property.Name, PropertyType = property.PropertyType, DefaultValue = CodeGenerateSystem.Program.GetDefaultValueFromType(property.PropertyType), }; cpInfo.CurrentValue = cpInfo.DefaultValue; bool hasMetaAtt = false; foreach (Attribute customAtt in property.GetCustomAttributes(false)) { if (customAtt.GetType().FullName == typeof(EngineNS.Rtti.MetaDataAttribute).FullName) { hasMetaAtt = true; } cpInfo.PropertyAttributes.Add(customAtt); } if (!hasMetaAtt) { cpInfo.PropertyAttributes.Add(new EngineNS.Rtti.MetaDataAttribute()); } mClassProperties.Add(cpInfo); } mTemplateClassInstance = CodeGenerateSystem.Base.PropertyClassGenerator.CreateClassInstanceFromCustomPropertys(mClassProperties, this, $"CreateObject_{param.CreateType.FullName}", false); } if (mDefaultValueObj == null) { mDefaultValueObj = System.Activator.CreateInstance(param.CreateType); } var classType = mTemplateClassInstance.GetType(); foreach (var pro in mClassProperties) { var proInfo = classType.GetProperty(pro.PropertyName); if (proInfo == null) { continue; } var srcProInfo = param.CreateType.GetProperty(pro.PropertyName); proInfo.SetValue(mTemplateClassInstance, srcProInfo.GetValue(mDefaultValueObj)); } }
public static void CloneClassInstanceProperties(CodeGenerateSystem.Base.GeneratorClassBase srcClassInstance, CodeGenerateSystem.Base.GeneratorClassBase tagClassInstance) { if (srcClassInstance == null || tagClassInstance == null) { return; } var srcType = srcClassInstance.GetType(); var tagType = tagClassInstance.GetType(); foreach (var pro in srcType.GetProperties()) { var tagPro = tagType.GetProperty(pro.Name); if (tagPro == null) { continue; } var val = pro.GetValue(srcClassInstance, null); tagPro.SetValue(tagClassInstance, val); } }
public static void LoadClassInstanceProperties(CodeGenerateSystem.Base.GeneratorClassBase classInstance, EngineNS.IO.XndAttrib att) { if (classInstance == null) { return; } int count; att.Read(out count); var classType = classInstance.GetType(); for (int i = 0; i < count; i++) { string proName; att.Read(out proName); string typeSaveStr; att.Read(out typeSaveStr); var type = EngineNS.Rtti.RttiHelper.GetTypeFromSaveString(typeSaveStr); var serializer = EngineNS.IO.Serializer.TypeDescGenerator.Instance.GetSerializer(type); if (serializer == null) { throw new InvalidOperationException($"读取属性失败,{proName}({type.FullName})找不到对应的序列化器"); } var val = serializer.ReadValue(att); var pro = classType.GetProperty(proName); if (pro == null) { continue; } if (pro.PropertyType != type) { continue; } pro.SetValue(classInstance, val); } }