Fixed horizontal and vertical resizing not to draw larger than scene.

#story[1248]
This commit is contained in:
Zhi You Tan
2017-09-10 03:17:26 +12:00
parent 1b76d59acb
commit 05236337ba
+60 -38
View File
@@ -20,6 +20,7 @@ import javafx.scene.Node;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent; import javafx.scene.input.KeyEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.paint.Paint; import javafx.scene.paint.Paint;
@@ -42,6 +43,8 @@ import seng302.visualiser.fxObjects.CourseBoundary;
import seng302.visualiser.fxObjects.Gate; import seng302.visualiser.fxObjects.Gate;
import seng302.visualiser.fxObjects.MarkArrowFactory; import seng302.visualiser.fxObjects.MarkArrowFactory;
import seng302.visualiser.fxObjects.Marker; import seng302.visualiser.fxObjects.Marker;
import seng302.visualiser.map.Boundary;
import seng302.visualiser.map.CanvasMap;
/** /**
* Created by cir27 on 20/07/17. * Created by cir27 on 20/07/17.
@@ -49,6 +52,8 @@ import seng302.visualiser.fxObjects.Marker;
public class GameView extends Pane { public class GameView extends Pane {
private double bufferSize = 50; private double bufferSize = 50;
private double panelWidth = 1280;
private double panelHeight = 960;
private double canvasWidth = 1100; private double canvasWidth = 1100;
private double canvasHeight = 920; private double canvasHeight = 920;
private boolean horizontalInversion = false; private boolean horizontalInversion = false;
@@ -102,7 +107,7 @@ public class GameView extends Pane {
} }
private void zoomIn() { private void zoomIn() {
scaleFactor = 0.10; scaleFactor = 0.1;
if (this.getScaleX() < 2.5) { if (this.getScaleX() < 2.5) {
this.setScaleX(this.getScaleX() + scaleFactor); this.setScaleX(this.getScaleX() + scaleFactor);
this.setScaleY(this.getScaleY() + scaleFactor); this.setScaleY(this.getScaleY() + scaleFactor);
@@ -137,35 +142,20 @@ public class GameView extends Pane {
gameObjects.add(markers); gameObjects.add(markers);
initializeTimer(); initializeTimer();
// DEBUG USE
gameObjects.add(new Circle(0, 0, 10, Color.RED));
gameObjects.add(new Circle(0, 960, 10, Color.RED));
gameObjects.add(new Circle(1280, 960, 10, Color.RED));
gameObjects.add(new Circle(1280, 0, 10, Color.RED));
// --------
double RATIO = getWidth() / getHeight();
this.widthProperty().addListener(new ChangeListener<Number>() { this.widthProperty().addListener(new ChangeListener<Number>() {
@Override @Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, public void changed(ObservableValue<? extends Number> observable, Number oldValue,
Number newValue) { Number newValue) {
scaleFactor = getWidth() / getHeight() > RATIO scaleFactor = getWidth() / panelWidth;
? getHeight() / canvasHeight
: getWidth() / canvasWidth;
Scale scale = new Scale(scaleFactor, scaleFactor, 0, 0); if (panelHeight * scaleFactor < getHeight()) {
getTransforms().remove(0, getTransforms().size()); Scale scale = new Scale(scaleFactor, scaleFactor, 0, 0);
getTransforms().add(scale); getTransforms().remove(0, getTransforms().size());
getTransforms().add(scale);
setPrefWidth(getWidth() / scaleFactor); setPrefWidth(getWidth() / scaleFactor);
setPrefHeight(getHeight() / scaleFactor); setPrefHeight(getHeight() / scaleFactor);
}
System.out.println("Width: " + newValue);
System.out.println("Scale X: " + getScaleX());
System.out.println("Transition X: " + getTranslateX());
System.out.println("Get Height: " + getScene().getHeight());
System.out.println("Get Width: " + getScene().getWidth());
} }
}); });
@@ -173,22 +163,16 @@ public class GameView extends Pane {
@Override @Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, public void changed(ObservableValue<? extends Number> observable, Number oldValue,
Number newValue) { Number newValue) {
scaleFactor = getWidth() / getHeight() > RATIO scaleFactor = getHeight() / panelHeight;
? getWidth() / canvasWidth
: getHeight() / canvasHeight;
Scale scale = new Scale(scaleFactor, scaleFactor, 0, 0); if (panelWidth * scaleFactor < getWidth()) {
getTransforms().remove(0, getTransforms().size()); Scale scale = new Scale(scaleFactor, scaleFactor, 0, 0);
getTransforms().add(scale); getTransforms().remove(0, getTransforms().size());
getTransforms().add(scale);
setPrefWidth(getWidth() / scaleFactor); setPrefWidth(getWidth() / scaleFactor);
setPrefHeight(getHeight() / scaleFactor); setPrefHeight(getHeight() / scaleFactor);
}
System.out.println("Height: " + newValue);
System.out.println("Scale Y: " + getScaleY());
System.out.println("Transition Y: " + getTranslateY());
System.out.println("Get Height: " + getScene().getHeight());
System.out.println("Get Width: " + getScene().getWidth());
} }
}); });
} }
@@ -234,6 +218,43 @@ public class GameView extends Pane {
}; };
} }
/**
* First find the top right and bottom left points' geo locations, then retrieve map from google
* to display on image view. - Haoming 22/5/2017
*/
private void drawGoogleMap() {
findMetersPerPixel();
Point2D topLeftPoint = findScaledXY(maxLatPoint.getLat(), minLonPoint.getLng());
// distance from top left extreme to panel origin (top left corner)
double distanceFromTopLeftToOrigin = Math.sqrt(
Math.pow(topLeftPoint.getX() * metersPerPixelX, 2) + Math
.pow(topLeftPoint.getY() * metersPerPixelY, 2));
// angle from top left extreme to panel origin
double bearingFromTopLeftToOrigin = Math
.toDegrees(Math.atan2(-topLeftPoint.getX(), topLeftPoint.getY()));
// the top left extreme
GeoPoint topLeftPos = new GeoPoint(maxLatPoint.getLat(), minLonPoint.getLng());
GeoPoint originPos = GeoUtility
.getGeoCoordinate(topLeftPos, bearingFromTopLeftToOrigin, distanceFromTopLeftToOrigin);
// distance from origin corner to bottom right corner of the panel
double distanceFromOriginToBottomRight = Math.sqrt(
Math.pow(panelHeight * metersPerPixelY, 2) + Math
.pow(panelWidth * metersPerPixelX, 2));
double bearingFromOriginToBottomRight = Math
.toDegrees(Math.atan2(panelWidth, -panelHeight));
GeoPoint bottomRightPos = GeoUtility
.getGeoCoordinate(originPos, bearingFromOriginToBottomRight,
distanceFromOriginToBottomRight);
Boundary boundary = new Boundary(originPos.getLat(), bottomRightPos.getLng(),
bottomRightPos.getLat(), originPos.getLng());
CanvasMap canvasMap = new CanvasMap(boundary);
mapImage.setImage(canvasMap.getMapImage());
mapImage.fitWidthProperty().bind(((AnchorPane) this.getParent()).heightProperty());
mapImage.fitHeightProperty().bind(((AnchorPane) this.getParent()).heightProperty());
}
// TODO: 16/08/17 Break up this function // TODO: 16/08/17 Break up this function
/** /**
* Adds a course to the GameView. The view is scaled accordingly unless a border is set in which * Adds a course to the GameView. The view is scaled accordingly unless a border is set in which
@@ -474,6 +495,7 @@ public class GameView extends Pane {
findMinMaxPoint(limitingCoordinates); findMinMaxPoint(limitingCoordinates);
double minLonToMaxLon = scaleRaceExtremities(); double minLonToMaxLon = scaleRaceExtremities();
calculateReferencePointLocation(minLonToMaxLon); calculateReferencePointLocation(minLonToMaxLon);
// drawGoogleMap();
} }
private void setSelectedBoat(BoatObject bo, Boolean isSelected) { private void setSelectedBoat(BoatObject bo, Boolean isSelected) {