206 lines
6.0 KiB
C#
206 lines
6.0 KiB
C#
using System;
|
|
|
|
namespace Poly2Tri
|
|
{
|
|
// Token: 0x0200000C RID: 12
|
|
public class DTSweepContext : TriangulationContext
|
|
{
|
|
// Token: 0x1700000B RID: 11
|
|
// (get) Token: 0x0600007B RID: 123 RVA: 0x00004465 File Offset: 0x00002665
|
|
// (set) Token: 0x0600007C RID: 124 RVA: 0x0000446D File Offset: 0x0000266D
|
|
public TriangulationPoint Head { get; set; }
|
|
|
|
// Token: 0x1700000C RID: 12
|
|
// (get) Token: 0x0600007D RID: 125 RVA: 0x00004476 File Offset: 0x00002676
|
|
// (set) Token: 0x0600007E RID: 126 RVA: 0x0000447E File Offset: 0x0000267E
|
|
public TriangulationPoint Tail { get; set; }
|
|
|
|
// Token: 0x0600007F RID: 127 RVA: 0x00004487 File Offset: 0x00002687
|
|
public DTSweepContext()
|
|
{
|
|
this.Clear();
|
|
}
|
|
|
|
// Token: 0x1700000D RID: 13
|
|
// (get) Token: 0x06000080 RID: 128 RVA: 0x000044C1 File Offset: 0x000026C1
|
|
// (set) Token: 0x06000081 RID: 129 RVA: 0x000044C9 File Offset: 0x000026C9
|
|
public override bool IsDebugEnabled
|
|
{
|
|
get
|
|
{
|
|
return base.IsDebugEnabled;
|
|
}
|
|
protected set
|
|
{
|
|
if (value && base.DebugContext == null)
|
|
{
|
|
base.DebugContext = new DTSweepDebugContext(this);
|
|
}
|
|
base.IsDebugEnabled = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000082 RID: 130 RVA: 0x000044E9 File Offset: 0x000026E9
|
|
public void RemoveFromList(DelaunayTriangle triangle)
|
|
{
|
|
this.Triangles.Remove(triangle);
|
|
}
|
|
|
|
// Token: 0x06000083 RID: 131 RVA: 0x000044F8 File Offset: 0x000026F8
|
|
public void MeshClean(DelaunayTriangle triangle)
|
|
{
|
|
this.MeshCleanReq(triangle);
|
|
}
|
|
|
|
// Token: 0x06000084 RID: 132 RVA: 0x00004504 File Offset: 0x00002704
|
|
private void MeshCleanReq(DelaunayTriangle triangle)
|
|
{
|
|
if (triangle != null && !triangle.IsInterior)
|
|
{
|
|
triangle.IsInterior = true;
|
|
base.Triangulatable.AddTriangle(triangle);
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
if (!triangle.EdgeIsConstrained[i])
|
|
{
|
|
this.MeshCleanReq(triangle.Neighbors[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000085 RID: 133 RVA: 0x0000455B File Offset: 0x0000275B
|
|
public override void Clear()
|
|
{
|
|
base.Clear();
|
|
this.Triangles.Clear();
|
|
}
|
|
|
|
// Token: 0x06000086 RID: 134 RVA: 0x0000456E File Offset: 0x0000276E
|
|
public void AddNode(AdvancingFrontNode node)
|
|
{
|
|
this.Front.AddNode(node);
|
|
}
|
|
|
|
// Token: 0x06000087 RID: 135 RVA: 0x0000457C File Offset: 0x0000277C
|
|
public void RemoveNode(AdvancingFrontNode node)
|
|
{
|
|
this.Front.RemoveNode(node);
|
|
}
|
|
|
|
// Token: 0x06000088 RID: 136 RVA: 0x0000458A File Offset: 0x0000278A
|
|
public AdvancingFrontNode LocateNode(TriangulationPoint point)
|
|
{
|
|
return this.Front.LocateNode(point);
|
|
}
|
|
|
|
// Token: 0x06000089 RID: 137 RVA: 0x00004598 File Offset: 0x00002798
|
|
public void CreateAdvancingFront()
|
|
{
|
|
DelaunayTriangle delaunayTriangle = new DelaunayTriangle(this.Points[0], this.Tail, this.Head);
|
|
this.Triangles.Add(delaunayTriangle);
|
|
AdvancingFrontNode advancingFrontNode = new AdvancingFrontNode(delaunayTriangle.Points[1]);
|
|
advancingFrontNode.Triangle = delaunayTriangle;
|
|
AdvancingFrontNode advancingFrontNode2 = new AdvancingFrontNode(delaunayTriangle.Points[0]);
|
|
advancingFrontNode2.Triangle = delaunayTriangle;
|
|
AdvancingFrontNode advancingFrontNode3 = new AdvancingFrontNode(delaunayTriangle.Points[2]);
|
|
this.Front = new AdvancingFront(advancingFrontNode, advancingFrontNode3);
|
|
this.Front.AddNode(advancingFrontNode2);
|
|
this.Front.Head.Next = advancingFrontNode2;
|
|
advancingFrontNode2.Next = this.Front.Tail;
|
|
advancingFrontNode2.Prev = this.Front.Head;
|
|
this.Front.Tail.Prev = advancingFrontNode2;
|
|
}
|
|
|
|
// Token: 0x0600008A RID: 138 RVA: 0x00004670 File Offset: 0x00002870
|
|
public void MapTriangleToNodes(DelaunayTriangle t)
|
|
{
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
if (t.Neighbors[i] == null)
|
|
{
|
|
AdvancingFrontNode advancingFrontNode = this.Front.LocatePoint(t.PointCWFrom(t.Points[i]));
|
|
if (advancingFrontNode != null)
|
|
{
|
|
advancingFrontNode.Triangle = t;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600008B RID: 139 RVA: 0x000046C0 File Offset: 0x000028C0
|
|
public override void PrepareTriangulation(Triangulatable t)
|
|
{
|
|
base.PrepareTriangulation(t);
|
|
double num2;
|
|
double num = (num2 = this.Points[0].X);
|
|
double num4;
|
|
double num3 = (num4 = this.Points[0].Y);
|
|
foreach (TriangulationPoint triangulationPoint in this.Points)
|
|
{
|
|
if (triangulationPoint.X > num2)
|
|
{
|
|
num2 = triangulationPoint.X;
|
|
}
|
|
if (triangulationPoint.X < num)
|
|
{
|
|
num = triangulationPoint.X;
|
|
}
|
|
if (triangulationPoint.Y > num4)
|
|
{
|
|
num4 = triangulationPoint.Y;
|
|
}
|
|
if (triangulationPoint.Y < num3)
|
|
{
|
|
num3 = triangulationPoint.Y;
|
|
}
|
|
}
|
|
double num5 = (double)this.ALPHA * (num2 - num);
|
|
double num6 = (double)this.ALPHA * (num4 - num3);
|
|
TriangulationPoint triangulationPoint2 = new TriangulationPoint(num2 + num5, num3 - num6, -1);
|
|
TriangulationPoint triangulationPoint3 = new TriangulationPoint(num - num5, num3 - num6, -1);
|
|
this.Head = triangulationPoint2;
|
|
this.Tail = triangulationPoint3;
|
|
this.Points.Sort(this._comparator);
|
|
}
|
|
|
|
// Token: 0x0600008C RID: 140 RVA: 0x000047E0 File Offset: 0x000029E0
|
|
public void FinalizeTriangulation()
|
|
{
|
|
base.Triangulatable.AddTriangles(this.Triangles);
|
|
this.Triangles.Clear();
|
|
}
|
|
|
|
// Token: 0x0600008D RID: 141 RVA: 0x000047FE File Offset: 0x000029FE
|
|
public override TriangulationConstraint NewConstraint(TriangulationPoint a, TriangulationPoint b)
|
|
{
|
|
return new DTSweepConstraint(a, b);
|
|
}
|
|
|
|
// Token: 0x1700000E RID: 14
|
|
// (get) Token: 0x0600008E RID: 142 RVA: 0x00004807 File Offset: 0x00002A07
|
|
public override TriangulationAlgorithm Algorithm
|
|
{
|
|
get
|
|
{
|
|
return TriangulationAlgorithm.DTSweep;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0400001E RID: 30
|
|
private readonly float ALPHA = 0.3f;
|
|
|
|
// Token: 0x0400001F RID: 31
|
|
public AdvancingFront Front;
|
|
|
|
// Token: 0x04000022 RID: 34
|
|
public DTSweepBasin Basin = new DTSweepBasin();
|
|
|
|
// Token: 0x04000023 RID: 35
|
|
public DTSweepEdgeEvent EdgeEvent = new DTSweepEdgeEvent();
|
|
|
|
// Token: 0x04000024 RID: 36
|
|
private DTSweepPointComparator _comparator = new DTSweepPointComparator();
|
|
}
|
|
}
|