private void btnResetPropertyType_Click(object sender, EventArgs e) { //-- 找到选中的type string selectedTypeName = this.comboBoxType.SelectedItem as string; Type newDistType = null; foreach (Type t in m_distributionClasses) { if (t.Name == selectedTypeName) { newDistType = t; break; } } if (newDistType == null) { return; } //-- 创建新对象 NDistribution newDistObj = Activator.CreateInstance(newDistType) as NDistribution; if (newDistObj == null) { return; } //-- 把新的Distribution对象设置给特效元素 NEffectElement sfxElem = this.groupBoxObject.Tag as NEffectElement; string propertyName = this.groupBoxObject.Text; Type elemType = sfxElem.GetType(); PropertyInfo propertyObj = elemType.GetProperty(propertyName); propertyObj.SetValue(sfxElem, newDistObj, null); //-- 更新自己的显示 this.propertyGridDist.SelectedObject = newDistObj; string name = this.propertyGridDist.Text; Type valueType = newDistObj.GetType(); //-- 更新编辑网格 if (valueType == typeof(NexusEngine.NDistributionFloatCurve)) { FloatCurve item = new FloatCurve(); item.Name = name; item.Bind((NexusEngine.NDistributionFloatCurve)newDistObj); m_Timeline.AddItem(item); } else if (valueType == typeof(NexusEngine.NDistributionVector2Curve)) { VectorCurve2 item = new VectorCurve2(); item.Name = name; item.Bind((NexusEngine.NDistributionVector2Curve)newDistObj); m_Timeline.AddItem(item); } else if (valueType == typeof(NexusEngine.NDistributionVector3Curve)) { VectorCurve3 item = new VectorCurve3(); item.Name = name; item.Bind((NexusEngine.NDistributionVector3Curve)newDistObj); m_Timeline.AddItem(item); } else if (valueType == typeof(NexusEngine.NDistributionColorCurve)) { ColorCurve item = new ColorCurve(); item.Name = name; item.Bind((NexusEngine.NDistributionColorCurve)newDistObj); m_Timeline.AddItem(item); } else { m_Timeline.Clear(); } }
void OnElementPropertySelected(object sender, EventArgs e) { SFXElement senderSFX = sender as SFXElement; SelectedGridItemChangedEventArgs se = e as SelectedGridItemChangedEventArgs; object value = se.NewSelection.Value; if (value == null) { return; } string name = se.NewSelection.Label; this.propertyGridDist.SelectedObject = value; this.propertyGridDist.Text = name; Type valueType = value.GetType(); Type baseType = valueType.BaseType; bool isDist = valueType.IsSubclassOf(typeof(NexusEngine.NDistribution)); if (isDist) { this.groupBoxObject.Text = se.NewSelection.Label; this.groupBoxObject.Tag = senderSFX.EditElement; this.comboBoxType.Items.Clear(); int sel = 0; foreach (Type t in m_distributionClasses) { if (t.IsSubclassOf(baseType)) { this.comboBoxType.Items.Add(t.Name); if (t.Name == valueType.Name) { sel = this.comboBoxType.Items.Count - 1; } } } this.comboBoxType.SelectedIndex = sel; if (valueType == typeof(NexusEngine.NDistributionFloatCurve)) { FloatCurve item = new FloatCurve(); item.Name = name; item.Bind((NexusEngine.NDistributionFloatCurve)value); m_Timeline.AddItem(item); } else if (valueType == typeof(NexusEngine.NDistributionVector2Curve)) { VectorCurve2 item = new VectorCurve2(); item.Name = name; item.Bind((NexusEngine.NDistributionVector2Curve)value); m_Timeline.AddItem(item); } else if (valueType == typeof(NexusEngine.NDistributionVector3Curve)) { VectorCurve3 item = new VectorCurve3(); item.Name = name; item.Bind((NexusEngine.NDistributionVector3Curve)value); m_Timeline.AddItem(item); } else if (valueType == typeof(NexusEngine.NDistributionColorCurve)) { ColorCurve item = new ColorCurve(); item.Name = name; item.Bind((NexusEngine.NDistributionColorCurve)value); m_Timeline.AddItem(item); } else { m_Timeline.Clear(); } } else { m_Timeline.Clear(); } this.splitContainerH.Panel2.Enabled = isDist; }