using System; using TriangleNet.Data; namespace TriangleNet.Tools { // Token: 0x02000012 RID: 18 public class AdjacencyMatrix { // Token: 0x1700001E RID: 30 // (get) Token: 0x0600009B RID: 155 RVA: 0x0001158A File Offset: 0x0000F78A public int[] AdjacencyRow { get { return this.adj_row; } } // Token: 0x1700001F RID: 31 // (get) Token: 0x0600009C RID: 156 RVA: 0x00011592 File Offset: 0x0000F792 public int[] Adjacency { get { return this.adj; } } // Token: 0x0600009D RID: 157 RVA: 0x0001159C File Offset: 0x0000F79C public AdjacencyMatrix(Mesh mesh) { this.node_num = mesh.vertices.Count; this.adj_row = this.AdjacencyCount(mesh); this.adj_num = this.adj_row[this.node_num] - 1; this.adj = this.AdjacencySet(mesh, this.adj_row); } // Token: 0x0600009E RID: 158 RVA: 0x000115F8 File Offset: 0x0000F7F8 public int Bandwidth() { int num = 0; int num2 = 0; for (int i = 0; i < this.node_num; i++) { for (int j = this.adj_row[i]; j <= this.adj_row[i + 1] - 1; j++) { int num3 = this.adj[j - 1]; num = Math.Max(num, i - num3); num2 = Math.Max(num2, num3 - i); } } return num + 1 + num2; } // Token: 0x0600009F RID: 159 RVA: 0x00011664 File Offset: 0x0000F864 private int[] AdjacencyCount(Mesh mesh) { int[] array = new int[this.node_num + 1]; int i; for (i = 0; i < this.node_num; i++) { array[i] = 1; } foreach (Triangle triangle in mesh.triangles.Values) { int id = triangle.id; int id2 = triangle.vertices[0].id; int id3 = triangle.vertices[1].id; int id4 = triangle.vertices[2].id; int num = triangle.neighbors[2].triangle.id; if (num < 0 || id < num) { array[id2]++; array[id3]++; } num = triangle.neighbors[0].triangle.id; if (num < 0 || id < num) { array[id3]++; array[id4]++; } num = triangle.neighbors[1].triangle.id; if (num < 0 || id < num) { array[id4]++; array[id2]++; } } i = this.node_num; while (1 <= i) { array[i] = array[i - 1]; i--; } array[0] = 1; for (int j = 1; j <= this.node_num; j++) { array[j] = array[j - 1] + array[j]; } return array; } // Token: 0x060000A0 RID: 160 RVA: 0x0001181C File Offset: 0x0000FA1C private int[] AdjacencySet(Mesh mesh, int[] rows) { int[] array = new int[this.node_num]; Array.Copy(rows, array, this.node_num); int num = rows[this.node_num] - 1; int[] array2 = new int[num]; for (int i = 0; i < num; i++) { array2[i] = -1; } for (int i = 0; i < this.node_num; i++) { array2[array[i] - 1] = i; array[i]++; } foreach (Triangle triangle in mesh.triangles.Values) { int id = triangle.id; int id2 = triangle.vertices[0].id; int id3 = triangle.vertices[1].id; int id4 = triangle.vertices[2].id; int num2 = triangle.neighbors[2].triangle.id; if (num2 < 0 || id < num2) { array2[array[id2] - 1] = id3; array[id2]++; array2[array[id3] - 1] = id2; array[id3]++; } num2 = triangle.neighbors[0].triangle.id; if (num2 < 0 || id < num2) { array2[array[id3] - 1] = id4; array[id3]++; array2[array[id4] - 1] = id3; array[id4]++; } num2 = triangle.neighbors[1].triangle.id; if (num2 < 0 || id < num2) { array2[array[id2] - 1] = id4; array[id2]++; array2[array[id4] - 1] = id2; array[id4]++; } } for (int i = 0; i < this.node_num; i++) { int num3 = rows[i]; int num4 = rows[i + 1] - 1; this.HeapSort(array2, num3 - 1, num4 + 1 - num3); } return array2; } // Token: 0x060000A1 RID: 161 RVA: 0x00011A38 File Offset: 0x0000FC38 private void CreateHeap(int[] a, int offset, int size) { int num = size / 2 - 1; while (0 <= num) { int num2 = a[offset + num]; int num3 = num; for (;;) { int num4 = 2 * num3 + 1; if (size <= num4) { break; } if (num4 + 1 < size && a[offset + num4] < a[offset + num4 + 1]) { num4++; } if (num2 >= a[offset + num4]) { break; } a[offset + num3] = a[offset + num4]; num3 = num4; } a[offset + num3] = num2; num--; } } // Token: 0x060000A2 RID: 162 RVA: 0x00011A9C File Offset: 0x0000FC9C private void HeapSort(int[] a, int offset, int size) { if (size <= 1) { return; } this.CreateHeap(a, offset, size); int num = a[offset]; a[offset] = a[offset + size - 1]; a[offset + size - 1] = num; int num2 = size - 1; while (2 <= num2) { this.CreateHeap(a, offset, num2); num = a[offset]; a[offset] = a[offset + num2 - 1]; a[offset + num2 - 1] = num; num2--; } } // Token: 0x04000086 RID: 134 private int node_num; // Token: 0x04000087 RID: 135 private int adj_num; // Token: 0x04000088 RID: 136 private int[] adj_row; // Token: 0x04000089 RID: 137 private int[] adj; } }