scripts
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
using System;
|
||||
using TriangleNet.Data;
|
||||
using TriangleNet.Geometry;
|
||||
|
||||
namespace TriangleNet
|
||||
{
|
||||
// Token: 0x02000011 RID: 17
|
||||
internal class TriangleLocator
|
||||
{
|
||||
// Token: 0x06000096 RID: 150 RVA: 0x0001114B File Offset: 0x0000F34B
|
||||
public TriangleLocator(Mesh mesh)
|
||||
{
|
||||
this.mesh = mesh;
|
||||
this.sampler = new Sampler();
|
||||
}
|
||||
|
||||
// Token: 0x06000097 RID: 151 RVA: 0x00011165 File Offset: 0x0000F365
|
||||
public void Update(ref Otri otri)
|
||||
{
|
||||
otri.Copy(ref this.recenttri);
|
||||
}
|
||||
|
||||
// Token: 0x06000098 RID: 152 RVA: 0x00011173 File Offset: 0x0000F373
|
||||
public void Reset()
|
||||
{
|
||||
this.recenttri.triangle = null;
|
||||
}
|
||||
|
||||
// Token: 0x06000099 RID: 153 RVA: 0x00011184 File Offset: 0x0000F384
|
||||
public LocateResult PreciseLocate(Point searchpoint, ref Otri searchtri, bool stopatsubsegment)
|
||||
{
|
||||
Otri otri = default(Otri);
|
||||
Osub osub = default(Osub);
|
||||
Vertex vertex = searchtri.Org();
|
||||
Vertex vertex2 = searchtri.Dest();
|
||||
Vertex vertex3 = searchtri.Apex();
|
||||
while (vertex3.x != searchpoint.X || vertex3.y != searchpoint.Y)
|
||||
{
|
||||
double num = Primitives.CounterClockwise(vertex, vertex3, searchpoint);
|
||||
double num2 = Primitives.CounterClockwise(vertex3, vertex2, searchpoint);
|
||||
bool flag;
|
||||
if (num > 0.0)
|
||||
{
|
||||
flag = num2 <= 0.0 || (vertex3.x - searchpoint.X) * (vertex2.x - vertex.x) + (vertex3.y - searchpoint.Y) * (vertex2.y - vertex.y) > 0.0;
|
||||
}
|
||||
else if (num2 > 0.0)
|
||||
{
|
||||
flag = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (num == 0.0)
|
||||
{
|
||||
searchtri.LprevSelf();
|
||||
return LocateResult.OnEdge;
|
||||
}
|
||||
if (num2 == 0.0)
|
||||
{
|
||||
searchtri.LnextSelf();
|
||||
return LocateResult.OnEdge;
|
||||
}
|
||||
return LocateResult.InTriangle;
|
||||
}
|
||||
if (flag)
|
||||
{
|
||||
searchtri.Lprev(ref otri);
|
||||
vertex2 = vertex3;
|
||||
}
|
||||
else
|
||||
{
|
||||
searchtri.Lnext(ref otri);
|
||||
vertex = vertex3;
|
||||
}
|
||||
otri.Sym(ref searchtri);
|
||||
if (this.mesh.checksegments && stopatsubsegment)
|
||||
{
|
||||
otri.SegPivot(ref osub);
|
||||
if (osub.seg != Mesh.dummysub)
|
||||
{
|
||||
otri.Copy(ref searchtri);
|
||||
return LocateResult.Outside;
|
||||
}
|
||||
}
|
||||
if (searchtri.triangle == Mesh.dummytri)
|
||||
{
|
||||
otri.Copy(ref searchtri);
|
||||
return LocateResult.Outside;
|
||||
}
|
||||
vertex3 = searchtri.Apex();
|
||||
}
|
||||
searchtri.LprevSelf();
|
||||
return LocateResult.OnVertex;
|
||||
}
|
||||
|
||||
// Token: 0x0600009A RID: 154 RVA: 0x00011310 File Offset: 0x0000F510
|
||||
public LocateResult Locate(Point searchpoint, ref Otri searchtri)
|
||||
{
|
||||
Otri otri = default(Otri);
|
||||
Vertex vertex = searchtri.Org();
|
||||
double num = (searchpoint.X - vertex.x) * (searchpoint.X - vertex.x) + (searchpoint.Y - vertex.y) * (searchpoint.Y - vertex.y);
|
||||
if (this.recenttri.triangle != null && !Otri.IsDead(this.recenttri.triangle))
|
||||
{
|
||||
vertex = this.recenttri.Org();
|
||||
if (vertex.x == searchpoint.X && vertex.y == searchpoint.Y)
|
||||
{
|
||||
this.recenttri.Copy(ref searchtri);
|
||||
return LocateResult.OnVertex;
|
||||
}
|
||||
double num2 = (searchpoint.X - vertex.x) * (searchpoint.X - vertex.x) + (searchpoint.Y - vertex.y) * (searchpoint.Y - vertex.y);
|
||||
if (num2 < num)
|
||||
{
|
||||
this.recenttri.Copy(ref searchtri);
|
||||
num = num2;
|
||||
}
|
||||
}
|
||||
this.sampler.Update(this.mesh);
|
||||
foreach (int num3 in this.sampler.GetSamples(this.mesh))
|
||||
{
|
||||
otri.triangle = this.mesh.triangles[num3];
|
||||
if (!Otri.IsDead(otri.triangle))
|
||||
{
|
||||
vertex = otri.Org();
|
||||
double num2 = (searchpoint.X - vertex.x) * (searchpoint.X - vertex.x) + (searchpoint.Y - vertex.y) * (searchpoint.Y - vertex.y);
|
||||
if (num2 < num)
|
||||
{
|
||||
otri.Copy(ref searchtri);
|
||||
num = num2;
|
||||
}
|
||||
}
|
||||
}
|
||||
vertex = searchtri.Org();
|
||||
Vertex vertex2 = searchtri.Dest();
|
||||
if (vertex.x == searchpoint.X && vertex.y == searchpoint.Y)
|
||||
{
|
||||
return LocateResult.OnVertex;
|
||||
}
|
||||
if (vertex2.x == searchpoint.X && vertex2.y == searchpoint.Y)
|
||||
{
|
||||
searchtri.LnextSelf();
|
||||
return LocateResult.OnVertex;
|
||||
}
|
||||
double num4 = Primitives.CounterClockwise(vertex, vertex2, searchpoint);
|
||||
if (num4 < 0.0)
|
||||
{
|
||||
searchtri.SymSelf();
|
||||
}
|
||||
else if (num4 == 0.0 && vertex.x < searchpoint.X == searchpoint.X < vertex2.x && vertex.y < searchpoint.Y == searchpoint.Y < vertex2.y)
|
||||
{
|
||||
return LocateResult.OnEdge;
|
||||
}
|
||||
return this.PreciseLocate(searchpoint, ref searchtri, false);
|
||||
}
|
||||
|
||||
// Token: 0x04000083 RID: 131
|
||||
private Sampler sampler;
|
||||
|
||||
// Token: 0x04000084 RID: 132
|
||||
private Mesh mesh;
|
||||
|
||||
// Token: 0x04000085 RID: 133
|
||||
internal Otri recenttri;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user