From 354369b82c2c2699124e7fc631fb649d0b51da34 Mon Sep 17 00:00:00 2001 From: Thomas Oster <thomas.oster@rwth-aachen.de> Date: Thu, 27 Sep 2012 13:50:55 +0200 Subject: [PATCH] EpliogCutter can only process parts in a fixed order, so we have to split jobs with many parts --- .../liblasercut/drivers/EpilogCutter.java | 75 ++++++++++++++++--- 1 file changed, 63 insertions(+), 12 deletions(-) diff --git a/src/com/t_oster/liblasercut/drivers/EpilogCutter.java b/src/com/t_oster/liblasercut/drivers/EpilogCutter.java index b36b4bc..864324c 100644 --- a/src/com/t_oster/liblasercut/drivers/EpilogCutter.java +++ b/src/com/t_oster/liblasercut/drivers/EpilogCutter.java @@ -310,27 +310,77 @@ abstract class EpilogCutter extends LaserCutter } } - @Override - public void sendJob(LaserJob job, ProgressListener pl) throws IllegalJobException, SocketTimeoutException, UnsupportedEncodingException, IOException, UnknownHostException, Exception + public void realSendJob(LaserJob job, ProgressListener pl, int number, int count) throws UnsupportedEncodingException, IOException, UnknownHostException, Exception { - pl.progressChanged(this, 0); - pl.taskChanged(this, "checking job"); - //Perform santiy checks - checkJob(job); - pl.taskChanged(this, "generating data"); + String nb = count > 1 ? "("+number+"/"+count+")" : ""; + pl.taskChanged(this, "generating"+nb); //Generate all the data byte[] pjlData = generatePjlData(job); - pl.progressChanged(this, 40); + pl.progressChanged(this, (int) ((double) 40*number/count)); //connect to lasercutter - pl.taskChanged(this, "connecting"); + pl.taskChanged(this, "connecting"+nb); connect(); - pl.progressChanged(this, 60); + pl.progressChanged(this, (int) ((double) 60*number/count)); //send job - pl.taskChanged(this, "sending"); + pl.taskChanged(this, "sending"+nb); sendPjlJob(job, pjlData); - pl.progressChanged(this, 90); + pl.progressChanged(this, (int) ((double) 90*number/count)); //disconnect disconnect(); + } + + @Override + public void sendJob(LaserJob job, ProgressListener pl) throws IllegalJobException, SocketTimeoutException, UnsupportedEncodingException, IOException, UnknownHostException, Exception + { + pl.progressChanged(this, 0); + pl.taskChanged(this, "checking job"); + //Perform santiy checks + checkJob(job); + //split the job because epilog doesn't support many combinations + List<List<JobPart>> jobs = new LinkedList<List<JobPart>>(); + List<JobPart> toDo = job.getParts(); + while(!toDo.isEmpty()) + { + List<JobPart> currentSplit = new LinkedList<JobPart>(); + if (toDo.get(0) instanceof VectorPart) + {//we need an empty rasterPart before + currentSplit.add(new RasterPart(this.getLaserPropertyForRasterPart())); + } + else if (toDo.get(0) instanceof RasterPart) + { + currentSplit.add(toDo.get(0)); + toDo.remove(0); + } + else if (toDo.get(0) instanceof Raster3dPart) + { + //we need an empty raster part with the same property + currentSplit.add(new RasterPart(((Raster3dPart) toDo.get(0)).getLaserProperty(0))); + currentSplit.add(toDo.get(0)); + toDo.remove(0); + //and nothing else in that part + jobs.add(currentSplit); + continue; + } + //add all following vector parts + while (!toDo.isEmpty() && toDo.get(0) instanceof VectorPart) + { + currentSplit.add(toDo.get(0)); + toDo.remove(0); + } + jobs.add(currentSplit); + } + int number = 0; + int size = jobs.size(); + for(List<JobPart> current : jobs) + { + number++; + LaserJob j = new LaserJob("("+number+"/"+size+")"+job.getTitle(), job.getName(), job.getUser(), job.getResolution()); + for (JobPart p:current) + { + j.addPart(p); + } + this.realSendJob(j, pl, number, size); + } pl.progressChanged(this, 100); } @@ -708,6 +758,7 @@ abstract class EpilogCutter extends LaserCutter PrintStream wrt = new PrintStream(pjlJob, true, "US-ASCII"); wrt.write(generatePjlHeader(job)); + wrt.write(generateRasterPCL(job, null)); for (JobPart p : job.getParts()) { if (p instanceof VectorPart) -- GitLab