domingo, 29 de julho de 2018

JavaFx - desenhando cilindros em 3D

Apesar da documentação do java ser terrivelmente extensa e complicada,
não conseguimos ficar sem consultá-la,
graças aquela coisa (para muitos), podemos criar bons 
exemplos de programas sem muitas dores de cabeça.
Foi de lá que extrai estas informações e passo agora
para os interessados em javaFx um pouco sobre
a classe Shape3D.
A classe Shape3D fornece definições de propriedades comuns
para objetos que representam algum modelo de forma 
geométrica 3D. Essas propriedades incluem:
O material a ser aplicado ao interior preenchível da forma

ou do contorno da forma (consulte setMaterial (javafx.scene.paint.Material)).
As propriedades do modelo de desenho que define como

renderizar sua geometria (consulte setDrawMode (javafx.scene.shape.DrawMode)).
As propriedades de remoção de faces que definem

qual face a selecionar (veja setCullFace (javafx.scene.shape.CullFace)).
As formas 3D pré-definidas são fornecidas para facilitar

a criação rápida de objetos 3D prontos para o uso. 
Essas formas incluem caixas, cilindros e esferas.
Neste exemplo estamos mostrando como criar

alguns cilindros em 3D e exibir no cenário do javaFX.

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


Veja abaixo o código do programa: 



import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.transform.Rotate;
import javafx.scene.shape.Cylinder;

public class PROJETO extends Application {
     // Comprimento do cilindro
     private static final double height = 200;
     // Radius do cilindro
     private static final double radius = 30;
     Canvas canvas = new Canvas ( 600, 350 );
     GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     Pane root = new Pane ( );
     Scene scene = new Scene ( root );
      // /////////////////////////////////////////////////////////////////////////
    public void Informe ( ) {
        ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 13 ) );
        ctx.setFill ( Color.RED );
        ctx.fillText ( "Por: ", 200, 280 );
        ctx.setFill ( Color.BLUE );
        ctx.fillText ( "Samuel Lima", 240, 280 );
        ctx.setFill ( Color.BLACK );
        ctx.fillText ( "sa_sp10@hotmail.com", 200, 295 );
        ctx.setFill ( Color.RED );
        ctx.fillText ( " MUITO OBRIGADO", 245, 320 );
    }
     // /////////////////////////////////////////////////////////////////////////
     public void start ( Stage stage ) throws FileNotFoundException {
         stage.setTitle ( "JAVAFX - DESENHANDO CILINDROS EM 3D" );
         // Usando fonte em italic
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 15 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "JAVAFX - DESENHANDO CILINDROS EM 3D", 150, 40 );
         // Criando uma moldura retangular em canvas
         ctx.setStroke ( Color.BLUE );
         ctx.setLineWidth ( 10.0 );
         ctx.strokeRoundRect ( 10, 10, 580, 330, 10, 10 );
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 12 ) );
         Cylinder cl_1 = new Cylinder ( radius, height );
         Cylinder cl_2 = new Cylinder ( radius, height );
         Cylinder cl_3 = new Cylinder ( radius, height );
         Cylinder cl_4 = new Cylinder ( radius, height );
     ////////////////////////////////////////////////////////////////////////
         // Criando PhongMaterial
         PhongMaterial material_1 = new PhongMaterial ( );
         PhongMaterial material_2 = new PhongMaterial ( );
         PhongMaterial material_3 = new PhongMaterial ( );
         PhongMaterial material_4 = new PhongMaterial ( );     
     ////////////////////////////////////////////////////////////////////////
         material_1.setDiffuseColor ( Color.RED );
         material_1.setSpecularColor ( Color.BLACK );
         cl_1.getTransforms ( ).add ( new Rotate ( -70, Rotate.X_AXIS ) );
         cl_1.getTransforms ( ).add ( new Rotate ( 20, Rotate.Z_AXIS ) );
         cl_1.getTransforms ( ).add ( new Rotate ( 30, Rotate.Y_AXIS ) );
         // Colunas
         cl_1.setLayoutX ( 150 );
         // Linhas
         cl_1.setLayoutY ( 180 );
         cl_1.setMaterial ( material_1 );
     ////////////////////////////////////////////////////////////////////////
         material_2.setDiffuseColor ( Color.BLUE );
         material_2.setSpecularColor ( Color.BLACK );
         cl_2.getTransforms ( ).add ( new Rotate ( -70, Rotate.X_AXIS ) );
         cl_2.getTransforms ( ).add ( new Rotate ( 20, Rotate.Z_AXIS ) );
         cl_2.getTransforms ( ).add ( new Rotate ( 30, Rotate.Y_AXIS ) );
         // Colunas
         cl_2.setLayoutX ( 250 );
         // Linhas
         cl_2.setLayoutY ( 180 );
         cl_2.setMaterial ( material_2 );
     ////////////////////////////////////////////////////////////////////////
         material_3.setDiffuseColor ( Color.GREEN );
         material_3.setSpecularColor ( Color.BLACK );
         cl_3.getTransforms ( ).add ( new Rotate ( -70, Rotate.X_AXIS ) );
         cl_3.getTransforms ( ).add ( new Rotate ( 20, Rotate.Z_AXIS ) );
         cl_3.getTransforms ( ).add ( new Rotate ( 30, Rotate.Y_AXIS ) );
         // Colunas
         cl_3.setLayoutX ( 350 );
         // Linhas
         cl_3.setLayoutY ( 180 );
         cl_3.setMaterial ( material_3 );
     ////////////////////////////////////////////////////////////////////////
         material_4.setDiffuseColor ( Color.YELLOW );
         material_4.setSpecularColor ( Color.BLACK );
         cl_4.getTransforms ( ).add ( new Rotate ( -70, Rotate.X_AXIS ) );
         cl_4.getTransforms ( ).add ( new Rotate ( 20, Rotate.Z_AXIS ) );
         cl_4.getTransforms ( ).add ( new Rotate ( 30, Rotate.Y_AXIS ) );
         // Colunas
         cl_4.setLayoutX ( 450 );
         // Linhas
         cl_4.setLayoutY ( 180 );
         cl_4.setMaterial ( material_4 );
     ////////////////////////////////////////////////////////////////////////
         Informe ( );
         root.getChildren ( ).addAll ( canvas, cl_1, cl_2, cl_3, cl_4 );
         stage.setScene ( scene );
         stage.show ( );
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void main ( String [ ] args ) {
         Application.launch ( args );
     }
}

Nenhum comentário:

Postar um comentário

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