diff --git a/ActionBar/TemperatureWidgetExtruder.cs b/ActionBar/TemperatureWidgetExtruder.cs index 85ecaea54..07051625e 100644 --- a/ActionBar/TemperatureWidgetExtruder.cs +++ b/ActionBar/TemperatureWidgetExtruder.cs @@ -44,6 +44,8 @@ namespace MatterHackers.MatterControl.ActionBar { class TemperatureWidgetExtruder : TemperatureWidgetBase { + int extruderNumber = 1; + public TemperatureWidgetExtruder() : base("150.3°") { @@ -82,18 +84,18 @@ namespace MatterHackers.MatterControl.ActionBar void setToCurrentTemperature() { string tempDirectionIndicator = ""; - if (PrinterConnectionAndCommunication.Instance.TargetExtruderTemperature > 0) + if (PrinterConnectionAndCommunication.Instance.GetTargetExtruderTemperature(extruderNumber-1) > 0) { - if ((int)(PrinterConnectionAndCommunication.Instance.TargetExtruderTemperature + 0.5) < (int)(PrinterConnectionAndCommunication.Instance.ActualExtruderTemperature + 0.5)) + if ((int)(PrinterConnectionAndCommunication.Instance.GetTargetExtruderTemperature(extruderNumber - 1) + 0.5) < (int)(PrinterConnectionAndCommunication.Instance.GetActualExtruderTemperature(extruderNumber - 1) + 0.5)) { tempDirectionIndicator = "↓"; } - else if ((int)(PrinterConnectionAndCommunication.Instance.TargetExtruderTemperature + 0.5) > (int)(PrinterConnectionAndCommunication.Instance.ActualExtruderTemperature + 0.5)) + else if ((int)(PrinterConnectionAndCommunication.Instance.GetTargetExtruderTemperature(extruderNumber - 1) + 0.5) > (int)(PrinterConnectionAndCommunication.Instance.GetActualExtruderTemperature(extruderNumber - 1) + 0.5)) { tempDirectionIndicator = "↑"; } } - this.IndicatorValue = string.Format(" {0:0.#}°{1}", PrinterConnectionAndCommunication.Instance.ActualExtruderTemperature, tempDirectionIndicator); + this.IndicatorValue = string.Format(" {0:0.#}°{1}", PrinterConnectionAndCommunication.Instance.GetActualExtruderTemperature(extruderNumber - 1), tempDirectionIndicator); } void onTemperatureRead(Object sender, EventArgs e) @@ -112,14 +114,14 @@ namespace MatterHackers.MatterControl.ActionBar double goalTemp = (int)(targetTemp + .5); if (PrinterConnectionAndCommunication.Instance.PrinterIsPrinting && PrinterConnectionAndCommunication.Instance.PrintingState == PrinterConnectionAndCommunication.DetailedPrintingState.HeatingExtruder - && goalTemp != PrinterConnectionAndCommunication.Instance.TargetExtruderTemperature) + && goalTemp != PrinterConnectionAndCommunication.Instance.GetTargetExtruderTemperature(extruderNumber - 1)) { - string message = string.Format(waitingForeExtruderToHeatMessage, PrinterConnectionAndCommunication.Instance.TargetExtruderTemperature, sliceSettingsNote); + string message = string.Format(waitingForeExtruderToHeatMessage, PrinterConnectionAndCommunication.Instance.GetTargetExtruderTemperature(extruderNumber - 1), sliceSettingsNote); StyledMessageBox.ShowMessageBox(message, waitingForeExtruderToHeatTitle); } else { - PrinterConnectionAndCommunication.Instance.TargetExtruderTemperature = (int)(targetTemp + .5); + PrinterConnectionAndCommunication.Instance.SetTargetExtruderTemperature(extruderNumber - 1, (int)(targetTemp + .5)); } } } diff --git a/PartPreviewWindow/ViewGcodeBasic.cs b/PartPreviewWindow/ViewGcodeBasic.cs index 296c9b30e..d88712937 100644 --- a/PartPreviewWindow/ViewGcodeBasic.cs +++ b/PartPreviewWindow/ViewGcodeBasic.cs @@ -114,8 +114,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow void Clear3DGCode(object sender, EventArgs e) { - gcodeViewWidget.gCodeRenderer.Clear3DGCode(); - gcodeViewWidget.Invalidate(); + if (gcodeViewWidget != null) + { + gcodeViewWidget.gCodeRenderer.Clear3DGCode(); + gcodeViewWidget.Invalidate(); + } } void RecreateBedAndPartPosition(object sender, EventArgs e) diff --git a/PrinterCommunication/PrinterConnectionAndCommunication.cs b/PrinterCommunication/PrinterConnectionAndCommunication.cs index 08f7a38db..8cd856bb5 100644 --- a/PrinterCommunication/PrinterConnectionAndCommunication.cs +++ b/PrinterCommunication/PrinterConnectionAndCommunication.cs @@ -58,17 +58,24 @@ namespace MatterHackers.MatterControl.PrinterCommunication /// public class TemperatureEventArgs : EventArgs { + int index0Based; double temperature; - public TemperatureEventArgs(double temperature) + public int Index0Based { - this.temperature = temperature; + get { return index0Based; } } public double Temperature { get { return temperature; } } + + public TemperatureEventArgs(int index0Based, double temperature) + { + this.index0Based = index0Based; + this.temperature = temperature; + } } public class PrintItemWrapperEventArgs : EventArgs @@ -246,8 +253,9 @@ namespace MatterHackers.MatterControl.PrinterCommunication bool stopTryingToConnect = false; - double actualExtruderTemperature; - double targetExtruderTemperature; + static readonly int MAX_EXTRUDERS = 4; + double[] actualExtruderTemperature = new double[MAX_EXTRUDERS]; + double[] targetExtruderTemperature = new double[MAX_EXTRUDERS]; double actualBedTemperature; double targetBedTemperature; string printJobDisplayName = null; @@ -438,6 +446,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication ReadLineStartCallBacks.AddCallBackToKey("Done saving file", PrintingCanContinue); ReadLineStartCallBacks.AddCallBackToKey("ok T:", ReadTemperatures); // marlin + ReadLineStartCallBacks.AddCallBackToKey("ok T0:", ReadTemperatures); // marlin ReadLineStartCallBacks.AddCallBackToKey("T:", ReadTemperatures); // repatier ReadLineStartCallBacks.AddCallBackToKey("SD printing byte", ReadSdProgress); // repatier @@ -533,7 +542,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication return "Waiting for Bed to Heat to {0}°".FormatWith(TargetBedTemperature); case DetailedPrintingState.HeatingExtruder: - return "Waiting for Extruder to Heat to {0}°".FormatWith(TargetExtruderTemperature); + return "Waiting for Extruder to Heat to {0}°".FormatWith(GetTargetExtruderTemperature(0)); case DetailedPrintingState.Printing: return "Currently Printing:"; @@ -827,54 +836,47 @@ namespace MatterHackers.MatterControl.PrinterCommunication System.Threading.Thread.Sleep(1); } - public double TargetExtruderTemperature + public double GetTargetExtruderTemperature(int extruderIndex0Based) { - get + return targetExtruderTemperature[extruderIndex0Based]; + } + + public void SetTargetExtruderTemperature(int extruderIndex0Based, double temperature) + { + if (targetExtruderTemperature[extruderIndex0Based] != temperature) { - return targetExtruderTemperature; - } - set - { - if (targetExtruderTemperature != value) + targetExtruderTemperature[extruderIndex0Based] = temperature; + OnExtruderTemperatureSet(new TemperatureEventArgs(extruderIndex0Based, temperature)); + if (PrinterIsConnected) { - targetExtruderTemperature = value; - OnExtruderTemperatureSet(new TemperatureEventArgs(TargetExtruderTemperature)); - if (PrinterIsConnected) - { - SendLineToPrinterNow("M104 S{0}".FormatWith(targetExtruderTemperature)); - } - + SendLineToPrinterNow("M104 T{0} S{1}".FormatWith(extruderIndex0Based, targetExtruderTemperature[extruderIndex0Based])); } } } - public double ActualExtruderTemperature + public double GetActualExtruderTemperature(int extruderIndex0Based) { - get - { - return actualExtruderTemperature; - } + return actualExtruderTemperature[extruderIndex0Based]; } public void ExtruderTemperatureWasWritenToPrinter(object sender, EventArgs e) { FoundStringEventArgs foundStringEventArgs = e as FoundStringEventArgs; - string[] splitOnS = foundStringEventArgs.LineToCheck.Split('S'); - if (splitOnS.Length == 2) + double tempBeingSet = 0; + if (GCodeFile.GetFirstNumberAfter("S", foundStringEventArgs.LineToCheck, ref tempBeingSet)) { - string temp = splitOnS[1]; - try + double exturderIndex = 0; + if (GCodeFile.GetFirstNumberAfter("T", foundStringEventArgs.LineToCheck, ref exturderIndex)) + { + SetTargetExtruderTemperature((int)exturderIndex, tempBeingSet); + } + else { - double tempBeingSet = double.Parse(temp); // we set the private variable so that we don't get the callbacks called and get in a loop of setting the temp - targetExtruderTemperature = tempBeingSet; - OnExtruderTemperatureSet(new TemperatureEventArgs(TargetExtruderTemperature)); - } - catch - { - Debug.WriteLine("Unable to Parse Extruder Temperature: {0}".FormatWith(temp)); + SetTargetExtruderTemperature(0, tempBeingSet); } + OnExtruderTemperatureSet(e); } } @@ -904,7 +906,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication if (targetBedTemperature != value) { targetBedTemperature = value; - OnBedTemperatureSet(new TemperatureEventArgs(TargetBedTemperature)); + OnBedTemperatureSet(new TemperatureEventArgs(0, TargetBedTemperature)); if (PrinterIsConnected) { SendLineToPrinterNow("M140 S{0}".FormatWith(targetBedTemperature)); @@ -937,7 +939,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication { // we set the private variable so that we don't get the callbacks called and get in a loop of setting the temp targetBedTemperature = tempBeingSet; - OnBedTemperatureSet(new TemperatureEventArgs(TargetBedTemperature)); + OnBedTemperatureSet(new TemperatureEventArgs(0, TargetBedTemperature)); } } catch @@ -1044,56 +1046,42 @@ namespace MatterHackers.MatterControl.PrinterCommunication string temperatureString = foundStringEventArgs.LineToCheck; { - int extruderTempLocationInString = temperatureString.IndexOf("T:"); - if (extruderTempLocationInString > -1) + double readExtruderTemp = 0; + if (GCodeFile.GetFirstNumberAfter("T:", temperatureString, ref readExtruderTemp)) { - extruderTempLocationInString += 2; - int endOfExtruderTempInString = temperatureString.IndexOf(" ", extruderTempLocationInString); - if (endOfExtruderTempInString < 0) + if (actualExtruderTemperature[0] != readExtruderTemp) { - endOfExtruderTempInString = temperatureString.Length; + actualExtruderTemperature[0] = readExtruderTemp; + OnExtruderTemperatureRead(new TemperatureEventArgs(0, GetActualExtruderTemperature(0))); + } + } + else if (GCodeFile.GetFirstNumberAfter("T0:", temperatureString, ref readExtruderTemp)) + { + if (actualExtruderTemperature[0] != readExtruderTemp) + { + actualExtruderTemperature[0] = readExtruderTemp; + OnExtruderTemperatureRead(new TemperatureEventArgs(0, GetActualExtruderTemperature(0))); } - string extruderTemp = temperatureString.Substring(extruderTempLocationInString, endOfExtruderTempInString - extruderTempLocationInString); - try + double readExtruder2Temp = 0; + if (GCodeFile.GetFirstNumberAfter("T1:", temperatureString, ref readExtruder2Temp)) { - double readExtruderTemp = double.Parse(extruderTemp); - if (actualExtruderTemperature != readExtruderTemp) + if (actualExtruderTemperature[1] != readExtruder2Temp) { - actualExtruderTemperature = readExtruderTemp; - OnExtruderTemperatureRead(new TemperatureEventArgs(ActualExtruderTemperature)); + actualExtruderTemperature[1] = readExtruder2Temp; + OnExtruderTemperatureRead(new TemperatureEventArgs(1, GetActualExtruderTemperature(1))); } } - catch - { - Debug.WriteLine("Unable to Parse Extruder Temperature: {0}".FormatWith(extruderTemp)); - } } } { - int bedTempLocationInString = temperatureString.IndexOf("B:"); - if (bedTempLocationInString > -1) + double readBedTemp = 0; + if (GCodeFile.GetFirstNumberAfter("B:", temperatureString, ref readBedTemp)) { - bedTempLocationInString += 2; - int endOfbedTempInString = temperatureString.IndexOf(" ", bedTempLocationInString); - if (endOfbedTempInString < 0) + if (actualBedTemperature != readBedTemp) { - endOfbedTempInString = temperatureString.Length; - } - - string bedTemp = temperatureString.Substring(bedTempLocationInString, endOfbedTempInString - bedTempLocationInString); - try - { - double readBedTemp = double.Parse(bedTemp); - if (actualBedTemperature != readBedTemp) - { - actualBedTemperature = readBedTemp; - OnBedTemperatureRead(new TemperatureEventArgs(ActualBedTemperature)); - } - } - catch - { - Debug.WriteLine("Unable to Parse Bed Temperature: {0}".FormatWith(bedTemp)); + actualBedTemperature = readBedTemp; + OnBedTemperatureRead(new TemperatureEventArgs(0, ActualBedTemperature)); } } } @@ -1779,8 +1767,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication // the motors and heaters (a good idea ane something for the future). ForceImmediateWrites = true; ReleaseMotors(); - TargetExtruderTemperature = 0; - TargetBedTemperature = 0; + TurnOffBedAndExtruders(); FanSpeed0To255 = 0; ForceImmediateWrites = false; @@ -1798,8 +1785,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication else { //Need to reset UI - even if manual disconnect - TargetExtruderTemperature = 0; - TargetBedTemperature = 0; + TurnOffBedAndExtruders(); FanSpeed0To255 = 0; } OnEnabledChanged(null); @@ -1897,8 +1883,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication CommunicationState = CommunicationStates.Connected; // never leave the extruder and the bed hot ReleaseMotors(); - TargetExtruderTemperature = 0; - TargetBedTemperature = 0; + TurnOffBedAndExtruders(); printWasCanceled = false; } else @@ -1911,8 +1896,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication // never leave the extruder and the bed hot ReleaseMotors(); - TargetExtruderTemperature = 0; - TargetBedTemperature = 0; + TurnOffBedAndExtruders(); } else if (!PrinterIsPaused) { @@ -2070,8 +2054,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication SendLineToPrinterNow("M26"); // : Set SD position // never leave the extruder and the bed hot ReleaseMotors(); - TargetExtruderTemperature = 0; - TargetBedTemperature = 0; + TurnOffBedAndExtruders(); } break; @@ -2169,6 +2152,13 @@ namespace MatterHackers.MatterControl.PrinterCommunication return true; } + void TurnOffBedAndExtruders() + { + SetTargetExtruderTemperature(0, 0); + SetTargetExtruderTemperature(1, 0); + TargetBedTemperature = 0; + } + void DonePrintingSdFile(object sender, EventArgs e) { UiThread.RunOnIdle((state) => @@ -2180,9 +2170,9 @@ namespace MatterHackers.MatterControl.PrinterCommunication printJobDisplayName = null; // never leave the extruder and the bed hot + TurnOffBedAndExtruders(); + ReleaseMotors(); - TargetExtruderTemperature = 0; - TargetBedTemperature = 0; } public bool StartPrint(string gcodeFileContents) diff --git a/PrinterControls/ManualPrinterControls.cs b/PrinterControls/ManualPrinterControls.cs index ebf7111a0..9e0a72956 100644 --- a/PrinterControls/ManualPrinterControls.cs +++ b/PrinterControls/ManualPrinterControls.cs @@ -355,7 +355,7 @@ namespace MatterHackers.MatterControl for (int i = 0; i < numberOfHeatedExtruders; i++) { DisableableWidget extruderTemperatureControlWidget = new DisableableWidget(); - extruderTemperatureControlWidget.AddChild(new ExtruderTemperatureControlWidget(i+1)); + extruderTemperatureControlWidget.AddChild(new ExtruderTemperatureControlWidget(i)); mainContainer.AddChild(extruderTemperatureControlWidget); mainContainer.AddChild(new HorizontalLine(separatorLineColor)); extruderWidgetContainers.Add(extruderTemperatureControlWidget); diff --git a/PrinterControls/TemperatureIndicator.cs b/PrinterControls/TemperatureIndicator.cs index 722c6bc56..5e7241d49 100644 --- a/PrinterControls/TemperatureIndicator.cs +++ b/PrinterControls/TemperatureIndicator.cs @@ -51,11 +51,12 @@ namespace MatterHackers.MatterControl protected string label; protected string editWindowLabel; - + protected int extruderIndex0Based = 0; - protected TemperatureControlBase(string label, string editWindowLabel) + protected TemperatureControlBase(int extruderIndex0Based, string label, string editWindowLabel) : base(FlowDirection.TopToBottom) { + this.extruderIndex0Based = extruderIndex0Based; this.label = label; this.editWindowLabel = editWindowLabel; SetDisplayAttributes(); @@ -408,7 +409,7 @@ namespace MatterHackers.MatterControl protected void onTemperatureRead(Object sender, EventArgs e) { TemperatureEventArgs tempArgs = e as TemperatureEventArgs; - if (tempArgs != null) + if (tempArgs != null && tempArgs.Index0Based == extruderIndex0Based) { actualTempIndicator.Text = string.Format("{0:0.0}°C", tempArgs.Temperature); } @@ -417,7 +418,7 @@ namespace MatterHackers.MatterControl protected void onTemperatureSet(Object sender, EventArgs e) { TemperatureEventArgs tempArgs = e as TemperatureEventArgs; - if (tempArgs != null) + if (tempArgs != null && tempArgs.Index0Based == extruderIndex0Based) { SetTargetTemperature(tempArgs.Temperature); } @@ -426,19 +427,16 @@ namespace MatterHackers.MatterControl public class ExtruderTemperatureControlWidget : TemperatureControlBase { - int extruderNumber = 1; - public ExtruderTemperatureControlWidget() - : base(LocalizedString.Get("Extruder Temperature"), LocalizedString.Get("Extruder Temperature Settings")) + : base(0, LocalizedString.Get("Extruder Temperature"), LocalizedString.Get("Extruder Temperature Settings")) { AddChildElements(); AddHandlers(); } - public ExtruderTemperatureControlWidget(int extruderNumber) - : base(string.Format("{0} {1}", "Extruder Temperature".Localize(), extruderNumber), LocalizedString.Get("Extruder Temperature Settings")) - { - this.extruderNumber = extruderNumber; + public ExtruderTemperatureControlWidget(int extruderIndex0Based) + : base(extruderIndex0Based, string.Format("{0} {1}", "Extruder Temperature".Localize(), extruderIndex0Based + 1), LocalizedString.Get("Extruder Temperature Settings")) + { AddChildElements(); AddHandlers(); } @@ -476,7 +474,7 @@ namespace MatterHackers.MatterControl string default_presets = ",0,,0,,0,250"; string presets; - string presetKey = string.Format("Extruder{0}PresetTemps", this.extruderNumber); + string presetKey = string.Format("Extruder{0}PresetTemps", extruderIndex0Based+1); if (UserSettings.Instance.get(presetKey) == null) { UserSettings.Instance.set(presetKey, default_presets); @@ -490,14 +488,14 @@ namespace MatterHackers.MatterControl StringEventArgs stringEvent = e as StringEventArgs; if (stringEvent != null && stringEvent.Data != null) { - UserSettings.Instance.set(string.Format("Extruder{0}PresetTemps", extruderNumber), stringEvent.Data); + UserSettings.Instance.set(string.Format("Extruder{0}PresetTemps", extruderIndex0Based + 1), stringEvent.Data); ApplicationController.Instance.ReloadAdvancedControlsPanel(); } } protected override double GetPreheatTemperature() { - string tempValue = ActiveSliceSettings.Instance.GetMaterialValue("temperature", extruderNumber); + string tempValue = ActiveSliceSettings.Instance.GetMaterialValue("temperature", extruderIndex0Based+1); if (tempValue == "Unknown") { return 0.0; @@ -510,12 +508,12 @@ namespace MatterHackers.MatterControl protected override double GetTargetTemperature() { - return PrinterConnectionAndCommunication.Instance.TargetExtruderTemperature; + return PrinterConnectionAndCommunication.Instance.GetTargetExtruderTemperature(extruderIndex0Based); } protected override double GetActualTemperature() { - return PrinterConnectionAndCommunication.Instance.ActualExtruderTemperature; + return PrinterConnectionAndCommunication.Instance.GetActualExtruderTemperature(extruderIndex0Based); } protected override void SetTargetTemperature(double targetTemp) @@ -523,16 +521,16 @@ namespace MatterHackers.MatterControl double goalTemp = (int)(targetTemp + .5); if (PrinterConnectionAndCommunication.Instance.PrinterIsPrinting && PrinterConnectionAndCommunication.Instance.PrintingState == PrinterConnectionAndCommunication.DetailedPrintingState.HeatingExtruder - && goalTemp != PrinterConnectionAndCommunication.Instance.TargetExtruderTemperature) + && goalTemp != PrinterConnectionAndCommunication.Instance.GetTargetExtruderTemperature(extruderIndex0Based)) { string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print."; - string message = string.Format("The extruder is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting extruder temperature in 'Slice Settings' -> 'Filament'.\n\n{1}", PrinterConnectionAndCommunication.Instance.TargetExtruderTemperature, sliceSettingsNote); + string message = string.Format("The extruder is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting extruder temperature in 'Slice Settings' -> 'Filament'.\n\n{1}", PrinterConnectionAndCommunication.Instance.GetTargetExtruderTemperature(extruderIndex0Based), sliceSettingsNote); StyledMessageBox.ShowMessageBox(message, "Waiting For Extruder To Heat"); } else { - PrinterConnectionAndCommunication.Instance.TargetExtruderTemperature = (int)(targetTemp + .5); - string displayString = string.Format("{0:0.0}°C", PrinterConnectionAndCommunication.Instance.TargetExtruderTemperature); + PrinterConnectionAndCommunication.Instance.SetTargetExtruderTemperature(extruderIndex0Based, (int)(targetTemp + .5)); + string displayString = string.Format("{0:0.0}°C", PrinterConnectionAndCommunication.Instance.GetTargetExtruderTemperature(extruderIndex0Based)); targetTemperatureDisplay.SetDisplayString(displayString); } } @@ -541,7 +539,7 @@ namespace MatterHackers.MatterControl public class BedTemperatureControlWidget : TemperatureControlBase { public BedTemperatureControlWidget() - : base(LocalizedString.Get("Bed Temperature"), LocalizedString.Get("Bed Temperature Settings")) + : base(0, LocalizedString.Get("Bed Temperature"), LocalizedString.Get("Bed Temperature Settings")) { AddChildElements(); AddHandlers(); diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 7fafb130f..7670ecbc8 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -2732,3 +2732,9 @@ Translated:Temperature English:Align Translated:Align +English:Material 1 +Translated:Material 1 + +English:Material 2 +Translated:Material 2 +