Search in sources :

Example 1 with Cylinder

use of javafx.scene.shape.Cylinder in project FXyzLib by Birdasaur.

the class CubeViewer method buildGrids.

private void buildGrids(double size, double spacing) {
    //fill in grid lines for X Axis
    ArrayList xy1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        final Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setTranslateX((-size / 2) + i);
        newCyl.setTranslateZ(-size / 2);
        xy1Cyls.add(newCyl);
    }
    xy1GridLinesGroup = new Group(xy1Cyls);
    //Now build the grids for the mirror image
    ArrayList xy2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        final Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setTranslateX((-size / 2) + i);
        newCyl.setTranslateZ(size / 2);
        xy2Cyls.add(newCyl);
    }
    xy2GridLinesGroup = new Group(xy2Cyls);
    ArrayList xx1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        final Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setTranslateZ(-size / 2);
        newCyl.setTranslateY((size / 2) - i);
        newCyl.setRotationAxis(Rotate.Z_AXIS);
        newCyl.setRotate(90);
        xx1Cyls.add(newCyl);
    }
    xx1GridLinesGroup = new Group(xx1Cyls);
    //Now build the grids for the mirror image
    ArrayList xx2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        final Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setTranslateZ(size / 2);
        newCyl.setTranslateY((size / 2) - i);
        newCyl.setRotationAxis(Rotate.Z_AXIS);
        newCyl.setRotate(90);
        xx2Cyls.add(newCyl);
    }
    xx2GridLinesGroup = new Group(xx2Cyls);
    //Add the sub groups to the parent group 
    getChildren().addAll(xy1GridLinesGroup);
    getChildren().addAll(xx1GridLinesGroup);
    getChildren().addAll(xy2GridLinesGroup);
    getChildren().addAll(xx2GridLinesGroup);
    // File in grid Lines for Y Axis //////////////////////////
    ArrayList yy1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        final Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setTranslateX(-size / 2);
        newCyl.setTranslateZ((-size / 2) + i);
        yy1Cyls.add(newCyl);
    }
    yy1GridLinesGroup = new Group(yy1Cyls);
    //Now build the grids for the mirror image
    ArrayList yy2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        final Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setTranslateX(size / 2);
        newCyl.setTranslateZ((-size / 2) + i);
        yy2Cyls.add(newCyl);
    }
    yy2GridLinesGroup = new Group(yy2Cyls);
    ArrayList yx1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        final Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setTranslateX(-size / 2);
        newCyl.setTranslateY((size / 2) - i);
        newCyl.setRotationAxis(Rotate.X_AXIS);
        newCyl.setRotate(90);
        yx1Cyls.add(newCyl);
    }
    yx1GridLinesGroup = new Group(yx1Cyls);
    //Now build the grids for the mirror image
    ArrayList yx2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        final Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setTranslateX(size / 2);
        newCyl.setTranslateY((size / 2) - i);
        newCyl.setRotationAxis(Rotate.X_AXIS);
        newCyl.setRotate(90);
        yx2Cyls.add(newCyl);
    }
    yx2GridLinesGroup = new Group(yx2Cyls);
    //Add the sub groups to the parent group
    getChildren().addAll(yy1GridLinesGroup);
    getChildren().addAll(yx1GridLinesGroup);
    getChildren().addAll(yy2GridLinesGroup);
    getChildren().addAll(yx2GridLinesGroup);
    // File in grid Lines for Z Axis //////////////////////////
    ArrayList zy1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        final Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setTranslateY(size / 2);
        newCyl.setTranslateX((-size / 2) + i);
        newCyl.setRotationAxis(Rotate.X_AXIS);
        newCyl.setRotate(90);
        zy1Cyls.add(newCyl);
    }
    zy1GridLinesGroup = new Group(zy1Cyls);
    //Now build the grids for the mirror image
    ArrayList zy2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        final Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setTranslateY(-size / 2);
        newCyl.setTranslateX((-size / 2) + i);
        newCyl.setRotationAxis(Rotate.X_AXIS);
        newCyl.setRotate(90);
        zy2Cyls.add(newCyl);
    }
    zy2GridLinesGroup = new Group(zy2Cyls);
    ArrayList zx1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        final Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setTranslateY(size / 2);
        newCyl.setTranslateZ((-size / 2) + i);
        newCyl.setRotationAxis(Rotate.Z_AXIS);
        newCyl.setRotate(90);
        zx1Cyls.add(newCyl);
    }
    zx1GridLinesGroup = new Group(zx1Cyls);
    //Now build the grids for the mirror image
    ArrayList zx2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        final Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setTranslateY(-size / 2);
        newCyl.setTranslateZ((-size / 2) + i);
        newCyl.setRotationAxis(Rotate.Z_AXIS);
        newCyl.setRotate(90);
        zx2Cyls.add(newCyl);
    }
    zx2GridLinesGroup = new Group(zx2Cyls);
    //Add the sub groups to the parent group
    getChildren().addAll(zy1GridLinesGroup);
    getChildren().addAll(zx1GridLinesGroup);
    getChildren().addAll(zy2GridLinesGroup);
    getChildren().addAll(zx2GridLinesGroup);
}
Also used : Cylinder(javafx.scene.shape.Cylinder) Group(javafx.scene.Group) ArrayList(java.util.ArrayList)

