コード例 #1
0
ファイル: writer.py プロジェクト: 571451370/devstack_mitaka
 def set_printer(self, file_name, basename):
     """initialize VCGWriter for a UML graph"""
     self.graph_file = open(file_name, 'w+')
     self.printer = VCGPrinter(self.graph_file)
     self.printer.open_graph(title=basename, layoutalgorithm='dfs',
                             late_edge_labels='yes', port_sharing='no',
                             manhattan_edges='yes')
     self.printer.emit_node = self.printer.node
     self.printer.emit_edge = self.printer.edge
コード例 #2
0
    def vcg_draw(self, filename, title='Constraints graph'):
        """ draw a constraints graph readable by vcg
        """
        from logilab.common.vcgutils import VCGPrinter, EDGE_ATTRS
        stream = open(filename, 'w')
        printer = VCGPrinter(stream)
        printer.open_graph(
            title=title,
            textcolor='black'
            #                                layoutalgorithm='dfs',
            #                               manhattan_edges='yes'
            #                               port_sharing='no'
            #                                late_edge_labels='yes'
        )

        for var in self._variables:
            printer.node(var, shape='ellipse')

        type_colors = {}
        color_index = 2
        i = 0
        for constraint in self._constraints:
            key = constraint.type
            if not type_colors.has_key(key):
                type_colors[key] = color_index
                color_index += 1
            affected_vars = constraint.affectedVariables()
            if len(affected_vars) <= 1:
                continue
            if len(affected_vars) == 2:
                var1 = affected_vars[0]
                var2 = affected_vars[1]
                printer.edge(var1,
                             var2,
                             arrowstyle='none',
                             color=EDGE_ATTRS['color'][type_colors[key]])
                continue
            n_id = 'N_aire%i' % i
            i += 1
            printer.node(n_id, shape='triangle')
            for var1 in affected_vars:
                printer.edge(var1,
                             n_id,
                             arrowstyle='none',
                             color=EDGE_ATTRS['color'][type_colors[key]])
        # self._printer( legend)
        for node_type, color in type_colors.items():
            printer.node(node_type,
                         shape='box',
                         color=EDGE_ATTRS['color'][color])
        printer.close_graph()
        stream.close()