Part settings working much better
This commit is contained in:
parent
a0324468a6
commit
67fcc953b0
5 changed files with 85 additions and 70 deletions
|
|
@ -1317,6 +1317,11 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
||||||
layerCascade = DefaultLayerCascade;
|
layerCascade = DefaultLayerCascade;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settingsKey == "external_perimeters_first")
|
||||||
|
{
|
||||||
|
var a = 0;
|
||||||
|
}
|
||||||
|
|
||||||
string settingsValue = null;
|
string settingsValue = null;
|
||||||
|
|
||||||
foreach (PrinterSettingsLayer layer in layerCascade)
|
foreach (PrinterSettingsLayer layer in layerCascade)
|
||||||
|
|
|
||||||
|
|
@ -449,12 +449,25 @@ namespace MatterHackers.MatterControl
|
||||||
|
|
||||||
public event EventHandler ReloadSettingsTriggered;
|
public event EventHandler ReloadSettingsTriggered;
|
||||||
|
|
||||||
public void ReloadSettings(PrinterConfig printer)
|
public void UpdateAllSettingsStyles(PrinterConfig printer)
|
||||||
{
|
{
|
||||||
var printerTabPage = this.MainView.Descendants<PrinterTabPage>().Where(page => page.Printer == printer).FirstOrDefault();
|
var printerTabPage = this.MainView.Descendants<PrinterTabPage>().Where(page => page.Printer == printer).FirstOrDefault();
|
||||||
if (printerTabPage != null)
|
if (printerTabPage != null)
|
||||||
{
|
{
|
||||||
ApplicationController.Instance.IsReloading = true;
|
var sliceSettingsWidget = printerTabPage.Descendants<SliceSettingsWidget>().FirstOrDefault();
|
||||||
|
if (sliceSettingsWidget != null)
|
||||||
|
{
|
||||||
|
sliceSettingsWidget.UpdateAllStyles();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ReloadSettings(PrinterConfig printer)
|
||||||
|
{
|
||||||
|
var printerTabPage = this.MainView.Descendants<PrinterTabPage>().Where(page => page.Printer == printer).FirstOrDefault();
|
||||||
|
if (printerTabPage != null)
|
||||||
|
{
|
||||||
|
Instance.IsReloading = true;
|
||||||
var settingsContext = new SettingsContext(
|
var settingsContext = new SettingsContext(
|
||||||
printer,
|
printer,
|
||||||
null,
|
null,
|
||||||
|
|
@ -475,7 +488,7 @@ namespace MatterHackers.MatterControl
|
||||||
}
|
}
|
||||||
|
|
||||||
sideBar.ReplacePage("Slice Settings", new SliceSettingsWidget(printer, settingsContext, Theme));
|
sideBar.ReplacePage("Slice Settings", new SliceSettingsWidget(printer, settingsContext, Theme));
|
||||||
ApplicationController.Instance.IsReloading = false;
|
Instance.IsReloading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReloadSettingsTriggered?.Invoke(null, null);
|
ReloadSettingsTriggered?.Invoke(null, null);
|
||||||
|
|
@ -1069,13 +1082,15 @@ namespace MatterHackers.MatterControl
|
||||||
{
|
{
|
||||||
if (printer != null || this.ActivePrinters.Count() == 1)
|
if (printer != null || this.ActivePrinters.Count() == 1)
|
||||||
{
|
{
|
||||||
// If unspecified but count is one, select the one active printer
|
// If unspecified but count is one, select the one active printer
|
||||||
if (printer == null)
|
if (printer == null)
|
||||||
{
|
{
|
||||||
printer = this.ActivePrinters.First();
|
printer = this.ActivePrinters.First();
|
||||||
}
|
}
|
||||||
|
|
||||||
DialogWindow.Show(
|
printer.ForceSceneSettingsUpdate();
|
||||||
|
|
||||||
|
DialogWindow.Show(
|
||||||
new ExportPrintItemPage(libraryItems, centerOnBed, printer));
|
new ExportPrintItemPage(libraryItems, centerOnBed, printer));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -2020,7 +2035,7 @@ namespace MatterHackers.MatterControl
|
||||||
var gcodeFilePath = await editContext.GCodeFilePath(printerConfig);
|
var gcodeFilePath = await editContext.GCodeFilePath(printerConfig);
|
||||||
var printItemName = editContext.SourceItem.Name;
|
var printItemName = editContext.SourceItem.Name;
|
||||||
|
|
||||||
printerConfig.StartingNewPrint();
|
printerConfig.ForceSceneSettingsUpdate();
|
||||||
|
|
||||||
// Exit if called in a non-applicable state
|
// Exit if called in a non-applicable state
|
||||||
if (printerConfig.Connection.CommunicationState != CommunicationStates.Connected
|
if (printerConfig.Connection.CommunicationState != CommunicationStates.Connected
|
||||||
|
|
|
||||||
|
|
@ -57,10 +57,10 @@ namespace MatterHackers.MatterControl
|
||||||
private double heatDistance = 0;
|
private double heatDistance = 0;
|
||||||
private double heatStart = 0;
|
private double heatStart = 0;
|
||||||
|
|
||||||
private PrinterConfig()
|
// Hide the default constructor
|
||||||
|
private PrinterConfig()
|
||||||
{
|
{
|
||||||
this.Connection = new PrinterConnection(this);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public bool PrintButtonEnabled()
|
public bool PrintButtonEnabled()
|
||||||
{
|
{
|
||||||
|
|
@ -71,37 +71,39 @@ namespace MatterHackers.MatterControl
|
||||||
|
|
||||||
private PrinterSettingsLayer sceneOverrides = new PrinterSettingsLayer();
|
private PrinterSettingsLayer sceneOverrides = new PrinterSettingsLayer();
|
||||||
|
|
||||||
private RunningInterval checkForSceneLayer;
|
|
||||||
private object locker = new object();
|
private object locker = new object();
|
||||||
private ulong undoBufferHashCode = ulong.MaxValue;
|
private ulong undoBufferHashCode = ulong.MaxValue;
|
||||||
private int sceneChildrenCount = 0;
|
private int sceneChildrenCount = 0;
|
||||||
|
private RunningInterval sceneLayerUpdateInterval;
|
||||||
|
|
||||||
public void StartingNewPrint()
|
/// <summary>
|
||||||
|
/// Make sure any settings object that has been added to the scene is processed right away
|
||||||
|
/// </summary>
|
||||||
|
public void ForceSceneSettingsUpdate()
|
||||||
{
|
{
|
||||||
undoBufferHashCode = ulong.MaxValue;
|
undoBufferHashCode = ulong.MaxValue;
|
||||||
|
UpdateSceneLayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
private PrinterSettingsLayer GetSceneLayer()
|
private void UpdateSceneLayer()
|
||||||
{
|
{
|
||||||
var scene = Bed?.Scene;
|
var scene = Bed?.Scene;
|
||||||
if (scene != null)
|
if (scene != null)
|
||||||
{
|
{
|
||||||
var undoBuffer = scene.UndoBuffer;
|
var undoBuffer = scene.UndoBuffer;
|
||||||
|
|
||||||
if (sceneOverrides != null
|
if (scene.Children.Count == 0
|
||||||
&& undoBuffer != null
|
|| (undoBuffer != null
|
||||||
&& undoBufferHashCode == undoBuffer.GetLongHashCode()
|
&& undoBufferHashCode == undoBuffer.GetLongHashCode()
|
||||||
&& sceneChildrenCount == scene.Children.Count)
|
&& sceneChildrenCount == scene.Children.Count))
|
||||||
{
|
{
|
||||||
return sceneOverrides;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var foundPartSettings = false;
|
|
||||||
var newSceneOverrides = new PrinterSettingsLayer();
|
var newSceneOverrides = new PrinterSettingsLayer();
|
||||||
// accumulate all the scene overrides ordered by their names, which is the order they will be in the design tree
|
// accumulate all the scene overrides ordered by their names, which is the order they will be in the design tree
|
||||||
foreach (var partSettingsObject in scene.DescendantsAndSelf().Where(c => c is PartSettingsObject3D && c.Parent?.WorldPrintable() == true).OrderBy(i => i.Name))
|
foreach (var partSettingsObject in scene.DescendantsAndSelf().Where(c => c is PartSettingsObject3D && c.Parent?.WorldPrintable() == true).OrderBy(i => i.Name))
|
||||||
{
|
{
|
||||||
foundPartSettings = true;
|
|
||||||
var settings = ((PartSettingsObject3D)partSettingsObject).Overrides;
|
var settings = ((PartSettingsObject3D)partSettingsObject).Overrides;
|
||||||
foreach (var setting in settings)
|
foreach (var setting in settings)
|
||||||
{
|
{
|
||||||
|
|
@ -110,7 +112,7 @@ namespace MatterHackers.MatterControl
|
||||||
}
|
}
|
||||||
|
|
||||||
var same = newSceneOverrides.Count == sceneOverrides.Count && !newSceneOverrides.Except(sceneOverrides).Any();
|
var same = newSceneOverrides.Count == sceneOverrides.Count && !newSceneOverrides.Except(sceneOverrides).Any();
|
||||||
// if settings count and keys the same, check the value of the settings
|
// if settings count and keys are the same, check the value of the settings
|
||||||
if (same && sceneOverrides.Count > 0)
|
if (same && sceneOverrides.Count > 0)
|
||||||
{
|
{
|
||||||
// check each setting if it is the same
|
// check each setting if it is the same
|
||||||
|
|
@ -126,66 +128,54 @@ namespace MatterHackers.MatterControl
|
||||||
// if they are different
|
// if they are different
|
||||||
if (!same)
|
if (!same)
|
||||||
{
|
{
|
||||||
var settingsToUpdate = new HashSet<string>();
|
var settingsToRevert = new PrinterSettingsLayer();
|
||||||
|
var settingsToSet = new PrinterSettingsLayer();
|
||||||
|
|
||||||
foreach (var kvp in sceneOverrides)
|
foreach (var kvp in sceneOverrides)
|
||||||
{
|
{
|
||||||
settingsToUpdate.Add(kvp.Key);
|
if (!newSceneOverrides.ContainsKey(kvp.Key))
|
||||||
}
|
{
|
||||||
|
settingsToRevert[kvp.Key] = kvp.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var kvp in newSceneOverrides)
|
foreach (var kvp in newSceneOverrides)
|
||||||
{
|
{
|
||||||
settingsToUpdate.Add(kvp.Key);
|
if (newSceneOverrides[kvp.Key] != kvp.Value)
|
||||||
}
|
{
|
||||||
|
settingsToSet[kvp.Key] = newSceneOverrides[kvp.Key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// store that current set
|
// store that current set
|
||||||
sceneOverrides = newSceneOverrides;
|
sceneOverrides = newSceneOverrides;
|
||||||
|
|
||||||
// we are about to update settings but they are stored in the scene not the profile so we don't have to save anything
|
|
||||||
var updateList = settingsToUpdate.ToList();
|
|
||||||
ProfileManager.SaveOnSingleSettingChange = false;
|
ProfileManager.SaveOnSingleSettingChange = false;
|
||||||
for (int i = 0; i < updateList.Count; i++)
|
Settings.RestoreConflictingUserOverrides(settingsToRevert);
|
||||||
{
|
foreach(var setting in newSceneOverrides)
|
||||||
Settings.OnSettingChanged(updateList[i]);
|
{
|
||||||
}
|
Settings.SetValue(setting.Key, setting.Value, sceneOverrides);
|
||||||
ProfileManager.SaveOnSingleSettingChange = true;
|
}
|
||||||
}
|
ProfileManager.SaveOnSingleSettingChange = true;
|
||||||
|
ApplicationController.Instance.UpdateAllSettingsStyles(this);
|
||||||
if (foundPartSettings)
|
|
||||||
{
|
|
||||||
lock (locker)
|
|
||||||
{
|
|
||||||
if (checkForSceneLayer == null)
|
|
||||||
{
|
|
||||||
checkForSceneLayer = UiThread.SetInterval(() =>
|
|
||||||
{
|
|
||||||
GetSceneLayer();
|
|
||||||
}, .5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (checkForSceneLayer != null)
|
|
||||||
{
|
|
||||||
lock (locker)
|
|
||||||
{
|
|
||||||
// we don't have a scene layer so remove the interval
|
|
||||||
UiThread.ClearInterval(checkForSceneLayer);
|
|
||||||
checkForSceneLayer = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// return the current set
|
// return the current set
|
||||||
if (undoBuffer != null)
|
if (undoBuffer != null)
|
||||||
{
|
{
|
||||||
undoBufferHashCode = undoBuffer.GetLongHashCode();
|
undoBufferHashCode = undoBuffer.GetLongHashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
sceneChildrenCount = scene.Children.Count;
|
sceneChildrenCount = scene.Children.Count;
|
||||||
return sceneOverrides;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public PrinterConfig(PrinterSettings settings)
|
private PrinterSettingsLayer GetSceneLayer()
|
||||||
|
{
|
||||||
|
return sceneOverrides;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PrinterConfig(PrinterSettings settings)
|
||||||
{
|
{
|
||||||
this.Settings = settings;
|
this.Settings = settings;
|
||||||
|
|
||||||
|
|
@ -211,6 +201,11 @@ namespace MatterHackers.MatterControl
|
||||||
this.Bed.InvalidateBedMesh();
|
this.Bed.InvalidateBedMesh();
|
||||||
|
|
||||||
this.Settings.SettingChanged += Printer_SettingChanged;
|
this.Settings.SettingChanged += Printer_SettingChanged;
|
||||||
|
|
||||||
|
sceneLayerUpdateInterval = UiThread.SetInterval(() =>
|
||||||
|
{
|
||||||
|
UpdateSceneLayer();
|
||||||
|
}, .5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -478,8 +473,11 @@ namespace MatterHackers.MatterControl
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
// Unregister listeners
|
UiThread.ClearInterval(sceneLayerUpdateInterval);
|
||||||
this.Settings.SettingChanged -= Printer_SettingChanged;
|
sceneLayerUpdateInterval = null;
|
||||||
|
|
||||||
|
// Unregister listeners
|
||||||
|
this.Settings.SettingChanged -= Printer_SettingChanged;
|
||||||
this.Connection.CommunicationStateChanged -= Connection_CommunicationStateChanged;
|
this.Connection.CommunicationStateChanged -= Connection_CommunicationStateChanged;
|
||||||
this.Connection.DetailedPrintingStateChanged -= Connection_CommunicationStateChanged;
|
this.Connection.DetailedPrintingStateChanged -= Connection_CommunicationStateChanged;
|
||||||
this.Connection.PrintFinished -= Connection_PrintFinished;
|
this.Connection.PrintFinished -= Connection_PrintFinished;
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ either expressed or implied, of the FreeBSD Project.
|
||||||
using MatterHackers.Agg;
|
using MatterHackers.Agg;
|
||||||
using MatterHackers.Agg.UI;
|
using MatterHackers.Agg.UI;
|
||||||
using MatterHackers.Localizations;
|
using MatterHackers.Localizations;
|
||||||
using MatterHackers.MatterControl.CustomWidgets;
|
|
||||||
using MatterHackers.MatterControl.SlicerConfiguration;
|
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,6 @@ either expressed or implied, of the FreeBSD Project.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using MatterHackers.Agg.UI;
|
using MatterHackers.Agg.UI;
|
||||||
using MatterHackers.DataConverters3D;
|
|
||||||
using MatterHackers.MatterControl.DesignTools;
|
|
||||||
|
|
||||||
namespace MatterHackers.MatterControl.SlicerConfiguration
|
namespace MatterHackers.MatterControl.SlicerConfiguration
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue