Ejemplo n.º 1
0
        private static void DetectMultipleEdges(ModuleGraph graph, ModuleEdgeViewModel edge)
        {
            var multiEdges = from e in graph.Edges
                             where e.Source == edge.Source &&
                             e.Target == edge.Target
                             select e;

            int numEdges = multiEdges.Count();

            if (numEdges > 1)
            {
                int edgeIndex = 0;
                foreach (var multiEdge in multiEdges)
                {
                    if (multiEdge.EdgeMargin.Top.Equals(0))
                    {
                        multiEdge.EdgeMargin = new Thickness(
                            0,
                            (EdgeDistance * edgeIndex++) - ((EdgeDistance * numEdges) / 2) + 1,
                            0,
                            0);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public static ModuleGraph BuildGraph(ILogger logger, ModuleGraphDTO moduleGraphDto, IList <ModuleVertexViewModelBase> positions, bool smallFallbackIcons = false)
        {
            var graph = new ModuleGraph();

            try
            {
                foreach (var platformModuleDto in moduleGraphDto.Vertices)
                {
                    var res = (from p in positions
                               where p.ID == platformModuleDto.Name
                               select p).FirstOrDefault();

                    Point pos = res == null ? new Point(50, 50) : res.Position;

                    var imagepath = @"Images\" + platformModuleDto.Type + ".png";
                    graph.AddVertex(new ModuleVertexViewModel(platformModuleDto.Name, imagepath, pos)
                    {
                        Capacity            = platformModuleDto.MaxCapacity,
                        Counter             = platformModuleDto.PlatformItems.Count,
                        Position            = pos,
                        DefaultVertexHeight = smallFallbackIcons ? 100 : 700
                    });
                }

                foreach (var edgeDto in moduleGraphDto.Edges)
                {
                    var edge = new ModuleEdgeViewModel(
                        edgeDto.Id,
                        FindModuleVertex(graph, edgeDto.Source),
                        FindModuleVertex(graph, edgeDto.Target))
                    {
                        OriginPortIndex  = edgeDto.OriginPort,
                        IsForcingEnabled = edgeDto.IsForcingEnabled
                    };

                    DetectCyclicEdge(graph, edge);

                    graph.AddEdge(edge);
                }

                foreach (var edge in graph.Edges)
                {
                    DetectMultipleEdges(graph, edge);
                }
            }
            catch (Exception e)
            {
                logger.Error("Could not load and create Module PaperStreamGraph for Overview.", e);
                throw;
            }

            return(graph);
        }
Ejemplo n.º 3
0
        private static void DetectCyclicEdge(ModuleGraph graph, ModuleEdgeViewModel edge)
        {
            var cyclicEdge = (from e in graph.Edges
                              where e.Source == edge.Target &&
                              e.Target == edge.Source
                              select e).FirstOrDefault();

            if (cyclicEdge != null)
            {
                cyclicEdge.FirstEdge = true;
                edge.SecondEdge      = true;
            }
        }
Ejemplo n.º 4
0
        private bool IsCyclicEdge(ModuleGraph graph, ModuleGraphEdge edge)
        {
            var cyclicEdge = (from e in graph.Edges
                              where e.Source == edge.Target &&
                              e.Target == edge.Source
                              select e).FirstOrDefault();

            if (cyclicEdge != null)
            {
                return(true);
            }
            return(false);
        }
Ejemplo n.º 5
0
        //
        // ModuleA (source) --> ModuleB ------> ModuleC (sink)
        //                                /
        //                      ModuleD -/
        private ModuleGraph CreateSampleModuleGraph()
        {
            var graph = new ModuleGraph();

            graph.AddVertex(_moduleA.Object);
            graph.AddVertex(_moduleB.Object);
            graph.AddVertex(_moduleC.Object);
            graph.AddVertex(_moduleD.Object);

            graph.AddEdge(new ModuleGraphEdge("A->B", _moduleA.Object, _moduleB.Object, 0, 0));
            graph.AddEdge(new ModuleGraphEdge("B->C", _moduleB.Object, _moduleC.Object, 0, 0));
            graph.AddEdge(new ModuleGraphEdge("D->C", _moduleD.Object, _moduleC.Object, 0, 1));

            return(graph);
        }
Ejemplo n.º 6
0
    public ModuleGraphView(ModuleGraph window)
    {
        this.window = window;
        gridStyle   = Resources.Load <StyleSheet>("GraphStyle");
        SetupZoom(ContentZoomer.DefaultMinScale, ContentZoomer.DefaultMaxScale);

        this.AddManipulator(new ContentDragger());
        this.AddManipulator(new SelectionDragger());
        this.AddManipulator(new RectangleSelector());

        grid = new GridBackground();
        grid.AddToClassList("grid");
        styleSheets.Add(gridStyle);
        Insert(0, grid);
        grid.StretchToParentSize();

        CreateEmptyNewGraph();
        AddSearchWindow();
        LiveChangeActionModule();
    }
Ejemplo n.º 7
0
 private static ModuleVertexViewModelBase FindModuleVertex(ModuleGraph graph, string moduleName)
 {
     return(graph.Vertices.FirstOrDefault(moduleVertex => moduleVertex.ID == moduleName));
 }
Ejemplo n.º 8
0
        private ModuleGraph CreateGraph(ModuleWiringConfigSection.ModuleWiringConfigSection configSection)
        {
            var graph = new ModuleGraph();

            // create graph vertices
            foreach (ModuleConfig moduleConfig in configSection.Modules)
            {
                var module = GetModuleByName(moduleConfig.Name);
                if (module == null)
                {
                    continue;
                }

                // create QuickGraph datastructure
                graph.AddVertex(module);
            }

            // create graph edges
            foreach (ModuleConfig moduleConfig in configSection.Modules)
            {
                var module = GetModuleByName(moduleConfig.Name);
                if (module == null)
                {
                    continue;
                }

                foreach (ModuleReferenceConfig targetModuleConfig in moduleConfig.NextModules)
                {
                    var targetModule = GetModuleByName(targetModuleConfig.Name);

                    if (targetModule == null)
                    {
                        continue;
                    }

                    var edge = new ModuleGraphEdge(
                        module.Name + "->" + targetModule.Name + ":" + targetModuleConfig.Port + targetModuleConfig.TargetPort,
                        module,
                        targetModule,
                        targetModuleConfig.Port,
                        targetModuleConfig.TargetPort);
                    graph.AddEdge(edge);
                }
            }

            // enable forcing for one-way edges by default
            var modulesWithSingleEdge = from e in graph.Edges
                                        group e by e.Source into g
                                        where g.Count() == 1
                                        select g.Key;

            foreach (var module in modulesWithSingleEdge)
            {
                var oneWayEdge = (from e in graph.Edges
                                  where e.Source == module
                                  select e).Single();

                if (!IsCyclicEdge(graph, oneWayEdge))
                {
                    oneWayEdge.IsForcingEnabled = true;
                }
            }

            return(graph);
        }