Как установить цвет на Java объект JCSG? [JavaFX] - PullRequest
0 голосов
/ 29 марта 2020

В настоящее время я использую библиотеку Java JCSG для создания конструктивных Solid объектов геометрии, таких как пересечения, объединения и различие между трехмерными объектами. Используя библиотеку JCSG , у меня есть следующий код для создания объектов (в данном случае куб)

private static CSG createCube(double w, double h, double d) {
            return new Cube(w, h, d).toCSG();
}

и всякий раз, когда я хочу установить цвет этого указанного c объекта CSG Я использую следующее

private static CSG color(CSG shape, Color c) {
            return shape.color(c);
}

Однако, когда я преобразовываю эти объекты в MeshView и передаю их в javafx.scene.Group, цвет по умолчанию (красный):

        Group world = new Group();
        System.out.println(this.objects.size());
        for (CSG p : this.objects) {
            var x = p.toJavaFXMesh().getAsMeshViews().get(0);

            for(Material m: p.toJavaFXMesh().getMaterials()){
                System.out.println(m.toString());

                // System.out.println(m1.getDiffuseColor().toString());
                x.setMaterial((PhongMaterial)m);
            }
            world.getChildren().add(x);
        }

        Scene scene = new Scene(world, WIDTH, HEIGHT, true);
        scene.setFill(Color.PALETURQUOISE);
        scene.setCamera(camera);

        // initMouseControl(world, scene, primaryStage);
        addEventHandlers(scene, camera);
        primaryStage.setTitle("Pane");
        primaryStage.setScene(scene);
        primaryStage.show();

Где this.objects содержит все объекты, которые я создал в другом классе.

package me.emil;

import javafx.scene.paint.Color;
import me.emil.helpers.Pane;

public class App {
    public static void main(String[] args) {
        CSGStorage singleton = CSGStorage.getInstance();
        var x = singleton.sphere(50);
        x = singleton.translate(x, 100, 0, 0);
        x = singleton.color(x, Color.YELLOW);
        singleton.addPrimitive(x);

        Pane p = new Pane();
        p.launchPane();
    }
}
...