use of org.ivis.layout.LGraphManager in project cytoscape-impl by cytoscape.
the class CoSELayoutAlgorithmTask method layoutPartition.
@Override
public void layoutPartition(final LayoutPartition partition) {
if (cancelled)
return;
final CyGroupManager groupManager = serviceRegistrar.getService(CyGroupManager.class);
final CyNetwork network = networkView.getModel();
// Create the CoSE model
// (see http://www.cs.bilkent.edu.tr/~ivis/chilay/ChiLay-2.0-PG.pdf)
cose = new CoSELayout();
cose.addProgressListener(new ProgressListener() {
@Override
public void update(double value) {
taskMonitor.setProgress(value);
}
});
final LGraphManager gm = cose.getGraphManager();
final LGraph root = gm.addRoot();
// Index all LayoutNodes by CyNode for future reference
final Map<CyNode, LayoutNode> layoutNodeMap = new HashMap<>();
for (LayoutNode n : partition.getNodeList()) layoutNodeMap.put(n.getNode(), n);
// Create all CoSE nodes
final Map<CyNode, LNode> lNodeMap = new HashMap<>();
for (LayoutNode n : partition.getNodeList()) {
// If this node does not belong to a CyGroup, let's traverse its potential compound node tree.
if (groupManager.getGroupsForNode(n.getNode(), network).isEmpty())
traverseLNodeTree(n, root, cose, lNodeMap, layoutNodeMap, groupManager);
}
if (cancelled)
return;
// Create all CoSE edges
final Map<CyEdge, LEdge> lEdgeMap = new HashMap<>();
final Iterator<LayoutEdge> edgeIter = partition.edgeIterator();
while (edgeIter.hasNext() && !cancelled) {
final LayoutEdge e = edgeIter.next();
createLEdge(e, cose, lNodeMap, lEdgeMap);
}
if (cancelled)
return;
// Run the layout
try {
cose.runLayout();
} catch (Exception e) {
logger.error("Error running CoSE Layout", e);
return;
}
if (cancelled)
return;
// Move all Node Views to the new positions
for (LayoutNode n : partition.getNodeList()) partition.moveNodeToLocation(n);
}
use of org.ivis.layout.LGraphManager in project cytoscape-impl by cytoscape.
the class CoSELayoutAlgorithmTask method traverseLNodeTree.
private void traverseLNodeTree(final LayoutNode layoutNode, final LGraph graph, final CoSELayout cose, final Map<CyNode, LNode> lNodeMap, final Map<CyNode, LayoutNode> layoutNodeMap, final CyGroupManager groupManager) {
if (lNodeMap.containsKey(layoutNode.getNode()))
// This node has already been visited!
return;
final LNode ln = createLNode(layoutNode, graph, cose, lNodeMap);
if (groupManager.isGroup(layoutNode.getNode(), networkView.getModel())) {
final CyGroup group = groupManager.getGroup(layoutNode.getNode(), networkView.getModel());
if (group != null) {
final LGraphManager gm = cose.getGraphManager();
final LGraph subGraph = gm.add(cose.newGraph("G" + group.getGroupNetwork().getSUID()), ln);
for (CyNode childNode : group.getNodeList()) {
final LayoutNode childLayoutNode = layoutNodeMap.get(childNode);
if (childLayoutNode != null)
traverseLNodeTree(childLayoutNode, subGraph, cose, lNodeMap, layoutNodeMap, groupManager);
}
}
}
}
Aggregations