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
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()