public void actionPerformed(ActionEvent e) { // sum of coordinates double sx = 0; double sy = 0; // coordinates of center of graph double cx = 0; double cy = 0; // coordinates with graph centered at (0,0) double nx; double ny; CyNetworkView parent = Cytoscape.getCurrentNetworkView(); // loop through each node to add up all x and all y coordinates for (Iterator i = parent.getNodeViewsIterator(); i.hasNext(); ) { NodeView nodeView = (NodeView) i.next(); // get coordinates of node double ax = nodeView.getXPosition(); double ay = nodeView.getYPosition(); // sum up coordinates of all the nodes sx += ax; sy += ay; } // set new coordinates of each node at center (0,0), shrink, then return to // original center at (cx, cy) for (Iterator i = parent.getNodeViewsIterator(); i.hasNext(); ) { NodeView nodeView = (NodeView) i.next(); nodeView.setXPosition(m * ((nodeView.getXPosition()) - cx) + cx); nodeView.setYPosition(m * ((nodeView.getYPosition()) - cy) + cy); } // remove bends for (Iterator i = parent.getEdgeViewsIterator(); i.hasNext(); ) { EdgeView edgeView = (EdgeView) i.next(); edgeView.getBend().removeAllHandles(); } } // Action Performed
/** * Method to determine whether a node is an ancestor of another node. * * @param ancestor GO term node which may or may not be an ancestor of 'child'. * @param child GO term node with may or may not be a child of 'ancestor'. * @return true if 'ancestor' is an ancestor of 'child', false otherwise. */ private boolean isAncestorNode(Node ancestor, Node child) { DGraphView view = (DGraphView) Cytoscape.getCurrentNetworkView(); // Loop through the outgoing edges of child node (to parent nodes), and check if 'target' is the // parent node. // Then recursively call method on each of the parent nodes. int[] outgoingEdges = Cytoscape.getCurrentNetwork() .getAdjacentEdgeIndicesArray(child.getRootGraphIndex(), false, false, true); for (int outgoingEdge : outgoingEdges) { EdgeView ev = view.getEdgeView(outgoingEdge); Node parentNode = ev.getEdge().getTarget(); if (ancestor.equals(parentNode)) { return true; } if (isAncestorNode(ancestor, parentNode)) { return true; } } return false; }