예제 #1
0
 private static void RunRenders(TimeReportCollection <Algo> algos, TimeReportCollection <AlgoStep> steps)
 {
     foreach (var algo in algos)
     {
         foreach (var step in steps)
         {
             var filename         = $"{algo.ao.name}_{step.qualityStr}";
             var outputPath       = Path(Subfolder.meshes, filename, Ext.obj);
             var renderOutputPath = Path(Subfolder.renders, filename, Ext.png);
             BlenderWorkspace.Instance.RenderToImage(outputPath, renderOutputPath, step.quality <= 0.05);
         }
     }
 }
예제 #2
0
 private static void RunSimplification(TimeReportCollection <Algo> algos, TimeReportCollection <AlgoStep> steps)
 {
     foreach (var algo in algos)
     {
         var logFile = Path(Subfolder.meshes, algo.ao.name, Ext.txt);
         if (File.Exists(logFile))
         {
             File.Delete(logFile);
         }
         foreach (var step in steps)
         {
             var       outputPath    = Path(Subfolder.meshes, $"{algo.ao.name}_{step.qualityStr}", algo.ext);
             var       outputPathTxt = Path(Subfolder.logs, $"{algo.ao.name}_{step.qualityStr}", Ext.txt);
             var       inputPath     = Path(Subfolder.none, originalModelName, algo.ext);
             Stopwatch sw            = Stopwatch.StartNew();
             algo.Run(step, inputPath, outputPath);
             File.WriteAllText(outputPathTxt, sw.ElapsedMilliseconds.ToString());
             //File.AppendAllText(logFile, $"{step.quality.Sanitize()} {step.StopTimer()}\n");
         }
     }
 }
예제 #3
0
        private static void RunOutputUnifier(TimeReportCollection <Algo> algos, TimeReportCollection <AlgoStep> steps)
        {
            var acceptableExt = Ext.obj;

            foreach (var algo in algos)
            {
                foreach (var step in steps)
                {
                    var ext = algo.ext;
                    if (ext != acceptableExt)
                    {
                        var inputPath  = Path(Subfolder.meshes, $"{algo.ao.name}_{step.qualityStr}", algo.ext);
                        var outputPath = Path(Subfolder.meshes, $"{algo.ao.name}_{step.qualityStr}", acceptableExt);
                        MeshlabWorkspace.Instance.CleanConvert(inputPath, outputPath);

                        if (File.Exists(inputPath))
                        {
                            File.Delete(inputPath);
                        }
                    }
                }
            }
        }
