Accelerated Intersect and Subtract
Refactoring
This commit is contained in:
parent
630f64fcaf
commit
06da80bd63
3 changed files with 35 additions and 36 deletions
|
|
@ -58,14 +58,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
|
||||
if (group is MeshWrapperOperation)
|
||||
{
|
||||
AddHoleSelector(view3DWidget, mainContainer, theme);
|
||||
AddPaintSelector(view3DWidget, mainContainer, theme);
|
||||
}
|
||||
|
||||
return mainContainer;
|
||||
}
|
||||
|
||||
public IEnumerable<Type> SupportedTypes() => new Type[]
|
||||
{
|
||||
{
|
||||
typeof(MeshWrapperOperation),
|
||||
};
|
||||
|
||||
|
|
@ -89,11 +89,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
return rowContainer;
|
||||
}
|
||||
|
||||
private void AddHoleSelector(View3DWidget view3DWidget, FlowLayoutWidget tabContainer, ThemeConfig theme)
|
||||
private void AddPaintSelector(View3DWidget view3DWidget, FlowLayoutWidget tabContainer, ThemeConfig theme)
|
||||
{
|
||||
var differenceItems = group.Descendants().Where((obj) => obj.OwnerID == group.ID).ToList();
|
||||
|
||||
tabContainer.AddChild(new TextWidget("Set as Hole")
|
||||
tabContainer.AddChild(new TextWidget("Set as Paint")
|
||||
{
|
||||
TextColor = ActiveTheme.Instance.PrimaryTextColor,
|
||||
HAnchor = HAnchor.Left,
|
||||
|
|
@ -142,41 +142,40 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
await Task.Run(() =>
|
||||
{
|
||||
var participants = group.Descendants().Where((obj) => obj.OwnerID == group.ID).ToList();
|
||||
var removeObjects = participants.Where((obj) => obj.OutputType == PrintOutputTypes.Hole).ToList();
|
||||
var paintObjects = participants.Where((obj) => obj.OutputType == PrintOutputTypes.Hole).ToList();
|
||||
var keepObjects = participants.Where((obj) => obj.OutputType != PrintOutputTypes.Hole).ToList();
|
||||
|
||||
if (removeObjects.Any()
|
||||
if (paintObjects.Any()
|
||||
&& keepObjects.Any())
|
||||
{
|
||||
foreach (var remove in removeObjects)
|
||||
foreach (var paint in paintObjects)
|
||||
{
|
||||
foreach (var keep in keepObjects)
|
||||
{
|
||||
var transformedRemove = Mesh.Copy(remove.Mesh, CancellationToken.None);
|
||||
transformedRemove.Transform(remove.WorldMatrix());
|
||||
if (paint.MaterialIndex != keep.MaterialIndex)
|
||||
{
|
||||
var transformedPaint = Mesh.Copy(paint.Mesh, CancellationToken.None);
|
||||
transformedPaint.Transform(paint.WorldMatrix());
|
||||
|
||||
var transformedKeep = Mesh.Copy(keep.Mesh, CancellationToken.None);
|
||||
transformedKeep.Transform(keep.WorldMatrix());
|
||||
var transformedKeep = Mesh.Copy(keep.Mesh, CancellationToken.None);
|
||||
transformedKeep.Transform(keep.WorldMatrix());
|
||||
|
||||
// remove the paint from the original
|
||||
var transformedKeep2 = PolygonMesh.Csg.CsgOperations.Subtract(transformedKeep, transformedRemove);
|
||||
var inverseKeep = keep.WorldMatrix();
|
||||
inverseKeep.Invert();
|
||||
transformedKeep2.Transform(inverseKeep);
|
||||
keep.Mesh = transformedKeep2;
|
||||
// remove the paint from the original
|
||||
var intersectAndSubtract = PolygonMesh.Csg.CsgOperations.IntersectAndSubtract(transformedKeep, transformedPaint);
|
||||
var inverseKeep = keep.WorldMatrix();
|
||||
inverseKeep.Invert();
|
||||
intersectAndSubtract.subtract.Transform(inverseKeep);
|
||||
keep.Mesh = intersectAndSubtract.subtract;
|
||||
|
||||
// intersect the paint with the original
|
||||
transformedRemove = PolygonMesh.Csg.CsgOperations.Intersect(transformedKeep, transformedRemove);
|
||||
var inverseRemove = remove.WorldMatrix();
|
||||
inverseRemove.Invert();
|
||||
transformedRemove.Transform(inverseRemove);
|
||||
remove.Mesh = transformedRemove;
|
||||
var inverseRemove = paint.WorldMatrix();
|
||||
inverseRemove.Invert();
|
||||
intersectAndSubtract.intersect.Transform(inverseRemove);
|
||||
paint.Mesh = intersectAndSubtract.intersect;
|
||||
}
|
||||
}
|
||||
|
||||
// set it to the correct extruder
|
||||
remove.MaterialIndex = 1;
|
||||
// now set it to the new solid color
|
||||
remove.OutputType = PrintOutputTypes.Solid;
|
||||
paint.OutputType = PrintOutputTypes.Solid;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
public readonly int EditButtonHeight = 44;
|
||||
|
||||
private ObservableCollection<GuiWidget> extruderButtons = new ObservableCollection<GuiWidget>();
|
||||
private ObservableCollection<GuiWidget> materialButtons = new ObservableCollection<GuiWidget>();
|
||||
private bool hasDrawn = false;
|
||||
|
||||
internal bool partHasBeenEdited = false;
|
||||
|
|
@ -189,7 +189,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
};
|
||||
this.InteractionLayer.AddChild(processingProgressControl);
|
||||
|
||||
var buttonSpacing = ApplicationController.Instance.Theme.ButtonSpacing;
|
||||
var buttonSpacing = theme.ButtonSpacing;
|
||||
|
||||
Button addButton = smallMarginButtonFactory.Generate("Insert".Localize(), AggContext.StaticData.LoadIcon("cube.png", 14, 14, IconColor.Theme));
|
||||
addButton.Margin = 0;
|
||||
|
|
@ -1664,7 +1664,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
};
|
||||
widget.AddChild(buttonPanel);
|
||||
|
||||
extruderButtons.Clear();
|
||||
materialButtons.Clear();
|
||||
int extruderCount = 4;
|
||||
for (int extruderIndex = 0; extruderIndex < extruderCount; extruderIndex++)
|
||||
{
|
||||
|
|
@ -1678,8 +1678,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
string materialLabelText = string.Format("{0} {1}", "Material".Localize(), extruderIndex + 1);
|
||||
|
||||
RadioButton materialSelection = new RadioButton(materialLabelText, textColor: RGBA_Bytes.Black);
|
||||
extruderButtons.Add(materialSelection);
|
||||
materialSelection.SiblingRadioButtonList = extruderButtons;
|
||||
materialButtons.Add(materialSelection);
|
||||
materialSelection.SiblingRadioButtonList = materialButtons;
|
||||
colorSelectionContainer.AddChild(materialSelection);
|
||||
colorSelectionContainer.AddChild(new HorizontalSpacer());
|
||||
int extruderIndexCanPassToClick = extruderIndex;
|
||||
|
|
@ -1763,22 +1763,22 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
var selectedItem = Scene.SelectedItem;
|
||||
|
||||
|
||||
if (extruderButtons?.Count > 0)
|
||||
if (materialButtons?.Count > 0)
|
||||
{
|
||||
bool setSelection = false;
|
||||
// Set the material selector to have the correct material button selected
|
||||
for (int i = 0; i < extruderButtons.Count; i++)
|
||||
for (int i = 0; i < materialButtons.Count; i++)
|
||||
{
|
||||
if (selectedItem.MaterialIndex == i)
|
||||
{
|
||||
((RadioButton)extruderButtons[i]).Checked = true;
|
||||
((RadioButton)materialButtons[i]).Checked = true;
|
||||
setSelection = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(!setSelection)
|
||||
{
|
||||
((RadioButton)extruderButtons[0]).Checked = true;
|
||||
((RadioButton)materialButtons[0]).Checked = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 43d695c8e589fd5c05859a03bb25ab67dd7f8d52
|
||||
Subproject commit a697aa74d7fb187f8779abc389fbd37b2662230d
|
||||
Loading…
Add table
Add a link
Reference in a new issue