/// <summary> /// Runs the slicer /// </summary> /// <param name="file">path to .stl file to slice</param> /// <param name="centerx"></param> /// <param name="centery"></param> /// <returns></returns> public bool RunSliceNew(string file, float centerx, float centery) { // check to make sure the slicer isn't still running from last time if (procConvert != null) { MessageBox.Show(Trans.T("L_LAST_SLICE_RUNNING"), Trans.T("L_ERROR"), MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } // Make sure we have the path to the slicer and it is valid string exe = findSlic3rExecutable(); if (exe == null) { MessageBox.Show(Trans.T("L_SLIC3R_NOT_FOUND"), Trans.T("L_ERROR"), MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } // Get the print settings and add the information to the slicing info panal. Analyze the .stl FormPrinterSettings ps = Main.printerSettings; SlicingInfo.Start("Slic3r"); SlicingInfo.SetAction(Trans.T("L_ANALYSING_STL")); try { STL stl = new STL(); stl.Load(file); stl.UpdateBoundingBox(); if (stl.xMin > ps.BedLeft && stl.yMin > ps.BedFront && stl.xMax < ps.BedLeft + ps.PrintAreaWidth && stl.yMax < ps.BedFront + ps.PrintAreaDepth) { // User assigned valid position, so we use this centerx = stl.xMin + (stl.xMax - stl.xMin) / 2; centery = stl.yMin + (stl.yMax - stl.yMin) / 2; } stl.Clear(); } catch (Exception e) { Main.connection.log(e.ToString(), false, 2); SlicingInfo.Stop(); return(false); } SlicingInfo.SetAction(Trans.T("L_SLICING_STL")); string dir = Main.globalSettings.Workdir; string config = dir + Path.DirectorySeparatorChar + "slic3r.ini"; // Problem is somewhere here. If I uncomment the next line and get rid of the other cdir declaration than it doesn't work. But as it is right now, it won't read the // ini files. string cdir = Main.main.slicerPanel.slic3rDirectory; //string cdir = dir; IniFile ini = new IniFile(); //BasicConfiguration b = BasicConfiguration.basicConf; string fPrinter = cdir + Path.DirectorySeparatorChar + "print" + Path.DirectorySeparatorChar + Main.printerModel.Slic3rPrint + ".ini"; ini.read(fPrinter); IniFile ini2 = new IniFile(); ini2.read(cdir + Path.DirectorySeparatorChar + "printer" + Path.DirectorySeparatorChar + Main.printerModel.Slic3rPrinter + ".ini"); IniFile ini3 = new IniFile(); ini3.read(cdir + Path.DirectorySeparatorChar + "filament" + Path.DirectorySeparatorChar + Main.printerModel.Slic3rFilament1 + ".ini"); // IniFile ini3_2 = new IniFile(); //if(Main.conn.numberExtruder>1) // ini3_2.read(cdir + Path.DirectorySeparatorChar + "filament" + Path.DirectorySeparatorChar + Main.printerModel.Slic3rFilament2 + ".ini"); //IniFile ini3_3 = new IniFile(); //if (Main.conn.numberExtruder > 2) // ini3_3.read(cdir + Path.DirectorySeparatorChar + "filament" + Path.DirectorySeparatorChar + Main.printerModel.Slic3rFilament3 + ".ini"); //if (Main.conn.numberExtruder > 1) // ini3.merge(ini3_2); //if (Main.conn.numberExtruder > 2) // ini3.merge(ini3_3); ini.add(ini2); ini.add(ini3); // If we are in developer mode then don't add support or rafts or calibrate the height if (!Main.main.DeveloperMode) { ini.AddSupportandRaft(); ini.CalibrateHeight(); } ini.flatten(); ini.write(config); procConvert = new Process(); try { string basedir = (string)Main.main.repetierKey.GetValue("installPath", ""); /*string exname = "slic3r.exe"; * if (Environment.OSVersion.Platform == PlatformID.Unix) * exname = "slic3r.pl"; * if (Main.IsMac) * exname = "MacOS" + Path.DirectorySeparatorChar + "slic3r"; * string exe = basedir + Path.DirectorySeparatorChar + "Slic3r" + Path.DirectorySeparatorChar + exname; * if (File.Exists(BasicConfiguration.basicConf.Slic3rExecutable)) * exe = BasicConfiguration.basicConf.Slic3rExecutable;*/ slicefile = file; // TODO: Not needed?? string target = StlToGCode(file); if (File.Exists(target)) { File.Delete(target); } procConvert.EnableRaisingEvents = true; procConvert.Exited += new EventHandler(ConversionExited); procConvert.StartInfo.FileName = Main.IsMono ? exe : wrapQuotes(exe); StringBuilder sb = new StringBuilder(); sb.Append("--load "); sb.Append(wrapQuotes(config)); sb.Append(" --print-center "); sb.Append(centerx.ToString("0", GCode.format)); sb.Append(","); sb.Append(centery.ToString("0", GCode.format)); sb.Append(" -o "); sb.Append(wrapQuotes(StlToGCode(file))); sb.Append(" "); sb.Append(wrapQuotes(file)); procConvert.StartInfo.Arguments = sb.ToString(); procConvert.StartInfo.UseShellExecute = false; procConvert.StartInfo.RedirectStandardOutput = true; procConvert.OutputDataReceived += new DataReceivedEventHandler(OutputDataHandler); procConvert.StartInfo.RedirectStandardError = true; procConvert.ErrorDataReceived += new DataReceivedEventHandler(OutputDataHandler); procConvert.Start(); // Start the asynchronous read of the standard output stream. procConvert.BeginOutputReadLine(); procConvert.BeginErrorReadLine(); //Main.main.tab.SelectedTab = Main.main.tabPrint; } catch (Exception e) { Main.connection.log(e.ToString(), false, 2); } return(true); }