From 63f03b229cf9a1e351dcd00b654266007c10a606 Mon Sep 17 00:00:00 2001 From: localhorst Date: Mon, 1 Apr 2019 22:57:19 +0200 Subject: [PATCH] own class for preview --- .../java/com/ThreeDtest/application/Main.java | 161 +++--------------- .../application/Texture3DPreview.java | 131 ++++++++++++++ .../compile/default-compile/createdFiles.lst | 2 +- 3 files changed, 159 insertions(+), 135 deletions(-) create mode 100644 src/main/java/com/ThreeDtest/application/Texture3DPreview.java diff --git a/src/main/java/com/ThreeDtest/application/Main.java b/src/main/java/com/ThreeDtest/application/Main.java index 3cdd28c..6a5354c 100644 --- a/src/main/java/com/ThreeDtest/application/Main.java +++ b/src/main/java/com/ThreeDtest/application/Main.java @@ -1,37 +1,10 @@ package main.java.com.ThreeDtest.application; -import javafx.animation.Interpolator; -import javafx.animation.RotateTransition; import javafx.application.Application; -import javafx.beans.value.ChangeListener; -import javafx.beans.value.ObservableValue; -import javafx.event.ActionEvent; -import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.geometry.Insets; -import javafx.geometry.Pos; import javafx.stage.Stage; -import javafx.util.Duration; -import javafx.scene.Group; -import javafx.scene.Node; -import javafx.scene.PointLight; import javafx.scene.Scene; import javafx.scene.SceneAntialiasing; -import javafx.scene.control.Alert; -import javafx.scene.control.Alert.AlertType; -import javafx.scene.control.Button; -import javafx.scene.control.MenuItem; -import javafx.scene.control.Slider; -import javafx.scene.image.Image; -import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.Background; -import javafx.scene.layout.BackgroundFill; import javafx.scene.layout.BorderPane; -import javafx.scene.layout.StackPane; -import javafx.scene.paint.Color; -import javafx.scene.paint.PhongMaterial; -import javafx.scene.shape.Box; -import javafx.scene.transform.Rotate; public class Main extends Application { @@ -46,123 +19,43 @@ public class Main extends Application Scene scene = new Scene(demoPane, 600, 600, true, SceneAntialiasing.BALANCED); - StackPane previewPane = new StackPane(); // Stackpane in - // textur3dPreview + //Create new Preview + Texture3DPreview preview = new Texture3DPreview(500, 500); + + // Get the generated 3D preview as StackPane + demoPane.setCenter(preview.getPreviewPane()); - previewPane.setMaxWidth(300); - previewPane.setMaxHeight(300); - - previewPane.setStyle( - "-fx-background-color: #383838;-fx-border-color: red;"); - - Box myBox = new Box(100, 100, 100); - - final String DIFFUSE_MAP = "https://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/D%C3%BClmen%2C_Kreuzkapelle_--_2014_--_2731.jpg/640px-D%C3%BClmen%2C_Kreuzkapelle_--_2014_--_2731.jpg"; - - Image texture = new Image(DIFFUSE_MAP); - - PhongMaterial textureMaterial = new PhongMaterial(); - - textureMaterial.setDiffuseMap(texture); - - myBox.setMaterial(textureMaterial); - - PointLight pointLightFront = new PointLight(Color.WHITE); - pointLightFront.setTranslateX(100); - pointLightFront.setTranslateY(100); - pointLightFront.setTranslateZ(-300); - pointLightFront.setRotate(90); - - PointLight pointLightSky = new PointLight(Color.WHITE); - pointLightSky.setTranslateX(0); - pointLightSky.setTranslateY(-600); - pointLightSky.setTranslateZ(0); - pointLightSky.setRotate(90); - - PointLight pointLightGround = new PointLight(Color.WHITE); - pointLightSky.setTranslateX(0); - pointLightSky.setTranslateY(600); - pointLightSky.setTranslateZ(0); - pointLightSky.setRotate(90); - - previewPane.getChildren().add(pointLightFront); - previewPane.getChildren().add(pointLightSky); - previewPane.getChildren().add(pointLightGround); - - StackPane.setAlignment(pointLightFront, Pos.CENTER); - StackPane.setAlignment(pointLightSky, Pos.CENTER); - StackPane.setAlignment(pointLightGround, Pos.CENTER); - - Rotate rxBox = new Rotate(0, 0, 0, 0, Rotate.X_AXIS); - Rotate ryBox = new Rotate(0, 0, 0, 0, Rotate.Y_AXIS); - Rotate rzBox = new Rotate(0, 0, 0, 0, Rotate.Z_AXIS); - rxBox.setAngle(30); - ryBox.setAngle(50); - rzBox.setAngle(30); - myBox.getTransforms().addAll(rxBox, ryBox, rzBox); - - StackPane.setAlignment(myBox, Pos.CENTER); - - rotateAroundYAxis(myBox).play(); - - previewPane.getChildren().add(myBox); - - // demoPane.setCenter(previewPane); - - Slider resSlider = new Slider(); - - resSlider.setMin(0); - resSlider.setMax(400); - resSlider.setValue(200); - resSlider.setBlockIncrement(10); - resSlider.setShowTickLabels(true); - resSlider.setShowTickMarks(true); - resSlider.setMajorTickUnit(50); - resSlider.setMinorTickCount(5); - resSlider.setBlockIncrement(10); - - // Adding Listener to value property. - resSlider.valueProperty().addListener(new ChangeListener() { - - @Override - public void changed(ObservableValue observable, // - Number oldValue, Number newValue) - { - - System.out.println("New value: " + newValue); - } - }); - - BorderPane.setAlignment(resSlider, Pos.TOP_LEFT); - BorderPane.setMargin(resSlider, new Insets(12, 12, 12, 12)); - demoPane.setBottom(resSlider); - - StackPane.setAlignment(previewPane, Pos.CENTER); + /* + * + * Slider resSlider = new Slider(); + * + * resSlider.setMin(0); resSlider.setMax(400); resSlider.setValue(200); + * resSlider.setBlockIncrement(10); resSlider.setShowTickLabels(true); + * resSlider.setShowTickMarks(true); resSlider.setMajorTickUnit(50); + * resSlider.setMinorTickCount(5); resSlider.setBlockIncrement(10); + * + * // Adding Listener to value property. + * resSlider.valueProperty().addListener(new ChangeListener() { + * + * @Override public void changed(ObservableValue + * observable, // Number oldValue, Number newValue) { + * + * System.out.println("New value: " + newValue); } }); + * + * BorderPane.setAlignment(resSlider, Pos.TOP_LEFT); + * BorderPane.setMargin(resSlider, new Insets(12, 12, 12, 12)); + * demoPane.setBottom(resSlider); + * + */ primaryStage.setScene(scene); primaryStage.show(); - System.out.println(previewPane.getHeight()); - System.out.println(previewPane.getWidth()); - } catch (Exception e) { e.printStackTrace(); } } - private RotateTransition rotateAroundYAxis(Node node) - { - RotateTransition rotate = new RotateTransition(Duration.seconds(36), - node); - rotate.setAxis(Rotate.Y_AXIS); - rotate.setFromAngle(360); - rotate.setToAngle(0); - rotate.setInterpolator(Interpolator.LINEAR); - rotate.setCycleCount(RotateTransition.INDEFINITE); - - return rotate; - } - public static void main(String[] args) { launch(args); diff --git a/src/main/java/com/ThreeDtest/application/Texture3DPreview.java b/src/main/java/com/ThreeDtest/application/Texture3DPreview.java new file mode 100644 index 0000000..0a8d489 --- /dev/null +++ b/src/main/java/com/ThreeDtest/application/Texture3DPreview.java @@ -0,0 +1,131 @@ +package main.java.com.ThreeDtest.application; + +import javafx.animation.Interpolator; +import javafx.animation.RotateTransition; +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.PointLight; +import javafx.scene.image.Image; +import javafx.scene.layout.StackPane; +import javafx.scene.paint.Color; +import javafx.scene.paint.PhongMaterial; +import javafx.scene.shape.Box; +import javafx.scene.shape.CullFace; +import javafx.scene.transform.Rotate; +import javafx.util.Duration; + +public class Texture3DPreview +{ + + private StackPane previewPane; + + public Texture3DPreview(int height, int width) + { + + previewPane = new StackPane(); // Stackpane in + // textur3dPreview + + previewPane.setMaxWidth(width); + previewPane.setMaxHeight(height); + + previewPane + .setStyle("-fx-background-color: #383838;-fx-border-color: red;"); + + int boxSize = calcBoxSize(height, width); + + Box myBox = new Box(boxSize, boxSize, boxSize); + + myBox.setCullFace(CullFace.NONE); + + final String DIFFUSE_MAP = "https://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/D%C3%BClmen%2C_Kreuzkapelle_--_2014_--_2731.jpg/640px-D%C3%BClmen%2C_Kreuzkapelle_--_2014_--_2731.jpg"; + + Image texture = new Image(DIFFUSE_MAP); + + PhongMaterial textureMaterial = new PhongMaterial(); + + textureMaterial.setDiffuseMap(texture); + + myBox.setMaterial(textureMaterial); + + PointLight pointLightFront = new PointLight(Color.WHITE); + pointLightFront.setTranslateX(100); + pointLightFront.setTranslateY(100); + pointLightFront.setTranslateZ(-300); + pointLightFront.setRotate(90); + + PointLight pointLightSky = new PointLight(Color.WHITE); + pointLightSky.setTranslateX(0); + pointLightSky.setTranslateY(-600); + pointLightSky.setTranslateZ(0); + pointLightSky.setRotate(90); + + PointLight pointLightGround = new PointLight(Color.WHITE); + pointLightSky.setTranslateX(0); + pointLightSky.setTranslateY(600); + pointLightSky.setTranslateZ(0); + pointLightSky.setRotate(90); + + previewPane.getChildren().add(pointLightFront); + previewPane.getChildren().add(pointLightSky); + previewPane.getChildren().add(pointLightGround); + + StackPane.setAlignment(pointLightFront, Pos.CENTER); + StackPane.setAlignment(pointLightSky, Pos.CENTER); + StackPane.setAlignment(pointLightGround, Pos.CENTER); + + Rotate rxBox = new Rotate(0, 0, 0, 0, Rotate.X_AXIS); + Rotate ryBox = new Rotate(0, 0, 0, 0, Rotate.Y_AXIS); + Rotate rzBox = new Rotate(0, 0, 0, 0, Rotate.Z_AXIS); + rxBox.setAngle(30); + ryBox.setAngle(50); + rzBox.setAngle(30); + myBox.getTransforms().addAll(rxBox, ryBox, rzBox); + + StackPane.setAlignment(myBox, Pos.CENTER); + + myBox.setTranslateZ(-150); + + rotateAroundYAxis(myBox).play(); + + previewPane.getChildren().add(myBox); + + } + + public StackPane getPreviewPane() + { + + return previewPane; + + } + + private RotateTransition rotateAroundYAxis(Node node) + { + RotateTransition rotate = new RotateTransition(Duration.seconds(36), + node); + rotate.setAxis(Rotate.Y_AXIS); + rotate.setFromAngle(360); + rotate.setToAngle(0); + rotate.setInterpolator(Interpolator.LINEAR); + rotate.setCycleCount(RotateTransition.INDEFINITE); + + return rotate; + } + + private int calcBoxSize(int height, int width) + { + + if (height <= width) { + // height is smallest dimension + + return (int) (height / 2); + + } else { + // width is smallest dimension + + return (int) (width / 2); + + } + + } + +} diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index d9a776e..c867789 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1,3 +1,3 @@ -main/java/com/ThreeDtest/application/Main$1.class +main/java/com/ThreeDtest/application/Texture3DPreview.class main/java/com/ThreeDtest/application/Main.class main/java/com/ThreeDtest/application/JavaFX11Main.class