Example 2 with Cylinder

use of javafx.scene.shape.Cylinder in project FXyzLib by Birdasaur.

the class CubeViewer method buildAxes.

private void buildAxes(double size, double axisThickness) {
    // X-Axis Material
    final PhongMaterial redMaterial = new PhongMaterial();
    redMaterial.setDiffuseColor(Color.DARKRED);
    redMaterial.setSpecularColor(Color.RED);
    // Y-Axis Material
    final PhongMaterial greenMaterial = new PhongMaterial();
    greenMaterial.setDiffuseColor(Color.DARKGREEN);
    greenMaterial.setSpecularColor(Color.GREEN);
    // Z-Axis Material
    final PhongMaterial blueMaterial = new PhongMaterial();
    blueMaterial.setDiffuseColor(Color.DARKBLUE);
    blueMaterial.setSpecularColor(Color.BLUE);
    //XYZ 1
    final Cylinder x1AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder y1AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder z1AxisCyl = new Cylinder(axisThickness, size);
    x1AxisCyl.setTranslateY(size / 2);
    x1AxisCyl.setTranslateZ(-size / 2);
    y1AxisCyl.setTranslateX(-size / 2);
    y1AxisCyl.setTranslateZ(-size / 2);
    z1AxisCyl.setTranslateX((-size) / 2);
    z1AxisCyl.setTranslateY(size / 2);
    x1AxisCyl.setRotationAxis(Rotate.Z_AXIS);
    x1AxisCyl.setRotate(90);
    z1AxisCyl.setRotationAxis(Rotate.X_AXIS);
    z1AxisCyl.setRotate(-90);
    x1AxisCyl.setMaterial(redMaterial);
    y1AxisCyl.setMaterial(greenMaterial);
    z1AxisCyl.setMaterial(blueMaterial);
    //getChildren().addAll(x1AxisCyl, y1AxisCyl, z1AxisCyl);
    //XYZ 2
    final Cylinder x2AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder y2AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder z2AxisCyl = new Cylinder(axisThickness, size);
    x2AxisCyl.setTranslateY(size / 2);
    x2AxisCyl.setTranslateZ(size / 2);
    y2AxisCyl.setTranslateX(size / 2);
    y2AxisCyl.setTranslateZ(size / 2);
    z2AxisCyl.setTranslateX(size / 2);
    z2AxisCyl.setTranslateY(size / 2);
    x2AxisCyl.setRotationAxis(Rotate.Z_AXIS);
    x2AxisCyl.setRotate(90);
    z2AxisCyl.setRotationAxis(Rotate.X_AXIS);
    z2AxisCyl.setRotate(-90);
    x2AxisCyl.setMaterial(redMaterial);
    y2AxisCyl.setMaterial(greenMaterial);
    z2AxisCyl.setMaterial(blueMaterial);
    //getChildren().addAll(x2AxisCyl, y2AxisCyl, z2AxisCyl);
    //XYZ 3
    final Cylinder x3AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder y3AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder z3AxisCyl = new Cylinder(axisThickness, size);
    x3AxisCyl.setTranslateY(-size / 2);
    x3AxisCyl.setTranslateZ(-size / 2);
    y3AxisCyl.setTranslateX(size / 2);
    y3AxisCyl.setTranslateZ(-size / 2);
    z3AxisCyl.setTranslateX(size / 2);
    z3AxisCyl.setTranslateY(-size / 2);
    x3AxisCyl.setRotationAxis(Rotate.Z_AXIS);
    x3AxisCyl.setRotate(90);
    z3AxisCyl.setRotationAxis(Rotate.X_AXIS);
    z3AxisCyl.setRotate(-90);
    x3AxisCyl.setMaterial(redMaterial);
    y3AxisCyl.setMaterial(greenMaterial);
    z3AxisCyl.setMaterial(blueMaterial);
    //getChildren().addAll(x3AxisCyl, y3AxisCyl, z3AxisCyl);        
    //XYZ 4
    final Cylinder x4AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder y4AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder z4AxisCyl = new Cylinder(axisThickness, size);
    x4AxisCyl.setTranslateY(-size / 2);
    x4AxisCyl.setTranslateZ(size / 2);
    y4AxisCyl.setTranslateX(-size / 2);
    y4AxisCyl.setTranslateZ(size / 2);
    z4AxisCyl.setTranslateX(-size / 2);
    z4AxisCyl.setTranslateY(-size / 2);
    x4AxisCyl.setRotationAxis(Rotate.Z_AXIS);
    x4AxisCyl.setRotate(90);
    z4AxisCyl.setRotationAxis(Rotate.X_AXIS);
    z4AxisCyl.setRotate(-90);
    x4AxisCyl.setMaterial(redMaterial);
    y4AxisCyl.setMaterial(greenMaterial);
    z4AxisCyl.setMaterial(blueMaterial);
    //getChildren().addAll(x4AxisCyl, y4AxisCyl, z4AxisCyl);        
    xAxesGroup.getChildren().addAll(x1AxisCyl, x2AxisCyl, x3AxisCyl, x4AxisCyl);
    yAxesGroup.getChildren().addAll(y1AxisCyl, y2AxisCyl, y3AxisCyl, y4AxisCyl);
    zAxesGroup.getChildren().addAll(z1AxisCyl, z2AxisCyl, z3AxisCyl, z4AxisCyl);
    getChildren().addAll(xAxesGroup, yAxesGroup, zAxesGroup);
    //fuck it throw a little sphere at the corners
    final Sphere top1Sphere = new Sphere(2 * axisThickness);
    final Sphere top2Sphere = new Sphere(2 * axisThickness);
    final Sphere top3Sphere = new Sphere(2 * axisThickness);
    final Sphere top4Sphere = new Sphere(2 * axisThickness);
    final Sphere bottom1Sphere = new Sphere(2 * axisThickness);
    final Sphere bottom2Sphere = new Sphere(2 * axisThickness);
    final Sphere bottom3Sphere = new Sphere(2 * axisThickness);
    final Sphere bottom4Sphere = new Sphere(2 * axisThickness);
    top1Sphere.setTranslateX(-size / 2);
    top1Sphere.setTranslateY(-size / 2);
    top1Sphere.setTranslateZ(-size / 2);
    top2Sphere.setTranslateX(-size / 2);
    top2Sphere.setTranslateY(-size / 2);
    top2Sphere.setTranslateZ(size / 2);
    top3Sphere.setTranslateX(size / 2);
    top3Sphere.setTranslateY(-size / 2);
    top3Sphere.setTranslateZ(size / 2);
    top4Sphere.setTranslateX(size / 2);
    top4Sphere.setTranslateY(-size / 2);
    top4Sphere.setTranslateZ(-size / 2);
    bottom1Sphere.setTranslateX(-size / 2);
    bottom1Sphere.setTranslateY(size / 2);
    bottom1Sphere.setTranslateZ(-size / 2);
    bottom2Sphere.setTranslateX(-size / 2);
    bottom2Sphere.setTranslateY(size / 2);
    bottom2Sphere.setTranslateZ(size / 2);
    bottom3Sphere.setTranslateX(size / 2);
    bottom3Sphere.setTranslateY(size / 2);
    bottom3Sphere.setTranslateZ(size / 2);
    bottom4Sphere.setTranslateX(size / 2);
    bottom4Sphere.setTranslateY(size / 2);
    bottom4Sphere.setTranslateZ(-size / 2);
    sphereGroup.getChildren().addAll(top1Sphere, top2Sphere, top3Sphere, top4Sphere, bottom1Sphere, bottom2Sphere, bottom3Sphere, bottom4Sphere);
    getChildren().add(sphereGroup);
}
Also used : Sphere(javafx.scene.shape.Sphere) Cylinder(javafx.scene.shape.Cylinder) PhongMaterial(javafx.scene.paint.PhongMaterial)

