/* (non-Javadoc) * @see net.sourceforge.arbaro.tree.TreeTraversal#visitLeaf(net.sourceforge.arbaro.tree.Leaf) */ public boolean visitLeaf(Leaf leaf) { // prints povray code for the leaf String indent = " "; w.println( indent + "object { " + povrayDeclarationPrefix + "leaf " + transformationStr(leaf.getTransformation()) + "}"); // increment progress count exporter.incProgressCount(AbstractExporter.LEAF_PROGRESS_STEP); return true; }
/* (non-Javadoc) * @see net.sourceforge.arbaro.tree.TreeTraversal#enterStem(net.sourceforge.arbaro.tree.Stem) */ public boolean enterStem(Stem stem) { if (level >= 0 && stem.getLevel() < level) { return true; // look further for stems } else if (level >= 0 && stem.getLevel() > level) { return false; // go back to higher level } else { String indent = whitespace(stem.getLevel() * 2 + 4); NumberFormat fmt = FloatFormat.getInstance(); Enumeration sections = stem.sections(); if (sections.hasMoreElements()) { StemSection from = (StemSection) sections.nextElement(); StemSection to = null; while (sections.hasMoreElements()) { to = (StemSection) sections.nextElement(); w.println( indent + "cone { " + vectorStr(from.getPosition()) + ", " + fmt.format(from.getRadius()) + ", " + vectorStr(to.getPosition()) + ", " + fmt.format(to.getRadius()) + " }"); // put spheres where z-directions changes if (!from.getZ().equals(to.getPosition().sub(from.getPosition()).normalize())) { w.println( indent + "sphere { " + vectorStr(from.getPosition()) + ", " + fmt.format(from.getRadius() - 0.0001) + " }"); } from = to; } // put sphere at stem end /* FIXME? now using sections instead of segments, the spherical stem end * will be made from several cones instead of one shpere ... if ((to.getRadius() > 0.0001) || (lpar.nTaper>1 && lpar.nTaper<=2)) { w.println(indent + "sphere { " + vectorStr(to.getPosition()) + ", " + fmt.format(to.getRadius()-0.0001) + " }"); } */ } exporter.incProgressCount(AbstractExporter.STEM_PROGRESS_STEP); return true; } }