Ejemplo n.º 1
0
        internal static void test_MeshMeshCut_CutInSingleTriangle()
        {
            Console.WriteLine($"test_MeshMeshCut_CutInSingleTriangle.");
            var shape = test_Bool.MakeBox(
                center: new Vector3d(5, 5, 0),
                size: new Vector3d(10, 10, 2)
                );
            var tool = test_Bool.MakeBox(
                center: new Vector3d(2.5, 7.5, 1),
                size: new Vector3d(.5, .5, .5)
                );

            MeshTransforms.Translate(shape, new Vector3d(1, 1, 1));
            MeshTransforms.Translate(tool, new Vector3d(1, 1, 1));
            var    error = false;
            DMesh3 ret;

            using (var c = new ConsoleColorController())
            {
                var meshCut = new MeshMeshCut();
                meshCut.Target  = shape;
                meshCut.CutMesh = tool;
                meshCut.Compute();
            }
        }
Ejemplo n.º 2
0
        private static void TestWithCloseNumber(double closeEnough)
        {
            Console.WriteLine($"test_MeshMeshCut_rounding: {closeEnough}");
            var shape = test_Bool.MakeBox(
                center: new Vector3d(0, 0, 0),
                size: new Vector3d(2, 2, 2)
                );
            var tool = test_Bool.MakeBox(
                center: new Vector3d(0, 0, closeEnough),
                size: new Vector3d(1, 1, 1)
                );

            MeshTransforms.Translate(shape, new Vector3d(1, 1, 1));
            MeshTransforms.Translate(tool, new Vector3d(1, 1, 1));
            var    error = false;
            DMesh3 ret;

            using (var c = new ConsoleColorController())
            {
                var meshCut = new MeshMeshCut();
                meshCut.Target  = shape;
                meshCut.CutMesh = tool;
                meshCut.Compute();
                ret = meshCut.Target;

                if (!ret.IsClosed())
                {
                    error = TestUtil.ConsoleError("Mesh is not closed.", ret) || error;
                }
                meshCut.RemoveContained();
                if (ret.IsClosed())
                {
                    error = TestUtil.ConsoleError("Mesh should not be closed.", ret) || error;
                }

                if (ret.BoundaryEdgeIndices().Count() != 8)
                {
                    error = TestUtil.ConsoleError($"Mesh should have 8 open edges. It has {ret.BoundaryEdgeIndices().Count()}.", ret) || error;
                }
            }
            if (!error)
            {
                Console.WriteLine("ok");
            }
        }
Ejemplo n.º 3
0
        internal static void test_cut_overlap_tetra()
        {
            Console.WriteLine($"Testing test_cut_overlap_tetra()");
            var tetra0 = MakeTetra(new Vector3d(0, 0, 0), 2);
            var tetra1 = MakeTetra(new Vector3d(0, 0, 1), 2);

            Stopwatch s = new Stopwatch();

            s.Start();
            var meshCut = new MeshMeshCut();

            meshCut.Target  = tetra0;
            meshCut.CutMesh = tetra1;
            meshCut.Compute();
            var remove = meshCut.GetIntersectionSet(MeshMeshCut.IntersectionSets.InternalPlusShared);

            if (remove.Count() != 3)
            {
                // should be 4, 6, 7
                TestUtil.ConsoleError("unexpected number of triangles to remove.");
                return;
            }

            tetra0          = MakeTetra(new Vector3d(0, 0, 0), 2);
            tetra1          = MakeTetra(new Vector3d(0, 0, 1), 2);
            meshCut         = new MeshMeshCut();
            meshCut.Target  = tetra1; // inverse assignment
            meshCut.CutMesh = tetra0;
            meshCut.Compute();
            // remove = meshCut.GetIntersectionSet(MeshMeshCut.IntersectionSets.ExternalPlusShared);
            remove = meshCut.Remove(MeshMeshCut.IntersectionSets.ExternalPlusShared);
            if (remove.Count() != 9)
            {
                // should be all except id 2
                TestUtil.ConsoleError("unexpected number of triangles to remove.");
                return;
            }

            Console.WriteLine($"Done in {s.ElapsedMilliseconds} ms. ");
            // var outF = TestUtil.WriteTestOutputMesh(meshCut.Target, "test_cut_overlap_tetra.obj");
            // Console.WriteLine($"Written to: {outF}");
        }
Ejemplo n.º 4
0
        internal static void test_cut_contained()
        {
            Console.WriteLine("Testing cut Contained.");
            DMesh3 b1 = TestUtil.LoadTestInputMesh("box1.obj");
            DMesh3 b2 = TestUtil.LoadTestInputMesh("box2.obj");

            Stopwatch s = new Stopwatch();

            s.Start();
            var mBool = new MeshMeshCut();

            mBool.Target  = b1;
            mBool.CutMesh = b2;
            mBool.Compute();
            mBool.RemoveContained();
            Console.WriteLine($"Done in {s.ElapsedMilliseconds} ms. ");
            var outF = TestUtil.WriteTestOutputMesh(mBool.Target, "MeshOps_CutRemoveContained.obj");

            Console.WriteLine($"Written to: {outF}");
        }
Ejemplo n.º 5
0
        internal static void test_cut_forStudy()
        {
            Console.WriteLine("Testing cut coplanar.");
            DMesh3 b1 = TestUtil.LoadTestInputMesh("Tri1.obj");
            DMesh3 b2 = TestUtil.LoadTestInputMesh("Tri2.obj");

            Stopwatch s = new Stopwatch();

            s.Start();
            var meshCut = new MeshMeshCut();

            meshCut.Target  = b1;
            meshCut.CutMesh = b2;
            meshCut.Compute();
            meshCut.RemoveContained();
            Console.WriteLine($"Done in {s.ElapsedMilliseconds} ms. ");
            var outF = TestUtil.WriteTestOutputMesh(meshCut.Target, "MeshOps_CutForStudy.obj");

            Console.WriteLine($"Written to: {outF}");
        }
Ejemplo n.º 6
0
        private static void testCoplanar(bool invert, string outFileName)
        {
            var b1 = test_Bool.MakeBox(
                center: new Vector3d(0, 0, 0),
                size: new Vector3d(1, 1, 1)
                );
            var b2 = test_Bool.MakeBox(
                center: new Vector3d(0, 0, .5),
                size: new Vector3d(1.0, 1.0, 1)
                );

            Stopwatch s = new Stopwatch();

            s.Start();
            var meshCut = new MeshMeshCut();

            meshCut.AttemptPlanarRemoval = true;

            if (invert)
            {
                meshCut.Target  = b2;
                meshCut.CutMesh = b1;
            }
            else
            {
                meshCut.Target  = b1;
                meshCut.CutMesh = b2;
            }


            meshCut.Compute();
            meshCut.RemoveContained();
            Console.WriteLine($"Done in {s.ElapsedMilliseconds} ms. ");
            var outF = TestUtil.WriteTestOutputMesh(meshCut.Target, outFileName);

            Console.WriteLine($"Written to: {outF}");
        }