package com.revolsys.elevation.cloud;
import java.util.function.Consumer;
import java.util.function.Predicate;
import com.revolsys.elevation.tin.TriangulatedIrregularNetwork;
import com.revolsys.elevation.tin.quadedge.QuadEdgeDelaunayTinBuilder;
import com.revolsys.geometry.model.BoundingBoxProxy;
import com.revolsys.geometry.model.GeometryFactory;
import com.revolsys.geometry.model.GeometryFactoryProxy;
import com.revolsys.geometry.model.Point;
public interface PointCloud<P extends Point> extends GeometryFactoryProxy, BoundingBoxProxy {
void forEachPoint(final Consumer<? super P> action);
default TriangulatedIrregularNetwork newTriangulatedIrregularNetwork() {
final GeometryFactory geometryFactory = getGeometryFactory();
final QuadEdgeDelaunayTinBuilder tinBuilder = new QuadEdgeDelaunayTinBuilder(geometryFactory);
forEachPoint((point) -> {
tinBuilder.insertVertex(point);
});
final TriangulatedIrregularNetwork tin = tinBuilder.newTriangulatedIrregularNetwork();
return tin;
}
default TriangulatedIrregularNetwork newTriangulatedIrregularNetwork(
final Predicate<? super Point> filter) {
final GeometryFactory geometryFactory = getGeometryFactory();
final QuadEdgeDelaunayTinBuilder tinBuilder = new QuadEdgeDelaunayTinBuilder(geometryFactory);
forEachPoint((point) -> {
if (filter.test(point)) {
tinBuilder.insertVertex(point);
}
});
final TriangulatedIrregularNetwork tin = tinBuilder.newTriangulatedIrregularNetwork();
return tin;
}
}