Fixing library tests
Making subtract object name better Removing broadcast
This commit is contained in:
parent
d2b6d0c4ae
commit
5e898a0650
15 changed files with 182 additions and 98 deletions
|
|
@ -203,7 +203,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
return;
|
||||
}
|
||||
|
||||
SubtractObject3D_2.CleanUpSelectedChildrenNames(this);
|
||||
SubtractObject3D_2.CleanUpSelectedChildrenIDs(this);
|
||||
|
||||
var paintObjects = parentOfPaintTargets.Children
|
||||
.Where((i) => SelectedChildren
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
public SubtractObject3D_2()
|
||||
{
|
||||
Name = "Subtract";
|
||||
NameOverriden = false;
|
||||
}
|
||||
|
||||
[DisplayName("Part(s) to Subtract")]
|
||||
|
|
@ -101,6 +102,16 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
}
|
||||
}
|
||||
|
||||
public override void WrapSelectedItemAndSelect(InteractiveScene scene)
|
||||
{
|
||||
base.WrapSelectedItemAndSelect(scene);
|
||||
|
||||
if (SelectedChildren.Count == 0)
|
||||
{
|
||||
SelectedChildren.Add(SourceContainer.DescendantsAndSelfMultipleChildrenFirstOrSelf().Children.Last().ID);
|
||||
}
|
||||
}
|
||||
|
||||
public void DrawEditor(Object3DControlsLayer layer, DrawEventArgs e)
|
||||
{
|
||||
return;
|
||||
|
|
@ -124,6 +135,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
{
|
||||
await Rebuild();
|
||||
}
|
||||
else if(invalidateArgs.InvalidateType.HasFlag(InvalidateType.Name)
|
||||
&& !NameOverriden)
|
||||
{
|
||||
Name = NameFromChildren();
|
||||
NameOverriden = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
base.OnInvalidate(invalidateArgs);
|
||||
|
|
@ -154,7 +171,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
null,
|
||||
(reporter, cancellationTokenSource) =>
|
||||
{
|
||||
this.cancellationToken = cancellationTokenSource as CancellationTokenSource;
|
||||
this.cancellationToken = cancellationTokenSource;
|
||||
var progressStatus = new ProgressStatus();
|
||||
reporter.Report(progressStatus);
|
||||
|
||||
|
|
@ -166,6 +183,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
{
|
||||
}
|
||||
|
||||
if (!NameOverriden)
|
||||
{
|
||||
Name = NameFromChildren();
|
||||
NameOverriden = false;
|
||||
}
|
||||
|
||||
this.cancellationToken = null;
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
|
|
@ -183,11 +206,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
Subtract(CancellationToken.None, null);
|
||||
}
|
||||
|
||||
private void Subtract(CancellationToken cancellationToken, IProgress<ProgressStatus> reporter)
|
||||
{
|
||||
SourceContainer.Visible = true;
|
||||
RemoveAllButSource();
|
||||
|
||||
private (IEnumerable<IObject3D>, IEnumerable<IObject3D>) GetSubtractItems()
|
||||
{
|
||||
var parentOfSubtractTargets = SourceContainer.DescendantsAndSelfMultipleChildrenFirstOrSelf();
|
||||
|
||||
if (parentOfSubtractTargets.Children.Count() < 2)
|
||||
|
|
@ -198,27 +218,37 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
SourceContainer.Visible = false;
|
||||
}
|
||||
|
||||
return;
|
||||
return (null, null);
|
||||
}
|
||||
|
||||
CleanUpSelectedChildrenNames(this);
|
||||
|
||||
var removeVisibleItems = parentOfSubtractTargets.Children
|
||||
var removeItems = parentOfSubtractTargets.Children
|
||||
.Where((i) => SelectedChildren
|
||||
.Contains(i.ID))
|
||||
.SelectMany(c => c.VisibleMeshes())
|
||||
.ToList();
|
||||
.SelectMany(c => c.VisibleMeshes());
|
||||
|
||||
var keepItems = parentOfSubtractTargets.Children
|
||||
.Where((i) => !SelectedChildren
|
||||
.Contains(i.ID));
|
||||
.Contains(i.ID))
|
||||
.SelectMany(c => c.VisibleMeshes());
|
||||
|
||||
var keepVisibleItems = keepItems.SelectMany(c => c.VisibleMeshes()).ToList();
|
||||
return (keepItems, removeItems);
|
||||
}
|
||||
|
||||
if (removeVisibleItems.Any()
|
||||
&& keepVisibleItems.Any())
|
||||
private void Subtract(CancellationToken cancellationToken, IProgress<ProgressStatus> reporter)
|
||||
{
|
||||
SourceContainer.Visible = true;
|
||||
RemoveAllButSource();
|
||||
|
||||
CleanUpSelectedChildrenIDs(this);
|
||||
|
||||
var (keepItems, removeItems) = GetSubtractItems();
|
||||
var removeItemsCount = removeItems == null ? 0 : removeItems.Count();
|
||||
var keepItemsCount = keepItems == null ? 0 : keepItems.Count();
|
||||
|
||||
if (removeItems?.Any() == true
|
||||
&& keepItems?.Any() == true)
|
||||
{
|
||||
foreach (var keep in keepVisibleItems)
|
||||
foreach (var keep in keepItems)
|
||||
{
|
||||
#if false
|
||||
var items = removeVisibleItems.Select(i => (i.Mesh, i.WorldMatrix(SourceContainer))).ToList();
|
||||
|
|
@ -231,7 +261,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
reporter,
|
||||
cancellationToken);
|
||||
#else
|
||||
var totalOperations = removeVisibleItems.Count * keepVisibleItems.Count;
|
||||
var totalOperations = removeItemsCount * keepItemsCount;
|
||||
double amountPerOperation = 1.0 / totalOperations;
|
||||
double ratioCompleted = 0;
|
||||
|
||||
|
|
@ -243,7 +273,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
var resultsMesh = keep.Mesh;
|
||||
var keepWorldMatrix = keep.WorldMatrix(SourceContainer);
|
||||
|
||||
foreach (var remove in removeVisibleItems)
|
||||
foreach (var remove in removeItems)
|
||||
{
|
||||
resultsMesh = BooleanProcessing.Do(resultsMesh,
|
||||
keepWorldMatrix,
|
||||
|
|
@ -289,7 +319,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
{
|
||||
this.Children.Modify((list) =>
|
||||
{
|
||||
foreach (var item in removeVisibleItems)
|
||||
foreach (var item in removeItems)
|
||||
{
|
||||
var newObject = new Object3D()
|
||||
{
|
||||
|
|
@ -320,19 +350,19 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
}
|
||||
}
|
||||
|
||||
public static void CleanUpSelectedChildrenNames(OperationSourceContainerObject3D item)
|
||||
public static void CleanUpSelectedChildrenIDs(OperationSourceContainerObject3D item)
|
||||
{
|
||||
if (item is ISelectableChildContainer selectableChildContainer)
|
||||
{
|
||||
var parentOfSubtractTargets = item.DescendantsAndSelfMultipleChildrenFirstOrSelf();
|
||||
var parentOfSubtractTargets = item.SourceContainer.DescendantsAndSelfMultipleChildrenFirstOrSelf();
|
||||
|
||||
var allVisibleNames = parentOfSubtractTargets.Children.Select(i => i.ID);
|
||||
var allVisibleIDs = parentOfSubtractTargets.Children.Select(i => i.ID);
|
||||
// remove any names from SelectedChildren that are not a child we can select
|
||||
foreach (var name in selectableChildContainer.SelectedChildren.ToArray())
|
||||
foreach (var id in selectableChildContainer.SelectedChildren.ToArray())
|
||||
{
|
||||
if (!allVisibleNames.Contains(name))
|
||||
if (!allVisibleIDs.Contains(id))
|
||||
{
|
||||
selectableChildContainer.SelectedChildren.Remove(name);
|
||||
selectableChildContainer.SelectedChildren.Remove(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -345,5 +375,55 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
change.SetRowVisible(nameof(MeshAnalysis), () => Processing != ProcessingModes.Polygons);
|
||||
change.SetRowVisible(nameof(InputResolution), () => Processing != ProcessingModes.Polygons && MeshAnalysis == IplicitSurfaceMethod.Grid);
|
||||
}
|
||||
|
||||
private string NameFromChildren()
|
||||
{
|
||||
var (keepItems, removeItems) = GetSubtractItems();
|
||||
|
||||
var name = "";
|
||||
if (keepItems != null)
|
||||
{
|
||||
foreach (var item in keepItems)
|
||||
{
|
||||
if (name == "")
|
||||
{
|
||||
name = item.Name;
|
||||
}
|
||||
else
|
||||
{
|
||||
name += ", " + item.Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (removeItems != null)
|
||||
{
|
||||
var firstRemove = true;
|
||||
foreach (var item in removeItems)
|
||||
{
|
||||
if (name == "")
|
||||
{
|
||||
name = item.Name;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (firstRemove)
|
||||
{
|
||||
name += " - ";
|
||||
}
|
||||
else
|
||||
{
|
||||
name += ", ";
|
||||
}
|
||||
|
||||
name += item.Name;
|
||||
}
|
||||
|
||||
firstRemove = false;
|
||||
}
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue