commit
1a672e8ac8
@ -0,0 +1,123 @@
|
||||
package visualiser.Controllers;
|
||||
|
||||
import com.interactivemesh.jfx.importer.stl.StlMeshImporter;
|
||||
import javafx.animation.AnimationTimer;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.geometry.Point3D;
|
||||
import javafx.scene.AmbientLight;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.layout.Pane;
|
||||
import javafx.scene.layout.StackPane;
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.scene.paint.PhongMaterial;
|
||||
import javafx.scene.shape.Cylinder;
|
||||
import javafx.scene.shape.MeshView;
|
||||
import javafx.scene.shape.Shape3D;
|
||||
import javafx.scene.transform.Rotate;
|
||||
import shared.model.Bearing;
|
||||
import shared.model.CompoundMark;
|
||||
import shared.model.GPSCoordinate;
|
||||
import visualiser.layout.Annotation3D;
|
||||
import visualiser.layout.Assets3D;
|
||||
import visualiser.layout.Subject3D;
|
||||
import visualiser.layout.View3D;
|
||||
import visualiser.model.VisualiserBoat;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
|
||||
public class NextMarkController {
|
||||
private @FXML StackPane arrowStackPane2d;
|
||||
private @FXML StackPane arrowStackPane3d;
|
||||
private @FXML Pane pane2d;
|
||||
private @FXML Pane pane3d;
|
||||
|
||||
private VisualiserBoat boat;
|
||||
|
||||
public void initialiseArrowView(VisualiserBoat boat) {
|
||||
this.boat = boat;
|
||||
pane2d.setVisible(true);
|
||||
pane3d.setVisible(false);
|
||||
initialise2dArrowView();
|
||||
initialise3dArrowView();
|
||||
}
|
||||
|
||||
private void initialise2dArrowView() {
|
||||
AnimationTimer arrow2d = new AnimationTimer() {
|
||||
@Override
|
||||
public void handle(long now) {
|
||||
if (boat.getCurrentLeg().getEndCompoundMark() != null) {
|
||||
CompoundMark target = boat.getCurrentLeg().getEndCompoundMark();
|
||||
Bearing headingToMark = GPSCoordinate.calculateBearing(boat.getPosition(), target.getAverageGPSCoordinate());
|
||||
arrowStackPane2d.setRotate(headingToMark.degrees());
|
||||
} else {
|
||||
stop();
|
||||
}
|
||||
}
|
||||
};
|
||||
arrow2d.start();
|
||||
}
|
||||
|
||||
private void initialise3dArrowView() {
|
||||
ObservableList<Subject3D> viewSubjects = FXCollections.observableArrayList();
|
||||
String arrowPath = "assets/mark_arrow.x3d";
|
||||
|
||||
Shape3D arrow = Assets3D.loadX3d(arrowPath);
|
||||
|
||||
arrow.setScaleX(25);
|
||||
arrow.setScaleY(25);
|
||||
arrow.setScaleZ(100);
|
||||
arrow.setRotationAxis(new Point3D(1,0,0));
|
||||
|
||||
arrowStackPane3d.getChildren().add(arrow);
|
||||
|
||||
AnimationTimer arrow3d = new AnimationTimer() {
|
||||
@Override
|
||||
public void handle(long now) {
|
||||
if (boat.getCurrentLeg().getEndCompoundMark() != null) {
|
||||
arrow.getTransforms().clear();
|
||||
double zRotation = calculateZRotate();
|
||||
arrow.setRotate(calculateXRotate(zRotation));
|
||||
arrow.getTransforms().add(new Rotate(zRotation, new Point3D(0, 0, 1)));
|
||||
} else {
|
||||
stop();
|
||||
}
|
||||
}
|
||||
};
|
||||
arrow3d.start();
|
||||
}
|
||||
|
||||
public void show2d() {
|
||||
pane3d.setVisible(false);
|
||||
pane2d.setVisible(true);
|
||||
}
|
||||
|
||||
public void show3d() {
|
||||
pane2d.setVisible(false);
|
||||
pane3d.setVisible(true);
|
||||
}
|
||||
|
||||
private double calculateZRotate() {
|
||||
CompoundMark target = boat.getCurrentLeg().getEndCompoundMark();
|
||||
Bearing headingToMark = GPSCoordinate.calculateBearing(boat.getPosition(), target.getAverageGPSCoordinate());
|
||||
return -headingToMark.degrees() + boat.getBearing().degrees() + 180;
|
||||
}
|
||||
|
||||
private double calculateXRotate(double zRotation) {
|
||||
// if (zRotation > 360) {
|
||||
// zRotation -=360;
|
||||
// } else if (zRotation < 0) {
|
||||
// zRotation += 360;
|
||||
// }
|
||||
//
|
||||
// if (zRotation > 180) {
|
||||
// zRotation = 360 - zRotation;
|
||||
// }
|
||||
|
||||
return 70;
|
||||
//return 90 - 20 * Math.cos(Math.toRadians(zRotation));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,62 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
|
||||
<X3D version="3.0" profile="Immersive" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="http://www.web3d.org/specifications/x3d-3.0.xsd">
|
||||
<head>
|
||||
<meta name="filename" content="Mark Arrow V1.3.x3d" />
|
||||
<meta name="generator" content="Blender 2.77 (sub 0)" />
|
||||
</head>
|
||||
<Scene>
|
||||
<NavigationInfo headlight="true"
|
||||
visibilityLimit="0.0"
|
||||
type='"EXAMINE", "ANY"'
|
||||
avatarSize="0.25, 1.75, 0.75"
|
||||
/>
|
||||
<Background DEF="WO_World"
|
||||
groundColor="0.051 0.051 0.051"
|
||||
skyColor="0.051 0.051 0.051"
|
||||
/>
|
||||
<Transform DEF="Cube_TRANSFORM"
|
||||
translation="0.000000 0.000000 0.000000"
|
||||
scale="1.000000 1.000000 1.000000"
|
||||
rotation="0.000000 0.707107 0.707107 3.141593"
|
||||
>
|
||||
<Transform DEF="Cube_ifs_TRANSFORM"
|
||||
translation="0.000000 0.000000 0.000000"
|
||||
scale="1.000000 1.000000 1.000000"
|
||||
rotation="1.000000 0.000000 0.000000 0.000000"
|
||||
>
|
||||
<Group DEF="group_ME_Cube">
|
||||
<Shape>
|
||||
<Appearance>
|
||||
<ImageTexture DEF="IM_Material_Diffuse_Color_002"
|
||||
url='"textures/Material Diffuse Color.002" "Material Diffuse Color.002" "D:/Storage/3D Models/Misc/SENG302/Mark Arrow/textures/Material Diffuse Color.002"'
|
||||
/>
|
||||
<TextureTransform
|
||||
translation="0.000000 0.000000"
|
||||
scale="1.000000 1.000000"
|
||||
rotation="0.000000"
|
||||
/>
|
||||
<Material DEF="MA_Material"
|
||||
diffuseColor="0.800 0.800 0.800"
|
||||
specularColor="0.401 0.401 0.401"
|
||||
emissiveColor="0.000 0.000 0.000"
|
||||
ambientIntensity="0.333"
|
||||
shininess="0.098"
|
||||
transparency="0.0"
|
||||
/>
|
||||
</Appearance>
|
||||
<IndexedFaceSet solid="true"
|
||||
texCoordIndex="0 1 2 -1 3 4 5 -1 6 7 8 9 -1 10 11 12 -1 13 14 15 -1 16 17 18 19 -1 20 21 22 -1 23 24 25 -1 26 27 28 29 -1 30 31 32 -1 33 34 35 -1 36 37 38 39 -1 "
|
||||
coordIndex="4 1 7 -1 2 0 8 -1 1 0 2 3 -1 1 3 7 -1 8 0 9 -1 0 1 4 9 -1 4 7 6 -1 2 8 5 -1 6 3 2 5 -1 6 7 3 -1 8 9 5 -1 4 6 5 9 -1 "
|
||||
>
|
||||
<Coordinate DEF="coords_ME_Cube"
|
||||
point="1.000000 -0.000000 -0.100000 1.000000 -0.000001 0.100000 0.000000 2.000000 -0.100000 0.000000 2.000000 0.100000 0.000000 -2.000000 0.100000 -1.000000 -0.000000 -0.100000 -1.000000 -0.000001 0.100000 0.000000 -0.000000 0.100000 0.000000 0.000000 -0.100000 0.000000 -2.000000 -0.100000 "
|
||||
/>
|
||||
<TextureCoordinate point="0.9999 0.0001 0.7826 0.0001 0.8260 0.0870 0.6522 0.1934 0.7826 0.3673 0.8260 0.2803 0.4348 0.1740 0.4348 0.1934 0.6522 0.1934 0.6522 0.1740 0.7826 0.0001 0.6522 0.1740 0.8260 0.0870 0.8260 0.2803 0.7826 0.3673 0.9999 0.3673 0.4348 0.1934 0.4348 0.1740 0.2174 0.1740 0.2174 0.1934 0.9999 0.0001 0.8260 0.0870 0.8695 0.1740 0.6522 0.1934 0.8260 0.2803 0.8695 0.1934 0.8695 0.1740 0.6522 0.1740 0.6522 0.1934 0.8695 0.1934 0.8695 0.1740 0.8260 0.0870 0.6522 0.1740 0.8260 0.2803 0.9999 0.3673 0.8695 0.1934 0.2174 0.1740 0.0001 0.1740 0.0001 0.1934 0.2174 0.1934 " />
|
||||
</IndexedFaceSet>
|
||||
</Shape>
|
||||
</Group>
|
||||
</Transform>
|
||||
</Transform>
|
||||
</Scene>
|
||||
</X3D>
|
||||
|
After Width: | Height: | Size: 38 KiB |
@ -0,0 +1,16 @@
|
||||
.slider .thumb {
|
||||
-fx-background-image: url("/visualiser/images/sun.png");
|
||||
-fx-background-size: 25px;
|
||||
-fx-pref-height: 25px;
|
||||
-fx-pref-width: 25px;
|
||||
-fx-background-position: top;
|
||||
-fx-background-repeat: no-repeat;
|
||||
-fx-focus-color: transparent;
|
||||
-fx-background-color: transparent;
|
||||
}
|
||||
|
||||
.slider .track {
|
||||
-fx-control-inner-background: dodgerblue;
|
||||
-fx-border-color: rgba(30, 144, 255, 0.44);
|
||||
-fx-border-radius: 0.25em, 0.25em, 0.166667em;
|
||||
}
|
||||
|
After Width: | Height: | Size: 7.9 KiB |
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.scene.image.Image?>
|
||||
<?import javafx.scene.image.ImageView?>
|
||||
<?import javafx.scene.layout.ColumnConstraints?>
|
||||
<?import javafx.scene.layout.GridPane?>
|
||||
<?import javafx.scene.layout.Pane?>
|
||||
<?import javafx.scene.layout.RowConstraints?>
|
||||
<?import javafx.scene.layout.StackPane?>
|
||||
|
||||
<GridPane fx:id="arrowGridPane" alignment="TOP_CENTER" maxHeight="-Infinity" maxWidth="-Infinity" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1" fx:controller="visualiser.Controllers.NextMarkController">
|
||||
<children>
|
||||
<Pane fx:id="pane2d" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="112.0" prefWidth="112.0">
|
||||
<children>
|
||||
<StackPane fx:id="arrowStackPane2d" prefHeight="112.0" prefWidth="112.0">
|
||||
<children>
|
||||
<ImageView fx:id="arrowImage" fitHeight="75.0" fitWidth="25.0">
|
||||
<image>
|
||||
<Image url="@../../images/nextMarkArrow2d.png" />
|
||||
</image>
|
||||
</ImageView>
|
||||
</children>
|
||||
</StackPane>
|
||||
</children>
|
||||
</Pane>
|
||||
<Pane fx:id="pane3d" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="112.0" prefWidth="112.0">
|
||||
<children>
|
||||
<StackPane fx:id="arrowStackPane3d" prefHeight="112.0" prefWidth="112.0" />
|
||||
</children>
|
||||
</Pane>
|
||||
</children>
|
||||
<columnConstraints>
|
||||
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
|
||||
</columnConstraints>
|
||||
<rowConstraints>
|
||||
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
|
||||
</rowConstraints>
|
||||
</GridPane>
|
||||
Loading…
Reference in new issue