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));
        }
예제 #2
0
    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());


        }