예제 #4
0
        private static void RunMyAlgos(string inputFile, bool generateBlender)
        {
            Logger.Write("Enter name:");
            InputFilename = Console.ReadLine();
            PlaySound(1, SystemSounds.Hand);
            if (!Regex.IsMatch(InputFilename, @"^\w+$"))
            {
                Logger.WriteLine("Wrong input");
                return;
            }

            var v = System.Configuration.ConfigurationSettings.AppSettings["verbose"];

            bool.TryParse(v, out Cli.verbose);

            WorkingDir = $@"{Environment.CurrentDirectory}\mc_output\{InputFilename}";
            var qualitySteps = new List <float> {
                0.5f, 0.25f, 0.1f, 0.05f, 0.02f, 0.01f
            };

            qualitySteps.Reverse();
            //create an obj copys
            var inputObjPath = Path(Subfolder.none, originalModelName, Ext.obj);
            var inputOffPath = Path(Subfolder.none, originalModelName, Ext.off);
            var inputStlPath = Path(Subfolder.none, originalModelName, Ext.stl);
            var inputPlyPath = Path(Subfolder.none, originalModelName, Ext.ply);
            var cleanLog     = Path(Subfolder.none, "logfile_meshlab_clean", Ext.txt);
            var allAlgos     = InitializeAlgosAndWorkspaces();

            if (!File.Exists(inputObjPath) || !File.Exists(cleanLog))
            {
                MeshlabWorkspace.Instance.CleanConvert(inputFile, inputObjPath, cleanLog);
            }

            if (generateBlender)
            {
                //generate images for original model
                BlenderWorkspace.Instance.RenderToImage(inputObjPath, Path(Subfolder.none, originalModelName, Ext.png));
                return;
            }

            if (!File.Exists(inputStlPath))
            {
                MeshlabWorkspace.Instance.Run($"-i {inputObjPath} -o {inputStlPath}");
            }
            if (!File.Exists(inputOffPath))
            {
                MeshlabWorkspace.Instance.Run($"-i {inputObjPath} -o {inputOffPath}");
            }
            if (!File.Exists(inputPlyPath))
            {
                MeshlabWorkspace.Instance.Run($"-i {inputObjPath} -o {inputPlyPath}");
            }

            List <AlgoStep> steps = GetSteps(qualitySteps, cleanLog);

            var algosToRun      = new TimeReportCollection <Algo>(GetUsersChoice(allAlgos, "programs"));
            var operationsToRun = GetUsersChoice(DeclareOperations(), "operations");

            foreach (var item in operationsToRun)
            {
                Logger.WriteLine($"------------------------\nPerforming: {item.desc}\n------------------------");
                item.algosStepsDel(algosToRun, new TimeReportCollection <AlgoStep>(steps));
            }


            Logger.WriteLine("Finished");
            PlaySound(3, SystemSounds.Exclamation);
        }
예제 #5
0
        private static void RunData(TimeReportCollection <Algo> algos, TimeReportCollection <AlgoStep> steps)
        {
            var tablesPath = Path(Subfolder.data, "table", Ext.tex);

            foreach (var item in Directory.GetFiles($"{WorkingDir}\\{Subfolder.data}"))
            {
                File.Delete(item);
            }

            var    algosArray = algos.ToArray();
            string legend     = "\\legend{";

            for (int i = 0; i < algosArray.Length; i++)
            {
                Algo alg = algosArray[i];
                if (i > 0)
                {
                    legend += ",";
                }
                legend += alg.ao.name;
            }
            legend += "}";

            var plotPaths = new HashSet <string>();

            foreach (var algo in algos)
            {
                foreach (var step in steps)
                {
                    var outputPath    = Path(Subfolder.meshes, $"{algo.ao.name}_{step.qualityStr}", Ext.obj);
                    var outputPathTxt = Path(Subfolder.logs, $"{algo.ao.name}_{step.qualityStr}", Ext.txt);
                    var inputPath     = Path(Subfolder.none, originalModelName, algo.ext);
                    algo.ComputeResults(step, inputPath, outputPath, outputPathTxt);
                }

                //convert to csv and and latexv
                //string hausdorffLogFileName = $"results_hausdorff_{algo.ao.name}";
                //var csvPath = Path(Subfolder.data, hausdorffLogFileName, Ext.csv);
                //var texPath = Path(Subfolder.data, hausdorffLogFileName, Ext.tex);
                //save csv and and latex
                //File.AppendAllText(csvPath, algo.results.GetCSVTable());

                var latexTab = algo.results.GetLatexTable(algo.ao.name);
                //File.AppendAllText(texPath, latexTab);
                File.AppendAllText(tablesPath, latexTab);

                var r = algo.PlotResults();
                foreach (Algo.Plot item in r)
                {
                    var plotPath = Path(Subfolder.data, item.name, Ext.tex);
                    if (!plotPaths.Contains(plotPath))
                    {
                        plotPaths.Add(plotPath);
                    }
                    File.AppendAllText(plotPath, item.value);
                }

                var r2 = algo.PlotTimeResults();
                var plotPathTimeResults = Path(Subfolder.data, r2.name, Ext.tex);
                File.AppendAllText(plotPathTimeResults, r2.value);
            }

            foreach (var plotPath in plotPaths)
            {
                File.AppendAllText(plotPath, '\n' + legend);
            }
        }