public void GetEdgeLoops() { //Arrange var vertices = new Vector3[] { new Vector3(0f, 0f, 0), new Vector3(0f, 1f, 0), new Vector3(0f, 1f, 0), new Vector3(0.5f, 1f, 0), new Vector3(1f, 1f, 0), }; var mesh = new Mesh(); mesh.vertices = vertices; var meshData = new BzMeshData(mesh, null); var adapter = new BzManualMeshAdapter(vertices); BzMeshDataEditor editor = new BzMeshDataEditor(meshData, new Plane(), adapter, false); editor.CapEdges.Add(new IndexVector(0, 1)); editor.CapEdges.Add(new IndexVector(1, 2)); editor.CapEdges.Add(new IndexVector(2, 3)); editor.CapEdges.Add(new IndexVector(3, 4)); //Act var loops = editor.GetEdgeLoops(); //Assert Assert.AreEqual(1, loops.Count); var loop = loops.Single(); CollectionAssert.AreEqual(new[] { 0, 1, 4 }, LoopToArray(loop)); }
void Update() { if (Input.GetMouseButtonDown(0)) { // prepare data var meshFilter = _target.GetComponent <MeshFilter>(); var meshRenderer = _target.GetComponent <MeshRenderer>(); var mesh = meshFilter.mesh; Plane plane = new Plane(Vector3.up, 0); Material[] materials = meshRenderer.sharedMaterials; Material sectionMaterial = new Material(Shader.Find("Diffuse")); var adapter = new BzManualMeshAdapter(mesh.vertices); // slice mesh var meshDissector = new BzMeshDataDissector(mesh, plane, materials, adapter, BzSliceConfiguration.GetDefault()); meshDissector.DefaultSliceMaterial = sectionMaterial; SliceResult sliceResult = meshDissector.Slice(); // apply result back to our object if (sliceResult == SliceResult.Sliced) { var result = meshDissector.SliceResultNeg; meshFilter.mesh = result.GenerateMesh(); meshRenderer.materials = result.Materials; } } }
public void JoinBySameValue() { //Arrange var vertices = new Vector3[] { new Vector3(0, 0, 0), new Vector3(1, 0, 0), new Vector3(1, 0, 0), new Vector3(3, 0, 0), new Vector3(4, 0, 0), new Vector3(5, 0, 0), new Vector3(5, 0, 0), new Vector3(7, 0, 0), }; var mesh = new Mesh(); mesh.vertices = vertices; var meshData = new BzMeshData(mesh, null); var adapter = new BzManualMeshAdapter(vertices); BzMeshDataEditor editor = new BzMeshDataEditor(meshData, new Plane(), adapter, false); editor.CapEdges.Add(new IndexVector(2, 3)); editor.CapEdges.Add(new IndexVector(0, 1)); editor.CapEdges.Add(new IndexVector(4, 5)); editor.CapEdges.Add(new IndexVector(5, 6)); editor.CapEdges.Add(new IndexVector(6, 7)); //Act var loops = editor.GetEdgeLoopsByIndex(); Assert.AreEqual(3, loops.Count); editor.EdgeLoops_JoinBySameValue(loops); //Assert Assert.AreEqual(2, loops.Count); var loop1 = loops.Single(loop => loop.first.value == 0 | loop.last.value == 0); var loop2 = loops.Single(loop => loop.first.value == 4 | loop.last.value == 4); Assert.IsTrue(Enumerable.SequenceEqual(new[] { 0, 1, 3 }, LoopToArray(loop1))); Assert.IsTrue(Enumerable.SequenceEqual(new[] { 4, 5, 6, 7 }, LoopToArray(loop2))); }