/** * parseLayers is an improvement on the old parseLayers from Noah, etc. 's dualstrusion, but uses * the same basic method because skeinforge is what it is. look for layer tags, break up the file * using those tags. * * @param source * @return */ private LinkedList<Layer> parseLayers(GCodeSource source) { final LinkedList<Layer> result = new LinkedList<Layer>(); String line; for (Iterator<String> it = source.iterator(); it.hasNext(); ) { line = it.next(); if (line.startsWith("(<layer>")) { // Get the layer height (or whatever SF claims it is) float layerHeight = 0; try { layerHeight = Float.parseFloat(line.split(" ")[1]); } catch (NumberFormatException e) { Base.logger.log( Level.SEVERE, "one of your layer heights was unparseable, " + "please check and make sure all of them are in the format (<layer> 0.00)"); } // collect every command up to the end of the layer final List<String> accumulate = new ArrayList<String>(); // String next = it.next(); actually, let's keep the initial layer tag String next = line; while (!next.startsWith("(</layer>)")) { accumulate.add(next); next = it.next(); } // skip empty layers if (accumulate.size() > 1) result.add(new Layer(layerHeight, accumulate)); } } return result; }
/// inserts the passed gcode at specified location, 0 indexed. public void add(int location, GCodeSource toAdd) { add(location, toAdd.asList()); }
/// appends an entire GCode source file. public void add(GCodeSource toAdd) { add(toAdd.asList()); }
public MutableGCodeSource(GCodeSource shallowCopy) { source.addAll(shallowCopy.asList()); }