This build adds following method to Diagram class to make duplicate cleanup easier:
https://www.nuget.org/packages/MindFusion.Diagramming/7.2.1-beta4 [EditorBrowsable(EditorBrowsableState.Never)]
public void RemoveDuplicateItems()
{
zOrder.RemoveDuplicates();
nodes.RemoveDuplicates();
links.RemoveDuplicates();
groups.RemoveDuplicates();
}
Our test code is:
diagram.ClearAll();
List<ShapeNode> nodes = new List<ShapeNode>();
for (int i = 0; i < 100; i++)
nodes.Add(diagram.Factory.CreateShapeNode(i, i, 10, 10));
List<DiagramLink> links = new List<DiagramLink>();
for (int i = 0; i < 10; i++)
links.Add(diagram.Factory.CreateDiagramLink(nodes[i], nodes[i + 1]));
// Add duplicates at random indices
diagram.ValidityChecks = false;
Random rnd = new Random();
for (int i = 0; i < 10; i++)
{
int nodeIdx = rnd.Next(nodes.Count);
int insertIdx = rnd.Next(diagram.Nodes.Count);
diagram.Nodes.Insert(insertIdx, nodes[nodeIdx]);
}
for (int i = 0; i < 5; i++)
{
int linkIdx = rnd.Next(links.Count);
int insertIdx = rnd.Next(diagram.Links.Count);
diagram.Links.Insert(insertIdx, links[linkIdx]);
}
int nodeCountWithDuplicates = diagram.Nodes.Count;
int linkCountWithDuplicates = diagram.Links.Count;
diagram.RemoveDuplicateItems();
int nodeCountAfterRepair = diagram.Nodes.Count;
int linkCountAfterRepair = diagram.Links.Count;
// This would crash without RemoveDuplicateItems call above
diagram.SaveToJson("test.json");
diagram.LoadFromJson("test.json");
Note that there are some JSON API changes for upcoming release, to make it more consistent with XML API:
SaveToJson -> SaveToString(SaveToStringFormat.Json);
LoadFromJson -> LoadFromString
SaveToJsonFile -> SaveToJson(filePath)
LoadFromJsonFile -> LoadFromJson(filePath)
Regards,
Slavcho
Mindfusion