/*
* Copyright (c) 2016 Vivid Solutions.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
*
* http://www.eclipse.org/org/documents/edl-v10.php.
*/
package org.locationtech.jtstest.function;
import org.locationtech.jts.geom.*;
import org.locationtech.jts.triangulate.*;
import org.locationtech.jts.triangulate.quadedge.LocateFailureException;
import org.locationtech.jts.triangulate.quadedge.QuadEdgeSubdivision;
import org.locationtech.jtstest.util.*;
public class TriangulationFunctions
{
private static final double TRIANGULATION_TOLERANCE = 0.0;
public static Geometry delaunayEdges(Geometry geom)
{
DelaunayTriangulationBuilder builder = new DelaunayTriangulationBuilder();
builder.setSites(geom);
builder.setTolerance(TRIANGULATION_TOLERANCE);
Geometry edges = builder.getEdges(geom.getFactory());
return edges;
}
public static Geometry delaunayTriangles(Geometry geom)
{
DelaunayTriangulationBuilder builder = new DelaunayTriangulationBuilder();
builder.setSites(geom);
builder.setTolerance(TRIANGULATION_TOLERANCE);
Geometry tris = builder.getTriangles(geom.getFactory());
return tris;
}
public static Geometry delaunayEdgesWithTolerance(Geometry geom, double tolerance)
{
DelaunayTriangulationBuilder builder = new DelaunayTriangulationBuilder();
builder.setSites(geom);
builder.setTolerance(tolerance);
Geometry edges = builder.getEdges(geom.getFactory());
return edges;
}
public static Geometry delaunayTrianglesWithTolerance(Geometry geom, double tolerance)
{
DelaunayTriangulationBuilder builder = new DelaunayTriangulationBuilder();
builder.setSites(geom);
builder.setTolerance(tolerance);
Geometry tris = builder.getTriangles(geom.getFactory());
return tris;
}
public static Geometry delaunayTrianglesWithToleranceNoError(Geometry geom, double tolerance)
{
DelaunayTriangulationBuilder builder = new DelaunayTriangulationBuilder();
builder.setSites(geom);
builder.setTolerance(tolerance);
try {
Geometry tris = builder.getTriangles(geom.getFactory());
return tris;
}
catch (LocateFailureException ex) {
System.out.println(ex);
// ignore this exception and drop thru
}
/**
* Get the triangles created up until the error
*/
Geometry tris = builder.getSubdivision().getTriangles(geom.getFactory());
return tris;
}
public static Geometry voronoiDiagram(Geometry sitesGeom, Geometry clipGeom)
{
VoronoiDiagramBuilder builder = new VoronoiDiagramBuilder();
builder.setSites(sitesGeom);
if (clipGeom != null)
builder.setClipEnvelope(clipGeom.getEnvelopeInternal());
builder.setTolerance(TRIANGULATION_TOLERANCE);
Geometry diagram = builder.getDiagram(sitesGeom.getFactory());
return diagram;
}
public static Geometry voronoiDiagramWithData(Geometry sitesGeom, Geometry clipGeom)
{
GeometryDataUtil.setComponentDataToIndex(sitesGeom);
VertexTaggedGeometryDataMapper mapper = new VertexTaggedGeometryDataMapper();
mapper.loadSourceGeometries(sitesGeom);
VoronoiDiagramBuilder builder = new VoronoiDiagramBuilder();
builder.setSites(mapper.getCoordinates());
if (clipGeom != null)
builder.setClipEnvelope(clipGeom.getEnvelopeInternal());
builder.setTolerance(TRIANGULATION_TOLERANCE);
Geometry diagram = builder.getDiagram(sitesGeom.getFactory());
mapper.transferData(diagram);
return diagram;
}
public static Geometry conformingDelaunayEdges(Geometry sites, Geometry constraints)
{
return conformingDelaunayEdgesWithTolerance(sites, constraints, TRIANGULATION_TOLERANCE);
}
public static Geometry conformingDelaunayEdgesWithTolerance(Geometry sites, Geometry constraints, double tol)
{
ConformingDelaunayTriangulationBuilder builder = new ConformingDelaunayTriangulationBuilder();
builder.setSites(sites);
builder.setConstraints(constraints);
builder.setTolerance(tol);
GeometryFactory geomFact = sites != null ? sites.getFactory() : constraints.getFactory();
Geometry tris = builder.getEdges(geomFact);
return tris;
}
public static Geometry conformingDelaunayTriangles(Geometry sites, Geometry constraints)
{
return conformingDelaunayTrianglesWithTolerance(sites, constraints, TRIANGULATION_TOLERANCE);
}
public static Geometry conformingDelaunayTrianglesWithTolerance(Geometry sites, Geometry constraints, double tol)
{
ConformingDelaunayTriangulationBuilder builder = new ConformingDelaunayTriangulationBuilder();
builder.setSites(sites);
builder.setConstraints(constraints);
builder.setTolerance(tol);
GeometryFactory geomFact = sites != null ? sites.getFactory() : constraints.getFactory();
Geometry tris = builder.getTriangles(geomFact);
return tris;
}
}