From abb56a5c76d25b8792d4cc1fff2edbf36f2c146d Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Thu, 15 Sep 2022 13:26:28 -0700 Subject: [PATCH] Reverting expression caching changes. The caching should happen in the sheet object not the property --- .../DesignTools/Operations/ArrayObject3D.cs | 2 +- .../DesignTools/PublicPropertyEditor.cs | 30 +++++++-------- .../DesignTools/Sheets/DirectOrExpression.cs | 38 +------------------ .../DesignTools/Sheets/DoubleOrExpression.cs | 2 +- .../DesignTools/Sheets/IntOrExpression.cs | 2 +- .../DesignTools/Sheets/SheetObject3D.cs | 4 +- .../DesignTools/Sheets/StringOrExpression.cs | 2 +- .../MatterControl/InteractiveSceneTests.cs | 17 +++++++++ 8 files changed, 39 insertions(+), 58 deletions(-) diff --git a/MatterControlLib/DesignTools/Operations/ArrayObject3D.cs b/MatterControlLib/DesignTools/Operations/ArrayObject3D.cs index 62dbeebc0..d410b1b4d 100644 --- a/MatterControlLib/DesignTools/Operations/ArrayObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/ArrayObject3D.cs @@ -53,7 +53,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations { foreach (var expression in SheetObject3D.GetActiveExpressions(item, expansion.key, false)) { - var expressionValue = expression.GetExpression(this.RebuildLocked); + var expressionValue = expression.Expression; expression.Expression = expressionValue.Replace(expansion.key, SheetObject3D.RetrieveArrayIndex(item, expansion.index).ToString()); } diff --git a/MatterControlLib/DesignTools/PublicPropertyEditor.cs b/MatterControlLib/DesignTools/PublicPropertyEditor.cs index f416c4e76..5327def06 100644 --- a/MatterControlLib/DesignTools/PublicPropertyEditor.cs +++ b/MatterControlLib/DesignTools/PublicPropertyEditor.cs @@ -324,7 +324,7 @@ namespace MatterHackers.MatterControl.DesignTools var oldValue = ""; if (property.Value is DirectOrExpression directOrExpression) { - oldValue = directOrExpression.GetExpression(false); + oldValue = directOrExpression.Expression; } else { @@ -839,9 +839,9 @@ namespace MatterHackers.MatterControl.DesignTools Name = property.DisplayName + " Field" }; field.Initialize(0); - if (doubleExpresion.GetExpression(false).Contains("=")) + if (doubleExpresion.Expression.Contains("=")) { - field.SetValue(doubleExpresion.GetExpression(false), false); + field.SetValue(doubleExpresion.Expression, false); } else // make sure it is formatted { @@ -863,7 +863,7 @@ namespace MatterHackers.MatterControl.DesignTools }, (value) => { - return ((DoubleOrExpression)value).GetExpression(false); + return ((DoubleOrExpression)value).Expression; }); rowContainer = CreateSettingsRow(property, @@ -884,9 +884,9 @@ namespace MatterHackers.MatterControl.DesignTools // if (newValue.Expression != field.Value) { // we should never be in the situation where there is an '=' as the in scene controls should be disabled - if (newValue.GetExpression(false).StartsWith("=")) + if (newValue.Expression.StartsWith("=")) { - field.TextValue = newValue.GetExpression(false); + field.TextValue = newValue.Expression; } else { @@ -914,9 +914,9 @@ namespace MatterHackers.MatterControl.DesignTools Name = property.DisplayName + " Field" }; field.Initialize(0); - if (intExpresion.GetExpression(false).Contains("=")) + if (intExpresion.Expression.Contains("=")) { - field.SetValue(intExpresion.GetExpression(false), false); + field.SetValue(intExpresion.Expression, false); } else // make sure it is formatted { @@ -938,7 +938,7 @@ namespace MatterHackers.MatterControl.DesignTools }, (value) => { - return ((IntOrExpression)value).GetExpression(false); + return ((IntOrExpression)value).Expression; }); rowContainer = CreateSettingsRow(property, @@ -959,9 +959,9 @@ namespace MatterHackers.MatterControl.DesignTools // if (newValue.Expression != field.Value) { // we should never be in the situation where there is an '=' as the in scene controls should be disabled - if (newValue.GetExpression(false).StartsWith("=")) + if (newValue.Expression.StartsWith("=")) { - field.TextValue = newValue.GetExpression(false); + field.TextValue = newValue.Expression; } else { @@ -1106,7 +1106,7 @@ namespace MatterHackers.MatterControl.DesignTools // create a a multi-line string editor var field = new MultilineStringField(theme); field.Initialize(0); - field.SetValue(stringOrExpression.GetExpression(false), false); + field.SetValue(stringOrExpression.Expression, false); field.ClearUndoHistory(); field.Content.HAnchor = HAnchor.Stretch; field.Content.Descendants().FirstOrDefault().MaximumSize = new Vector2(double.MaxValue, 200); @@ -1117,7 +1117,7 @@ namespace MatterHackers.MatterControl.DesignTools (valueString) => new StringOrExpression(valueString), (value) => { - return ((StringOrExpression)value).GetExpression(false); + return ((StringOrExpression)value).Expression; }); rowContainer = CreateSettingsColumn(property, field, fullWidth: true); } @@ -1126,14 +1126,14 @@ namespace MatterHackers.MatterControl.DesignTools // create a string editor var field = new TextField(theme); field.Initialize(0); - field.SetValue(stringOrExpression.GetExpression(false), false); + field.SetValue(stringOrExpression.Expression, false); field.ClearUndoHistory(); field.Content.HAnchor = HAnchor.Stretch; RegisterValueChanged(field, (valueString) => new StringOrExpression(valueString), (value) => { - return ((StringOrExpression)value).GetExpression(false); + return ((StringOrExpression)value).Expression; }); rowContainer = CreateSettingsColumn(property, field, fullWidth: true); } diff --git a/MatterControlLib/DesignTools/Sheets/DirectOrExpression.cs b/MatterControlLib/DesignTools/Sheets/DirectOrExpression.cs index b25b53035..faf05b5b2 100644 --- a/MatterControlLib/DesignTools/Sheets/DirectOrExpression.cs +++ b/MatterControlLib/DesignTools/Sheets/DirectOrExpression.cs @@ -41,51 +41,15 @@ namespace MatterHackers.MatterControl.DesignTools { get { - internalGet = true; var value = Expression.Length > 0 && Expression[0] == '='; - internalGet = false; return value; } } public string ExpressionValueAtLastRebuild { get; set; } = ""; - private bool internalGet = false; - private string _expression; - - public string Expression - { - private get - { - if (!internalGet) - { - throw new Exception("All get accessing should run through GetExpression rather than direct"); - } - return _expression; - } - - set => _expression = value; - } + public string Expression { get; set; } public override string ToString() => Expression; - - public string GetExpression(bool rebuilding) - { - internalGet = true; - var expression = ""; - try - { - if (rebuilding) - { - ExpressionValueAtLastRebuild = Expression; - } - - expression = Expression; - } - catch { } - - internalGet = false; - return expression; - } } } \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Sheets/DoubleOrExpression.cs b/MatterControlLib/DesignTools/Sheets/DoubleOrExpression.cs index d9ea44366..8b1f8ddf4 100644 --- a/MatterControlLib/DesignTools/Sheets/DoubleOrExpression.cs +++ b/MatterControlLib/DesignTools/Sheets/DoubleOrExpression.cs @@ -40,7 +40,7 @@ namespace MatterHackers.MatterControl.DesignTools { public double Value(IObject3D owner) { - var value = SheetObject3D.EvaluateExpression(owner, GetExpression(owner.RebuildLocked)); + var value = SheetObject3D.EvaluateExpression(owner, Expression); if (owner.RebuildLocked) { ExpressionValueAtLastRebuild = value.ToString(); diff --git a/MatterControlLib/DesignTools/Sheets/IntOrExpression.cs b/MatterControlLib/DesignTools/Sheets/IntOrExpression.cs index 93152f7a7..d26c3d5f6 100644 --- a/MatterControlLib/DesignTools/Sheets/IntOrExpression.cs +++ b/MatterControlLib/DesignTools/Sheets/IntOrExpression.cs @@ -39,7 +39,7 @@ namespace MatterHackers.MatterControl.DesignTools public int Value(IObject3D owner) { var rebuilding = owner.RebuildLocked; - var value = SheetObject3D.EvaluateExpression(owner, GetExpression(rebuilding)); + var value = SheetObject3D.EvaluateExpression(owner, Expression); if (rebuilding) { ExpressionValueAtLastRebuild = value.ToString(); diff --git a/MatterControlLib/DesignTools/Sheets/SheetObject3D.cs b/MatterControlLib/DesignTools/Sheets/SheetObject3D.cs index 36678926e..255f4cd92 100644 --- a/MatterControlLib/DesignTools/Sheets/SheetObject3D.cs +++ b/MatterControlLib/DesignTools/Sheets/SheetObject3D.cs @@ -596,7 +596,7 @@ namespace MatterHackers.MatterControl.DesignTools { if (startsWith) { - if (directOrExpression.GetExpression(false).StartsWith(checkForString)) + if (directOrExpression.Expression.StartsWith(checkForString)) { // WIP: check if the value has actually changed, this will update every object on any cell change yield return directOrExpression; @@ -604,7 +604,7 @@ namespace MatterHackers.MatterControl.DesignTools } else { - if(directOrExpression.GetExpression(false).Contains(checkForString)) + if(directOrExpression.Expression.Contains(checkForString)) { yield return directOrExpression; } diff --git a/MatterControlLib/DesignTools/Sheets/StringOrExpression.cs b/MatterControlLib/DesignTools/Sheets/StringOrExpression.cs index 334451fd1..7bbb7cffb 100644 --- a/MatterControlLib/DesignTools/Sheets/StringOrExpression.cs +++ b/MatterControlLib/DesignTools/Sheets/StringOrExpression.cs @@ -38,7 +38,7 @@ namespace MatterHackers.MatterControl.DesignTools public string Value(IObject3D owner) { var rebuilding = owner.RebuildLocked; - var value = SheetObject3D.EvaluateExpression(owner, GetExpression(rebuilding)); + var value = SheetObject3D.EvaluateExpression(owner, Expression); if (rebuilding) { ExpressionValueAtLastRebuild = value.ToString(); diff --git a/Tests/MatterControl.Tests/MatterControl/InteractiveSceneTests.cs b/Tests/MatterControl.Tests/MatterControl/InteractiveSceneTests.cs index fbb5ce7ff..67d1f418f 100644 --- a/Tests/MatterControl.Tests/MatterControl/InteractiveSceneTests.cs +++ b/Tests/MatterControl.Tests/MatterControl/InteractiveSceneTests.cs @@ -40,6 +40,7 @@ using MatterHackers.PolygonMesh; using MatterHackers.PolygonMesh.Processors; using MatterHackers.VectorMath; using NUnit.Framework; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -381,6 +382,22 @@ namespace MatterControl.Tests.MatterControl } } + [Test, Category("InteractiveScene")] + public async Task CopyObjectTests() + { + StartupMC(); + + // Copying an object copies the internal state correctly + { + var cubeA1 = await CubeObject3D.Create(10, 20, 20); + + var copy = cubeA1.Clone() as CubeObject3D; + + Assert.AreEqual(10, copy.Width.Expression, "10"); + Assert.AreEqual(10, copy.GetAxisAlignedBoundingBox().XSize, .001); + } + } + [Test, Category("InteractiveScene")] public async Task AabbCalculatedCorrectlyForPinchedFitObjects() {