Ejemplo n.º 1
0
        public void Calculate_WithChildrenArea_Works()
        {
            var model = _modelBuilder
                        .AddNodes("A", "B")
                        .AddRelationships("A->B")
                        .AddChildNodes("B", "C", "D")
                        .AddRelationships("C->D")
                        .Model;

            var diagramBuilder = new DiagramBuilder(model)
                                 .AddNodes(("A", 1, 1), ("B", 2, 2))
                                 .AddChildNodes("B", ("C", 3, 3), ("D", 4, 4))
                                 .AddAllRelationships();

            var rootLayoutInfo  = SetUpRootLayoutInfo(diagramBuilder, ("A", 0, 0), ("B", 1, 1));
            var nodeBLayoutInfo = SetUpNodeLayoutInfo(diagramBuilder, "B", ("C", 0, 0), ("D", 1, 1));

            var diagramLayoutInfo = CreateLayoutAlgorithm().Calculate(diagramBuilder.Diagram);

            diagramLayoutInfo.RootNodes.Should().BeEquivalentTo(rootLayoutInfo.Nodes);

            var nodeBResult = diagramLayoutInfo.RootNodes.First(i => i.Node.Name == "B");

            nodeBResult.ChildrenArea.Nodes.Should().BeEquivalentTo(nodeBLayoutInfo.Nodes);

            // C+D rect should be: from C.TopLeft(0,0) to D.TopLeft(1,1) + D.PayloadAreaSize(4,4)
            nodeBResult.ChildrenArea.Rect.Should().Be(new Rect2D(0, 0, 5, 5));

            // B rect should be B.TopLeft(1,1) + B.Size(5,7) which comes from stacking B.PayloadAreaSize(2,2) and B.ChildrenAreaSize(5,5)
            nodeBResult.Rect.Should().Be(new Rect2D(1, 1, 6, 8));
        }
        public void PathExists_WorksInRootLayoutGroup()
        {
            var model = _modelBuilder.AddNodes("A", "B").AddRelationships("A->B").Model;
            var node1 = _modelBuilder.GetNode("A");
            var node2 = _modelBuilder.GetNode("B");

            var diagram = new DiagramBuilder(model).AddAllModelItems().GetDiagram();

            diagram.PathExists(node1.Id, node2.Id).Should().BeTrue();
            diagram.PathExists(node2.Id, node1.Id).Should().BeFalse();
        }
        public void Calculate_RootNodesOnly_Works()
        {
            var model = _modelBuilder
                        .AddNodes("A", "B")
                        .AddRelationships("A->B")
                        .Model;

            var diagramBuilder = new DiagramBuilder(model)
                                 .AddNodes(("A", payloadAreaSize: (1, 1)), ("B", payloadAreaSize: (2, 2)))
                                 .AddAllModelRelationships();

            SetUpRootLayoutInfo(
                diagramBuilder,
                new[] { ("A", topLeft: new Point2D(0, 0)), ("B", topLeft: (1, 1)) },
        public void Create_ConnectorInRootLayoutGroup_Works()
        {
            var model = _modelBuilder
                        .AddNodes("A", "B")
                        .AddRelationships("A->B")
                        .Model;
            var relationship = _modelBuilder.GetRelationship("A->B");

            var diagramBuilder = new DiagramBuilder(model).AddAllModelNodes().AddAllModelRelationships();

            var layoutStructure = new DiagramLayoutStructure(diagramBuilder.GetDiagram());

            layoutStructure.RootLayoutGroup.Connectors.ShouldBeEquivalentById(relationship.Id);
            layoutStructure.CrossLayoutGroupConnectors.Should().BeEmpty();
        }
        public void PathExists_WorksInNestedLayoutGroup()
        {
            var model = _modelBuilder
                        .AddNodes("parent")
                        .AddChildNodes("parent", "child1", "child2")
                        .AddRelationships("child1->child2")
                        .Model;

            var childNode1 = _modelBuilder.GetNode("child1");
            var childNode2 = _modelBuilder.GetNode("child2");

            var diagram = new DiagramBuilder(model).AddAllModelItems().GetDiagram();

            diagram.PathExists(childNode1.Id, childNode2.Id).Should().BeTrue();
            diagram.PathExists(childNode2.Id, childNode1.Id).Should().BeFalse();
        }
        public void Create_OnlyNodes_Works()
        {
            var model = _modelBuilder
                        .AddNodes("parent")
                        .AddChildNodes("parent", "child")
                        .Model;
            var parentNode = _modelBuilder.GetNode("parent");
            var childNode  = _modelBuilder.GetNode("child");

            var diagramBuilder = new DiagramBuilder(model).AddAllModelNodes();

            var layoutStructure = new DiagramLayoutStructure(diagramBuilder.GetDiagram());

            layoutStructure.RootLayoutGroup.Nodes.ShouldBeEquivalentById(parentNode.Id);
            layoutStructure.TryGetLayoutGroupByNodeId(parentNode.Id).Value.Nodes.ShouldBeEquivalentById(childNode.Id);
        }
        public double AddMultiConduitPassThroughBlock(DiagramBuilder builder, double minWith, double offsetY, int nTerminals)
        {
            //////////////////////////////////////////////////////////
            /// label block
            ///
            LineBlock conduitBlock = new LineBlock(30, offsetY, LineBlockTypeEnum.Simple);

            conduitBlock.MinWidth = minWith;

            // Add vest ports
            AddMultiConduitPort(conduitBlock, BlockSideEnum.Vest, nTerminals, "Orange", -1, -1, 10);

            // Add east ports
            AddMultiConduitPort(conduitBlock, BlockSideEnum.East, nTerminals, "Orange", -1, -1, 10);

            // Connect ports
            conduitBlock.AddPortConnection(BlockSideEnum.Vest, 1, BlockSideEnum.East, 1, null, "MultiConduitOrange");

            // Connect west and east terminals
            for (int i = 0; i < nTerminals; i++)
            {
                conduitBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, i + 1, BlockSideEnum.East, 1, i + 1, null, "InnerConduit" + MockupHelper.GetColorStringFromConduitNumber(i + 1), LineShapeTypeEnum.Polygon);
            }

            conduitBlock.Measure(new Layout.Size());
            builder.ContentObjects.Add(conduitBlock);

            //////////////////////////////////////////////////////////
            /// label block

            LineBlock labelBlock = new LineBlock(0, offsetY, LineBlockTypeEnum.Simple);

            labelBlock.MinWidth = 30;

            // Add vest port
            AddBigConduitPort(labelBlock, BlockSideEnum.Vest, nTerminals, null, -1, -1, 10);

            // Add east port
            AddBigConduitPort(labelBlock, BlockSideEnum.East, nTerminals, null, -1, -1, 10);

            labelBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 1, BlockSideEnum.East, 1, 1, "PF-4200", "LabelMediumText");

            labelBlock.Measure(new Layout.Size());
            builder.ContentObjects.Add(labelBlock);

            return(conduitBlock.DesiredSize.Height);
        }
