@SuppressWarnings("unchecked")
private static Node createOrderedBorderEdgesGraphics(QuadEdgeSubdivision quadEdgeSubdivision, PlanarRegionSegmentationRawData rawData)
{
List<QuadEdgeTriangle> delaunayTriangles = QuadEdgeTriangle.createOn(quadEdgeSubdivision);
List<QuadEdge> orderedBorderEdges = SimpleConcaveHullFactory.computeIntermediateVariables(delaunayTriangles, null).getOrderedBorderEdges();
JavaFXMultiColorMeshBuilder meshBuilder = new JavaFXMultiColorMeshBuilder(new TextureColorAdaptivePalette(16));
Point3D planeOrigin = rawData.getOrigin();
Quaternion planeOrientation = rawData.getOrientation();
double startHue = 0.0;
double endHue = 240.0;
double lineStartBirghtness = 0.2;
double lineEndBirghtness = 1.0;
for (int edgeIndex = 0; edgeIndex < orderedBorderEdges.size(); edgeIndex++)
{
QuadEdge edge = orderedBorderEdges.get(edgeIndex);
Point3D dest = PolygonizerTools.toPointInWorld(edge.dest().getX(), edge.dest().getY(), planeOrigin, planeOrientation);
Point3D orig = PolygonizerTools.toPointInWorld(edge.orig().getX(), edge.orig().getY(), planeOrigin, planeOrientation);
double alpha = edgeIndex / (double) orderedBorderEdges.size();
double lineHue = (1.0 - alpha) * startHue + alpha * endHue;
Color startColor = Color.hsb(lineHue, 0.9, lineStartBirghtness);
Color endColor = Color.hsb(lineHue, 0.9, lineEndBirghtness);
meshBuilder.addLine(orig, dest, 0.002, startColor, endColor);
}
MeshView meshView = new MeshView(meshBuilder.generateMesh());
meshView.setMaterial(meshBuilder.generateMaterial());
return meshView;
}