Beispiel #1
0
        private void Voxelize()
        {
            m_gl.Context.MakeCurrent(null);

            ProgressDialog dialog = new ProgressDialog();

            m_operations.GenerateOccluder(dialog.UpdateProgress, new Action(() => {
                dialog.Invoke(new Action(() =>
                {
                    dialog.CanClose = true;
                    dialog.Close();
                }));
            }));

            dialog.ShowDialog(this);

            m_showOriginalMesh = false;

            m_gl.Refresh();
            m_gl.MakeCurrent();
        }
Beispiel #2
0
        public static void Run(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            ProgramOptions options = new ProgramOptions();

            string            settingPath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "Oxel.Settings.xml");
            VoxelizationInput input       = VoxelizationInput.Load(settingPath);

            if (input == null)
            {
                input = new VoxelizationInput();
            }

            if (args.Contains("-c"))
            {
                // Make sure user can see console output
                AttachConsole(PARENT_PROCESS_ID);

                input.Clone(options);

                if (!CommandLineParser.Parse <ProgramOptions>(args, ref options))
                {
                    return;
                }

                options.Clone(input);
            }
            else
            {
                CommandLineParser.Parse <VoxelizationInput>(args, ref input);
            }

            if (options.UseCommandLine)
            {
                Logger.IsCommandLine = true;

                Operations operations = new Operations();
                operations.Initialize(input);
                operations.Open(options.InputMesh, input.WindingOrder);
                WaitHandle waitHandle = operations.GenerateOccluder((VoxelizationProgress vp) => {
                    string coverage =
                        String.Format("Volume Coverage     : {0,5:0.##}%", (100 * vp.VolumeCoverage)) + "    " +
                        String.Format("Silhouette Coverage : {0,5:0.##}%", (100 * vp.SilhouetteCoverage));

                    if (!String.IsNullOrEmpty(vp.Status))
                    {
                        Console.WriteLine(vp.Status + "\r\n");
                    }

                    Console.WriteLine(coverage);
                }, new Action(() => { }));
                waitHandle.WaitOne();
                operations.Save(options.OutputMesh);
            }
            else
            {
                using (MainWindow window = new MainWindow(input))
                {
                    window.ShowDialog();
                }
            }
        }