/// <summary> /// Performs the actual layout algorithm. /// </summary> /// <param name="graph">The object containing the graph data</param> /// <param name="selectedNode">selected node</param> protected override void PerformLayout(GraphMapData graph, INode selectedNode) { BidirectionalGraph<string, WeightedEdge<string>> bGraph = GraphSharpUtility.GetBidirectionalGraph(graph); IDictionary<string, Vector> nodePositions = GraphSharpUtility.GetNodePositions(graph); IDictionary<string, Size> nodeSizes = GraphSharpUtility.GetNodeSizes(graph); DoubleTreeLayoutParameters doubleTreeLayoutParameters = new DoubleTreeLayoutParameters(); DoubleTreeLayoutAlgorithm<string, WeightedEdge<string>, BidirectionalGraph<string, WeightedEdge<string>>> doubleTreeLayoutAlgorithm = new DoubleTreeLayoutAlgorithm<string, WeightedEdge<string>, BidirectionalGraph<string, WeightedEdge<string>>>(bGraph, nodePositions, nodeSizes, doubleTreeLayoutParameters, selectedNode.ID); doubleTreeLayoutAlgorithm.Compute(); GraphSharpUtility.SetNodePositions(graph, doubleTreeLayoutAlgorithm.VertexPositions); }
/// <summary> /// Nodes frequently overlap edges. Pretty useless. /// </summary> /// <returns></returns> private IDictionary <string, Point> Create5() { DoubleTreeLayoutParameters params5; DoubleTreeLayoutAlgorithm <string, Edge <string>, BidirectionalGraph <string, Edge <string> > > algo5; params5 = new DoubleTreeLayoutParameters(); params5.Direction = LayoutDirection.LeftToRight; params5.LayerGap = MinimumStateDistance; params5.PrioritizedTreeSide = DoubleTreeSides.Side2; params5.VertexGap = MinimumStateDistance; algo5 = new DoubleTreeLayoutAlgorithm <string, Edge <string>, BidirectionalGraph <string, Edge <string> > >( graph, Create4(), vertexSizes, params5, vertexLabels[0]); algo5.Compute(); return(algo5.VertexPositions); }
public void DoubleTreeLayoutAlgorithm([NotNull] IBidirectionalGraph <string, Edge <string> > graph) { IDictionary <string, Size> verticesSizes = GetVerticesSizes(graph.Vertices); var parameters = new DoubleTreeLayoutParameters(); foreach (LayoutDirection direction in Enum.GetValues(typeof(LayoutDirection))) { parameters.Direction = direction; var algorithm = new DoubleTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >( graph, verticesSizes, graph.Vertices.First(), parameters); Assert.DoesNotThrow(algorithm.Compute); } }
public void Constructor() { var verticesPositions = new Dictionary <string, Point>(); var verticesSizes = new Dictionary <string, Size>(); const string vertex = "0"; var graph = new BidirectionalGraph <string, Edge <string> >(); graph.AddVertex(vertex); var algorithm = new DoubleTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesSizes, vertex); AssertAlgorithmProperties(algorithm, graph); algorithm = new DoubleTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesSizes, vertex); algorithm.IterationEnded += (sender, args) => { }; AssertAlgorithmProperties(algorithm, graph, expectedReportIterationEnd: true); algorithm = new DoubleTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesSizes, vertex); algorithm.ProgressChanged += (sender, args) => { }; AssertAlgorithmProperties(algorithm, graph, expectedReportProgress: true); algorithm = new DoubleTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesSizes, vertex); algorithm.IterationEnded += (sender, args) => { }; algorithm.ProgressChanged += (sender, args) => { }; AssertAlgorithmProperties(algorithm, graph, expectedReportIterationEnd: true, expectedReportProgress: true); algorithm = new DoubleTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null, verticesSizes, vertex); AssertAlgorithmProperties(algorithm, graph); algorithm = new DoubleTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesPositions, verticesSizes, vertex); AssertAlgorithmProperties(algorithm, graph, verticesPositions); var parameters = new DoubleTreeLayoutParameters(); algorithm = new DoubleTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesSizes, vertex, parameters); AssertAlgorithmProperties(algorithm, graph, parameters: parameters); algorithm = new DoubleTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesPositions, verticesSizes, vertex, parameters); AssertAlgorithmProperties(algorithm, graph, verticesPositions, parameters: parameters); algorithm = new DoubleTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null, verticesSizes, vertex, parameters); AssertAlgorithmProperties(algorithm, graph, parameters: parameters); }
public void StandardFactory() { var vertex = new TestVertex("10"); var positions = new Dictionary <TestVertex, Point>(); var sizes = new Dictionary <TestVertex, Size>(); var graph = new BidirectionalGraph <TestVertex, Edge <TestVertex> >(); graph.AddVertex(vertex); var context = new ContextualLayoutContext <TestVertex, Edge <TestVertex>, BidirectionalGraph <TestVertex, Edge <TestVertex> > >( graph, vertex, positions, sizes); var factory = new ContextualLayoutAlgorithmFactory <TestVertex, Edge <TestVertex>, BidirectionalGraph <TestVertex, Edge <TestVertex> > >(); CollectionAssert.AreEqual( new[] { "DoubleTree", "BalloonTree" }, factory.AlgorithmTypes); Assert.IsNull( factory.CreateAlgorithm( string.Empty, context, new DoubleTreeLayoutParameters())); Assert.IsNull( factory.CreateAlgorithm( "NotExist", context, new DoubleTreeLayoutParameters())); Assert.IsNull( factory.CreateAlgorithm( "doubletree", context, new DoubleTreeLayoutParameters())); Assert.IsInstanceOf <DoubleTreeLayoutAlgorithm <TestVertex, Edge <TestVertex>, BidirectionalGraph <TestVertex, Edge <TestVertex> > > >( factory.CreateAlgorithm( "DoubleTree", context, new DoubleTreeLayoutParameters())); Assert.IsInstanceOf <BalloonTreeLayoutAlgorithm <TestVertex, Edge <TestVertex>, BidirectionalGraph <TestVertex, Edge <TestVertex> > > >( factory.CreateAlgorithm( "BalloonTree", context, new BalloonTreeLayoutParameters())); var testParameters = new TestLayoutParameters(); var doubleTreeParameters = new DoubleTreeLayoutParameters(); ILayoutParameters createdParameters = factory.CreateParameters(string.Empty, doubleTreeParameters); Assert.IsNull(createdParameters); createdParameters = factory.CreateParameters("NotExist", doubleTreeParameters); Assert.IsNull(createdParameters); createdParameters = factory.CreateParameters("DoubleTree", null); Assert.IsInstanceOf <DoubleTreeLayoutParameters>(createdParameters); Assert.AreNotSame(doubleTreeParameters, createdParameters); createdParameters = factory.CreateParameters("DoubleTree", testParameters); Assert.IsInstanceOf <DoubleTreeLayoutParameters>(createdParameters); Assert.AreNotSame(testParameters, createdParameters); createdParameters = factory.CreateParameters("DoubleTree", doubleTreeParameters); Assert.IsInstanceOf <DoubleTreeLayoutParameters>(createdParameters); Assert.AreNotSame(doubleTreeParameters, createdParameters); var balloonTreeParameters = new BalloonTreeLayoutParameters(); createdParameters = factory.CreateParameters("BalloonTree", null); Assert.IsInstanceOf <BalloonTreeLayoutParameters>(createdParameters); Assert.AreNotSame(balloonTreeParameters, createdParameters); createdParameters = factory.CreateParameters("BalloonTree", testParameters); Assert.IsInstanceOf <BalloonTreeLayoutParameters>(createdParameters); Assert.AreNotSame(testParameters, createdParameters); createdParameters = factory.CreateParameters("BalloonTree", balloonTreeParameters); Assert.IsInstanceOf <BalloonTreeLayoutParameters>(createdParameters); Assert.AreNotSame(balloonTreeParameters, createdParameters); Assert.IsFalse(factory.IsValidAlgorithm(null)); Assert.IsFalse(factory.IsValidAlgorithm(string.Empty)); Assert.IsTrue(factory.IsValidAlgorithm("DoubleTree")); Assert.IsFalse(factory.IsValidAlgorithm("doubletree")); Assert.IsTrue(factory.IsValidAlgorithm("BalloonTree")); var algorithm1 = new TestLayoutAlgorithm(); Assert.IsEmpty(factory.GetAlgorithmType(algorithm1)); var algorithm2 = new DoubleTreeLayoutAlgorithm <TestVertex, Edge <TestVertex>, BidirectionalGraph <TestVertex, Edge <TestVertex> > >(graph, positions, sizes, vertex, doubleTreeParameters); Assert.AreEqual("DoubleTree", factory.GetAlgorithmType(algorithm2)); var algorithm3 = new BalloonTreeLayoutAlgorithm <TestVertex, Edge <TestVertex>, BidirectionalGraph <TestVertex, Edge <TestVertex> > >(graph, positions, vertex, balloonTreeParameters); Assert.AreEqual("BalloonTree", factory.GetAlgorithmType(algorithm3)); Assert.IsFalse(factory.NeedEdgeRouting(string.Empty)); Assert.IsTrue(factory.NeedEdgeRouting("DoubleTree")); Assert.IsTrue(factory.NeedEdgeRouting("BalloonTree")); Assert.IsFalse(factory.NeedOverlapRemoval(string.Empty)); Assert.IsFalse(factory.NeedOverlapRemoval("DoubleTree")); Assert.IsFalse(factory.NeedOverlapRemoval("BalloonTree")); }
/// <summary> /// Performs the actual layout algorithm. /// </summary> /// <param name="graph">The object containing the graph data</param> /// <param name="selectedNode">selected node</param> protected override void PerformLayout(GraphMapData graph, INode selectedNode) { BidirectionalGraph <string, WeightedEdge <string> > bGraph = GraphSharpUtility.GetBidirectionalGraph(graph); IDictionary <string, Vector> nodePositions = GraphSharpUtility.GetNodePositions(graph); IDictionary <string, Size> nodeSizes = GraphSharpUtility.GetNodeSizes(graph); DoubleTreeLayoutParameters doubleTreeLayoutParameters = new DoubleTreeLayoutParameters(); DoubleTreeLayoutAlgorithm <string, WeightedEdge <string>, BidirectionalGraph <string, WeightedEdge <string> > > doubleTreeLayoutAlgorithm = new DoubleTreeLayoutAlgorithm <string, WeightedEdge <string>, BidirectionalGraph <string, WeightedEdge <string> > >(bGraph, nodePositions, nodeSizes, doubleTreeLayoutParameters, selectedNode.ID); doubleTreeLayoutAlgorithm.Compute(); GraphSharpUtility.SetNodePositions(graph, doubleTreeLayoutAlgorithm.VertexPositions); }