private static void RunDelaunay(string sitesWKT, string constraintsWKT, bool computeTriangles, string expectedWKT) { WKTReader reader = new WKTReader(); IGeometry sites = reader.Read(sitesWKT); IGeometry constraints = reader.Read(constraintsWKT); ConformingDelaunayTriangulationBuilder builder = new ConformingDelaunayTriangulationBuilder(); builder.SetSites(sites); builder.Constraints = constraints; IGeometryFactory geomFact = GeometryFactory.Default; IGeometry result = computeTriangles ? builder.GetTriangles(geomFact) : builder.GetEdges(geomFact); Assert.IsNotNull(result); IGeometry expectedEdges = reader.Read(expectedWKT); result.Normalize(); expectedEdges.Normalize(); Assert.IsTrue(expectedEdges.EqualsExact(result, ComparisonTolerance)); }
private void Triangulation() { var builder = new NTS.Triangulate.ConformingDelaunayTriangulationBuilder(); //var builder = new NTS.Triangulate.DelaunayTriangulationBuilder(); builder.SetSites(this.SquarePyramid); var triangles = builder.GetTriangles(new NTS.Geometries.GeometryFactory()); Debug.Log($"Triangulation in NTS over: {triangles.ToString()}"); // Arrange triangles in a proper way this.vertices = new Vector3[] { new Vector3(0, 0, 0), new Vector3(2, 0, 0), new Vector3(0, 2, 0), new Vector3(2, 2, 0), new Vector3(1, 1, 2) }; var utriangles = new List <int>(); for (int i = 0, l = triangles.Count; i < l; i++) { Geo.Geometries.IGeometry triangle = triangles[i]; var points = triangle.Coordinates; for (int j = 0; j < points.Length - 1; j++) // The triangulator generates a loop, the last is the same as the first, we remove it { var stringPoint = $"{points[j].X} {points[j].Y} {points[j].Z}"; utriangles.Add(this.dict[stringPoint]); } } this.triangles = utriangles.ToArray(); this.printStatus(); }
private static IGeometry ConformingDelaunayTrianglesWithTolerance(IGeometry sites, IGeometry constraints, double tol) { ConformingDelaunayTriangulationBuilder builder = new ConformingDelaunayTriangulationBuilder(); builder.SetSites(sites); builder.Constraints = constraints; builder.Tolerance = tol; IGeometryFactory geomFact = sites != null ? sites.Factory : constraints.Factory; IGeometry tris = builder.GetTriangles(geomFact); return tris; }
public static IGeometry conformingDelaunayTriangles(IGeometry sites, IGeometry constraints) { ConformingDelaunayTriangulationBuilder builder = new ConformingDelaunayTriangulationBuilder(); builder.SetSites(sites); builder.Constraints = constraints; builder.Tolerance = TRIANGULATION_TOLERANCE; var geomFact = sites != null ? sites.Factory : constraints.Factory; IGeometry tris = builder.GetTriangles(geomFact); return tris; }
public void Test2() { IGeometry geom = _wktReader.Read("POLYGON ((0 0, 0 10, 4 10, 4 8, 6 8, 6 10, 10 10, 10 0, 0 0))"); ConformingDelaunayTriangulationBuilder dtb = new ConformingDelaunayTriangulationBuilder(); dtb.SetSites(geom); IMultiLineString resultEdges = dtb.GetEdges(geom.Factory); Console.WriteLine(resultEdges.AsText()); IGeometryCollection resultTriangles = dtb.GetTriangles(geom.Factory); Console.WriteLine(resultTriangles.AsText()); }
public void TestInvertedItalicNTSConforming() { AffineTransformationBuilder atb = new AffineTransformationBuilder( new Coordinate(0, 0), new Coordinate(50, 0), new Coordinate(0, 100), new Coordinate(0, 0), new Coordinate(50, 0), new Coordinate(20, 100)); IGeometry geom = _wktReader.Read(NTS); //Apply italic effect geom = atb.GetTransformation().Transform(geom); Console.WriteLine(geom.AsText()); IGeometry constraint = ((IPolygon)geom).GetInteriorRingN(0); constraint = geom.Factory.CreatePolygon((ILinearRing)constraint, null); constraint = ((IPolygon)constraint.Buffer(-1)).Shell; Coordinate[] coordinates = constraint.Coordinates; coordinates[coordinates.Length - 1].X -= 1e-7; coordinates[coordinates.Length - 1].Y -= 1e-7; constraint = geom.Factory.CreateLineString(coordinates); Console.WriteLine(constraint.AsText()); //Setup ConformingDelaunayTriangulationBuilder dtb = new ConformingDelaunayTriangulationBuilder { Constraints = constraint }; dtb.SetSites(geom); IMultiLineString result = dtb.GetEdges(geom.Factory); Console.WriteLine(result.AsText()); }