All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.uci.ics.jung.visualization.subLayout.TreeCollapser Maven / Gradle / Ivy

/*
 * Copyright (c) 2005, the JUNG Project and the Regents of the University of
 * California All rights reserved.
 *
 * This software is open-source under the BSD license; see either "license.txt"
 * or http://jung.sourceforge.net/license.txt for a description.
 *
 * Created on Aug 23, 2005
 */
package edu.uci.ics.jung.visualization.subLayout;

import java.awt.geom.Point2D;

import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.graph.Forest;
import edu.uci.ics.jung.graph.util.TreeUtils;

public class TreeCollapser  {
    
    @SuppressWarnings("unchecked")
	public void collapse(Layout layout, Forest tree, Object subRoot) throws InstantiationException, IllegalAccessException {
        
    	// get a sub tree from subRoot
    	Forest subTree = TreeUtils.getSubTree(tree, subRoot);
    	Object parent = null;
    	Object edge = null;
    	if(tree.getPredecessorCount(subRoot) > 0) {
    		parent = tree.getPredecessors(subRoot).iterator().next();
    		edge = tree.getInEdges(subRoot).iterator().next();
    	}	
    	tree.removeVertex(subRoot);
    	if(parent != null) {
    		tree.addEdge(edge, parent, subTree);
    	} else {
    		tree.addVertex(subTree);
    	}
    	
    	layout.setLocation(subTree, (Point2D)layout.transform(subRoot));
    }
    
    @SuppressWarnings("unchecked")
	public void expand(Forest tree, Forest subTree) {

    	Object parent = null;
    	Object edge = null;
    	if(tree.getPredecessorCount(subTree) > 0) {
    		parent = tree.getPredecessors(subTree).iterator().next();
    		edge = tree.getInEdges(subTree).iterator().next();
    	}
//    	Object edge = tree.getInEdges(subTree).iterator().next();
//    	Object parent = tree.getPredecessors(subTree).iterator().next();
    	tree.removeVertex(subTree);
    	TreeUtils.addSubTree(tree, subTree, parent, edge);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy