diff --git a/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackDisplay.java b/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackDisplay.java index c6ca1beba3..56ff25cd9c 100644 --- a/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackDisplay.java +++ b/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackDisplay.java @@ -101,6 +101,8 @@ import com.vividsolutions.jts.geom.LineString; * 01-28-2014 DR16465 mgamazaychikov Fixed the problem with anchor point when frame * count changes; made line width configurable. * 04-07-2014 DR 17232 D. Friedman Make sure pivot indexes are valid. + * 04-24-2014 DR 16356 Qinglu Lin Updated generateTrackInfo(), generateNewTrackInfo(), + * and createTrack(). * * * @@ -691,6 +693,14 @@ public class StormTrackDisplay implements IRenderable { if (cachedTrack != null) { cachedTrack.dispose(); } + if (StormTrackState.trackType.equals("lineOfStorms") && state.justSwitchedToLOS) { + GeodeticCalculator gc = new GeodeticCalculator(); + Coordinate[] coords = state.dragMeGeom.getCoordinates(); + gc.setStartingGeographicPoint(coords[0].x, coords[0].y); + gc.setDestinationGeographicPoint(coords[coords.length - 1].x, + coords[coords.length - 1].y); + state.angle = adjustAngle(gc.getAzimuth() - 90); + } generateTrackInfo(state, paintProps); if (state.mode == Mode.TRACK) { createTrack(target, paintProps); @@ -703,6 +713,9 @@ public class StormTrackDisplay implements IRenderable { state.lineWidth, state.lineStyle); paintLabels(target, paintProps); } + if (StormTrackState.trackType.equals("lineOfStorms") && state.justSwitchedToLOS) { + state.angle = StormTrackState.oneStormAngle; + } } /** @@ -781,6 +794,10 @@ public class StormTrackDisplay implements IRenderable { currentState.pointMoved = false; currentState.originalTrack = false; moved = true; + if (StormTrackState.trackType.equals("lineOfStorms") && + currentState.justSwitchedToLOS) { + currentState.justSwitchedToLOS = false; + } } currentDisplayedTimes = trackUtil.getDataTimes(paintProps @@ -959,6 +976,7 @@ public class StormTrackDisplay implements IRenderable { state.futurePoints = futurePoints; state.angle = angle; + StormTrackState.oneStormAngle = angle; state.speed = speed; postData(state); @@ -995,7 +1013,11 @@ public class StormTrackDisplay implements IRenderable { coords[coords.length - 1].y); angle = adjustAngle(gc.getAzimuth() - 90); } else { - angle = adjustAngle(std.getMotionDirection()); + if (state.justSwitchedToOS) { + angle = StormTrackState.oneStormAngle; + } else { + angle = adjustAngle(std.getMotionDirection()); + } } state.angle = angle; state.speed = speed; @@ -1182,6 +1204,11 @@ public class StormTrackDisplay implements IRenderable { compiler.handle(gf.createLineString(coords)); double angle = state.angle; + if(!state.justSwitchedToOS) { + if (StormTrackState.trackType.equals("oneStorm")) { + StormTrackState.oneStormAngle = angle; + } + } // Draw ticks, X and Arrow for (int i = 0; i < orig.length - 1; ++i) { GeodeticCalculator gc = new GeodeticCalculator(); @@ -1189,6 +1216,10 @@ public class StormTrackDisplay implements IRenderable { gc.setDestinationGeographicPoint(orig[i + 1].x, orig[i + 1].y); angle = gc.getAzimuth(); + if (state.justSwitchedToLOS) { + angle = 90.0; + state.justSwitchedToLOS = false; + } if (i == state.displayedPivotIndex) { double tickLen = SQRT_2 * tickLengthInMeters; diff --git a/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackState.java b/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackState.java index ca7e783654..1128e73ca3 100644 --- a/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackState.java +++ b/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackState.java @@ -47,6 +47,8 @@ import com.vividsolutions.jts.geom.Point; * 11/29/2012 15571 Qinglu Lin Added compuateCurrentStormCenter(); * 15Mar2013 15693 mgamazaychikov Added magnification. * 06-24-2013 DR 16317 D. Friedman Handle "motionless" track. + * 04-24-2014 DR 16356 Qinglu Lin Added newWarnGen, oneStormAngle, justSwitchedToLOS, + * justSwitchedToOS, and trackType. * * * @@ -198,6 +200,16 @@ public class StormTrackState { private boolean initiallyMotionless; + public static boolean newWarnGen = true; + + public static double oneStormAngle = Double.NaN; + + public boolean justSwitchedToLOS = false; + + public boolean justSwitchedToOS = false; + + public static String trackType = null; + /** Compute the coordinate of the storm center at the time defined by dataTime via interpolation. */ public boolean compuateCurrentStormCenter(Coordinate coord, DataTime dateTime) { if (futurePoints == null) return false; diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java index 3d40222b40..6c9c28ff36 100644 --- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java +++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java @@ -152,6 +152,7 @@ import com.vividsolutions.jts.geom.Polygon; * Sep 24, 2013 #2401 lvenable Fixed font memory leak. * Oct 01, 2013 DR16612 m.gamazaychikov Fixed inconsistencies with track locking and updateListSelected method * Oct 29, 2013 DR 16734 D. Friedman If redraw-from-hatched-area fails, don't allow the polygon the be used. + * Apr 24, 2014 DR 16356 Qinglu Lin Updated selectOneStorm() and selectLineOfStorms(). * * * @author chammack @@ -1323,6 +1324,8 @@ public class WarngenDialog extends CaveSWTDialog implements */ private void selectOneStorm() { if (warngenLayer.state.followupData == null) { + warngenLayer.resetState(); + warngenLayer.reset("oneStorm"); warngenLayer.clearWarningGeometries(); warngenLayer.getStormTrackState().dragMeLine = null; warngenLayer.getStormTrackState().dragMeGeom = null; @@ -1338,6 +1341,8 @@ public class WarngenDialog extends CaveSWTDialog implements */ private void selectLineOfStorms() { if (warngenLayer.state.followupData == null) { + warngenLayer.resetState(); + warngenLayer.reset("lineOfStorms"); warngenLayer.clearWarningGeometries(); warngenLayer.getStormTrackState().dragMeLine = null; warngenLayer.getStormTrackState().dragMeGeom = null; diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java index 380d883d7d..2a2c247618 100644 --- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java +++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java @@ -205,10 +205,11 @@ import com.vividsolutions.jts.io.WKTReader; * 02/07/2014 DR16090 m.gamazaychikov Added GeomMetaDataUpdateNotificationObserver class to get notification * when geometry file get updated to re-read them in. * 02/19/2014 2819 randerso Removed unnecessary .clone() call - * 03/17/2014 DR16309 Qinglu Lin Updated getWarningAreaFromPolygon(); changed searchCountyGeospatialDataAccessor) to + * 03/17/2014 DR 16309 Qinglu Lin Updated getWarningAreaFromPolygon(); changed searchCountyGeospatialDataAccessor) to * searchGeospatialDataAccessor() and updated it; changed getCountyGeospatialDataAcessor() * to getGeospatialDataAcessor(); changed getAllCountyUgcs() to getAllUgcs(); changed * getUgcsForWatches() to getUgcsForCountyWatches(). + * 04/23/2014 DR 16356 Qinglu Lin Updated initializeState() and added reset(). * * * @author mschenke @@ -737,6 +738,11 @@ public class WarngenLayer extends AbstractStormTrackResource { // Default angle for POINT displayState.labelMode = LabelMode.TIME; state.angle = 60; + if (StormTrackState.newWarnGen) { + StormTrackState.oneStormAngle = state.angle; + StormTrackState.trackType = "oneStorm"; + StormTrackState.newWarnGen = false; + } state.speed = 35; state.dragMePoint = null; state.resetAnchor = true; @@ -3493,4 +3499,17 @@ public class WarngenLayer extends AbstractStormTrackResource { return hatchedArea; } } + + public void reset(String trackType) { + if (trackType.equals("oneStorm")) { + getStormTrackState().justSwitchedToOS = true; + getStormTrackState().justSwitchedToLOS = false; + StormTrackState.trackType = "oneStorm"; + getStormTrackState().angle = StormTrackState.oneStormAngle; + } else if (trackType.equals("lineOfStorms")) { + getStormTrackState().justSwitchedToOS = false; + getStormTrackState().justSwitchedToLOS = true; + StormTrackState.trackType = "lineOfStorms"; + } + } }