From 91f0695fa93ca861da37d7c1e205823387bd75d5 Mon Sep 17 00:00:00 2001 From: janper Date: Sat, 24 Apr 2021 21:38:41 +0200 Subject: [PATCH] Slicer less strict to detect inner volume of a mesh --- Components/SliceGeometry.cs | 21 +++++++++++---------- bin/Monoceros.pdb | Bin 439808 -> 439808 bytes 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Components/SliceGeometry.cs b/Components/SliceGeometry.cs index fd32258..2db2963 100644 --- a/Components/SliceGeometry.cs +++ b/Components/SliceGeometry.cs @@ -218,9 +218,9 @@ protected override void SolveInstance(IGH_DataAccess DA) { } private static bool IsOnEdgeUnitized(Point3d geometryPoint) { - return Math.Abs(Math.Abs(geometryPoint.X % 1) - 0.5) <= RhinoMath.SqrtEpsilon - || Math.Abs(Math.Abs(geometryPoint.Y % 1) - 0.5) <= RhinoMath.SqrtEpsilon - || Math.Abs(Math.Abs(geometryPoint.Z % 1) - 0.5) <= RhinoMath.SqrtEpsilon; + return Math.Abs(Math.Abs(geometryPoint.X % 1) - 0.5) <= Config.EPSILON + || Math.Abs(Math.Abs(geometryPoint.Y % 1) - 0.5) <= Config.EPSILON + || Math.Abs(Math.Abs(geometryPoint.Z % 1) - 0.5) <= Config.EPSILON; } /// @@ -281,17 +281,18 @@ private static IEnumerable PopulateCurve(double distance, Curve curve) /// entirely inside mesh volume. private static List CentersFromMeshVolume(Mesh mesh) { var pointsInsideMesh = new List(); - var boundingBox = mesh.GetBoundingBox(false); + var boundingBox = mesh.GetBoundingBox(true); var slotInterval = new Interval(-0.5, 0.5); + var plane = Plane.WorldXY; for (var z = Math.Floor(boundingBox.Min.Z - 1); z < Math.Ceiling(boundingBox.Max.Z + 1); z++) { for (var y = Math.Floor(boundingBox.Min.Y - 1); y < Math.Ceiling(boundingBox.Max.Y + 1); y++) { for (var x = Math.Floor(boundingBox.Min.X - 1); x < Math.Ceiling(boundingBox.Max.X + 1); x++) { var testSlotCenter = new Point3d(x, y, z); - var plane = Plane.WorldXY; plane.Origin = testSlotCenter; var box = new Box(plane, slotInterval, slotInterval, slotInterval); var boxPoints = box.GetCorners(); - if (boxPoints.All(point => mesh.IsPointInside(point, RhinoMath.SqrtEpsilon, false))) { + if (boxPoints.All(point => mesh.IsPointInside(point, Config.EPSILON, false) + || point.DistanceTo(mesh.ClosestPoint(point)) < Config.EPSILON)) { pointsInsideMesh.Add(new Point3i(testSlotCenter)); } } @@ -312,15 +313,15 @@ private static List CentersFromMeshVolumeAndSurface(Mesh mesh) { var pointsInsideMesh = new List(); var boundingBox = mesh.GetBoundingBox(false); var slotInterval = new Interval(-0.5, 0.5); + var plane = Plane.WorldXY; for (var z = Math.Floor(boundingBox.Min.Z - 1); z < Math.Ceiling(boundingBox.Max.Z + 1); z++) { for (var y = Math.Floor(boundingBox.Min.Y - 1); y < Math.Ceiling(boundingBox.Max.Y + 1); y++) { for (var x = Math.Floor(boundingBox.Min.X - 1); x < Math.Ceiling(boundingBox.Max.X + 1); x++) { var testSlotCenter = new Point3d(x, y, z); - var plane = Plane.WorldXY; plane.Origin = testSlotCenter; var box = new Box(plane, slotInterval, slotInterval, slotInterval); var boxPoints = box.GetCorners(); - if (boxPoints.Any(point => mesh.IsPointInside(point, Rhino.RhinoMath.SqrtEpsilon, false))) { + if (boxPoints.Any(point => mesh.IsPointInside(point, Config.EPSILON, false) || point.DistanceTo(mesh.ClosestPoint(point)) < Config.EPSILON)) { pointsInsideMesh.Add(new Point3i(testSlotCenter)); } } @@ -340,16 +341,16 @@ private static List CentersFromMeshSurface(Mesh mesh) { var pointsInsideMesh = new List(); var boundingBox = mesh.GetBoundingBox(false); var slotInterval = new Interval(-0.5, 0.5); + var plane = Plane.WorldXY; for (var z = Math.Floor(boundingBox.Min.Z - 1); z < Math.Ceiling(boundingBox.Max.Z + 1); z++) { for (var y = Math.Floor(boundingBox.Min.Y - 1); y < Math.Ceiling(boundingBox.Max.Y + 1); y++) { for (var x = Math.Floor(boundingBox.Min.X - 1); x < Math.Ceiling(boundingBox.Max.X + 1); x++) { var testSlotCenter = new Point3d(x, y, z); - var plane = Plane.WorldXY; plane.Origin = testSlotCenter; var box = new Box(plane, slotInterval, slotInterval, slotInterval); var boxPoints = box.GetCorners(); var boxcornersInside = boxPoints - .Count(point => mesh.IsPointInside(point, RhinoMath.SqrtEpsilon, false)); + .Count(point => mesh.IsPointInside(point, Config.EPSILON, false) || point.DistanceTo(mesh.ClosestPoint(point)) < Config.EPSILON); if (boxcornersInside > 0 && boxcornersInside < 6) { pointsInsideMesh.Add(new Point3i(testSlotCenter)); } diff --git a/bin/Monoceros.pdb b/bin/Monoceros.pdb index 5114ecf5ef9017d2f37a592ec29308e7fd17c0db..a84201cf8b84dbfbd912b6660f990aae1cc6045b 100644 GIT binary patch delta 25835 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

)V?xA% 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 delta 25585 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