public void addFace(List <MeshRange> face, Vector3 pos) { MeshRange f = new MeshRange(); f.begin = pos; f.end = pos; face.Add(f); merge(face); }
void merge(List <MeshRange> face) { bool change; if (face.Count < 2) { return; } //1 = begin 2 = end Vector3 a1, b1, a2, b2; do { change = false; for (int i = 0; i < face.Count - 1; i++) { for (int j = i + 1; j < face.Count; j++) { a1 = face[i].begin; a2 = face[i].end; b1 = face[j].begin; b2 = face[j].end; if ((a1.x == b1.x && a1.y == b1.y && a2.x == b2.x && a2.y == b2.y && (Math.Abs(a2.z - b1.z) == 1 || Math.Abs(a1.z - b2.z) == 1)) || (a1.x == b1.x && a1.z == b1.z && a2.x == b2.x && a2.z == b2.z && (Math.Abs(a2.y - b1.y) == 1 || Math.Abs(a1.y - b2.y) == 1)) || (a1.z == b1.z && a1.y == b1.y && a2.z == b2.z && a2.y == b2.y && (Math.Abs(a2.x - b1.x) == 1 || Math.Abs(a1.x - b2.x) == 1))) { Vector3 begin = face[i].begin; Vector3 end = face[j].end; MeshRange range = new MeshRange(); range.begin = begin; range.end = end; face.Remove(face[j]); face.Remove(face[i]); ////Debug.Log(i); face.Add(range); change = true; } } } } while (change); }