6 package eu.mihosoft.vrl.v3d.ext.quickhull3d;
8 import eu.mihosoft.vrl.v3d.CSG;
9 import eu.mihosoft.vrl.v3d.Vector3d;
10 import eu.mihosoft.vrl.v3d.Polygon;
11 import eu.mihosoft.vrl.v3d.PropertyStorage;
12 import java.util.ArrayList;
13 import java.util.List;
26 throw new AssertionError(
"Don't instantiate me!",
null);
37 List<Vector3d> plist =
new ArrayList<>();
38 if (Vector3d.class.isInstance(points.get(0))) {
39 points.stream().forEach((pobj) -> plist.add((Vector3d) pobj));
42 if (
CSG.class.isInstance(points.get(0))) {
43 for (Object csg : points)
44 ((
CSG) csg).getPolygons().forEach((p) -> p.vertices.forEach((v) -> plist.add(v.pos)));
48 throw new RuntimeException(
"Objects in list are of unknown type: " + points.get(0).getClass().getName()+
"\r\nExpected CSG or Vector3d ");
62 Point3d[] hullPoints = points.stream().map((vec) ->
new Point3d(vec.x, vec.y, vec.z)).toArray(
Point3d[]::
new);
64 QuickHull3D
hull =
new QuickHull3D();
65 hull.build(hullPoints);
68 int[][] faces =
hull.getFaces();
70 List<Polygon> polygons =
new ArrayList<>();
72 List<Vector3d> vertices =
new ArrayList<>();
74 for (
int[] verts : faces) {
77 vertices.add(points.get(
hull.getVertexPointIndices()[i]));
99 List<Vector3d> points =
new ArrayList<>(csg.
getPolygons().size() * 3);
101 csg.
getPolygons().forEach((p) -> p.vertices.forEach((v) -> points.add(v.pos)));
103 return hull(points, storage);
115 List<Vector3d> points =
new ArrayList<>();
116 for (
CSG csg : csgList)
117 csg.getPolygons().forEach((p) -> p.vertices.forEach((v) -> points.add(v.pos)));
List< Polygon > getPolygons()
static CSG fromPolygons(List< Polygon > polygons)
static Polygon fromPoints(List< Vector3d > points, PropertyStorage shared)
static CSG hull(CSG... csgList)
static CSG hull(List<?> points)
static CSG hull(CSG csg, PropertyStorage storage)
static CSG hull(List< Vector3d > points, PropertyStorage storage)