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;
|
||||
}
|
||||
|
||||
if (settingsKey == "external_perimeters_first")
|
||||
{
|
||||
var a = 0;
|
||||
}
|
||||
|
||||
string settingsValue = null;
|
||||
|
||||
foreach (PrinterSettingsLayer layer in layerCascade)
|
||||
|
|
|
|||
|
|
@ -449,12 +449,25 @@ namespace MatterHackers.MatterControl
|
|||
|
||||
public event EventHandler ReloadSettingsTriggered;
|
||||
|
||||
public void UpdateAllSettingsStyles(PrinterConfig printer)
|
||||
{
|
||||
var printerTabPage = this.MainView.Descendants<PrinterTabPage>().Where(page => page.Printer == printer).FirstOrDefault();
|
||||
if (printerTabPage != null)
|
||||
{
|
||||
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)
|
||||
{
|
||||
ApplicationController.Instance.IsReloading = true;
|
||||
Instance.IsReloading = true;
|
||||
var settingsContext = new SettingsContext(
|
||||
printer,
|
||||
null,
|
||||
|
|
@ -475,7 +488,7 @@ namespace MatterHackers.MatterControl
|
|||
}
|
||||
|
||||
sideBar.ReplacePage("Slice Settings", new SliceSettingsWidget(printer, settingsContext, Theme));
|
||||
ApplicationController.Instance.IsReloading = false;
|
||||
Instance.IsReloading = false;
|
||||
}
|
||||
|
||||
ReloadSettingsTriggered?.Invoke(null, null);
|
||||
|
|
@ -1075,6 +1088,8 @@ namespace MatterHackers.MatterControl
|
|||
printer = this.ActivePrinters.First();
|
||||
}
|
||||
|
||||
printer.ForceSceneSettingsUpdate();
|
||||
|
||||
DialogWindow.Show(
|
||||
new ExportPrintItemPage(libraryItems, centerOnBed, printer));
|
||||
}
|
||||
|
|
@ -2020,7 +2035,7 @@ namespace MatterHackers.MatterControl
|
|||
var gcodeFilePath = await editContext.GCodeFilePath(printerConfig);
|
||||
var printItemName = editContext.SourceItem.Name;
|
||||
|
||||
printerConfig.StartingNewPrint();
|
||||
printerConfig.ForceSceneSettingsUpdate();
|
||||
|
||||
// Exit if called in a non-applicable state
|
||||
if (printerConfig.Connection.CommunicationState != CommunicationStates.Connected
|
||||
|
|
|
|||
|
|
@ -57,9 +57,9 @@ namespace MatterHackers.MatterControl
|
|||
private double heatDistance = 0;
|
||||
private double heatStart = 0;
|
||||
|
||||
// Hide the default constructor
|
||||
private PrinterConfig()
|
||||
{
|
||||
this.Connection = new PrinterConnection(this);
|
||||
}
|
||||
|
||||
public bool PrintButtonEnabled()
|
||||
|
|
@ -71,37 +71,39 @@ namespace MatterHackers.MatterControl
|
|||
|
||||
private PrinterSettingsLayer sceneOverrides = new PrinterSettingsLayer();
|
||||
|
||||
private RunningInterval checkForSceneLayer;
|
||||
private object locker = new object();
|
||||
private ulong undoBufferHashCode = ulong.MaxValue;
|
||||
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;
|
||||
UpdateSceneLayer();
|
||||
}
|
||||
|
||||
private PrinterSettingsLayer GetSceneLayer()
|
||||
private void UpdateSceneLayer()
|
||||
{
|
||||
var scene = Bed?.Scene;
|
||||
if (scene != null)
|
||||
{
|
||||
var undoBuffer = scene.UndoBuffer;
|
||||
|
||||
if (sceneOverrides != null
|
||||
&& undoBuffer != null
|
||||
if (scene.Children.Count == 0
|
||||
|| (undoBuffer != null
|
||||
&& undoBufferHashCode == undoBuffer.GetLongHashCode()
|
||||
&& sceneChildrenCount == scene.Children.Count)
|
||||
&& sceneChildrenCount == scene.Children.Count))
|
||||
{
|
||||
return sceneOverrides;
|
||||
return;
|
||||
}
|
||||
|
||||
var foundPartSettings = false;
|
||||
var newSceneOverrides = new PrinterSettingsLayer();
|
||||
// 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))
|
||||
{
|
||||
foundPartSettings = true;
|
||||
var settings = ((PartSettingsObject3D)partSettingsObject).Overrides;
|
||||
foreach (var setting in settings)
|
||||
{
|
||||
|
|
@ -110,7 +112,7 @@ namespace MatterHackers.MatterControl
|
|||
}
|
||||
|
||||
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)
|
||||
{
|
||||
// check each setting if it is the same
|
||||
|
|
@ -126,50 +128,36 @@ namespace MatterHackers.MatterControl
|
|||
// if they are different
|
||||
if (!same)
|
||||
{
|
||||
var settingsToUpdate = new HashSet<string>();
|
||||
var settingsToRevert = new PrinterSettingsLayer();
|
||||
var settingsToSet = new PrinterSettingsLayer();
|
||||
|
||||
foreach (var kvp in sceneOverrides)
|
||||
{
|
||||
settingsToUpdate.Add(kvp.Key);
|
||||
if (!newSceneOverrides.ContainsKey(kvp.Key))
|
||||
{
|
||||
settingsToRevert[kvp.Key] = kvp.Value;
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
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;
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
ApplicationController.Instance.UpdateAllSettingsStyles(this);
|
||||
}
|
||||
|
||||
// return the current set
|
||||
|
|
@ -179,10 +167,12 @@ namespace MatterHackers.MatterControl
|
|||
}
|
||||
|
||||
sceneChildrenCount = scene.Children.Count;
|
||||
return sceneOverrides;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
private PrinterSettingsLayer GetSceneLayer()
|
||||
{
|
||||
return sceneOverrides;
|
||||
}
|
||||
|
||||
public PrinterConfig(PrinterSettings settings)
|
||||
|
|
@ -211,6 +201,11 @@ namespace MatterHackers.MatterControl
|
|||
this.Bed.InvalidateBedMesh();
|
||||
|
||||
this.Settings.SettingChanged += Printer_SettingChanged;
|
||||
|
||||
sceneLayerUpdateInterval = UiThread.SetInterval(() =>
|
||||
{
|
||||
UpdateSceneLayer();
|
||||
}, .5);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -478,6 +473,9 @@ namespace MatterHackers.MatterControl
|
|||
|
||||
public void Dispose()
|
||||
{
|
||||
UiThread.ClearInterval(sceneLayerUpdateInterval);
|
||||
sceneLayerUpdateInterval = null;
|
||||
|
||||
// Unregister listeners
|
||||
this.Settings.SettingChanged -= Printer_SettingChanged;
|
||||
this.Connection.CommunicationStateChanged -= Connection_CommunicationStateChanged;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ either expressed or implied, of the FreeBSD Project.
|
|||
using MatterHackers.Agg;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.Localizations;
|
||||
using MatterHackers.MatterControl.CustomWidgets;
|
||||
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||
using System;
|
||||
|
||||
|
|
|
|||
|
|
@ -28,8 +28,6 @@ either expressed or implied, of the FreeBSD Project.
|
|||
*/
|
||||
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.DataConverters3D;
|
||||
using MatterHackers.MatterControl.DesignTools;
|
||||
|
||||
namespace MatterHackers.MatterControl.SlicerConfiguration
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue