示例#1
0
    def build(cls, tree, separate=False):
        DiagramNode.clear()
        DiagramEdge.clear()
        NodeGroup.clear()

        diagram = DiagramTreeBuilder().build(tree)
        DiagramLayoutManager(diagram).run()
        diagram.fixiate(True)

        if diagram.orientation == 'portrait':
            cls.rotate_diagram(diagram)

        return diagram
示例#2
0
    def build(cls, tree, separate=False):
        DiagramNode.clear()
        DiagramEdge.clear()
        NodeGroup.clear()

        diagram = DiagramTreeBuilder().build(tree)
        DiagramLayoutManager(diagram).run()
        diagram.fixiate(True)

        if diagram.orientation == 'portrait':
            cls.rotate_diagram(diagram)

        return diagram
示例#3
0
    def instantiate(self, group, tree, lane=None):
        for stmt in tree.stmts:
            if isinstance(stmt, parser.Node):
                node = DiagramNode.get(stmt.id)
                node.set_attributes(stmt.attrs)
                self.belong_to(node, lane)

            elif isinstance(stmt, parser.Edge):
                from_nodes = [DiagramNode.get(n) for n in stmt.from_nodes]
                to_nodes = [DiagramNode.get(n) for n in stmt.to_nodes]

                for node in from_nodes + to_nodes:
                    self.belong_to(node, lane)

                for node1 in from_nodes:
                    for node2 in to_nodes:
                        edge = DiagramEdge.get(node1, node2)
                        edge.set_dir(stmt.edge_type)
                        edge.set_attributes(stmt.attrs)

            elif isinstance(stmt, parser.Lane):
                _lane = NodeGroup.get(stmt.id)
                if _lane not in self.diagram.lanes:
                    self.diagram.lanes.append(_lane)

                self.instantiate(group, stmt, _lane)

            elif isinstance(stmt, parser.Attr):
                if lane:
                    lane.set_attribute(stmt)
                else:
                    self.diagram.set_attribute(stmt)

            elif isinstance(stmt, parser.Extension):
                if stmt.type == 'class':
                    name = unquote(stmt.name)
                    Diagram.classes[name] = stmt
                if stmt.type == 'plugin':
                    self.diagram.set_plugin(stmt.name, stmt.attrs)

            elif isinstance(stmt, parser.Statements):
                self.instantiate(group, stmt, lane)

        group.update_order()
        return group
示例#4
0
    def instantiate(self, group, tree, lane=None):
        for stmt in tree.stmts:
            if isinstance(stmt, parser.Node):
                node = DiagramNode.get(stmt.id)
                node.set_attributes(stmt.attrs)
                self.belong_to(node, lane)

            elif isinstance(stmt, parser.Edge):
                from_nodes = [DiagramNode.get(n) for n in stmt.from_nodes]
                to_nodes = [DiagramNode.get(n) for n in stmt.to_nodes]

                for node in from_nodes + to_nodes:
                    self.belong_to(node, lane)

                for node1 in from_nodes:
                    for node2 in to_nodes:
                        edge = DiagramEdge.get(node1, node2)
                        edge.set_dir(stmt.edge_type)
                        edge.set_attributes(stmt.attrs)

            elif isinstance(stmt, parser.Lane):
                _lane = NodeGroup.get(stmt.id)
                if _lane not in self.diagram.lanes:
                    self.diagram.lanes.append(_lane)

                self.instantiate(group, stmt, _lane)

            elif isinstance(stmt, parser.Attr):
                if lane:
                    lane.set_attribute(stmt)
                else:
                    self.diagram.set_attribute(stmt)

            elif isinstance(stmt, parser.Extension):
                if stmt.type == 'class':
                    name = unquote(stmt.name)
                    Diagram.classes[name] = stmt
                if stmt.type == 'plugin':
                    self.diagram.set_plugin(stmt.name, stmt.attrs)

            elif isinstance(stmt, parser.Statements):
                self.instantiate(group, stmt, lane)

        group.update_order()
        return group