コード例 #1
0
 void Update()
 {
     if (Input.GetKeyDown(KeyCode.D))
     {
         LoopSubdivision.Smooth(mesh);
     }
 }
コード例 #2
0
        public void UpdateModel()
        {
            if (this.off == null)
            {
                return;
            }

            this.Cursor = Cursors.Wait;

            double edge   = 0.004;
            double vertex = 0.006;
            var    w0     = new Stopwatch();

            w0.Start();

            // The original mesh
            var originalMesh = this.off.CreateMesh();
            var bounds       = originalMesh.GetBounds();
            var l            = Math.Max(bounds.Size.X, Math.Max(bounds.Size.Y, bounds.Size.Z));

            model1.Mesh = null;
            model2.Mesh = null;
            model3.Mesh = null;

            model1.EdgeDiameter = l * edge;
            model1.VertexRadius = l * vertex;
            model2.EdgeDiameter = l * edge;
            model2.VertexRadius = l * vertex;
            model3.EdgeDiameter = l * edge;
            model3.VertexRadius = l * vertex;

            if (!ViewEdges)
            {
                model1.EdgeDiameter = 0;
                model2.EdgeDiameter = 0;
                model3.EdgeDiameter = 0;
            }
            if (!ViewVertices)
            {
                model1.VertexRadius = 0;
                model2.VertexRadius = 0;
                model3.VertexRadius = 0;
            }

            model1.Mesh = originalMesh;

            // Triangulated mesh
            var mesh2 = originalMesh.Clone() as Mesh3D;

            mesh2.Triangulate(BarycentricTriangulation);

            model2.Mesh      = mesh2;
            model2.Transform = new TranslateTransform3D(bounds.SizeX * 1.2, 0, 0);

            var triangularMesh = mesh2.ToMeshGeometry3D();

            var loop = new LoopSubdivision(triangularMesh)
            {
                Scheme = this.SubdivisionScheme
            };
            var w = new Stopwatch();

            w.Start();
            loop.Subdivide(this.Levels);
            long subDivisionTime = w.ElapsedMilliseconds;
            var  mesh3           = loop.ToMesh3D();

            w.Restart();
            model3.Mesh = mesh3; // new Mesh3D(mesh3.Positions, mesh3.TriangleIndices);
            long meshGenerationTime = w.ElapsedMilliseconds;

            model3.Transform = new TranslateTransform3D(bounds.SizeX * 2.4, 0, 0);

            subdivisionStatus.Text = string.Format("Subdivision time: {0} ms, mesh generation time: {1} ms,  triangles: {2} (original mesh: {3})", subDivisionTime, meshGenerationTime, (mesh3.Faces.Count), (triangularMesh.TriangleIndices.Count / 3));

            this.Cursor = Cursors.Arrow;
        }
コード例 #3
0
        public void UpdateModel()
        {
            if (this.off == null)
                return;

            this.Cursor = Cursors.Wait;

            double edge = 0.004;
            double vertex = 0.006;
            var w0 = new Stopwatch();
            w0.Start();

            // The original mesh
            var originalMesh = this.off.CreateMesh();
            var bounds = originalMesh.GetBounds();
            var l = Math.Max(bounds.Size.X, Math.Max(bounds.Size.Y, bounds.Size.Z));

            model1.Mesh = null;
            model2.Mesh = null;
            model3.Mesh = null;

            model1.EdgeDiameter = l * edge;
            model1.VertexRadius = l * vertex;
            model2.EdgeDiameter = l * edge;
            model2.VertexRadius = l * vertex;
            model3.EdgeDiameter = l * edge;
            model3.VertexRadius = l * vertex;

            if (!ViewEdges)
            {
                model1.EdgeDiameter = 0;
                model2.EdgeDiameter = 0;
                model3.EdgeDiameter = 0;
            }
            if (!ViewVertices)
            {
                model1.VertexRadius = 0;
                model2.VertexRadius = 0;
                model3.VertexRadius = 0;
            }

            model1.Mesh = originalMesh;

            // Triangulated mesh
            var mesh2 = originalMesh.Clone() as Mesh3D;
            mesh2.Triangulate(BarycentricTriangulation);

            model2.Mesh = mesh2;
            model2.Transform = new TranslateTransform3D(bounds.SizeX * 1.2, 0, 0);

            var triangularMesh = mesh2.ToMeshGeometry3D();

            var loop = new LoopSubdivision(triangularMesh) { Scheme = this.SubdivisionScheme };
            var w = new Stopwatch();
            w.Start();
            loop.Subdivide(this.Levels);
            long subDivisionTime = w.ElapsedMilliseconds;
            var mesh3 = loop.ToMesh3D();
            w.Restart();
            model3.Mesh = mesh3; // new Mesh3D(mesh3.Positions, mesh3.TriangleIndices);
            long meshGenerationTime = w.ElapsedMilliseconds;
            model3.Transform = new TranslateTransform3D(bounds.SizeX * 2.4, 0, 0);

            subdivisionStatus.Text = string.Format("Subdivision time: {0} ms, mesh generation time: {1} ms,  triangles: {2} (original mesh: {3})", subDivisionTime, meshGenerationTime, (mesh3.Faces.Count), (triangularMesh.TriangleIndices.Count / 3));

            this.Cursor = Cursors.Arrow;
        }