private Node createBorderTrianglesGraphics(PlanarRegionSegmentationRawData rawData, ConcaveHullFactoryResult concaveHullFactoryResult) { JavaFXMultiColorMeshBuilder meshBuilder = new JavaFXMultiColorMeshBuilder(new TextureColorAdaptivePalette(512)); Point3D planeOrigin = rawData.getOrigin(); Vector3D planeNormal = rawData.getNormal(); for (ConcaveHullVariables intermediateVariables : concaveHullFactoryResult.getIntermediateVariables()) { Set<QuadEdgeTriangle> borderTriangles = intermediateVariables.getBorderTriangles(); for (QuadEdgeTriangle borderTriangle : borderTriangles) { List<Point2D> triangleVerticesLocal = Arrays.stream(borderTriangle.getVertices()).map(v -> new Point2D(v.getX(), v.getY())) .collect(Collectors.toList()); List<Point3D> triangleVerticesWorld = PolygonizerTools.toPointsInWorld(triangleVerticesLocal, planeOrigin, planeNormal); double hue = 360.0 * random.nextDouble(); double saturation = 0.8 * random.nextDouble() + 0.1; double brightness = 0.9; meshBuilder.addPolyon(triangleVerticesWorld, Color.hsb(hue, saturation, brightness)); } } MeshView trianglesMeshView = new MeshView(meshBuilder.generateMesh()); trianglesMeshView.setMaterial(meshBuilder.generateMaterial()); return trianglesMeshView; }
private Node createDelaunayTriangulationGraphics(PlanarRegionSegmentationRawData rawData, ConcaveHullFactoryResult concaveHullFactoryResult) { JavaFXMultiColorMeshBuilder meshBuilder = new JavaFXMultiColorMeshBuilder(new TextureColorAdaptivePalette(512)); Point3D planeOrigin = rawData.getOrigin(); Vector3D planeNormal = rawData.getNormal(); List<QuadEdgeTriangle> allTriangles = concaveHullFactoryResult.getAllTriangles(); for (QuadEdgeTriangle triangle : allTriangles) { List<Point2D> triangleVerticesLocal = Arrays.stream(triangle.getVertices()).map(v -> new Point2D(v.getX(), v.getY())).collect(Collectors.toList()); triangleVerticesLocal.forEach(vertex -> { vertex.setX(vertex.getX() * scaleX); vertex.setY(vertex.getY() * scaleY); }); List<Point3D> triangleVerticesWorld = PolygonizerTools.toPointsInWorld(triangleVerticesLocal, planeOrigin, planeNormal); double hue = 360.0 * random.nextDouble(); double saturation = 0.8 * random.nextDouble() + 0.1; double brightness = 0.9; meshBuilder.addPolyon(triangleVerticesWorld, Color.hsb(hue, saturation, brightness)); } MeshView trianglesMeshView = new MeshView(meshBuilder.generateMesh()); trianglesMeshView.setMaterial(meshBuilder.generateMaterial()); return trianglesMeshView; }
System.out.println(intersections); colorMeshBuilder.addPolyon(intersections, Color.DARKCYAN); for (int index = 0; index < intersections.size(); index++) colorMeshBuilder.addCube(0.01, intersections.get(index), Color.FIREBRICK);
private Node createPriorityQueueGraphics(PlanarRegionSegmentationRawData rawData, ConcaveHullFactoryResult concaveHullFactoryResult) { JavaFXMultiColorMeshBuilder meshBuilder = new JavaFXMultiColorMeshBuilder(new TextureColorAdaptivePalette(512)); Point3D planeOrigin = rawData.getOrigin(); Quaternion planeOrientation = rawData.getOrientation(); Color regionColor = OcTreeMeshBuilder.getRegionColor(rawData.getRegionId()); for (ConcaveHullVariables intermediateVariables : concaveHullFactoryResult.getIntermediateVariables()) { PriorityQueue<Pair<QuadEdge, QuadEdgeTriangle>> queue = intermediateVariables.getSortedByLengthQueue(); for (Pair<QuadEdge, QuadEdgeTriangle> edgeAndTriangle : queue) { QuadEdge edge = edgeAndTriangle.getLeft(); Point3D dest = PolygonizerTools.toPointInWorld(edge.dest().getX(), edge.dest().getY(), planeOrigin, planeOrientation); Point3D orig = PolygonizerTools.toPointInWorld(edge.orig().getX(), edge.orig().getY(), planeOrigin, planeOrientation); boolean isEdgeTooLong = dest.distance(orig) > parameters.getEdgeLengthThreshold(); Color lineColor = Color.hsb(regionColor.getHue(), regionColor.getSaturation(), isEdgeTooLong ? 0.25 : regionColor.getBrightness()); meshBuilder.addLine(dest, orig, 0.0015, lineColor); QuadEdgeTriangle triangle = edgeAndTriangle.getRight(); List<Point2D> triangleVerticesLocal = Arrays.stream(triangle.getVertices()).map(v -> new Point2D(v.getX(), v.getY())).collect(Collectors.toList()); List<Point3D> triangleVerticesWorld = PolygonizerTools.toPointsInWorld(triangleVerticesLocal, planeOrigin, planeOrientation); double hue = 360.0 * random.nextDouble(); double saturation = 0.8 * random.nextDouble() + 0.1; double brightness = 0.9; meshBuilder.addPolyon(triangleVerticesWorld, Color.hsb(hue, saturation, brightness)); } } MeshView trianglesMeshView = new MeshView(meshBuilder.generateMesh()); trianglesMeshView.setMaterial(meshBuilder.generateMaterial()); return trianglesMeshView; }
intersectionPlaneBoxCalculator.setPlane(pointOnPlane, planeNormal); intersectionPlaneBoxCalculator.computeIntersections(plane); occupiedMeshBuilder.addPolyon(plane, normalBasedColor); if (SHOW_HIT_LOCATIONS) occupiedMeshBuilder.addCube(0.01, pointOnPlane, DEFAULT_COLOR);
intersectionPlaneBoxCalculator.setPlane(pointOnPlane, planeNormal); intersectionPlaneBoxCalculator.computeIntersections(plane); occupiedMeshBuilder.addPolyon(plane, normalBasedColor); if (SHOW_HIT_LOCATIONS) occupiedMeshBuilder.addCube(0.01, pointOnPlane, DEFAULT_COLOR);