Merge pull request #3379 from larsbrubaker/design_tools

Have transparency working on subtract again
This commit is contained in:
Lars Brubaker 2018-06-04 10:06:01 -07:00 committed by GitHub
commit cf1f431d5c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 61 additions and 29 deletions

View file

@ -32,6 +32,7 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Threading;
using MatterHackers.Agg;
using MatterHackers.Agg.Image;
using MatterHackers.Agg.Platform;
@ -41,6 +42,7 @@ using MatterHackers.Localizations;
using MatterHackers.MatterControl.CustomWidgets;
using MatterHackers.MatterControl.DesignTools.EditableTypes;
using MatterHackers.MatterControl.PartPreviewWindow;
using MatterHackers.MatterControl.PartPreviewWindow.View3D;
using MatterHackers.MatterControl.SlicerConfiguration;
using MatterHackers.VectorMath;
@ -534,6 +536,31 @@ namespace MatterHackers.MatterControl.DesignTools
{
GuiWidget tabContainer = new FlowLayoutWidget(FlowDirection.TopToBottom);
void UpdateSelectColors(bool selectionChanged = false)
{
foreach (var child in parent.Children.ToList())
{
child.SuspendRebuild();
if (!childSelector.Contains(child.ID)
|| tabContainer.HasBeenClosed)
{
child.Color = new Color(child.WorldColor(), 255);
}
else
{
child.Color = new Color(child.WorldColor(), 200);
}
if (selectionChanged)
{
child.Visible = true;
}
child.ResumeRebuild();
}
}
tabContainer.Closed += (s, e) => UpdateSelectColors();
var children = parent.Children.ToList();
Dictionary<ICheckbox, IObject3D> objectChecks = new Dictionary<ICheckbox, IObject3D>();
@ -589,10 +616,20 @@ namespace MatterHackers.MatterControl.DesignTools
childSelector.Remove(objectChecks[checkbox].ID);
}
}
if(parent is MeshWrapperObject3D meshWrapper)
{
meshWrapper.SuspendRebuild();
meshWrapper.ResetMeshWrapperMeshes(Object3DPropertyFlags.All, CancellationToken.None);
meshWrapper.ResumeRebuild();
}
UpdateSelectColors(true);
}
};
tabContainer.AddChild(rowContainer);
UpdateSelectColors();
}
/*

View file

@ -94,18 +94,17 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
double amountPerOperation = 1.0 / totalOperations;
double percentCompleted = 0;
foreach (var paint in paintObjects)
foreach (var paint in paintObjects.Select((r) => (obj3D: r, matrix: r.WorldMatrix())).ToList())
{
var transformedPaint = Mesh.Copy(paint.Mesh, cancellationToken);
transformedPaint.Transform(paint.WorldMatrix());
var inverseRemove = paint.WorldMatrix();
inverseRemove.Invert();
var transformedPaint = Mesh.Copy(paint.obj3D.Mesh, cancellationToken);
transformedPaint.Transform(paint.matrix);
var inverseRemove = paint.matrix.Inverted;
Mesh paintMesh = null;
foreach (var keep in keepObjects)
foreach (var keep in keepObjects.Select((r) => (obj3D: r, matrix: r.WorldMatrix())).ToList())
{
var transformedKeep = Mesh.Copy(keep.Mesh, cancellationToken);
transformedKeep.Transform(keep.WorldMatrix());
var transformedKeep = Mesh.Copy(keep.obj3D.Mesh, cancellationToken);
transformedKeep.Transform(keep.matrix);
// remove the paint from the original
var intersectAndSubtract = PolygonMesh.Csg.CsgOperations.IntersectAndSubtract(transformedKeep, transformedPaint, (status, progress0To1) =>
@ -117,10 +116,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
progressStatus.Progress0To1 = percentCompleted + amountPerOperation * progress0To1;
reporter?.Report(progressStatus);
}, cancellationToken);
var inverseKeep = keep.WorldMatrix();
inverseKeep.Invert();
var inverseKeep = keep.matrix.Inverted;
intersectAndSubtract.subtract.Transform(inverseKeep);
keep.Mesh = intersectAndSubtract.subtract;
keep.obj3D.Mesh = intersectAndSubtract.subtract;
// keep all the intersections together
if (paintMesh == null)
@ -141,12 +139,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
// move the paint mesh back to its original coordinates
paintMesh.Transform(inverseRemove);
paint.Mesh = paintMesh;
paint.obj3D.Mesh = paintMesh;
paint.Color = paint.WorldColor().AdjustContrast(keepObjects.First().WorldColor(), 2).ToColor();
// now set it to the new solid color
paint.OutputType = PrintOutputTypes.Solid;
paint.obj3D.Color = paint.obj3D.WorldColor().AdjustContrast(keepObjects.First().WorldColor(), 2).ToColor();
}
}

View file

@ -33,6 +33,7 @@ using MatterHackers.DataConverters3D;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.DesignTools;
using MatterHackers.PolygonMesh;
using MatterHackers.VectorMath;
using System;
using System.Collections.Generic;
using System.Linq;
@ -65,19 +66,19 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
double percentCompleted = 0;
ProgressStatus progressStatus = new ProgressStatus();
foreach (var remove in removeObjects)
foreach (var remove in removeObjects.Select((r) => (obj3D: r, matrix: r.WorldMatrix())).ToList())
{
foreach (var keep in keepObjects)
foreach (var keep in keepObjects.Select((r) => (obj3D: r, matrix: r.WorldMatrix())).ToList())
{
progressStatus.Status = "Copy Remove";
reporter?.Report(progressStatus);
var transformedRemove = Mesh.Copy(remove.Mesh, cancellationToken);
transformedRemove.Transform(remove.WorldMatrix());
var transformedRemove = Mesh.Copy(remove.obj3D.Mesh, cancellationToken);
transformedRemove.Transform(remove.matrix);
progressStatus.Status = "Copy Keep";
reporter?.Report(progressStatus);
var transformedKeep = Mesh.Copy(keep.Mesh, cancellationToken);
transformedKeep.Transform(keep.WorldMatrix());
var transformedKeep = Mesh.Copy(keep.obj3D.Mesh, cancellationToken);
transformedKeep.Transform(keep.matrix);
progressStatus.Status = "Do CSG";
reporter?.Report(progressStatus);
@ -90,20 +91,19 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
progressStatus.Progress0To1 = percentCompleted + amountPerOperation * progress0To1;
reporter?.Report(progressStatus);
}, cancellationToken);
var inverse = keep.WorldMatrix();
inverse.Invert();
var inverse = keep.matrix.Inverted;
transformedKeep.Transform(inverse);
keep.SuspendRebuild();
keep.Mesh = transformedKeep;
keep.ResumeRebuild();
keep.obj3D.SuspendRebuild();
keep.obj3D.Mesh = transformedKeep;
keep.obj3D.ResumeRebuild();
percentCompleted += amountPerOperation;
progressStatus.Progress0To1 = percentCompleted;
reporter?.Report(progressStatus);
}
remove.Visible = false;
remove.obj3D.Visible = false;
}
}
}

@ -1 +1 @@
Subproject commit 5271ad98f4e8a114a9f81c8f04b0e68065493483
Subproject commit a7907690fed11c303e61d071537275c9e87ed4ab