public void addTree(DrawableTree newTree) { TreeElement newElement = new TreeElement(this); newTree.setScaleType(DrawableTree.NO_SCALE_BAR); newElement.setScale(getWidth(), getHeight(), null); newElement.setTree(newTree); treeElements.add(newElement); super.addElement(newElement); FigureElement scaleElement = null; if (currentScaleType == DrawableTree.SCALE_AXIS) { scaleElement = new ScaleAxisElement(this); scaleElement.setZPosition(-5); // draw underneath the tree so grid lines aren't on top ((ScaleAxisElement) scaleElement).setTreeDrawer(newElement.getTreeDrawer()); addElement(scaleElement); scaleElements.put(newElement, scaleElement); } if (currentScaleType == DrawableTree.SCALE_BAR) { scaleElement = new ScaleBarElement(this); scaleElement.setMobile(true); ((ScaleBarElement) scaleElement).setTreeDrawer(newElement.getTreeDrawer()); addElement(scaleElement); scaleElements.put(newElement, scaleElement); } layoutTrees(); if (currentScaleType == DrawableTree.SCALE_AXIS && scaleElement != null) { scaleElement.setBounds( newElement.getX(), 0.9, 0.1, 0.01); // Width and height parts are ignored } if (currentScaleType == DrawableTree.SCALE_BAR && scaleElement != null) { scaleElement.setBounds( Math.max(0, newElement.getX() + newElement.getWidth() / 2.0 - 0.05), 0.9, 0.1, 0.1); // Width and height parts are ignored } }
/** * Note that there is a bit of disagreement regarding what controls the 'scale bar' and 'scale * axis' properties. In MultiTreeDisplays, this is a property of the tree. Here, since we use the * Figure interface, the ScaleBar and ScaleAxis are a type of FigureElement, and TreeFigure * controls which one (or none) is shown. * * @param type */ public void setScaleType(int type) { currentScaleType = type; // Remove all scale elements first for (TreeElement treeElement : treeElements) { removeScaleForTree(treeElement); } for (TreeElement treeElement : treeElements) { double x = treeElement.getX(); double y = treeElement.getY(); double width = treeElement.getWidth(); if (type == DrawableTree.SCALE_BAR) { ScaleBarElement scaleElement = new ScaleBarElement(this); scaleElement.setBounds( Math.max(0, x + width / 2.0 - 0.05), 0.9, 0.1, 0.1); // Width and height parts are ignored scaleElement.setMobile(true); scaleElement.setTreeDrawer(treeElement.getTreeDrawer()); treeElement.setBounds(x, y, width, 0.9); addElement(scaleElement); scaleElements.put(treeElement, scaleElement); } if (type == DrawableTree.SCALE_AXIS) { ScaleAxisElement scaleElement = new ScaleAxisElement(this); scaleElement.setZPosition(-5); // draw underneath the tree so grid lines aren't on top scaleElement.setBounds(x, 0.9, width, 0.075); // Width and height parts are ignored scaleElement.setTreeDrawer(treeElement.getTreeDrawer()); treeElement.setBounds(x, y, width, 0.9); addElement(scaleElement); scaleElements.put(treeElement, scaleElement); } } }