Estou fazendo um trabalho da faculdade sobre grafos, na qual estou utilizando prefuse para fazer a visualização do grafo. Crio o arquivo xml, faço a leitura do arquivo e é exibido normalmente, estaria funcionando se não fosse um pequeno detalhe, quando o grafo possui laço ou aresta paralela a visualização da prefuse não cria as ligações, e também, não gera nenhuma exceção, mas somente exibe o grafo em tela não mostrando os laços e também não mostrando as arestas paralela. Alguém sabe como fazer? Tem algum parâmetro ou método que eu possa usar para permitir a visualização de laços e arestas paralelas?
Procurei por diversos locais e não encontrei http://prefuse.org/
Método que faz a leitura do arquivo e a visualização:
public static void showGraficMode() {
Graph graph = null;
try {
graph = new GraphMLReader().readGraph("graphXML.xml");
} catch (DataIOException e) {
System.err.println("Error loading graph. Exiting...");
System.exit(1);
}
// add the graph to the visualization as the data grou/p "graph"
// nodes and edges are accessible as "graph.nodes" and "graph.edges"
Visualization vis = new Visualization();
vis.add("graph", graph);
LabelRenderer render = new LabelRenderer("name");
render.setRoundedCorner(8, 8); // round the corners
render.setRenderType(AbstractShapeRenderer.RENDER_TYPE_DRAW_AND_FILL);
render.setHorizontalAlignment(Constants.CENTER);
// create a new default renderer factory
// return our name label renderer as the default for all non-EdgeItems
// includes straight line edges for EdgeItems by default
vis.setRendererFactory(new DefaultRendererFactory(render));
// create our nominal color palette
// color to nodes
int[] palette = new int[]{
ColorLib.rgb(255, 180, 180), ColorLib.rgb(190, 190, 255),
ColorLib.rgb(107, 35, 142), ColorLib.rgb(35, 142, 35),
ColorLib.rgb(255, 165, 0), ColorLib.rgb(234, 234, 174),
ColorLib.rgb(168, 168, 168), ColorLib.rgb(0, 0, 156)
};
// map nominal data values to colors using random in create XML
DataColorAction fill = new DataColorAction("graph.nodes", "idcolor",
Constants.NOMINAL, VisualItem.FILLCOLOR, palette);
// use black for node text
ColorAction text = new ColorAction("graph.nodes",
VisualItem.TEXTCOLOR, ColorLib.gray(0));
// use light grey for edges
ColorAction edges = new ColorAction("graph.edges",
VisualItem.STROKECOLOR, ColorLib.gray(200));
// create an action list containing all color assignments
ActionList color = new ActionList();
color.add(fill);
color.add(text);
color.add(edges);
// create an action list with an animated layout
ActionList layout = new ActionList(Activity.INFINITY);
layout.add(new ForceDirectedLayout("graph", true));
layout.add(new RepaintAction());
// add the actions to the visualization
vis.putAction("color", color);
vis.putAction("layout", layout);
// create a new Display that pull from our Visualization
Display display = new Display(vis);
display.setHighQuality(true);
display.pan(230, 300);
display.setSize(600, 500); // set display size
display.addControlListener(new DragControl()); // drag items around
display.addControlListener(new PanControl()); // pan with background left-drag
display.addControlListener(new ZoomControl()); // zoom with vertical right-drag
display.addControlListener(new WheelZoomControl());
display.addControlListener(new ZoomToFitControl());
display.addControlListener(new NeighborHighlightControl());
// create a new window to hold the visualization
JFrame frame = new JFrame("Visualizar Grafo");
// ensure application exits when window is closed
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(display);
frame.pack(); // layout components in window
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true); // show the window
vis.run("color"); // assign the colors
vis.run("layout"); // start up the animated layout
}