public void InvalidParameters()
        {
            var parameters = new BalloonTreeLayoutParameters();

            Assert.Throws <ArgumentOutOfRangeException>(() => parameters.MinRadius = -1);
            Assert.Throws <ArgumentOutOfRangeException>(() => parameters.Border    = -1);
        }
        public void ParameterRaise()
        {
            string expectedPropertyName = null;

            var parameters = new BalloonTreeLayoutParameters();

            parameters.PropertyChanged += (sender, args) =>
            {
                // ReSharper disable AccessToModifiedClosure
                if (expectedPropertyName is null)
                {
                    Assert.Fail("Must not raise.");
                }
                else
                {
                    Assert.AreEqual(expectedPropertyName, args.PropertyName);
                }
                // ReSharper restore AccessToModifiedClosure
            };

            parameters.MinRadius = 2;

            expectedPropertyName = nameof(BalloonTreeLayoutParameters.MinRadius);
            parameters.MinRadius = 4;

            expectedPropertyName = null;
            parameters.Border    = 20;

            expectedPropertyName = nameof(BalloonTreeLayoutParameters.Border);
            parameters.Border    = 42;
        }
        public void BalloonTreeLayoutAlgorithm([NotNull] IBidirectionalGraph <string, Edge <string> > graph)
        {
            var parameters = new BalloonTreeLayoutParameters();

            var algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(
                graph,
                graph.Vertices.First(),
                parameters);

            Assert.DoesNotThrow(algorithm.Compute);
        }
Esempio n. 4
0
        /// <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);
            BalloonTreeLayoutParameters  balloonTreeLayoutParameters = new BalloonTreeLayoutParameters();

            BalloonTreeLayoutAlgorithm <string, WeightedEdge <string>, BidirectionalGraph <string, WeightedEdge <string> > > balloonTreeLayoutAlgorithm = new BalloonTreeLayoutAlgorithm <string, WeightedEdge <string>, BidirectionalGraph <string, WeightedEdge <string> > >(bGraph, nodePositions, nodeSizes, balloonTreeLayoutParameters, selectedNode.ID);

            balloonTreeLayoutAlgorithm.Compute();

            GraphSharpUtility.SetNodePositions(graph, balloonTreeLayoutAlgorithm.VertexPositions);
        }
Esempio n. 5
0
        /// <summary>
        /// Crazy distances between nodes, and yet often nodes overlap the edges and edges intersect each other...
        /// </summary>
        /// <returns></returns>
        private IDictionary <string, Point> Create3()
        {
            var params3 = new BalloonTreeLayoutParameters();

            params3.MinRadius = (int)MinimumStateDistance;
            params3.Border    = (int)MinimumStateDistance;
            var algo3 = new BalloonTreeLayoutAlgorithm <string, Edge <string>, BidirectionalGraph <string, Edge <string> > >(
                graph, vertexPositions, vertexSizes, params3, vertexLabels[0]);

            algo3.Compute();

            return(algo3.VertexPositions);
        }
        public void Clone()
        {
            var parameters       = new BalloonTreeLayoutParameters();
            var clonedParameters = (BalloonTreeLayoutParameters)parameters.Clone();

            Assert.AreEqual(parameters, clonedParameters);

            parameters           = new BalloonTreeLayoutParameters();
            parameters.MinRadius = 10;
            parameters.Border    = 50;
            clonedParameters     = (BalloonTreeLayoutParameters)parameters.Clone();

            Assert.AreEqual(parameters, clonedParameters);
        }
        public void Constructor()
        {
            var          verticesPositions = new Dictionary <string, Point>();
            const string vertex            = "0";
            var          graph             = new BidirectionalGraph <string, Edge <string> >();

            graph.AddVertex(vertex);
            var algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, vertex);

            AssertAlgorithmProperties(algorithm, graph);

            algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, vertex);
            algorithm.IterationEnded += (sender, args) => { };
            AssertAlgorithmProperties(algorithm, graph, expectedReportIterationEnd: true);

            algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, vertex);
            algorithm.ProgressChanged += (sender, args) => { };
            AssertAlgorithmProperties(algorithm, graph, expectedReportProgress: true);

            algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, vertex);
            algorithm.IterationEnded  += (sender, args) => { };
            algorithm.ProgressChanged += (sender, args) => { };
            AssertAlgorithmProperties(algorithm, graph, expectedReportIterationEnd: true, expectedReportProgress: true);

            algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null, vertex);
            AssertAlgorithmProperties(algorithm, graph);

            algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesPositions, vertex);
            AssertAlgorithmProperties(algorithm, graph, verticesPositions);

            var parameters = new BalloonTreeLayoutParameters();

            algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, vertex, parameters);
            AssertAlgorithmProperties(algorithm, graph, parameters: parameters);

            algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesPositions, vertex, parameters);
            AssertAlgorithmProperties(algorithm, graph, verticesPositions, 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"));
        }
        public void Constructor_Throws()
        {
            var          verticesPositions = new Dictionary <string, Point>();
            var          emptyGraph        = new BidirectionalGraph <string, Edge <string> >();
            const string vertex            = "0";
            const string notInGraphVertex  = "10";
            var          graph             = new BidirectionalGraph <string, Edge <string> >();

            graph.AddVertex(vertex);
            var parameters = new BalloonTreeLayoutParameters();

            // ReSharper disable ObjectCreationAsStatement
            // ReSharper disable AssignNullToNotNullAttribute
            Assert.Throws <ArgumentException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(emptyGraph, vertex));
            Assert.Throws <ArgumentException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(emptyGraph, null, vertex));
            Assert.Throws <ArgumentException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, notInGraphVertex));
            Assert.Throws <ArgumentException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null, notInGraphVertex));

            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null));
            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, vertex));
            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, null));

            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null, parameters));
            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, vertex, parameters));
            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, null, parameters));


            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null, (string)null));
            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, null, vertex));
            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, null, (string)null));

            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesPositions, null));
            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, verticesPositions, vertex));
            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, verticesPositions, null));

            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null, null, parameters));
            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, null, vertex, parameters));
            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, null, null, parameters));

            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesPositions, null, parameters));
            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, verticesPositions, vertex, parameters));
            Assert.Throws <ArgumentNullException>(
                () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, verticesPositions, null, parameters));
            // ReSharper restore AssignNullToNotNullAttribute
            // ReSharper restore ObjectCreationAsStatement
        }