예제 #1
0
        private static void MendHole(Hole hole, HoleFixer holeFixer)
        {
            Console.WriteLine("Choose:");
            Console.WriteLine("(1) Mend hole by default weight function (excellent) ");
            Console.WriteLine("(2) Mend hole by average approximation (very poor) ");
            Console.WriteLine("(3) Mend hole by gradient approximation (poor) ");
            Console.WriteLine("(4) Mend hole by spiral 8-connected approximation (good) ");

            var choice = Console.ReadLine();

            try
            {
                if (choice == "1")
                {
                    Console.WriteLine("Choose:");
                    Console.WriteLine("(U)se default parameters (z = 5, eps = 0.0001)");
                    Console.WriteLine("(C)hange parameters");
                    var wChoice = Console.ReadLine().ToUpper();
                    if (wChoice == "U")
                    {
                        holeFixer.FillHoleWithWeightFunction(hole);
                    }
                    else if (wChoice == "C")
                    {
                        var weightFunction = TweakWeightFunction();
                        holeFixer.FillHoleWithWeightFunction(hole, weightFunction);
                    }
                    else
                    {
                        Console.WriteLine("Wrong input");
                        return;
                    }
                }
                else if (choice == "2")
                {
                    holeFixer.FillHoleApproximateAverage(hole);
                }
                else if (choice == "3")
                {
                    holeFixer.FillHoleApproximateGradient(hole);
                }
                else if (choice == "4")
                {
                    holeFixer.FillHoleApproximateConnected(hole);
                }
                else
                {
                    Console.WriteLine("Wrong input");
                    return;
                }

                Console.WriteLine("Hole mended successfully");
            }
            catch (Exception exception)
            {
                Debug.WriteLine(exception.ToString());
                Console.WriteLine("Something went wrong... Please try again");
            }
        }
예제 #2
0
    private static void createPatches(Vector3[] points, string filename)
    {
        Console.WriteLine("Fixing holes...");
        var fileWriter = new XYZFileWriter(filename, append: true);
        var holeFixer  = new HoleFixer(points);

        var edgePoints = holeFixer.GetEdgePoints();

        foreach (var point in holeFixer.CreatePatches(edgePoints))
        {
            fileWriter.Write(point);
        }
        fileWriter.Close();
    }
예제 #3
0
        private static void Load(ref ImageHandler imgHandler, ref HoleFinder holeFinder, ref HoleFixer holeFixer)
        {
            Console.WriteLine("Please enter a valid path to an image");
            var path = Console.ReadLine();

            if (File.Exists(path))
            {
                imgHandler = new ImageHandler(path);
                holeFinder = new HoleFinder(imgHandler.Matrix);
                holeFixer  = new HoleFixer(imgHandler.Matrix);
                Console.WriteLine("Image was successfully loaded.");
            }
            else
            {
                Console.WriteLine("Image wasn't found, please try again.");
            }
        }
예제 #4
0
    private static void fix(string inputFile, string outputFile, string heightmapFile)
    {
        Console.WriteLine("Reading input file... ");

        var points = XYZFile.Read(inputFile);

        Console.WriteLine("Fixing holes... ");
        var holeFixer = new HoleFixer(points);

        var edgePoints = holeFixer.GetEdgePoints().ToArray();
        var patches    = holeFixer.CreatePatches(edgePoints).ToArray();

        points = patches.Concat(points).ToArray();

        Console.WriteLine("Writing output files... ");
        XYZFile.Write(outputFile, points);

        var pointHashSet = new PointHashSet(1d, points);

        XYZFile.Write(heightmapFile, pointHashSet.GetHeightMap(), pointHashSet.GetHeightMapNormals());

        Console.WriteLine("Complete.");
    }
예제 #5
0
        static void Main(string[] args)
        {
            ImageHandler imgHandler = null;
            HoleFinder   holeFinder = null;
            HoleFixer    holeFixer  = null;

            string key = "";

            while (key != "q")
            {
                Console.WriteLine("Please choose what to do:");
                Console.WriteLine(" (L)oad an image ");
                if (imgHandler != null)
                {
                    Console.WriteLine(" (E)nter a hole location ");
                }
                if (imgHandler?.Matrix.IsHoled == true)
                {
                    Console.WriteLine(" (F)ind hole ");
                }
                if (holeFinder?.Hole != null)
                {
                    Console.WriteLine(" (M)end hole ");
                }
                if (imgHandler != null)
                {
                    Console.WriteLine(" (S)ave the image ");
                }
                Console.WriteLine(" (Q)uit ");

                key = Console.ReadLine();

                switch (key.ToUpper())
                {
                case "L":
                    Load(ref imgHandler, ref holeFinder, ref holeFixer);
                    break;

                case "E":
                    if (imgHandler != null)
                    {
                        EnterHole(imgHandler);
                    }
                    break;

                case "F":
                    if (imgHandler?.Matrix.IsHoled == true)
                    {
                        FindHole(holeFinder);
                    }
                    break;

                case "M":
                    if (imgHandler?.Matrix.IsHoled == true && holeFinder?.Hole != null)
                    {
                        MendHole(holeFinder.Hole, holeFixer);
                        holeFinder.FindHole();     // will set Hole to null if no hole found
                    }
                    break;

                case "S":
                    if (imgHandler != null)
                    {
                        SaveImage(imgHandler);
                    }
                    break;

                case "Q":
                    return;

                default:
                    Console.WriteLine("No such function; Please choose again");
                    break;
                }
                Console.WriteLine();
                Console.WriteLine("***************");
            }
        }