/* public void RunSlice(string file,float centerx,float centery) * { * if (procConvert != null) * { * MessageBox.Show("Last slice job still running. Slicing of new job is canceled.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); * return; * } * SlicingInfo.Start("Slic3r"); * SlicingInfo.SetAction("Analyzing STL file ..."); * try * { * STL stl = new STL(); * stl.Load(file); * stl.UpdateBoundingBox(); * if (stl.xMin > 0 && stl.yMin > 0 && stl.xMax < Main.printerSettings.PrintAreaWidth && stl.yMax < Main.printerSettings.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.conn.log(e.ToString(), false, 2); * SlicingInfo.Stop(); * return; * } * SlicingInfo.SetAction("Slicing STL file ..."); * procConvert = new Process(); * try * { * string basedir = (string)Main.main.PiMakerKey.GetValue("installPath",""); * string exname = "slic3r.exe"; * if (Environment.OSVersion.Platform == PlatformID.Unix) * exname = "bin"+Path.DirectorySeparatorChar+"slic3r"; * if (Main.IsMac) * exname = "MacOS" + Path.DirectorySeparatorChar + "slic3r"; * string exe = basedir + Path.DirectorySeparatorChar + "Slic3r" + Path.DirectorySeparatorChar + exname; * slicefile = file; * 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("--nozzle-diameter "); * sb.Append(textNozzleDiameter.Text); * sb.Append(" "); * sb.Append(" -o "); * sb.Append(wrapQuotes(StlToGCode(file))); * sb.Append(" "); * if (checkRelativeE.Checked) * sb.Append("--use-relative-e-distances "); * if (checkComments.Checked) * sb.Append("--gcode-comments "); * // else * // sb.Append("--gcode-comments 0 "); * sb.Append("-j "); * sb.Append(textNumberOfThreads.Text); * if (checkRandomizeStartingPoints.Checked) * sb.Append(" --randomize-start"); * sb.Append(" --z-offset "); * sb.Append(textZOffset.Text); * sb.Append(" --filament-diameter "); * sb.Append(textDiameter.Text); * sb.Append(" --extrusion-multiplier "); * sb.Append(textPackingDensity.Text); * sb.Append(" --temperature "); * sb.Append(textTemperature.Text); * sb.Append(" --infill-speed "); * sb.Append(textPrintFeedrate.Text); * sb.Append(" --solid-infill-speed "); * sb.Append(textSolidInfillSpeed.Text); * sb.Append(" --travel-speed "); * sb.Append(textTravelFeedrate.Text); * sb.Append(" --bridge-speed "); * sb.Append(textBridgeSpeed.Text); * sb.Append(" --perimeter-speed "); * sb.Append(textPerimeterFeedrate.Text); * sb.Append(" --small-perimeter-speed "); * sb.Append(textSmallPerimeterSpeed.Text); * sb.Append(" --bridge-flow-ratio "); * sb.Append(textBridgeFlowRatio.Text); * sb.Append(" --layer-height "); * sb.Append(textLayerHeight.Text); * sb.Append(" --first-layer-speed "); * sb.Append(textFirstLayerSpeed.Text); * sb.Append(" --first-layer-height "); * sb.Append(textFirstLayerHeight.Text); * sb.Append(" --infill-every-layers "); * sb.Append(textInfillEvery.Text); * sb.Append(" --perimeters "); * sb.Append(textPerimeters.Text); * sb.Append(" --solid-layers "); * sb.Append(textSolidLayers.Text); * sb.Append(" --fill-density "); * sb.Append(textFillDensity.Text); * sb.Append(" --fill-angle "); * sb.Append(textFillAngle.Text); * sb.Append(" --fill-pattern "); * sb.Append(comboFillPattern.SelectedItem); * sb.Append(" --solid-fill-pattern "); * sb.Append(comboSolidFillPattern.SelectedItem); * sb.Append(" --retract-length "); * sb.Append(textRetLength.Text); * sb.Append(" --retract-speed "); * sb.Append(textRetSpeed.Text); * sb.Append(" --retract-restart-extra "); * sb.Append(textRetExtraDistance.Text); * sb.Append(" --retract-before-travel "); * sb.Append(textRetMinTravel.Text); * sb.Append(" --retract-lift "); * sb.Append(textRetLift.Text); * sb.Append(" --skirts "); * sb.Append(textSkirtLoops.Text); * sb.Append(" --skirt-distance "); * sb.Append(textSkirtDistance.Text); * sb.Append(" --skirt-height "); * sb.Append(textSkirtHeight.Text); * sb.Append(" --extrusion-width "); * sb.Append(textExtrusionWidth.Text); * sb.Append(" --brim-width "); * sb.Append(textBrim.Text); * sb.Append(" --support-material-threshold "); * sb.Append(textOverhangTreshold.Text); * sb.Append(" --support-material-pattern "); * sb.Append(comboSupportPattern.SelectedItem); * sb.Append(" --support-material-spacing "); * sb.Append(textPatternSpacing.Text); * sb.Append(" --support-material-angle "); * sb.Append(textPatternAngle.Text); * sb.Append(" --print-center "); * sb.Append(centerx.ToString("0",GCode.format)); * sb.Append(","); * sb.Append(centery.ToString("0", GCode.format)); * if (checkEnableCooling.Checked) * { * sb.Append(" --cooling --bridge-fan-speed "); * sb.Append(textCoolBridgeFanSpeed.Text); * sb.Append(" --disable-fan-first-layers "); * sb.Append(textCoolDisableLayer.Text); * sb.Append(" --fan-below-layer-time "); * sb.Append(textCoolEnableBelow.Text); * sb.Append(" --max-fan-speed "); * sb.Append(textCoolMaxFanSpeed.Text); * sb.Append(" --min-fan-speed "); * sb.Append(textCoolMinFanSpeed.Text); * sb.Append(" --min-print-speed "); * sb.Append(textCoolMinPrintSpeed.Text); * sb.Append(" --slowdown-below-layer-time "); * sb.Append(textCoolSlowDownBelow.Text); * } * if (checkGenerateSupportMaterial.Checked) * { * sb.Append(" --support-material --support-material-tool " + comboSupportMaterialTool.SelectedIndex); * } * sb.Append(" --gcode-flavor "); * switch (comboGCodeFlavor.SelectedIndex) * { * case 0: * default: * sb.Append("reprap"); * break; * case 1: * sb.Append("teacup"); * break; * case 2: * sb.Append("makerbot"); * break; * case 3: * sb.Append("mach3"); * break; * case 4: * sb.Append("no-extrusion"); * break; * } * sb.Append(" --first-layer-temperature "); * sb.Append(textFirstLayerTemperature.Text); * sb.Append(" --bed-temperature "); * sb.Append(textBedTemperature.Text); * sb.Append(" --first-layer-bed-temperature "); * sb.Append(textFirstLayerBedTemperature.Text); * if (checkFanAlwaysEnabled.Checked) * { * sb.Append(" --fan-always-on"); * } * sb.Append(" --start-gcode "); * sb.Append(wrapQuotes(basedir+Path.DirectorySeparatorChar+"empty.txt")); * sb.Append(" --end-gcode "); * sb.Append(wrapQuotes(basedir+Path.DirectorySeparatorChar+"empty.txt")); * sb.Append(" "); * sb.Append(wrapQuotes(file)); * Main.conn.log(sb.ToString(), false, 3); * 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.conn.log(e.ToString(), false, 2); * } * }*/ /* public void RunSliceExternal(string file, float centerx, float centery) * { * if (procConvert != null) * { * MessageBox.Show("Last slice job still running. Slicing of new job is canceled.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); * return; * } * SlicingInfo.Start("External Slic3r"); * SlicingInfo.SetAction("Analyzing STL file ..."); * try * { * STL stl = new STL(); * stl.Load(file); * stl.UpdateBoundingBox(); * if (stl.xMin > 0 && stl.yMin > 0 && stl.xMax < Main.printerSettings.PrintAreaWidth && stl.yMax < Main.printerSettings.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.conn.log(e.ToString(), false, 2); * SlicingInfo.Stop(); * return; * } * SlicingInfo.SetAction("Slicing STL file ..."); * procConvert = new Process(); * try * { * string basedir = (string)Main.main.PiMakerKey.GetValue("installPath", ""); * string exname = "slic3r.exe"; * if (Environment.OSVersion.Platform == PlatformID.Unix) * exname = "bin" + Path.DirectorySeparatorChar + "slic3r"; * if (Main.IsMac) * exname = "MacOS" + Path.DirectorySeparatorChar + "slic3r"; * string exe = basedir + Path.DirectorySeparatorChar + "Slic3r" + Path.DirectorySeparatorChar + exname; * if (File.Exists(BasicConfiguration.basicConf.ExternalSlic3rPath)) * exe = BasicConfiguration.basicConf.ExternalSlic3rPath; * * slicefile = file; * 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(BasicConfiguration.basicConf.ExternalSlic3rIniFile)); * 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.conn.log(e.ToString(), false, 2); * } * }*/ public void RunSliceNew(string file, float centerx, float centery) { if (procConvert != null) { MessageBox.Show("Last slice job still running. Slicing of new job is canceled.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } FormPrinterSettings ps = Main.printerSettings; SlicingInfo.Start("Slic3r"); SlicingInfo.SetAction("Analyzing STL file ..."); 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.conn.log(e.ToString(), false, 2); SlicingInfo.Stop(); return; } SlicingInfo.SetAction("Slicing STL file ..."); string dir = Main.globalSettings.Workdir; string config = dir + Path.DirectorySeparatorChar + "slic3r.ini"; string cdir = Main.main.slicerPanel.slic3rDirectory; IniFile ini = new IniFile(); BasicConfiguration b = BasicConfiguration.basicConf; string fPrinter = cdir + Path.DirectorySeparatorChar + "print" + Path.DirectorySeparatorChar + b.Slic3rPrintSettings + ".ini"; ini.read(fPrinter); IniFile ini2 = new IniFile(); ini2.read(cdir + Path.DirectorySeparatorChar + "printer" + Path.DirectorySeparatorChar + b.Slic3rPrinterSettings + ".ini"); IniFile ini3 = new IniFile(); ini3.read(cdir + Path.DirectorySeparatorChar + "filament" + Path.DirectorySeparatorChar + b.Slic3rFilamentSettings + ".ini"); IniFile ini3_2 = new IniFile(); ini3_2.read(cdir + Path.DirectorySeparatorChar + "filament" + Path.DirectorySeparatorChar + b.Slic3rFilament2Settings + ".ini"); IniFile ini3_3 = new IniFile(); ini3_3.read(cdir + Path.DirectorySeparatorChar + "filament" + Path.DirectorySeparatorChar + b.Slic3rFilament3Settings + ".ini"); ini3.merge(ini3_2); ini3.merge(ini3_3); ini.add(ini2); ini.add(ini3); ini.flatten(); ini.write(config); procConvert = new Process(); try { string basedir = (string)Main.main.PiMakerKey.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; 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.conn.log(e.ToString(), false, 2); } }
private void buttonKillSlicing_Click(object sender, EventArgs e) { Main.main.skeinforge.KillSlice(); Main.slic3r.KillSlice(); SlicingInfo.Stop(); }
public void RunSlice(string file, float centerx, float centery) { if (procConvert != null) { MessageBox.Show("Last slice job still running. Slicing of new job is canceled.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } SlicingInfo.Start("Slic3r"); SlicingInfo.SetAction("Analyzing STL file ..."); try { STL stl = new STL(); stl.Load(file); stl.UpdateBoundingBox(); if (stl.xMin > 0 && stl.yMin > 0 && stl.xMax < Main.printerSettings.PrintAreaWidth && stl.yMax < Main.printerSettings.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.conn.log(e.ToString(), false, 2); SlicingInfo.Stop(); return; } SlicingInfo.SetAction("Slicing STL file ..."); procConvert = new Process(); try { string basedir = (string)Main.main.repetierKey.GetValue("installPath", ""); string exname = "slic3r.exe"; if (Environment.OSVersion.Platform == PlatformID.Unix) { exname = "bin" + Path.DirectorySeparatorChar + "slic3r"; } if (Main.IsMac) { exname = "MacOS" + Path.DirectorySeparatorChar + "slic3r"; } string exe = basedir + Path.DirectorySeparatorChar + "Slic3r" + Path.DirectorySeparatorChar + exname; slicefile = file; procConvert.EnableRaisingEvents = true; procConvert.Exited += new EventHandler(ConversionExited); procConvert.StartInfo.FileName = Main.IsMono ? exe : wrapQuotes(exe); StringBuilder sb = new StringBuilder(); sb.Append("--nozzle-diameter "); sb.Append(textNozzleDiameter.Text); sb.Append(" "); if (checkNoExtrusion.Checked) { sb.Append("--no-extrusion "); } if (checkRelativeE.Checked) { sb.Append("--use-relative-e-distances "); } if (checkComments.Checked) { sb.Append("--gcode-comments "); } // else // sb.Append("--gcode-comments 0 "); sb.Append("--z-offset "); sb.Append(textZOffset.Text); sb.Append(" --filament-diameter "); sb.Append(textDiameter.Text); sb.Append(" --extrusion-multiplier "); sb.Append(textPackingDensity.Text); sb.Append(" --temperature "); sb.Append(textTemperature.Text); sb.Append(" --infill-speed "); sb.Append(textPrintFeedrate.Text); sb.Append(" --solid-infill-speed "); sb.Append(textSolidInfillSpeed.Text); sb.Append(" --travel-speed "); sb.Append(textTravelFeedrate.Text); sb.Append(" --bridge-speed "); sb.Append(textBridgeSpeed.Text); sb.Append(" --perimeter-speed "); sb.Append(textPerimeterFeedrate.Text); sb.Append(" --small-perimeter-speed "); sb.Append(textSmallPerimeterSpeed.Text); sb.Append(" --bottom-layer-speed-ratio "); sb.Append(textBottomLayerRatio.Text); sb.Append(" --bridge-flow-ratio "); sb.Append(textBridgeFlowRatio.Text); sb.Append(" --layer-height "); sb.Append(textLayerHeight.Text); sb.Append(" --infill-every-layers "); sb.Append(textInfillEvery.Text); sb.Append(" --perimeters "); sb.Append(textPerimeters.Text); sb.Append(" --solid-layers "); sb.Append(textSolidLayers.Text); sb.Append(" --fill-density "); sb.Append(textFillDensity.Text); sb.Append(" --fill-angle "); sb.Append(textFillAngle.Text); sb.Append(" --fill-pattern "); sb.Append(comboFillPattern.Text); sb.Append(" --solid-fill-pattern "); sb.Append(comboSolidFillPattern.Text); sb.Append(" --retract-length "); sb.Append(textRetLength.Text); sb.Append(" --retract-speed "); sb.Append(textRetSpeed.Text); sb.Append(" --retract-restart-extra "); sb.Append(textRetExtraDistance.Text); sb.Append(" --retract-before-travel "); sb.Append(textRetMinTravel.Text); sb.Append(" --retract-lift "); sb.Append(textRetLift.Text); sb.Append(" --skirts "); sb.Append(textSkirtLoops.Text); sb.Append(" --skirt-distance "); sb.Append(textSkirtDistance.Text); sb.Append(" --skirt-height "); sb.Append(textSkirtHeight.Text); sb.Append(" --extrusion-width-ratio "); sb.Append(textExtrusionWidthRatio.Text); sb.Append(" --print-center "); sb.Append(centerx.ToString("0", GCode.format)); sb.Append(","); sb.Append(centery.ToString("0", GCode.format)); sb.Append(" --start-gcode "); sb.Append(wrapQuotes(basedir + Path.DirectorySeparatorChar + "empty.txt")); sb.Append(" --end-gcode "); sb.Append(wrapQuotes(basedir + Path.DirectorySeparatorChar + "empty.txt")); 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.conn.log(e.ToString(), false, 2); } }
/// <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); }
public bool RunSliceNew(string file, float centerx, float centery) { if (procConvert != null) { MessageBox.Show(Trans.T("L_LAST_SLICE_RUNNING"), Trans.T("L_ERROR"), MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } string exe = findSlic3rExecutable(); if (exe == null) { MessageBox.Show(Trans.T("L_SLIC3R_NOT_FOUND"), Trans.T("L_ERROR"), MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } FormPrinterSettings ps = Main.printerSettings; SlicingInfo.Start("Slic3r"); SlicingInfo.SetAction(Trans.T("L_ANALYSING_STL")); try { RHBoundingBox stl = Slicer.lastBox; 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 = (float)(stl.xMin + (stl.xMax - stl.xMin) / 2); centery = (float)(stl.yMin + (stl.yMax - stl.yMin) / 2); } } catch (Exception e) { Main.conn.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"; string cdir = Main.main.slicerPanel.slic3rDirectory; 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); 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; 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)); RLog.info("Slic3r command:" + exe + " " + sb.ToString()); 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.conn.log(e.ToString(), false, 2); } return(true); }