Ejemplo n.º 8
0
        public void Calculate_RootNodesOnly_Works()
        {
            var model = _modelBuilder
                        .AddNodes("A", "B")
                        .AddRelationships("A->B")
                        .Model;

            var diagramBuilder = new DiagramBuilder(model)
                                 .AddNodes(("A", 1, 1), ("B", 2, 2))
                                 .AddAllRelationships();

            var rootLayoutInfo = SetUpRootLayoutInfo(diagramBuilder, ("A", 0, 0), ("B", 1, 1));

            var diagramLayoutInfo = CreateLayoutAlgorithm().Calculate(diagramBuilder.Diagram);

            diagramLayoutInfo.RootNodes.Should().BeEquivalentTo(rootLayoutInfo.Nodes);
        }
        public void Create_ConnectorInNestedLayoutGroup_Works()
        {
            var model = _modelBuilder
                        .AddNodes("parent")
                        .AddChildNodes("parent", "child1", "child2")
                        .AddRelationships("child1->child2")
                        .Model;
            var parentNode   = _modelBuilder.GetNode("parent");
            var relationship = _modelBuilder.GetRelationship("child1->child2");

            var diagramBuilder = new DiagramBuilder(model).AddAllModelNodes().AddAllModelRelationships();

            var layoutStructure = new DiagramLayoutStructure(diagramBuilder.GetDiagram());

            layoutStructure.RootLayoutGroup.Connectors.Should().BeEmpty();
            layoutStructure.CrossLayoutGroupConnectors.Should().BeEmpty();
            layoutStructure.TryGetLayoutGroupByNodeId(parentNode.Id).Value.Connectors.ShouldBeEquivalentById(relationship.Id);
        }
        public double AddCablePassThroughBlock(DiagramBuilder builder, double offsetY, double minWith)
        {
            //////////////////////////////////////////////////////////
            /// label block
            ///
            LineBlock cableBlock = new LineBlock(30, offsetY, LineBlockTypeEnum.Simple);

            cableBlock.MinWidth = minWith;

            // Add vest ports
            AddBigConduitPort(cableBlock, BlockSideEnum.Vest, 2, null, 20);

            // Add east ports
            AddBigConduitPort(cableBlock, BlockSideEnum.East, 2, null, 20);

            // Connect west and east terminals
            cableBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 1, BlockSideEnum.East, 1, 1, "72", "CableOutsideWell");
            cableBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 2, BlockSideEnum.East, 1, 2, "72", "CableOutsideWell");

            cableBlock.Measure(new Layout.Size());
            builder.ContentObjects.Add(cableBlock);

            //////////////////////////////////////////////////////////
            /// label block

            LineBlock labelBlock = new LineBlock(0, offsetY, LineBlockTypeEnum.Simple);

            labelBlock.MinWidth = 30;

            // Add vest port
            AddBigConduitPort(labelBlock, BlockSideEnum.Vest, 2);

            // Add east port
            AddBigConduitPort(labelBlock, BlockSideEnum.East, 2);

            labelBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 1, BlockSideEnum.East, 1, 1, "FP-0101", "CableOutsideWell");
            labelBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 1, BlockSideEnum.East, 1, 1, "FP-0101", "CableOutsideWell");

            labelBlock.Measure(new Layout.Size());
            builder.ContentObjects.Add(labelBlock);

            return(cableBlock.DesiredSize.Height);
        }
        public void PathExists_WorksBetweenLayoutGroups()
        {
            var model = _modelBuilder
                        .AddNodes("parent1", "parent2")
                        .AddChildNodes("parent1", "child1")
                        .AddChildNodes("parent1", "child2")
                        .AddRelationships("child1->child2")
                        .Model;

            var parentNode1 = _modelBuilder.GetNode("parent1");
            var parentNode2 = _modelBuilder.GetNode("parent2");
            var childNode1  = _modelBuilder.GetNode("child1");
            var childNode2  = _modelBuilder.GetNode("child2");

            var diagram = new DiagramBuilder(model).AddAllModelItems().GetDiagram();

            diagram.PathExists(childNode1.Id, childNode2.Id, ModelRelationshipStereotype.Default).Should().BeTrue();
            diagram.PathExists(childNode2.Id, childNode1.Id, ModelRelationshipStereotype.Default).Should().BeFalse();
            diagram.PathExists(parentNode1.Id, parentNode2.Id, ModelRelationshipStereotype.Default).Should().BeFalse();
        }
        public Diagram Build()
        {
            DiagramBuilder builder = new DiagramBuilder();

            double offsetY = 0;

            offsetY += AddCablePassThroughBlock(builder, offsetY, 300);

            AddMultiConduitPassThroughBlock(builder, 300, offsetY, 10);

            Diagram diagram = builder.CreateDiagram();

            return(diagram);


            LineBlock junctionBlock = new LineBlock(30, 0);

            junctionBlock.MinWidth = 300;

            // Add first vest port with 5 terminal
            AddMultiConduitPort(junctionBlock, BlockSideEnum.Vest, 10, "Orange");

            // Add second vest port with 7 terminal
            AddMultiConduitPort(junctionBlock, BlockSideEnum.Vest, 7, "Orange");


            // Add fist east port with 10 terminal
            AddMultiConduitPort(junctionBlock, BlockSideEnum.East, 10, "Orange");

            // Add second east port with 7 terminal
            AddMultiConduitPort(junctionBlock, BlockSideEnum.East, 7, "Orange");


            // Add north big conduit port 1 with 3 terminal
            AddBigConduitPort(junctionBlock, BlockSideEnum.North, 3, "Red");

            // Add north big conduit port 2 with 5 terminal
            AddBigConduitPort(junctionBlock, BlockSideEnum.North, 5, "Red");

            junctionBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 1, BlockSideEnum.East, 1, 1, null, "InnerConduitBlue", LineShapeTypeEnum.Polygon);

            junctionBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 2, BlockSideEnum.North, 1, 1, null, "InnerConduitBlue", LineShapeTypeEnum.Polygon);

            /*
             *
             * // Feeder calbe from central office
             * junctionBlock.AddConnection(BlockSideEnum.Vest, 2, 5, BlockSideEnum.North, 1, 1, "192", "CableInsideWell");
             *
             * // Transit feeder cable to other flex points
             * junctionBlock.AddConnection(BlockSideEnum.Vest, 1, 4, BlockSideEnum.North, 1, 2, "96", "CableInsideWell");
             * junctionBlock.AddConnection(BlockSideEnum.East, 1, 10, BlockSideEnum.North, 1, 3, "96", "CableInsideWell");
             *
             * // Sp connections
             * junctionBlock.AddConnection(BlockSideEnum.East, 1, 1, BlockSideEnum.North, 2, 2, "24", "CableInsideWell");
             * junctionBlock.AddConnection(BlockSideEnum.East, 1, 2, BlockSideEnum.North, 2, 3, "48", "CableInsideWell");
             * junctionBlock.AddConnection(BlockSideEnum.East, 1, 3, BlockSideEnum.North, 2, 4, "48", "CableInsideWell");
             * junctionBlock.AddConnection(BlockSideEnum.East, 1, 4, BlockSideEnum.North, 2, 5, "48", "CableInsideWell");
             * junctionBlock.AddConnection(BlockSideEnum.Vest, 2, 2, BlockSideEnum.North, 2, 1, "48", "CableInsideWell");
             *
             */

            builder.ContentObjects.Add(junctionBlock);
            junctionBlock.Measure(new Layout.Size());

            //////////////////////////////////////////////////////////
            /// well north label block

            LineBlock wellNorthLabelBlock = new LineBlock(30, junctionBlock.DesiredSize.Height, LineBlockTypeEnum.Simple);

            wellNorthLabelBlock.MinHeight = 30;

            // Add north port with 3 terminal
            AddBigConduitPort(wellNorthLabelBlock, BlockSideEnum.North, 3);

            // Add north port with 5 terminal
            AddBigConduitPort(wellNorthLabelBlock, BlockSideEnum.North, 5);

            // Add south port with 3 terminal
            AddBigConduitPort(wellNorthLabelBlock, BlockSideEnum.South, 3);

            // Add south port with 5 terminal
            AddBigConduitPort(wellNorthLabelBlock, BlockSideEnum.South, 5);

            wellNorthLabelBlock.AddTerminalConnection(BlockSideEnum.North, 1, 1, BlockSideEnum.South, 1, 1, "GSS 1 (1-16)", "CableOutsideWell");
            wellNorthLabelBlock.AddTerminalConnection(BlockSideEnum.North, 1, 2, BlockSideEnum.South, 1, 2, "GSS 1 (1-8)", "CableOutsideWell");
            wellNorthLabelBlock.AddTerminalConnection(BlockSideEnum.North, 1, 3, BlockSideEnum.South, 1, 3, "GSS 1 (9-16)", "CableOutsideWell");

            wellNorthLabelBlock.AddTerminalConnection(BlockSideEnum.North, 2, 1, BlockSideEnum.South, 2, 1, "GPS 1", "CableOutsideWell");
            wellNorthLabelBlock.AddTerminalConnection(BlockSideEnum.North, 2, 2, BlockSideEnum.South, 2, 2, "GPS 1", "CableOutsideWell");
            wellNorthLabelBlock.AddTerminalConnection(BlockSideEnum.North, 2, 3, BlockSideEnum.South, 2, 3, "GPS 2", "CableOutsideWell");
            wellNorthLabelBlock.AddTerminalConnection(BlockSideEnum.North, 2, 4, BlockSideEnum.South, 2, 4, "GPS 2", "CableOutsideWell");
            wellNorthLabelBlock.AddTerminalConnection(BlockSideEnum.North, 2, 5, BlockSideEnum.South, 2, 5, "GPS 2 & 3", "CableOutsideWell");


            builder.ContentObjects.Add(wellNorthLabelBlock);
            wellNorthLabelBlock.Measure(new Layout.Size());

            //////////////////////////////////////////////////////////
            /// well vest label block

            LineBlock wellVestLabelBlock = new LineBlock(0, 0, LineBlockTypeEnum.Simple);

            wellVestLabelBlock.MinWidth = 30;

            // Add vest port with 5 terminal
            AddBigConduitPort(wellVestLabelBlock, BlockSideEnum.Vest, 5);

            // Add vest port with 7 terminal
            AddBigConduitPort(wellVestLabelBlock, BlockSideEnum.Vest, 7);

            // Add east port with 5 terminal
            AddBigConduitPort(wellVestLabelBlock, BlockSideEnum.East, 5);

            // Add east port with 7 terminal
            AddBigConduitPort(wellVestLabelBlock, BlockSideEnum.East, 7);

            wellVestLabelBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 4, BlockSideEnum.East, 1, 4, "PF-4200", "CableOutsideWell");
            wellVestLabelBlock.AddTerminalConnection(BlockSideEnum.Vest, 2, 2, BlockSideEnum.East, 2, 2, "SP-5420", "CableOutsideWell");
            wellVestLabelBlock.AddTerminalConnection(BlockSideEnum.Vest, 2, 5, BlockSideEnum.East, 2, 5, "CO-1010", "CableOutsideWell");

            wellVestLabelBlock.Measure(new Layout.Size());
            builder.ContentObjects.Add(wellVestLabelBlock);

            //////////////////////////////////////////////////////////
            /// east label block

            LineBlock wellEastLabelBlock = new LineBlock(junctionBlock.DesiredSize.Width + 30, 0, LineBlockTypeEnum.Simple);

            wellEastLabelBlock.MinWidth  = 30;
            wellEastLabelBlock.MinHeight = junctionBlock.DesiredSize.Height;

            // Add vest port with 10 terminal
            AddBigConduitPort(wellEastLabelBlock, BlockSideEnum.Vest, 10);

            // Add east port with 10 terminal
            AddBigConduitPort(wellEastLabelBlock, BlockSideEnum.East, 10);

            wellEastLabelBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 1, BlockSideEnum.East, 1, 1, "SP-5010", "CableOutsideWell");
            wellEastLabelBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 2, BlockSideEnum.East, 1, 2, "SP-5011", "CableOutsideWell");
            wellEastLabelBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 3, BlockSideEnum.East, 1, 3, "SP-5013", "CableOutsideWell");
            wellEastLabelBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 4, BlockSideEnum.East, 1, 4, "SP-6002", "CableOutsideWell");
            wellEastLabelBlock.AddTerminalConnection(BlockSideEnum.Vest, 1, 10, BlockSideEnum.East, 1, 10, "FP-4203", "CableOutsideWell");

            wellEastLabelBlock.Measure(new Layout.Size());
            builder.ContentObjects.Add(wellEastLabelBlock);



            //////////////////////////////////////////////////////////
            /// well north corner 1

            LineBlock wellNorthCorner1 = new LineBlock(30, junctionBlock.DesiredSize.Height + wellNorthLabelBlock.DesiredSize.Height, LineBlockTypeEnum.Simple);

            wellNorthCorner1.MinHeight = 20;

            // Add south port with 3 terminal
            AddBigConduitPort(wellNorthCorner1, BlockSideEnum.South, 3);

            // Add east port with 3 terminal
            AddBigConduitPort(wellNorthCorner1, BlockSideEnum.East, 3, null, 1, 1);

            wellNorthCorner1.AddTerminalConnection(BlockSideEnum.South, 1, 1, BlockSideEnum.East, 1, 1, "", "CableOutsideWell");
            wellNorthCorner1.AddTerminalConnection(BlockSideEnum.South, 1, 2, BlockSideEnum.East, 1, 2, "", "CableOutsideWell");
            wellNorthCorner1.AddTerminalConnection(BlockSideEnum.South, 1, 3, BlockSideEnum.East, 1, 3, "", "CableOutsideWell");

            // Set margin on east side to 0
            wellNorthCorner1.SetSideMargin(BlockSideEnum.East, 0);

            //builder.ContentObjects.Add(wellNorthCorner1);

            Diagram sdiagram = builder.CreateDiagram();

            return(diagram);
        }
