diff --git a/MatterControlLib/ApplicationView/ApplicationController.cs b/MatterControlLib/ApplicationView/ApplicationController.cs index 90ce75021..c4bef4421 100644 --- a/MatterControlLib/ApplicationView/ApplicationController.cs +++ b/MatterControlLib/ApplicationView/ApplicationController.cs @@ -652,7 +652,7 @@ namespace MatterHackers.MatterControl var selectedItem = scene.SelectedItem; var align = new AlignObject3D(); align.AddSelectionAsChildren(scene, selectedItem); - align.Invalidate(new InvalidateArgs(align, InvalidateType.Properties, null)); + align.Invalidate(new InvalidateArgs(align, InvalidateType.Properties)); }, Icon = AggContext.StaticData.LoadIcon("align_left_dark.png", 16, 16, theme.InvertIcons).SetPreMultiply(), IsEnabled = (scene) => scene.SelectedItem is SelectionGroupObject3D, @@ -722,7 +722,7 @@ namespace MatterHackers.MatterControl { var array = new ArrayLinearObject3D(); array.AddSelectionAsChildren(sceneContext.Scene, sceneContext.Scene.SelectedItem); - array.Invalidate(new InvalidateArgs(array, InvalidateType.Properties, null)); + array.Invalidate(new InvalidateArgs(array, InvalidateType.Properties)); }, Icon = AggContext.StaticData.LoadIcon("array_linear.png").SetPreMultiply(), IsEnabled = (scene) => scene.SelectedItem != null && !(scene.SelectedItem is SelectionGroupObject3D), @@ -735,7 +735,7 @@ namespace MatterHackers.MatterControl { var array = new ArrayRadialObject3D(); array.AddSelectionAsChildren(sceneContext.Scene, sceneContext.Scene.SelectedItem); - array.Invalidate(new InvalidateArgs(array, InvalidateType.Properties, null)); + array.Invalidate(new InvalidateArgs(array, InvalidateType.Properties)); }, Icon = AggContext.StaticData.LoadIcon("array_radial.png").SetPreMultiply(), IsEnabled = (scene) => scene.SelectedItem != null && !(scene.SelectedItem is SelectionGroupObject3D), @@ -748,7 +748,7 @@ namespace MatterHackers.MatterControl { var array = new ArrayAdvancedObject3D(); array.AddSelectionAsChildren(sceneContext.Scene, sceneContext.Scene.SelectedItem); - array.Invalidate(new InvalidateArgs(array, InvalidateType.Properties, null)); + array.Invalidate(new InvalidateArgs(array, InvalidateType.Properties)); }, Icon = AggContext.StaticData.LoadIcon("array_advanced.png").SetPreMultiply(), IsEnabled = (scene) => scene.SelectedItem != null && !(scene.SelectedItem is SelectionGroupObject3D), @@ -1133,7 +1133,7 @@ namespace MatterHackers.MatterControl scene.UndoBuffer.AddAndDo(new ReplaceCommand(new[] { sceneItem }, new[] { path })); scene.SelectedItem = null; scene.SelectedItem = path; - path.Invalidate(new InvalidateArgs(path, InvalidateType.Properties, null)); + path.Invalidate(new InvalidateArgs(path, InvalidateType.Properties)); } return Task.CompletedTask; @@ -1249,7 +1249,7 @@ namespace MatterHackers.MatterControl scene.SelectedItem = null; scene.SelectedItem = component; // Invalidate image to kick off rebuild of ImageConverter stack - imageObject.Invalidate(new InvalidateArgs(imageObject, InvalidateType.Image, null)); + imageObject.Invalidate(new InvalidateArgs(imageObject, InvalidateType.Image)); return Task.CompletedTask; }, @@ -1373,7 +1373,7 @@ namespace MatterHackers.MatterControl scene.UndoBuffer.AddAndDo(new ReplaceCommand(new[] { sceneItem }, new[] { extrude })); scene.SelectedItem = null; scene.SelectedItem = extrude; - extrude.Invalidate(new InvalidateArgs(extrude, InvalidateType.Properties, null)); + extrude.Invalidate(new InvalidateArgs(extrude, InvalidateType.Properties)); } return Task.CompletedTask; @@ -1401,7 +1401,7 @@ namespace MatterHackers.MatterControl scene.UndoBuffer.AddAndDo(new ReplaceCommand(new[] { sceneItem }, new[] { smoothPath })); scene.SelectedItem = null; scene.SelectedItem = smoothPath; - smoothPath.Invalidate(new InvalidateArgs(smoothPath, InvalidateType.Properties, null)); + smoothPath.Invalidate(new InvalidateArgs(smoothPath, InvalidateType.Properties)); } return Task.CompletedTask; @@ -1429,7 +1429,7 @@ namespace MatterHackers.MatterControl scene.UndoBuffer.AddAndDo(new ReplaceCommand(new[] { sceneItem }, new[] { inflatePath })); scene.SelectedItem = null; scene.SelectedItem = inflatePath; - inflatePath.Invalidate(new InvalidateArgs(inflatePath, InvalidateType.Properties, null)); + inflatePath.Invalidate(new InvalidateArgs(inflatePath, InvalidateType.Properties)); } return Task.CompletedTask; @@ -1455,7 +1455,7 @@ namespace MatterHackers.MatterControl }; newChild.Matrix = Matrix4X4.Identity; baseMesh.Children.Add(newChild); - baseMesh.Invalidate(new InvalidateArgs(baseMesh, InvalidateType.Properties, null)); + baseMesh.Invalidate(new InvalidateArgs(baseMesh, InvalidateType.Properties)); scene.UndoBuffer.AddAndDo( new ReplaceCommand( diff --git a/MatterControlLib/DesignTools/Braille/BrailleCardObject3D.cs b/MatterControlLib/DesignTools/Braille/BrailleCardObject3D.cs index 3b66a5085..e45c36e8a 100644 --- a/MatterControlLib/DesignTools/Braille/BrailleCardObject3D.cs +++ b/MatterControlLib/DesignTools/Braille/BrailleCardObject3D.cs @@ -58,7 +58,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); @@ -96,7 +96,7 @@ namespace MatterHackers.MatterControl.DesignTools Height = BaseHeight }; - textObject.Invalidate(new InvalidateArgs(textObject, InvalidateType.Properties, null)); + textObject.Invalidate(new InvalidateArgs(textObject, InvalidateType.Properties)); IObject3D letterObject = new RotateObject3D(textObject, MathHelper.Tau / 4); letterObject = new AlignObject3D(letterObject, FaceAlign.Bottom | FaceAlign.Front, brailleLetter, FaceAlign.Top | FaceAlign.Front, 0, 0, 3.5); letterObject = new SetCenterObject3D(letterObject, brailleLetter.GetCenter(), true, false, false); @@ -129,7 +129,7 @@ namespace MatterHackers.MatterControl.DesignTools } } - Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } } } \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Braille/BrailleObject3D.cs b/MatterControlLib/DesignTools/Braille/BrailleObject3D.cs index 14afbb9c6..840aa517b 100644 --- a/MatterControlLib/DesignTools/Braille/BrailleObject3D.cs +++ b/MatterControlLib/DesignTools/Braille/BrailleObject3D.cs @@ -86,7 +86,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); @@ -267,7 +267,7 @@ namespace MatterHackers.MatterControl.DesignTools } } - Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } } } \ No newline at end of file diff --git a/MatterControlLib/DesignTools/LithophaneObject3D.cs b/MatterControlLib/DesignTools/LithophaneObject3D.cs index ba975c51f..cf2c78352 100644 --- a/MatterControlLib/DesignTools/LithophaneObject3D.cs +++ b/MatterControlLib/DesignTools/LithophaneObject3D.cs @@ -65,24 +65,25 @@ namespace MatterHackers.MatterControl.Plugins.Lithophane public Vector3 ImageOffset { get; private set; } = Vector3.Zero; - public override void OnInvalidate(InvalidateArgs invalidateType) + public override void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) - && invalidateType.Source != this + var invalidateType = invalidateArgs.InvalidateType; + if ((invalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) + && invalidateArgs.Source != this && !RebuildLocked) { Rebuild(null); } - else if (invalidateType.InvalidateType == InvalidateType.Properties - && invalidateType.Source == this) + else if (invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) + && invalidateArgs.Source == this) { Rebuild(null); } else { - base.OnInvalidate(invalidateType); + base.OnInvalidate(invalidateArgs); } } @@ -113,6 +114,8 @@ namespace MatterHackers.MatterControl.Plugins.Lithophane // Apply offset this.Matrix *= Matrix4X4.CreateTranslation(-this.ImageOffset); + base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Children)); + return Task.CompletedTask; }); } diff --git a/MatterControlLib/DesignTools/Obsolete/CombineObject3D.cs b/MatterControlLib/DesignTools/Obsolete/CombineObject3D.cs index a06a37dbb..72844eb34 100644 --- a/MatterControlLib/DesignTools/Obsolete/CombineObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/CombineObject3D.cs @@ -53,23 +53,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D public override async void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - - base.OnInvalidate(invalidateType); + else + { + base.OnInvalidate(invalidateType); + } } public override Task Rebuild() @@ -96,6 +96,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D } rebuildLocks.Dispose(); + base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Children)); return Task.CompletedTask; }); } diff --git a/MatterControlLib/DesignTools/Obsolete/CurveObject3D.cs b/MatterControlLib/DesignTools/Obsolete/CurveObject3D.cs index 3ce6df78f..54da45291 100644 --- a/MatterControlLib/DesignTools/Obsolete/CurveObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/CurveObject3D.cs @@ -150,15 +150,15 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { Rebuild(null); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/Obsolete/FitToBoundsObject3D.cs b/MatterControlLib/DesignTools/Obsolete/FitToBoundsObject3D.cs index b366ddf3a..97bc1a4ce 100644 --- a/MatterControlLib/DesignTools/Obsolete/FitToBoundsObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/FitToBoundsObject3D.cs @@ -101,7 +101,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations list.AddRange(ScaleItem.Children); }); } - Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } public override void Remove(UndoBuffer undoBuffer) @@ -122,20 +122,20 @@ namespace MatterHackers.MatterControl.DesignTools.Operations }); } - Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } public override void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { Rebuild(null); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/Obsolete/IntersectionObject3D.cs b/MatterControlLib/DesignTools/Obsolete/IntersectionObject3D.cs index 56efe0e19..27ac6db4c 100644 --- a/MatterControlLib/DesignTools/Obsolete/IntersectionObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/IntersectionObject3D.cs @@ -53,23 +53,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D public override async void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - - base.OnInvalidate(invalidateType); + else + { + base.OnInvalidate(invalidateType); + } } public override Task Rebuild() @@ -85,23 +85,17 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D { Intersect(cancellationToken, reporter); } - catch { } - - UiThread.RunOnIdle(() => + catch { - rebuildLocks.Dispose(); - base.Invalidate(new InvalidateArgs(this, InvalidateType.Content)); - }); + } + + rebuildLocks.Dispose(); + base.Invalidate(new InvalidateArgs(this, InvalidateType.Children)); return Task.CompletedTask; }); } - public void Intersect() - { - Intersect(CancellationToken.None, null); - } - private void Intersect(CancellationToken cancellationToken, IProgress reporter) { ResetMeshWrapperMeshes(Object3DPropertyFlags.All, cancellationToken); diff --git a/MatterControlLib/DesignTools/Obsolete/MirrorObject3D.cs b/MatterControlLib/DesignTools/Obsolete/MirrorObject3D.cs index 00b36c9f9..1519adf99 100644 --- a/MatterControlLib/DesignTools/Obsolete/MirrorObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/MirrorObject3D.cs @@ -93,22 +93,22 @@ namespace MatterHackers.MatterControl.DesignTools this.Matrix = oldMatrix; } - base.Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + base.Invalidate(new InvalidateArgs(this, InvalidateType.Children)); return Task.CompletedTask; } public override void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { Rebuild(); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(); diff --git a/MatterControlLib/DesignTools/Obsolete/PinchObject3D.cs b/MatterControlLib/DesignTools/Obsolete/PinchObject3D.cs index 7dad0e98c..7761a8a41 100644 --- a/MatterControlLib/DesignTools/Obsolete/PinchObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/PinchObject3D.cs @@ -57,15 +57,15 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { Rebuild(null); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); @@ -124,7 +124,7 @@ namespace MatterHackers.MatterControl.DesignTools Matrix = currentMatrix; } - base.Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + base.Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } } } \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Obsolete/RotateObject3D.cs b/MatterControlLib/DesignTools/Obsolete/RotateObject3D.cs index 4c298410e..4e78bb1ec 100644 --- a/MatterControlLib/DesignTools/Obsolete/RotateObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/RotateObject3D.cs @@ -97,27 +97,27 @@ namespace MatterHackers.MatterControl.DesignTools.Operations } } - Invalidate(new InvalidateArgs(this, InvalidateType.Matrix, null)); + Invalidate(new InvalidateArgs(this, InvalidateType.Matrix)); return Task.CompletedTask; } public override void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Matrix, invalidateType.UndoBuffer); + invalidateType = new InvalidateArgs(this, InvalidateType.Matrix); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Matrix, invalidateType.UndoBuffer); + invalidateType = new InvalidateArgs(this, InvalidateType.Matrix); } base.OnInvalidate(invalidateType); diff --git a/MatterControlLib/DesignTools/Operations/AlignObject3D.cs b/MatterControlLib/DesignTools/Operations/AlignObject3D.cs index c2a625081..cd28a3325 100644 --- a/MatterControlLib/DesignTools/Operations/AlignObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/AlignObject3D.cs @@ -296,23 +296,24 @@ namespace MatterHackers.MatterControl.DesignTools.Operations return positionToAlignTo + extraOffset; } - public override void OnInvalidate(InvalidateArgs invalidateType) + public override async void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { - Rebuild(); - base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Matrix, invalidateType.UndoBuffer)); + await Rebuild(); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { - Rebuild(); - base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Matrix, invalidateType.UndoBuffer)); + await Rebuild(); } + + // and also always pass back the actual type + base.OnInvalidate(invalidateType); } public override Task Rebuild() @@ -442,6 +443,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations })); } + base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Matrix)); return Task.CompletedTask; } @@ -464,7 +466,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations base.Remove(undoBuffer); } - Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } public void UpdateControls(PublicPropertyChange change) diff --git a/MatterControlLib/DesignTools/Operations/ArrayAdvancedObject3D.cs b/MatterControlLib/DesignTools/Operations/ArrayAdvancedObject3D.cs index 19407161c..1ca63bade 100644 --- a/MatterControlLib/DesignTools/Operations/ArrayAdvancedObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/ArrayAdvancedObject3D.cs @@ -100,6 +100,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations }); SourceContainer.Visible = false; rebuildLock.Dispose(); + base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Children)); return Task.CompletedTask; }); } diff --git a/MatterControlLib/DesignTools/Operations/ArrayLinearObject3D.cs b/MatterControlLib/DesignTools/Operations/ArrayLinearObject3D.cs index b717f73e2..a4bae9d05 100644 --- a/MatterControlLib/DesignTools/Operations/ArrayLinearObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/ArrayLinearObject3D.cs @@ -84,6 +84,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations SourceContainer.Visible = false; rebuildLock.Dispose(); + base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Children)); return Task.CompletedTask; }); } diff --git a/MatterControlLib/DesignTools/Operations/ArrayRadialObject3D.cs b/MatterControlLib/DesignTools/Operations/ArrayRadialObject3D.cs index 794ca4044..928504754 100644 --- a/MatterControlLib/DesignTools/Operations/ArrayRadialObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/ArrayRadialObject3D.cs @@ -127,6 +127,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations }); SourceContainer.Visible = false; rebuildLock.Dispose(); + base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Children)); return Task.CompletedTask; }); } diff --git a/MatterControlLib/DesignTools/Operations/CurveObject3D_2.cs b/MatterControlLib/DesignTools/Operations/CurveObject3D_2.cs index e3d7024d2..162f8807b 100644 --- a/MatterControlLib/DesignTools/Operations/CurveObject3D_2.cs +++ b/MatterControlLib/DesignTools/Operations/CurveObject3D_2.cs @@ -48,8 +48,8 @@ namespace MatterHackers.MatterControl.DesignTools { public class CurveObject3D_2 : OperationSourceContainerObject3D, IEditorDraw { - // holds where we rotate the object - private Vector2 rotationCenter; + // this needs to serialize but not be editable + public Vector3 rotationOffset; public CurveObject3D_2() { @@ -79,7 +79,7 @@ namespace MatterHackers.MatterControl.DesignTools var currentMatrixInv = Matrix.Inverted; var aabb = this.GetAxisAlignedBoundingBox(currentMatrixInv); - layer.World.RenderCylinderOutline(this.WorldMatrix(), new Vector3(rotationCenter, aabb.Center.Z), Diameter, aabb.ZSize, 30, Color.Red); + layer.World.RenderCylinderOutline(this.WorldMatrix(), Vector3.Zero, Diameter, aabb.ZSize, 30, Color.Red); } // turn the lighting back on @@ -105,6 +105,7 @@ namespace MatterHackers.MatterControl.DesignTools null, (reporter, cancellationToken) => { + this.Translate(-rotationOffset); SourceContainer.Visible = true; RemoveAllButSource(); @@ -125,7 +126,15 @@ namespace MatterHackers.MatterControl.DesignTools { var radius = Diameter / 2; var circumference = MathHelper.Tau * radius; - rotationCenter = new Vector2(aabb.MinXYZ.X + (aabb.MaxXYZ.X - aabb.MinXYZ.X) * (StartPercent / 100), aabb.MaxXYZ.Y + radius); + var rotationCenter = new Vector3(aabb.MinXYZ.X + (aabb.MaxXYZ.X - aabb.MinXYZ.X) * (StartPercent / 100), aabb.MaxXYZ.Y + radius, aabb.Center.Z); + + rotationOffset = rotationCenter; + if (!BendCcw) + { + // fix the stored center so we draw correctly + rotationOffset.Y = aabb.MinXYZ.Y - radius; + } + foreach (var sourceItem in SourceContainer.VisibleMeshes()) { var originalMesh = sourceItem.Mesh; @@ -152,7 +161,8 @@ namespace MatterHackers.MatterControl.DesignTools var rotatePosition = new Vector3Float(Math.Cos(angleToRotate), Math.Sin(angleToRotate), 0) * distanceFromCenter; rotatePosition.Z = worldPosition.Z; var worldWithBend = rotatePosition + new Vector3Float(rotationCenter.X, radius + aabb.MaxXYZ.Y, 0); - transformedMesh.Vertices[i] = worldWithBend.Transform(invItemMatrix); + + transformedMesh.Vertices[i] = worldWithBend.Transform(invItemMatrix) - new Vector3Float(rotationOffset); } transformedMesh.MarkAsChanged(); @@ -165,18 +175,14 @@ namespace MatterHackers.MatterControl.DesignTools newMesh.CopyWorldProperties(sourceItem, this, Object3DPropertyFlags.All); this.Children.Add(newMesh); } - - if (!BendCcw) - { - // fix the stored center so we draw correctly - rotationCenter = new Vector2(rotationCenter.X, aabb.MinXYZ.Y - radius); - } } // set the matrix back Matrix = currentMatrix; + this.Translate(new Vector3(rotationOffset)); SourceContainer.Visible = false; rebuildLocks.Dispose(); + base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Children)); return Task.CompletedTask; }); } diff --git a/MatterControlLib/DesignTools/Operations/FitToBoundsObject3D_2.cs b/MatterControlLib/DesignTools/Operations/FitToBoundsObject3D_2.cs index 523be6e54..d4ea087b1 100644 --- a/MatterControlLib/DesignTools/Operations/FitToBoundsObject3D_2.cs +++ b/MatterControlLib/DesignTools/Operations/FitToBoundsObject3D_2.cs @@ -137,25 +137,26 @@ namespace MatterHackers.MatterControl.DesignTools.Operations public override async void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { await Rebuild(); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { await Rebuild(); } - else if ((invalidateType.InvalidateType == InvalidateType.Properties - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh - || invalidateType.InvalidateType == InvalidateType.Content)) + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Children)) { cacheThisMatrix = Matrix4X4.Identity; + base.OnInvalidate(invalidateType); } base.OnInvalidate(invalidateType); @@ -186,6 +187,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations } } + base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Matrix)); return Task.CompletedTask; } @@ -266,7 +268,10 @@ namespace MatterHackers.MatterControl.DesignTools.Operations set { boundsSize.X = value; - Rebuild(); + if (this.Children.Count() > 0) + { + Rebuild(); + } } } @@ -277,7 +282,10 @@ namespace MatterHackers.MatterControl.DesignTools.Operations set { boundsSize.Y = value; - Rebuild(); + if (this.Children.Count() > 0) + { + Rebuild(); + } } } @@ -288,7 +296,10 @@ namespace MatterHackers.MatterControl.DesignTools.Operations set { boundsSize.Z = value; - Rebuild(); + if (this.Children.Count() > 0) + { + Rebuild(); + } } } diff --git a/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D.cs b/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D.cs index 92251d171..a8d5228c4 100644 --- a/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Image/ImageToPathObject3D.cs @@ -310,19 +310,19 @@ namespace MatterHackers.MatterControl.DesignTools { this.DebugDepth("Invalidate"); - if (invalidateType.InvalidateType == InvalidateType.Image + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Image) && invalidateType.Source != this && !RebuildLocked) { await Rebuild(); - base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Path, invalidateType.UndoBuffer)); + base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Path)); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { UpdateHistogramDisplay(); await Rebuild(); - base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Path, invalidateType.UndoBuffer)); + base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Path)); } } @@ -384,11 +384,11 @@ namespace MatterHackers.MatterControl.DesignTools if (propertyUpdated) { UpdateHistogramDisplay(); - Invalidate(new InvalidateArgs(this, InvalidateType.Properties, null)); + Invalidate(new InvalidateArgs(this, InvalidateType.Properties)); } rebuildLock.Dispose(); - Invalidate(new InvalidateArgs(this, InvalidateType.Path, null)); + Invalidate(new InvalidateArgs(this, InvalidateType.Path)); return Task.CompletedTask; }); } diff --git a/MatterControlLib/DesignTools/Operations/Image/LinearExtrudeObject3D.cs b/MatterControlLib/DesignTools/Operations/Image/LinearExtrudeObject3D.cs index c989dfb17..6e8aebd3a 100644 --- a/MatterControlLib/DesignTools/Operations/Image/LinearExtrudeObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Image/LinearExtrudeObject3D.cs @@ -80,7 +80,7 @@ namespace MatterHackers.MatterControl.DesignTools undoBuffer.AddAndDo(new ReplaceCommand(new[] { this }, new[] { meshOnlyItem })); } - Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } public LinearExtrudeObject3D() @@ -92,19 +92,21 @@ namespace MatterHackers.MatterControl.DesignTools { this.DebugDepth("Invalidate"); - if ((eventArgs.InvalidateType == InvalidateType.Path - || eventArgs.InvalidateType == InvalidateType.Content) + if ((eventArgs.InvalidateType.HasFlag(InvalidateType.Path) + || eventArgs.InvalidateType.HasFlag(InvalidateType.Children)) && eventArgs.Source != this && !RebuildLocked) { await Rebuild(); - base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Mesh, eventArgs.UndoBuffer)); } - else if (eventArgs.InvalidateType == InvalidateType.Properties + else if (eventArgs.InvalidateType.HasFlag(InvalidateType.Properties) && eventArgs.Source == this) { await Rebuild(); - base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Mesh, eventArgs.UndoBuffer)); + } + else + { + base.OnInvalidate(eventArgs); } } diff --git a/MatterControlLib/DesignTools/Operations/MirrorObject3D_2.cs b/MatterControlLib/DesignTools/Operations/MirrorObject3D_2.cs index bc8b2caa1..e88631df2 100644 --- a/MatterControlLib/DesignTools/Operations/MirrorObject3D_2.cs +++ b/MatterControlLib/DesignTools/Operations/MirrorObject3D_2.cs @@ -106,6 +106,7 @@ namespace MatterHackers.MatterControl.DesignTools this.Matrix = oldMatrix; SourceContainer.Visible = false; rebuildLock.Dispose(); + base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Children)); return Task.CompletedTask; }); } diff --git a/MatterControlLib/DesignTools/Operations/OperationSourceObject3D.cs b/MatterControlLib/DesignTools/Operations/OperationSourceObject3D.cs index 7aedbb84a..8b785d0b9 100644 --- a/MatterControlLib/DesignTools/Operations/OperationSourceObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/OperationSourceObject3D.cs @@ -130,32 +130,32 @@ namespace MatterHackers.MatterControl.DesignTools.Operations } } - Invalidate(new InvalidateArgs(this, InvalidateType.Content, undoBuffer)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } public override async void OnInvalidate(InvalidateArgs invalidateType) { // TODO: color and output type could have special consideration that would not require a rebulid // They could jus propagate the color and output type to the corecty child and everything would be good - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh - || invalidateType.InvalidateType == InvalidateType.Color - || invalidateType.InvalidateType == InvalidateType.OutputType) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Color) + || invalidateType.InvalidateType.HasFlag(InvalidateType.OutputType)) && invalidateType.Source != this && !RebuildLocked) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - - base.OnInvalidate(invalidateType); + else + { + base.OnInvalidate(invalidateType); + } } public override void Remove(UndoBuffer undoBuffer) @@ -188,7 +188,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations } } - Invalidate(new InvalidateArgs(this, InvalidateType.Content, undoBuffer)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } public void RemoveAllButSource() @@ -239,7 +239,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations // and select this scene.SelectedItem = this; - this.Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + this.Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } } diff --git a/MatterControlLib/DesignTools/Operations/Path/InflatePathObject3D.cs b/MatterControlLib/DesignTools/Operations/Path/InflatePathObject3D.cs index 786d680bd..aa0be4586 100644 --- a/MatterControlLib/DesignTools/Operations/Path/InflatePathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Path/InflatePathObject3D.cs @@ -58,15 +58,15 @@ namespace MatterHackers.MatterControl.DesignTools.Operations public override void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Path) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Path)) && invalidateType.Source != this && !RebuildLocked) { Rebuild(null); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/Operations/Path/SmoothPathObject3D.cs b/MatterControlLib/DesignTools/Operations/Path/SmoothPathObject3D.cs index 761810343..c9b4d9b1b 100644 --- a/MatterControlLib/DesignTools/Operations/Path/SmoothPathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Path/SmoothPathObject3D.cs @@ -61,23 +61,23 @@ namespace MatterHackers.MatterControl.DesignTools.Operations { this.DebugDepth("Invalidate"); - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Path) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Path)) && invalidateType.Source != this && !RebuildLocked) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - - base.OnInvalidate(invalidateType); + else + { + base.OnInvalidate(invalidateType); + } } public override Task Rebuild() @@ -93,7 +93,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations DoSmoothing((long)(SmoothDistance * 1000), Iterations); rebuildLock.Dispose(); - Invalidate(new InvalidateArgs(this, InvalidateType.Path, null)); + Invalidate(new InvalidateArgs(this, InvalidateType.Path)); return Task.CompletedTask; }); } diff --git a/MatterControlLib/DesignTools/Operations/RotateObject3D_2.cs b/MatterControlLib/DesignTools/Operations/RotateObject3D_2.cs index c4be263b9..207d604d0 100644 --- a/MatterControlLib/DesignTools/Operations/RotateObject3D_2.cs +++ b/MatterControlLib/DesignTools/Operations/RotateObject3D_2.cs @@ -102,21 +102,23 @@ namespace MatterHackers.MatterControl.DesignTools.Operations public override void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateArgs.InvalidateType == InvalidateType.Content - || invalidateArgs.InvalidateType == InvalidateType.Matrix - || invalidateArgs.InvalidateType == InvalidateType.Mesh) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateArgs.Source != this && !RebuildLocked) { Rebuild(); } - else if (invalidateArgs.InvalidateType == InvalidateType.Properties + else if (invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this) { Rebuild(); } - - base.OnInvalidate(invalidateArgs); + else + { + base.OnInvalidate(invalidateArgs); + } } public override Task Rebuild() @@ -127,7 +129,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations TransformItem.Matrix = RotationMatrix; } - Invalidate(new InvalidateArgs(this, InvalidateType.Matrix, null)); + Invalidate(new InvalidateArgs(this, InvalidateType.Matrix)); return Task.CompletedTask; } diff --git a/MatterControlLib/DesignTools/Operations/ScaleObject3D.cs b/MatterControlLib/DesignTools/Operations/ScaleObject3D.cs index 9ee362ce0..a8a969d61 100644 --- a/MatterControlLib/DesignTools/Operations/ScaleObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/ScaleObject3D.cs @@ -183,21 +183,23 @@ namespace MatterHackers.MatterControl.DesignTools.Operations public override void OnInvalidate(InvalidateArgs invalidateArgs) { - if ((invalidateArgs.InvalidateType == InvalidateType.Content - || invalidateArgs.InvalidateType == InvalidateType.Matrix - || invalidateArgs.InvalidateType == InvalidateType.Mesh) + if ((invalidateArgs.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateArgs.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateArgs.Source != this && !RebuildLocked) { Rebuild(); } - else if (invalidateArgs.InvalidateType == InvalidateType.Properties + else if (invalidateArgs.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateArgs.Source == this) { Rebuild(); } - - base.OnInvalidate(invalidateArgs); + else + { + base.OnInvalidate(invalidateArgs); + } } public override Task Rebuild() @@ -211,7 +213,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations TransformItem.Matrix *= Matrix4X4.CreateTranslation(ScaleAbout); } - Invalidate(new InvalidateArgs(this, InvalidateType.Matrix, null)); + Invalidate(new InvalidateArgs(this, InvalidateType.Matrix)); return Task.CompletedTask; } diff --git a/MatterControlLib/DesignTools/Operations/TransformWrapperObject3D.cs b/MatterControlLib/DesignTools/Operations/TransformWrapperObject3D.cs index 348942cd3..c0db99e69 100644 --- a/MatterControlLib/DesignTools/Operations/TransformWrapperObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/TransformWrapperObject3D.cs @@ -94,7 +94,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations list.AddRange(TransformItem.Children); }); } - Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } public override void Remove(UndoBuffer undoBuffer) @@ -115,7 +115,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations }); } - Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } public virtual void WrapItem(IObject3D item, UndoBuffer undoBuffer = null) @@ -170,7 +170,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations itemLock?.Dispose(); } - item.Parent?.Invalidate(new InvalidateArgs(item, InvalidateType.Content)); + item.Parent?.Invalidate(new InvalidateArgs(item, InvalidateType.Children)); } } } \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Operations/TranslateObject3D.cs b/MatterControlLib/DesignTools/Operations/TranslateObject3D.cs index c1e554cd7..041aed0ed 100644 --- a/MatterControlLib/DesignTools/Operations/TranslateObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/TranslateObject3D.cs @@ -78,21 +78,23 @@ namespace MatterHackers.MatterControl.DesignTools.Operations public override void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { Rebuild(); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(); } - - base.OnInvalidate(invalidateType); + else + { + base.OnInvalidate(invalidateType); + } } public override Task Rebuild() @@ -105,7 +107,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations TransformItem.Matrix = Matrix4X4.CreateTranslation(Translation); } - Invalidate(new InvalidateArgs(this, InvalidateType.Matrix, null)); + Invalidate(new InvalidateArgs(this, InvalidateType.Matrix)); return Task.CompletedTask; } } diff --git a/MatterControlLib/DesignTools/Primitives/BaseObject3D.cs b/MatterControlLib/DesignTools/Primitives/BaseObject3D.cs index da2beedb4..30821d976 100644 --- a/MatterControlLib/DesignTools/Primitives/BaseObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/BaseObject3D.cs @@ -115,16 +115,16 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Path - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Path) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { Rebuild(null); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); @@ -149,8 +149,8 @@ namespace MatterHackers.MatterControl.DesignTools this.Children.Modify(list => { list.Clear(); - // add back in the sourceContainer - list.Add(firstChild); + // add back in the sourceContainer + list.Add(firstChild); }); // and create the base diff --git a/MatterControlLib/DesignTools/Primitives/ComponentObject3D.cs b/MatterControlLib/DesignTools/Primitives/ComponentObject3D.cs index a9ce193f4..35c90a54c 100644 --- a/MatterControlLib/DesignTools/Primitives/ComponentObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/ComponentObject3D.cs @@ -96,7 +96,7 @@ namespace MatterHackers.MatterControl.DesignTools undoBuffer.AddAndDo(new ReplaceCommand(new[] { this }, newChildren)); } - Invalidate(new InvalidateArgs(this, InvalidateType.Content, undoBuffer)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } public override void Remove(UndoBuffer undoBuffer) @@ -127,7 +127,7 @@ namespace MatterHackers.MatterControl.DesignTools } } - parent.Invalidate(new InvalidateArgs(this, InvalidateType.Content, null)); + parent.Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } else { diff --git a/MatterControlLib/DesignTools/Primitives/ConeObject3D.cs b/MatterControlLib/DesignTools/Primitives/ConeObject3D.cs index 2a2ba7130..cdbfcb900 100644 --- a/MatterControlLib/DesignTools/Primitives/ConeObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/ConeObject3D.cs @@ -63,7 +63,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs b/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs index 059aaff37..4b6d00d45 100644 --- a/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/CubeObject3D.cs @@ -70,7 +70,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(); diff --git a/MatterControlLib/DesignTools/Primitives/CylinderObject3D.cs b/MatterControlLib/DesignTools/Primitives/CylinderObject3D.cs index e7825f5ee..74cad031a 100644 --- a/MatterControlLib/DesignTools/Primitives/CylinderObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/CylinderObject3D.cs @@ -121,7 +121,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/Primitives/HalfCylinderObject3D.cs b/MatterControlLib/DesignTools/Primitives/HalfCylinderObject3D.cs index 6ce89d3cf..2cac86abb 100644 --- a/MatterControlLib/DesignTools/Primitives/HalfCylinderObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/HalfCylinderObject3D.cs @@ -60,7 +60,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/Primitives/HalfSphereObject3D.cs b/MatterControlLib/DesignTools/Primitives/HalfSphereObject3D.cs index 7a80ed054..2538ac61b 100644 --- a/MatterControlLib/DesignTools/Primitives/HalfSphereObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/HalfSphereObject3D.cs @@ -68,7 +68,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/Primitives/HalfWedgeObject3D.cs b/MatterControlLib/DesignTools/Primitives/HalfWedgeObject3D.cs index 53249a622..d1c419257 100644 --- a/MatterControlLib/DesignTools/Primitives/HalfWedgeObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/HalfWedgeObject3D.cs @@ -60,7 +60,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/Primitives/PyramidObject3D.cs b/MatterControlLib/DesignTools/Primitives/PyramidObject3D.cs index af95b119a..bf0b7b087 100644 --- a/MatterControlLib/DesignTools/Primitives/PyramidObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/PyramidObject3D.cs @@ -59,7 +59,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/Primitives/RingObject3D.cs b/MatterControlLib/DesignTools/Primitives/RingObject3D.cs index 027aac253..6b659aecc 100644 --- a/MatterControlLib/DesignTools/Primitives/RingObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/RingObject3D.cs @@ -78,7 +78,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/Primitives/SphereObject3D.cs b/MatterControlLib/DesignTools/Primitives/SphereObject3D.cs index 17cb26f93..8a8011f32 100644 --- a/MatterControlLib/DesignTools/Primitives/SphereObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/SphereObject3D.cs @@ -73,7 +73,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/Primitives/TextObject3D.cs b/MatterControlLib/DesignTools/Primitives/TextObject3D.cs index 10c0ec6ef..3ea880635 100644 --- a/MatterControlLib/DesignTools/Primitives/TextObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/TextObject3D.cs @@ -58,7 +58,7 @@ namespace MatterHackers.MatterControl.DesignTools { var item = new TextObject3D(); - item.Invalidate(new InvalidateArgs(null, InvalidateType.Content, null)); + item.Invalidate(new InvalidateArgs(null, InvalidateType.Children)); return item; } @@ -89,23 +89,23 @@ namespace MatterHackers.MatterControl.DesignTools public override async void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - - base.OnInvalidate(invalidateType); + else + { + base.OnInvalidate(invalidateType); + } } public override Task Rebuild() @@ -153,6 +153,7 @@ namespace MatterHackers.MatterControl.DesignTools } rebuildLock.Dispose(); + base.OnInvalidate(new InvalidateArgs(this, InvalidateType.Children)); return Task.CompletedTask; }); } diff --git a/MatterControlLib/DesignTools/Primitives/TextPathObject3D.cs b/MatterControlLib/DesignTools/Primitives/TextPathObject3D.cs index 6d68fcf65..43b667a2a 100644 --- a/MatterControlLib/DesignTools/Primitives/TextPathObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/TextPathObject3D.cs @@ -90,15 +90,15 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { Rebuild(null); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); @@ -144,7 +144,7 @@ namespace MatterHackers.MatterControl.DesignTools base.Mesh = null; } - this.Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + this.Invalidate(new InvalidateArgs(this, InvalidateType.Path)); } public override Mesh Mesh diff --git a/MatterControlLib/DesignTools/Primitives/TorusObject3D.cs b/MatterControlLib/DesignTools/Primitives/TorusObject3D.cs index ae73424e5..c3fd8d209 100644 --- a/MatterControlLib/DesignTools/Primitives/TorusObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/TorusObject3D.cs @@ -64,7 +64,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/Primitives/WedgeObject3D.cs b/MatterControlLib/DesignTools/Primitives/WedgeObject3D.cs index 40608135c..0a466f57a 100644 --- a/MatterControlLib/DesignTools/Primitives/WedgeObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/WedgeObject3D.cs @@ -61,7 +61,7 @@ namespace MatterHackers.MatterControl.DesignTools public override void OnInvalidate(InvalidateArgs invalidateType) { - if (invalidateType.InvalidateType == InvalidateType.Properties + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { Rebuild(null); diff --git a/MatterControlLib/DesignTools/PublicPropertyEditor.cs b/MatterControlLib/DesignTools/PublicPropertyEditor.cs index 527924c0f..12898226a 100644 --- a/MatterControlLib/DesignTools/PublicPropertyEditor.cs +++ b/MatterControlLib/DesignTools/PublicPropertyEditor.cs @@ -194,7 +194,7 @@ namespace MatterHackers.MatterControl.DesignTools }; updateButton.Click += (s, e) => { - context.item.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties, undoBuffer)); + context.item.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties)); }; mainContainer.AddChild(updateButton); } @@ -313,20 +313,20 @@ namespace MatterHackers.MatterControl.DesignTools undoBuffer.AddAndDo(new UndoRedoActions(() => { property.SetValue(valueFromString(oldValue)); - object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties, undoBuffer)); + object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties)); propertyGridModifier?.UpdateControls(new PublicPropertyChange(context, property.PropertyInfo.Name)); }, () => { property.SetValue(valueFromString(newValue)); - object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties, undoBuffer)); + object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties)); propertyGridModifier?.UpdateControls(new PublicPropertyChange(context, property.PropertyInfo.Name)); })); } else { property.SetValue(valueFromString(newValue)); - object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties, undoBuffer)); + object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties)); propertyGridModifier?.UpdateControls(new PublicPropertyChange(context, property.PropertyInfo.Name)); } }; @@ -342,7 +342,7 @@ namespace MatterHackers.MatterControl.DesignTools void RefreshField(object s, InvalidateArgs e) { - if (e.InvalidateType == InvalidateType.Properties) + if (e.InvalidateType.HasFlag(InvalidateType.Properties)) { double newValue = (double)property.Value; if (newValue != field.DoubleValue) @@ -364,7 +364,7 @@ namespace MatterHackers.MatterControl.DesignTools field.ValueChanged += (s, e) => { property.SetValue(field.Color); - object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties, undoBuffer)); + object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties)); propertyGridModifier?.UpdateControls(new PublicPropertyChange(context, property.PropertyInfo.Name)); }; @@ -406,7 +406,7 @@ namespace MatterHackers.MatterControl.DesignTools field.ValueChanged += (s, e) => { property.SetValue(field.DirectionVector); - object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties, undoBuffer)); + object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties)); propertyGridModifier?.UpdateControls(new PublicPropertyChange(context, property.PropertyInfo.Name)); }; @@ -454,7 +454,7 @@ namespace MatterHackers.MatterControl.DesignTools Normal = field1.DirectionVector.Normal, Origin = property.Item.Children.First().GetAxisAlignedBoundingBox().Center + field2.Vector3 }); - object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties, undoBuffer)); + object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties)); propertyGridModifier?.UpdateControls(new PublicPropertyChange(context, property.PropertyInfo.Name)); }; field2.ValueChanged += (s, e) => @@ -464,7 +464,7 @@ namespace MatterHackers.MatterControl.DesignTools Normal = field1.DirectionVector.Normal, Origin = property.Item.Children.First().GetAxisAlignedBoundingBox().Center + field2.Vector3 }); - object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties, undoBuffer)); + object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties)); propertyGridModifier?.UpdateControls(new PublicPropertyChange(context, property.PropertyInfo.Name)); }; @@ -530,7 +530,7 @@ namespace MatterHackers.MatterControl.DesignTools void RefreshField(object s, InvalidateArgs e) { - if (e.InvalidateType == InvalidateType.Properties) + if (e.InvalidateType.HasFlag(InvalidateType.Properties)) { int newValue = (int)property.Value; if (newValue != field.IntValue) @@ -586,7 +586,7 @@ namespace MatterHackers.MatterControl.DesignTools field.ValueChanged += (s, e) => { property.SetValue(Convert.ToChar(field.Value)); - object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties, undoBuffer)); + object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties)); propertyGridModifier?.UpdateControls(new PublicPropertyChange(context, property.PropertyInfo.Name)); }; @@ -619,7 +619,7 @@ namespace MatterHackers.MatterControl.DesignTools field.ValueChanged += (s, e) => { property.SetValue(Enum.Parse(property.PropertyType, field.Value)); - object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties, undoBuffer)); + object3D?.Invalidate(new InvalidateArgs(context.item, InvalidateType.Properties)); propertyGridModifier?.UpdateControls(new PublicPropertyChange(context, property.PropertyInfo.Name)); }; diff --git a/MatterControlLib/Library/Widgets/InsertionGroupObject3D.cs b/MatterControlLib/Library/Widgets/InsertionGroupObject3D.cs index e19275aac..d3dd45050 100644 --- a/MatterControlLib/Library/Widgets/InsertionGroupObject3D.cs +++ b/MatterControlLib/Library/Widgets/InsertionGroupObject3D.cs @@ -147,7 +147,7 @@ namespace MatterHackers.MatterControl.Library this.Children.Remove(placeholderItem); this.Collapse(); - this.Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + this.Invalidate(new InvalidateArgs(this, InvalidateType.Children)); })); } diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/ImageEditor.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/ImageEditor.cs index 1394dadd4..aa96f4695 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/ImageEditor.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/ImageEditor.cs @@ -202,7 +202,7 @@ namespace MatterHackers.MatterControl.DesignTools imageObject.Invalidated += (s, e) => { - if (e.InvalidateType == InvalidateType.Image + if (e.InvalidateType.HasFlag(InvalidateType.Image) && activeImage != imageObject.Image) { thumbnailImage = SetImage(theme, imageObject); diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/MeshWrapperObject3D.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/MeshWrapperObject3D.cs index e0f60857b..521baa3ea 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/MeshWrapperObject3D.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/MeshWrapperObject3D.cs @@ -122,7 +122,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D } } - Invalidate(new InvalidateArgs(this, InvalidateType.Content, undoBuffer)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } /// @@ -199,7 +199,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D } } - Invalidate(new InvalidateArgs(this, InvalidateType.Content)); + Invalidate(new InvalidateArgs(this, InvalidateType.Children)); } public void ResetMeshWrapperMeshes(Object3DPropertyFlags flags, CancellationToken cancellationToken) @@ -266,7 +266,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D } } - Invalidate(new InvalidateArgs(this, InvalidateType.Properties, null)); + Invalidate(new InvalidateArgs(this, InvalidateType.Properties)); } public void WrapItems(List items) @@ -290,7 +290,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D this.MakeNameNonColliding(); } - Invalidate(new InvalidateArgs(this, InvalidateType.Properties, null)); + Invalidate(new InvalidateArgs(this, InvalidateType.Properties)); } private void AddMeshWrapperToAllChildren() diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/ModifiedMeshObject3D.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/ModifiedMeshObject3D.cs index ac54c1989..fcfd46408 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/ModifiedMeshObject3D.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/ModifiedMeshObject3D.cs @@ -49,12 +49,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D var firstChild = this.Children.FirstOrDefault(); if (firstChild != null) { - if (invalidateType.InvalidateType == InvalidateType.Color) + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Color)) { this.Color = firstChild.Color; } - if (invalidateType.InvalidateType == InvalidateType.Material) + if (invalidateType.InvalidateType.HasFlag(InvalidateType.Material)) { this.MaterialIndex = firstChild.MaterialIndex; } diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractAndReplaceObject3D.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractAndReplaceObject3D.cs index aff75350a..66f1be733 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractAndReplaceObject3D.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractAndReplaceObject3D.cs @@ -57,23 +57,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D public override async void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - - base.OnInvalidate(invalidateType); + else + { + base.OnInvalidate(invalidateType); + } } public void SubtractAndReplace() @@ -172,11 +172,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D { } - UiThread.RunOnIdle(() => - { - rebuildLocks.Dispose(); - base.Invalidate(new InvalidateArgs(this, InvalidateType.Content)); - }); + rebuildLocks.Dispose(); + base.Invalidate(new InvalidateArgs(this, InvalidateType.Children)); return Task.CompletedTask; }); diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D.cs index 791c9bb72..d68b36a33 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D.cs @@ -131,20 +131,18 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D public override async void OnInvalidate(InvalidateArgs invalidateType) { - if ((invalidateType.InvalidateType == InvalidateType.Content - || invalidateType.InvalidateType == InvalidateType.Matrix - || invalidateType.InvalidateType == InvalidateType.Mesh) + if ((invalidateType.InvalidateType.HasFlag(InvalidateType.Children) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Matrix) + || invalidateType.InvalidateType.HasFlag(InvalidateType.Mesh)) && invalidateType.Source != this && !RebuildLocked) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } - else if (invalidateType.InvalidateType == InvalidateType.Properties + else if (invalidateType.InvalidateType.HasFlag(InvalidateType.Properties) && invalidateType.Source == this) { await Rebuild(); - invalidateType = new InvalidateArgs(this, InvalidateType.Content, invalidateType.UndoBuffer); } base.OnInvalidate(invalidateType); @@ -172,11 +170,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D { } - UiThread.RunOnIdle(() => - { - rebuildLocks.Dispose(); - base.Invalidate(new InvalidateArgs(this, InvalidateType.Content)); - }); + rebuildLocks.Dispose(); + base.Invalidate(new InvalidateArgs(this, InvalidateType.Children)); return Task.CompletedTask; }); diff --git a/MatterControlLib/PartPreviewWindow/View3D/UndoCommands/DeleteCommand.cs b/MatterControlLib/PartPreviewWindow/View3D/UndoCommands/DeleteCommand.cs index c42cdd0a0..a22f642ef 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/UndoCommands/DeleteCommand.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/UndoCommands/DeleteCommand.cs @@ -75,7 +75,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow scene.SelectLastChild(); - scene.Invalidate(new InvalidateArgs(null, InvalidateType.Content)); + scene.Invalidate(new InvalidateArgs(null, InvalidateType.Children)); } public void Undo() @@ -95,7 +95,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow scene.AddToSelection(item); } - scene.Invalidate(new InvalidateArgs(null, InvalidateType.Content)); + scene.Invalidate(new InvalidateArgs(null, InvalidateType.Children)); } } } \ No newline at end of file diff --git a/MatterControlLib/PartPreviewWindow/View3D/UndoCommands/InsertCommand.cs b/MatterControlLib/PartPreviewWindow/View3D/UndoCommands/InsertCommand.cs index 9e58956d0..48782e0e5 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/UndoCommands/InsertCommand.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/UndoCommands/InsertCommand.cs @@ -67,7 +67,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow scene.AddToSelection(item); } - scene.Invalidate(new InvalidateArgs(null, InvalidateType.Content)); + scene.Invalidate(new InvalidateArgs(null, InvalidateType.Children)); } public void Undo() @@ -86,7 +86,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow scene.SelectedItem = null; } - scene.Invalidate(new InvalidateArgs(null, InvalidateType.Content)); + scene.Invalidate(new InvalidateArgs(null, InvalidateType.Children)); } } } \ No newline at end of file diff --git a/MatterControlLib/PartPreviewWindow/View3D/UndoCommands/UngroupCommand.cs b/MatterControlLib/PartPreviewWindow/View3D/UndoCommands/UngroupCommand.cs index 2fdc783d6..6e8c71dc5 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/UndoCommands/UngroupCommand.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/UndoCommands/UngroupCommand.cs @@ -68,7 +68,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow }); scene.SelectLastChild(); - scene.Invalidate(new InvalidateArgs(null, InvalidateType.Content)); + scene.Invalidate(new InvalidateArgs(null, InvalidateType.Children)); } public void Undo() @@ -93,7 +93,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow }); scene.SelectLastChild(); - scene.Invalidate(new InvalidateArgs(null, InvalidateType.Content)); + scene.Invalidate(new InvalidateArgs(null, InvalidateType.Children)); } } } \ No newline at end of file diff --git a/MatterControlLib/PartPreviewWindow/View3D/View3DWidget.cs b/MatterControlLib/PartPreviewWindow/View3D/View3DWidget.cs index 0ab112083..1ca26074c 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/View3DWidget.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/View3DWidget.cs @@ -1069,7 +1069,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.deferEditorTillMouseUp = false; Scene_SelectionChanged(null, null); - Scene.Invalidate(new InvalidateArgs(null, InvalidateType.Content, null)); + Scene.Invalidate(new InvalidateArgs(null, InvalidateType.Children)); // Set focus to View3DWidget after drag-drop UiThread.RunOnIdle(this.Focus); @@ -1886,14 +1886,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow private void Scene_Invalidated(object sender, InvalidateArgs e) { - if (e.InvalidateType == InvalidateType.Content + if (e.InvalidateType.HasFlag(InvalidateType.Children) && !rebuildTreePending) { rebuildTreePending = true; UiThread.RunOnIdle(this.RebuildTree); } - if (e.InvalidateType == InvalidateType.Name) + if (e.InvalidateType.HasFlag(InvalidateType.Name)) { // clear and restore the selection so we have the name change var lastSelectedItem = Scene.SelectedItem; diff --git a/MatterControlLib/PartPreviewWindow/ViewControls3D.cs b/MatterControlLib/PartPreviewWindow/ViewControls3D.cs index f771537e6..70f845e11 100644 --- a/MatterControlLib/PartPreviewWindow/ViewControls3D.cs +++ b/MatterControlLib/PartPreviewWindow/ViewControls3D.cs @@ -815,7 +815,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } - scene.Invalidate(new InvalidateArgs(null, InvalidateType.Content, null)); + scene.Invalidate(new InvalidateArgs(null, InvalidateType.Children)); } } diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index a1e536bd0..41050ad01 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit a1e536bd0d14cd92af62cf3bdc90f9a53d4c1cff +Subproject commit 41050ad01f14621325efb3b56541f6e1a3c80deb diff --git a/Tests/MatterControl.Tests/MatterControl/InteractiveSceneTests.cs b/Tests/MatterControl.Tests/MatterControl/InteractiveSceneTests.cs index c51e224cf..6a1356ec6 100644 --- a/Tests/MatterControl.Tests/MatterControl/InteractiveSceneTests.cs +++ b/Tests/MatterControl.Tests/MatterControl/InteractiveSceneTests.cs @@ -539,7 +539,7 @@ namespace MatterControl.Tests.MatterControl AppContext.Platform = AggContext.CreateInstanceFrom(platformFeaturesProvider); AppContext.Platform.ProcessCommandline(); - //DoAabbCalculatedCorrectlyForCurvedFitObjects(); + DoAabbCalculatedCorrectlyForCurvedFitObjects(); } public async void DoAabbCalculatedCorrectlyForCurvedFitObjects()