Files
Dec2017-Script-Dump/Poly2Tri/DTSweepContext.cs
T
2026-06-04 11:42:34 +02:00

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();
}
}