void Update() { if (Input.GetKeyDown(KeyCode.D)) { LoopSubdivision.Smooth(mesh); } }
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; }
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; }