Example 3 with Cylinder

use of javafx.scene.shape.Cylinder in project FXyzLib by Birdasaur.

the class CubeWorld method buildAxes.

private void buildAxes(double size, double axisThickness) {
    //XYZ 1
    final Cylinder x1AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder y1AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder z1AxisCyl = new Cylinder(axisThickness, size);
    x1AxisCyl.setTranslateY(size / 2);
    x1AxisCyl.setTranslateZ(-size / 2);
    y1AxisCyl.setTranslateX(-size / 2);
    y1AxisCyl.setTranslateZ(-size / 2);
    z1AxisCyl.setTranslateX((-size) / 2);
    z1AxisCyl.setTranslateY(size / 2);
    x1AxisCyl.setRotationAxis(Rotate.Z_AXIS);
    x1AxisCyl.setRotate(90);
    z1AxisCyl.setRotationAxis(Rotate.X_AXIS);
    z1AxisCyl.setRotate(-90);
    x1AxisCyl.setMaterial(redMaterial);
    y1AxisCyl.setMaterial(greenMaterial);
    z1AxisCyl.setMaterial(blueMaterial);
    //getChildren().addAll(x1AxisCyl, y1AxisCyl, z1AxisCyl);
    //XYZ 2
    final Cylinder x2AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder y2AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder z2AxisCyl = new Cylinder(axisThickness, size);
    x2AxisCyl.setTranslateY(size / 2);
    x2AxisCyl.setTranslateZ(size / 2);
    y2AxisCyl.setTranslateX(size / 2);
    y2AxisCyl.setTranslateZ(size / 2);
    z2AxisCyl.setTranslateX(size / 2);
    z2AxisCyl.setTranslateY(size / 2);
    x2AxisCyl.setRotationAxis(Rotate.Z_AXIS);
    x2AxisCyl.setRotate(90);
    z2AxisCyl.setRotationAxis(Rotate.X_AXIS);
    z2AxisCyl.setRotate(-90);
    x2AxisCyl.setMaterial(redMaterial);
    y2AxisCyl.setMaterial(greenMaterial);
    z2AxisCyl.setMaterial(blueMaterial);
    //getChildren().addAll(x2AxisCyl, y2AxisCyl, z2AxisCyl);
    //XYZ 3
    final Cylinder x3AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder y3AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder z3AxisCyl = new Cylinder(axisThickness, size);
    x3AxisCyl.setTranslateY(-size / 2);
    x3AxisCyl.setTranslateZ(-size / 2);
    y3AxisCyl.setTranslateX(size / 2);
    y3AxisCyl.setTranslateZ(-size / 2);
    z3AxisCyl.setTranslateX(size / 2);
    z3AxisCyl.setTranslateY(-size / 2);
    x3AxisCyl.setRotationAxis(Rotate.Z_AXIS);
    x3AxisCyl.setRotate(90);
    z3AxisCyl.setRotationAxis(Rotate.X_AXIS);
    z3AxisCyl.setRotate(-90);
    x3AxisCyl.setMaterial(redMaterial);
    y3AxisCyl.setMaterial(greenMaterial);
    z3AxisCyl.setMaterial(blueMaterial);
    //getChildren().addAll(x3AxisCyl, y3AxisCyl, z3AxisCyl);        
    //XYZ 4
    final Cylinder x4AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder y4AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder z4AxisCyl = new Cylinder(axisThickness, size);
    x4AxisCyl.setTranslateY(-size / 2);
    x4AxisCyl.setTranslateZ(size / 2);
    y4AxisCyl.setTranslateX(-size / 2);
    y4AxisCyl.setTranslateZ(size / 2);
    z4AxisCyl.setTranslateX(-size / 2);
    z4AxisCyl.setTranslateY(-size / 2);
    x4AxisCyl.setRotationAxis(Rotate.Z_AXIS);
    x4AxisCyl.setRotate(90);
    z4AxisCyl.setRotationAxis(Rotate.X_AXIS);
    z4AxisCyl.setRotate(-90);
    x4AxisCyl.setMaterial(redMaterial);
    y4AxisCyl.setMaterial(greenMaterial);
    z4AxisCyl.setMaterial(blueMaterial);
    //getChildren().addAll(x4AxisCyl, y4AxisCyl, z4AxisCyl);        
    xAxesGroup.getChildren().addAll(x1AxisCyl, x2AxisCyl, x3AxisCyl, x4AxisCyl);
    yAxesGroup.getChildren().addAll(y1AxisCyl, y2AxisCyl, y3AxisCyl, y4AxisCyl);
    zAxesGroup.getChildren().addAll(z1AxisCyl, z2AxisCyl, z3AxisCyl, z4AxisCyl);
    getChildren().addAll(xAxesGroup, yAxesGroup, zAxesGroup);
    //fuck it throw a little sphere at the corners
    final Sphere top1Sphere = new Sphere(2 * axisThickness);
    final Sphere top2Sphere = new Sphere(2 * axisThickness);
    final Sphere top3Sphere = new Sphere(2 * axisThickness);
    final Sphere top4Sphere = new Sphere(2 * axisThickness);
    final Sphere bottom1Sphere = new Sphere(2 * axisThickness);
    final Sphere bottom2Sphere = new Sphere(2 * axisThickness);
    final Sphere bottom3Sphere = new Sphere(2 * axisThickness);
    final Sphere bottom4Sphere = new Sphere(2 * axisThickness);
    top1Sphere.setTranslateX(-size / 2);
    top1Sphere.setTranslateY(-size / 2);
    top1Sphere.setTranslateZ(-size / 2);
    top2Sphere.setTranslateX(-size / 2);
    top2Sphere.setTranslateY(-size / 2);
    top2Sphere.setTranslateZ(size / 2);
    top3Sphere.setTranslateX(size / 2);
    top3Sphere.setTranslateY(-size / 2);
    top3Sphere.setTranslateZ(size / 2);
    top4Sphere.setTranslateX(size / 2);
    top4Sphere.setTranslateY(-size / 2);
    top4Sphere.setTranslateZ(-size / 2);
    bottom1Sphere.setTranslateX(-size / 2);
    bottom1Sphere.setTranslateY(size / 2);
    bottom1Sphere.setTranslateZ(-size / 2);
    bottom2Sphere.setTranslateX(-size / 2);
    bottom2Sphere.setTranslateY(size / 2);
    bottom2Sphere.setTranslateZ(size / 2);
    bottom3Sphere.setTranslateX(size / 2);
    bottom3Sphere.setTranslateY(size / 2);
    bottom3Sphere.setTranslateZ(size / 2);
    bottom4Sphere.setTranslateX(size / 2);
    bottom4Sphere.setTranslateY(size / 2);
    bottom4Sphere.setTranslateZ(-size / 2);
    getChildren().addAll(top1Sphere, top2Sphere, top3Sphere, top4Sphere);
    getChildren().addAll(bottom1Sphere, bottom2Sphere, bottom3Sphere, bottom4Sphere);
}
Also used : Sphere(javafx.scene.shape.Sphere) Cylinder(javafx.scene.shape.Cylinder)

