Compare commits

..

7 Commits

Author SHA1 Message Date
c4291c2746 2024-04-01 2024-04-01 20:11:09 +09:00
a2349837be 2023-02-28T02:14:14 2023-02-28 02:14:14 +09:00
00b8ccc689 2021-08-22 2021-08-22 17:27:23 +09:00
fc3b0e5de8 Merge remote-tracking branch 'origin/main' into main 2021-08-22 17:22:43 +09:00
a3f4fec8b6 2021-08-22 2021-08-22 17:22:34 +09:00
Elex
d7ff1e68a7 Create LICENSE 2021-08-22 17:21:47 +09:00
Elex
6dd1d5bd69 Update settings.gradle.kts 2021-08-22 16:56:19 +09:00
38 changed files with 653 additions and 99 deletions

1
.gitignore vendored
View File

@@ -3,3 +3,4 @@
/buildSrc/build/
/.idea/
/build/
/**/build/

29
LICENSE Normal file
View File

@@ -0,0 +1,29 @@
BSD 3-Clause License
Copyright (c) 2021, Elex
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

6
README.md Normal file
View File

@@ -0,0 +1,6 @@
# JavaFX Examples
------
developed by Elex
https://www.elex-project.com/

View File

@@ -1,10 +0,0 @@
plugins {
id("elex-application")
}
application{
mainClass.set("com.elex_project.sample.Application")
}
dependencies {
}

View File

@@ -1 +0,0 @@
package com.elex_project.sample;

View File

@@ -1,14 +1,31 @@
/*
* JavaFx Examples
*
* Copyright (c) 2021. Elex. All Rights Reserved.
* https://www.elex-project.com/
*/
buildscript {
repositories {
maven {
url = uri("https://repository.elex-project.com/repository/maven")
name = "Nexus 3 Repository"
url = uri(project.findProperty("repo.url") as String)
credentials {
username = project.findProperty("repo.username") as String
password = project.findProperty("repo.password") as String
}
}
}
}
dependencies {
classpath ("com.jaredsburrows:gradle-license-plugin:0.8.90")
}
}
plugins {
id("com.github.ben-manes.versions") version "0.39.0"
base
id("com.github.ben-manes.versions") version "0.51.0"
}
subprojects{
group = "com.elex-project"
version = "1.0-SNAPSHOT"
description = ""//todo
}

View File

@@ -1,3 +1,10 @@
/*
* JavaFx Examples
*
* Copyright (c) 2021. Elex. All Rights Reserved.
* https://www.elex-project.com/
*/
plugins{
`kotlin-dsl`
}

View File

@@ -1,7 +1,7 @@
plugins {
id("elex-base")
application
}
tasks.jar {
@@ -10,8 +10,8 @@ tasks.jar {
"Implementation-Title" to project.name,
"Implementation-Version" to project.version,
"Implementation-Vendor" to "ELEX co.,pte.",
"Main-Class" to application.mainClass,
"Automatic-Module-Name" to "com.elex_project.${project.name}"
"Main-Class" to application.mainClass
))
}
}

View File

@@ -2,21 +2,36 @@ plugins {
java
}
group = "com.elex-project"
version = "1.0-SNAPSHOT"
description = ""//todo
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
implementation("org.slf4j:slf4j-api:2.1.0-alpha1")
implementation("org.jetbrains:annotations:24.1.0")
compileOnly("org.projectlombok:lombok:1.18.32")
annotationProcessor("org.projectlombok:lombok:1.18.32")
testAnnotationProcessor("org.projectlombok:lombok:1.18.32")
testImplementation("ch.qos.logback:logback-classic:1.5.3")
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.2")
}
repositories {
maven {
url = uri("https://repository.elex-project.com/repository/maven")
name = "Nexus 3 Repository"
url = uri(project.findProperty("repo.url") as String)
credentials {
username = project.findProperty("repo.username") as String
password = project.findProperty("repo.password") as String
}
}
}
java {
withSourcesJar()
withJavadocJar()
sourceCompatibility = org.gradle.api.JavaVersion.VERSION_1_8
targetCompatibility = org.gradle.api.JavaVersion.VERSION_1_8
sourceCompatibility = org.gradle.api.JavaVersion.VERSION_17
targetCompatibility = org.gradle.api.JavaVersion.VERSION_17
}
configurations {
@@ -51,16 +66,4 @@ tasks.javadoc {
(options as StandardJavadocDocletOptions).docEncoding = "UTF-8"
}
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
implementation("org.slf4j:slf4j-api:1.7.30")
implementation("org.jetbrains:annotations:21.0.1")
compileOnly("org.projectlombok:lombok:1.18.20")
annotationProcessor("org.projectlombok:lombok:1.18.20")
testAnnotationProcessor("org.projectlombok:lombok:1.18.20")
testImplementation("ch.qos.logback:logback-classic:1.2.3")
testImplementation("org.junit.jupiter:junit-jupiter:5.7.0")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0")
}

