Files
2026-06-04 11:42:34 +02:00

74 lines
1.8 KiB
C#

using System;
using TriangleNet.Data;
using TriangleNet.Geometry;
using TriangleNet.Tools;
namespace TriangleNet.Smoothing
{
// Token: 0x0200001E RID: 30
public class SimpleSmoother : ISmoother
{
// Token: 0x06000109 RID: 265 RVA: 0x00015047 File Offset: 0x00013247
public SimpleSmoother(Mesh mesh)
{
this.mesh = mesh;
}
// Token: 0x0600010A RID: 266 RVA: 0x00015058 File Offset: 0x00013258
public void Smooth()
{
this.mesh.behavior.Quality = false;
for (int i = 0; i < 5; i++)
{
this.Step();
this.mesh.Triangulate(this.Rebuild());
}
}
// Token: 0x0600010B RID: 267 RVA: 0x0001509C File Offset: 0x0001329C
private void Step()
{
foreach (VoronoiRegion voronoiRegion in new BoundedVoronoi(this.mesh, false).Regions)
{
int num = 0;
double num3;
double num2 = (num3 = 0.0);
foreach (Point point in voronoiRegion.Vertices)
{
num++;
num3 += point.x;
num2 += point.y;
}
voronoiRegion.Generator.x = num3 / (double)num;
voronoiRegion.Generator.y = num2 / (double)num;
}
}
// Token: 0x0600010C RID: 268 RVA: 0x00015174 File Offset: 0x00013374
private InputGeometry Rebuild()
{
InputGeometry inputGeometry = new InputGeometry(this.mesh.vertices.Count);
foreach (Vertex vertex in this.mesh.vertices.Values)
{
inputGeometry.AddPoint(vertex.x, vertex.y, vertex.mark);
}
foreach (Segment segment in this.mesh.subsegs.Values)
{
inputGeometry.AddSegment(segment.P0, segment.P1, segment.Boundary);
}
foreach (Point point in this.mesh.holes)
{
inputGeometry.AddHole(point.x, point.y);
}
foreach (RegionPointer regionPointer in this.mesh.regions)
{
inputGeometry.AddRegion(regionPointer.point.x, regionPointer.point.y, regionPointer.id);
}
return inputGeometry;
}
// Token: 0x040000D4 RID: 212
private Mesh mesh;
}
}