package at.bestsolution.efxclipse.testcases.fxgraph.shape; import javafx.beans.property.ReadOnlyDoubleWrapper; import javafx.beans.property.SimpleDoubleProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.scene.Group; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.scene.transform.Rotate; public class Cube extends Group { final Rotate rx = new Rotate(45,Rotate.X_AXIS); final Rotate ry = new Rotate(45,Rotate.Y_AXIS); final Rotate rz = new Rotate(45,Rotate.Z_AXIS); final SimpleObjectProperty<Color> color = new SimpleObjectProperty<Color>(this, "color"); final SimpleDoubleProperty size = new SimpleDoubleProperty(this, "size"); final SimpleDoubleProperty shade = new SimpleDoubleProperty(this,"shade"); public Color getColor() { return color.get(); } public double getSize() { return size.get(); } public double getShade() { return shade.get(); } public Cube(double paramSize, Color paramColor, double paramShade) { getTransforms().addAll(rz, ry, rx); this.size.set(paramSize); this.color.set(paramColor); this.shade.set(1); { Rectangle r = new Rectangle(); r.widthProperty().bind(this.size); r.heightProperty().bind(this.size); r.fillProperty().bind( DeriveColorBinding.create( color, new ReadOnlyDoubleWrapper(0.0), new ReadOnlyDoubleWrapper(1.0), new ReadOnlyDoubleWrapper(1).subtract(shade.multiply(0.5)), new ReadOnlyDoubleWrapper(1.0))); r.translateXProperty().bind(size.multiply(-0.5)); r.translateYProperty().bind(size.multiply(-0.5)); r.translateZProperty().bind(size.multiply(0.5)); getChildren().add(r); } { Rectangle r = new Rectangle(); r.widthProperty().bind(this.size); r.heightProperty().bind(this.size); r.fillProperty().bind( DeriveColorBinding.create( color, new ReadOnlyDoubleWrapper(0.0), new ReadOnlyDoubleWrapper(1.0), new ReadOnlyDoubleWrapper(1).subtract(shade.multiply(0.4)), new ReadOnlyDoubleWrapper(1.0))); r.translateXProperty().bind(size.multiply(-0.5)); r.setTranslateY(0); r.setRotationAxis(Rotate.X_AXIS); r.setRotate(90); getChildren().add(r); } { Rectangle r = new Rectangle(); r.widthProperty().bind(this.size); r.heightProperty().bind(this.size); r.fillProperty().bind( DeriveColorBinding.create( color, new ReadOnlyDoubleWrapper(0.0), new ReadOnlyDoubleWrapper(1.0), new ReadOnlyDoubleWrapper(1).subtract(shade.multiply(0.3)), new ReadOnlyDoubleWrapper(1.0))); r.translateXProperty().bind(size.multiply(-1)); r.translateYProperty().bind(size.multiply(-0.5)); r.setRotationAxis(Rotate.Y_AXIS); r.setRotate(90); getChildren().add(r); } { Rectangle r = new Rectangle(); r.widthProperty().bind(this.size); r.heightProperty().bind(this.size); r.fillProperty().bind( DeriveColorBinding.create( color, new ReadOnlyDoubleWrapper(0.0), new ReadOnlyDoubleWrapper(1.0), new ReadOnlyDoubleWrapper(1).subtract(shade.multiply(0.2)), new ReadOnlyDoubleWrapper(1.0))); r.setTranslateX(0); r.translateYProperty().bind(size.multiply(-0.5)); r.setRotationAxis(Rotate.Y_AXIS); r.setRotate(90); getChildren().add(r); } { Rectangle r = new Rectangle(); r.widthProperty().bind(this.size); r.heightProperty().bind(this.size); r.fillProperty().bind( DeriveColorBinding.create( color, new ReadOnlyDoubleWrapper(0.0), new ReadOnlyDoubleWrapper(1.0), new ReadOnlyDoubleWrapper(1).subtract(shade.multiply(0.1)), new ReadOnlyDoubleWrapper(1.0))); r.translateXProperty().bind(size.multiply(-0.5)); r.translateYProperty().bind(size.multiply(-1)); r.setRotationAxis(Rotate.X_AXIS); r.setRotate(90); getChildren().add(r); } { Rectangle r = new Rectangle(); r.widthProperty().bind(this.size); r.heightProperty().bind(this.size); r.fillProperty().bind(color); r.translateXProperty().bind(size.multiply(-0.5)); r.translateYProperty().bind(size.multiply(-0.5)); r.translateZProperty().bind(size.multiply(-0.5)); r.setRotate(90); getChildren().add(r); } } }