public static Cluster getRandomCluster(Random random)
{
byte typeByte = (byte) RandomNumbers.nextInt(random, 0, Cluster.Type.values.length - 1);
byte extrusionSideByte = (byte) RandomNumbers.nextInt(random, 0, Cluster.ExtrusionSide.values.length - 1);
int numberOfRawPoints = RandomNumbers.nextInt(random, 1, 100);
int numberOfNavigableExtrusions = RandomNumbers.nextInt(random, 1, 100);
int numberOfNonNavigableExtrusions = RandomNumbers.nextInt(random, 1, 100);
RigidBodyTransform transformToWorld = EuclidCoreRandomTools.nextRigidBodyTransform(random);
List<Point3D> rawPointsInLocalExpected = new ArrayList<>();
List<Point2D> navigableExtrusionsInLocalExpected = new ArrayList<>();
List<Point2D> nonNavigableExtrusionsInLocalExpected = new ArrayList<>();
for (int i = 0; i < numberOfRawPoints; i++)
rawPointsInLocalExpected.add(EuclidCoreRandomTools.nextPoint3D(random, 100.0));
for (int i = 0; i < numberOfNavigableExtrusions; i++)
navigableExtrusionsInLocalExpected.add(EuclidCoreRandomTools.nextPoint2D(random, 100.0));
for (int i = 0; i < numberOfNonNavigableExtrusions; i++)
nonNavigableExtrusionsInLocalExpected.add(EuclidCoreRandomTools.nextPoint2D(random, 100.0));
Cluster cluster = new Cluster();
cluster.setTransformToWorld(transformToWorld);
cluster.setType(Cluster.Type.fromByte(typeByte));
cluster.setExtrusionSide(Cluster.ExtrusionSide.fromByte(extrusionSideByte));
for (int i = 0; i < numberOfRawPoints; i++)
cluster.addRawPointInLocal(rawPointsInLocalExpected.get(i));
for (int i = 0; i < numberOfNavigableExtrusions; i++)
cluster.addNavigableExtrusionInLocal(navigableExtrusionsInLocalExpected.get(i));
for (int i = 0; i < numberOfNonNavigableExtrusions; i++)
cluster.addNonNavigableExtrusionInLocal(nonNavigableExtrusionsInLocalExpected.get(i));
return cluster;
}