Ejemplo n.º 13
0
    public static Diagram Load(string file_name)
    {
        DiagramBuilder db = new DiagramBuilder();

        try
        {
            return db.Build(file_name);
        }
        catch
        {
            Console.WriteLine("Could not parse {0} as diagram definition", file_name);
        }

        return null;
    }
Ejemplo n.º 14
0
        private void Logon_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (IntSpinnerDepth.Value.HasValue)
                {
                    settings.Depth = IntSpinnerDepth.Value.Value;
                }

                builder = new DiagramBuilder(settings);

                settings.Password = ((PasswordBox)((Button)sender).CommandParameter).Password;
                // PasswordBox doesn't allow 2 way binding, so we have to manually read it
                settings.Dirty = true;

                //  TODO Because the EntitiesSelected is a collection, the Settings class can't see when an item is added or removed.  when I have more time need to get the observable to bubble up.

                // save user's 'split files'
                if (CheckBoxSplitFiles.IsChecked.HasValue)
                {
                    settings.SplitFiles = CheckBoxSplitFiles.IsChecked.Value;
                }

                Configuration.SaveConfigs(settings.SerializedSettings);

                UpdateStatus("Generating entity diagrams, this might take a while depending on CRM server/connection speed ... ", true);

                // check user's 'split files'
                if (settings.SplitFiles)
                {
                    UpdateStatus("Generator will split entity diagrams into separate pages.", true);
                }

                RegisterMapperEvents();

                Task.Factory.StartNew(
                    () =>
                {
                    try
                    {
                        builder.Generate();
                    }
                    catch (Exception ex)
                    {
                        var error = "\n\n[ERROR] " + ex.Message
                                    + (ex.InnerException != null ? "\n" + "[ERROR] " + ex.InnerException.Message : "");
                        UpdateStatus(error, false);
                        UpdateStatus(ex.StackTrace, false);
                        UpdateStatus("Unable to map entities, see error above.", false);
                    }
                });
            }
            catch (Exception ex)
            {
                var error = "\n\n[ERROR] " + ex.Message
                            + (ex.InnerException != null ? "\n" + "[ERROR] " + ex.InnerException.Message : "");
                UpdateStatus(error, false);
                UpdateStatus(ex.StackTrace, false);
                UpdateStatus("Unable to map entities, see error above.", false);
            }
        }
Ejemplo n.º 15
0
 private GroupLayoutInfo SetUpRootLayoutInfo(
     [NotNull] DiagramBuilder diagramBuilder,
     [NotNull] params (string nodeName, double x, double y)[] nodeLayoutSpecifications)