New path understanding is working
This commit is contained in:
parent
030a81e9bc
commit
5db2bfae47
4 changed files with 24 additions and 26 deletions
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue