package org.iplantc.phyloviewer.shared.scene;
import org.iplantc.phyloviewer.shared.layout.ILayoutData;
import org.iplantc.phyloviewer.shared.math.Box2D;
import org.iplantc.phyloviewer.shared.math.Matrix33;
import org.iplantc.phyloviewer.shared.model.INode;
public class LODSelectorCladogram implements ILODSelector
{
@Override
public LODLevel getLODLevel(INode node, ILayoutData layout, Matrix33 viewMatrix)
{
if(canDrawChildLabels(node, layout, viewMatrix))
{
return LODLevel.LOD_HIGH;
}
return LODLevel.LOD_LOW;
}
protected double estimateNumberOfPixelsNeeded(INode node)
{
int numberOfLeafNodes = node.getNumberOfChildren();
int pixelsPerTaxon = 15;
return numberOfLeafNodes * pixelsPerTaxon;
}
protected boolean canDrawChildLabels(INode node, ILayoutData layout, Matrix33 viewMatrix)
{
Box2D boundingBox = layout.getBoundingBox(node);
double projectedBoxHeight = viewMatrix.transform(boundingBox).getHeight();
return estimateNumberOfPixelsNeeded(node) < projectedBoxHeight;
}
}