Example 4 with Cylinder

use of javafx.scene.shape.Cylinder in project FXyzLib by Birdasaur.

the class CubeWorld method buildGridsOld.

private void buildGridsOld(double size, double spacing) {
    //fill in grid lines for X Axis
    PhongMaterial phong = new PhongMaterial();
    phong.setSpecularColor(gridLinesWallColor);
    phong.setDiffuseColor(gridLinesWallColor);
    ArrayList xy1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateX((-size / 2) + i);
        newCyl.setTranslateZ(-size / 2);
        xy1Cyls.add(newCyl);
    }
    xy1GridLinesGroup = new Group(xy1Cyls);
    //Now build the grids for the mirror image
    ArrayList xy2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateX((-size / 2) + i);
        newCyl.setTranslateZ(size / 2);
        xy2Cyls.add(newCyl);
    }
    xy2GridLinesGroup = new Group(xy2Cyls);
    ArrayList xx1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateZ(-size / 2);
        newCyl.setTranslateY((size / 2) - i);
        newCyl.setRotationAxis(Rotate.Z_AXIS);
        newCyl.setRotate(90);
        xx1Cyls.add(newCyl);
    }
    xx1GridLinesGroup = new Group(xx1Cyls);
    //Now build the grids for the mirror image
    ArrayList xx2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateZ(size / 2);
        newCyl.setTranslateY((size / 2) - i);
        newCyl.setRotationAxis(Rotate.Z_AXIS);
        newCyl.setRotate(90);
        xx2Cyls.add(newCyl);
    }
    xx2GridLinesGroup = new Group(xx2Cyls);
    //Add the sub groups to the parent group 
    getChildren().addAll(xy1GridLinesGroup);
    getChildren().addAll(xx1GridLinesGroup);
    getChildren().addAll(xy2GridLinesGroup);
    getChildren().addAll(xx2GridLinesGroup);
    // File in grid Lines for Y Axis //////////////////////////
    ArrayList yy1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateX(-size / 2);
        newCyl.setTranslateZ((-size / 2) + i);
        yy1Cyls.add(newCyl);
    }
    yy1GridLinesGroup = new Group(yy1Cyls);
    //Now build the grids for the mirror image
    ArrayList yy2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateX(size / 2);
        newCyl.setTranslateZ((-size / 2) + i);
        yy2Cyls.add(newCyl);
    }
    yy2GridLinesGroup = new Group(yy2Cyls);
    ArrayList yx1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateX(-size / 2);
        newCyl.setTranslateY((size / 2) - i);
        newCyl.setRotationAxis(Rotate.X_AXIS);
        newCyl.setRotate(90);
        yx1Cyls.add(newCyl);
    }
    yx1GridLinesGroup = new Group(yx1Cyls);
    //Now build the grids for the mirror image
    ArrayList yx2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateX(size / 2);
        newCyl.setTranslateY((size / 2) - i);
        newCyl.setRotationAxis(Rotate.X_AXIS);
        newCyl.setRotate(90);
        yx2Cyls.add(newCyl);
    }
    yx2GridLinesGroup = new Group(yx2Cyls);
    //Add the sub groups to the parent group
    getChildren().addAll(yy1GridLinesGroup);
    getChildren().addAll(yx1GridLinesGroup);
    getChildren().addAll(yy2GridLinesGroup);
    getChildren().addAll(yx2GridLinesGroup);
    // File in grid Lines for Z Axis //////////////////////////
    phong = new PhongMaterial();
    phong.setSpecularColor(gridLinesFloorColor);
    phong.setDiffuseColor(gridLinesFloorColor);
    ArrayList zy1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateY(size / 2);
        newCyl.setTranslateX((-size / 2) + i);
        newCyl.setRotationAxis(Rotate.X_AXIS);
        newCyl.setRotate(90);
        zy1Cyls.add(newCyl);
    }
    zy1GridLinesGroup = new Group(zy1Cyls);
    //Now build the grids for the mirror image
    ArrayList zy2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateY(-size / 2);
        newCyl.setTranslateX((-size / 2) + i);
        newCyl.setRotationAxis(Rotate.X_AXIS);
        newCyl.setRotate(90);
        zy2Cyls.add(newCyl);
    }
    zy2GridLinesGroup = new Group(zy2Cyls);
    ArrayList zx1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateY(size / 2);
        newCyl.setTranslateZ((-size / 2) + i);
        newCyl.setRotationAxis(Rotate.Z_AXIS);
        newCyl.setRotate(90);
        zx1Cyls.add(newCyl);
    }
    zx1GridLinesGroup = new Group(zx1Cyls);
    //Now build the grids for the mirror image
    ArrayList zx2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateY(-size / 2);
        newCyl.setTranslateZ((-size / 2) + i);
        newCyl.setRotationAxis(Rotate.Z_AXIS);
        newCyl.setRotate(90);
        zx2Cyls.add(newCyl);
    }
    zx2GridLinesGroup = new Group(zx2Cyls);
    //Add the sub groups to the parent group
    getChildren().addAll(zy1GridLinesGroup);
    getChildren().addAll(zx1GridLinesGroup);
    getChildren().addAll(zy2GridLinesGroup);
    getChildren().addAll(zx2GridLinesGroup);
}
Also used : Cylinder(javafx.scene.shape.Cylinder) Group(javafx.scene.Group) ArrayList(java.util.ArrayList) PhongMaterial(javafx.scene.paint.PhongMaterial)

