mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-06 19:12:23 +00:00
Added support for replaying the path, WIP.
This commit is contained in:
1 parent
584d8f78ac
commit
718752e3a1
4 files changed
+101
-18
No files matched your search
+5
-1
@@ -35,7 +35,11 @@ public class PathCanvasOverlay extends WindFieldCanvasOverlay {
|
||||
protected void drawWindField() {
|
||||
logger.fine("In PathCanvasOverlay.drawWindField");
|
||||
List<WindDTO> windDTOList = wl.getMatrix();
|
||||
|
||||
drawWindField(windDTOList);
|
||||
}
|
||||
|
||||
protected void drawWindField(final List<WindDTO> windDTOList) {
|
||||
|
||||
if (windDTOList != null && windDTOList.size() > 0) {
|
||||
Iterator<WindDTO> windDTOIter = windDTOList.iterator();
|
||||
int index = 0;
|
||||
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
package com.sap.sailing.gwt.ui.simulator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.sap.sailing.gwt.ui.client.TimeListener;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDTO;
|
||||
|
||||
public class ReplayPathCanvasOverlay extends PathCanvasOverlay implements TimeListener {
|
||||
|
||||
private final Timer timer;
|
||||
private static Logger logger = Logger.getLogger("com.sap.sailing");
|
||||
|
||||
public ReplayPathCanvasOverlay(Timer timer) {
|
||||
this.timer = timer;
|
||||
this.timer.addTimeListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawWindField() {
|
||||
timeChanged(timer.getTime());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void timeChanged(Date date) {
|
||||
canvas.getContext2d().clearRect(canvas.getAbsoluteLeft(), canvas.getAbsoluteTop(), canvas.getCoordinateSpaceWidth(), canvas.getCoordinateSpaceHeight());
|
||||
List<WindDTO> windDTOToDraw = new ArrayList<WindDTO>();
|
||||
for(WindDTO windDTO : wl.getMatrix()) {
|
||||
if (windDTO.timepoint <= date.getTime()) {
|
||||
windDTOToDraw.add(windDTO);
|
||||
}
|
||||
}
|
||||
logger.info("In ReplayPathCanvasOverlay.drawWindField drawing " + windDTOToDraw.size() + " points");
|
||||
if (windDTOToDraw.size() == wl.getMatrix().size()) {
|
||||
timer.stop();
|
||||
}
|
||||
drawWindField(windDTOToDraw);
|
||||
}
|
||||
|
||||
}
|
||||
+28
-6
@@ -51,13 +51,14 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
|
||||
private ListBox patternSelector;
|
||||
private ListBox boatSelector;
|
||||
|
||||
|
||||
private final Timer timer;
|
||||
private static Logger logger = Logger.getLogger("com.sap.sailing");
|
||||
|
||||
private SimulatorMap simulatorMap;
|
||||
private final StringMessages stringMessages;
|
||||
private final SimulatorServiceAsync simulatorSvc;
|
||||
|
||||
|
||||
private class WindSpeedCapture implements ValueChangeHandler<Double> {
|
||||
|
||||
@Override
|
||||
@@ -80,6 +81,10 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
wControls = new WindControlParameters(1, 0);
|
||||
patternSelector = new ListBox();
|
||||
boatSelector = new ListBox();
|
||||
timer = new Timer(PlayModes.Replay, 1000l);
|
||||
timer.setPlaySpeedFactor(30);
|
||||
resetTimer();
|
||||
|
||||
LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages.simulator(), stringMessages);
|
||||
logoAndTitlePanel.addStyleName("LogoAndTitlePanel");
|
||||
this.addNorth(logoAndTitlePanel, 68);
|
||||
@@ -258,7 +263,7 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
|
||||
initDisplayOptions(mapOptions);
|
||||
|
||||
simulatorMap = new SimulatorMap(simulatorSvc, stringMessages);
|
||||
simulatorMap = new SimulatorMap(simulatorSvc, stringMessages,timer);
|
||||
|
||||
// FlowPanel mapPanel = new FlowPanel();
|
||||
// mapPanel.setTitle("Map");
|
||||
@@ -275,18 +280,31 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
|
||||
//TODO Get the right dates and times
|
||||
private void addTimePanel(Panel parentPanel) {
|
||||
Timer timer = new Timer(PlayModes.Replay, 1000l);
|
||||
|
||||
timePanel = new TimePanel<TimePanelSettings>(timer, stringMessages);
|
||||
Date now = new Date();
|
||||
Date now = timer.getTime();
|
||||
|
||||
logger.info("Now " + now);
|
||||
Date maxTime = new Date(now.getTime()+100000);
|
||||
Date maxTime = new Date(now.getTime()+10*60*1000);
|
||||
logger.info("MaxTime " + maxTime);
|
||||
timePanel.setMinMax(now, maxTime, false);
|
||||
timePanel.setVisible(false);
|
||||
rightPanel.add(timePanel);
|
||||
}
|
||||
|
||||
private void resetTimer() {
|
||||
Date startDate = new Date(0);
|
||||
timer.setTime(startDate.getTime());
|
||||
/* timePanel.reset();
|
||||
Date now = timer.getTime();
|
||||
|
||||
logger.info("Now " + now);
|
||||
Date maxTime = new Date(now.getTime()+10*60*1000);
|
||||
logger.info("MaxTime " + maxTime);
|
||||
timePanel.setMinMax(now, maxTime, false);*/
|
||||
|
||||
}
|
||||
|
||||
private void initUpdateButton() {
|
||||
updateButton = new Button(stringMessages.update());
|
||||
updateButton.addClickHandler(new ClickHandler() {
|
||||
@@ -300,6 +318,8 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
}
|
||||
|
||||
private void update() {
|
||||
resetTimer();
|
||||
|
||||
if (windDisplayButton.getValue()) {
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.WINDDISPLAY, wControls);
|
||||
} else if (summaryButton.getValue()) {
|
||||
@@ -342,6 +362,7 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
|
||||
@Override
|
||||
public void onClick(ClickEvent arg0) {
|
||||
resetTimer();
|
||||
timePanel.setVisible(true);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.REPLAY, wControls);
|
||||
}
|
||||
@@ -354,6 +375,7 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
|
||||
@Override
|
||||
public void onClick(ClickEvent arg0) {
|
||||
resetTimer();
|
||||
timePanel.setVisible(true);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.WINDDISPLAY, wControls);
|
||||
}
|
||||
|
||||
+25
-11
@@ -16,6 +16,8 @@ import com.google.gwt.user.client.ui.AbsolutePanel;
|
||||
import com.sap.sailing.gwt.ui.client.RequiresDataInitialization;
|
||||
import com.sap.sailing.gwt.ui.client.SimulatorServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.shared.PathDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.PositionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
|
||||
@@ -29,11 +31,13 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
private WindFieldGenParamsDTO windParams;
|
||||
private WindFieldCanvasOverlay windFieldCanvasOverlay;
|
||||
private PathCanvasOverlay pathCanvasOverlay;
|
||||
private ReplayPathCanvasOverlay replayPathCanvasOverlay;
|
||||
private RaceCourseCanvasOverlay raceCourseCanvasOverlay;
|
||||
|
||||
private final SimulatorServiceAsync simulatorSvc;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
private final Timer timer;
|
||||
|
||||
private static Logger logger = Logger.getLogger("com.sap.sailing");
|
||||
|
||||
private final int xRes = 5;
|
||||
@@ -43,15 +47,17 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
SUMMARY, REPLAY, WINDDISPLAY
|
||||
}
|
||||
|
||||
public SimulatorMap(SimulatorServiceAsync simulatorSvc, StringMessages stringMessages) {
|
||||
public SimulatorMap(SimulatorServiceAsync simulatorSvc, StringMessages stringMessages, Timer timer) {
|
||||
this.simulatorSvc = simulatorSvc;
|
||||
this.stringMessages = stringMessages;
|
||||
this.timer = timer;
|
||||
|
||||
dataInitialized = false;
|
||||
overlaysInitialized = false;
|
||||
windParams = new WindFieldGenParamsDTO();
|
||||
windFieldCanvasOverlay = null;
|
||||
pathCanvasOverlay = null;
|
||||
replayPathCanvasOverlay = null;
|
||||
raceCourseCanvasOverlay = null;
|
||||
|
||||
initializeData();
|
||||
@@ -101,6 +107,7 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
windFieldCanvasOverlay = new WindFieldCanvasOverlay();
|
||||
// mapw.addOverlay(windFieldCanvasOverlay);
|
||||
pathCanvasOverlay = new PathCanvasOverlay();
|
||||
replayPathCanvasOverlay = new ReplayPathCanvasOverlay(timer);
|
||||
overlaysInitialized = true;
|
||||
}
|
||||
|
||||
@@ -139,7 +146,7 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
windFieldCanvasOverlay.redraw(true);
|
||||
}
|
||||
|
||||
private void generatePath(final WindControlParameters wControls) {
|
||||
private void generatePath(final WindControlParameters wControls, final boolean display) {
|
||||
logger.info("In generatePath");
|
||||
|
||||
PositionDTO startPointDTO = new PositionDTO(raceCourseCanvasOverlay.startPoint.getLatitude(),
|
||||
@@ -166,9 +173,12 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
/* TODO Revisit for now creating a WindFieldDTO from the path */
|
||||
WindFieldDTO pathWindDTO = new WindFieldDTO();
|
||||
pathWindDTO.setMatrix(paths[0].getMatrix());
|
||||
pathCanvasOverlay.setWindField(pathWindDTO);
|
||||
pathCanvasOverlay.redraw(true);
|
||||
|
||||
if (display) {
|
||||
pathCanvasOverlay.setWindField(pathWindDTO);
|
||||
pathCanvasOverlay.redraw(display);
|
||||
} else {
|
||||
replayPathCanvasOverlay.setWindField(pathWindDTO);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -185,6 +195,7 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
mapw.setDoubleClickZoom(false);
|
||||
mapw.removeOverlay(windFieldCanvasOverlay);
|
||||
mapw.removeOverlay(pathCanvasOverlay);
|
||||
mapw.removeOverlay(replayPathCanvasOverlay);
|
||||
raceCourseCanvasOverlay.setSelected(true);
|
||||
// raceCourseCanvasOverlay.setVisible(true);
|
||||
raceCourseCanvasOverlay.reset();
|
||||
@@ -193,22 +204,25 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
|
||||
private void refreshSummaryView(WindControlParameters wControls) {
|
||||
mapw.removeOverlay(windFieldCanvasOverlay);
|
||||
mapw.removeOverlay(replayPathCanvasOverlay);
|
||||
pathCanvasOverlay.displayWindAlongPath = true;
|
||||
mapw.addOverlay(pathCanvasOverlay);
|
||||
generatePath(wControls);
|
||||
generatePath(wControls, true);
|
||||
//pathCanvasOverlay.redraw(true);
|
||||
}
|
||||
|
||||
private void refreshReplayView(WindControlParameters wControls) {
|
||||
|
||||
mapw.removeOverlay(pathCanvasOverlay);
|
||||
mapw.addOverlay(windFieldCanvasOverlay);
|
||||
pathCanvasOverlay.displayWindAlongPath = false;
|
||||
mapw.addOverlay(pathCanvasOverlay);
|
||||
replayPathCanvasOverlay.displayWindAlongPath = false;
|
||||
mapw.addOverlay(replayPathCanvasOverlay);
|
||||
generateWindField(wControls);
|
||||
generatePath(wControls);
|
||||
generatePath(wControls,false);
|
||||
}
|
||||
|
||||
private void refreshWindDisplayView(WindControlParameters wControls) {
|
||||
mapw.removeOverlay(pathCanvasOverlay);
|
||||
mapw.removeOverlay(replayPathCanvasOverlay);
|
||||
mapw.addOverlay(windFieldCanvasOverlay);
|
||||
generateWindField(wControls);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user