View File

@@ -1,5 +1,3 @@
import gradle.kotlin.dsl.accessors._496219b122f87f8abbd64d1094d3f5b6.jar
plugins {
id ("elex-base")
`java-library`
@@ -19,6 +17,7 @@ publishing {
publications {
create<MavenPublication>("mavenJava") {
from(components["java"])
artifactId = rootProject.name
pom {
// todo
name.set("${rootProject.name} ${project.name}")
@@ -37,7 +36,7 @@ publishing {
license {
// todo
name.set("Apache License 2.0")
url.set("https://github.com/elex-project/${rootProject.name}/blob/main/LICENSE")
url.set("https://git.elex-project.com/elex/${rootProject.name}/blob/main/LICENSE")
comments.set("")
}
}
@@ -51,7 +50,7 @@ publishing {
organizationUrl.set("https://www.elex-project.com/")
roles.set(arrayListOf("Developer", "CEO"))
timezone.set("Asia/Seoul")
properties.set(mapOf("" to ""))
//properties.set(mapOf("" to ""))
}
}
contributors {
@@ -63,9 +62,9 @@ publishing {
}
scm {
// todo
connection.set("scm:git:https://github.com/elex-project/${rootProject.name}.git")
developerConnection.set("scm:git:https://github.com/elex-project/${rootProject.name}.git")
url.set("https://github.com/elex-project/${rootProject.name}/")
connection.set("scm:git:https://git.elex-project.com/elex/${rootProject.name}.git")
developerConnection.set("scm:git:https://git.elex-project.com/elex/${rootProject.name}.git")
url.set("https://git.elex-project.com/elex/${rootProject.name}/")
}
}
}
@@ -74,8 +73,8 @@ publishing {
repositories {
maven {
name = "mavenElex"
val urlRelease = uri("https://repository.elex-project.com/repository/maven-releases")
val urlSnapshot = uri("https://repository.elex-project.com/repository/maven-snapshots")
val urlRelease = uri(project.findProperty("repo.release.url") as String)
val urlSnapshot = uri(project.findProperty("repo.snapshot.url") as String)
url = if (version.toString().endsWith("SNAPSHOT")) urlSnapshot else urlRelease
// Repository credential, Must be defined in ~/.gradle/gradle.properties
credentials {
@@ -83,14 +82,7 @@ publishing {
password = project.findProperty("repo.password") as String
}
}
maven { //todo
name = "mavenGithub"
url = uri("https://maven.pkg.github.com/elex-project/${rootProject.name}")
credentials {
username = project.findProperty("github.username") as String
password = project.findProperty("github.token") as String
}
}
}
}

View File

@@ -0,0 +1,30 @@
plugins {
id("elex-application")
idea
id("org.openjfx.javafxplugin") version "0.1.0"
id("org.beryx.jlink") version "3.0.1"
}
application {
mainClass.set("kr.pe.elex.examples.components.HelloWorldApplication")
// mainModule.set("kr.pe.elex.examples.components")
}
javafx {
version = "23-ea+3"
modules = listOf("javafx.controls", "javafx.fxml")
}
jlink {
launcher {
name = project.name
}
}
idea{
module {
isDownloadJavadoc=true
isDownloadSources=true
}
}
dependencies {
}

View File

@@ -0,0 +1,77 @@
/*
* Copyright (c) 2024. Elex. All Rights Reesrved.
* https://www.elex-project.com/
*/
package kr.pe.elex.examples.components;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class FormApplication extends Application {
private Pane contentPane() {
final GridPane rootPanel = new GridPane();
final Text heading = new Text("Log In ");
heading.setFont(Font.font("Serif", FontWeight.BOLD, 16));
final Label lblId = new Label("User Name");
final TextField txtId = new TextField();
final Label lblPassword = new Label("Password");
final PasswordField txtPassword = new PasswordField();
final Button btn1 = new Button("Login");
final HBox hBox = new HBox();
hBox.setAlignment(Pos.CENTER_RIGHT);
hBox.setPadding(new Insets(4,4,4,4));
hBox.getChildren().add(btn1);
rootPanel.add(heading, 0,0,2,1);
rootPanel.add(lblId, 0,1);
rootPanel.add(txtId,1,1);
rootPanel.add(lblPassword, 0,2);
rootPanel.add(txtPassword,1,2);
rootPanel.add(hBox, 1,3,2,1);
rootPanel.setAlignment(Pos.CENTER);
rootPanel.setHgap(4);
rootPanel.setVgap(4);
rootPanel.setPadding(new Insets(16,16,16,16));
btn1.setOnAction(event -> {
System.out.println(txtId.getText());
System.out.println(txtPassword.getText());
});
return rootPanel;
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Hello, World");
primaryStage.setScene(new Scene(contentPane(), 800, 600));
primaryStage.show();
}
public static void main(String... args) {
launch(args);
}
}

View File

@@ -0,0 +1,40 @@
/*
* Copyright (c) 2024. Elex. All Rights Reesrved.
* https://www.elex-project.com/
*/
package kr.pe.elex.examples.components;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class HelloWorldApplication extends Application {
private Pane contentPane() {
final Button btn1 = new Button("Click");
btn1.setOnAction(event -> {
System.out.println("Click!");
});
final BorderPane rootPanel = new BorderPane();
rootPanel.setCenter(btn1);
return rootPanel;
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Hello, World");
primaryStage.setScene(new Scene(contentPane(), 800, 600));
primaryStage.show();
}
public static void main(String... args) {
launch(args);
}
}

View File

@@ -0,0 +1,6 @@
/*
* Copyright (c) 2024. Elex. All Rights Reesrved.
* https://www.elex-project.com/
*/
package kr.pe.elex.examples.components;

View File

@@ -0,0 +1,7 @@
module javafx.examples.components.main {
requires javafx.graphics;
requires javafx.controls;
requires javafx.fxml;
exports kr.pe.elex.examples.components;
}

10
doc/01_application.md Normal file
View File

@@ -0,0 +1,10 @@
# Application
1. j메인 클래스에서 javafx.application.Application를 상속하고, start()를 구현한다.
2. root 패널을 생성해서 레이아웃을 구현한다.
3. start()에서 전달받은 primaryStage에 setScene()을 사용해서 new Scene(root,w,h)을 넘겨준다.
4. start()메서드의 맨 뒤에 primaryStage.show()를 호출한다.
5. 메인 메서드에서 launch(args)를 호출하면 start()가 호출되고, GUI 창이 실행된다.
https://docs.oracle.com/javase/8/javase-clienttechnologies.htm

1
doc/02_pane.md Normal file
View File

@@ -0,0 +1 @@
# 패널

9
doc/03_controls.md Normal file
View File

@@ -0,0 +1,9 @@
# 컴포넌트
## Label
## Button
## TextField
### PasswordField

31
doc/04_3d.md Normal file
View File

@@ -0,0 +1,31 @@
# 3D
## Shape3D < Node
## MeshView < Shape3D
## Box < Shape3D
## Cylinder < Shape3D
## Sphere < Shape3D
## Mesh
## TriangleMesh
## PerspectiveCamera
## PointLight
## AmbientLight
## PhongMaterial < Material
* diffuse color
* diffuse map
* specular map
* specular color
* specular power
* bump map / normal map
* self-illumination map

0
doc/05_canvas.md Normal file
View File

36
fxml/build.gradle.kts Normal file
View File

@@ -0,0 +1,36 @@
/*
* JavaFx Examples
*
* Copyright (c) 2021. Elex. All Rights Reserved.
* https://www.elex-project.com/
*/
plugins {
id("elex-application")
idea
id("org.openjfx.javafxplugin") version "0.1.0"
id("org.beryx.jlink") version "3.0.1"
}
application {
mainClass.set("kr.pe.elex.examples.fxml.FxmlApplication")
mainModule.set("kr.pe.elex.examples.fxml")
}
javafx {
version = "23-ea+3"
modules = listOf("javafx.controls", "javafx.fxml")
}
jlink {
launcher {
name = project.name
}
}
idea{
module {
isDownloadJavadoc=true
isDownloadSources=true
}
}
dependencies {
}

View File

@@ -0,0 +1,33 @@
/*
* Copyright (c) 2021-2024. Elex. All Rights Reesrved.
* https://www.elex-project.com/
*/
package kr.pe.elex.examples.fxml;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.util.Objects;
public class FxmlApplication extends Application {
public static void main(String... args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Hello!");
primaryStage.setWidth(800);
primaryStage.setHeight(600);
//GridPane root = new GridPane();
Parent root = FXMLLoader.load(Objects.requireNonNull(getClass()
.getResource("/fxml/root.fxml")));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
}

View File

@@ -0,0 +1,7 @@
module javafx.examples.fxml.main {
requires javafx.graphics;
requires javafx.controls;
requires javafx.fxml;
exports kr.pe.elex.examples.fxml;
}

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<!--
~ JavaFx Examples
~
~ Copyright (c) 2021. Elex. All Rights Reserved.
~ https://www.elex-project.com/
-->
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.2" xmlns:fx="http://javafx.com/fxml/1">
<center>
<Button mnemonicParsing="false" text="Button" BorderPane.alignment="CENTER" />
</center>
<bottom>
</bottom>
<top>
<MenuBar BorderPane.alignment="CENTER">
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<items>
<MenuItem mnemonicParsing="false" text="Delete" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" text="About" />
</items>
</Menu>
</menus>
</MenuBar>
</top>
</BorderPane>

View File

@@ -1,5 +1,12 @@
#
# JavaFx Examples
#
# Copyright (c) 2021. Elex. All Rights Reserved.
# https://www.elex-project.com/
#
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

16
gradlew vendored
View File

@@ -1,21 +1,5 @@
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X

View File

@@ -1,7 +0,0 @@
plugins {
id("elex-library")
}
dependencies {
}

View File

@@ -1 +0,0 @@
package com.elex_project.sample;

View File

@@ -1,28 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ JavaFx Examples
~
~ Copyright (c) 2021. Elex. All Rights Reserved.
~ https://www.elex-project.com/
-->
<configuration>
<property name="LOG_FILE" value="LogFile" />
<property name="LOG_DIR" value="/var/log/application" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/${LOG_FILE}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${LOG_DIR}/%d{yyyy/MM}/${LOG_FILE}.gz</fileNamePattern>
<!-- keep 30 days' worth of history capped at 3GB total size -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="TRACE">
<appender-ref ref="CONSOLE" />
</root>

View File

@@ -1,2 +1,11 @@
rootProject.name = "tmpl-java-multiproject"
include("lib", "app")
/*
* JavaFx Examples
*
* Copyright (c) 2021. Elex. All Rights Reserved.
* https://www.elex-project.com/
*/
rootProject.name = "javafx-examples"
include("fxml")
include("components")
include("three_d")

30
three_d/build.gradle.kts Normal file
View File

@@ -0,0 +1,30 @@
plugins {
id("elex-application")
idea
id("org.openjfx.javafxplugin") version "0.1.0"
id("org.beryx.jlink") version "3.0.1"
}
application {
mainClass.set("kr.pe.elex.examples.three_d.MyApplication")
// mainModule.set("kr.pe.elex.examples.components")
}
javafx {
version = "23-ea+3"
modules = listOf("javafx.controls", "javafx.fxml")
}
jlink {
launcher {
name = project.name
}
}
idea{
module {
isDownloadJavadoc=true
isDownloadSources=true
}
}
dependencies {
}

View File

@@ -0,0 +1,18 @@
/*
* Copyright (c) 2024. Elex. All Rights Reesrved.
* https://www.elex-project.com/
*/
package kr.pe.elex.examples.three_d;
import javafx.scene.Camera;
import javafx.scene.PerspectiveCamera;
public class Cameras {
public static Camera camera(){
final Camera camera = new PerspectiveCamera();
return camera;
}
}

View File

@@ -0,0 +1,24 @@
/*
* Copyright (c) 2024. Elex. All Rights Reesrved.
* https://www.elex-project.com/
*/
package kr.pe.elex.examples.three_d;
import javafx.scene.AmbientLight;
import javafx.scene.PointLight;
import javafx.scene.paint.Color;
public class Lights {
public static PointLight pointLight() {
final PointLight light = new PointLight();
light.setColor(Color.YELLOW);
return light;
}
public static AmbientLight ambientLight() {
final AmbientLight light = new AmbientLight();
light.setColor(Color.GOLD);
return light;
}
}

View File

@@ -0,0 +1,9 @@
/*
* Copyright (c) 2024. Elex. All Rights Reesrved.
* https://www.elex-project.com/
*/
package kr.pe.elex.examples.three_d;
public class Materials {
}

View File

@@ -0,0 +1,52 @@
/*
* Copyright (c) 2024. Elex. All Rights Reesrved.
* https://www.elex-project.com/
*/
package kr.pe.elex.examples.three_d;
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Box;
import javafx.scene.shape.DrawMode;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;
public class MyApplication extends Application {
private Parent content(){
Box box = new Box(5,5,5);
box.setMaterial(new PhongMaterial(Color.RED));
box.setDrawMode(DrawMode.LINE);
Camera camera = new PerspectiveCamera(true);
camera.getTransforms().addAll(
new Rotate(-20, Rotate.Y_AXIS),
new Rotate(-20,Rotate.X_AXIS),
new Translate(0,0,-15)
);
Group root = new Group();
root.getChildren().add(box);
root.getChildren().add(camera);
SubScene subScene = new SubScene(root, 300, 300);
subScene.setFill(Color.ALICEBLUE);
subScene.setCamera(camera);
Group group = new Group();
group.getChildren().add(subScene);
return group;
}
public static void main(String... args){
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("3D Example");
primaryStage.setResizable(false);
primaryStage.setScene(new Scene(content()));
primaryStage.show();
}
}

View File

@@ -0,0 +1,54 @@
/*
* Copyright (c) 2024. Elex. All Rights Reesrved.
* https://www.elex-project.com/
*/
package kr.pe.elex.examples.three_d;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Box;
import javafx.scene.shape.Cylinder;
import javafx.scene.shape.Sphere;
import javafx.scene.shape.TriangleMesh;
public class Shapes {
public static Box box(){
final Box shape = new Box(100, 100, 30);
final PhongMaterial material = new PhongMaterial();
material.setSpecularColor(Color.ORANGE);
material.setDiffuseColor(Color.RED);
shape.setMaterial(material);
return shape;
}
public static Cylinder cylinder(){
final Cylinder shape = new Cylinder(100, 100);
final PhongMaterial material = new PhongMaterial();
material.setSpecularColor(Color.BLUE);
material.setDiffuseColor(Color.LIGHTBLUE);
shape.setMaterial(material);
return shape;
}
public static Sphere sphere(){
final Sphere shape = new Sphere(100);
final PhongMaterial material = new PhongMaterial();
material.setSpecularColor(Color.BLUE);
material.setDiffuseColor(Color.LIGHTBLUE);
shape.setMaterial(material);
return shape;
}
public static TriangleMesh triangleMesh(){
final TriangleMesh shape = new TriangleMesh();
final float[] points = {};
shape.getPoints().addAll(points);
final float[] texCoords = {};
shape.getTexCoords().addAll(texCoords);
final int[] faces = {};
shape.getFaces().addAll(faces);
final int[] smoothingGroups = {};
shape.getFaceSmoothingGroups().addAll(smoothingGroups);
return shape;
}
}

View File

@@ -0,0 +1,6 @@
/*
* Copyright (c) 2024. Elex. All Rights Reesrved.
* https://www.elex-project.com/
*/
package kr.pe.elex.examples.three_d;

View File

@@ -0,0 +1,7 @@
module javafx.examples.fxml.main {
requires javafx.graphics;
requires javafx.controls;
requires javafx.fxml;
exports kr.pe.elex.examples.three_d;
}