private static List <List <Node> > IndexToShape(Graph graph, List <int> indexes)
        {
            List <List <Node> > result   = new List <List <Node> >();
            TetrisTemplate      template = graph.MetaData.TetrisTemplate;

            foreach (int index in indexes)
            {
                if (index < template.Shapes.Count)
                {
                    result.Add(template.Shapes[index].Select(node => new Node(node.X, node.Y)).ToList());
                }
            }
            return(result);
        }
Exemple #2
0
        public static Graph FlipGraph(Graph graph, FlipType flipType)
        {
            Graph graphClone = new Graph(graph.ToString());
            Graph newGraph   = new Graph();
            Dictionary <Node, Node> mapping = new Dictionary <Node, Node>();

            foreach (Node node in graphClone.Nodes)
            {
                mapping[node]           = TransformNode(node, flipType);
                mapping[node].Decorator = node.Decorator;
            }
            foreach (Node node in graphClone.Nodes)
            {
                newGraph.Nodes.Add(mapping[node]);
            }
            foreach (Edge edge in graphClone.Edges)
            {
                Edge newEdge = new Edge(mapping[edge.Start], mapping[edge.End]);
                newEdge.Decorator         = edge.Decorator;
                newEdge.GraphElementColor = edge.GraphElementColor;
                newGraph.Edges.Add(newEdge);
            }
            foreach (Face face in graphClone.Faces)
            {
                List <Node> nodes = new List <Node>();
                nodes.AddRange(face.Nodes);
                nodes.Reverse();
                Face newFace = new Face(nodes.Select(node => mapping[node]).ToList());
                newFace.Decorator         = face.Decorator;
                newFace.GraphElementColor = face.GraphElementColor;
                newGraph.Faces.Add(newFace);
            }
            TetrisTemplate oldTetrisTemplate = graphClone.MetaData.TetrisTemplate;

            newGraph.MetaData = graphClone.MetaData;
            newGraph.MetaData.TetrisTemplate = new TetrisTemplate();
            foreach (List <Node> shape in oldTetrisTemplate.Shapes)
            {
                List <Node> newShape = new List <Node>();
                newShape.AddRange(shape);
                newShape.Reverse();
                newGraph.MetaData.TetrisTemplate.Shapes.Add(newShape.Select(node => TransformNode(node, flipType)).ToList());
            }
            return(newGraph);
        }
Exemple #3
0
        public static Graph ScaleGraph(Graph graph, double scaleX, double scaleY)
        {
            Graph graphClone = new Graph(graph.ToString());
            Graph newGraph   = new Graph();
            Dictionary <Node, Node> mapping = new Dictionary <Node, Node>();

            foreach (Node node in graphClone.Nodes)
            {
                mapping[node]           = new Node(node.X * scaleX, node.Y * scaleY);
                mapping[node].Decorator = node.Decorator;
            }
            foreach (Node node in graphClone.Nodes)
            {
                newGraph.Nodes.Add(mapping[node]);
            }
            foreach (Edge edge in graphClone.Edges)
            {
                Edge newEdge = new Edge(mapping[edge.Start], mapping[edge.End]);
                newEdge.Decorator = edge.Decorator;
                newGraph.Edges.Add(newEdge);
            }
            foreach (Face face in graphClone.Faces)
            {
                List <Node> nodes = new List <Node>();
                nodes.AddRange(face.Nodes);
                Face newFace = new Face(nodes.Select(node => mapping[node]).ToList());
                newFace.Decorator = face.Decorator;
                newGraph.Faces.Add(newFace);
            }
            TetrisTemplate oldTetrisTemplate = graphClone.MetaData.TetrisTemplate;

            newGraph.MetaData = graphClone.MetaData;
            newGraph.MetaData.TetrisTemplate = new TetrisTemplate();
            foreach (List <Node> shape in oldTetrisTemplate.Shapes)
            {
                List <Node> newShape = new List <Node>();
                newShape.AddRange(shape);
                newGraph.MetaData.TetrisTemplate.Shapes.Add(newShape.Select(node => new Node(node.X * scaleX, node.Y * scaleY)).ToList());
            }
            return(newGraph);
        }