Merge pull request #3379 from larsbrubaker/design_tools
Have transparency working on subtract again
This commit is contained in:
commit
cf1f431d5c
4 changed files with 61 additions and 29 deletions
|
|
@ -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();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue