diff --git a/MatterControl.MeshOperations/BooleanProcessing.cs b/MatterControl.MeshOperations/BooleanProcessing.cs index dd0e3121d..8a177023d 100644 --- a/MatterControl.MeshOperations/BooleanProcessing.cs +++ b/MatterControl.MeshOperations/BooleanProcessing.cs @@ -39,54 +39,50 @@ using DualContouring; using g3; using gs; using MatterHackers.Agg; -using MatterHackers.DataConverters3D; using MatterHackers.MatterControl.DesignTools; -using MatterHackers.PolygonMesh.Csg; -using MatterHackers.RayTracer; using MatterHackers.VectorMath; namespace MatterHackers.PolygonMesh { using Polygon = List; - using Polygons = List>; - public static class BooleanProcessing + public enum CsgModes { - public enum CsgModes - { - Union, - Subtract, - Intersect - } + Union, + Subtract, + Intersect + } - public enum IplicitSurfaceMethod - { - [Description("Faster but less accurate")] - Grid, - [Description("Slower but more accurate")] - Exact - }; + public enum IplicitSurfaceMethod + { + [Description("Faster but less accurate")] + Grid, + [Description("Slower but more accurate")] + Exact + }; - public enum ProcessingModes - { - [Description("Default CSG processing")] - Polygons, - [Description("Use libigl (windows only)")] - libigl, - [Description("Experimental Marching Cubes")] - Marching_Cubes, - [Description("Experimental Dual Contouring")] - Dual_Contouring, - } + public enum ProcessingModes + { + [Description("Default CSG processing")] + Polygons, + [Description("Use libigl (windows only)")] + libigl, + [Description("Experimental Marching Cubes")] + Marching_Cubes, + [Description("Experimental Dual Contouring")] + Dual_Contouring, + } - public enum ProcessingResolution - { - _64 = 6, - _128 = 7, - _256 = 8, - _512 = 9, - } + public enum ProcessingResolution + { + _64 = 6, + _128 = 7, + _256 = 8, + _512 = 9, + } + public static class BooleanProcessing + { private const string BooleanAssembly = "609_Boolean_bin.dll"; [DllImport(BooleanAssembly, CallingConvention = CallingConvention.Cdecl)] @@ -106,11 +102,24 @@ namespace MatterHackers.PolygonMesh IProgress reporter, CancellationToken cancellationToken, double amountPerOperation = 1, - double percentCompleted = 0) + double ratioCompleted = 0) { if (processingMode == ProcessingModes.Polygons) { - return ExactBySlicing(items, operation, reporter, cancellationToken, amountPerOperation, percentCompleted); + var csgBySlicing = new CsgBySlicing(); + csgBySlicing.Setup(items, null, cancellationToken); + + return csgBySlicing.Calculate(operation, + (ratio, message) => + { + reporter?.Report(new ProgressStatus() + { + Progress0To1 = ratio * amountPerOperation + ratioCompleted, + Status = message + }); + + }, + cancellationToken); } else if (processingMode == ProcessingModes.libigl) { @@ -250,229 +259,6 @@ namespace MatterHackers.PolygonMesh return implicitResult; } - private static Mesh ExactBySlicing(IEnumerable<(Mesh mesh, Matrix4X4 matrix)> meshAndMatrix, - CsgModes operation, - IProgress reporter, - CancellationToken cancellationToken, - double amountPerOperationIn = 1, - double percentCompletedIn = 0) - { - var progressStatus = new ProgressStatus(); - var totalOperations = 0; - var transformedMeshes = new List(); - var bvhAccelerators = new List(); - foreach (var (mesh, matrix) in meshAndMatrix) - { - totalOperations += mesh.Faces.Count; - var meshCopy = mesh.Copy(CancellationToken.None); - transformedMeshes.Add(meshCopy); - meshCopy.Transform(matrix); - bvhAccelerators.Add(MeshToBVH.Convert(meshCopy)); - } - - var plansByMesh = new List>(); - var uniquePlanes = new HashSet(); - for (int i = 0; i < transformedMeshes.Count; i++) - { - var mesh = transformedMeshes[i]; - plansByMesh.Add(new List()); - for (int j = 0; j < transformedMeshes[i].Faces.Count; j++) - { - var face = mesh.Faces[j]; - var cutPlane = new Plane(mesh.Vertices[face.v0].AsVector3(), mesh.Vertices[face.v1].AsVector3(), mesh.Vertices[face.v2].AsVector3()); - plansByMesh[i].Add(cutPlane); - uniquePlanes.Add(cutPlane); - } - } - - PlaneNormalXSorter planeSorter = new PlaneNormalXSorter(uniquePlanes); - var transformTo0Planes = new Dictionary(); - foreach(var plane in uniquePlanes) - { - var matrix = SliceLayer.GetTransformTo0Plane(plane); - transformTo0Planes[plane] = (matrix, matrix.Inverted); - } - - double amountPerOperation = 1.0 / totalOperations * amountPerOperationIn; - double percentCompleted = percentCompletedIn; - - var resultsMesh = new Mesh(); - - // keep track of all the faces that added by their plane - // the internal dictionary is sourceMeshIndex, sourceFaceIndex, destFaceIndex - var coPlanarFaces = new CoPlanarFaces(); - - for (var mesh1Index = 0; mesh1Index < transformedMeshes.Count; mesh1Index++) - { - var mesh1 = transformedMeshes[mesh1Index]; - - for (int faceIndex = 0; faceIndex < mesh1.Faces.Count; faceIndex++) - { - var face = mesh1.Faces[faceIndex]; - - var cutPlane = plansByMesh[mesh1Index][faceIndex]; - var totalSlice = new Polygons(); - var firstSlice = true; - - var transformTo0Plane = transformTo0Planes[cutPlane].matrix; - for (var sliceMeshIndex = 0; sliceMeshIndex < transformedMeshes.Count; sliceMeshIndex++) - { - if (mesh1Index == sliceMeshIndex) - { - continue; - } - - var mesh2 = transformedMeshes[sliceMeshIndex]; - // calculate and add the PWN face from the loops - var slice = SliceLayer.CreateSlice(mesh2, cutPlane, transformTo0Plane, bvhAccelerators[sliceMeshIndex]); - if (firstSlice) - { - totalSlice = slice; - firstSlice = false; - } - else - { - totalSlice = totalSlice.Union(slice); - } - } - - // now we have the total loops that this polygon can intersect from the other meshes - // make a polygon for this face - var facePolygon = CoPlanarFaces.GetFacePolygon(mesh1, faceIndex, transformTo0Plane); - - var polygonShape = new Polygons(); - // clip against the slice based on the parameters - var clipper = new Clipper(); - clipper.AddPath(facePolygon, PolyType.ptSubject, true); - clipper.AddPaths(totalSlice, PolyType.ptClip, true); - var expectedFaceNormal = face.normal; - - switch (operation) - { - case CsgModes.Union: - clipper.Execute(ClipType.ctDifference, polygonShape); - break; - - case CsgModes.Subtract: - if (mesh1Index == 0) - { - clipper.Execute(ClipType.ctDifference, polygonShape); - } - else - { - expectedFaceNormal *= -1; - clipper.Execute(ClipType.ctIntersection, polygonShape); - } - - break; - - case CsgModes.Intersect: - clipper.Execute(ClipType.ctIntersection, polygonShape); - break; - } - - var faceCountPreAdd = resultsMesh.Faces.Count; - - if (polygonShape.Count == 1 - && polygonShape[0].Count == 3 - && facePolygon.Contains(polygonShape[0][0]) - && facePolygon.Contains(polygonShape[0][1]) - && facePolygon.Contains(polygonShape[0][2])) - { - resultsMesh.AddFaceCopy(mesh1, faceIndex); - } - else - { - var preAddCount = resultsMesh.Vertices.Count; - // mesh the new polygon and add it to the resultsMesh - polygonShape.Vertices(1).TriangulateFaces(null, resultsMesh, 0, transformTo0Planes[cutPlane].inverted); - - // TODO: map all the added vertices that can be back to the original polygon positions - // for (int i = preAddCount; i< resultsMesh.Vertices.Count; i++) - { - - } - } - - if (resultsMesh.Faces.Count - faceCountPreAdd > 0) - { - // keep track of the adds so we can process the coplanar faces after - for (int i = faceCountPreAdd; i < resultsMesh.Faces.Count; i++) - { - coPlanarFaces.StoreFaceAdd(planeSorter, cutPlane, mesh1Index, faceIndex, i); - // make sure our added faces are the right direction - if (resultsMesh.Faces[i].normal.Dot(expectedFaceNormal) < 0) - { - resultsMesh.FlipFace(i); - } - } - } - else // we did not add any faces but we will still keep track of this polygons plan - { - coPlanarFaces.StoreFaceAdd(planeSorter, cutPlane, mesh1Index, faceIndex, -1); - } - - percentCompleted += amountPerOperation; - progressStatus.Progress0To1 = percentCompleted; - reporter?.Report(progressStatus); - - if (cancellationToken.IsCancellationRequested) - { - return null; - } - } - } - - // handle the co-planar faces - var faceIndicesToRemove = new HashSet(); - foreach (var plane in coPlanarFaces.Planes) - { - var meshIndices = coPlanarFaces.MeshIndicesForPlane(plane); - if (meshIndices.Count() > 1) - { - // check if more than one mesh has this polygons on this plan - var flattenedMatrix = transformTo0Planes[plane].matrix; - - // depending on the operation add or remove polygons that are planar - switch (operation) - { - case CsgModes.Union: - coPlanarFaces.UnionFaces(plane, transformedMeshes, resultsMesh, flattenedMatrix); - break; - - case CsgModes.Subtract: - coPlanarFaces.SubtractFaces(plane, transformedMeshes, resultsMesh, flattenedMatrix, faceIndicesToRemove); - break; - - case CsgModes.Intersect: - coPlanarFaces.IntersectFaces(plane, transformedMeshes, resultsMesh, flattenedMatrix, faceIndicesToRemove); - break; - } - - } - } - - // now rebuild the face list without the remove polygons - if (faceIndicesToRemove.Count > 0) - { - var newFaces = new FaceList(); - for (int i = 0; i < resultsMesh.Faces.Count; i++) - { - // if the face is NOT in the remove faces - if (!faceIndicesToRemove.Contains(i)) - { - var face = resultsMesh.Faces[i]; - newFaces.Add(face); - } - } - - resultsMesh.Faces = newFaces; - } - - resultsMesh.CleanAndMerge(); - return resultsMesh; - } - private static Mesh ExactLegacy(IEnumerable<(Mesh mesh, Matrix4X4 matrix)> items, CsgModes operation, ProcessingModes processingMode, @@ -484,7 +270,7 @@ namespace MatterHackers.PolygonMesh var progressStatus = new ProgressStatus(); var totalOperations = items.Count() - 1; double amountPerOperation = 1.0 / totalOperations; - double percentCompleted = 0; + double ratioCompleted = 0; var first = true; var resultsMesh = items.First().mesh; @@ -513,15 +299,15 @@ namespace MatterHackers.PolygonMesh // reporting reporter, amountPerOperation, - percentCompleted, + ratioCompleted, progressStatus, cancellationToken); // after the first union we are working with the transformed mesh and don't need the first transform firstWorldMatrix = Matrix4X4.Identity; - percentCompleted += amountPerOperation; - progressStatus.Progress0To1 = percentCompleted; + ratioCompleted += amountPerOperation; + progressStatus.Progress0To1 = ratioCompleted; reporter?.Report(progressStatus); } @@ -541,7 +327,7 @@ namespace MatterHackers.PolygonMesh // reporting IProgress reporter = null, double amountPerOperation = 1, - double percentCompleted = 0, + double ratioCompleted = 0, ProgressStatus progressStatus = null, CancellationToken cancellationToken = default(CancellationToken)) { @@ -556,7 +342,7 @@ namespace MatterHackers.PolygonMesh reporter, cancellationToken, amountPerOperation, - percentCompleted); + ratioCompleted); } else if (processingMode == ProcessingModes.libigl) { @@ -620,7 +406,7 @@ namespace MatterHackers.PolygonMesh if (progressStatus != null) { - progressStatus.Progress0To1 = percentCompleted + amountPerOperation; + progressStatus.Progress0To1 = ratioCompleted + amountPerOperation; reporter.Report(progressStatus); } } @@ -645,7 +431,7 @@ namespace MatterHackers.PolygonMesh // Abort if flagged cancellationToken.ThrowIfCancellationRequested(); progressStatus.Status = status; - progressStatus.Progress0To1 = percentCompleted + (amountPerOperation * progress0To1); + progressStatus.Progress0To1 = ratioCompleted + (amountPerOperation * progress0To1); reporter?.Report(progressStatus); }, cancellationToken); @@ -656,7 +442,7 @@ namespace MatterHackers.PolygonMesh (status, progress0To1) => { progressStatus.Status = status; - progressStatus.Progress0To1 = percentCompleted + (amountPerOperation * progress0To1); + progressStatus.Progress0To1 = ratioCompleted + (amountPerOperation * progress0To1); reporter?.Report(progressStatus); }, cancellationToken); @@ -668,7 +454,7 @@ namespace MatterHackers.PolygonMesh { // Abort if flagged cancellationToken.ThrowIfCancellationRequested(); progressStatus.Status = status; - progressStatus.Progress0To1 = percentCompleted + (amountPerOperation * progress0To1); + progressStatus.Progress0To1 = ratioCompleted + (amountPerOperation * progress0To1); reporter.Report(progressStatus); }, cancellationToken); diff --git a/MatterControl.MeshOperations/CsgBySlicing.cs b/MatterControl.MeshOperations/CsgBySlicing.cs new file mode 100644 index 000000000..21c6fd252 --- /dev/null +++ b/MatterControl.MeshOperations/CsgBySlicing.cs @@ -0,0 +1,291 @@ +/* +Copyright (c) 2019, Lars Brubaker, John Lewin +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using ClipperLib; +using MatterHackers.Agg; +using MatterHackers.DataConverters3D; +using MatterHackers.PolygonMesh.Csg; +using MatterHackers.RayTracer; +using MatterHackers.VectorMath; + +namespace MatterHackers.PolygonMesh +{ + using Polygons = List>; + + public class CsgBySlicing + { + private int totalOperations; + private List transformedMeshes; + private List bvhAccelerators; + private List> plansByMesh; + private PlaneNormalXSorter planeSorter; + private Dictionary transformTo0Planes; + + public CsgBySlicing() + { + } + + public void Setup(IEnumerable<(Mesh mesh, Matrix4X4 matrix)> meshAndMatrix, + Action progressReporter, + CancellationToken cancellationToken) + { + totalOperations = 0; + transformedMeshes = new List(); + bvhAccelerators = new List(); + foreach (var (mesh, matrix) in meshAndMatrix) + { + totalOperations += mesh.Faces.Count; + var meshCopy = mesh.Copy(cancellationToken); + transformedMeshes.Add(meshCopy); + meshCopy.Transform(matrix); + bvhAccelerators.Add(MeshToBVH.Convert(meshCopy)); + } + + plansByMesh = new List>(); + var uniquePlanes = new HashSet(); + for (int i = 0; i < transformedMeshes.Count; i++) + { + var mesh = transformedMeshes[i]; + plansByMesh.Add(new List()); + for (int j = 0; j < transformedMeshes[i].Faces.Count; j++) + { + var face = mesh.Faces[j]; + var cutPlane = new Plane(mesh.Vertices[face.v0].AsVector3(), mesh.Vertices[face.v1].AsVector3(), mesh.Vertices[face.v2].AsVector3()); + plansByMesh[i].Add(cutPlane); + uniquePlanes.Add(cutPlane); + } + + if (cancellationToken.IsCancellationRequested) + { + return; + } + } + + planeSorter = new PlaneNormalXSorter(uniquePlanes); + transformTo0Planes = new Dictionary(); + foreach (var plane in uniquePlanes) + { + var matrix = SliceLayer.GetTransformTo0Plane(plane); + transformTo0Planes[plane] = (matrix, matrix.Inverted); + } + + } + + public Mesh Calculate(CsgModes operation, + Action progressReporter, + CancellationToken cancellationToken) + { + double amountPerOperation = 1.0 / totalOperations; + double ratioCompleted = 0; + + var resultsMesh = new Mesh(); + + // keep track of all the faces added by their plane + var coPlanarFaces = new CoPlanarFaces(); + + for (var mesh1Index = 0; mesh1Index < transformedMeshes.Count; mesh1Index++) + { + var mesh1 = transformedMeshes[mesh1Index]; + + for (int faceIndex = 0; faceIndex < mesh1.Faces.Count; faceIndex++) + { + var face = mesh1.Faces[faceIndex]; + + var cutPlane = plansByMesh[mesh1Index][faceIndex]; + var totalSlice = new Polygons(); + var firstSlice = true; + + var transformTo0Plane = transformTo0Planes[cutPlane].matrix; + for (var sliceMeshIndex = 0; sliceMeshIndex < transformedMeshes.Count; sliceMeshIndex++) + { + if (mesh1Index == sliceMeshIndex) + { + continue; + } + + var mesh2 = transformedMeshes[sliceMeshIndex]; + // calculate and add the PWN face from the loops + var slice = SliceLayer.CreateSlice(mesh2, cutPlane, transformTo0Plane, bvhAccelerators[sliceMeshIndex]); + if (firstSlice) + { + totalSlice = slice; + firstSlice = false; + } + else + { + totalSlice = totalSlice.Union(slice); + } + } + + // now we have the total loops that this polygon can intersect from the other meshes + // make a polygon for this face + var facePolygon = CoPlanarFaces.GetFacePolygon(mesh1, faceIndex, transformTo0Plane); + + var polygonShape = new Polygons(); + // clip against the slice based on the parameters + var clipper = new Clipper(); + clipper.AddPath(facePolygon, PolyType.ptSubject, true); + clipper.AddPaths(totalSlice, PolyType.ptClip, true); + var expectedFaceNormal = face.normal; + + switch (operation) + { + case CsgModes.Union: + clipper.Execute(ClipType.ctDifference, polygonShape); + break; + + case CsgModes.Subtract: + if (mesh1Index == 0) + { + clipper.Execute(ClipType.ctDifference, polygonShape); + } + else + { + expectedFaceNormal *= -1; + clipper.Execute(ClipType.ctIntersection, polygonShape); + } + + break; + + case CsgModes.Intersect: + clipper.Execute(ClipType.ctIntersection, polygonShape); + break; + } + + var faceCountPreAdd = resultsMesh.Faces.Count; + + if (polygonShape.Count == 1 + && polygonShape[0].Count == 3 + && facePolygon.Contains(polygonShape[0][0]) + && facePolygon.Contains(polygonShape[0][1]) + && facePolygon.Contains(polygonShape[0][2])) + { + resultsMesh.AddFaceCopy(mesh1, faceIndex); + } + else + { + var preAddCount = resultsMesh.Vertices.Count; + // mesh the new polygon and add it to the resultsMesh + polygonShape.Vertices(1).TriangulateFaces(null, resultsMesh, 0, transformTo0Planes[cutPlane].inverted); + + // TODO: map all the added vertices that can be back to the original polygon positions + // for (int i = preAddCount; i< resultsMesh.Vertices.Count; i++) + { + + } + } + + if (resultsMesh.Faces.Count - faceCountPreAdd > 0) + { + // keep track of the adds so we can process the coplanar faces after + for (int i = faceCountPreAdd; i < resultsMesh.Faces.Count; i++) + { + coPlanarFaces.StoreFaceAdd(planeSorter, cutPlane, mesh1Index, faceIndex, i); + // make sure our added faces are the right direction + if (resultsMesh.Faces[i].normal.Dot(expectedFaceNormal) < 0) + { + resultsMesh.FlipFace(i); + } + } + } + else // we did not add any faces but we will still keep track of this polygons plan + { + coPlanarFaces.StoreFaceAdd(planeSorter, cutPlane, mesh1Index, faceIndex, -1); + } + + ratioCompleted += amountPerOperation; + progressReporter?.Invoke(ratioCompleted, ""); + + if (cancellationToken.IsCancellationRequested) + { + return null; + } + } + } + + // handle the co-planar faces + ProcessCoplanarFaces(operation, resultsMesh, coPlanarFaces); + + resultsMesh.CleanAndMerge(); + return resultsMesh; + } + + private void ProcessCoplanarFaces(CsgModes operation, Mesh resultsMesh, CoPlanarFaces coPlanarFaces) + { + var faceIndicesToRemove = new HashSet(); + foreach (var plane in coPlanarFaces.Planes) + { + var meshIndices = coPlanarFaces.MeshIndicesForPlane(plane); + if (meshIndices.Count() > 1) + { + // check if more than one mesh has this polygons on this plan + var flattenedMatrix = transformTo0Planes[plane].matrix; + + // depending on the operation add or remove polygons that are planar + switch (operation) + { + case CsgModes.Union: + coPlanarFaces.UnionFaces(plane, transformedMeshes, resultsMesh, flattenedMatrix); + break; + + case CsgModes.Subtract: + coPlanarFaces.SubtractFaces(plane, transformedMeshes, resultsMesh, flattenedMatrix, faceIndicesToRemove); + break; + + case CsgModes.Intersect: + coPlanarFaces.IntersectFaces(plane, transformedMeshes, resultsMesh, flattenedMatrix, faceIndicesToRemove); + break; + } + + } + } + + // now rebuild the face list without the remove polygons + if (faceIndicesToRemove.Count > 0) + { + var newFaces = new FaceList(); + for (int i = 0; i < resultsMesh.Faces.Count; i++) + { + // if the face is NOT in the remove faces + if (!faceIndicesToRemove.Contains(i)) + { + var face = resultsMesh.Faces[i]; + newFaces.Add(face); + } + } + + resultsMesh.Faces = newFaces; + } + } + } +} \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Obsolete/CombineObject3D.cs b/MatterControlLib/DesignTools/Obsolete/CombineObject3D.cs index b96aca191..7589002b1 100644 --- a/MatterControlLib/DesignTools/Obsolete/CombineObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/CombineObject3D.cs @@ -125,7 +125,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D var totalOperations = participants.Count() - 1; double amountPerOperation = 1.0 / totalOperations; - double percentCompleted = 0; + double ratioCompleted = 0; ProgressStatus progressStatus = new ProgressStatus(); foreach (var item in participants) @@ -136,13 +136,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D item.WorldMatrix(), first.Mesh, first.WorldMatrix(), - BooleanProcessing.CsgModes.Union, - BooleanProcessing.ProcessingModes.Polygons, - BooleanProcessing.ProcessingResolution._64, - BooleanProcessing.ProcessingResolution._64, + CsgModes.Union, + ProcessingModes.Polygons, + ProcessingResolution._64, + ProcessingResolution._64, reporter, amountPerOperation, - percentCompleted, + ratioCompleted, progressStatus, cancellationToken); @@ -154,8 +154,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D first.Mesh = result; } - percentCompleted += amountPerOperation; - progressStatus.Progress0To1 = percentCompleted; + ratioCompleted += amountPerOperation; + progressStatus.Progress0To1 = ratioCompleted; reporter?.Report(progressStatus); } } diff --git a/MatterControlLib/DesignTools/Obsolete/IntersectionObject3D.cs b/MatterControlLib/DesignTools/Obsolete/IntersectionObject3D.cs index 93bd67b9c..0dbb02384 100644 --- a/MatterControlLib/DesignTools/Obsolete/IntersectionObject3D.cs +++ b/MatterControlLib/DesignTools/Obsolete/IntersectionObject3D.cs @@ -111,7 +111,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D var totalOperations = participants.Count() - 1; double amountPerOperation = 1.0 / totalOperations; - double percentCompleted = 0; + double ratioCompleted = 0; ProgressStatus progressStatus = new ProgressStatus(); foreach (var remove in participants) @@ -122,13 +122,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D remove.WorldMatrix(), first.Mesh, first.WorldMatrix(), - BooleanProcessing.CsgModes.Intersect, - BooleanProcessing.ProcessingModes.Polygons, - BooleanProcessing.ProcessingResolution._64, - BooleanProcessing.ProcessingResolution._64, + CsgModes.Intersect, + ProcessingModes.Polygons, + ProcessingResolution._64, + ProcessingResolution._64, reporter, amountPerOperation, - percentCompleted, + ratioCompleted, progressStatus, cancellationToken); @@ -141,8 +141,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D } remove.Visible = false; - percentCompleted += amountPerOperation; - progressStatus.Progress0To1 = percentCompleted; + ratioCompleted += amountPerOperation; + progressStatus.Progress0To1 = ratioCompleted; reporter.Report(progressStatus); } } diff --git a/MatterControlLib/DesignTools/Operations/Path/MergePathObject3D.cs b/MatterControlLib/DesignTools/Operations/Path/MergePathObject3D.cs index 168325245..30a503bdd 100644 --- a/MatterControlLib/DesignTools/Operations/Path/MergePathObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/Path/MergePathObject3D.cs @@ -132,7 +132,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations var totalOperations = participants.Count() - 1; double amountPerOperation = 1.0 / totalOperations; - double percentCompleted = 0; + double ratioCompleted = 0; var progressStatus = new ProgressStatus(); foreach (var item in participants) @@ -144,8 +144,8 @@ namespace MatterHackers.MatterControl.DesignTools.Operations resultsVertexSource = resultsVertexSource.MergePaths(itemVertexSource, clipType); - percentCompleted += amountPerOperation; - progressStatus.Progress0To1 = percentCompleted; + ratioCompleted += amountPerOperation; + progressStatus.Progress0To1 = ratioCompleted; reporter?.Report(progressStatus); } } diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/CombineObject3D_2.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/CombineObject3D_2.cs index 9e3b1f12d..4b0a7219d 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/CombineObject3D_2.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/CombineObject3D_2.cs @@ -52,21 +52,21 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D } #if DEBUG - public BooleanProcessing.ProcessingModes Processing { get; set; } = BooleanProcessing.ProcessingModes.Polygons; + public ProcessingModes Processing { get; set; } = ProcessingModes.Polygons; [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] - public BooleanProcessing.ProcessingResolution OutputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; + public ProcessingResolution OutputResolution { get; set; } = ProcessingResolution._64; [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] - public BooleanProcessing.IplicitSurfaceMethod MeshAnalysis { get; set; } + public IplicitSurfaceMethod MeshAnalysis { get; set; } [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] - public BooleanProcessing.ProcessingResolution InputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; + public ProcessingResolution InputResolution { get; set; } = ProcessingResolution._64; #else - private BooleanProcessing.ProcessingModes Processing { get; set; } = BooleanProcessing.ProcessingModes.Polygons; - private BooleanProcessing.ProcessingResolution OutputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; - private BooleanProcessing.IplicitSurfaceMethod MeshAnalysis { get; set; } - private BooleanProcessing.ProcessingResolution InputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; + private ProcessingModes Processing { get; set; } = ProcessingModes.Polygons; + private ProcessingResolution OutputResolution { get; set; } = ProcessingResolution._64; + private IplicitSurfaceMethod MeshAnalysis { get; set; } + private ProcessingResolution InputResolution { get; set; } = ProcessingResolution._64; #endif public override Task Rebuild() { @@ -127,7 +127,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D var items = participants.Select(i => (i.Mesh, i.WorldMatrix(SourceContainer))); #if false var resultsMesh = BooleanProcessing.DoArray(items, - BooleanProcessing.CsgModes.Union, + CsgModes.Union, Processing, InputResolution, OutputResolution, @@ -136,7 +136,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D #else var totalOperations = items.Count() - 1; double amountPerOperation = 1.0 / totalOperations; - double percentCompleted = 0; + double ratioCompleted = 0; var progressStatus = new ProgressStatus(); @@ -158,14 +158,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D next.Item1, next.Item2, // operation type - BooleanProcessing.CsgModes.Union, + CsgModes.Union, Processing, InputResolution, OutputResolution, // reporting reporter, amountPerOperation, - percentCompleted, + ratioCompleted, progressStatus, cancellationToken); @@ -173,8 +173,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D keepWorldMatrix = Matrix4X4.Identity; // report our progress - percentCompleted += amountPerOperation; - progressStatus.Progress0To1 = percentCompleted; + ratioCompleted += amountPerOperation; + progressStatus.Progress0To1 = ratioCompleted; reporter?.Report(progressStatus); } #endif @@ -193,7 +193,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D private bool ProcessPolygons { - get => Processing == BooleanProcessing.ProcessingModes.Polygons || Processing == BooleanProcessing.ProcessingModes.libigl; + get => Processing == ProcessingModes.Polygons || Processing == ProcessingModes.libigl; } public void UpdateControls(PublicPropertyChange change) @@ -201,7 +201,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D change.SetRowVisible(nameof(InputResolution), () => !ProcessPolygons); change.SetRowVisible(nameof(OutputResolution), () => !ProcessPolygons); change.SetRowVisible(nameof(MeshAnalysis), () => !ProcessPolygons); - change.SetRowVisible(nameof(InputResolution), () => !ProcessPolygons && MeshAnalysis == BooleanProcessing.IplicitSurfaceMethod.Grid); + change.SetRowVisible(nameof(InputResolution), () => !ProcessPolygons && MeshAnalysis == IplicitSurfaceMethod.Grid); } } } diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/IntersectionObject3D_2.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/IntersectionObject3D_2.cs index c8adc6a97..4570d260e 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/IntersectionObject3D_2.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/IntersectionObject3D_2.cs @@ -51,21 +51,21 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D } #if DEBUG - public BooleanProcessing.ProcessingModes Processing { get; set; } = BooleanProcessing.ProcessingModes.Polygons; + public ProcessingModes Processing { get; set; } = ProcessingModes.Polygons; [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] - public BooleanProcessing.ProcessingResolution OutputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; + public ProcessingResolution OutputResolution { get; set; } = ProcessingResolution._64; [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] - public BooleanProcessing.IplicitSurfaceMethod MeshAnalysis { get; set; } + public IplicitSurfaceMethod MeshAnalysis { get; set; } [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] - public BooleanProcessing.ProcessingResolution InputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; + public ProcessingResolution InputResolution { get; set; } = ProcessingResolution._64; #else - private BooleanProcessing.ProcessingModes Processing { get; set; } = BooleanProcessing.ProcessingModes.Polygons; - private BooleanProcessing.ProcessingResolution OutputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; - private BooleanProcessing.IplicitSurfaceMethod MeshAnalysis { get; set; } - private BooleanProcessing.ProcessingResolution InputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; + private ProcessingModes Processing { get; set; } = ProcessingModes.Polygons; + private ProcessingResolution OutputResolution { get; set; } = ProcessingResolution._64; + private IplicitSurfaceMethod MeshAnalysis { get; set; } + private ProcessingResolution InputResolution { get; set; } = ProcessingResolution._64; #endif public override Task Rebuild() @@ -127,7 +127,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D var items = participants.Select(i => (i.Mesh, i.WorldMatrix(SourceContainer))); #if false var resultsMesh = BooleanProcessing.DoArray(items, - BooleanProcessing.CsgModes.Intersect, + CsgModes.Intersect, Processing, InputResolution, OutputResolution, @@ -136,7 +136,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D #else var totalOperations = items.Count() - 1; double amountPerOperation = 1.0 / totalOperations; - double percentCompleted = 0; + double ratioCompleted = 0; var progressStatus = new ProgressStatus(); @@ -158,14 +158,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D next.Item1, next.Item2, // operation type - BooleanProcessing.CsgModes.Intersect, + CsgModes.Intersect, Processing, InputResolution, OutputResolution, // reporting reporter, amountPerOperation, - percentCompleted, + ratioCompleted, progressStatus, cancellationToken); @@ -173,8 +173,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D keepWorldMatrix = Matrix4X4.Identity; // report our progress - percentCompleted += amountPerOperation; - progressStatus.Progress0To1 = percentCompleted; + ratioCompleted += amountPerOperation; + progressStatus.Progress0To1 = ratioCompleted; reporter?.Report(progressStatus); } #endif @@ -193,7 +193,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D private bool ProcessPolygons { - get => Processing == BooleanProcessing.ProcessingModes.Polygons || Processing == BooleanProcessing.ProcessingModes.libigl; + get => Processing == ProcessingModes.Polygons || Processing == ProcessingModes.libigl; } public void UpdateControls(PublicPropertyChange change) @@ -201,7 +201,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D change.SetRowVisible(nameof(InputResolution), () => !ProcessPolygons); change.SetRowVisible(nameof(OutputResolution), () => !ProcessPolygons); change.SetRowVisible(nameof(MeshAnalysis), () => !ProcessPolygons); - change.SetRowVisible(nameof(InputResolution), () => !ProcessPolygons && MeshAnalysis == BooleanProcessing.IplicitSurfaceMethod.Grid); + change.SetRowVisible(nameof(InputResolution), () => !ProcessPolygons && MeshAnalysis == IplicitSurfaceMethod.Grid); } } } diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractAndReplaceObject3D.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractAndReplaceObject3D.cs index 44d5fcb9e..177f2d148 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractAndReplaceObject3D.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractAndReplaceObject3D.cs @@ -104,7 +104,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D { var totalOperations = paintObjects.Count * keepObjects.Count; double amountPerOperation = 1.0 / totalOperations; - double percentCompleted = 0; + double ratioCompleted = 0; foreach (var paint in paintObjects.Select((r) => (obj3D: r, matrix: r.WorldMatrix())).ToList()) { @@ -124,13 +124,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D keep.matrix, paint.obj3D.Mesh, paint.matrix, - BooleanProcessing.CsgModes.Subtract, - BooleanProcessing.ProcessingModes.Polygons, - BooleanProcessing.ProcessingResolution._64, - BooleanProcessing.ProcessingResolution._64, + CsgModes.Subtract, + ProcessingModes.Polygons, + ProcessingResolution._64, + ProcessingResolution._64, reporter, amountPerOperation, - percentCompleted, + ratioCompleted, progressStatus, cancellationToken); @@ -138,13 +138,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D keep.matrix, paint.obj3D.Mesh, paint.matrix, - BooleanProcessing.CsgModes.Intersect, - BooleanProcessing.ProcessingModes.Polygons, - BooleanProcessing.ProcessingResolution._64, - BooleanProcessing.ProcessingResolution._64, + CsgModes.Intersect, + ProcessingModes.Polygons, + ProcessingResolution._64, + ProcessingResolution._64, reporter, amountPerOperation, - percentCompleted, + ratioCompleted, progressStatus, cancellationToken); @@ -166,13 +166,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D Matrix4X4.Identity, intersect, Matrix4X4.Identity, - BooleanProcessing.CsgModes.Subtract, - BooleanProcessing.ProcessingModes.Polygons, - BooleanProcessing.ProcessingResolution._64, - BooleanProcessing.ProcessingResolution._64, + CsgModes.Subtract, + ProcessingModes.Polygons, + ProcessingResolution._64, + ProcessingResolution._64, reporter, amountPerOperation, - percentCompleted, + ratioCompleted, progressStatus, cancellationToken); } diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractAndReplaceObject3D_2.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractAndReplaceObject3D_2.cs index 31971a59a..cb6127745 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractAndReplaceObject3D_2.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractAndReplaceObject3D_2.cs @@ -65,21 +65,21 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D public SelectedChildren SelectedChildren { get; set; } = new SelectedChildren(); #if DEBUG - public BooleanProcessing.ProcessingModes Processing { get; set; } = BooleanProcessing.ProcessingModes.Polygons; + public ProcessingModes Processing { get; set; } = ProcessingModes.Polygons; [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] - public BooleanProcessing.ProcessingResolution OutputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; + public ProcessingResolution OutputResolution { get; set; } = ProcessingResolution._64; [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] - public BooleanProcessing.IplicitSurfaceMethod MeshAnalysis { get; set; } + public IplicitSurfaceMethod MeshAnalysis { get; set; } [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] - public BooleanProcessing.ProcessingResolution InputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; + public ProcessingResolution InputResolution { get; set; } = ProcessingResolution._64; #else - private BooleanProcessing.ProcessingModes Processing { get; set; } = BooleanProcessing.ProcessingModes.Polygons; - private BooleanProcessing.ProcessingResolution OutputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; - private BooleanProcessing.IplicitSurfaceMethod MeshAnalysis { get; set; } - private BooleanProcessing.ProcessingResolution InputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; + private ProcessingModes Processing { get; set; } = ProcessingModes.Polygons; + private ProcessingResolution OutputResolution { get; set; } = ProcessingResolution._64; + private IplicitSurfaceMethod MeshAnalysis { get; set; } + private ProcessingResolution InputResolution { get; set; } = ProcessingResolution._64; #endif public void AddEditorTransparents(Object3DControlsLayer layer, List transparentMeshes, DrawEventArgs e) @@ -204,7 +204,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D { var totalOperations = paintObjects.Count * keepVisibleItems.Count; double amountPerOperation = 1.0 / totalOperations; - double percentCompleted = 0; + double ratioCompleted = 0; var progressStatus = new ProgressStatus { @@ -231,14 +231,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D paint.Mesh, paint.WorldMatrix(SourceContainer), // operation type - BooleanProcessing.CsgModes.Intersect, + CsgModes.Intersect, Processing, InputResolution, OutputResolution, // reporting data reporter, amountPerOperation, - percentCompleted, + ratioCompleted, progressStatus, cancellationToken); @@ -248,14 +248,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D paint.Mesh, paint.WorldMatrix(SourceContainer), // operation type - BooleanProcessing.CsgModes.Subtract, + CsgModes.Subtract, Processing, InputResolution, OutputResolution, // reporting data reporter, amountPerOperation, - percentCompleted, + ratioCompleted, progressStatus, cancellationToken); @@ -275,8 +275,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D this.Children.Add(paintResultsItem); // report our progress - percentCompleted += amountPerOperation; - progressStatus.Progress0To1 = percentCompleted; + ratioCompleted += amountPerOperation; + progressStatus.Progress0To1 = ratioCompleted; reporter?.Report(progressStatus); } @@ -304,7 +304,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D private bool ProcessPolygons { - get => Processing == BooleanProcessing.ProcessingModes.Polygons || Processing == BooleanProcessing.ProcessingModes.libigl; + get => Processing == ProcessingModes.Polygons || Processing == ProcessingModes.libigl; } public void UpdateControls(PublicPropertyChange change) @@ -312,7 +312,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D change.SetRowVisible(nameof(InputResolution), () => !ProcessPolygons); change.SetRowVisible(nameof(OutputResolution), () => !ProcessPolygons); change.SetRowVisible(nameof(MeshAnalysis), () => !ProcessPolygons); - change.SetRowVisible(nameof(InputResolution), () => !ProcessPolygons && MeshAnalysis == BooleanProcessing.IplicitSurfaceMethod.Grid); + change.SetRowVisible(nameof(InputResolution), () => !ProcessPolygons && MeshAnalysis == IplicitSurfaceMethod.Grid); } } } \ No newline at end of file diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D.cs index fca8a11a7..3b164762d 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D.cs @@ -146,7 +146,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D { var totalOperations = removeObjects.Count * keepObjects.Count; double amountPerOperation = 1.0 / totalOperations; - double percentCompleted = 0; + double ratioCompleted = 0; ProgressStatus progressStatus = new ProgressStatus(); foreach (var remove in removeObjects.Select((r) => (obj3D: r, matrix: r.WorldMatrix())).ToList()) @@ -165,13 +165,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D keep.matrix, remove.obj3D.Mesh, remove.matrix, - BooleanProcessing.CsgModes.Subtract, - BooleanProcessing.ProcessingModes.Polygons, - BooleanProcessing.ProcessingResolution._64, - BooleanProcessing.ProcessingResolution._64, + CsgModes.Subtract, + ProcessingModes.Polygons, + ProcessingResolution._64, + ProcessingResolution._64, reporter, amountPerOperation, - percentCompleted, + ratioCompleted, progressStatus, cancellationToken); var inverse = keep.matrix.Inverted; @@ -182,8 +182,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D keep.obj3D.Mesh = result; } - percentCompleted += amountPerOperation; - progressStatus.Progress0To1 = percentCompleted; + ratioCompleted += amountPerOperation; + progressStatus.Progress0To1 = ratioCompleted; reporter?.Report(progressStatus); } diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D_2.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D_2.cs index aa12a76e5..3a9830c37 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D_2.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractObject3D_2.cs @@ -57,21 +57,21 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D public SelectedChildren SelectedChildren { get; set; } = new SelectedChildren(); #if DEBUG - public BooleanProcessing.ProcessingModes Processing { get; set; } = BooleanProcessing.ProcessingModes.Polygons; + public ProcessingModes Processing { get; set; } = ProcessingModes.Polygons; [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] - public BooleanProcessing.ProcessingResolution OutputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; + public ProcessingResolution OutputResolution { get; set; } = ProcessingResolution._64; [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] - public BooleanProcessing.IplicitSurfaceMethod MeshAnalysis { get; set; } + public IplicitSurfaceMethod MeshAnalysis { get; set; } [EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)] - public BooleanProcessing.ProcessingResolution InputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; + public ProcessingResolution InputResolution { get; set; } = ProcessingResolution._64; #else - private BooleanProcessing.ProcessingModes Processing { get; set; } = BooleanProcessing.ProcessingModes.Polygons; - private BooleanProcessing.ProcessingResolution OutputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; - private BooleanProcessing.IplicitSurfaceMethod MeshAnalysis { get; set; } - private BooleanProcessing.ProcessingResolution InputResolution { get; set; } = BooleanProcessing.ProcessingResolution._64; + private ProcessingModes Processing { get; set; } = ProcessingModes.Polygons; + private ProcessingResolution OutputResolution { get; set; } = ProcessingResolution._64; + private IplicitSurfaceMethod MeshAnalysis { get; set; } + private ProcessingResolution InputResolution { get; set; } = ProcessingResolution._64; #endif public bool RemoveSubtractObjects { get; set; } = true; @@ -209,7 +209,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D var items = removeVisibleItems.Select(i => (i.Mesh, i.WorldMatrix(SourceContainer))).ToList(); items.Insert(0, (keep.Mesh, keep.Matrix)); var resultsMesh = BooleanProcessing.DoArray(items, - BooleanProcessing.CsgModes.Subtract, + CsgModes.Subtract, Processing, InputResolution, OutputResolution, @@ -218,7 +218,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D #else var totalOperations = removeVisibleItems.Count * keepVisibleItems.Count; double amountPerOperation = 1.0 / totalOperations; - double percentCompleted = 0; + double ratioCompleted = 0; var progressStatus = new ProgressStatus { @@ -236,14 +236,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D remove.Mesh, remove.WorldMatrix(SourceContainer), // operation type - BooleanProcessing.CsgModes.Subtract, + CsgModes.Subtract, Processing, InputResolution, OutputResolution, // reporting reporter, amountPerOperation, - percentCompleted, + ratioCompleted, progressStatus, cancellationToken); @@ -251,8 +251,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D keepWorldMatrix = Matrix4X4.Identity; // report our progress - percentCompleted += amountPerOperation; - progressStatus.Progress0To1 = percentCompleted; + ratioCompleted += amountPerOperation; + progressStatus.Progress0To1 = ratioCompleted; reporter?.Report(progressStatus); } @@ -325,7 +325,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D private bool ProcessPolygons { - get => Processing == BooleanProcessing.ProcessingModes.Polygons || Processing == BooleanProcessing.ProcessingModes.libigl; + get => Processing == ProcessingModes.Polygons || Processing == ProcessingModes.libigl; } public void UpdateControls(PublicPropertyChange change) @@ -333,7 +333,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D change.SetRowVisible(nameof(InputResolution), () => !ProcessPolygons); change.SetRowVisible(nameof(OutputResolution), () => !ProcessPolygons); change.SetRowVisible(nameof(MeshAnalysis), () => !ProcessPolygons); - change.SetRowVisible(nameof(InputResolution), () => !ProcessPolygons && MeshAnalysis == BooleanProcessing.IplicitSurfaceMethod.Grid); + change.SetRowVisible(nameof(InputResolution), () => !ProcessPolygons && MeshAnalysis == IplicitSurfaceMethod.Grid); } } } \ No newline at end of file diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractPathObject3D.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractPathObject3D.cs index e8921d0cd..cbdbc8f50 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractPathObject3D.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/SubtractPathObject3D.cs @@ -181,7 +181,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D { var totalOperations = removeVisibleItems.Count * keepVisibleItems.Count; double amountPerOperation = 1.0 / totalOperations; - double percentCompleted = 0; + double ratioCompleted = 0; var progressStatus = new ProgressStatus { @@ -198,8 +198,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D resultsVertexSource = resultsVertexSource.MergePaths(((IPathObject)remove).VertexSource.Transform(remove.Matrix), ClipperLib.ClipType.ctDifference); // report our progress - percentCompleted += amountPerOperation; - progressStatus.Progress0To1 = percentCompleted; + ratioCompleted += amountPerOperation; + progressStatus.Progress0To1 = ratioCompleted; reporter?.Report(progressStatus); }