New path understanding is working

This commit is contained in:
Lars Brubaker 2023-12-01 09:43:23 -08:00
parent 030a81e9bc
commit 5db2bfae47
4 changed files with 24 additions and 26 deletions

View file

@ -888,7 +888,7 @@ namespace MatterHackers.MatterControl
TitleGetter = () => "Combine".Localize(),
Action = (sceneContext) =>
{
if (sceneContext.Scene.SelectedItem.VisibleMeshes().All(o => o is IPathEditorDraw))
if (sceneContext.Scene.SelectedItem.VisibleMeshes().All(o => o is IPathObject3D))
{
new MergePathObject3D("Combine".Localize(), ClipperLib.ClipType.ctUnion).WrapSelectedItemAndSelect(sceneContext.Scene);
}
@ -1055,7 +1055,7 @@ namespace MatterHackers.MatterControl
TitleGetter = () => "Intersect".Localize(),
Action = (sceneContext) =>
{
if (sceneContext.Scene.SelectedItem.VisibleMeshes().All(o => o is IPathEditorDraw))
if (sceneContext.Scene.SelectedItem.VisibleMeshes().All(o => o is IPathObject3D))
{
new MergePathObject3D("Intersect".Localize(), ClipperLib.ClipType.ctIntersection).WrapSelectedItemAndSelect(sceneContext.Scene);
}
@ -1081,10 +1081,7 @@ namespace MatterHackers.MatterControl
if (item is IPathObject3D pathObject)
{
if (!pathObject.MeshIsSolidObject)
{
return false;
}
return pathObject.MeshIsSolidObject;
}
return true;
@ -1093,20 +1090,6 @@ namespace MatterHackers.MatterControl
return false;
}
private static bool IsPathObject(IObject3D item)
{
if (item != null)
{
if (item is IPathObject3D pathObject
&& !pathObject.MeshIsSolidObject)
{
return true;
}
}
return false;
}
private static SceneOperation LayFlatOperation()
{
return new SceneOperation("Lay Flat")
@ -1356,7 +1339,7 @@ namespace MatterHackers.MatterControl
TitleGetter = () => "Subtract".Localize(),
Action = (sceneContext) =>
{
if (sceneContext.Scene.SelectedItem.VisibleMeshes().All(o => o is IPathEditorDraw))
if (sceneContext.Scene.SelectedItem.VisibleMeshes().All(o => o is IPathObject3D))
{
new SubtractPathObject3D().WrapSelectedItemAndSelect(sceneContext.Scene);
}

View file

@ -117,7 +117,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
SourceContainer.Visible = true;
RemoveAllButSource();
var participants = SourceContainer.VisiblePaths2();
var participants = SourceContainer.VisiblePaths();
var first = participants.First();
var firstObject3D = first as Object3D;
if (participants.Count() < 2)
@ -148,6 +148,8 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
var itemObject3D = item as Object3D;
var itemVertexSource = item.GetVertexSource().Transform(itemObject3D.WorldMatrix(this));
this.CopyProperties(firstObject3D, Object3DPropertyFlags.Color);
resultsVertexSource = resultsVertexSource.MergePaths(itemVertexSource, clipType);
ratioCompleted += amountPerOperation;

View file

@ -45,7 +45,7 @@ using System.Threading.Tasks;
namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
{
public class SubtractPathObject3D : OperationSourceContainerObject3D, IEditorDraw, IObject3DControlsProvider, IPrimaryOperationsSpecifier
public class SubtractPathObject3D : OperationSourceContainerObject3D, IEditorDraw, IObject3DControlsProvider, IPrimaryOperationsSpecifier, IPathObject3D
{
public SubtractPathObject3D()
{
@ -93,6 +93,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
public override bool CanApply => true;
public bool MeshIsSolidObject => false;
public VertexStorage VertexStorage { get; set; }
public override void Apply(UndoBuffer undoBuffer)
{
this.FlattenToPathObject(undoBuffer);
@ -189,11 +193,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
bool first = true;
foreach (var keep in keepVisibleItems)
{
var resultsVertexSource = keep.GetVertexSource().Transform(keep.Matrix);
var keepObject3D = keep as Object3D;
var resultsVertexSource = keep.GetVertexSource().Transform(keepObject3D.Matrix);
foreach (var remove in removeVisibleItems)
{
resultsVertexSource = resultsVertexSource.MergePaths(remove.GetVertexSource().Transform(remove.Matrix), ClipperLib.ClipType.ctDifference);
var removeObject3D = remove as Object3D;
resultsVertexSource = resultsVertexSource.MergePaths(remove.GetVertexSource().Transform(removeObject3D.Matrix), ClipperLib.ClipType.ctDifference);
// report our progress
ratioCompleted += amountPerOperation;
@ -203,6 +209,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
if (first)
{
this.VertexStorage = new VertexStorage(resultsVertexSource);
this.CopyProperties(keepObject3D, Object3DPropertyFlags.Color);
first = false;
}
else
@ -251,5 +259,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
{
return PathContainerObject3D.GetOperations(this.GetType());
}
public IVertexSource GetVertexSource()
{
return VertexStorage;
}
}
}

@ -1 +1 @@
Subproject commit 461e797ff7e25df7e9b4a6031d396937d7ea6c30
Subproject commit 2ba5e9779639090ffa4b632aeb014e4b59256ae6