Доброго времени суток !
У меня есть проект,который хранит точки графа в неопределенный бинарный формат .db ,прикапывать можно в папке.
Также есть процедура по восстановлению из этого файла в проект ( для редактирования )
Помогите,пожалуйста,сохранять точки на графе не бинарный формат,а в XML с возможностью восстановления.
[MainWindow.cs]
Восстановление из файла
[MainWindow.cs]
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
private void previewButton_Click(object sender, RoutedEventArgs e)
{
var senderButton = sender as Button;
if (senderButton == null)
return;
try
{
using (var files = new FileStream(senderButton.Tag.ToString(), FileMode.Open, FileAccess.ReadWrite))
{
decoder = (Decoder) new BinaryFormatter().Deserialize(files);
}
//clear all
grid_main_window.Children.RemoveRange(1, grid_main_window.Children.Count);
graph = new Graph();
NodesComboBox.Items.Clear();
//восстановление вершин
for (int opi = 0; opi < decoder.NodesCount; opi++)
{
graph.AddNode(decoder.NodeCoordinates[opi]);
grid_main_window.Children.Add(graph.Nodes.Last().View.Circle);
NodesComboBox.Items.Add(graph.Nodes.Last().View.Circle.Name);
}
NodesComboBox.SelectedIndex = 0;
//восстановление ребер
for (int opi = 0; opi < decoder.EdgesCount; opi++)
{
graph.SourceNode = graph.Nodes[decoder.SourceNodeIdentifiers[opi]];
graph.TargetNode = graph.Nodes[decoder.TargetNodeIdentifiers[opi]];
graph.AddEdge();
var lastEdge = graph.Edges.Last();
grid_main_window.Children.Add(lastEdge.View.Line);
MessageBox.Show(lastEdge.View.Line.ToString());
Panel.SetZIndex(lastEdge.View.Line, -1);
graph.enable_conect = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
private void Take_Click(object sender, RoutedEventArgs e)
{
decoder = new Decoder
{
NodesCount = graph.Nodes.Count,
EdgesCount = graph.Edges.Count
};
decoder.Initialize();
decoder.NodeCoordinates = graph.Nodes.Select(node => node.View.Center).ToArray();
decoder.SourceNodeIdentifiers = graph.Edges.Select(edge => edge.Source.Id).ToArray();
decoder.TargetNodeIdentifiers = graph.Edges.Select(edge => edge.Target.Id).ToArray();
var saveBinaryDialog = new SaveFileDialog
{
DefaultExt = ".db",
FileName = "Your_path",
Filter = "Your_path (*.db)|*.db",
InitialDirectory = @"C:\Path",
};
if (saveBinaryDialog.ShowDialog().Value)
{
using (var stream = new FileStream(Path.GetFullPath(saveBinaryDialog.FileName), FileMode.Create, FileAccess.Write))
{
new BinaryFormatter().Serialize(stream, decoder);
}
}
[Decoder.cs]
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
[Serializable]
class Decoder
{
/// <summary>
/// Колличество вершин графа.
/// </summary>
public Int32 NodesCount = 0;
/// <summary>
/// Колличество рёбер графа.
/// </summary>
public Int32 EdgesCount = 0;
/// <summary>
/// Массив координат вершин.
/// </summary>
public Point[] NodeCoordinates;
public Int32[] SourceNodeIdentifiers;
public Int32[] TargetNodeIdentifiers;
/// <summary>
/// динамическое выделение памяти под хранение графа в файл
/// </summary>
public void Initialize()
{
NodeCoordinates = new Point[NodesCount];
SourceNodeIdentifiers = new Int32[EdgesCount];
TargetNodeIdentifiers = new Int32[EdgesCount];
}
}
}