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

            Assert.Throws <ArgumentOutOfRangeException>(() => parameters.VertexGap = -1);
            Assert.Throws <ArgumentOutOfRangeException>(() => parameters.LayerGap  = -1);
        }
Esempio n. 2
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);
            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);
        }
        public void Clone()
        {
            var parameters       = new DoubleTreeLayoutParameters();
            var clonedParameters = (DoubleTreeLayoutParameters)parameters.Clone();

            Assert.AreEqual(parameters, clonedParameters);

            parameters           = new DoubleTreeLayoutParameters();
            parameters.Direction = LayoutDirection.LeftToRight;
            parameters.VertexGap = 50;
            parameters.LayerGap  = 50;
            clonedParameters     = (DoubleTreeLayoutParameters)parameters.Clone();

            Assert.AreEqual(parameters, clonedParameters);
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 6
0
        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 ParameterRaise()
        {
            string expectedPropertyName = null;

            var parameters = new DoubleTreeLayoutParameters();

            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.Direction = LayoutDirection.LeftToRight;

            expectedPropertyName = nameof(DoubleTreeLayoutParameters.Direction);
            parameters.Direction = LayoutDirection.BottomToTop;

            expectedPropertyName = null;
            parameters.VertexGap = 10;

            expectedPropertyName = nameof(DoubleTreeLayoutParameters.VertexGap);
            parameters.VertexGap = 42;

            expectedPropertyName = null;
            parameters.LayerGap  = 10;

            expectedPropertyName = nameof(DoubleTreeLayoutParameters.LayerGap);
            parameters.LayerGap  = 42;
        }
        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"));
        }
Esempio n. 9
0
        public void Constructor_Throws()
        {
            var          verticesPositions = new Dictionary <string, Point>();
            var          verticesSizes     = new Dictionary <string, Size>();
            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 DoubleTreeLayoutParameters();

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

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

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


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

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


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

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