Files
Dec2017-Script-Dump/Triangle/IO/FileWriter.cs
T
2026-06-04 11:42:34 +02:00

386 lines
11 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using TriangleNet.Data;
using TriangleNet.Geometry;
namespace TriangleNet.IO
{
// Token: 0x02000026 RID: 38
public static class FileWriter
{
// Token: 0x06000135 RID: 309 RVA: 0x000160F0 File Offset: 0x000142F0
public static void Write(Mesh mesh, string filename)
{
FileWriter.WritePoly(mesh, Path.ChangeExtension(filename, ".poly"));
FileWriter.WriteElements(mesh, Path.ChangeExtension(filename, ".ele"));
}
// Token: 0x06000136 RID: 310 RVA: 0x00016114 File Offset: 0x00014314
public static void WriteNodes(Mesh mesh, string filename)
{
using (StreamWriter streamWriter = new StreamWriter(filename))
{
FileWriter.WriteNodes(streamWriter, mesh);
}
}
// Token: 0x06000137 RID: 311 RVA: 0x0001614C File Offset: 0x0001434C
private static void WriteNodes(StreamWriter writer, Mesh mesh)
{
int num = mesh.vertices.Count;
Behavior behavior = mesh.behavior;
if (behavior.Jettison)
{
num = mesh.vertices.Count - mesh.undeads;
}
if (writer != null)
{
writer.WriteLine("{0} {1} {2} {3}", new object[]
{
num,
mesh.mesh_dim,
mesh.nextras,
behavior.UseBoundaryMarkers ? "1" : "0"
});
if (mesh.numbering == NodeNumbering.None)
{
mesh.Renumber();
}
if (mesh.numbering == NodeNumbering.Linear)
{
FileWriter.WriteNodes(writer, mesh.vertices.Values, behavior.UseBoundaryMarkers, mesh.nextras, behavior.Jettison);
return;
}
Vertex[] array = new Vertex[mesh.vertices.Count];
foreach (Vertex vertex in mesh.vertices.Values)
{
array[vertex.id] = vertex;
}
FileWriter.WriteNodes(writer, array, behavior.UseBoundaryMarkers, mesh.nextras, behavior.Jettison);
}
}
// Token: 0x06000138 RID: 312 RVA: 0x00016290 File Offset: 0x00014490
private static void WriteNodes(StreamWriter writer, IEnumerable<Vertex> nodes, bool markers, int attribs, bool jettison)
{
int num = 0;
foreach (Vertex vertex in nodes)
{
if (!jettison || vertex.type != VertexType.UndeadVertex)
{
writer.Write("{0} {1} {2}", num, vertex.x.ToString(FileWriter.nfi), vertex.y.ToString(FileWriter.nfi));
for (int i = 0; i < attribs; i++)
{
writer.Write(" {0}", vertex.attributes[i].ToString(FileWriter.nfi));
}
if (markers)
{
writer.Write(" {0}", vertex.mark);
}
writer.WriteLine();
num++;
}
}
}
// Token: 0x06000139 RID: 313 RVA: 0x0001636C File Offset: 0x0001456C
public static void WriteElements(Mesh mesh, string filename)
{
Otri otri = default(Otri);
bool useRegions = mesh.behavior.useRegions;
int num = 0;
otri.orient = 0;
using (StreamWriter streamWriter = new StreamWriter(filename))
{
streamWriter.WriteLine("{0} 3 {1}", mesh.triangles.Count, useRegions ? 1 : 0);
foreach (Triangle triangle in mesh.triangles.Values)
{
otri.triangle = triangle;
Vertex vertex = otri.Org();
Vertex vertex2 = otri.Dest();
Vertex vertex3 = otri.Apex();
streamWriter.Write("{0} {1} {2} {3}", new object[] { num, vertex.id, vertex2.id, vertex3.id });
if (useRegions)
{
streamWriter.Write(" {0}", otri.triangle.region);
}
streamWriter.WriteLine();
triangle.id = num++;
}
}
}
// Token: 0x0600013A RID: 314 RVA: 0x000164E4 File Offset: 0x000146E4
public static void WritePoly(Mesh mesh, string filename)
{
FileWriter.WritePoly(mesh, filename, true);
}
// Token: 0x0600013B RID: 315 RVA: 0x000164F0 File Offset: 0x000146F0
public static void WritePoly(Mesh mesh, string filename, bool writeNodes)
{
Osub osub = default(Osub);
bool useBoundaryMarkers = mesh.behavior.UseBoundaryMarkers;
using (StreamWriter streamWriter = new StreamWriter(filename))
{
if (writeNodes)
{
FileWriter.WriteNodes(streamWriter, mesh);
}
else
{
streamWriter.WriteLine("0 {0} {1} {2}", mesh.mesh_dim, mesh.nextras, useBoundaryMarkers ? "1" : "0");
}
streamWriter.WriteLine("{0} {1}", mesh.subsegs.Count, useBoundaryMarkers ? "1" : "0");
osub.orient = 0;
int num = 0;
foreach (Segment segment in mesh.subsegs.Values)
{
osub.seg = segment;
Vertex vertex = osub.Org();
Vertex vertex2 = osub.Dest();
if (useBoundaryMarkers)
{
streamWriter.WriteLine("{0} {1} {2} {3}", new object[]
{
num,
vertex.id,
vertex2.id,
osub.seg.boundary
});
}
else
{
streamWriter.WriteLine("{0} {1} {2}", num, vertex.id, vertex2.id);
}
num++;
}
num = 0;
streamWriter.WriteLine("{0}", mesh.holes.Count);
foreach (Point point in mesh.holes)
{
streamWriter.WriteLine("{0} {1} {2}", num++, point.X.ToString(FileWriter.nfi), point.Y.ToString(FileWriter.nfi));
}
if (mesh.regions.Count > 0)
{
num = 0;
streamWriter.WriteLine("{0}", mesh.regions.Count);
foreach (RegionPointer regionPointer in mesh.regions)
{
streamWriter.WriteLine("{0} {1} {2} {3}", new object[]
{
num,
regionPointer.point.X.ToString(FileWriter.nfi),
regionPointer.point.Y.ToString(FileWriter.nfi),
regionPointer.id
});
num++;
}
}
}
}
// Token: 0x0600013C RID: 316 RVA: 0x00016834 File Offset: 0x00014A34
public static void WriteEdges(Mesh mesh, string filename)
{
Otri otri = default(Otri);
Otri otri2 = default(Otri);
Osub osub = default(Osub);
Behavior behavior = mesh.behavior;
using (StreamWriter streamWriter = new StreamWriter(filename))
{
streamWriter.WriteLine("{0} {1}", mesh.edges, behavior.UseBoundaryMarkers ? "1" : "0");
long num = 0L;
foreach (Triangle triangle in mesh.triangles.Values)
{
otri.triangle = triangle;
otri.orient = 0;
while (otri.orient < 3)
{
otri.Sym(ref otri2);
if (otri.triangle.id < otri2.triangle.id || otri2.triangle == Mesh.dummytri)
{
Vertex vertex = otri.Org();
Vertex vertex2 = otri.Dest();
if (behavior.UseBoundaryMarkers)
{
if (behavior.useSegments)
{
otri.SegPivot(ref osub);
if (osub.seg == Mesh.dummysub)
{
streamWriter.WriteLine("{0} {1} {2} {3}", new object[] { num, vertex.id, vertex2.id, 0 });
}
else
{
streamWriter.WriteLine("{0} {1} {2} {3}", new object[]
{
num,
vertex.id,
vertex2.id,
osub.seg.boundary
});
}
}
else
{
streamWriter.WriteLine("{0} {1} {2} {3}", new object[]
{
num,
vertex.id,
vertex2.id,
(otri2.triangle == Mesh.dummytri) ? "1" : "0"
});
}
}
else
{
streamWriter.WriteLine("{0} {1} {2}", num, vertex.id, vertex2.id);
}
num += 1L;
}
otri.orient++;
}
}
}
}
// Token: 0x0600013D RID: 317 RVA: 0x00016AD4 File Offset: 0x00014CD4
public static void WriteNeighbors(Mesh mesh, string filename)
{
Otri otri = default(Otri);
Otri otri2 = default(Otri);
int num = 0;
using (StreamWriter streamWriter = new StreamWriter(filename))
{
streamWriter.WriteLine("{0} 3", mesh.triangles.Count);
Mesh.dummytri.id = -1;
foreach (Triangle triangle in mesh.triangles.Values)
{
otri.triangle = triangle;
otri.orient = 1;
otri.Sym(ref otri2);
int id = otri2.triangle.id;
otri.orient = 2;
otri.Sym(ref otri2);
int id2 = otri2.triangle.id;
otri.orient = 0;
otri.Sym(ref otri2);
int id3 = otri2.triangle.id;
streamWriter.WriteLine("{0} {1} {2} {3}", new object[]
{
num++,
id,
id2,
id3
});
}
}
}
// Token: 0x0600013E RID: 318 RVA: 0x00016C40 File Offset: 0x00014E40
public static void WriteVoronoi(Mesh mesh, string filename)
{
Otri otri = default(Otri);
Otri otri2 = default(Otri);
double num = 0.0;
double num2 = 0.0;
int num3 = 0;
otri.orient = 0;
using (StreamWriter streamWriter = new StreamWriter(filename))
{
streamWriter.WriteLine("{0} 2 {1} 0", mesh.triangles.Count, mesh.nextras);
foreach (Triangle triangle in mesh.triangles.Values)
{
otri.triangle = triangle;
Vertex vertex = otri.Org();
Vertex vertex2 = otri.Dest();
Vertex vertex3 = otri.Apex();
Point point = Primitives.FindCircumcenter(vertex, vertex2, vertex3, ref num, ref num2);
streamWriter.Write("{0} {1} {2}", num3, point.X.ToString(FileWriter.nfi), point.Y.ToString(FileWriter.nfi));
for (int i = 0; i < mesh.nextras; i++)
{
streamWriter.Write(" 0");
}
streamWriter.WriteLine();
otri.triangle.id = num3++;
}
streamWriter.WriteLine("{0} 0", mesh.edges);
num3 = 0;
foreach (Triangle triangle2 in mesh.triangles.Values)
{
otri.triangle = triangle2;
otri.orient = 0;
while (otri.orient < 3)
{
otri.Sym(ref otri2);
if (otri.triangle.id < otri2.triangle.id || otri2.triangle == Mesh.dummytri)
{
int id = otri.triangle.id;
if (otri2.triangle == Mesh.dummytri)
{
Vertex vertex = otri.Org();
Vertex vertex2 = otri.Dest();
streamWriter.WriteLine("{0} {1} -1 {2} {3}", new object[]
{
num3,
id,
(vertex2[1] - vertex[1]).ToString(FileWriter.nfi),
(vertex[0] - vertex2[0]).ToString(FileWriter.nfi)
});
}
else
{
int id2 = otri2.triangle.id;
streamWriter.WriteLine("{0} {1} {2}", num3, id, id2);
}
num3++;
}
otri.orient++;
}
}
}
}
// Token: 0x0600013F RID: 319 RVA: 0x00016F64 File Offset: 0x00015164
public static void WriteOffFile(Mesh mesh, string filename)
{
long num = (long)mesh.vertices.Count;
if (mesh.behavior.Jettison)
{
num = (long)(mesh.vertices.Count - mesh.undeads);
}
int num2 = 0;
using (StreamWriter streamWriter = new StreamWriter(filename))
{
streamWriter.WriteLine("OFF");
streamWriter.WriteLine("{0} {1} {2}", num, mesh.triangles.Count, mesh.edges);
foreach (Vertex vertex in mesh.vertices.Values)
{
Vertex vertex;
if (!mesh.behavior.Jettison || vertex.type != VertexType.UndeadVertex)
{
streamWriter.WriteLine(" {0} {1} 0.0", vertex[0].ToString(FileWriter.nfi), vertex[1].ToString(FileWriter.nfi));
vertex.id = num2++;
}
}
Otri otri;
otri.orient = 0;
foreach (Triangle triangle in mesh.triangles.Values)
{
otri.triangle = triangle;
Vertex vertex = otri.Org();
Vertex vertex2 = otri.Dest();
Vertex vertex3 = otri.Apex();
streamWriter.WriteLine(" 3 {0} {1} {2}", vertex.id, vertex2.id, vertex3.id);
}
}
}
// Token: 0x040000E8 RID: 232
private static NumberFormatInfo nfi = CultureInfo.InvariantCulture.NumberFormat;
}
}