Como colorir vértices e arestas
Up to Table of Contents
As cores dos vértices e arestas são guardadas nos objetos através de propriedades. Cada propriedade possui uma chave específica, que fica guardada na interface.
Por exemplo, o objeto vértice, representado pela interface INode possui as seguintes propriedades:
INode.INODE_LABEL_PROPERTY_ID;
INode.INODE_COLOR_PROPERTY_ID;
Da mesma forma, uma aresta possui:
IEdge.IEDGE_COLOR_PROPERTY_ID
Então, como pegar uma propriedade do vértice n qualquer?
n.getPropertyValue(INode.INODE_LABEL_PROPERTY_ID);
Isso retorna uma String com o label do vértice. Isso é exatamente o que o metodo getLabel faz.
De forma análoga a operação
RGB cor = (RGB)n.getPropertyValue(INode.INODE_COLOR_PROPERTY_ID);
retorna um objeto da classe RGB (org.eclipse.swt.graphics.RGB) e armazena na variavel cor
Para rodar o exemplo abaixo você precisa fazer Run As.. -> SWT Application e não Run As.. -> Java Application, como de costume
import java.util.ArrayList;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import org.projetorox.rox.graphapi.analysis.GraphUtils;
import org.projetorox.rox.graphapi.edge.IEdge;
import org.projetorox.rox.graphapi.graph.IGraph;
import org.projetorox.rox.ui.node.simple.SimpleNode;
//Rode esta classe como SWT Application
public class Main {
public static void main(String[] args) throws Exception{
//captura o grafo
IGraph grafo = GraphUtils.getInstance().getGraph("myGraph.graph");
//pega todas as arestas
ArrayList a = new ArrayList(grafo.getEdges());
//pega a primeira aresta
IEdge e = (IEdge)a.get(0);
//colore essa aresta
Display d = new Display();
e.setPropertyValue(IEdge.IEDGE_COLOR_PROPERTY_ID, d.getSystemColor(SWT.COLOR_GREEN).getRGB());
//escreve o grafo em outro arquivo
grafo.setName("novografo.graph");
GraphUtils.getInstance().writeGraph(grafo, "novografo.graph");
}
}