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/ApplicationView/CompactTabView.cs b/ApplicationView/CompactTabView.cs
index 155ec21b1..33201993e 100644
--- a/ApplicationView/CompactTabView.cs
+++ b/ApplicationView/CompactTabView.cs
@@ -66,7 +66,7 @@ namespace MatterHackers.MatterControl
QueueDataView queueDataView;
event EventHandler unregisterEvents;
GuiWidget part3DViewContainer;
- View3DTransformPart part3DView;
+ View3DWidget part3DView;
GuiWidget partGcodeViewContainer;
ViewGcodeBasic partGcodeView;
SimpleTextTabWidget aboutTabWidget;
@@ -211,12 +211,12 @@ namespace MatterHackers.MatterControl
void GeneratePartViews(object state = null)
{
double buildHeight = ActiveSliceSettings.Instance.BuildHeight;
- part3DView = new View3DTransformPart(PrinterConnectionAndCommunication.Instance.ActivePrintItem,
+ part3DView = new View3DWidget(PrinterConnectionAndCommunication.Instance.ActivePrintItem,
new Vector3(ActiveSliceSettings.Instance.BedSize, buildHeight),
ActiveSliceSettings.Instance.BedCenter,
ActiveSliceSettings.Instance.BedShape,
- View3DTransformPart.WindowType.Embeded,
- View3DTransformPart.AutoRotate.Enabled);
+ View3DWidget.WindowType.Embeded,
+ View3DWidget.AutoRotate.Enabled);
part3DView.Margin = new BorderDouble(bottom: 4);
part3DView.AnchorAll();
diff --git a/ApplicationView/WidescreenPanel.cs b/ApplicationView/WidescreenPanel.cs
index bd040ea7c..39f77076a 100644
--- a/ApplicationView/WidescreenPanel.cs
+++ b/ApplicationView/WidescreenPanel.cs
@@ -68,7 +68,7 @@ namespace MatterHackers.MatterControl
double Force1PanelWidth = 990 * TextWidget.GlobalPointSizeScaleRatio;
double Force2PanelWidth = 1590 * TextWidget.GlobalPointSizeScaleRatio;
- View3DTransformPart part3DView;
+ View3DWidget part3DView;
ViewGcodeBasic partGcodeView;
PanelSeparator RightBorderLine;
@@ -191,12 +191,12 @@ namespace MatterHackers.MatterControl
ColumnTwo.CloseAndRemoveAllChildren();
double buildHeight = ActiveSliceSettings.Instance.BuildHeight;
- part3DView = new View3DTransformPart(PrinterConnectionAndCommunication.Instance.ActivePrintItem,
+ part3DView = new View3DWidget(PrinterConnectionAndCommunication.Instance.ActivePrintItem,
new Vector3(ActiveSliceSettings.Instance.BedSize, buildHeight),
ActiveSliceSettings.Instance.BedCenter,
ActiveSliceSettings.Instance.BedShape,
- View3DTransformPart.WindowType.Embeded,
- View3DTransformPart.AutoRotate.Enabled);
+ View3DWidget.WindowType.Embeded,
+ View3DWidget.AutoRotate.Enabled);
part3DView.Margin = new BorderDouble(bottom: 4);
part3DView.AnchorAll();
diff --git a/CustomWidgets/PartThumbnailWidget.cs b/CustomWidgets/PartThumbnailWidget.cs
index add89f8d5..cad8ca85d 100644
--- a/CustomWidgets/PartThumbnailWidget.cs
+++ b/CustomWidgets/PartThumbnailWidget.cs
@@ -364,11 +364,11 @@ namespace MatterHackers.MatterControl
bool shiftKeyDown = Keyboard.IsKeyDown(Keys.ShiftKey);
if (shiftKeyDown)
{
- OpenPartPreviewWindow (View3DTransformPart.AutoRotate.Disabled);
+ OpenPartPreviewWindow (View3DWidget.AutoRotate.Disabled);
}
else
{
- OpenPartPreviewWindow (View3DTransformPart.AutoRotate.Enabled);
+ OpenPartPreviewWindow (View3DWidget.AutoRotate.Enabled);
}
}
else
@@ -383,7 +383,7 @@ namespace MatterHackers.MatterControl
this.partPreviewWindow = null;
}
- private void OpenPartPreviewWindow(View3DTransformPart.AutoRotate autoRotate)
+ private void OpenPartPreviewWindow(View3DWidget.AutoRotate autoRotate)
{
if (partPreviewWindow == null)
{
diff --git a/CustomWidgets/PluginChooserWindow.cs b/CustomWidgets/PluginChooserWindow.cs
index 20f6bb6ed..01d02da59 100644
--- a/CustomWidgets/PluginChooserWindow.cs
+++ b/CustomWidgets/PluginChooserWindow.cs
@@ -151,10 +151,6 @@ namespace MatterHackers.MatterControl.CreatorPlugins
pluginRow.Height = 38;
pluginRow.HAnchor = Agg.UI.HAnchor.ParentLeftRight;
- GuiWidget overlay = new GuiWidget();
- overlay.AnchorAll();
- overlay.Cursor = Cursors.Hand;
-
FlowLayoutWidget macroRow = new FlowLayoutWidget();
macroRow.AnchorAll();
macroRow.BackgroundColor = RGBA_Bytes.White;
@@ -207,8 +203,9 @@ namespace MatterHackers.MatterControl.CreatorPlugins
UiThread.RunOnIdle(CloseOnIdle);
};
+ pluginRow.Cursor = Cursors.Hand;
+ macroRow.Selectable = false;
pluginRow.AddChild(macroRow);
- pluginRow.AddChild(overlay);
pluginListingContainer.AddChild(pluginRow);
diff --git a/MatterControl.csproj b/MatterControl.csproj
index 9918b9aab..35b4c2ac9 100644
--- a/MatterControl.csproj
+++ b/MatterControl.csproj
@@ -119,10 +119,13 @@
+
+
+
@@ -167,7 +170,6 @@
-
Code
diff --git a/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs b/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs
index 9bcf1eb7d..bd32336c9 100644
--- a/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs
+++ b/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs
@@ -50,6 +50,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public class PartPreview3DWidget : PartPreviewWidget
{
+ protected static readonly int DefaultScrollBarWidth = 120;
+
protected bool autoRotateEnabled = false;
public MeshViewerWidget meshViewerWidget;
event EventHandler unregisterEvents;
@@ -117,6 +119,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
spacingText.HAnchor = HAnchor.ParentLeft;
wordOptionContainer.AddChild(spacingText);
SolidSlider namedSlider = new SolidSlider(new Vector2(), scrollBarWidth, 0, 1);
+ namedSlider.TotalWidthInPixels = DefaultScrollBarWidth;
namedSlider.Minimum = min;
namedSlider.Maximum = max;
namedSlider.Margin = new BorderDouble(3, 5, 3, 3);
diff --git a/PartPreviewWindow/PartPreviewMainWindow.cs b/PartPreviewWindow/PartPreviewMainWindow.cs
index a42512621..52c7e6530 100644
--- a/PartPreviewWindow/PartPreviewMainWindow.cs
+++ b/PartPreviewWindow/PartPreviewMainWindow.cs
@@ -43,11 +43,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
public class PartPreviewMainWindow : SystemWindow
{
- View3DTransformPart partPreviewView;
+ View3DWidget partPreviewView;
ViewGcodeBasic viewGcodeBasic;
bool OpenInEditMode;
- public PartPreviewMainWindow(PrintItemWrapper printItem, View3DTransformPart.AutoRotate autoRotate3DView, bool openInEditMode = false)
+ public PartPreviewMainWindow(PrintItemWrapper printItem, View3DWidget.AutoRotate autoRotate3DView, bool openInEditMode = false)
: base(690, 340)
{
UseOpenGL = true;
@@ -68,11 +68,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
string part3DViewLabelFull = string.Format("{0} {1} ", "3D", "View".Localize());
- partPreviewView = new View3DTransformPart(printItem,
+ partPreviewView = new View3DWidget(printItem,
new Vector3(ActiveSliceSettings.Instance.BedSize, buildHeight),
ActiveSliceSettings.Instance.BedCenter,
ActiveSliceSettings.Instance.BedShape,
- View3DTransformPart.WindowType.StandAlone,
+ View3DWidget.WindowType.StandAlone,
autoRotate3DView,
openInEditMode);
diff --git a/PartPreviewWindow/View3D/View3DAlign.cs b/PartPreviewWindow/View3D/View3DAlign.cs
index f23d4e236..6934b7e39 100644
--- a/PartPreviewWindow/View3D/View3DAlign.cs
+++ b/PartPreviewWindow/View3D/View3DAlign.cs
@@ -39,14 +39,37 @@ using MatterHackers.MeshVisualizer;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
- public partial class View3DTransformPart
+ public partial class View3DWidget
{
void AlignSelectedMeshGroup()
{
AxisAlignedBoundingBox selectedOriginalBounds = SelectedMeshGroup.GetAxisAlignedBoundingBox();
+ Vector3 selectedOriginalCenter = selectedOriginalBounds.Center;
AxisAlignedBoundingBox selectedCurrentBounds = SelectedMeshGroup.GetAxisAlignedBoundingBox(SelectedMeshGroupTransform.TotalTransform);
- foreach (MeshGroup meshGroup in MeshGroups)
+ Vector3 selctedCurrentCenter = selectedCurrentBounds.Center;
+ for(int meshGroupToMoveIndex = 0; meshGroupToMoveIndex < MeshGroups.Count; meshGroupToMoveIndex++)
{
+ MeshGroup meshGroupToMove = MeshGroups[meshGroupToMoveIndex];
+ if (meshGroupToMove != SelectedMeshGroup)
+ {
+ AxisAlignedBoundingBox groupToMoveOriginalBounds = meshGroupToMove.GetAxisAlignedBoundingBox();
+ Vector3 groupToMoveOriginalCenter = groupToMoveOriginalBounds.Center;
+ AxisAlignedBoundingBox groupToMoveBounds = meshGroupToMove.GetAxisAlignedBoundingBox(MeshGroupTransforms[meshGroupToMoveIndex].TotalTransform);
+ Vector3 groupToMoveCenter = groupToMoveBounds.Center;
+
+ Vector3 originalCoordinatesDelta = groupToMoveOriginalCenter - selectedOriginalCenter;
+ Vector3 currentCoordinatesDelta = groupToMoveCenter - selctedCurrentCenter;
+
+ Vector3 deltaRequired = originalCoordinatesDelta - currentCoordinatesDelta;
+
+ if (deltaRequired.Length > .0001)
+ {
+ ScaleRotateTranslate translated = MeshGroupTransforms[meshGroupToMoveIndex];
+ translated.translation *= Matrix4X4.CreateTranslation(deltaRequired);
+ MeshGroupTransforms[meshGroupToMoveIndex] = translated;
+ saveButtons.Visible = true;
+ }
+ }
}
}
}
diff --git a/PartPreviewWindow/View3D/View3DAutoArange.cs b/PartPreviewWindow/View3D/View3DAutoArange.cs
index fee1ef4f8..6de365865 100644
--- a/PartPreviewWindow/View3D/View3DAutoArange.cs
+++ b/PartPreviewWindow/View3D/View3DAutoArange.cs
@@ -38,7 +38,7 @@ using MatterHackers.VectorMath;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
- public partial class View3DTransformPart
+ public partial class View3DWidget
{
private void AutoArangePartsInBackground()
{
@@ -65,7 +65,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
void arrangeMeshGroupsBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
- PushMeshGroupDataToAsynchLists(TranceInfoOpperation.DONT_COPY);
+ PushMeshGroupDataToAsynchLists(TraceInfoOpperation.DONT_COPY);
BackgroundWorker backgroundWorker = (BackgroundWorker)sender;
diff --git a/PartPreviewWindow/View3D/View3DCopyGroup.cs b/PartPreviewWindow/View3D/View3DCopyGroup.cs
index dbb83713c..4fbaedf92 100644
--- a/PartPreviewWindow/View3D/View3DCopyGroup.cs
+++ b/PartPreviewWindow/View3D/View3DCopyGroup.cs
@@ -35,7 +35,7 @@ using MatterHackers.PolygonMesh;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
- public partial class View3DTransformPart
+ public partial class View3DWidget
{
private void MakeCopyOfGroup()
{
@@ -65,7 +65,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
BackgroundWorker backgroundWorker = (BackgroundWorker)sender;
- PushMeshGroupDataToAsynchLists(TranceInfoOpperation.DO_COPY);
+ PushMeshGroupDataToAsynchLists(TraceInfoOpperation.DO_COPY);
MeshGroup meshGroupToCopy = asynchMeshGroups[SelectedMeshGroupIndex];
MeshGroup copyMeshGroup = new MeshGroup();
diff --git a/PartPreviewWindow/View3D/View3DCreateSelecitonData.cs b/PartPreviewWindow/View3D/View3DCreateSelecitonData.cs
new file mode 100644
index 000000000..31be17dc4
--- /dev/null
+++ b/PartPreviewWindow/View3D/View3DCreateSelecitonData.cs
@@ -0,0 +1,121 @@
+/*
+Copyright (c) 2014, Lars Brubaker
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+The views and conclusions contained in the software and documentation are those
+of the authors and should not be interpreted as representing official policies,
+either expressed or implied, of the FreeBSD Project.
+*/
+
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Globalization;
+using System.Threading;
+using MatterHackers.Localizations;
+using MatterHackers.MeshVisualizer;
+using MatterHackers.PolygonMesh;
+
+namespace MatterHackers.MatterControl.PartPreviewWindow
+{
+ public partial class View3DWidget
+ {
+ void EnterEditAndCreateSelectionData()
+ {
+ if (enterEditButtonsContainer.Visible == true)
+ {
+ enterEditButtonsContainer.Visible = false;
+ }
+
+ autoArrangeButton.Visible = true;
+
+ if (MeshGroups.Count > 0)
+ {
+ processingProgressControl.Visible = true;
+ LockEditControls();
+ viewIsInEditModePreLock = true;
+
+ BackgroundWorker createSelectionDataBackgroundWorker = null;
+ createSelectionDataBackgroundWorker = new BackgroundWorker();
+ createSelectionDataBackgroundWorker.WorkerReportsProgress = true;
+
+ createSelectionDataBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged);
+ createSelectionDataBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(createSelectionDataBackgroundWorker_RunWorkerCompleted);
+ createSelectionDataBackgroundWorker.DoWork += new DoWorkEventHandler(createSelectionDataBackgroundWorker_DoWork);
+
+ createSelectionDataBackgroundWorker.RunWorkerAsync();
+ }
+ }
+
+ void createSelectionDataBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
+ {
+ string makingCopyLabel = LocalizedString.Get("Creating Edit Data");
+ string makingCopyLabelFull = string.Format("{0}:", makingCopyLabel);
+ processingProgressControl.textWidget.Text = makingCopyLabelFull;
+
+ Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
+ BackgroundWorker backgroundWorker = (BackgroundWorker)sender;
+
+ PushMeshGroupDataToAsynchLists(TraceInfoOpperation.DONT_COPY);
+
+ asynchPlatingDatas.Clear();
+ double ratioPerMeshGroup = 1.0 / asynchMeshGroups.Count;
+ double currentRatioDone = 0;
+ for (int i = 0; i < asynchMeshGroups.Count; i++)
+ {
+ PlatingMeshGroupData newInfo = new PlatingMeshGroupData();
+ asynchPlatingDatas.Add(newInfo);
+
+ MeshGroup meshGroup = asynchMeshGroups[i];
+
+ // create the selection info
+ PlatingHelper.CreateITraceableForMeshGroup(asynchPlatingDatas, asynchMeshGroups, i, (double progress0To1, string processingState) =>
+ {
+ int nextPercent = (int)((currentRatioDone + ratioPerMeshGroup * progress0To1) * 100);
+ backgroundWorker.ReportProgress(nextPercent);
+ return true;
+ });
+
+ currentRatioDone += ratioPerMeshGroup;
+ }
+ }
+
+ void createSelectionDataBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
+ {
+ if (WidgetHasBeenClosed)
+ {
+ return;
+ }
+ // remove the original mesh and replace it with these new meshes
+ PullMeshGroupDataFromAsynchLists();
+
+ UnlockEditControls();
+
+ if (pendingPartsToLoad.Count > 0)
+ {
+ LoadAndAddPartsToPlate(pendingPartsToLoad.ToArray());
+ }
+
+ Invalidate();
+ }
+ }
+}
diff --git a/PartPreviewWindow/View3D/View3DGroup.cs b/PartPreviewWindow/View3D/View3DGroup.cs
new file mode 100644
index 000000000..b802e34ef
--- /dev/null
+++ b/PartPreviewWindow/View3D/View3DGroup.cs
@@ -0,0 +1,93 @@
+/*
+Copyright (c) 2014, Lars Brubaker
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+The views and conclusions contained in the software and documentation are those
+of the authors and should not be interpreted as representing official policies,
+either expressed or implied, of the FreeBSD Project.
+*/
+
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Globalization;
+using System.Threading;
+using MatterHackers.Localizations;
+using MatterHackers.MeshVisualizer;
+using MatterHackers.PolygonMesh;
+
+namespace MatterHackers.MatterControl.PartPreviewWindow
+{
+ public partial class View3DWidget
+ {
+ void GroupSelectedMeshGroup()
+ {
+ if (MeshGroups.Count > 0)
+ {
+ processingProgressControl.PercentComplete = 0;
+ processingProgressControl.Visible = true;
+ LockEditControls();
+ viewIsInEditModePreLock = true;
+
+ BackgroundWorker createDiscreteMeshesBackgroundWorker = null;
+ createDiscreteMeshesBackgroundWorker = new BackgroundWorker();
+ createDiscreteMeshesBackgroundWorker.WorkerReportsProgress = true;
+
+ createDiscreteMeshesBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged);
+ createDiscreteMeshesBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(ungroupSelectedBackgroundWorker_RunWorkerCompleted);
+ createDiscreteMeshesBackgroundWorker.DoWork += new DoWorkEventHandler(ungroupSelectedBackgroundWorker_DoWork);
+
+ createDiscreteMeshesBackgroundWorker.RunWorkerAsync();
+ }
+ }
+
+ void groupSelectedBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
+ {
+ string makingCopyLabel = LocalizedString.Get("Grouping Meshes");
+ string makingCopyLabelFull = string.Format("{0}:", makingCopyLabel);
+ processingProgressControl.textWidget.Text = makingCopyLabelFull;
+
+ Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
+ BackgroundWorker backgroundWorker = (BackgroundWorker)sender;
+
+ PushMeshGroupDataToAsynchLists(TraceInfoOpperation.DO_COPY);
+ }
+
+ void groupSelectedBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
+ {
+ if (WidgetHasBeenClosed)
+ {
+ return;
+ }
+
+ // remove the original mesh and replace it with these new meshes
+ PullMeshGroupDataFromAsynchLists();
+
+ // our selection changed to the mesh we just added which is at the end
+ SelectedMeshGroupIndex = MeshGroups.Count - 1;
+
+ UnlockEditControls();
+
+ Invalidate();
+ }
+ }
+}
diff --git a/PartPreviewWindow/View3D/View3DUngroup.cs b/PartPreviewWindow/View3D/View3DUngroup.cs
index 336312eca..754fcea03 100644
--- a/PartPreviewWindow/View3D/View3DUngroup.cs
+++ b/PartPreviewWindow/View3D/View3DUngroup.cs
@@ -37,7 +37,7 @@ using MatterHackers.PolygonMesh;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
- public partial class View3DTransformPart
+ public partial class View3DWidget
{
void UngroupSelectedMeshGroup()
{
@@ -69,7 +69,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
BackgroundWorker backgroundWorker = (BackgroundWorker)sender;
- PushMeshGroupDataToAsynchLists(TranceInfoOpperation.DO_COPY);
+ PushMeshGroupDataToAsynchLists(TraceInfoOpperation.DO_COPY);
int indexBeingReplaced = MeshGroups.IndexOf(SelectedMeshGroup);
asynchMeshGroups[indexBeingReplaced].Transform(asynchMeshGroupTransforms[indexBeingReplaced].TotalTransform);
diff --git a/PartPreviewWindow/View3D/View3DTransfromPart.cs b/PartPreviewWindow/View3D/View3DWidget.cs
similarity index 95%
rename from PartPreviewWindow/View3D/View3DTransfromPart.cs
rename to PartPreviewWindow/View3D/View3DWidget.cs
index 83de74865..87506a631 100644
--- a/PartPreviewWindow/View3D/View3DTransfromPart.cs
+++ b/PartPreviewWindow/View3D/View3DWidget.cs
@@ -50,7 +50,7 @@ using MatterHackers.VectorMath;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
- public partial class View3DTransformPart : PartPreview3DWidget
+ public partial class View3DWidget : PartPreview3DWidget
{
public WindowType windowType { get; set; }
public PrintItemWrapper PrintItemWrapper {
@@ -269,7 +269,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public enum WindowType { Embeded, StandAlone };
public enum AutoRotate { Enabled, Disabled };
- public View3DTransformPart(PrintItemWrapper printItemWrapper, Vector3 viewerVolume, Vector2 bedCenter, MeshViewerWidget.BedShape bedShape, WindowType windowType, AutoRotate autoRotate, bool openInEditMode = false)
+ public View3DWidget(PrintItemWrapper printItemWrapper, Vector3 viewerVolume, Vector2 bedCenter, MeshViewerWidget.BedShape bedShape, WindowType windowType, AutoRotate autoRotate, bool openInEditMode = false)
{
this.windowType = windowType;
autoRotateEnabled = (autoRotate == AutoRotate.Enabled);
@@ -612,7 +612,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
processingProgressControl.PercentComplete = 0;
LockEditControls();
- PushMeshGroupDataToAsynchLists(TranceInfoOpperation.DO_COPY);
+ PushMeshGroupDataToAsynchLists(TraceInfoOpperation.DO_COPY);
BackgroundWorker loadAndAddPartsToPlateBackgroundWorker = null;
loadAndAddPartsToPlateBackgroundWorker = new BackgroundWorker();
@@ -626,8 +626,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
- enum TranceInfoOpperation { DONT_COPY, DO_COPY };
- private void PushMeshGroupDataToAsynchLists(TranceInfoOpperation tranceInfoOpperation)
+ enum TraceInfoOpperation { DONT_COPY, DO_COPY };
+ private void PushMeshGroupDataToAsynchLists(TraceInfoOpperation traceInfoOpperation)
{
asynchMeshGroups.Clear();
asynchMeshGroupTransforms.Clear();
@@ -652,7 +652,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
MeshGroup meshGroup = MeshGroups[meshGroupIndex];
for (int meshIndex = 0; meshIndex < meshGroup.Meshes.Count; meshIndex++)
{
- if (tranceInfoOpperation == TranceInfoOpperation.DO_COPY)
+ if (traceInfoOpperation == TraceInfoOpperation.DO_COPY)
{
meshData.meshTraceableData.AddRange(MeshGroupExtraData[meshGroupIndex].meshTraceableData);
}
@@ -819,85 +819,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
- void EnterEditAndCreateSelectionData()
- {
- if (enterEditButtonsContainer.Visible == true)
- {
- enterEditButtonsContainer.Visible = false;
- }
-
- autoArrangeButton.Visible = true;
-
- if (MeshGroups.Count > 0)
- {
- processingProgressControl.Visible = true;
- LockEditControls();
- viewIsInEditModePreLock = true;
-
- BackgroundWorker createSelectionDataBackgroundWorker = null;
- createSelectionDataBackgroundWorker = new BackgroundWorker();
- createSelectionDataBackgroundWorker.WorkerReportsProgress = true;
-
- createSelectionDataBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged);
- createSelectionDataBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(createSelectionDataBackgroundWorker_RunWorkerCompleted);
- createSelectionDataBackgroundWorker.DoWork += new DoWorkEventHandler(createSelectionDataBackgroundWorker_DoWork);
-
- createSelectionDataBackgroundWorker.RunWorkerAsync();
- }
- }
-
- void createSelectionDataBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
- {
- string makingCopyLabel = LocalizedString.Get("Creating Edit Data");
- string makingCopyLabelFull = string.Format("{0}:", makingCopyLabel);
- processingProgressControl.textWidget.Text = makingCopyLabelFull;
-
- Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
- BackgroundWorker backgroundWorker = (BackgroundWorker)sender;
-
- PushMeshGroupDataToAsynchLists(TranceInfoOpperation.DONT_COPY);
-
- asynchPlatingDatas.Clear();
- double ratioPerMeshGroup = 1.0 / asynchMeshGroups.Count;
- double currentRatioDone = 0;
- for (int i = 0; i < asynchMeshGroups.Count; i++)
- {
- PlatingMeshGroupData newInfo = new PlatingMeshGroupData();
- asynchPlatingDatas.Add(newInfo);
-
- MeshGroup meshGroup = asynchMeshGroups[i];
-
- // create the selection info
- PlatingHelper.CreateITraceableForMeshGroup(asynchPlatingDatas, asynchMeshGroups, i, (double progress0To1, string processingState) =>
- {
- int nextPercent = (int)((currentRatioDone + ratioPerMeshGroup * progress0To1) * 100);
- backgroundWorker.ReportProgress(nextPercent);
- return true;
- });
-
- currentRatioDone += ratioPerMeshGroup;
- }
- }
-
- void createSelectionDataBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
- {
- if (WidgetHasBeenClosed)
- {
- return;
- }
- // remove the original mesh and replace it with these new meshes
- PullMeshGroupDataFromAsynchLists();
-
- UnlockEditControls();
-
- if (pendingPartsToLoad.Count > 0)
- {
- LoadAndAddPartsToPlate(pendingPartsToLoad.ToArray());
- }
-
- Invalidate();
- }
-
void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
processingProgressControl.PercentComplete = e.ProgressPercentage;
@@ -1726,7 +1647,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
void mergeAndSavePartsBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
// we sent the data to the asynch lists but we will not pull it back out (only use it as a temp holder).
- PushMeshGroupDataToAsynchLists(TranceInfoOpperation.DO_COPY);
+ PushMeshGroupDataToAsynchLists(TraceInfoOpperation.DO_COPY);
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
BackgroundWorker backgroundWorker = (BackgroundWorker)sender;
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/PrintHistory/PrintHistoryListItem.cs b/PrintHistory/PrintHistoryListItem.cs
index 39b3d2737..0dca80312 100644
--- a/PrintHistory/PrintHistoryListItem.cs
+++ b/PrintHistory/PrintHistoryListItem.cs
@@ -296,11 +296,11 @@ namespace MatterHackers.MatterControl.PrintHistory
bool shiftKeyDown = Keyboard.IsKeyDown(Keys.ShiftKey);
if (shiftKeyDown)
{
- OpenPartPreviewWindow(printItem, View3DTransformPart.AutoRotate.Disabled);
+ OpenPartPreviewWindow(printItem, View3DWidget.AutoRotate.Disabled);
}
else
{
- OpenPartPreviewWindow(printItem, View3DTransformPart.AutoRotate.Enabled);
+ OpenPartPreviewWindow(printItem, View3DWidget.AutoRotate.Enabled);
}
}
else
@@ -335,7 +335,7 @@ namespace MatterHackers.MatterControl.PrintHistory
}
PartPreviewMainWindow partPreviewWindow;
- private void OpenPartPreviewWindow(PrintItem printItem, View3DTransformPart.AutoRotate autoRotate)
+ private void OpenPartPreviewWindow(PrintItem printItem, View3DWidget.AutoRotate autoRotate)
{
PrintItemWrapper itemWrapper = new PrintItemWrapper(printItem.Id);
diff --git a/PrintLibrary/LibraryRowItem.cs b/PrintLibrary/LibraryRowItem.cs
index 0aac0cdd5..1eac8d283 100644
--- a/PrintLibrary/LibraryRowItem.cs
+++ b/PrintLibrary/LibraryRowItem.cs
@@ -352,7 +352,7 @@ namespace MatterHackers.MatterControl.PrintLibrary
{
if (viewWindowIsOpen == false)
{
- viewingWindow = new PartPreviewMainWindow(this.printItemWrapper, View3DTransformPart.AutoRotate.Enabled, openInEditMode);
+ viewingWindow = new PartPreviewMainWindow(this.printItemWrapper, View3DWidget.AutoRotate.Enabled, openInEditMode);
this.viewWindowIsOpen = true;
viewingWindow.Closed += new EventHandler(PartPreviewMainWindow_Closed);
}
diff --git a/PrintQueue/QueueRowItem.cs b/PrintQueue/QueueRowItem.cs
index f9486c58a..4d5f1d054 100644
--- a/PrintQueue/QueueRowItem.cs
+++ b/PrintQueue/QueueRowItem.cs
@@ -255,7 +255,7 @@ namespace MatterHackers.MatterControl.PrintQueue
{
if (viewWindowIsOpen == false)
{
- viewingWindow = new PartPreviewMainWindow(this.PrintItemWrapper, View3DTransformPart.AutoRotate.Enabled, openInEditMode);
+ viewingWindow = new PartPreviewMainWindow(this.PrintItemWrapper, View3DWidget.AutoRotate.Enabled, openInEditMode);
this.viewWindowIsOpen = true;
viewingWindow.Closed += new EventHandler(PartPreviewWindow_Closed);
}
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/ControlWidgets/TemperatureControls.cs b/PrinterControls/ControlWidgets/TemperatureControls.cs
index f17d596d5..60493b0d6 100644
--- a/PrinterControls/ControlWidgets/TemperatureControls.cs
+++ b/PrinterControls/ControlWidgets/TemperatureControls.cs
@@ -51,7 +51,7 @@ namespace MatterHackers.MatterControl.PrinterControls
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/SlicerConfiguration/SlicingQueue.cs b/SlicerConfiguration/SlicingQueue.cs
index 674fbbc6d..f62c2dd2e 100644
--- a/SlicerConfiguration/SlicingQueue.cs
+++ b/SlicerConfiguration/SlicingQueue.cs
@@ -216,7 +216,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
Directory.CreateDirectory(folderToSaveStlsTo);
}
MeshOutputSettings settings = new MeshOutputSettings();
- settings.StlOnlySaveUseMaterialIndex = extruderIndex;
+ settings.OnlySaveMaterialIndex = extruderIndex;
string extruder1StlFileToSlice = Path.Combine(folderToSaveStlsTo, fileName);
MeshFileIo.Save(extruder1Group, extruder1StlFileToSlice, settings);
return extruder1StlFileToSlice;
diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt
index 793545489..7670ecbc8 100644
--- a/StaticData/Translations/Master.txt
+++ b/StaticData/Translations/Master.txt
@@ -2729,12 +2729,12 @@ Translated:Export...
English:Temperature
Translated:Temperature
+English:Align
+Translated:Align
+
English:Material 1
Translated:Material 1
English:Material 2
Translated:Material 2
-English:Material 3
-Translated:Material 3
-