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(), TitleGetter = () => "Combine".Localize(),
Action = (sceneContext) => 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); new MergePathObject3D("Combine".Localize(), ClipperLib.ClipType.ctUnion).WrapSelectedItemAndSelect(sceneContext.Scene);
} }
@ -1055,7 +1055,7 @@ namespace MatterHackers.MatterControl
TitleGetter = () => "Intersect".Localize(), TitleGetter = () => "Intersect".Localize(),
Action = (sceneContext) => 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); new MergePathObject3D("Intersect".Localize(), ClipperLib.ClipType.ctIntersection).WrapSelectedItemAndSelect(sceneContext.Scene);
} }
@ -1081,10 +1081,7 @@ namespace MatterHackers.MatterControl
if (item is IPathObject3D pathObject) if (item is IPathObject3D pathObject)
{ {
if (!pathObject.MeshIsSolidObject) return pathObject.MeshIsSolidObject;
{
return false;
}
} }
return true; return true;
@ -1093,20 +1090,6 @@ namespace MatterHackers.MatterControl
return false; 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() private static SceneOperation LayFlatOperation()
{ {
return new SceneOperation("Lay Flat") return new SceneOperation("Lay Flat")
@ -1356,7 +1339,7 @@ namespace MatterHackers.MatterControl
TitleGetter = () => "Subtract".Localize(), TitleGetter = () => "Subtract".Localize(),
Action = (sceneContext) => 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); new SubtractPathObject3D().WrapSelectedItemAndSelect(sceneContext.Scene);
} }

View file

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

View file

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

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