diff --git a/MatterControl.MeshOperations/OperationSourceContainerObject3D.cs b/MatterControl.MeshOperations/OperationSourceContainerObject3D.cs index 02647ad44..09d5d7a24 100644 --- a/MatterControl.MeshOperations/OperationSourceContainerObject3D.cs +++ b/MatterControl.MeshOperations/OperationSourceContainerObject3D.cs @@ -177,29 +177,32 @@ namespace MatterHackers.MatterControl.DesignTools.Operations Invalidate(InvalidateType.Children); } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { // TODO: color and output type could have special consideration that would not require a rebuild // They could just propagate the color and output type to the correctly child and everything would be good - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Path) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Color) - || invalidateType.InvalidateType.HasFlag(InvalidateType.OutputType)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Path) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Color) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.OutputType)) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) { await Rebuild(); } + //else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) + //{ + // await Rebuild(); + //} else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Obsolete/CurveObject3D.cs b/MatterControlLib/DesignTools/Obsolete/CurveObject3D.cs index c557c83e7..d735969c8 100644 --- a/MatterControlLib/DesignTools/Obsolete/CurveObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/CurveObject3D.cs @@ -92,24 +92,27 @@ namespace MatterHackers.MatterControl.DesignTools GL.Enable(EnableCap.Lighting); } - public override void OnInvalidate(InvalidateArgs invalidateType) + public override void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) + && invalidateArgs.Source != this && !RebuildLocked) { Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Obsolete/FitToBoundsObject3D.cs b/MatterControlLib/DesignTools/Obsolete/FitToBoundsObject3D.cs index d972e6294..cd37f8c9a 100644 --- a/MatterControlLib/DesignTools/Obsolete/FitToBoundsObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/FitToBoundsObject3D.cs @@ -144,24 +144,27 @@ namespace MatterHackers.MatterControl.DesignTools.Operations Parent?.Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } - public override void OnInvalidate(InvalidateArgs invalidateType) + public override void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) + && invalidateArgs.Source != this && !RebuildLocked) { Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Obsolete/PinchObject3D.cs b/MatterControlLib/DesignTools/Obsolete/PinchObject3D.cs index 7f54fa7a1..cc8ffb9ba 100644 --- a/MatterControlLib/DesignTools/Obsolete/PinchObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/PinchObject3D.cs @@ -55,24 +55,27 @@ namespace MatterHackers.MatterControl.DesignTools [DisplayName("Back Ratio")] public double PinchRatio { get; set; } = .5; - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Obsolete/RotateObject3D.cs b/MatterControlLib/DesignTools/Obsolete/RotateObject3D.cs index d01a473d1..155b7baee 100644 --- a/MatterControlLib/DesignTools/Obsolete/RotateObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/RotateObject3D.cs @@ -98,23 +98,26 @@ namespace MatterHackers.MatterControl.DesignTools.Operations return Task.CompletedTask; } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } } \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Operations/AlignObject3D.cs b/MatterControlLib/DesignTools/Operations/AlignObject3D.cs index b17bc957f..a6560c2b6 100644 --- a/MatterControlLib/DesignTools/Operations/AlignObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/AlignObject3D.cs @@ -313,25 +313,28 @@ namespace MatterHackers.MatterControl.DesignTools.Operations return positionToAlignTo + extraOffset; } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { // and also always pass back the actual type - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Operations/FitToBoundsObject3D_3.cs b/MatterControlLib/DesignTools/Operations/FitToBoundsObject3D_3.cs index b7ebaa7ac..507aeaa3b 100644 --- a/MatterControlLib/DesignTools/Operations/FitToBoundsObject3D_3.cs +++ b/MatterControlLib/DesignTools/Operations/FitToBoundsObject3D_3.cs @@ -175,32 +175,35 @@ namespace MatterHackers.MatterControl.DesignTools.Operations return base.GetAxisAlignedBoundingBox(matrix); } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - additonalInvalidate = invalidateType.InvalidateType; + additonalInvalidate = invalidateArgs.InvalidateType; - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) { await Rebuild(); } - else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Children)) + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { - base.OnInvalidate(invalidateType); + await Rebuild(); + } + else if (invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children)) + { + base.OnInvalidate(invalidateArgs); } - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); additonalInvalidate = InvalidateType.None; } diff --git a/MatterControlLib/DesignTools/Operations/FitToCylinderObject3D.cs b/MatterControlLib/DesignTools/Operations/FitToCylinderObject3D.cs index 27427953c..1ca4b7031 100644 --- a/MatterControlLib/DesignTools/Operations/FitToCylinderObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/FitToCylinderObject3D.cs @@ -130,30 +130,33 @@ namespace MatterHackers.MatterControl.DesignTools.Operations return base.GetAxisAlignedBoundingBox(matrix); } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) { await Rebuild(); } - else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Children)) + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { - base.OnInvalidate(invalidateType); + await Rebuild(); + } + else if (invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children)) + { + base.OnInvalidate(invalidateArgs); } - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } public override Task Rebuild() diff --git a/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D.cs b/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D.cs index 5f5e2cfb0..9d52a55a7 100644 --- a/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D.cs @@ -267,22 +267,24 @@ namespace MatterHackers.MatterControl.DesignTools } } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if (invalidateType.InvalidateType.HasFlag(InvalidateType.Image) - && invalidateType.Source != this + if (invalidateArgs.InvalidateType.HasFlag(InvalidateType.Image) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { - UpdateHistogramDisplay(); await Rebuild(); } - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } private Color GetRGBA(byte[] buffer, int offset) @@ -294,6 +296,7 @@ namespace MatterHackers.MatterControl.DesignTools { this.DebugDepth("Rebuild"); + UpdateHistogramDisplay(); bool propertyUpdated = false; var minSeparation = .01; var rangeStart = RangeStart.Value(this); diff --git a/MatterControlLib/DesignTools/Operations/Path/InflatePathObject3D.cs b/MatterControlLib/DesignTools/Operations/Path/InflatePathObject3D.cs index 61708058e..aed00d6ba 100644 --- a/MatterControlLib/DesignTools/Operations/Path/InflatePathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Path/InflatePathObject3D.cs @@ -68,24 +68,27 @@ namespace MatterHackers.MatterControl.DesignTools.Operations object3DControlsLayer.AddControls(ControlTypes.Standard2D); } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Path)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Path)) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Operations/Path/OutlinePathObject3D.cs b/MatterControlLib/DesignTools/Operations/Path/OutlinePathObject3D.cs index 7a0224ec2..c92a04954 100644 --- a/MatterControlLib/DesignTools/Operations/Path/OutlinePathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Path/OutlinePathObject3D.cs @@ -63,24 +63,27 @@ namespace MatterHackers.MatterControl.DesignTools.Operations [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] public ExpandStyles OuterStyle { get; set; } = ExpandStyles.Sharp; - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Path)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Path)) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Operations/Path/SmoothPathObject3D.cs b/MatterControlLib/DesignTools/Operations/Path/SmoothPathObject3D.cs index 24e4e2909..cae1f196c 100644 --- a/MatterControlLib/DesignTools/Operations/Path/SmoothPathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Path/SmoothPathObject3D.cs @@ -61,24 +61,27 @@ namespace MatterHackers.MatterControl.DesignTools.Operations object3DControlsLayer.AddControls(ControlTypes.Standard2D); } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Path)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Path)) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Operations/TranslateObject3D.cs b/MatterControlLib/DesignTools/Operations/TranslateObject3D.cs index 76ce47dc8..6e675c3ae 100644 --- a/MatterControlLib/DesignTools/Operations/TranslateObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/TranslateObject3D.cs @@ -78,24 +78,27 @@ namespace MatterHackers.MatterControl.DesignTools.Operations #endregion // editable properties - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/BaseObject3D.cs b/MatterControlLib/DesignTools/Primitives/BaseObject3D.cs index 2bc1e243c..d026998f5 100644 --- a/MatterControlLib/DesignTools/Primitives/BaseObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/BaseObject3D.cs @@ -192,27 +192,30 @@ namespace MatterHackers.MatterControl.DesignTools return item; } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Path) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Path) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) + && invalidateArgs.Source != this && !RebuildLocked) { // make sure we clear our cache meshVertexCache.vertexSource = null; await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/ConeObject3D.cs b/MatterControlLib/DesignTools/Primitives/ConeObject3D.cs index 848911a4e..1afe0dc26 100644 --- a/MatterControlLib/DesignTools/Primitives/ConeObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/ConeObject3D.cs @@ -64,16 +64,19 @@ namespace MatterHackers.MatterControl.DesignTools public IntOrExpression Sides { get; set; } = 40; - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs b/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs index 203d11fed..f76c59f71 100644 --- a/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs @@ -86,16 +86,19 @@ namespace MatterHackers.MatterControl.DesignTools object3DControlsLayer.AddControls(ControlTypes.RotateXYZ); } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/CylinderObject3D.cs b/MatterControlLib/DesignTools/Primitives/CylinderObject3D.cs index 06c8dba31..3e1c96a50 100644 --- a/MatterControlLib/DesignTools/Primitives/CylinderObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/CylinderObject3D.cs @@ -143,16 +143,19 @@ namespace MatterHackers.MatterControl.DesignTools [MaxDecimalPlaces(2)] public DoubleOrExpression DiameterTop { get; set; } = 20; - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/DescriptionObject3D.cs b/MatterControlLib/DesignTools/Primitives/DescriptionObject3D.cs index 8e59d8a47..46cc49c35 100644 --- a/MatterControlLib/DesignTools/Primitives/DescriptionObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/DescriptionObject3D.cs @@ -190,16 +190,19 @@ namespace MatterHackers.MatterControl.DesignTools base.Remove(undoBuffer); } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/HalfCylinderObject3D.cs b/MatterControlLib/DesignTools/Primitives/HalfCylinderObject3D.cs index e81be68c6..4418f3668 100644 --- a/MatterControlLib/DesignTools/Primitives/HalfCylinderObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/HalfCylinderObject3D.cs @@ -65,16 +65,19 @@ namespace MatterHackers.MatterControl.DesignTools [MaxDecimalPlaces(2)] public IntOrExpression Sides { get; set; } = 20; - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/HalfSphereObject3D.cs b/MatterControlLib/DesignTools/Primitives/HalfSphereObject3D.cs index 9e6e58607..2f0db854e 100644 --- a/MatterControlLib/DesignTools/Primitives/HalfSphereObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/HalfSphereObject3D.cs @@ -74,16 +74,19 @@ namespace MatterHackers.MatterControl.DesignTools public IntOrExpression LongitudeSides { get; set; } = 40; public IntOrExpression LatitudeSides { get; set; } = 10; - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/HalfWedgeObject3D.cs b/MatterControlLib/DesignTools/Primitives/HalfWedgeObject3D.cs index e34936338..ac4504ed6 100644 --- a/MatterControlLib/DesignTools/Primitives/HalfWedgeObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/HalfWedgeObject3D.cs @@ -64,16 +64,19 @@ namespace MatterHackers.MatterControl.DesignTools [MaxDecimalPlaces(2)] public DoubleOrExpression Height { get; set; } = 10; - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/MarchingSquaresObject3D.cs b/MatterControlLib/DesignTools/Primitives/MarchingSquaresObject3D.cs index 322302012..9e159c2c7 100644 --- a/MatterControlLib/DesignTools/Primitives/MarchingSquaresObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/MarchingSquaresObject3D.cs @@ -73,16 +73,19 @@ namespace MatterHackers.MatterControl.DesignTools object3DControlsLayer.AddControls(ControlTypes.RotateXYZ); } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/PyramidObject3D.cs b/MatterControlLib/DesignTools/Primitives/PyramidObject3D.cs index 829ac1351..162a68db5 100644 --- a/MatterControlLib/DesignTools/Primitives/PyramidObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/PyramidObject3D.cs @@ -65,16 +65,19 @@ namespace MatterHackers.MatterControl.DesignTools [MaxDecimalPlaces(2)] public DoubleOrExpression Height { get; set; } = 20; - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/RingObject3D.cs b/MatterControlLib/DesignTools/Primitives/RingObject3D.cs index 756af9edc..df361e086 100644 --- a/MatterControlLib/DesignTools/Primitives/RingObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/RingObject3D.cs @@ -93,16 +93,19 @@ namespace MatterHackers.MatterControl.DesignTools [MaxDecimalPlaces(2)] public DoubleOrExpression EndingAngle { get; set; } = 360; - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/SphereObject3D.cs b/MatterControlLib/DesignTools/Primitives/SphereObject3D.cs index ac34b6a0d..511c3fce7 100644 --- a/MatterControlLib/DesignTools/Primitives/SphereObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/SphereObject3D.cs @@ -94,16 +94,19 @@ namespace MatterHackers.MatterControl.DesignTools public IntOrExpression LatitudeSides { get; set; } = 30; - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/TextPathObject3D.cs b/MatterControlLib/DesignTools/Primitives/TextPathObject3D.cs index 413ddb0fc..42d9b9ac8 100644 --- a/MatterControlLib/DesignTools/Primitives/TextPathObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/TextPathObject3D.cs @@ -89,24 +89,27 @@ namespace MatterHackers.MatterControl.DesignTools undoBuffer.AddAndDo(new ReplaceCommand(new[] { this }, new[] { newContainer })); } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/TorusObject3D.cs b/MatterControlLib/DesignTools/Primitives/TorusObject3D.cs index 2984976ad..1251f82a9 100644 --- a/MatterControlLib/DesignTools/Primitives/TorusObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/TorusObject3D.cs @@ -83,16 +83,19 @@ namespace MatterHackers.MatterControl.DesignTools [MaxDecimalPlaces(2)] public DoubleOrExpression RingPhaseAngle { get; set; } = 0; - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Primitives/WedgeObject3D.cs b/MatterControlLib/DesignTools/Primitives/WedgeObject3D.cs index 0664252cc..0a99f92d5 100644 --- a/MatterControlLib/DesignTools/Primitives/WedgeObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/WedgeObject3D.cs @@ -71,16 +71,19 @@ namespace MatterHackers.MatterControl.DesignTools public IntOrExpression RoundSegments { get; set; } = 15; - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } diff --git a/MatterControlLib/DesignTools/Sheets/SheetObject3D.cs b/MatterControlLib/DesignTools/Sheets/SheetObject3D.cs index 2b183676a..a37352f86 100644 --- a/MatterControlLib/DesignTools/Sheets/SheetObject3D.cs +++ b/MatterControlLib/DesignTools/Sheets/SheetObject3D.cs @@ -177,7 +177,7 @@ namespace MatterHackers.MatterControl.DesignTools { updateItems[i].rebuildLock.Dispose(); updateItems[i].rebuildLock = null; - updateItems[i].item.Invalidate(new InvalidateArgs(updateItems[i].item, InvalidateType.SheetUpdated)); + updateItems[i].item.Invalidate(new InvalidateArgs(this, InvalidateType.SheetUpdated)); } } } diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D_2.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D_2.cs index 2644fb9a5..ca80016de 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D_2.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D_2.cs @@ -99,24 +99,27 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D } } - public override async void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) - || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) - && invalidateType.Source != this + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) + && invalidateArgs.Source != this && !RebuildLocked) { await Rebuild(); } - else if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) - || invalidateType.InvalidateType.HasFlag(InvalidateType.SheetUpdated)) + else if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this)) + { + await Rebuild(); + } + else if (SheetObject3D.NeedsRebuild(this, invalidateArgs)) { await Rebuild(); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } }