Revise settings to slicer mappings
This commit is contained in:
parent
8e84a45c0b
commit
1c1434909d
10 changed files with 599 additions and 807 deletions
|
|
@ -54,94 +54,73 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
}
|
||||
}
|
||||
|
||||
public class MapItem
|
||||
public class MappedSetting
|
||||
{
|
||||
private string mappedKey;
|
||||
private string originalKey;
|
||||
|
||||
public MapItem(string mappedKey, string originalKey)
|
||||
public MappedSetting(string canonicalSettingsName, string exportedName)
|
||||
{
|
||||
this.mappedKey = mappedKey;
|
||||
this.originalKey = originalKey;
|
||||
this.CanonicalSettingsName = canonicalSettingsName;
|
||||
this.ExportedName = exportedName;
|
||||
}
|
||||
|
||||
protected static double ParseValueString(string valueString, double valueOnError = 0)
|
||||
public double ParseDouble(string textValue, double valueOnError = 0)
|
||||
{
|
||||
double value = valueOnError;
|
||||
|
||||
if (!double.TryParse(valueString, out value))
|
||||
double value;
|
||||
if (!double.TryParse(textValue, out value))
|
||||
{
|
||||
#if DEBUG
|
||||
throw new Exception("Slicing value is not a double.");
|
||||
#endif
|
||||
MatterControlApplication.BreakInDebugger("Slicing value is not a double.");
|
||||
return valueOnError;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
public static double GetValueForKey(string originalKey, double valueOnError = 0)
|
||||
public double ParseDoubleFromRawValue(string canonicalSettingsName, double valueOnError = 0)
|
||||
{
|
||||
return ParseValueString(ActiveSliceSettings.Instance.GetActiveValue(originalKey), valueOnError);
|
||||
return ParseDouble(ActiveSliceSettings.Instance.GetActiveValue(canonicalSettingsName), valueOnError);
|
||||
}
|
||||
|
||||
public string MappedKey { get { return mappedKey; } }
|
||||
public string ExportedName { get; }
|
||||
|
||||
public string OriginalKey { get { return originalKey; } }
|
||||
public string CanonicalSettingsName { get; }
|
||||
|
||||
public string OriginalValue { get { return ActiveSliceSettings.Instance.GetActiveValue(originalKey); } }
|
||||
|
||||
public virtual string MappedValue { get { return OriginalValue; } }
|
||||
public virtual string Value => ActiveSliceSettings.Instance.GetActiveValue(CanonicalSettingsName);
|
||||
}
|
||||
|
||||
public class MapFirstValue : MapItem
|
||||
public class MapFirstValue : MappedSetting
|
||||
{
|
||||
public MapFirstValue(string mappedKey, string originalKey)
|
||||
: base(mappedKey, originalKey)
|
||||
public MapFirstValue(string canonicalSettingsName, string exportedName)
|
||||
: base(canonicalSettingsName, exportedName)
|
||||
{
|
||||
}
|
||||
|
||||
public override string MappedValue
|
||||
{
|
||||
get
|
||||
{
|
||||
string mappedValue = base.MappedValue;
|
||||
if (mappedValue.Contains(","))
|
||||
{
|
||||
string[] splitValues = mappedValue.Split(',');
|
||||
return splitValues[0];
|
||||
}
|
||||
|
||||
return mappedValue;
|
||||
}
|
||||
}
|
||||
public override string Value => base.Value.Contains(",") ? base.Value.Split(',')[0] : base.Value;
|
||||
}
|
||||
|
||||
public class VisibleButNotMappedToEngine : MapItem
|
||||
/// <summary>
|
||||
/// Setting will appear in the editor, but it will not be passed to the slicing engine.
|
||||
/// These values are used in other parts of MatterControl, not slicing, but are held in the slicing data.
|
||||
/// </summary>
|
||||
/// <seealso cref="MatterHackers.MatterControl.SlicerConfiguration.MappedSetting" />
|
||||
public class VisibleButNotMappedToEngine : MappedSetting
|
||||
{
|
||||
public override string MappedValue
|
||||
public VisibleButNotMappedToEngine(string canonicalSettingsName)
|
||||
: base(canonicalSettingsName, "")
|
||||
{
|
||||
get
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This key will be show in the editor, but it will not be passed to the actual slicing engine.
|
||||
/// Some of these values are used in other parts of MatterControl, not slicing, but are held in the slicing data.
|
||||
/// </summary>
|
||||
/// <param name="originalKey"></param>
|
||||
public VisibleButNotMappedToEngine(string originalKey)
|
||||
: base("", originalKey)
|
||||
{
|
||||
}
|
||||
public override string Value => null;
|
||||
}
|
||||
|
||||
public class MapStartGCode : InjectGCodeCommands
|
||||
{
|
||||
private bool replaceCRs;
|
||||
private bool escapeCarriageReturns;
|
||||
|
||||
public override string MappedValue
|
||||
public MapStartGCode(string canonicalSettingsName, string exportedName, bool escapeCarriageReturns)
|
||||
: base(canonicalSettingsName, exportedName)
|
||||
{
|
||||
this.escapeCarriageReturns = escapeCarriageReturns;
|
||||
}
|
||||
|
||||
public override string Value
|
||||
{
|
||||
get
|
||||
{
|
||||
|
|
@ -151,7 +130,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
newStartGCode.Append(line + "\n");
|
||||
}
|
||||
|
||||
newStartGCode.Append(GCodeProcessing.ReplaceMacroValues(base.MappedValue));
|
||||
newStartGCode.Append(GCodeProcessing.ReplaceMacroValues(base.Value));
|
||||
|
||||
foreach (string line in PostStartGCode(SlicingQueue.extrudersUsed))
|
||||
{
|
||||
|
|
@ -159,7 +138,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
newStartGCode.Append(line);
|
||||
}
|
||||
|
||||
if (replaceCRs)
|
||||
if (escapeCarriageReturns)
|
||||
{
|
||||
return newStartGCode.ToString().Replace("\n", "\\n");
|
||||
}
|
||||
|
|
@ -168,12 +147,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
}
|
||||
}
|
||||
|
||||
public MapStartGCode(string mappedKey, string originalKey, bool replaceCRs)
|
||||
: base(mappedKey, originalKey)
|
||||
{
|
||||
this.replaceCRs = replaceCRs;
|
||||
}
|
||||
|
||||
public List<string> PreStartGCode(List<bool> extrudersUsed)
|
||||
{
|
||||
string startGCode = ActiveSliceSettings.Instance.GetActiveValue("start_gcode");
|
||||
|
|
@ -263,7 +236,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
numberOfHeatedExtruders = ActiveSliceSettings.Instance.ExtruderCount;
|
||||
}
|
||||
|
||||
// don't set the extrudes to heating if we alread waited for them to reach temp
|
||||
// don't set the extruders to heating if we already waited for them to reach temp
|
||||
if (ActiveSliceSettings.Instance.GetActiveValue("heat_extruder_before_homing") != "1")
|
||||
{
|
||||
for (int extruderIndex0Based = 0; extruderIndex0Based < numberOfHeatedExtruders; extruderIndex0Based++)
|
||||
|
|
@ -290,61 +263,48 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
}
|
||||
}
|
||||
|
||||
public class MapItemToBool : MapItem
|
||||
public class MappedToBoolString : MappedSetting
|
||||
{
|
||||
public override string MappedValue
|
||||
{
|
||||
get
|
||||
{
|
||||
if (base.MappedValue == "1")
|
||||
{
|
||||
return "True";
|
||||
}
|
||||
|
||||
return "False";
|
||||
}
|
||||
}
|
||||
|
||||
public MapItemToBool(string mappedKey, string originalKey)
|
||||
: base(mappedKey, originalKey)
|
||||
public MappedToBoolString(string canonicalSettingsName, string exportedName) : base(canonicalSettingsName, exportedName)
|
||||
{
|
||||
}
|
||||
|
||||
public override string Value => (base.Value == "1") ? "True" : "False";
|
||||
}
|
||||
|
||||
public class ScaledSingleNumber : MapFirstValue
|
||||
{
|
||||
internal double scale;
|
||||
|
||||
public override string MappedValue
|
||||
internal ScaledSingleNumber(string matterControlName, string exportedName, double scale = 1) : base(matterControlName, exportedName)
|
||||
{
|
||||
this.scale = scale;
|
||||
}
|
||||
|
||||
public override string Value
|
||||
{
|
||||
get
|
||||
{
|
||||
double ratio = 0;
|
||||
if (OriginalValue.Contains("%"))
|
||||
if (base.Value.Contains("%"))
|
||||
{
|
||||
string withoutPercent = OriginalValue.Replace("%", "");
|
||||
ratio = MapItem.ParseValueString(withoutPercent) / 100.0;
|
||||
string withoutPercent = base.Value.Replace("%", "");
|
||||
ratio = ParseDouble(withoutPercent) / 100.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ratio = MapItem.ParseValueString(base.MappedValue);
|
||||
ratio = ParseDouble(base.Value);
|
||||
}
|
||||
|
||||
return (ratio * scale).ToString();
|
||||
}
|
||||
}
|
||||
|
||||
internal ScaledSingleNumber(string mappedKey, string originalKey, double scale = 1)
|
||||
: base(mappedKey, originalKey)
|
||||
{
|
||||
this.scale = scale;
|
||||
}
|
||||
}
|
||||
|
||||
public class InjectGCodeCommands : ConvertCRs
|
||||
public class InjectGCodeCommands : MappedSetting
|
||||
{
|
||||
public InjectGCodeCommands(string mappedKey, string originalKey)
|
||||
: base(mappedKey, originalKey)
|
||||
public InjectGCodeCommands(string canonicalSettingsName, string exportedName)
|
||||
: base(canonicalSettingsName, exportedName)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -368,77 +328,68 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
}
|
||||
}
|
||||
|
||||
public class ConvertCRs : MapItem
|
||||
{
|
||||
public override string MappedValue
|
||||
{
|
||||
get
|
||||
{
|
||||
string actualCRs = base.MappedValue.Replace("\\n", "\n");
|
||||
return actualCRs;
|
||||
}
|
||||
}
|
||||
|
||||
public ConvertCRs(string mappedKey, string originalKey)
|
||||
: base(mappedKey, originalKey)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class AsCountOrDistance : MapItem
|
||||
public class AsCountOrDistance : MappedSetting
|
||||
{
|
||||
private string keyToUseAsDenominatorForCount;
|
||||
|
||||
public AsCountOrDistance(string mappedKey, string originalKey, string keyToUseAsDenominatorForCount)
|
||||
: base(mappedKey, originalKey)
|
||||
public AsCountOrDistance(string canonicalSettingsName, string exportedName, string keyToUseAsDenominatorForCount)
|
||||
: base(canonicalSettingsName, exportedName)
|
||||
{
|
||||
this.keyToUseAsDenominatorForCount = keyToUseAsDenominatorForCount;
|
||||
}
|
||||
|
||||
public override string MappedValue
|
||||
public override string Value
|
||||
{
|
||||
get
|
||||
{
|
||||
if (OriginalValue.Contains("mm"))
|
||||
|
||||
if (base.Value.Contains("mm"))
|
||||
{
|
||||
string withoutMm = OriginalValue.Replace("mm", "");
|
||||
string withoutMm = base.Value.Replace("mm", "");
|
||||
string distanceString = ActiveSliceSettings.Instance.GetActiveValue(keyToUseAsDenominatorForCount);
|
||||
double denominator = MapItem.ParseValueString(distanceString, 1);
|
||||
int layers = (int)(MapItem.ParseValueString(withoutMm) / denominator + .5);
|
||||
double denominator = ParseDouble(distanceString, 1);
|
||||
int layers = (int)(ParseDouble(withoutMm) / denominator + .5);
|
||||
return layers.ToString();
|
||||
}
|
||||
|
||||
return base.MappedValue;
|
||||
return base.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class AsPercentOfReferenceOrDirect : MapItem
|
||||
public class AsPercentOfReferenceOrDirect : MappedSetting
|
||||
{
|
||||
string originalReference;
|
||||
double scale;
|
||||
|
||||
public override string MappedValue
|
||||
public AsPercentOfReferenceOrDirect(string canonicalSettingsName, string exportedName, string originalReference, double scale = 1)
|
||||
: base(canonicalSettingsName, exportedName)
|
||||
{
|
||||
this.scale = scale;
|
||||
this.originalReference = originalReference;
|
||||
}
|
||||
|
||||
public override string Value
|
||||
{
|
||||
get
|
||||
{
|
||||
double finalValue = 0;
|
||||
if (OriginalValue.Contains("%"))
|
||||
if (base.Value.Contains("%"))
|
||||
{
|
||||
string withoutPercent = OriginalValue.Replace("%", "");
|
||||
double ratio = MapItem.ParseValueString(withoutPercent) / 100.0;
|
||||
string withoutPercent = base.Value.Replace("%", "");
|
||||
double ratio = ParseDouble(withoutPercent) / 100.0;
|
||||
string originalReferenceString = ActiveSliceSettings.Instance.GetActiveValue(originalReference);
|
||||
double valueToModify = MapItem.ParseValueString(originalReferenceString);
|
||||
double valueToModify = ParseDouble(originalReferenceString);
|
||||
finalValue = valueToModify * ratio;
|
||||
}
|
||||
else
|
||||
{
|
||||
finalValue = MapItem.ParseValueString(OriginalValue);
|
||||
finalValue = ParseDouble(base.Value);
|
||||
}
|
||||
|
||||
if (finalValue == 0)
|
||||
{
|
||||
finalValue = MapItem.ParseValueString(ActiveSliceSettings.Instance.GetActiveValue(originalReference));
|
||||
finalValue = ParseDouble(ActiveSliceSettings.Instance.GetActiveValue(originalReference));
|
||||
}
|
||||
|
||||
finalValue *= scale;
|
||||
|
|
@ -446,12 +397,5 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
return finalValue.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public AsPercentOfReferenceOrDirect(string mappedKey, string originalKey, string originalReference, double scale = 1)
|
||||
: base(mappedKey, originalKey)
|
||||
{
|
||||
this.scale = scale;
|
||||
this.originalReference = originalReference;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue