1 package prefuse.action.filter; 2 3 import java.util.Iterator ; 4 5 import prefuse.Constants; 6 import prefuse.Visualization; 7 import prefuse.action.GroupAction; 8 import prefuse.data.Graph; 9 import prefuse.data.expression.Predicate; 10 import prefuse.data.tuple.TupleSet; 11 import prefuse.data.util.BreadthFirstIterator; 12 import prefuse.data.util.FilterIterator; 13 import prefuse.util.PrefuseLib; 14 import prefuse.visual.VisualItem; 15 import prefuse.visual.expression.InGroupPredicate; 16 17 23 public class GraphDistanceFilter extends GroupAction { 24 25 protected int m_distance; 26 protected String m_sources; 27 protected Predicate m_groupP; 28 protected BreadthFirstIterator m_bfs; 29 30 39 public GraphDistanceFilter(String group) { 40 this(group, 1); 41 } 42 43 54 public GraphDistanceFilter(String group, int distance) { 55 this(group, Visualization.FOCUS_ITEMS, distance); 56 } 57 58 69 public GraphDistanceFilter(String group, String sources, int distance) 70 { 71 super(group); 72 m_sources = sources; 73 m_distance = distance; 74 m_groupP = new InGroupPredicate( 75 PrefuseLib.getGroupName(group, Graph.NODES)); 76 m_bfs = new BreadthFirstIterator(); 77 } 78 79 83 public int getDistance() { 84 return m_distance; 85 } 86 87 91 public void setDistance(int distance) { 92 m_distance = distance; 93 } 94 95 101 public String getSources() { 102 return m_sources; 103 } 104 105 111 public void setSources(String sources) { 112 m_sources = sources; 113 } 114 115 118 public void run(double frac) { 119 Iterator items = m_vis.visibleItems(m_group); 121 while ( items.hasNext() ) { 122 VisualItem item = (VisualItem)items.next(); 123 item.setDOI(Constants.MINIMUM_DOI); 124 } 125 126 TupleSet src = m_vis.getGroup(m_sources); 128 Iterator srcs = new FilterIterator(src.tuples(), m_groupP); 129 m_bfs.init(srcs, m_distance, Constants.NODE_AND_EDGE_TRAVERSAL); 130 131 while ( m_bfs.hasNext() ) { 133 VisualItem item = (VisualItem)m_bfs.next(); 134 int d = m_bfs.getDepth(item); 135 PrefuseLib.updateVisible(item, true); 136 item.setDOI(-d); 137 item.setExpanded(d < m_distance); 138 } 139 140 items = m_vis.visibleItems(m_group); 142 while ( items.hasNext() ) { 143 VisualItem item = (VisualItem)items.next(); 144 if ( item.getDOI() == Constants.MINIMUM_DOI ) { 145 PrefuseLib.updateVisible(item, false); 146 item.setExpanded(false); 147 } 148 } 149 } 150 151 } | Popular Tags |