Layout de Gráfico: Usando a API

Em um aplicativo que não funciona diretamente em gráficos, operações como anexar ou desanexar uma instância de layout de gráfico devem ser executadas explicitamente.

A Classe Base

A classe ibm_ilog.graphlayout.GraphLayout é a classe base para todos os algoritmos de layout. Esta classe é uma classe abstrata e não pode ser usada diretamente. Você deve usar uma de suas subclasses: ibm_ilog.graphlayout.hierarchical.HierarchicalLayout, ibm_ilog.graphlayout.tree.TreeLayout, ibm_ilog.graphlayout.forcedirected.ForceDirectedLayout, ibm_ilog.graphlayout.shortlink.ShortLinkLayout, ibm_ilog.graphlayout.longlink.LongLinkLayout, ibm_ilog.graphlayout.random.RandomLayout, ibm_ilog.graphlayout.circular.CircularLayout, ibm_ilog.graphlayout.grid.GridLayout. Também é possível criar suas próprias subclasses para implementar outros algoritmos de layout. Consulte o Definindo seu Próprio Tipo de Layout.
Embora apenas as subclasses de GraphLayout sejam usadas diretamente para obter os layouts, é necessário aprender sobre esta classe porque ela contém métodos que são herdados (ou substituídos) pelas subclasses. Você deve entendê-la para criar suas próprias subclasses.
Diagrama de classes UML
mostram as subclasses da classe abstrata GraphLayout
e os relacionamentos de algumas destas classes com os diversos
relatórios de layout. O diagrama de classes usa as convenções UML normais para representar
as classes e relacionamentos. As classes que implementam os algoritmos de layout de gráfico
são mostradas à esquerda do diagrama. As classes de relatório de layout
estão à direita.
A Classe GraphLayout e suas subclasses e relacionamentos com relatórios de layout

Instanciando uma Subclasse da Classe Base

A classe ibm_ilog.graphlayout.GraphLayout é uma classe abstrata. Ela não possui construtores. Você instancia uma subclasse conforme mostrado no exemplo a seguir:
var layout = new ibm_ilog.graphlayout.tree.TreeLayout();

Anexando ou Desanexando o Layout de um Gráfico ou Diagrama

No IBM® ILOG® Dojo Diagrammer, você deve anexar o layout a uma instância de widget ibm_ilog.diagram.widget.Diagram ou a uma instância ibm_ilog.diagram.Graph.
Se você usar o widget Diagram, anexe o layout usando os atributos nodeLayout ou linkLayout do widget Diagram. O seguinte exemplo mostra como é possível fazer isso na marcação HTML do widget Diagram:
<div jsId="linkLayout" dojoType="ibm_ilog.graphlayout.shortlink.ShortLinkLayout"/>
<div id="diagram" dojoType="ibm_ilog.diagram.widget.Diagram" 
  nodeLayout="treeLayout"/>
O atributo nodeLayout é usado para configurar o algoritmo de layout de gráfico principal que posiciona os nós e links do Diagram. É possível também usar o atributo linkLayout para configurar um segundo layout que roteia apenas os links do Diagram. Consulte o seguinte exemplo:
<div jsId="linkLayout" dojoType="ibm_ilog.graphlayout.shortlink.ShortLinkLayout"/>
<div id="diagram" dojoType="ibm_ilog.diagram.widget.Diagram" 
  linkLayout="linkLayout"/>
Também é possível configurar o nó ou layout de link de um Diagram em JavaScript:
var diagram = dijit.byId("diagram");
var treeLayout = new ibm_ilog.graphlayout.tree.TreeLayout();
var linkLayout = new ibm_ilog.graphlayout.shortlink.ShortLinkLayout();
diagram.attr("nodeLayout", treeLayout);
diagram.attr("linkLayout", linkLayout);
Se você trabalhar diretamente com o objeto Graph (ou seja, se não usar o widget Diagram, mas trabalhar diretamente com as APIs GFX), deverá usar os métodos setNodeLayout ou setLinkLayout para anexar o layout ao Graph:
var graph = surface.createGraph();
var treeLayout = new ibm_ilog.graphlayout.tree.TreeLayout();
var linkLayout = new ibm_ilog.graphlayout.shortlink.ShortLinkLayout();
graph.setNodeLayout(treeLayout);
graph.setLinkLayout(linkLayout);

Executando um Layout

Quando o algoritmo de layout estiver anexado a uma instância Diagram ou Graph, use o método performGraphLayout do Diagram ou Graph para iniciar o layout:
diagram.performGraphLayout();
ou
graph.performGraphLayout();
O método abstrato protegido layout(boolean redraw) da subclasse GraphLayout é então chamado. Isto significa que o controle é passado para as subclasses que implementam este método. A implementação calcula o layout e move os nós para novas posições ou redimensiona os links, ou move os nós e redimensiona os links.
O método getLayoutReport do layout de gráfico retorna uma instância de ibm_ilog.graphlayout.GraphLayoutReport (ou de uma subclasse) que contém informações sobre o comportamento do algoritmo de layout. Ele informa se o algoritmo foi executado normalmente ou se ocorreu um caso específico, predefinido. (Para obter uma descrição mais detalhada do relatório de layout, consulte Usando um Relatório de Layout de Gráfico.)

Informações Adicionais

É possível localizar informações adicionais sobre a classe ibm_ilog.graphlayout.GraphLayout nas seguintes seções:
Para obter detalhes sobre ibm_ilog.graphlayout.GraphLayout e outras classes de layout de gráfico, consulte IBM® ILOG® Dojo Diagrammer API Reference Documentation.