00001 using System;
00002 using System.Collections.Generic;
00003 using System.Linq;
00004 using System.Text;
00005 using System.Windows;
00006 using System.Xml;
00007 using System.Collections;
00008 using System.Windows.Media;
00009 using System.Globalization;
00010
00011 namespace EdgeClustering
00012 {
00013
00014
00015
00016
00017
00018
00019 static class XMLData
00020 {
00021
00022
00023
00024
00025
00026
00027
00028
00029 public static void WriteLinkedNodes(List<SimpleEdge> edges, String filename)
00030 {
00031 XmlDocument doc = new XmlDocument();
00032 XmlNode root, node,rnode;
00033
00034 root = doc.CreateElement("Edges");
00035 doc.AppendChild(root);
00036
00037 foreach (SimpleEdge p in edges)
00038 {
00039 rnode = doc.CreateElement("Edge");
00040 root.AppendChild(rnode);
00041
00042 node = doc.CreateElement("A");
00043 rnode.AppendChild(node);
00044
00045 node.Attributes.Append(doc.CreateAttribute("x")).InnerText = p.A.X +"";
00046 node.Attributes.Append(doc.CreateAttribute("y")).InnerText = p.A.Y +"";
00047
00048 node = doc.CreateElement("B");
00049 rnode.AppendChild(node);
00050
00051 node.Attributes.Append(doc.CreateAttribute("x")).InnerText = p.B.X + "";
00052 node.Attributes.Append(doc.CreateAttribute("y")).InnerText = p.B.Y + "";
00053 }
00054
00055 doc.Save(filename);
00056 }
00057
00058
00059
00060
00061
00062
00063 public static List<SimpleEdge> ReadLinkedNodes(String filename)
00064 {
00065 XmlDocument doc = new XmlDocument();
00066
00067 doc.Load(filename);
00068
00069 XmlElement root = doc.DocumentElement;
00070 XmlNodeList list = root.GetElementsByTagName("Edge");
00071
00072 List<SimpleEdge> edges = new List<SimpleEdge>();
00073
00074 foreach (XmlNode n in list)
00075 {
00076 XmlNode a, b;
00077 a = n["A"];
00078 b = n["B"];
00079
00080 edges.Add(new SimpleEdge(
00081 new Point(double.Parse(a.Attributes["x"].InnerText),
00082 double.Parse(a.Attributes["y"].InnerText)),
00083 new Point(double.Parse(b.Attributes["x"].InnerText),
00084 double.Parse(b.Attributes["y"].InnerText))));
00085 }
00086
00087 return edges;
00088 }
00089
00090
00091
00092
00093
00094
00095 public static void WriteSettings(String filename)
00096 {
00097 XmlDocument doc = new XmlDocument();
00098 XmlNode root, node, vals, visib, colors;
00099
00100 root = doc.CreateElement("Settings");
00101 doc.AppendChild(root);
00102
00103
00104 vals = doc.CreateElement("Values");
00105 root.AppendChild(vals);
00106
00107 node = doc.CreateElement("Border");
00108 vals.AppendChild(node);
00109 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = Graph.Settings.Border + "";
00110
00111 node = doc.CreateElement("GridSize");
00112 vals.AppendChild(node);
00113 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = Graph.Settings.GridSize + "";
00114
00115 node = doc.CreateElement("KdeHistogramSize");
00116 vals.AppendChild(node);
00117 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = Graph.Settings.KdeHistogramSize + "";
00118
00119 node = doc.CreateElement("KdeRadius");
00120 vals.AppendChild(node);
00121 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = Graph.Settings.KdeRadius + "";
00122
00123 node = doc.CreateElement("KdeThreshold");
00124 vals.AppendChild(node);
00125 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = Graph.Settings.KdeThreshold + "";
00126
00127
00128
00129 visib = doc.CreateElement("Visibility");
00130 root.AppendChild(visib);
00131
00132 node = doc.CreateElement("ControlMeshEdges");
00133 visib.AppendChild(node);
00134 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.controlMeshEdgesVisible + "";
00135
00136 node = doc.CreateElement("ControlMesh");
00137 visib.AppendChild(node);
00138 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.controlMeshVisible + "";
00139
00140 node = doc.CreateElement("ControlPoints");
00141 visib.AppendChild(node);
00142 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.controlPointsVisible + "";
00143
00144 node = doc.CreateElement("EnhancedGraph");
00145 visib.AppendChild(node);
00146 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.enhancedGraphVisible + "";
00147
00148 node = doc.CreateElement("GraphEdges");
00149 visib.AppendChild(node);
00150 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.graphEdgesVisible + "";
00151
00152 node = doc.CreateElement("KernelPeaks");
00153 visib.AppendChild(node);
00154 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.kernelPeaksVisible + "";
00155
00156 node = doc.CreateElement("MergedSegments");
00157 visib.AppendChild(node);
00158 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.mergedSegmentsVisible + "";
00159
00160 node = doc.CreateElement("Segments");
00161 visib.AppendChild(node);
00162 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.segmentsVisible + "";
00163
00164
00165 colors = doc.CreateElement("Colors");
00166 root.AppendChild(colors);
00167
00168 node = doc.CreateElement("ControlMesh");
00169 colors.AppendChild(node);
00170 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.ControlMeshColor + "";
00171
00172 node = doc.CreateElement("ControlMeshEdges");
00173 colors.AppendChild(node);
00174 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.ControlMeshEdgesColor + "";
00175
00176 node = doc.CreateElement("ControlPoints");
00177 colors.AppendChild(node);
00178 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.ControlPointsColor + "";
00179
00180 node = doc.CreateElement("EnhancedGraph");
00181 colors.AppendChild(node);
00182 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.EnhancedGraphColor + "";
00183
00184 node = doc.CreateElement("Graph");
00185 colors.AppendChild(node);
00186 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.GraphColor + "";
00187
00188 node = doc.CreateElement("KDEPeaks");
00189 colors.AppendChild(node);
00190 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.KDEPeakColor + "";
00191
00192 node = doc.CreateElement("MergedSegments");
00193 colors.AppendChild(node);
00194 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.MergedSegmentsColor + "";
00195
00196 node = doc.CreateElement("Segments");
00197 colors.AppendChild(node);
00198 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = GraphDrawer.Settings.SegmentsColor + "";
00199
00200
00201 node = doc.CreateElement("MergedSegmentsThreshold");
00202 vals.AppendChild(node);
00203 node.Attributes.Append(doc.CreateAttribute("value")).InnerText = MergedSegment.threshold + "";
00204
00205 doc.Save(filename);
00206 }
00207
00208
00209
00210
00211
00212 public static void ReadSettings(String filename)
00213 {
00214 XmlDocument doc = new XmlDocument();
00215 doc.Load(filename);
00216
00217 XmlElement root = doc.DocumentElement;
00218 XmlNodeList list = root.ChildNodes;
00219
00220 foreach (XmlNode n in list)
00221 {
00222 XmlNode tmp;
00223
00224 if (n.LocalName.Equals("Values"))
00225 {
00226 tmp = n["Border"];
00227 Graph.Settings.Border = double.Parse(tmp.Attributes["value"].InnerText);
00228
00229 tmp = n["GridSize"];
00230 Graph.Settings.GridSize = int.Parse(tmp.Attributes["value"].InnerText);
00231
00232 tmp = n["KdeHistogramSize"];
00233 Graph.Settings.KdeHistogramSize = int.Parse(tmp.Attributes["value"].InnerText);
00234
00235 tmp = n["KdeRadius"];
00236 Graph.Settings.KdeRadius = double.Parse(tmp.Attributes["value"].InnerText);
00237
00238 tmp = n["KdeThreshold"];
00239 Graph.Settings.KdeThreshold = double.Parse(tmp.Attributes["value"].InnerText);
00240
00241 tmp = n["MergedSegmentsThreshold"];
00242 MergedSegment.threshold = double.Parse(tmp.Attributes["value"].InnerText);
00243
00244 }
00245 else if (n.LocalName.Equals("Visibility"))
00246 {
00247 tmp = n["ControlMeshEdges"];
00248 GraphDrawer.Settings.controlMeshEdgesVisible = bool.Parse(tmp.Attributes["value"].InnerText);
00249
00250 tmp = n["ControlMesh"];
00251 GraphDrawer.Settings.controlMeshVisible = bool.Parse(tmp.Attributes["value"].InnerText);
00252
00253 tmp = n["ControlPoints"];
00254 GraphDrawer.Settings.controlPointsVisible = bool.Parse(tmp.Attributes["value"].InnerText);
00255
00256 tmp = n["EnhancedGraph"];
00257 GraphDrawer.Settings.enhancedGraphVisible = bool.Parse(tmp.Attributes["value"].InnerText);
00258
00259 tmp = n["GraphEdges"];
00260 GraphDrawer.Settings.graphEdgesVisible = bool.Parse(tmp.Attributes["value"].InnerText);
00261
00262 tmp = n["KernelPeaks"];
00263 GraphDrawer.Settings.kernelPeaksVisible = bool.Parse(tmp.Attributes["value"].InnerText);
00264
00265 tmp = n["MergedSegments"];
00266 GraphDrawer.Settings.mergedSegmentsVisible = bool.Parse(tmp.Attributes["value"].InnerText);
00267
00268 tmp = n["Segments"];
00269 GraphDrawer.Settings.segmentsVisible = bool.Parse(tmp.Attributes["value"].InnerText);
00270 }
00271 else if (n.LocalName.Equals("Colors"))
00272 {
00273 tmp = n["ControlMesh"];
00274 GraphDrawer.Settings.ControlMeshColor = ParseColor(tmp.Attributes["value"].InnerText);
00275
00276 tmp = n["ControlMeshEdges"];
00277 GraphDrawer.Settings.ControlMeshEdgesColor = ParseColor(tmp.Attributes["value"].InnerText);
00278
00279 tmp = n["ControlPoints"];
00280 GraphDrawer.Settings.ControlPointsColor = ParseColor(tmp.Attributes["value"].InnerText);
00281
00282 tmp = n["EnhancedGraph"];
00283 GraphDrawer.Settings.EnhancedGraphColor = ParseColor(tmp.Attributes["value"].InnerText);
00284
00285 tmp = n["Graph"];
00286 GraphDrawer.Settings.GraphColor = ParseColor(tmp.Attributes["value"].InnerText);
00287
00288 tmp = n["KDEPeaks"];
00289 GraphDrawer.Settings.KDEPeakColor = ParseColor(tmp.Attributes["value"].InnerText);
00290
00291 tmp = n["MergedSegments"];
00292 GraphDrawer.Settings.MergedSegmentsColor = ParseColor(tmp.Attributes["value"].InnerText);
00293
00294 tmp = n["Segments"];
00295 GraphDrawer.Settings.SegmentsColor = ParseColor(tmp.Attributes["value"].InnerText);
00296 }
00297 }
00298 }
00299
00300
00301
00302
00303
00304
00305
00306 private static Color ParseColor(String hex)
00307 {
00308 byte a = byte.Parse(hex.Substring(1, 2), NumberStyles.HexNumber);
00309 byte r = byte.Parse(hex.Substring(3, 2), NumberStyles.HexNumber);
00310 byte g = byte.Parse(hex.Substring(5, 2), NumberStyles.HexNumber);
00311 byte b = byte.Parse(hex.Substring(7, 2), NumberStyles.HexNumber);
00312 return Color.FromArgb(a, r, g, b);
00313 }
00314 }
00315 }