Example 5 with Cylinder

use of javafx.scene.shape.Cylinder in project FXyzLib by Birdasaur.

the class RayTest method start.

@Override
public void start(Stage primaryStage) throws Exception {
    Group sceneRoot = new Group();
    Scene scene = new Scene(sceneRoot, sceneWidth, sceneHeight, true, SceneAntialiasing.BALANCED);
    scene.setFill(Color.WHEAT);
    camera = new PerspectiveCamera(true);
    //setup camera transform for rotational support
    cameraTransform.setTranslate(0, 0, 0);
    cameraTransform.getChildren().add(camera);
    camera.setNearClip(0.1);
    camera.setFarClip(10000.0);
    camera.setTranslateZ(-40);
    cameraTransform.ry.setAngle(-45.0);
    cameraTransform.rx.setAngle(-10.0);
    //add a Point Light for better viewing of the grid coordinate system
    PointLight light = new PointLight(Color.WHITE);
    cameraTransform.getChildren().add(light);
    cameraTransform.getChildren().add(new AmbientLight(Color.WHITE));
    light.setTranslateX(camera.getTranslateX());
    light.setTranslateY(camera.getTranslateY());
    light.setTranslateZ(camera.getTranslateZ());
    scene.setCamera(camera);
    rotateY = new Rotate(0, 0, 0, 0, Rotate.Y_AXIS);
    Group group = new Group();
    group.getChildren().add(cameraTransform);
    knot = new KnotMesh(2d, 1d, 0.4d, 2d, 3d, 100, 20, 0, 0);
    //        knot.setDrawMode(DrawMode.LINE);
    knot.setCullFace(CullFace.NONE);
    knot.setSectionType(SectionType.TRIANGLE);
    spring = new CurvedSpringMesh(6d, 2d, 0.4d, 25d, 6.25d * 2d * Math.PI, 1000, 60, 0, 0);
    spring.getTransforms().addAll(new Translate(6, -6, 0));
    spring.setDrawMode(DrawMode.LINE);
    spring.setCullFace(CullFace.NONE);
    //        spring.setTextureModeVertices3D(256*256,dens);
    // NONE
    knot.setTextureModeNone(Color.BROWN);
    spring.setTextureModeNone(Color.BROWN);
    knot.getTransforms().addAll(new Rotate(0, Rotate.X_AXIS), rotateY);
    group.getChildren().add(knot);
    group.getChildren().add(spring);
    /*
        Origin in knot
        Target in spring
        */
    org.fxyz.geometry.Point3D locOrigin = knot.getOrigin();
    Point3D gloOrigin = knot.localToScene(new Point3D(locOrigin.x, locOrigin.y, locOrigin.z));
    org.fxyz.geometry.Point3D locTarget1 = spring.getOrigin();
    Point3D locTarget2 = new Point3D(locTarget1.x, locTarget1.y, locTarget1.z);
    Point3D gloTarget = spring.localToScene(locTarget2);
    Point3D gloDirection = gloTarget.subtract(gloOrigin).normalize();
    Point3D gloOriginInLoc = spring.sceneToLocal(gloOrigin);
    Bounds locBounds = spring.getBoundsInLocal();
    Bounds gloBounds = spring.localToScene(locBounds);
    Sphere s = new Sphere(0.05d);
    s.getTransforms().add(new Translate(gloOrigin.getX(), gloOrigin.getY(), gloOrigin.getZ()));
    s.setMaterial(new PhongMaterial(Color.GREENYELLOW));
    group.getChildren().add(s);
    s = new Sphere(0.05d);
    s.getTransforms().add(new Translate(gloTarget.getX(), gloTarget.getY(), gloTarget.getZ()));
    s.setMaterial(new PhongMaterial(Color.GREENYELLOW));
    Point3D dir = gloTarget.subtract(gloOrigin).crossProduct(new Point3D(0, -1, 0));
    double angle = Math.acos(gloTarget.subtract(gloOrigin).normalize().dotProduct(new Point3D(0, -1, 0)));
    double h1 = gloTarget.subtract(gloOrigin).magnitude();
    Cylinder c = new Cylinder(0.01d, h1);
    c.getTransforms().addAll(new Translate(gloOrigin.getX(), gloOrigin.getY() - h1 / 2d, gloOrigin.getZ()), new Rotate(-Math.toDegrees(angle), 0d, h1 / 2d, 0d, new Point3D(dir.getX(), -dir.getY(), dir.getZ())));
    c.setMaterial(new PhongMaterial(Color.GREEN));
    group.getChildren().add(c);
    group.getChildren().add(new Axes(0.02));
    Box box = new Box(gloBounds.getWidth(), gloBounds.getHeight(), gloBounds.getDepth());
    // If transparency is enabled (8u60+), comment:
    box.setDrawMode(DrawMode.LINE);
    box.setCullFace(CullFace.NONE);
    // If transparency is enabled (8u60+), uncomment:
    //        box.setMaterial(new PhongMaterial(Color.web("8A2BE2",0.3)));
    box.getTransforms().add(new Translate(gloBounds.getMinX() + gloBounds.getWidth() / 2d, gloBounds.getMinY() + gloBounds.getHeight() / 2d, gloBounds.getMinZ() + gloBounds.getDepth() / 2d));
    group.getChildren().add(box);
    /*
        FIRST STEP; Check the ray crosses the bounding box of the shape at any of
        its 6 faces
        */
    List<Point3D> normals = Arrays.asList(new Point3D(-1, 0, 0), new Point3D(1, 0, 0), new Point3D(0, -1, 0), new Point3D(0, 1, 0), new Point3D(0, 0, -1), new Point3D(0, 0, 1));
    List<Point3D> positions = Arrays.asList(new Point3D(locBounds.getMinX(), 0, 0), new Point3D(locBounds.getMaxX(), 0, 0), new Point3D(0, locBounds.getMinY(), 0), new Point3D(0, locBounds.getMaxY(), 0), new Point3D(0, 0, locBounds.getMinZ()), new Point3D(0, 0, locBounds.getMaxZ()));
    AtomicInteger counter = new AtomicInteger();
    IntStream.range(0, 6).forEach(i -> {
        double d = -normals.get(i).dotProduct(positions.get(i));
        double t = -(gloOriginInLoc.dotProduct(normals.get(i)) + d) / (gloDirection.dotProduct(normals.get(i)));
        Point3D locInter = gloOriginInLoc.add(gloDirection.multiply(t));
        if (locBounds.contains(locInter)) {
            counter.getAndIncrement();
            Point3D gloInter = spring.localToScene(locInter);
            Sphere s2 = new Sphere(0.1d);
            s2.getTransforms().add(new Translate(gloInter.getX(), gloInter.getY(), gloInter.getZ()));
            s2.setMaterial(new PhongMaterial(Color.GOLD));
            group.getChildren().add(s2);
        }
    });
    if (counter.get() > 0) {
        /*
            SECOND STEP: Check if the ray crosses any of the triangles of the mesh
            */
        // triangle mesh
        org.fxyz.geometry.Point3D gloOriginInLoc1 = new org.fxyz.geometry.Point3D((float) gloOriginInLoc.getX(), (float) gloOriginInLoc.getY(), (float) gloOriginInLoc.getZ());
        org.fxyz.geometry.Point3D gloDirection1 = new org.fxyz.geometry.Point3D((float) gloDirection.getX(), (float) gloDirection.getY(), (float) gloDirection.getZ());
        System.out.println("inter: " + spring.getIntersections(gloOriginInLoc1, gloDirection1));
    }
    sceneRoot.getChildren().addAll(group);
    //First person shooter keyboard movement 
    scene.setOnKeyPressed(event -> {
        double change = 10.0;
        if (event.isShiftDown()) {
            change = 50.0;
        }
        KeyCode keycode = event.getCode();
        if (keycode == KeyCode.W) {
            camera.setTranslateZ(camera.getTranslateZ() + change);
        }
        if (keycode == KeyCode.S) {
            camera.setTranslateZ(camera.getTranslateZ() - change);
        }
        if (keycode == KeyCode.A) {
            camera.setTranslateX(camera.getTranslateX() - change);
        }
        if (keycode == KeyCode.D) {
            camera.setTranslateX(camera.getTranslateX() + change);
        }
    });
    scene.setOnMousePressed((MouseEvent me) -> {
        mousePosX = me.getSceneX();
        mousePosY = me.getSceneY();
        mouseOldX = me.getSceneX();
        mouseOldY = me.getSceneY();
    });
    scene.setOnMouseDragged((MouseEvent me) -> {
        mouseOldX = mousePosX;
        mouseOldY = mousePosY;
        mousePosX = me.getSceneX();
        mousePosY = me.getSceneY();
        mouseDeltaX = (mousePosX - mouseOldX);
        mouseDeltaY = (mousePosY - mouseOldY);
        double modifier = 10.0;
        double modifierFactor = 0.1;
        if (me.isControlDown()) {
            modifier = 0.1;
        }
        if (me.isShiftDown()) {
            modifier = 50.0;
        }
        if (me.isPrimaryButtonDown()) {
            // +
            cameraTransform.ry.setAngle(((cameraTransform.ry.getAngle() + mouseDeltaX * modifierFactor * modifier * 2.0) % 360 + 540) % 360 - 180);
            // -
            cameraTransform.rx.setAngle(((cameraTransform.rx.getAngle() - mouseDeltaY * modifierFactor * modifier * 2.0) % 360 + 540) % 360 - 180);
        } else if (me.isSecondaryButtonDown()) {
            double z = camera.getTranslateZ();
            double newZ = z + mouseDeltaX * modifierFactor * modifier;
            camera.setTranslateZ(newZ);
        } else if (me.isMiddleButtonDown()) {
            // -
            cameraTransform.t.setX(cameraTransform.t.getX() + mouseDeltaX * modifierFactor * modifier * 0.3);
            // -
            cameraTransform.t.setY(cameraTransform.t.getY() + mouseDeltaY * modifierFactor * modifier * 0.3);
        }
    });
    primaryStage.setTitle("F(X)yz - Ray Picker Between Nodes");
    primaryStage.setScene(scene);
    primaryStage.show();
}
Also used : Group(javafx.scene.Group) Rotate(javafx.scene.transform.Rotate) PerspectiveCamera(javafx.scene.PerspectiveCamera) Sphere(javafx.scene.shape.Sphere) Axes(org.fxyz.utils.Axes) KeyCode(javafx.scene.input.KeyCode) PhongMaterial(javafx.scene.paint.PhongMaterial) Translate(javafx.scene.transform.Translate) KnotMesh(org.fxyz.shapes.primitives.KnotMesh) MouseEvent(javafx.scene.input.MouseEvent) Bounds(javafx.geometry.Bounds) Box(javafx.scene.shape.Box) Scene(javafx.scene.Scene) CurvedSpringMesh(org.fxyz.shapes.primitives.CurvedSpringMesh) Cylinder(javafx.scene.shape.Cylinder) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Point3D(javafx.geometry.Point3D) PointLight(javafx.scene.PointLight) AmbientLight(javafx.scene.AmbientLight)

Aggregations

Cylinder (javafx.scene.shape.Cylinder)7 Group (javafx.scene.Group)5 PhongMaterial (javafx.scene.paint.PhongMaterial)5 Sphere (javafx.scene.shape.Sphere)4 ArrayList (java.util.ArrayList)3 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 Bounds (javafx.geometry.Bounds)2 PerspectiveCamera (javafx.scene.PerspectiveCamera)2 PointLight (javafx.scene.PointLight)2 Scene (javafx.scene.Scene)2 KeyCode (javafx.scene.input.KeyCode)2 MouseEvent (javafx.scene.input.MouseEvent)2 Box (javafx.scene.shape.Box)2 Rotate (javafx.scene.transform.Rotate)2 Translate (javafx.scene.transform.Translate)2 Axes (org.fxyz.utils.Axes)2 Point3D (javafx.geometry.Point3D)1 AmbientLight (javafx.scene.AmbientLight)1 Point3D (org.fxyz.geometry.Point3D)1 CuboidMesh (org.fxyz.shapes.primitives.CuboidMesh)1