private void SaveGCodeToNewLocation(string source, string dest) { if (ActivePrinterProfile.Instance.DoPrintLeveling) { GCodeFile unleveledGCode = new GCodeFile(source); if (applyLeveling.Checked) { PrintLevelingPlane.Instance.ApplyLeveling(unleveledGCode); PrintLevelingData levelingData = PrintLevelingData.GetForPrinter(ActivePrinterProfile.Instance.ActivePrinter); if (levelingData != null) { for (int i = 0; i < unleveledGCode.Count; i++) { PrinterMachineInstruction instruction = unleveledGCode.Instruction(i); List<string> linesToWrite = null; switch (levelingData.levelingSystem) { case PrintLevelingData.LevelingSystem.Probe2Points: linesToWrite = LevelWizard2Point.ProcessCommand(instruction.Line); break; case PrintLevelingData.LevelingSystem.Probe3Points: linesToWrite = LevelWizard3Point.ProcessCommand(instruction.Line); break; } instruction.Line = linesToWrite[0]; linesToWrite.RemoveAt(0); // now insert any new lines foreach(string line in linesToWrite) { PrinterMachineInstruction newInstruction = new PrinterMachineInstruction(line); unleveledGCode.Insert(++i, newInstruction); } } } } unleveledGCode.Save(dest); } else { File.Copy(source, dest, true); } ShowFileIfRequested(dest); }
void sliceItem_Done(object sender, EventArgs e) { PrintItemWrapper sliceItem = (PrintItemWrapper)sender; sliceItem.SlicingDone.UnregisterEvent(sliceItem_Done, ref unregisterEvents); sliceItem.SlicingOutputMessage.UnregisterEvent(printItemWrapper_SlicingOutputMessage, ref unregisterEvents); if (File.Exists(sliceItem.FileLocation)) { savedGCodeFileNames.Add(sliceItem.GetGCodePathAndFileName()); } itemCountBeingWorkedOn++; if (itemCountBeingWorkedOn < allFilesToExport.Count) { if (StartingNextPart != null) { StartingNextPart(this, new StringEventArgs(ItemNameBeingWorkedOn)); } } else { UpdatePartStatus(this, new StringEventArgs("Calculating Total cm3...")); if (savedGCodeFileNames.Count > 0) { double total = 0; foreach (string gcodeFileName in savedGCodeFileNames) { string[] lines = File.ReadAllLines(gcodeFileName); if (lines.Length > 0) { string filamentAmountLine = lines[lines.Length - 1]; bool foundAmountInGCode = false; int startPos = filamentAmountLine.IndexOf("("); if (startPos > 0) { int endPos = filamentAmountLine.IndexOf("cm3)", startPos); if (endPos > 0) { string value = filamentAmountLine.Substring(startPos + 1, endPos - (startPos + 1)); double amountForThisFile; if (double.TryParse(value, out amountForThisFile)) { foundAmountInGCode = true; total += amountForThisFile; } } } if (!foundAmountInGCode) { GCodeFile gcodeFile = new GCodeFile(gcodeFileName); total += gcodeFile.GetFilamentCubicMm(ActiveSliceSettings.Instance.FilamentDiameter) / 1000; } } } // now copy all the gcode to the path given for (int i = 0; i < savedGCodeFileNames.Count; i++) { string savedGcodeFileName = savedGCodeFileNames[i]; string originalFileName = Path.GetFileName(allFilesToExport[i].Name); string outputFileName = Path.ChangeExtension(originalFileName, ".gcode"); string outputPathAndName = Path.Combine(exportPath, outputFileName); if (ActivePrinterProfile.Instance.DoPrintLeveling) { GCodeFile unleveledGCode = new GCodeFile(savedGcodeFileName); PrintLevelingPlane.Instance.ApplyLeveling(unleveledGCode); unleveledGCode.Save(outputPathAndName); } else { File.Copy(savedGcodeFileName, outputPathAndName, true); } } if (DoneSaving != null) { DoneSaving(this, new StringEventArgs(string.Format("{0:0.0}", total))); } } } }
private void SaveGCodeToNewLocation(string source, string dest) { if (ActivePrinterProfile.Instance.DoPrintLeveling) { GCodeFile unleveledGCode = new GCodeFile(source); PrintLeveling.Instance.ApplyLeveling(unleveledGCode); unleveledGCode.Save(dest); } else { File.Copy(source, dest, true); } ShowFileIfRequested(dest); }