mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-23 22:19:13 +00:00
Merge branch 'origin/simulator_maps_v3'
This commit is contained in:
+4
@@ -58,6 +58,10 @@ public class CourseAreaDescriptor {
|
||||
return radius;
|
||||
}
|
||||
|
||||
public double getRadiusInMeters() {
|
||||
return (radius*1852.0);
|
||||
}
|
||||
|
||||
public LatLng getCenterPos() {
|
||||
return centerPos;
|
||||
}
|
||||
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
package com.sap.sailing.gwt.ui.simulator;
|
||||
|
||||
import com.google.gwt.maps.client.MapWidget;
|
||||
import com.google.gwt.maps.client.base.Point;
|
||||
import com.google.gwt.maps.client.events.center.CenterChangeMapEvent;
|
||||
import com.google.gwt.maps.client.events.center.CenterChangeMapHandler;
|
||||
import com.google.gwt.resources.client.ImageResource;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.ImageTransformer;
|
||||
import com.sap.sailing.gwt.ui.shared.racemap.CanvasOverlayV3;
|
||||
|
||||
public class ImageCanvasOverlay extends CanvasOverlayV3 {
|
||||
|
||||
private int canvasWidth;
|
||||
private int canvasHeight;
|
||||
|
||||
private int oLeft;
|
||||
private int oTop;
|
||||
|
||||
private double bearing = 0.0;
|
||||
|
||||
private ImageTransformer imgTrafo;
|
||||
|
||||
public ImageCanvasOverlay(MapWidget map, int zIndex, ImageResource img) {
|
||||
|
||||
super(map, zIndex);
|
||||
canvasWidth = 100;
|
||||
canvasHeight = 100;
|
||||
|
||||
if(getCanvas() != null) {
|
||||
//setCanvasPosition(map.getAbsoluteLeft(), map.getAbsoluteTop());
|
||||
getCanvas().setWidth(String.valueOf(canvasWidth));
|
||||
getCanvas().setHeight(String.valueOf(canvasHeight));
|
||||
getCanvas().setCoordinateSpaceWidth(canvasWidth);
|
||||
getCanvas().setCoordinateSpaceHeight(canvasHeight);
|
||||
}
|
||||
|
||||
imgTrafo = new ImageTransformer(img);
|
||||
|
||||
|
||||
getMap().addCenterChangeHandler(new CenterChangeMapHandler() {
|
||||
@Override
|
||||
public void onEvent(CenterChangeMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
setPosition();
|
||||
};
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void addToMap() {
|
||||
super.addToMap();
|
||||
}
|
||||
|
||||
|
||||
public void setPosition() {
|
||||
|
||||
if (mapProjection != null) {
|
||||
Point sw = mapProjection.fromLatLngToDivPixel(getMap().getBounds().getSouthWest());
|
||||
Point ne = mapProjection.fromLatLngToDivPixel(getMap().getBounds().getNorthEast());
|
||||
double pLeft = Math.min(sw.getX(), ne.getX()) - 25 + oLeft;
|
||||
double pTop = Math.min(sw.getY(), ne.getY()) - 25 + oTop;
|
||||
setCanvasPosition(pLeft, pTop);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setOffset(int offsetLeft, int offsetTop) {
|
||||
this.oLeft = offsetLeft;
|
||||
this.oTop = offsetTop;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void draw() {
|
||||
|
||||
if(mapProjection != null) {
|
||||
|
||||
setPosition();
|
||||
imgTrafo.drawToCanvas(getCanvas(), bearing, 1.0);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void setBearing(double bearing) {
|
||||
this.bearing = bearing;
|
||||
}
|
||||
|
||||
}
|
||||
+91
-82
@@ -18,6 +18,7 @@ import com.google.gwt.maps.client.geometrylib.SphericalUtils;
|
||||
import com.google.gwt.maps.client.overlays.Marker;
|
||||
import com.sap.sailing.domain.common.Mile;
|
||||
import com.sap.sailing.gwt.ui.simulator.racemap.FullCanvasOverlay;
|
||||
import com.sap.sailing.simulator.util.SailingSimulatorConstants;
|
||||
|
||||
/**
|
||||
* This class implements the layer to display the race course on the map. Currently the course only consists of the
|
||||
@@ -30,6 +31,7 @@ public class RaceCourseCanvasOverlay extends FullCanvasOverlay {
|
||||
|
||||
private String racecourseColor = "White";
|
||||
private double racecourseBuoySize = 5;
|
||||
private char mode;
|
||||
|
||||
// TODO: make private!!!
|
||||
public char raceCourseDirection;
|
||||
@@ -55,9 +57,10 @@ public class RaceCourseCanvasOverlay extends FullCanvasOverlay {
|
||||
}
|
||||
}
|
||||
|
||||
public RaceCourseCanvasOverlay(MapWidget map, int zIndex) {
|
||||
public RaceCourseCanvasOverlay(MapWidget map, int zIndex, char mode) {
|
||||
super(map, zIndex);
|
||||
|
||||
this.mode = mode;
|
||||
startPoint = null;
|
||||
endPoint = null;
|
||||
startMarker = null;
|
||||
@@ -65,37 +68,41 @@ public class RaceCourseCanvasOverlay extends FullCanvasOverlay {
|
||||
|
||||
getCanvas().getElement().setClassName("raceCourse");
|
||||
|
||||
map.addClickHandler(new ClickMapHandler() {
|
||||
@Override
|
||||
public void onEvent(ClickMapEvent event) {
|
||||
if (startPoint == null) {
|
||||
startPoint = event.getMouseEvent().getLatLng();
|
||||
logger.fine("Clicked startPoint here " + startPoint);
|
||||
if (startPoint != null) {
|
||||
if (this.mode == SailingSimulatorConstants.ModeFreestyle) {
|
||||
|
||||
setCanvasSettings();
|
||||
// drawCanvas();
|
||||
setStartPoint(startPoint);
|
||||
registeredRaceCourseMouseMoveHandler = getMap().addMouseMoveHandler(new RaceCourseMapMouseMoveHandler());
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
map.addClickHandler(new ClickMapHandler() {
|
||||
@Override
|
||||
public void onEvent(ClickMapEvent event) {
|
||||
if (startPoint == null) {
|
||||
startPoint = event.getMouseEvent().getLatLng();
|
||||
logger.fine("Clicked startPoint here " + startPoint);
|
||||
if (startPoint != null) {
|
||||
|
||||
setCanvasSettings();
|
||||
// drawCanvas();
|
||||
setStartPoint(startPoint);
|
||||
registeredRaceCourseMouseMoveHandler = getMap().addMouseMoveHandler(new RaceCourseMapMouseMoveHandler());
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
map.addDblClickHandler(new DblClickMapHandler() {
|
||||
@Override
|
||||
public void onEvent(DblClickMapEvent event) {
|
||||
if (isSelected) {
|
||||
endPoint = event.getMouseEvent().getLatLng();
|
||||
logger.info("Clicked endPoint " + "here " + endPoint);
|
||||
if (endPoint != null) {
|
||||
setEndPoint(endPoint);
|
||||
center();
|
||||
registeredRaceCourseMouseMoveHandler.removeHandler();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
map.addDblClickHandler(new DblClickMapHandler() {
|
||||
@Override
|
||||
public void onEvent(DblClickMapEvent event) {
|
||||
if (isSelected) {
|
||||
endPoint = event.getMouseEvent().getLatLng();
|
||||
logger.info("Clicked endPoint " + "here " + endPoint);
|
||||
if (endPoint != null) {
|
||||
setEndPoint(endPoint);
|
||||
center();
|
||||
registeredRaceCourseMouseMoveHandler.removeHandler();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
@@ -121,66 +128,15 @@ public class RaceCourseCanvasOverlay extends FullCanvasOverlay {
|
||||
int zoomLevel = map.getZoom();
|
||||
racecourseBuoySize = 1.0 + (5.0 - 1.0)*(zoomLevel - 10.0)/(14.0 - 10.0);
|
||||
setStartPoint(startPoint);
|
||||
setEndPoint(endPoint);
|
||||
setEndPoint(endPoint);
|
||||
}
|
||||
|
||||
private void setStartPoint(LatLng startPoint) {
|
||||
this.startPoint = startPoint;
|
||||
|
||||
if (startPoint != null) {
|
||||
Point point = mapProjection.fromLatLngToDivPixel(startPoint);
|
||||
drawCircleWithText(point.getX() - getWidgetPosLeft(), point.getY() - getWidgetPosTop(), racecourseBuoySize,
|
||||
racecourseColor, "Start");
|
||||
if (startMarker != null) {
|
||||
startMarker.setPosition(startPoint);
|
||||
} else {
|
||||
// default markers are too large cluttering race display
|
||||
/*
|
||||
* startMarker = new Marker(startPoint); map.addOverlay(startMarker); /*
|
||||
* startMarker.addMarkerMouseOverHandler(new MarkerMouseOverHandler () {
|
||||
*
|
||||
* @Override public void onMouseOver(MarkerMouseOverEvent event) { InfoWindowContent content = new
|
||||
* InfoWindowContent("Start"); map.getInfoWindow().open(startMarker, content); }
|
||||
*
|
||||
* });
|
||||
*
|
||||
* startMarker.addMarkerMouseOutHandler(new MarkerMouseOutHandler () {
|
||||
*
|
||||
* @Override public void onMouseOut(MarkerMouseOutEvent event) { map.getInfoWindow().close(); }
|
||||
*
|
||||
* });
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void setEndPoint(LatLng endPoint) {
|
||||
this.endPoint = endPoint;
|
||||
|
||||
if (endPoint != null) {
|
||||
Point point = mapProjection.fromLatLngToDivPixel(endPoint);
|
||||
drawCircleWithText(point.getX() - getWidgetPosLeft(), point.getY() - getWidgetPosTop(), racecourseBuoySize,
|
||||
racecourseColor, "End");
|
||||
|
||||
if (endMarker != null) {
|
||||
endMarker.setPosition(endPoint);
|
||||
} else {
|
||||
// default markers are too large cluttering race display
|
||||
/*
|
||||
* endMarker = new Marker(endPoint); map.addOverlay(endMarker);
|
||||
*
|
||||
* endMarker.addMarkerMouseOverHandler(new RaceCourseMarkerMouseOverHandler());
|
||||
*
|
||||
* endMarker.addMarkerMouseOutHandler(new MarkerMouseOutHandler() {
|
||||
*
|
||||
* @Override public void onMouseOut(MarkerMouseOutEvent event) { map.getInfoWindow().close(); }
|
||||
*
|
||||
* });
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -188,6 +144,59 @@ public class RaceCourseCanvasOverlay extends FullCanvasOverlay {
|
||||
if(mapProjection != null && startPoint != null && endPoint != null) {
|
||||
setCanvasSettings();
|
||||
setStartEndPoint(startPoint, endPoint);
|
||||
|
||||
if (startPoint != null) {
|
||||
|
||||
Point point = mapProjection.fromLatLngToDivPixel(startPoint);
|
||||
drawCircleWithText(point.getX() - getWidgetPosLeft(), point.getY() - getWidgetPosTop(), racecourseBuoySize,
|
||||
racecourseColor, "Start");
|
||||
if (startMarker != null) {
|
||||
startMarker.setPosition(startPoint);
|
||||
} else {
|
||||
// default markers are too large cluttering race display
|
||||
/*
|
||||
* startMarker = new Marker(startPoint); map.addOverlay(startMarker); /*
|
||||
* startMarker.addMarkerMouseOverHandler(new MarkerMouseOverHandler () {
|
||||
*
|
||||
* @Override public void onMouseOver(MarkerMouseOverEvent event) { InfoWindowContent content = new
|
||||
* InfoWindowContent("Start"); map.getInfoWindow().open(startMarker, content); }
|
||||
*
|
||||
* });
|
||||
*
|
||||
* startMarker.addMarkerMouseOutHandler(new MarkerMouseOutHandler () {
|
||||
*
|
||||
* @Override public void onMouseOut(MarkerMouseOutEvent event) { map.getInfoWindow().close(); }
|
||||
*
|
||||
* });
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (endPoint != null) {
|
||||
Point point = mapProjection.fromLatLngToDivPixel(endPoint);
|
||||
drawCircleWithText(point.getX() - getWidgetPosLeft(), point.getY() - getWidgetPosTop(), racecourseBuoySize,
|
||||
racecourseColor, "End");
|
||||
|
||||
if (endMarker != null) {
|
||||
endMarker.setPosition(endPoint);
|
||||
} else {
|
||||
// default markers are too large cluttering race display
|
||||
/*
|
||||
* endMarker = new Marker(endPoint); map.addOverlay(endMarker);
|
||||
*
|
||||
* endMarker.addMarkerMouseOverHandler(new RaceCourseMarkerMouseOverHandler());
|
||||
*
|
||||
* endMarker.addMarkerMouseOutHandler(new MarkerMouseOutHandler() {
|
||||
*
|
||||
* @Override public void onMouseOut(MarkerMouseOutEvent event) { map.getInfoWindow().close(); }
|
||||
*
|
||||
* });
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
drawLine(endPoint, racecourseColor);
|
||||
}
|
||||
}
|
||||
|
||||
+86
-46
@@ -2,74 +2,119 @@ package com.sap.sailing.gwt.ui.simulator;
|
||||
|
||||
import com.google.gwt.canvas.dom.client.Context2d;
|
||||
import com.google.gwt.canvas.dom.client.Context2d.TextAlign;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.maps.client.MapWidget;
|
||||
import com.google.gwt.maps.client.base.LatLng;
|
||||
import com.google.gwt.maps.client.base.Point;
|
||||
import com.google.gwt.maps.client.events.click.ClickMapEvent;
|
||||
import com.google.gwt.maps.client.events.click.ClickMapHandler;
|
||||
import com.google.gwt.maps.client.events.mouseout.MouseOutMapEvent;
|
||||
import com.google.gwt.maps.client.events.mouseout.MouseOutMapHandler;
|
||||
import com.google.gwt.maps.client.events.idle.IdleMapEvent;
|
||||
import com.google.gwt.maps.client.events.idle.IdleMapHandler;
|
||||
import com.google.gwt.maps.client.overlays.Circle;
|
||||
import com.google.gwt.maps.client.overlays.CircleOptions;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.ImageTransformer;
|
||||
import com.sap.sailing.gwt.ui.simulator.racemap.FullCanvasOverlay;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.SimulatorResources;
|
||||
import com.sap.sailing.simulator.util.SailingSimulatorConstants;
|
||||
|
||||
public class RegattaAreaCanvasOverlay extends FullCanvasOverlay {
|
||||
|
||||
private static SimulatorResources resources = GWT.create(SimulatorResources.class);
|
||||
|
||||
private SimulatorMap simulatorMap;
|
||||
private RaceCourseCanvasOverlay raceCourseCanvasOverlay;
|
||||
private VenueDescriptor venue;
|
||||
private CourseAreaDescriptor currentCourseArea = null;
|
||||
|
||||
private boolean pan;
|
||||
private boolean initial;
|
||||
private boolean mapPan = false;
|
||||
private double raceBearing = 0.0;
|
||||
private double diffBearing = 0.0;
|
||||
|
||||
private ImageTransformer windRoseBackground;
|
||||
private ImageTransformer windRoseNeedle;
|
||||
|
||||
public RegattaAreaCanvasOverlay(MapWidget map, int zIndex, char event) {
|
||||
super(map, zIndex);
|
||||
public RegattaAreaCanvasOverlay(MapWidget map, int zIndex, char event, final SimulatorMap simulatorMap) {
|
||||
|
||||
super(map, zIndex);
|
||||
|
||||
this.simulatorMap = simulatorMap;
|
||||
this.venue = VenueDescriptorFactory.createVenue(event);
|
||||
this.currentCourseArea = this.venue.getDefaultCourseArea();
|
||||
|
||||
/*getMap().addZoomChangeHandler(new ZoomChangeMapHandler() {
|
||||
|
||||
@Override
|
||||
public void onEvent(ZoomChangeMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
simulatorMap.windRoseCanvasOverlay.removeFromMap();
|
||||
simulatorMap.windNeedleCanvasOverlay.removeFromMap();
|
||||
mapPan = true;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
getMap().addDragStartHandler(new DragStartMapHandler() {
|
||||
|
||||
@Override
|
||||
public void onEvent(DragStartMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
simulatorMap.windRoseCanvasOverlay.removeFromMap();
|
||||
simulatorMap.windNeedleCanvasOverlay.removeFromMap();
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
getMap().addDragEndHandler(new DragEndMapHandler() {
|
||||
|
||||
@Override
|
||||
public void onEvent(DragEndMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
simulatorMap.windRoseCanvasOverlay.addToMap();
|
||||
simulatorMap.windNeedleCanvasOverlay.addToMap();
|
||||
}
|
||||
|
||||
|
||||
});*/
|
||||
|
||||
getMap().addIdleHandler(new IdleMapHandler() {
|
||||
|
||||
@Override
|
||||
public void onEvent(IdleMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
if (mapPan) {
|
||||
//System.out.println("Map Idle Event Handler.");
|
||||
simulatorMap.getWindRoseCanvasOverlay().addToMap();
|
||||
simulatorMap.getWindNeedleCanvasOverlay().addToMap();
|
||||
mapPan = false;
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
windRoseBackground = new ImageTransformer(resources.windRoseBackground());
|
||||
windRoseNeedle = new ImageTransformer(resources.windRoseNeedle());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addToMap() {
|
||||
super.addToMap();
|
||||
|
||||
// TODO MigrationV3:
|
||||
// getPane().add(windRoseBackground.getCanvas(), getWidgetPosLeft() + windBackgroundOffset, getWidgetPosTop());
|
||||
// getPane().add(windRoseNeedle.getCanvas(), getWidgetPosLeft() + windBackgroundOffset + windNeedleOffset,
|
||||
// getWidgetPosTop() + windNeedleOffset);
|
||||
|
||||
int counter = 1;
|
||||
int counter = 0;
|
||||
for (CourseAreaDescriptor courseArea : venue.getCourseAreas()) {
|
||||
drawCircleFromRadius(counter++, courseArea);
|
||||
}
|
||||
|
||||
map.panTo(venue.getCenterPos());
|
||||
this.initial = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void draw() {
|
||||
|
||||
super.draw();
|
||||
|
||||
if(mapProjection != null) {
|
||||
// TODO MigrationV3:
|
||||
// getPane().setWidgetPosition(windRoseBackground.getCanvas(), getWidgetPosLeft() + windBackgroundOffset,
|
||||
// getWidgetPosTop());
|
||||
// getPane().setWidgetPosition(windRoseNeedle.getCanvas(),
|
||||
// getWidgetPosLeft() + windBackgroundOffset + windNeedleOffset, getWidgetPosTop() + windNeedleOffset);
|
||||
|
||||
clearCanvas();
|
||||
drawRegattaAreas();
|
||||
|
||||
if (this.initial) {
|
||||
updateRaceCourse(0, 0);
|
||||
this.initial = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,8 +124,6 @@ public class RegattaAreaCanvasOverlay extends FullCanvasOverlay {
|
||||
}
|
||||
|
||||
protected void drawRegattaAreas() {
|
||||
windRoseBackground.drawTransformedImage(0.0, 1.0);
|
||||
windRoseNeedle.drawTransformedImage(raceBearing + 180.0, 1.0);
|
||||
|
||||
LatLng cPos = LatLng.newInstance(54.4344, 10.19659167);
|
||||
Point centerPoint = mapProjection.fromLatLngToDivPixel(cPos);
|
||||
@@ -101,6 +144,7 @@ public class RegattaAreaCanvasOverlay extends FullCanvasOverlay {
|
||||
|
||||
// TODO MigrationV3: This is not the right place to create Circles being not drawn to the canvas -> move to SimulatorMap
|
||||
public void drawCircleFromRadius(int regIdx, CourseAreaDescriptor courseArea) {
|
||||
|
||||
CircleOptions circleOptions = CircleOptions.newInstance();
|
||||
circleOptions.setStrokeColor("white");
|
||||
circleOptions.setStrokeWeight(1);
|
||||
@@ -109,51 +153,47 @@ public class RegattaAreaCanvasOverlay extends FullCanvasOverlay {
|
||||
circleOptions.setFillOpacity(0.0);
|
||||
circleOptions.setCenter(courseArea.getCenterPos());
|
||||
Circle circle = Circle.newInstance(circleOptions);
|
||||
circle.setRadius(courseArea.getRadius());
|
||||
circle.setRadius(courseArea.getRadiusInMeters());
|
||||
|
||||
final int regIdxFinal = regIdx;
|
||||
|
||||
circle.addClickHandler(new ClickMapHandler() {
|
||||
public void onEvent(ClickMapEvent e) {
|
||||
// System.out.println("Click: "+currentRegArea.name);
|
||||
//System.out.println("Click: "+currentCourseArea.getName());
|
||||
CourseAreaDescriptor newRegArea = venue.getCourseAreas().get(regIdxFinal);
|
||||
|
||||
if (newRegArea != currentCourseArea) {
|
||||
currentCourseArea = newRegArea;
|
||||
// simulatorMap.clearOverlays();
|
||||
simulatorMap.clearOverlays();
|
||||
simulatorMap.getWindRoseCanvasOverlay().removeFromMap();
|
||||
simulatorMap.getWindNeedleCanvasOverlay().removeFromMap();
|
||||
updateRaceCourse(0, 0);
|
||||
raceCourseCanvasOverlay.draw();
|
||||
}
|
||||
|
||||
pan = true;
|
||||
map.panTo(currentCourseArea.getCenterPos());
|
||||
mapPan = true;
|
||||
if (map.getZoom() < 14) {
|
||||
map.setZoom(14);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
circle.setMap(getMap());
|
||||
getMap().addMouseOutMoveHandler(new MouseOutMapHandler() {
|
||||
public void onEvent(MouseOutMapEvent event) {
|
||||
if (pan) {
|
||||
pan = false;
|
||||
if (map.getZoom() < 14) {
|
||||
map.setZoom(14);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
protected void updateRaceCourse(int type, double bearing) {
|
||||
|
||||
if (type == 1) {
|
||||
raceBearing = bearing;
|
||||
windRoseNeedle.drawTransformedImage(raceBearing + 180.0, 1.0);
|
||||
simulatorMap.getWindNeedleCanvasOverlay().setBearing(raceBearing + 180.0);
|
||||
} else if (type == 2) {
|
||||
diffBearing = bearing;
|
||||
}
|
||||
if (currentCourseArea != null) {
|
||||
// simulatorMap.getMainPanel().setUpdateButtonEnabled(true);
|
||||
simulatorMap.getMainPanel().setUpdateButtonEnabled(true);
|
||||
LatLng startPoint;
|
||||
LatLng endPoint;
|
||||
if (raceCourseCanvasOverlay.raceCourseDirection == SailingSimulatorConstants.LegTypeDownwind) {
|
||||
@@ -165,7 +205,7 @@ public class RegattaAreaCanvasOverlay extends FullCanvasOverlay {
|
||||
}
|
||||
raceCourseCanvasOverlay.setStartEndPoint(startPoint, endPoint);
|
||||
} else {
|
||||
// simulatorMap.getMainPanel().setUpdateButtonEnabled(false);
|
||||
simulatorMap.getMainPanel().setUpdateButtonEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-5
@@ -147,14 +147,16 @@ public class SimulatorMainPanel extends SimplePanel {
|
||||
if (setting.getDisplayName().equals("Base Bearing (Degrees)")) {
|
||||
simulatorMap.clearOverlays();
|
||||
//System.out.println("Wind Base Bearing: "+setting.getValue());
|
||||
simulatorMap.regattaAreaCanvasOverlay.updateRaceCourse(1, (Double) setting.getValue());
|
||||
simulatorMap.raceCourseCanvasOverlay.draw();
|
||||
simulatorMap.getRegattaAreaCanvasOverlay().updateRaceCourse(1, (Double) setting.getValue());
|
||||
simulatorMap.getRaceCourseCanvasOverlay().draw();
|
||||
simulatorMap.getWindNeedleCanvasOverlay().draw();
|
||||
}
|
||||
if (setting.getDisplayName().equals("Race Course Diff (Degrees)")) {
|
||||
simulatorMap.clearOverlays();
|
||||
//System.out.println("Wind Base Bearing: "+setting.getValue());
|
||||
simulatorMap.regattaAreaCanvasOverlay.updateRaceCourse(2, (Double) setting.getValue());
|
||||
simulatorMap.raceCourseCanvasOverlay.draw();
|
||||
simulatorMap.getRegattaAreaCanvasOverlay().updateRaceCourse(2, (Double) setting.getValue());
|
||||
simulatorMap.getRaceCourseCanvasOverlay().draw();
|
||||
simulatorMap.getWindNeedleCanvasOverlay().draw();
|
||||
}
|
||||
if (autoUpdate) {
|
||||
update();
|
||||
@@ -834,7 +836,7 @@ public class SimulatorMainPanel extends SimplePanel {
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.WINDDISPLAY, currentWPDisplay, selection, true);
|
||||
} else if (summaryButton.getValue()) {
|
||||
showTimePanel(false);
|
||||
simulatorMap.regattaAreaCanvasOverlay.draw();
|
||||
simulatorMap.getRegattaAreaCanvasOverlay().draw();
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.SUMMARY, currentWPDisplay, selection, true);
|
||||
} else if (replayButton.getValue()) {
|
||||
showTimePanel(true);
|
||||
|
||||
+46
-9
@@ -6,6 +6,7 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.event.logical.shared.ResizeEvent;
|
||||
import com.google.gwt.event.logical.shared.ResizeHandler;
|
||||
import com.google.gwt.maps.client.LoadApi;
|
||||
@@ -42,6 +43,7 @@ import com.sap.sailing.gwt.ui.shared.racemap.GoogleMapAPIKey;
|
||||
import com.sap.sailing.gwt.ui.shared.racemap.GoogleMapStyleHelper;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.ColorPalette;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.ColorPaletteGenerator;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.SimulatorResources;
|
||||
import com.sap.sailing.gwt.ui.simulator.windpattern.WindPatternDisplay;
|
||||
import com.sap.sailing.simulator.util.SailingSimulatorConstants;
|
||||
|
||||
@@ -52,6 +54,9 @@ import com.sap.sailing.simulator.util.SailingSimulatorConstants;
|
||||
*
|
||||
*/
|
||||
public class SimulatorMap extends AbsolutePanel implements RequiresDataInitialization, TimeListenerWithStoppingCriteria {
|
||||
|
||||
private static SimulatorResources resources = GWT.create(SimulatorResources.class);
|
||||
|
||||
private MapWidget map;
|
||||
private boolean dataInitialized;
|
||||
private boolean overlaysInitialized;
|
||||
@@ -62,11 +67,13 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
private WindFieldCanvasOverlay windFieldCanvasOverlay;
|
||||
private WindGridCanvasOverlay windGridCanvasOverlay;
|
||||
private WindLineCanvasOverlay windLineCanvasOverlay;
|
||||
// TODO MigrationV3: should not be public
|
||||
public RegattaAreaCanvasOverlay regattaAreaCanvasOverlay;
|
||||
|
||||
private RegattaAreaCanvasOverlay regattaAreaCanvasOverlay;
|
||||
private ImageCanvasOverlay windRoseCanvasOverlay;
|
||||
private ImageCanvasOverlay windNeedleCanvasOverlay;
|
||||
private List<PathCanvasOverlay> replayPathCanvasOverlays;
|
||||
// TODO MigrationV3: should not be public
|
||||
public RaceCourseCanvasOverlay raceCourseCanvasOverlay;
|
||||
|
||||
private RaceCourseCanvasOverlay raceCourseCanvasOverlay;
|
||||
private PathLegendCanvasOverlay legendCanvasOverlay;
|
||||
|
||||
private List<TimeListenerWithStoppingCriteria> timeListeners;
|
||||
@@ -216,6 +223,7 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
refreshWindFieldOverlay(windFieldDTO);
|
||||
|
||||
timeListeners.clear();
|
||||
|
||||
if (windParams.isShowArrows()) {
|
||||
timeListeners.add(windFieldCanvasOverlay);
|
||||
}
|
||||
@@ -381,22 +389,31 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
}
|
||||
};
|
||||
|
||||
LoadApi.go(onLoad, loadLibraries, sensor, "key="+GoogleMapAPIKey.V2_APIKey);
|
||||
LoadApi.go(onLoad, loadLibraries, sensor, "key="+GoogleMapAPIKey.V2_APIKey);
|
||||
}
|
||||
|
||||
private void initializeOverlays() {
|
||||
if (mode == SailingSimulatorConstants.ModeEvent) {
|
||||
if (regattaAreaCanvasOverlay == null) {
|
||||
regattaAreaCanvasOverlay = new RegattaAreaCanvasOverlay(map, SimulatorMapOverlaysZIndexes.REGATTA_AREA_ZINDEX, getMainPanel().getEvent());
|
||||
regattaAreaCanvasOverlay = new RegattaAreaCanvasOverlay(map, SimulatorMapOverlaysZIndexes.REGATTA_AREA_ZINDEX, getMainPanel().getEvent(), this);
|
||||
regattaAreaCanvasOverlay.addToMap();
|
||||
|
||||
int offsetLeft = 50;
|
||||
int offsetTop = 25;
|
||||
windRoseCanvasOverlay = new ImageCanvasOverlay(map, SimulatorMapOverlaysZIndexes.WIND_ROSE_ZINDEX, resources.windRoseBackground());
|
||||
windRoseCanvasOverlay.setOffset(offsetLeft, offsetTop);
|
||||
windRoseCanvasOverlay.addToMap();
|
||||
windNeedleCanvasOverlay = new ImageCanvasOverlay(map, SimulatorMapOverlaysZIndexes.WIND_ROSE_ZINDEX, resources.windRoseNeedle());
|
||||
windNeedleCanvasOverlay.setOffset(offsetLeft, offsetTop);
|
||||
windNeedleCanvasOverlay.setBearing(180.0);
|
||||
windNeedleCanvasOverlay.addToMap();
|
||||
}
|
||||
}
|
||||
|
||||
raceCourseCanvasOverlay = new RaceCourseCanvasOverlay(map, SimulatorMapOverlaysZIndexes.RACE_COURSE_ZINDEX);
|
||||
raceCourseCanvasOverlay = new RaceCourseCanvasOverlay(map, SimulatorMapOverlaysZIndexes.RACE_COURSE_ZINDEX, mode);
|
||||
|
||||
if (mode == SailingSimulatorConstants.ModeEvent) {
|
||||
regattaAreaCanvasOverlay.setRaceCourseCanvas(raceCourseCanvasOverlay);
|
||||
regattaAreaCanvasOverlay.updateRaceCourse(0, 0);
|
||||
}
|
||||
|
||||
if (windParams.isShowArrows()) {
|
||||
@@ -460,6 +477,8 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
windParams.setxRes(xRes);
|
||||
windParams.setyRes(yRes);
|
||||
busyIndicator.setBusy(true);
|
||||
timer.setTime(windParams.getStartTime().getTime());
|
||||
|
||||
simulatorService.getWindField(windParams, windPatternDisplay, new AsyncCallback<WindFieldDTO>() {
|
||||
@Override
|
||||
public void onFailure(Throwable message) {
|
||||
@@ -526,7 +545,6 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
}
|
||||
}
|
||||
|
||||
this.timer.setTime(this.windParams.getStartTime().getTime());
|
||||
if (this.windParams.isShowArrows()) {
|
||||
this.windFieldCanvasOverlay.draw();
|
||||
}
|
||||
@@ -563,6 +581,7 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
windParams.setyRes(yRes);
|
||||
|
||||
busyIndicator.setBusy(true);
|
||||
timer.setTime(windParams.getStartTime().getTime());
|
||||
|
||||
simulatorService.getSimulatorResults(mode, raceCourseDirection, windParams, windPatternDisplay, true, selection, new ResultManager(summaryView));
|
||||
|
||||
@@ -848,9 +867,27 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
raceCourseCanvasOverlay.raceCourseDirection = raceCourseDirection;
|
||||
regattaAreaCanvasOverlay.updateRaceCourse(0, 0);
|
||||
raceCourseCanvasOverlay.draw();
|
||||
windNeedleCanvasOverlay.draw();
|
||||
}
|
||||
|
||||
public WindFieldGenParamsDTO getWindParams() {
|
||||
return windParams;
|
||||
}
|
||||
|
||||
public RegattaAreaCanvasOverlay getRegattaAreaCanvasOverlay() {
|
||||
return regattaAreaCanvasOverlay;
|
||||
}
|
||||
|
||||
public ImageCanvasOverlay getWindRoseCanvasOverlay() {
|
||||
return windRoseCanvasOverlay;
|
||||
}
|
||||
|
||||
public ImageCanvasOverlay getWindNeedleCanvasOverlay() {
|
||||
return windNeedleCanvasOverlay;
|
||||
}
|
||||
|
||||
public RaceCourseCanvasOverlay getRaceCourseCanvasOverlay() {
|
||||
return raceCourseCanvasOverlay;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+5
-4
@@ -11,12 +11,13 @@ public interface SimulatorMapOverlaysZIndexes {
|
||||
|
||||
public static int REGATTA_AREA_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 1;
|
||||
public static int RACE_COURSE_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 2;
|
||||
public static int WINDFIELD_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 3;
|
||||
public static int WINDSTREAMLETS_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 4;
|
||||
public static int WINDGRID_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 5;
|
||||
public static int WINDGRID_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 3;
|
||||
public static int WINDFIELD_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 4;
|
||||
public static int WINDSTREAMLETS_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 5;
|
||||
public static int WINDLINE_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 6;
|
||||
public static int PATH_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 7;
|
||||
public static int PATHLEGEND_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 8;
|
||||
public static int WIND_ROSE_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 8;
|
||||
public static int PATHLEGEND_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 9;
|
||||
|
||||
/** the z-index of the info window should always be higher than the rest */
|
||||
public static int INFO_WINDOW_ZINDEX = BASE_CANVAS_OVERLAY_ZINDEX + 50;
|
||||
|
||||
+1
-9
@@ -21,7 +21,6 @@ import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO;
|
||||
import com.sap.sailing.gwt.ui.simulator.racemap.FullCanvasOverlay;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.ToolTip;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.WindFieldMapMouseMoveHandler;
|
||||
|
||||
/**
|
||||
* A google map overlay based on a HTML5 canvas for drawing a wind field. The overlay covers the whole map and displays
|
||||
@@ -44,8 +43,6 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay implements TimeLis
|
||||
protected Map<ToolTip, SimulatorWindDTO> windFieldPoints;
|
||||
protected String arrowColor = "Blue";
|
||||
protected String arrowHeadColor = "Blue";
|
||||
|
||||
protected WindFieldMapMouseMoveHandler mmHandler;
|
||||
|
||||
protected double arrowLength = 15;
|
||||
protected WindFieldGenParamsDTO windParams = null;
|
||||
@@ -93,11 +90,7 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay implements TimeLis
|
||||
@Override
|
||||
public void addToMap() {
|
||||
super.addToMap();
|
||||
if(mmHandler == null) {
|
||||
mmHandler = new WindFieldMapMouseMoveHandler(this);
|
||||
}
|
||||
mmHandler.setWindFieldPoints(windFieldPoints);
|
||||
mouseMoveHandlerRegistration = addMouseMoveHandler(mmHandler);
|
||||
|
||||
if (timer != null) {
|
||||
timer.addTimeListener(this);
|
||||
}
|
||||
@@ -127,7 +120,6 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay implements TimeLis
|
||||
canvas.getContext2d().clearRect(0.0 /*canvas.getAbsoluteLeft()*/, 0.0/*canvas.getAbsoluteTop()*/,
|
||||
canvas.getCoordinateSpaceWidth(), canvas.getCoordinateSpaceHeight());
|
||||
windFieldPoints.clear();
|
||||
mmHandler.clear();
|
||||
}
|
||||
|
||||
protected void drawWindField() {
|
||||
|
||||
+2
-13
@@ -12,7 +12,6 @@ import java.util.TreeMap;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.google.gwt.canvas.dom.client.Context2d;
|
||||
import com.google.gwt.event.shared.HandlerRegistration;
|
||||
import com.google.gwt.maps.client.MapWidget;
|
||||
import com.google.gwt.maps.client.base.LatLng;
|
||||
import com.google.gwt.maps.client.base.Point;
|
||||
@@ -23,7 +22,6 @@ import com.sap.sailing.gwt.ui.shared.SimulatorWindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
|
||||
import com.sap.sailing.gwt.ui.simulator.racemap.FullCanvasOverlay;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.ToolTip;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.WindFieldMapMouseMoveHandler;
|
||||
|
||||
/**
|
||||
* A google map overlay based on a HTML5 canvas for drawing a wind field. The overlay covers the whole map and displays
|
||||
@@ -33,7 +31,7 @@ import com.sap.sailing.gwt.ui.simulator.util.WindFieldMapMouseMoveHandler;
|
||||
*
|
||||
*/
|
||||
public class WindStreamletsCanvasOverlay extends FullCanvasOverlay implements TimeListenerWithStoppingCriteria {
|
||||
|
||||
|
||||
/** The wind field that is to be displayed in the overlay */
|
||||
private WindFieldDTO windFieldDTO;
|
||||
|
||||
@@ -46,8 +44,6 @@ public class WindStreamletsCanvasOverlay extends FullCanvasOverlay implements Ti
|
||||
private Map<ToolTip, SimulatorWindDTO> windFieldPoints;
|
||||
private String arrowColor = "Black";
|
||||
private String arrowHeadColor = "Blue";
|
||||
private HandlerRegistration mouseMoveHandlerRegistration;
|
||||
private WindFieldMapMouseMoveHandler windFieldMapMouseMoveHandler;
|
||||
|
||||
private int xRes;
|
||||
private Timer timer;
|
||||
@@ -59,10 +55,9 @@ public class WindStreamletsCanvasOverlay extends FullCanvasOverlay implements Ti
|
||||
|
||||
this.timer = timer;
|
||||
this.xRes = xRes;
|
||||
|
||||
|
||||
windFieldDTO = null;
|
||||
windFieldPoints = new HashMap<ToolTip, SimulatorWindDTO>();
|
||||
windFieldMapMouseMoveHandler = new WindFieldMapMouseMoveHandler(this);
|
||||
|
||||
timePointWindDTOMap = new TreeMap<Long, List<SimulatorWindDTO>>();
|
||||
}
|
||||
@@ -75,9 +70,6 @@ public class WindStreamletsCanvasOverlay extends FullCanvasOverlay implements Ti
|
||||
public void addToMap() {
|
||||
super.addToMap();
|
||||
|
||||
windFieldMapMouseMoveHandler.setWindFieldPoints(windFieldPoints);
|
||||
mouseMoveHandlerRegistration = map.addMouseMoveHandler(windFieldMapMouseMoveHandler);
|
||||
|
||||
if (timer != null) {
|
||||
timer.addTimeListener(this);
|
||||
}
|
||||
@@ -87,8 +79,6 @@ public class WindStreamletsCanvasOverlay extends FullCanvasOverlay implements Ti
|
||||
public void removeFromMap() {
|
||||
super.removeFromMap();
|
||||
|
||||
mouseMoveHandlerRegistration.removeHandler();
|
||||
|
||||
if (timer != null) {
|
||||
timer.removeTimeListener(this);
|
||||
}
|
||||
@@ -126,7 +116,6 @@ public class WindStreamletsCanvasOverlay extends FullCanvasOverlay implements Ti
|
||||
canvas.getContext2d().clearRect(0.0 /*canvas.getAbsoluteLeft()*/, 0.0/*canvas.getAbsoluteTop()*/,
|
||||
canvas.getCoordinateSpaceWidth(), canvas.getCoordinateSpaceHeight());
|
||||
windFieldPoints.clear();
|
||||
windFieldMapMouseMoveHandler.clear();
|
||||
}
|
||||
|
||||
protected void drawWindField() {
|
||||
|
||||
+19
@@ -7,6 +7,8 @@ import com.google.gwt.core.client.Scheduler;
|
||||
import com.google.gwt.maps.client.MapWidget;
|
||||
import com.google.gwt.maps.client.base.LatLng;
|
||||
import com.google.gwt.maps.client.base.Point;
|
||||
import com.google.gwt.maps.client.events.center.CenterChangeMapEvent;
|
||||
import com.google.gwt.maps.client.events.center.CenterChangeMapHandler;
|
||||
import com.google.gwt.user.client.ui.RequiresResize;
|
||||
import com.sap.sailing.domain.common.dto.PositionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SimulatorWindDTO;
|
||||
@@ -35,6 +37,23 @@ public abstract class FullCanvasOverlay extends CanvasOverlayV3 implements Requi
|
||||
|
||||
public FullCanvasOverlay(MapWidget map, int zIndex) {
|
||||
super(map, zIndex);
|
||||
|
||||
/*getMap().addDragEndHandler( new DragEndMapHandler() {
|
||||
@Override
|
||||
public void onEvent(DragEndMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
draw();
|
||||
};
|
||||
});*/
|
||||
|
||||
getMap().addCenterChangeHandler(new CenterChangeMapHandler() {
|
||||
@Override
|
||||
public void onEvent(CenterChangeMapEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
draw();
|
||||
};
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
-79
@@ -1,79 +0,0 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package com.sap.sailing.gwt.ui.simulator.util;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.canvas.dom.client.Context2d;
|
||||
import com.google.gwt.canvas.dom.client.ImageData;
|
||||
import com.google.gwt.i18n.client.NumberFormat;
|
||||
import com.google.gwt.maps.client.base.LatLng;
|
||||
import com.google.gwt.maps.client.base.Point;
|
||||
import com.google.gwt.maps.client.events.mousemove.MouseMoveMapEvent;
|
||||
import com.google.gwt.maps.client.events.mousemove.MouseMoveMapHandler;
|
||||
import com.sap.sailing.gwt.ui.shared.SimulatorWindDTO;
|
||||
import com.sap.sailing.gwt.ui.simulator.racemap.FullCanvasOverlay;
|
||||
|
||||
/**
|
||||
* To handle MouseMoveEvent to display tool tips around SimulatorWindDTO objects in a wind field
|
||||
*
|
||||
* @author Nidhi Sawhney(D054070)
|
||||
*
|
||||
*/
|
||||
public class WindFieldMapMouseMoveHandler implements MouseMoveMapHandler {
|
||||
|
||||
private final FullCanvasOverlay canvasOverlay;
|
||||
private Map<ToolTip, SimulatorWindDTO> windFieldPoints = null;
|
||||
private ImageData lastImageData = null;
|
||||
private double lastToolx;
|
||||
private double lastTooly;
|
||||
|
||||
public WindFieldMapMouseMoveHandler(final FullCanvasOverlay canvasOverlay) {
|
||||
super();
|
||||
this.canvasOverlay = canvasOverlay;
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
lastImageData = null;
|
||||
}
|
||||
|
||||
public void setWindFieldPoints(final Map<ToolTip, SimulatorWindDTO> windFieldPoints) {
|
||||
this.windFieldPoints = windFieldPoints;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEvent(final MouseMoveMapEvent event) {
|
||||
if (windFieldPoints != null) {
|
||||
final LatLng latLng = event.getMouseEvent().getLatLng();
|
||||
final Point pointP = canvasOverlay.getMapProjection().fromLatLngToDivPixel(latLng);
|
||||
final double x = pointP.getX() - canvasOverlay.getWidgetPosLeft();
|
||||
final double y = pointP.getY() - canvasOverlay.getWidgetPosTop();
|
||||
final ToolTip point = new ToolTip(x, y);
|
||||
final Context2d context2d = canvasOverlay.getCanvas().getContext2d();
|
||||
if (lastImageData != null) {
|
||||
context2d.putImageData(lastImageData, lastToolx, lastTooly);
|
||||
}
|
||||
|
||||
if (windFieldPoints.containsKey(point)) {
|
||||
lastToolx = x;
|
||||
lastTooly = y;
|
||||
lastImageData = context2d.getImageData(x, y, ToolTip.toolRectW, ToolTip.toolRectH);
|
||||
|
||||
final SimulatorWindDTO windDTO = windFieldPoints.get(point);
|
||||
context2d.setFillStyle("#4f4f4f");
|
||||
context2d.fillRect(x, y, ToolTip.toolRectW, ToolTip.toolRectH);
|
||||
|
||||
context2d.setFillStyle("#FFFFFF");
|
||||
context2d.fillRect(x + 3, y + 3, ToolTip.toolRectW - 6, ToolTip.toolRectH - 6);
|
||||
|
||||
context2d.setFillStyle("Blue");
|
||||
final String speedStr = NumberFormat.getFormat("#.00").format(windDTO.trueWindSpeedInKnots);
|
||||
final String bearingStr = NumberFormat.getFormat("#.00").format(windDTO.trueWindBearingDeg);
|
||||
final String ttMsg = speedStr + " kn " + bearingStr + "�";
|
||||
context2d.fillText(ttMsg, x+10,y+15,60);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.7 KiB |
+2
@@ -9,7 +9,9 @@ public interface SailingSimulatorConstants {
|
||||
public static final char LegTypeUpwind = 'u'; // leg type: 'u'pwind
|
||||
public static final char LegTypeDownwind = 'd'; // leg type: 'd'ownwind
|
||||
|
||||
public static final char EventDummy = '0'; // used in cases where race course is defined as URL parameter
|
||||
public static final char EventKielerWoche = 'k'; // event: 'k'ieler woche
|
||||
public static final char EventTravemuenderWoche = 't'; // event: 't'ravemünder woche
|
||||
public static final char EventX40Cardiff = 'c'; // event: 'c'ardiff extreme sailing series
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user