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

timeBench.action.layout.GROOVELayout Maven / Gradle / Ivy

Go to download

TimeBench, a flexible, easy-to-use, and reusable software library written in Java that provides foundational data structures and algorithms for time- oriented data in Visual Analytics.

The newest version!
package timeBench.action.layout;

import ieg.prefuse.data.DataHelper;

import java.awt.Color;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.TreeMap;

import org.apache.commons.lang3.tuple.Pair;
import org.timebench.util.color.HCL;

import prefuse.Display;
import prefuse.data.Graph;
import prefuse.data.Node;
import prefuse.data.Schema;
import prefuse.data.Tree;
import prefuse.data.Tuple;
import prefuse.util.ColorLib;
import prefuse.util.PrefuseLib;
import prefuse.visual.NodeItem;
import prefuse.visual.VisualGraph;
import prefuse.visual.VisualItem;
import prefuse.visual.VisualTable;
import prefuse.visual.VisualTree;
import timeBench.calendar.Calendar;
import timeBench.calendar.CalendarFactory;
import timeBench.calendar.CalendarManager;
import timeBench.calendar.Granule;
import timeBench.data.GranularityAggregationTreeProvider;
import timeBench.data.TemporalDataException;
import timeBench.data.TemporalObject;

/**
 * 
 * 
 * 

* Added: / TL
* Modifications: *

* * @author Tim Lammarsch * */ public class GROOVELayout extends prefuse.action.layout.Layout { int[] hotPalette; String group = "GROOVE"; GranularityAggregationTreeProvider dataProvider; GranularityGROOVELayoutSettings[] settings; String labelGroup = "GROOVELabels"; int hDepth = 0; int vDepth = 0; double minLuminance = HCL.getMinLuminanceForChroma(60, 2.2); double maxLuminance = HCL.getMaxLuminanceForChroma(60, 2.2); public static final int ORIENTATION_HORIZONTAL = 0; public static final int ORIENTATION_VERTICAL = 1; public static final int COLOR_CALCULATION_GLOWING_METAL = 0; public static final int COLOR_CALCULATION_H_BLUE_RED = 1; public static final int COLOR_CALCULATION_L = 2; public static final int FITTING_FULL_AVAILABLE_SPACE = 0; public static final int FITTING_DEPENDING_ON_POSSIBLE_VALUES = 1; public GROOVELayout(String group,String labelGroup,GranularityAggregationTreeProvider dataProvider, int columnUsed,GranularityGROOVELayoutSettings[] settings) { hotPalette = prefuse.util.ColorLib.getHotPalette(768); this.group = group; this.labelGroup = labelGroup; this.dataProvider = dataProvider; this.settings = settings; for(int i=1; i relativeSize = new ArrayList(); ArrayList minIdentifiers = new ArrayList(); ArrayList maxIdentifiers = new ArrayList(); buildSizeChart(dataProvider.getGranularityAggregationTree().roots().iterator().next(), relativeSize,minIdentifiers,maxIdentifiers,0); layoutGranularity(vg,vgl,vgl.getRoot().getChild(0),vgl.getRoot().getChild(1), (NodeItem)m_vis.getVisualItem(group, dataProvider.getGranularityAggregationTree().roots().iterator().next()), position,0,minIdentifiers,maxIdentifiers); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void buildSizeChart(TemporalObject node, ArrayList relativeSize, ArrayList minIdentifiers, ArrayList maxIdentifiers, int level) throws TemporalDataException { // TODO relativeSize is never read if(relativeSize.size() <= level) relativeSize.add(0f); if(minIdentifiers.size() <= level) minIdentifiers.add(Long.MAX_VALUE); if(maxIdentifiers.size() <= level) maxIdentifiers.add(Long.MIN_VALUE); if (settings[level].getFitting() == FITTING_DEPENDING_ON_POSSIBLE_VALUES) { minIdentifiers.set(level,node.getTemporalElement().getGranule().getGranularity().getMinGranuleIdentifier()); maxIdentifiers.set(level,node.getTemporalElement().getGranule().getGranularity().getMaxGranuleIdentifier()); } else { minIdentifiers.set(level, Math.min(minIdentifiers.get(level), node.getTemporalElement().getGranule().getIdentifier())); maxIdentifiers.set(level, Math.max(maxIdentifiers.get(level), node.getTemporalElement().getGranule().getIdentifier())); } if(node.getChildCount() == 0) relativeSize.add(1f); else { for(TemporalObject o : node.childObjects()) { buildSizeChart(o,relativeSize,minIdentifiers,maxIdentifiers,level+1); } //settings[level] } } /** * @param vgl * @throws Exception * */ private void layoutGranularity(VisualGraph vg,VisualTree vgl, Node hNode,Node vNode, NodeItem node,Rectangle position,int granularityLevel,ArrayList minIdentifiers,ArrayList maxIdentifiers) throws Exception { if(granularityLevel > 0) { position.x += settings[granularityLevel-1].getBorderWith()[0]; position.y += settings[granularityLevel-1].getBorderWith()[1]; position.width -= (settings[granularityLevel-1].getBorderWith()[0]+settings[granularityLevel].getBorderWith()[2]); position.height -= (settings[granularityLevel-1].getBorderWith()[1]+settings[granularityLevel].getBorderWith()[3]); } node.setX(position.getCenterX()); node.setY(position.getCenterY()); node.setSizeX(position.getWidth()); node.setSizeY(position.getHeight()); node.setDOI(granularityLevel); node.setStrokeColor(ColorLib.rgba(0, 0, 0, 0)); if(granularityLevel + 1 < settings.length) { Iterator iChilds = node.inNeighbors(); while(iChilds.hasNext()) { NodeItem iChild = iChilds.next(); Granule granule = ((TemporalObject)iChild.getSourceTuple()).getTemporalElement().getGranule(); int numberOfSubElements = (int)(maxIdentifiers.get(granularityLevel+1)-minIdentifiers.get(granularityLevel+1)+1); Rectangle subPosition = (Rectangle)position.clone(); Node hTargetNode = null; Node vTargetNode = null; Node targetNode = null; if (settings[granularityLevel+1].getOrientation() == ORIENTATION_HORIZONTAL) { subPosition.x += position.width/numberOfSubElements*(granule.getIdentifier()-minIdentifiers.get(granularityLevel+1)); subPosition.width = position.width/numberOfSubElements; for(int i=0; i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy