예제 #1
0
        private void GenFlat()
        {
            if (meshifier == null)
            {
                return;
            }

            didImport           = false;
            btnExport.IsEnabled = false;
            UpdateMeshifier();

            meshifier.Sphererize = false;

            lGenMessage.Visibility = Visibility.Visible;
            lGenMessage.BringIntoView();

            isGen = true;
            mesh  = null;

            cameraPosition.x = -(image.Width * scale) * 0.5f;
            cameraPosition.y = -(image.Height * scale) * 0.5f;
            cameraPosition.z = -100.0f;

            cameraRotation.x = 0;
            cameraRotation.y = 0;
            cameraRotation.z = 0;

            Task.Run(async() =>
            {
                long ms = DateTime.Now.Ticks;
                MeshG m = await meshifier.Generate();

                Dispatcher.Invoke(() =>
                {
                    mesh          = m;
                    mesh.center.x = (image.Width * scale) * 0.5f;
                    mesh.center.y = (image.Height * scale) * 0.5f;
                    positions     = mesh.Vertices.ToArray();
                    colors        = mesh.Colors.ToArray();
                    indices       = mesh.Triangles.ToArray();
                    normals       = mesh.Normals.ToArray();
                });

                long end = DateTime.Now.Ticks - ms;

                float totalMs = (float)end / 10000.0f;

                Dispatcher.Invoke(() =>
                {
                    isGen                  = false;
                    lGenTime.Text          = totalMs + "ms";
                    lTriangleCount.Text    = meshifier.TriangleCount.ToString("#,##");
                    lGenMessage.Visibility = Visibility.Hidden;
                    btnExport.IsEnabled    = true;
                    Render(glControl);
                });
            });
        }
예제 #2
0
        private void Import(string data)
        {
            Task.Run(() =>
            {
                MeshG m = MeshReadWriter.ParseMeshString(data);
                m.FindCenter();

                if (m.Vertices.Count == 0 || m.Triangles.Count == 0)
                {
                    Dispatcher.Invoke(() =>
                    {
                        MessageBox.Show("No valid vertices or triangles in imesh file.");
                    });

                    return;
                }

                Dispatcher.Invoke(() =>
                {
                    cameraPosition.x = -m.center.x;
                    cameraPosition.y = -m.center.y;
                    cameraPosition.z = -100.0f;

                    didImport = true;

                    lGenTime.Text = "0ms";

                    isGen = true;
                    mesh  = null;

                    mesh = m;

                    positions = m.Vertices.ToArray();
                    indices   = m.Triangles.ToArray();
                    normals   = m.Normals.ToArray();
                    colors    = m.Colors.ToArray();

                    lTriangleCount.Text = (indices.Length / 3).ToString("#,##");
                });

                Dispatcher.Invoke(() =>
                {
                    isGen = false;
                    Render(glControl);
                });
            });
        }