Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.52 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Windows.Controls;
  9. using System.Xml.Serialization;
  10. using DynamicShaderViewer.ShaderParser;
  11. using DynamicShaderViewer.ViewModel;
  12. using DynamicShaderViewer.Views;
  13. using Microsoft.Win32;
  14.  
  15. namespace DynamicShaderViewer.Helper
  16. {
  17. [Serializable]
  18. [XmlRoot (ElementName = "Holder")]
  19. public struct SerializeHolder<T>
  20. {
  21. public SerializeHolder(string name, T value)
  22. {
  23. Name = name;
  24. Value = value;
  25. }
  26. [XmlElement (ElementName = "shadername")]
  27. public string Name { get; set; }
  28. [XmlElement (ElementName = "value")]
  29. public T Value { get; set; }
  30. }
  31.  
  32. [Serializable]
  33. [XmlRoot (ElementName = "SerializedParameters")]
  34. public class ParameterSerializer
  35. {
  36. private XmlSerializer XmlSer = new XmlSerializer(typeof(ParameterSerializer));
  37.  
  38. public string ShaderName { get; set; }
  39.  
  40. public List<SerializeHolder<bool>> BoolList { get; set; } = new List<SerializeHolder<bool>>();
  41. public List<SerializeHolder<Float2>> Float2List { get; set; } = new List<SerializeHolder<Float2>>();
  42. public List<SerializeHolder<Float3>> Float3List { get; set; } = new List<SerializeHolder<Float3>>();
  43. public List<SerializeHolder<Float4>> Float4List { get; set; } = new List<SerializeHolder<Float4>>();
  44. public List<SerializeHolder<float>> FloatList { get; set; } = new List<SerializeHolder<float>>();
  45. public List<SerializeHolder<int>> IntList { get; set; } = new List<SerializeHolder<int>>();
  46. public List<SerializeHolder<string>> Texture2DList { get; set; } = new List<SerializeHolder<string>>();
  47.  
  48. public void SerializeParameters(UIElementCollection parameterGrid, string shaderName)
  49. {
  50. ShaderName = shaderName;
  51.  
  52. ClearLists();
  53.  
  54. foreach (var p in parameterGrid)
  55. {
  56. if (p is BoolView)
  57. {
  58. var vm = (p as BoolView).DataContext as BoolViewModel;
  59. BoolList.Add(new SerializeHolder<bool>(vm.ShaderName, vm.ContentValue));
  60. }
  61. else if (p is IntView)
  62. {
  63. var vm = (p as IntView).DataContext as IntViewModel;
  64. IntList.Add(new SerializeHolder<int>(vm.ShaderName, vm.ContentValue));
  65. }
  66. else if (p is FloatView)
  67. {
  68. var vm = (p as FloatView).DataContext as FloatViewModel;
  69. FloatList.Add(new SerializeHolder<float>(vm.ShaderName, vm.ContentValue));
  70. }
  71. else if (p is Float2View)
  72. {
  73. var vm = (p as Float2View).DataContext as Float2ViewModel;
  74. Float2List.Add(new SerializeHolder<Float2>(vm.ShaderName, vm.ContentValue));
  75. }
  76. else if (p is Float3View)
  77. {
  78. var vm = (p as Float3View).DataContext as Float3ViewModel;
  79. Float3List.Add(new SerializeHolder<Float3>(vm.ShaderName, vm.ContentValue));
  80. }
  81. else if (p is Float4View)
  82. {
  83. var vm = (p as Float4View).DataContext as Float4ViewModel;
  84. Float4List.Add(new SerializeHolder<Float4>(vm.ShaderName, vm.ContentValue));
  85. }
  86. else if (p is Texture2DView)
  87. {
  88. var vm = (p as Texture2DView).DataContext as Texture2DViewModel;
  89. Texture2DList.Add(new SerializeHolder<string>(vm.ShaderName, vm.FileName));
  90. }
  91. }
  92.  
  93. var ofd = new SaveFileDialog();
  94. string baseDirectory = System.AppDomain.CurrentDomain.BaseDirectory;
  95. ofd.InitialDirectory = baseDirectory;
  96. ofd.DefaultExt = ".xml";
  97. ofd.Filter = "XML files (.xml)|*.xml";
  98. if (ofd.ShowDialog() == true)
  99. {
  100. using (var f = File.Create(ofd.FileName))
  101. {
  102. XmlSer.Serialize(f, this);
  103. }
  104. }
  105. }
  106.  
  107. public string DeSerializeParameters(List<Parameter> oldParameters)
  108. {
  109. var ofd = new OpenFileDialog();
  110. string baseDirectory = System.AppDomain.CurrentDomain.BaseDirectory;
  111. ofd.InitialDirectory = baseDirectory;
  112. ofd.Filter = "XML files (.xml)|*.xml";
  113.  
  114. if (ofd.ShowDialog() == true)
  115. {
  116. using (var f = File.OpenRead(ofd.FileName))
  117. {
  118. var loadedParameters = XmlSer.Deserialize(f) as ParameterSerializer;
  119. foreach (var b in loadedParameters.BoolList)
  120. {
  121. var p = oldParameters.Find(x => x.ShaderName == b.Name);
  122. if (p != null) p.DefaultValue = b.Value ? "true" : "false";
  123. }
  124. foreach (var i in loadedParameters.IntList)
  125. {
  126. var p = oldParameters.Find(x => x.ShaderName == i.Name);
  127. if (p != null) p.DefaultValue = i.Value.ToString();
  128. }
  129. foreach (var fl in loadedParameters.FloatList)
  130. {
  131. var p = oldParameters.Find(x => x.ShaderName == fl.Name);
  132. if (p != null) p.DefaultValue = fl.Value.ToString(CultureInfo.InvariantCulture);
  133. }
  134. foreach (var fl in loadedParameters.Float2List)
  135. {
  136. var p = oldParameters.Find(x => x.ShaderName == fl.Name);
  137. if (p != null) p.DefaultValue = $"{fl.Value.X.ToString(CultureInfo.InvariantCulture)},{fl.Value.Y.ToString(CultureInfo.InvariantCulture)}";
  138. }
  139. foreach (var fl in loadedParameters.Float3List)
  140. {
  141. var p = oldParameters.Find(x => x.ShaderName == fl.Name);
  142. if (p != null) p.DefaultValue = $"{fl.Value.X.ToString(CultureInfo.InvariantCulture)},{fl.Value.Y.ToString(CultureInfo.InvariantCulture)},{fl.Value.Z.ToString(CultureInfo.InvariantCulture)}";
  143. }
  144. foreach (var fl in loadedParameters.Float4List)
  145. {
  146. var p = oldParameters.Find(x => x.ShaderName == fl.Name);
  147. if (p != null) p.DefaultValue = $"{fl.Value.X.ToString(CultureInfo.InvariantCulture)},{fl.Value.Y.ToString(CultureInfo.InvariantCulture)},{fl.Value.Z.ToString(CultureInfo.InvariantCulture)},{fl.Value.W.ToString(CultureInfo.InvariantCulture)}";
  148. }
  149. foreach (var t in loadedParameters.Texture2DList)
  150. {
  151. var p = oldParameters.Find(x => x.ShaderName == t.Name);
  152. if (p != null) p.DefaultValue = t.Value;
  153. }
  154.  
  155. return loadedParameters.ShaderName;
  156. }
  157. }
  158. return string.Empty;
  159. }
  160.  
  161. private void ClearLists()
  162. {
  163. BoolList.Clear();
  164. IntList.Clear();
  165. FloatList.Clear();
  166. Float2List.Clear();
  167. Float3List.Clear();
  168. Float4List.Clear();
  169. }
  170. }
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement