Laylines now working upon selecting a boat. Still need to make their visibility togglable

Currently just paints upon clicking

tags: #story[956]
This commit is contained in:
William Muir
2017-05-25 09:54:00 +12:00
parent 68c3e3e999
commit 99588c7ff8
3 changed files with 66 additions and 47 deletions
@@ -282,7 +282,6 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
updateWindDirection(); updateWindDirection();
updateOrder(); updateOrder();
updateBoatSelectionComboBox(); updateBoatSelectionComboBox();
updateLaylines();
}) })
); );
@@ -410,59 +409,57 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
} }
private void updateLaylines() { private void updateLaylines(BoatGroup bg) {
for (BoatGroup bg : includedCanvasController.getBoatGroups()) { System.out.println("========" + bg.getBoat().getBoatName() + "=========");
System.out.println("========" + bg.getBoat().getBoatName() + "========="); Mark nextMark = getNextMark(bg);
Mark nextMark = getNextMark(bg); Boolean isUpwind = null;
Boolean isUpwind = null; // Can only calc leg direction if there is a next mark and it is a gate mark
// Can only calc leg direction if there is a next mark and it is a gate mark if (nextMark != null) {
if (nextMark != null) { System.out.println("Next Mark: " + nextMark.getName());
System.out.println("Next Mark: " + nextMark.getName()); if (nextMark instanceof GateMark) {
if (nextMark instanceof GateMark) { if (bg.isUpwindLeg(includedCanvasController, nextMark)) {
if (bg.isUpwindLeg(includedCanvasController, nextMark)) { isUpwind = true;
isUpwind = true; System.out.println(bg.getBoat().getBoatName() + " is on an upwind leg");
System.out.println(bg.getBoat().getBoatName() + " is on an upwind leg"); } else {
} else { isUpwind = false;
isUpwind = false; System.out.println(bg.getBoat().getBoatName() + " is on a downwind leg");
System.out.println(bg.getBoat().getBoatName() + " is on a downwind leg"); }
}
for(MarkGroup mg : includedCanvasController.getMarkGroups()) { for(MarkGroup mg : includedCanvasController.getMarkGroups()) {
if (mg.getMainMark().getId() == nextMark.getId()) { if (mg.getMainMark().getId() == nextMark.getId()) {
SingleMark singleMark1 = ((GateMark) nextMark).getSingleMark1();
SingleMark singleMark2 = ((GateMark) nextMark).getSingleMark2();
Point2D markPoint1 = includedCanvasController.findScaledXY(singleMark1.getLatitude(), singleMark1.getLongitude());
Point2D markPoint2 = includedCanvasController.findScaledXY(singleMark2.getLatitude(), singleMark2.getLongitude());
HashMap<Double, Double> angleAndSpeed;
if (isUpwind) {
angleAndSpeed = PolarTable.getOptimalUpwindVMG(StreamParser.getWindSpeed());
} else {
angleAndSpeed = PolarTable.getOptimalDownwindVMG(StreamParser.getWindSpeed());
}
Double resultingAngle = angleAndSpeed.keySet().iterator().next();
Point2D boatCurrentPos = new Point2D(bg.getLayoutX(), bg.getLayoutY());
Point2D gateMidPoint = markPoint1.midpoint(markPoint2);
Integer lineFuncResult = GeometryUtils.lineFunction(boatCurrentPos, gateMidPoint, markPoint2);
if (lineFuncResult == 1) {
mg.addRightLayline(markPoint2, 180 - resultingAngle, StreamParser.getWindDirection());
mg.addLeftLayline(markPoint1, 180 - resultingAngle, StreamParser.getWindDirection());
} else if (lineFuncResult == -1) {
mg.addRightLayline(markPoint1, 180 - resultingAngle, StreamParser.getWindDirection());
mg.addLeftLayline(markPoint2, 180 - resultingAngle, StreamParser.getWindDirection());
}
SingleMark singleMark1 = ((GateMark) nextMark).getSingleMark1();
SingleMark singleMark2 = ((GateMark) nextMark).getSingleMark2();
Point2D markPoint1 = includedCanvasController.findScaledXY(singleMark1.getLatitude(), singleMark1.getLongitude());
Point2D markPoint2 = includedCanvasController.findScaledXY(singleMark2.getLatitude(), singleMark2.getLongitude());
HashMap<Double, Double> angleAndSpeed;
if (isUpwind) {
angleAndSpeed = PolarTable.getOptimalUpwindVMG(StreamParser.getWindSpeed());
} else {
angleAndSpeed = PolarTable.getOptimalDownwindVMG(StreamParser.getWindSpeed());
} }
Double resultingAngle = angleAndSpeed.keySet().iterator().next();
Point2D boatCurrentPos = new Point2D(bg.getBoatLayoutX(), bg.getBoatLayoutY());
Point2D gateMidPoint = markPoint1.midpoint(markPoint2);
Integer lineFuncResult = GeometryUtils.lineFunction(boatCurrentPos, gateMidPoint, markPoint2);
if (lineFuncResult == 1) {
mg.addRightLayline(markPoint2, 180 - resultingAngle, StreamParser.getWindDirection());
mg.addLeftLayline(markPoint1, 180 - resultingAngle, StreamParser.getWindDirection());
} else if (lineFuncResult == -1) {
mg.addRightLayline(markPoint1, 180 - resultingAngle, StreamParser.getWindDirection());
mg.addLeftLayline(markPoint2, 180 - resultingAngle, StreamParser.getWindDirection());
}
} }
} }
} }
System.out.println();
} }
System.out.println();
} }
@@ -628,6 +625,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
if (bg.getBoat().getHullID().equals(yacht.getHullID())) { if (bg.getBoat().getHullID().equals(yacht.getHullID())) {
bg.setIsSelected(true); bg.setIsSelected(true);
selectedBoat = yacht; selectedBoat = yacht;
updateLaylines(bg);
} else { } else {
bg.setIsSelected(false); bg.setIsSelected(false);
} }
+22 -1
View File
@@ -59,6 +59,8 @@ public class BoatGroup extends Group {
private Text estTimeToNextMarkObject; private Text estTimeToNextMarkObject;
private Text legTimeObject; private Text legTimeObject;
private Wake wake; private Wake wake;
private Line leftLayLine;
private Line rightLayline;
private Double distanceTravelled = 0.0; private Double distanceTravelled = 0.0;
private Point2D lastPoint; private Point2D lastPoint;
private boolean destinationSet; private boolean destinationSet;
@@ -158,10 +160,13 @@ public class BoatGroup extends Group {
} }
leftLayLine = new Line();
rightLayline = new Line();
wake = new Wake(0, -BOAT_HEIGHT); wake = new Wake(0, -BOAT_HEIGHT);
super.getChildren() super.getChildren()
.addAll(teamNameObject, velocityObject, boatPoly, estTimeToNextMarkObject, .addAll(teamNameObject, velocityObject, boatPoly, estTimeToNextMarkObject,
legTimeObject); legTimeObject, leftLayLine, rightLayline);
} }
/** /**
@@ -414,6 +419,7 @@ public class BoatGroup extends Group {
setWakeVisible(isSelected); setWakeVisible(isSelected);
setEstTimeToNextMarkObjectVisible(isSelected); setEstTimeToNextMarkObjectVisible(isSelected);
setLegTimeObjectVisible(isSelected); setLegTimeObjectVisible(isSelected);
setLayLinesVisible(isSelected);
} }
@@ -441,6 +447,11 @@ public class BoatGroup extends Group {
wake.setVisible(visible); wake.setVisible(visible);
} }
public void setLayLinesVisible(Boolean visible) {
leftLayLine.setVisible(visible);
rightLayline.setVisible(visible);
}
public Yacht getBoat() { public Yacht getBoat() {
return boat; return boat;
} }
@@ -467,6 +478,16 @@ public class BoatGroup extends Group {
return group; return group;
} }
public Double getBoatLayoutX() {
return boatPoly.getLayoutX();
}
public Double getBoatLayoutY() {
return boatPoly.getLayoutY();
}
public boolean isStopped() { public boolean isStopped() {
return isStopped; return isStopped;
} }