void Deserialize(string schemeName) { Name = schemeName; if (Storage.FileExists(ColorSchemeStorageDirectoryName + "\\" + schemeName)) { using (StreamReader reader = new StreamReader(Storage.OpenFile(ColorSchemeStorageDirectoryName + "\\" + schemeName, FileMode.Open, FileAccess.Read))) { DeserializeFromString(reader.ReadToEnd()); } } // Fill all nonsaved elements foreach (Element element in Element.Elements) { if (!materials.ContainsKey(element)) { Material material = new Material(); materials.Add(element, material); } } }
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { if(elementsListBox.SelectedItems.Count>0) { materialGrid.IsEnabled = true; if (selectedMaterial != null) selectedMaterial.PropertyChanged -= OnSelectedMaterialPropertyChanged; selectedMaterial = (elementsListBox.SelectedItems[0] as Tuple<Element, Material>).Item2; UpdateSelectedMaterial(); if (selectedMaterial != null) selectedMaterial.PropertyChanged += OnSelectedMaterialPropertyChanged; } else { if (selectedMaterial != null) selectedMaterial.PropertyChanged -= OnSelectedMaterialPropertyChanged; materialGrid.IsEnabled = false; selectedMaterial = null; } }
// Deserializes color scheme from string internal void DeserializeFromString(string dataString) { Transaction.Suspend(); try { string[] lines = dataString.Split('\n'); for (int i = 0; i < lines.Length; i++) { string[] data = lines[i].Split('|'); if (data.Length == 10) { Element element = Element.GetBySymbol(data[0]); Material material; if (materials.ContainsKey(element)) { // FIXME: use material.Serialize methods (to fix undo/redo issues) material = materials[element]; material.Ambient = (Color) ColorConverter.ConvertFromString(data[1]); material.Diffuse = (Color) ColorConverter.ConvertFromString(data[2]); material.Specular = (Color) ColorConverter.ConvertFromString(data[3]); material.Emissive = (Color) ColorConverter.ConvertFromString(data[4]); material.Glossiness = Convert.ToDouble(data[5], CultureInfo.InvariantCulture); material.SpecularPower = Convert.ToDouble(data[6], CultureInfo.InvariantCulture); material.ReflectionLevel = Convert.ToDouble(data[7], CultureInfo.InvariantCulture); material.BumpLevel = Convert.ToDouble(data[8], CultureInfo.InvariantCulture); material.EmissiveLevel = Convert.ToDouble(data[9], CultureInfo.InvariantCulture); } else { // FIXME: use material.Serialize methods (to fix undo/redo issues) material = new Material() { Ambient = (Color) ColorConverter.ConvertFromString(data[1]), Diffuse = (Color) ColorConverter.ConvertFromString(data[2]), Specular = (Color) ColorConverter.ConvertFromString(data[3]), Emissive = (Color) ColorConverter.ConvertFromString(data[4]), Glossiness = Convert.ToDouble(data[5], CultureInfo.InvariantCulture), SpecularPower = Convert.ToDouble(data[6], CultureInfo.InvariantCulture), ReflectionLevel = Convert.ToDouble(data[7], CultureInfo.InvariantCulture), BumpLevel = Convert.ToDouble(data[8], CultureInfo.InvariantCulture), EmissiveLevel = Convert.ToDouble(data[9], CultureInfo.InvariantCulture) }; materials.Add(element, material); } } } } finally { Transaction.Resume(); } }
static MaterialRenderData GetMaterialRenderData(Material material) { MaterialRenderData data = new MaterialRenderData { Ambient = ToInt32(material.Ambient), Diffuse = ToInt32(material.Diffuse), Specular = ToInt32(material.Specular), Emissive = ToInt32(material.Emissive), Glossiness = (float)material.Glossiness, SpecularPower = (float)material.SpecularPower, ReflectionLevel = (float)material.ReflectionLevel, BumpLevel = (float)material.BumpLevel, EmissiveLevel = (float)material.EmissiveLevel }; return data; }