From: <adr...@us...> - 2010-10-17 15:29:32
|
Revision: 3838 http://reprap.svn.sourceforge.net/reprap/?rev=3838&view=rev Author: adrian-bowyer Date: 2010-10-17 15:29:25 +0000 (Sun, 17 Oct 2010) Log Message: ----------- Fixed (I hope) the foundation-laying bug (it wasn't...). Tested, but not exhaustively. Modified Paths: -------------- trunk/software/host/src/org/reprap/Main.java trunk/software/host/src/org/reprap/comms/GCodeReaderAndWriter.java trunk/software/host/src/org/reprap/geometry/EstimationProducer.java trunk/software/host/src/org/reprap/geometry/LayerProducer.java trunk/software/host/src/org/reprap/geometry/LayerRules.java trunk/software/host/src/org/reprap/geometry/Producer.java trunk/software/host/src/org/reprap/geometry/polygons/AllSTLsToBuild.java trunk/software/host/src/org/reprap/utilities/RrGraphics.java Modified: trunk/software/host/src/org/reprap/Main.java =================================================================== --- trunk/software/host/src/org/reprap/Main.java 2010-10-17 09:56:45 UTC (rev 3837) +++ trunk/software/host/src/org/reprap/Main.java 2010-10-17 15:29:25 UTC (rev 3838) @@ -21,6 +21,7 @@ import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; +import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JSplitPane; import javax.swing.KeyStroke; @@ -118,9 +119,9 @@ - JMenu viewMenu = new JMenu("View"); - viewMenu.setMnemonic(KeyEvent.VK_V); - menubar.add(viewMenu); +// JMenu viewMenu = new JMenu("View"); +// viewMenu.setMnemonic(KeyEvent.VK_V); +// menubar.add(viewMenu); @@ -178,13 +179,13 @@ manipMenu.add(reorder); - JMenuItem deleteSTLW = new JMenuItem("Delete selected object", KeyEvent.VK_W); - deleteSTLW.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, ActionEvent.CTRL_MASK)); - deleteSTLW.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent arg0) { - onDelete(); - }}); - manipMenu.add(deleteSTLW); +// JMenuItem deleteSTLW = new JMenuItem("Delete selected object", KeyEvent.VK_W); +// deleteSTLW.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, ActionEvent.CTRL_MASK)); +// deleteSTLW.addActionListener(new ActionListener() { +// public void actionPerformed(ActionEvent arg0) { +// onDelete(); +// }}); +// manipMenu.add(deleteSTLW); JMenuItem deleteSTL = new JMenuItem("Delete selected object", KeyEvent.VK_DELETE); deleteSTL.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); @@ -198,22 +199,22 @@ produceProduceB = new JMenuItem("Start build...", KeyEvent.VK_B); - produceProduceB.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, ActionEvent.CTRL_MASK)); - produceProduceB.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent arg0) { - onProduceB(); - }}); - //produceMenu.add(produceProduceB); +// produceProduceB.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, ActionEvent.CTRL_MASK)); +// produceProduceB.addActionListener(new ActionListener() { +// public void actionPerformed(ActionEvent arg0) { +// onProduceB(); +// }}); +// produceMenu.add(produceProduceB); cancelMenuItem = new JMenuItem("Cancel", KeyEvent.VK_P); cancelMenuItem.setEnabled(false); - cancelMenuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent arg0) { - if(producer != null) - producer.setCancelled(true); - }}); - - +// cancelMenuItem.addActionListener(new ActionListener() { +// public void actionPerformed(ActionEvent arg0) { +// if(producer != null) +// producer.setCancelled(true); +// }}); +// +// segmentPause = new JCheckBoxMenuItem("Pause before segment"); Modified: trunk/software/host/src/org/reprap/comms/GCodeReaderAndWriter.java =================================================================== --- trunk/software/host/src/org/reprap/comms/GCodeReaderAndWriter.java 2010-10-17 09:56:45 UTC (rev 3837) +++ trunk/software/host/src/org/reprap/comms/GCodeReaderAndWriter.java 2010-10-17 15:29:25 UTC (rev 3838) @@ -40,6 +40,7 @@ private double x, y, z, e; private RrGraphics simulationPlot = null; private String lastResp; + private boolean nonRunningWarn; /** * Stop sending a file (if we are). */ @@ -189,6 +190,7 @@ ringLines = new long[buflen]; head = 0; tail = 0; + nonRunningWarn = true; lineNumber = 0; //threadLock = false; exhaustBuffer = false; @@ -504,7 +506,9 @@ if(serialOutStream == null) { - Debug.d("bufferQueue: attempt to queue: " + cmd + " to a non-running output buffer."); + if(nonRunningWarn) + Debug.d("bufferQueue: attempt to queue: " + cmd + " to a non-running output buffer. Further attempts will not be reported."); + nonRunningWarn = false; return; } if(retries > 3) @@ -798,7 +802,7 @@ CommPortIdentifier commId = CommPortIdentifier.getPortIdentifier(portName); port = (SerialPort)commId.open(portName, 30000); } catch (NoSuchPortException e) { - Debug.e("Error opening port: " + portName); + Debug.d("Can't open port: " + portName + " - no RepRap attached."); return; } catch (PortInUseException e){ Modified: trunk/software/host/src/org/reprap/geometry/EstimationProducer.java =================================================================== --- trunk/software/host/src/org/reprap/geometry/EstimationProducer.java 2010-10-17 09:56:45 UTC (rev 3837) +++ trunk/software/host/src/org/reprap/geometry/EstimationProducer.java 2010-10-17 15:29:25 UTC (rev 3838) @@ -1,27 +1,27 @@ -package org.reprap.geometry; - -import org.reprap.geometry.Producer; -import org.reprap.gui.RepRapBuild; -import org.reprap.machines.Simulator; - -/** - * A specialisation of Producer that doesn't preview anything - * and always uses the virtual printer. This is useful to - * determine in advance the resource requirements (time and materials) - * to produce an assembly. - */ -public class EstimationProducer extends Producer { - - /** - * @param builder - * @throws Exception - */ - public EstimationProducer(RepRapBuild builder) throws Exception { - super(null, builder); - - layerRules.setPrinter(new Simulator()); - //reprap = new NullCartesianMachine(); - - } - -} +//package org.reprap.geometry; +// +//import org.reprap.geometry.Producer; +//import org.reprap.gui.RepRapBuild; +//import org.reprap.machines.Simulator; +// +///** +// * A specialisation of Producer that doesn't preview anything +// * and always uses the virtual printer. This is useful to +// * determine in advance the resource requirements (time and materials) +// * to produce an assembly. +// */ +//public class EstimationProducer extends Producer { +// +// /** +// * @param builder +// * @throws Exception +// */ +//// public EstimationProducer(RepRapBuild builder) throws Exception { +//// super(null, builder); +//// +//// layerRules.setPrinter(new Simulator()); +//// //reprap = new NullCartesianMachine(); +// +// } +// +//} Modified: trunk/software/host/src/org/reprap/geometry/LayerProducer.java =================================================================== --- trunk/software/host/src/org/reprap/geometry/LayerProducer.java 2010-10-17 09:56:45 UTC (rev 3837) +++ trunk/software/host/src/org/reprap/geometry/LayerProducer.java 2010-10-17 15:29:25 UTC (rev 3838) @@ -5,12 +5,12 @@ */ package org.reprap.geometry; -import java.io.IOException; +//import java.io.IOException; import org.reprap.Printer; import org.reprap.Attributes; import org.reprap.Preferences; -import org.reprap.ReprapException; +//import org.reprap.ReprapException; //import org.reprap.devices.pseudo.LinePrinter; import org.reprap.geometry.polygons.Rr2Point; //import org.reprap.geometry.polygons.RrCSGPolygonList; Modified: trunk/software/host/src/org/reprap/geometry/LayerRules.java =================================================================== --- trunk/software/host/src/org/reprap/geometry/LayerRules.java 2010-10-17 09:56:45 UTC (rev 3837) +++ trunk/software/host/src/org/reprap/geometry/LayerRules.java 2010-10-17 15:29:25 UTC (rev 3838) @@ -119,8 +119,7 @@ { printer = p; - bBox = bb; - + bBox = new RrRectangle(bb); notStartedYet = true; topDown = printer.getTopDown(); @@ -166,7 +165,7 @@ public RrRectangle getBox() { - return bBox; + return new RrRectangle(bBox); // Something horrible happens to return by reference here; hence copy... } public boolean getTopDown() { return topDown; } @@ -239,9 +238,9 @@ if(getMachineLayer() < getFoundationLayers()) { - if(getMachineLayer() == getFoundationLayers() - 2) - angle = e.getEvenHatchDirection(); - else +// if(getMachineLayer() == getFoundationLayers() - 2) +// angle = e.getEvenHatchDirection(); +// else angle = e.getOddHatchDirection(); } else { Modified: trunk/software/host/src/org/reprap/geometry/Producer.java =================================================================== --- trunk/software/host/src/org/reprap/geometry/Producer.java 2010-10-17 09:56:45 UTC (rev 3837) +++ trunk/software/host/src/org/reprap/geometry/Producer.java 2010-10-17 15:29:25 UTC (rev 3838) @@ -3,11 +3,16 @@ import javax.swing.JCheckBoxMenuItem; import org.reprap.Preferences; import org.reprap.Printer; +import org.reprap.Extruder; +import org.reprap.Attributes; import org.reprap.geometry.polygons.Rr2Point; import org.reprap.geometry.polygons.RrRectangle; import org.reprap.geometry.polygons.AllSTLsToBuild; import org.reprap.geometry.polygons.RrPolygonList; import org.reprap.geometry.polygons.RrPolygon; +import org.reprap.geometry.polygons.RrCSG; +import org.reprap.geometry.polygons.BooleanGrid; +import org.reprap.geometry.polygons.BooleanGridList; import org.reprap.gui.RepRapBuild; import org.reprap.utilities.Debug; import org.reprap.utilities.RrGraphics; @@ -44,10 +49,9 @@ allSTLs = bld.getSTLs(); - //stlc = new STLSlice(astl.things()); - RrRectangle gp = allSTLs.ObjectPlanRectangle(); - + gp = new RrRectangle(new Rr2Point(gp.x().low() - 6, gp.y().low() - 6), + new Rr2Point(gp.x().high() + 6, gp.y().high() + 6)); if(Preferences.simulate()) { simulationPlot = new RrGraphics("RepRap building simulation"); @@ -135,10 +139,10 @@ public void produce() throws Exception { - RrRectangle gp = layerRules.getBox(); +// RrRectangle gp = layerRules.getBox(); - gp = new RrRectangle(new Rr2Point(gp.x().low() - 6, gp.y().low() - 6), - new Rr2Point(gp.x().high() + 6, gp.y().high() + 6)); +// gp = new RrRectangle(new Rr2Point(gp.x().low() - 6, gp.y().low() - 6), +// new Rr2Point(gp.x().high() + 6, gp.y().high() + 6)); layerRules.getPrinter().startRun(layerRules); @@ -148,26 +152,26 @@ else { if(layerRules.getTopDown()) - produceAdditiveTopDown(gp); + produceAdditiveTopDown(); else Debug.e("Producer.produce(): bottom-up builds no longer supported."); //produceAdditiveGroundUp(gp); } } - //FIXME: so I work with BooleanGrids private void fillFoundationRectangle(Printer reprap, RrRectangle gp) throws Exception { -// RrCSG rect = RrCSG.RrCSGFromBox(gp); -// gp = gp.scale(1.1); -// Extruder e = reprap.getExtruder(); -// RrCSGPolygon rcp = new RrCSGPolygon(rect, gp, new Attributes(e.getMaterial(), null, null, -// e.getAppearance())); -// rcp.divide(Preferences.tiny(), 1.01); -// RrPolygonList h = rcp.hatch(layerRules.getHatchDirection(e), layerRules.getHatchWidth(e)); -// LayerProducer lp = new LayerProducer(h, layerRules, simulationPlot); -// lp.plot(); -// reprap.getExtruder().stopExtruding(); + RrPolygonList shield = new RrPolygonList(); + Extruder e = reprap.getExtruder(); + Attributes fa = new Attributes(e.getMaterial(), null, null, e.getAppearance()); +// if(Preferences.loadGlobalBool("Shield")) // Should the foundation have a shield, or not? +// shield.add(allSTLs.shieldPolygon(fa)); + RrCSG rect = RrCSG.RrCSGFromBox(gp); + BooleanGrid bg = new BooleanGrid(rect, gp.scale(1.1), fa); + RrPolygonList h[] = {shield, bg.hatch(layerRules.getHatchDirection(e), layerRules.getHatchWidth(e), bg.attribute())}; + LayerProducer lp = new LayerProducer(h, layerRules, simulationPlot); + lp.plot(); + reprap.getExtruder().stopExtruding(); //reprap.setFeedrate(reprap.getFastFeedrateXY()); } @@ -227,81 +231,12 @@ } } -// /** -// * @throws Exception -// */ -// private void produceAdditiveGroundUp(RrRectangle gp) throws Exception -// { -// bld.mouseToWorld(); -// -// Printer reprap = layerRules.getPrinter(); -// -// layFoundationGroundUp(gp); -// -// reprap.setSeparating(true); -// -// while(layerRules.getMachineLayer() < layerRules.getMachineLayerMax()) -// { -// -// if (reprap.isCancelled()) -// break; -// waitWhilePaused(); -// -// Debug.d("Commencing layer at " + layerRules.getMachineZ()); -// -// reprap.startingLayer(layerRules); -// -// // Change Z height -// //reprap.singleMove(reprap.getX(), reprap.getY(), layerRules.getMachineZ(), reprap.getFastFeedrateZ()); -// -// reprap.waitWhileBufferNotEmpty(); -// reprap.slowBuffer(); -// -// BooleanGridList slice; -// -// RrPolygonList allPolygons[] = new RrPolygonList[reprap.getExtruders().length]; -// for(int extruder = 0; extruder < reprap.getExtruders().length; extruder++) -// allPolygons[extruder] = new RrPolygonList(); -// -// for(int i = 0; i < allSTLs.size(); i++) -// { -// slice = allSTLs.slice(i, layerRules.getModelZ() + layerRules.getZStep()*0.5, -// reprap.getExtruders()); -// -// if(slice.size() > 0) -// { -// RrPolygonList fills = slice.computeInfill(layerRules); -// RrPolygonList borders = slice.computeOutlines(layerRules, fills); -// for(int pol = 0; pol < borders.size(); pol++) -// { -// RrPolygon p = borders.polygon(pol); -// allPolygons[p.getAttributes().getExtruder().getID()].add(p); -// } -// for(int pol = 0; pol < fills.size(); pol++) -// { -// RrPolygon p = fills.polygon(pol); -// allPolygons[p.getAttributes().getExtruder().getID()].add(p); -// } -// } -// } -// reprap.finishedLayer(layerRules); -// reprap.betweenLayers(layerRules); -// layer = null; -// slice = null; -// //slice.destroy(); -// allSTLs.destroyLayer(); -// -// layerRules.step(reprap.getExtruder()); -// reprap.setSeparating(false); -// } -// -// reprap.terminate(); -// } + /** * @throws Exception */ - private void produceAdditiveTopDown(RrRectangle gp) throws Exception + private void produceAdditiveTopDown() throws Exception { bld.mouseToWorld(); @@ -321,9 +256,9 @@ totalPhysicalExtruders++; if(thisExtruder - lastExtruder != 1) { - Debug.d("Producer.produceAdditiveTopDown(): Physical extruders out of sequence: " + + Debug.e("Producer.produceAdditiveTopDown(): Physical extruders out of sequence: " + lastExtruder + " then " + thisExtruder); - Debug.d("(Physical extruder addresses should be sequential (or equal) starting at 0.)"); + Debug.e("(Physical extruder addresses should be sequential (or equal) starting at 0.)"); } lastExtruder = thisExtruder; } @@ -362,6 +297,7 @@ { RrPolygonList fills = allSTLs.computeInfill(stl, layerRules); //, startNearHere); RrPolygonList borders = allSTLs.computeOutlines(stl, layerRules, fills, shield); + shield = false; RrPolygonList support = allSTLs.computeSupport(stl, layerRules); borders = borders.nearEnds(startNearHere, false, -1); if(borders.size() > 0) @@ -383,19 +319,19 @@ } for(int pol = 0; pol < borders.size(); pol++) { - shield = false; + //shield = false; RrPolygon p = borders.polygon(pol); allPolygons[p.getAttributes().getExtruder().getPhysicalExtruderNumber()].add(p); } for(int pol = 0; pol < fills.size(); pol++) { - shield = false; + //shield = false; RrPolygon p = fills.polygon(pol); allPolygons[p.getAttributes().getExtruder().getPhysicalExtruderNumber()].add(p); } for(int pol = 0; pol < support.size(); pol++) { - shield = false; + //shield = false; RrPolygon p = support.polygon(pol); allPolygons[p.getAttributes().getExtruder().getPhysicalExtruderNumber()].add(p); } @@ -424,7 +360,7 @@ } - layFoundationTopDown(gp); + layFoundationTopDown(layerRules.getBox()); reprap.terminate(); } Modified: trunk/software/host/src/org/reprap/geometry/polygons/AllSTLsToBuild.java =================================================================== --- trunk/software/host/src/org/reprap/geometry/polygons/AllSTLsToBuild.java 2010-10-17 09:56:45 UTC (rev 3837) +++ trunk/software/host/src/org/reprap/geometry/polygons/AllSTLsToBuild.java 2010-10-17 15:29:25 UTC (rev 3838) @@ -594,7 +594,7 @@ return result; } - Debug.d("STLSlice.getNextPolygon(): exhausted edge list!"); + Debug.d("AllSTLsToBuild.getNextPolygon(): exhausted edge list!"); return result; } @@ -773,6 +773,26 @@ } /** + * Compute the polygon to lay down for the machine to wipe its node on. + * @param a + * @return + */ + public RrPolygon shieldPolygon(Attributes a) + { + RrRectangle rr = ObjectPlanRectangle(); + Rr2Point corner = Rr2Point.add(rr.sw(), new Rr2Point(-3, -3)); + RrPolygon ell = new RrPolygon(a, false); + ell.add(corner); + ell.add(Rr2Point.add(corner, new Rr2Point(0, 10))); + ell.add(Rr2Point.add(corner, new Rr2Point(-2, 10))); + ell.add(Rr2Point.add(corner, new Rr2Point(-2, -2))); + ell.add(Rr2Point.add(corner, new Rr2Point(20, -2))); + ell.add(Rr2Point.add(corner, new Rr2Point(20, 0))); + ell.add(corner); + return ell; + } + + /** * Compute the outline polygons for this set of patterns. * @param layerConditions * @param hatchedPolygons @@ -813,19 +833,7 @@ try { if(shield && Preferences.loadGlobalBool("Shield")) - { - RrRectangle rr = layerConditions.getBox(); - Rr2Point corner = Rr2Point.add(rr.sw(), new Rr2Point(-3, -3)); - RrPolygon ell = new RrPolygon(borderPolygons.polygon(0).getAttributes(), false); - ell.add(corner); - ell.add(Rr2Point.add(corner, new Rr2Point(0, 10))); - ell.add(Rr2Point.add(corner, new Rr2Point(-2, 10))); - ell.add(Rr2Point.add(corner, new Rr2Point(-2, -2))); - ell.add(Rr2Point.add(corner, new Rr2Point(20, -2))); - ell.add(Rr2Point.add(corner, new Rr2Point(20, 0))); - ell.add(corner); - borderPolygons.add(0, ell); - } + borderPolygons.add(0, shieldPolygon(borderPolygons.polygon(0).getAttributes())); } catch (Exception ex) {} } Modified: trunk/software/host/src/org/reprap/utilities/RrGraphics.java =================================================================== --- trunk/software/host/src/org/reprap/utilities/RrGraphics.java 2010-10-17 09:56:45 UTC (rev 3837) +++ trunk/software/host/src/org/reprap/utilities/RrGraphics.java 2010-10-17 15:29:25 UTC (rev 3838) @@ -102,7 +102,7 @@ /** * Pixels */ - private final int frame = 800; + private final int frame = 600; /** * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |