public static ConcaveHullFactoryResult createConcaveHull(List<Point2D> pointCloud2d, List<LineSegment2D> lineConstraints, ConcaveHullFactoryParameters parameters)
{
if (pointCloud2d.size() <= 3)
return null;
MultiPoint sites = filterAndCreateMultiPoint(pointCloud2d, lineConstraints, 0.01);
MultiLineString constraintSegments = createMultiLineString(lineConstraints);
ConcaveHullFactoryResult result = new ConcaveHullFactoryResult();
ConcaveHullVariables initialVariables = initializeTriangulation(sites, constraintSegments, result);
List<ConcaveHullVariables> variablesList = computeConcaveHullBorderEdgesRecursive(parameters, initialVariables);
result.intermediateVariables.addAll(variablesList);
for (ConcaveHullVariables variables : result.intermediateVariables)
{
ConcaveHull concaveHull = computeConcaveHull(variables.getOrderedBorderEdges());
if (concaveHull != null)
{
concaveHull.ensureClockwiseOrdering();
result.concaveHullCollection.add(concaveHull);
}
}
return result;
}