From 2b8de82d97fa8a4ee8571e671f83234d4fa0c248 Mon Sep 17 00:00:00 2001 From: "SND\\wo80_cp" Date: Fri, 7 Dec 2012 13:03:09 +0000 Subject: [PATCH] Fixed issue #9771, Added option to set triangulation algorithm, Added GeometryWriter to test app git-svn-id: https://triangle.svn.codeplex.com/svn@71218 0e2699bc-83d4-4a8f-98e7-55e24ab8c7a5 --- Triangle.NET/TestApp/IO/GeometryWriter.cs | 89 +++++++++++++++++++++++ Triangle.NET/TestApp/Mesh Explorer.csproj | 1 + Triangle.NET/Triangle/Enums.cs | 6 +- Triangle.NET/Triangle/Mesh.cs | 18 ++++- Triangle.NET/Triangle/NewLocation.cs | 12 +-- 5 files changed, 118 insertions(+), 8 deletions(-) create mode 100644 Triangle.NET/TestApp/IO/GeometryWriter.cs diff --git a/Triangle.NET/TestApp/IO/GeometryWriter.cs b/Triangle.NET/TestApp/IO/GeometryWriter.cs new file mode 100644 index 0000000..c416866 --- /dev/null +++ b/Triangle.NET/TestApp/IO/GeometryWriter.cs @@ -0,0 +1,89 @@ +// ----------------------------------------------------------------------- +// +// Christian Woltering, Triangle.NET, http://triangle.codeplex.com/ +// +// ----------------------------------------------------------------------- + +namespace MeshExplorer.IO +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.IO; + using TriangleNet.Geometry; + + /// + /// Writes an InputGeometry to standard Triangle format. + /// + public static class GeometryWriter + { + public static void Write(InputGeometry geometry, string filename) + { + using (StreamWriter writer = new StreamWriter(filename)) + { + WritePoints(writer, geometry.Points, geometry.Count); + WriteSegments(writer, geometry.Segments); + WriteHoles(writer, geometry.Holes); + } + } + + private static void WritePoints(StreamWriter writer, IEnumerable points, int count) + { + int attributes = 0, index = 0; + + var first = points.FirstOrDefault(); + + if (first.Attributes != null) + { + attributes = first.Attributes.Length; + } + + writer.WriteLine("{0} {1} {2} {3}", count, 2, attributes, 1); + + foreach (var item in points) + { + // Vertex number, x and y coordinates. + writer.Write("{0} {1} {2}", index, item.X.ToString(Util.Nfi), item.Y.ToString(Util.Nfi)); + + // Write attributes. + for (int j = 0; j < attributes; j++) + { + writer.Write(" {0}", item.Attributes[j].ToString(Util.Nfi)); + } + + // Write the boundary marker. + writer.WriteLine(" {0}", item.Boundary); + + index++; + } + } + + private static void WriteSegments(StreamWriter writer, IEnumerable edges) + { + int index = 0; + + writer.WriteLine("{0} {1}", edges.Count(), 1); + + foreach (var item in edges) + { + writer.WriteLine("{0} {1} {2} {3}", index, item.P0, item.P1, item.Boundary); + + index++; + } + } + + private static void WriteHoles(StreamWriter writer, IEnumerable holes) + { + int index = 0; + + writer.WriteLine("{0}", holes.Count()); + + foreach (var item in holes) + { + writer.WriteLine("{0} {1} {2}", index, item.X.ToString(Util.Nfi), item.Y.ToString(Util.Nfi)); + + index++; + } + } + } +} diff --git a/Triangle.NET/TestApp/Mesh Explorer.csproj b/Triangle.NET/TestApp/Mesh Explorer.csproj index 3845269..a291fc1 100644 --- a/Triangle.NET/TestApp/Mesh Explorer.csproj +++ b/Triangle.NET/TestApp/Mesh Explorer.csproj @@ -106,6 +106,7 @@ + diff --git a/Triangle.NET/Triangle/Enums.cs b/Triangle.NET/Triangle/Enums.cs index e0d227c..0668d17 100644 --- a/Triangle.NET/Triangle/Enums.cs +++ b/Triangle.NET/Triangle/Enums.cs @@ -47,7 +47,11 @@ namespace TriangleNet /// /// Create segments on the convex hull (boolean). /// - Convex + Convex, + /// + /// Algorithm used for triangulation (TriangulationAlgorithm). + /// + TriangulationAlgorithm }; /// diff --git a/Triangle.NET/Triangle/Mesh.cs b/Triangle.NET/Triangle/Mesh.cs index ad24ec5..e36d14e 100644 --- a/Triangle.NET/Triangle/Mesh.cs +++ b/Triangle.NET/Triangle/Mesh.cs @@ -566,7 +566,7 @@ namespace TriangleNet if (value) { behavior.MinAngle = 20.0; - behavior.MaxAngle = 140.0; + behavior.MaxAngle = 0.0; UpdateOptions(); } @@ -656,6 +656,22 @@ namespace TriangleNet logger.Warning("Invalid option value.", "Mesh.SetOption(int)"); } + /// + /// Set options for mesh generation. + /// + /// Mesh gerneration option. + /// New option value. + public void SetOption(Options option, TriangulationAlgorithm value) + { + if (option == Options.TriangulationAlgorithm) + { + behavior.Algorithm = value; + return; + } + + logger.Warning("Invalid option value.", "Mesh.SetOption(TriangulationAlgorithm)"); + } + /// /// Keeps options synchronized. /// diff --git a/Triangle.NET/Triangle/NewLocation.cs b/Triangle.NET/Triangle/NewLocation.cs index b2dc352..c9376b2 100644 --- a/Triangle.NET/Triangle/NewLocation.cs +++ b/Triangle.NET/Triangle/NewLocation.cs @@ -2500,9 +2500,9 @@ namespace TriangleNet //double p[5]; - double[] petalx = new double[24]; - double[] petaly = new double[24]; - double[] petalr = new double[24]; + double[] petalx = new double[2 * numpoints]; + double[] petaly = new double[2 * numpoints]; + double[] petalr = new double[2 * numpoints]; double[] wedges = new double[2000]; double xmid, ymid, dist, x3, y3; @@ -2758,9 +2758,9 @@ namespace TriangleNet //double p[5]; - double[] petalx = new double[100]; - double[] petaly = new double[100]; - double[] petalr = new double[100]; + double[] petalx = new double[2 * numpoints]; + double[] petaly = new double[2 * numpoints]; + double[] petalr = new double[2 * numpoints]; double[] wedges = new double[2000]; double xmid, ymid, dist, x3, y3;