scripts
This commit is contained in:
@@ -0,0 +1,224 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user