sábado, 18 de agosto de 2018

JavaFX - desenhando e movendo esfera 3D

Criamos um caminho (path),
e traçamos rotas dentro deste caminho
usando Moveto para o ponto de partida,
e LineTo para as outras rotas,
de sorte que as quatro rotas formam
um quadrado, e nestas estradas invisível,
se move a nossa esfera 3D.
O início dos ciclos depende do acionamento
de um botão (Início), mas podemos
pará-lo a qualquer momento clicando
no botão (Pausa), porém se o botão pausa,
não for acionado, o programa encerra as
operações automaticamente no fim de 60
segundos, e posiciona a esfera no ponto
de partida.


Veja abaixo uma imagem do programa em execução:


Veja abaixo um vídeo com o programa funcionando:


Veja abaixo o código do programa:


import javafx.animation.PathTransition;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
import javafx.util.Duration;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Sphere;

public class PROJETO extends Application {
     // Criando o objecto Pane
     Pane root = new Pane ( );
     // Criando o objecto scene
     Scene scene = new Scene ( root, 600, 310 );
     Canvas canvas = new Canvas ( 600, 310 );
     GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     // Criando um caminho (Path)
     Path path = new Path ( );
     // Movendo-se para o ponto de partida
     MoveTo moveTo = new MoveTo ( 10, 160 );
     // Criando a primeira linha
     LineTo linha_1 = new LineTo ( 460, 160 );
     // Criando a segunda linha
     LineTo linha_2 = new LineTo ( 460, 10 );
     // Criando a terceira linha
     LineTo linha_3 = new LineTo ( 10, 10 );
     Button botao_Inicio = new Button ( "Inicio" );
     Button botao_Pausa = new Button ( "Pausa" );
     // Desenhando uma esfera
     final Sphere esfera = new Sphere ( 40 );
     // Criando o material da esfera
     PhongMaterial cria_material = new PhongMaterial ( );
     // /////////////////////////////////////////////////////////////////////////
     public void Informe ( ) {
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 13 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "Por: ", 200, 220 );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Samuel Lima", 240, 220 );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "sa_sp10@hotmail.com", 200, 235 );
         ctx.setFill ( Color.RED );
         ctx.fillText ( " MUITO OBRIGADO", 250, 290 );
     }
     // /////////////////////////////////////////////////////////////////////////
     public void stop_And_PlayButton ( ) {
         cria_material.setDiffuseColor ( Color.DARKBLUE );
         cria_material.setSpecularColor ( Color.BLUE );
         // Posiciona a esfera na horizontal e vertical
         esfera.setLayoutX ( 60 );
         esfera.setLayoutY ( 80 );
         esfera.setMaterial ( cria_material );
         // Criando a transição do path
         PathTransition pathTransition = new PathTransition ( );
         // Definindo a duração da transição
         pathTransition.setDuration ( Duration.millis ( 2000 ) );
         // Configurando o nó para a transição
         pathTransition.setNode ( esfera );
         // Configurando o caminho para a transição
         pathTransition.setPath ( path );
         // Configurando a contagem de ciclos para a transição
         pathTransition.setCycleCount ( 60 );
         // Configurando o valor de reversão automática para true
         pathTransition.setAutoReverse ( false );
         botao_Inicio.setOnMouseClicked ( ( new EventHandler < MouseEvent > ( ) {
              public void handle ( MouseEvent event ) {
                   System.out.println ( "Movimentando!!!" );
                   pathTransition.play ( );
              }
         } ) );
         botao_Inicio.setStyle (
                   "-fx-text-fill: black;"
                            + "-fx-background-color: #DFB951;"
                            + "-fx-border-radius: 20;"
                            + "-fx-background-radius: 20;"
                            + "-fx-padding: 5;"
                   );
         botao_Pausa.setStyle (
                   "-fx-text-fill: black;"
                            + "-fx-background-color: #DFB951;"
                            + "-fx-border-radius: 20;"
                            + "-fx-background-radius: 20;"
                            + "-fx-padding: 5;"
                   );
         botao_Inicio.setLayoutX ( 330 );
         botao_Inicio.setLayoutY ( 250 );
         botao_Pausa.setLayoutX ( 250 );
         botao_Pausa.setLayoutY ( 250 );
         botao_Pausa.setOnMouseClicked ( ( new EventHandler < MouseEvent > ( ) {
              public void handle ( MouseEvent event ) {
                   System.out.println ( "Parado!!!" );
                   pathTransition.stop ( );
              }
         } ) );
     }
     // /////////////////////////////////////////////////////////////////////////
     @Override
     public void start ( Stage stage ) {
         // Configurando um título para o stage
         stage.setTitle ( "JAVAFX - DESENHANDO E MOVENDO OBJETOS 3D" );
         //Criando uma moldura retangular em canvas
         ctx.setStroke ( Color.rgb ( 96, 255, 0 ) );
         ctx.setLineWidth ( 10.0 );
         ctx.strokeRoundRect ( 10, 10, 580, 290, 10, 10 );
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 15 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "JAVAFX - DESENHANDO E MOVENDO OBJETOS 3D", 125, 40 );
         Informe ( );
         stop_And_PlayButton ( );
         // Adicionando o scene para o stage
         stage.setScene ( scene );
         // Adicionando todos os elementos ao path
         path.getElements ( ).addAll ( moveTo, linha_1, linha_2, linha_3 );            
         root.getChildren ( ).addAll ( esfera, canvas, botao_Inicio , botao_Pausa  );
         //Exibindo todo o conteúdo do stage
         stage.show ( );
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void main ( String args [ ] ) {
         launch ( args );
     }
}
 

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.