VLab Issue #5929 - NSHARP freezes when loading a sounding from MDCRS

products in Volume Browser

Change-Id: I6578174c6f446a2d702eeca0577717715d13fcfa

Former-commit-id: cae95251bb [formerly ddaca01b1d] [formerly cae95251bb [formerly ddaca01b1d] [formerly ea9ef0f93e [formerly 209e62cc40160cd023e42711a008afb0ef39d3ea]]]
Former-commit-id: ea9ef0f93e
Former-commit-id: 11ac77f233 [formerly 4d2a987a9f]
Former-commit-id: e1642ff74e
This commit is contained in:
Chin Chen 2015-01-29 08:40:49 -05:00
parent 544e470b41
commit 9b35775e37
8 changed files with 597 additions and 471 deletions

View file

@ -19,6 +19,9 @@ import java.util.List;
* Date Ticket# Engineer Description
* ------- ------- -------- -----------
* 04/23/2012 229 Chin Chen Initial coding
* 01/27/2015 DR#17006,
* Task#5929 Chin Chen NSHARP freezes when loading a sounding from MDCRS products
* in Volume Browser
*
* </pre>
*
@ -37,9 +40,10 @@ public class NsharpSoundingElementStateProperty {
private int compColorIndex;
private List<NcSoundingLayer> sndLyLst;
private List<NcSoundingLayer> sndLyLstBk;
private boolean goodData = true; //#5929
public NsharpSoundingElementStateProperty(String elementDescription,
String stnDescription,
String timeDescription, NsharpStationInfo stnInfo, List<NcSoundingLayer> sndLyLst) {
String timeDescription, NsharpStationInfo stnInfo, List<NcSoundingLayer> sndLyLst, boolean goodData) {
super();
this.elementDescription = elementDescription;
//this.elementState = elementState;
@ -49,6 +53,7 @@ public class NsharpSoundingElementStateProperty {
this.sndType = stnInfo.getSndType();
this.compColorIndex = NsharpConstants.LINE_COMP1;;
this.sndLyLst = sndLyLst;
this.goodData = goodData; //#5929
sndLyLstBk= new ArrayList<NcSoundingLayer>(sndLyLst.size());
for(NcSoundingLayer ly : sndLyLst){
try {
@ -135,4 +140,12 @@ public class NsharpSoundingElementStateProperty {
}
}
public boolean isGoodData() {
return goodData;
}
public void setGoodData(boolean goodData) {
this.goodData = goodData;
}
}

View file

@ -13,6 +13,9 @@ package gov.noaa.nws.ncep.ui.nsharp.display.rsc;
* 04/23/2012 229 Chin Chen Initial coding
* 04/23/2014 Chin Chen Add d2d lite page
* 08/11/2014 Chin Chen fix typo
* 01/27/2015 DR#17006,
* Task#5929 Chin Chen NSHARP freezes when loading a sounding from MDCRS products
* in Volume Browser
*
* </pre>
*
@ -60,7 +63,8 @@ public class NsharpDataPaneResource extends NsharpAbstractPaneResource {
// number of this page. index 0
// point to a dummy.
private static final String NO_DATA = "NO VALID DATA AVAILABLE";
private static final String NO_DATA = "NO VALID DATA AVAILABLE FOR THIS PAGE";
private static final String INSUFFICIENT_DATA = "INSUFFICIENT DATA FOR PARAMETERS COMPUTATION";
// private double charHeight = NsharpConstants.CHAR_HEIGHT_;
private double curY;
@ -160,7 +164,7 @@ public class NsharpDataPaneResource extends NsharpAbstractPaneResource {
handleResize();
}
if ((soundingLys != null) && (soundingLys.size() >= 4)) {
if ((soundingLys != null) && (rscHandler.isGoodData())) {//#5929
this.defaultFont.setSmoothing(false);
this.defaultFont.setScaleFont(false);
// write to panels
@ -187,6 +191,9 @@ public class NsharpDataPaneResource extends NsharpAbstractPaneResource {
}
}
}
else { //#5929
drawInsuffDataMessage(target, panelRectArray[0]);
}
}
@Override
@ -240,6 +247,28 @@ public class NsharpDataPaneResource extends NsharpAbstractPaneResource {
currentParcel = NsharpNativeConstants.PARCELTYPE_MOST_UNSTABLE;
}
@SuppressWarnings("deprecation") //#5929
private void drawInsuffDataMessage(IGraphicsTarget target, Rectangle rect)
throws VizException {
IFont myfont;
if (paneConfigurationName.equals(NsharpConstants.PANE_LITE_D2D_CFG_STR))
myfont = font9;
else
myfont = font20;
defineCharHeight(myfont);
myfont.setSmoothing(false);
myfont.setScaleFont(false);
sumP1Visible = true;
extent = new PixelExtent(rect);
target.setupClippingPlane(extent);
target.drawString(myfont, INSUFFICIENT_DATA, rect.x,
rect.y, 0.0, TextStyle.NORMAL, NsharpConstants.color_cyan,
HorizontalAlignment.LEFT, VerticalAlignment.TOP, null);
return;
}
private void drawPanel(IGraphicsTarget target, int pageOrderNumber,
int dsiplayPanelNumber) throws VizException {
if (pageOrderNumber > NsharpConstants.PAGE_MAX_NUMBER
@ -344,7 +373,7 @@ public class NsharpDataPaneResource extends NsharpAbstractPaneResource {
// if we can not Interpolates a temp with 700 mb pressure, then we dont
// have enough raw data
if ((nsharpNative.nsharpLib.qc(nsharpNative.nsharpLib.itemp(700.0F)) == 0)) {
target.drawString(myfont, " " + NO_DATA, rect.x,
target.drawString(myfont, NO_DATA, rect.x,
rect.y, 0.0, TextStyle.NORMAL, NsharpConstants.color_cyan,
HorizontalAlignment.LEFT, VerticalAlignment.TOP, null);
return;
@ -1053,7 +1082,7 @@ public class NsharpDataPaneResource extends NsharpAbstractPaneResource {
// if we can not Interpolates a temp with 700 mb pressure, then we dont
// have enough raw data
if (nsharpNative.nsharpLib.qc(nsharpNative.nsharpLib.itemp(700.0F)) == 0) {
target.drawString(myfont, " " + NO_DATA, rect.x,
target.drawString(myfont,NO_DATA, rect.x,
rect.y, 0.0, TextStyle.NORMAL, NsharpConstants.color_cyan,
HorizontalAlignment.LEFT, VerticalAlignment.TOP, null);
return;
@ -3749,7 +3778,7 @@ public class NsharpDataPaneResource extends NsharpAbstractPaneResource {
// if we can not Interpolates a temp with 700 mb pressure, then we dont
// have enough raw data
if ((nsharpNative.nsharpLib.qc(nsharpNative.nsharpLib.itemp(700.0F)) == 0)) {
target.drawString(myfont, " " + NO_DATA, rect.x,
target.drawString(myfont, NO_DATA, rect.x,
rect.y, 0.0, TextStyle.NORMAL, NsharpConstants.color_cyan,
HorizontalAlignment.LEFT, VerticalAlignment.TOP, null);
return;

View file

@ -10,6 +10,9 @@ package gov.noaa.nws.ncep.ui.nsharp.display.rsc;
* Date Ticket# Engineer Description
* ------- ------- -------- -----------
* 04/23/2012 229 Chin Chen Initial coding
* 01/27/2015 DR#17006,
* Task#5929 Chin Chen NSHARP freezes when loading a sounding from MDCRS products
* in Volume Browser
*
* </pre>
*
@ -127,7 +130,7 @@ public class NsharpHodoPaneResource extends NsharpAbstractPaneResource{
hodoWindRscShapeList.add(shNcolor);
}
float surfaceLevel = soundingLays.get(0).getGeoHeight(); //#5929
for (NcSoundingLayer layer : soundingLays){
if(layer.getPressure() < 100 || layer.getWindSpeed() <0)
continue;
@ -138,15 +141,15 @@ public class NsharpHodoPaneResource extends NsharpAbstractPaneResource{
double [][] lines = {{world.mapX(c0.x), world.mapY(c0.y)},{world
.mapX(c1.x), world.mapY(c1.y)}};
if(incolor == null){
if(layer.getGeoHeight() <nsharpNative.nsharpLib.msl(3000)){
//red
//use MSL here, so Converts height from (meters) AGL to MSL. #5929
if(layer.getGeoHeight() < (3000+surfaceLevel)){
shapeR.addLineSegment(lines);
}
else if(layer.getGeoHeight() < nsharpNative.nsharpLib.msl(6000))
else if(layer.getGeoHeight() < (6000+surfaceLevel))
shapeG.addLineSegment(lines);
else if(layer.getGeoHeight() < nsharpNative.nsharpLib.msl(9000))
else if(layer.getGeoHeight() < (9000+surfaceLevel))
shapeY.addLineSegment(lines);
else if(layer.getGeoHeight() < nsharpNative.nsharpLib.msl(12000))
else if(layer.getGeoHeight() < (12000+surfaceLevel))
shapeC.addLineSegment(lines);
else
shapeV.addLineSegment(lines);
@ -177,6 +180,7 @@ public class NsharpHodoPaneResource extends NsharpAbstractPaneResource{
}
hodoWindRscShapeList.clear();
}
world = hodoBackground.computeWorld();
boolean compareStnIsOn = rscHandler.isCompareStnIsOn();
int currentTimeListIndex = rscHandler.getCurrentTimeElementListIndex();
@ -575,7 +579,7 @@ public class NsharpHodoPaneResource extends NsharpAbstractPaneResource{
return;
hodoBackground.paintInternal(target, paintProps);
if((soundingLys != null) && (soundingLys.size()>= 4))
if((soundingLys != null) && (soundingLys.size()> 2) )
{
this.font10.setSmoothing(false);
this.font10.setScaleFont(false);
@ -605,8 +609,6 @@ public class NsharpHodoPaneResource extends NsharpAbstractPaneResource{
drawHodoDynamicData(target, currentZoomLevel);
}
}
}

View file

@ -10,6 +10,9 @@ package gov.noaa.nws.ncep.ui.nsharp.display.rsc;
* Date Ticket# Engineer Description
* ------- ------- -------- -----------
* 04/23/2012 229 Chin Chen Initial coding
* 01/27/2015 DR#17006,
* Task#5929 Chin Chen NSHARP freezes when loading a sounding from MDCRS products
* in Volume Browser
*
* </pre>
*
@ -181,7 +184,7 @@ public class NsharpInsetPaneResource extends NsharpAbstractPaneResource{
//Chin, since we only display 4 insets and their backgrounds have same size, only draws 4 backgrounds.
//psblWatchTypeBackground.paint(target, paintProps);
//thetaEPresureBackground.paint(target, paintProps);
if((soundingLys != null) && (soundingLys.size()>= 4))
if((soundingLys != null) && rscHandler.isGoodData()) //#5929)
{
this.font10.setSmoothing(false);
this.font10.setScaleFont(false);
@ -294,7 +297,7 @@ public class NsharpInsetPaneResource extends NsharpAbstractPaneResource{
return;
//System.out.println("createRscWireFrameShapes called");
disposeInsetWireFrameShapes();
if(soundingLys != null){
if(soundingLys != null && rscHandler.isGoodData()){ //#5929
WGraphics WGc= thetaEPresureBackground.getWorld();
createRscThetaEPressureShape(WGc);

View file

@ -15,6 +15,9 @@
* 02/03/2014 1106 Chin Chen Need to be able to use clicking on the Src,Time, or StnId to select display
* 08/12/2014 Chin Chen fixed issue that "load archive file with wrong time line displayed"
* 12/04/2014 DR16888 Chin Chen fixed issue that "Comp(Src) button not functioning properly in NSHARP display"
* 01/27/2015 DR#17006,
* Task#5929 Chin Chen NSHARP freezes when loading a sounding from MDCRS products
* in Volume Browser
* </pre>
*
* @author Chin Chen
@ -161,6 +164,8 @@ public class NsharpResourceHandler {
private int[] pageDisplayOrderNumberArray = new int[NsharpConstants.PAGE_MAX_NUMBER + 1];
//#5929
private boolean goodData=false;
// index is the real page defined in NsharpConstants to be shown, value is
// the order number of this page.
// index 0 point to a dummy.
@ -981,6 +986,7 @@ public class NsharpResourceHandler {
if (skewtPaneRsc != null)
skewtPaneRsc
.setCurrentSkewTEditMode(NsharpConstants.SKEWT_EDIT_MODE_EDITPOINT);
elem.setGoodData(checkDataIntegrity(soundingLys));//#5929
resetData();
}
@ -993,6 +999,11 @@ public class NsharpResourceHandler {
// update active sounding layer and picked stn info
// re-populate snd data to nsharp native code lib for later calculating
//#5929 dont populate sounding data if data is bad
if(getCurSoundingElementStateProperty()!=null)
goodData= getCurSoundingElementStateProperty().isGoodData();
if(goodData)
nsharpNative.populateSndgData(soundingLys);
if (skewtPaneRsc != null)
@ -1013,7 +1024,7 @@ public class NsharpResourceHandler {
// if soundingLys is null, then we stop here, after reset data.
if (soundingLys == null)
return;
if (soundingLys.size() > 0) {
if (soundingLys.size() > 0 && (goodData)) {
// set initial hodohouseC
// ----- set hodo circle at Bunkers Right, Chin according to TTR6065
@ -1044,11 +1055,7 @@ public class NsharpResourceHandler {
* that really meant to reset parcel type.
*/
}
// Chin: TBD remove handle resize here to fix sizing issue when swapped
// nsharp from side pane back to main pane
// but, may cause other problem?
// if(skewtPaneRsc!=null)
// skewtPaneRsc.handleResize();
if (skewtPaneRsc != null)
skewtPaneRsc.createRscWireFrameShapes();
if (hodoPaneRsc != null)
@ -1057,7 +1064,7 @@ public class NsharpResourceHandler {
insetPaneRsc.createInsetWireFrameShapes();
if (witoPaneRsc != null)
witoPaneRsc.createAllWireFrameShapes();
if (spcGraphsPaneRsc != null) {
if (spcGraphsPaneRsc != null && (goodData) ){//#5929
// Chin: SPC graphs performance concern, as it need to call get
// info functions from bigSharo.so and cause long delay.
// Therefore, do it once only when reset data.
@ -1177,7 +1184,7 @@ public class NsharpResourceHandler {
private void addElementToTableAndLists(String stnId_timeLine_sndType,
String stnId, String tmLine, String sndType,
NsharpStationInfo stnInfo, List<NcSoundingLayer> sndLyLst) {
NsharpStationInfo stnInfo, List<NcSoundingLayer> sndLyLst, boolean goodData) {
// System.out.println("stn to be added "+ stnId + " timeline "+tmLine);
NsharpSoundingElementStateProperty newSndPropElem = null;
int tmIndex = getIndexFromElementList(tmLine, timeElementList);
@ -1197,7 +1204,7 @@ public class NsharpResourceHandler {
// NsharpSoundingElementStateProperty object
newSndPropElem = new NsharpSoundingElementStateProperty(
stnId_timeLine_sndType, stnId, tmLine, stnInfo,
sndLyLst);
sndLyLst,goodData); //#5929
stnTimeSndTable.get(stnIndex).get(tmIndex)
.set(sndTpyeIndex, newSndPropElem);
}
@ -1214,7 +1221,7 @@ public class NsharpResourceHandler {
// NsharpSoundingElementStateProperty object
newSndPropElem = new NsharpSoundingElementStateProperty(
stnId_timeLine_sndType, stnId, tmLine, stnInfo,
sndLyLst);
sndLyLst,goodData);
stnTimeSndTable.get(currentStnElementListIndex)
.get(currentTimeElementListIndex)
.set(currentSndElementListIndex, newSndPropElem);
@ -1231,7 +1238,7 @@ public class NsharpResourceHandler {
// NsharpSoundingElementStateProperty object
newSndPropElem = new NsharpSoundingElementStateProperty(
stnId_timeLine_sndType, stnId, tmLine, stnInfo,
sndLyLst);
sndLyLst,goodData);
stnTimeSndTable.get(currentStnElementListIndex)
.get(currentTimeElementListIndex)
.set(currentSndElementListIndex, newSndPropElem);
@ -1253,7 +1260,7 @@ public class NsharpResourceHandler {
// NsharpSoundingElementStateProperty object
newSndPropElem = new NsharpSoundingElementStateProperty(
stnId_timeLine_sndType, stnId, tmLine, stnInfo,
sndLyLst);
sndLyLst,goodData);
stnTimeSndTable.get(currentStnElementListIndex)
.get(currentTimeElementListIndex)
.set(currentSndElementListIndex, newSndPropElem);
@ -1274,7 +1281,7 @@ public class NsharpResourceHandler {
// NsharpSoundingElementStateProperty object
newSndPropElem = new NsharpSoundingElementStateProperty(
stnId_timeLine_sndType, stnId, tmLine, stnInfo,
sndLyLst);
sndLyLst,goodData);
stnTimeSndTable.get(currentStnElementListIndex)
.get(currentTimeElementListIndex)
.set(currentSndElementListIndex, newSndPropElem);
@ -1296,7 +1303,7 @@ public class NsharpResourceHandler {
// NsharpSoundingElementStateProperty object
newSndPropElem = new NsharpSoundingElementStateProperty(
stnId_timeLine_sndType, stnId, tmLine, stnInfo,
sndLyLst);
sndLyLst,goodData);
stnTimeSndTable.get(currentStnElementListIndex)
.get(currentTimeElementListIndex)
.set(currentSndElementListIndex, newSndPropElem);
@ -1321,7 +1328,7 @@ public class NsharpResourceHandler {
// NsharpSoundingElementStateProperty object
newSndPropElem = new NsharpSoundingElementStateProperty(
stnId_timeLine_sndType, stnId, tmLine, stnInfo,
sndLyLst);
sndLyLst,goodData);
stnTimeSndTable.get(currentStnElementListIndex)
.get(currentTimeElementListIndex)
.set(currentSndElementListIndex, newSndPropElem);
@ -1357,7 +1364,7 @@ public class NsharpResourceHandler {
// one new loaded sounding data
newSndPropElem = new NsharpSoundingElementStateProperty(
stnId_timeLine_sndType, stnId,
tmLine, stnInfo, sndLyLst);
tmLine, stnInfo, sndLyLst,goodData);
sndlistForTm.add(newSndPropElem);
} else {
@ -1405,7 +1412,7 @@ public class NsharpResourceHandler {
newSndPropElem = new NsharpSoundingElementStateProperty(
stnId_timeLine_sndType, stnId, tmLine, stnInfo,
sndLyLst);
sndLyLst,goodData);
newList.add(newSndPropElem);
newListList.add(newList);
stnTimeSndTable.add(newListList);
@ -1862,6 +1869,21 @@ public class NsharpResourceHandler {
*
* }
*/
//task#5929
private boolean checkDataIntegrity(List<NcSoundingLayer> sndLayers){
boolean gooddata = false;
int numberOfTemp=0;
int numberOfGoodDewPt=0;
for(NcSoundingLayer layer: sndLayers){
if(layer.getTemperature() > -999)
numberOfTemp++;
if(layer.getDewpoint() > -999)
numberOfGoodDewPt++;
}
if(numberOfGoodDewPt >= 2 && numberOfTemp>=2)
gooddata=true;
return gooddata;
}
// This api peforms real load data function
private void addRsc(boolean displayNewData,
@ -1875,7 +1897,7 @@ public class NsharpResourceHandler {
// // newkey=
// String newkey =key.replace("NCUAIR", "gpduair"); // String newkey =
// String newkey= key.replace("NAMS", "SSS");
//String newkey = key.replace("130925/00(Wed)V000", "130925/00(Thu)V000");
// String newkey = key.replace("130925/17(Wed)V017", "131001/00(Thu)V000");
// soundMap.put(newkey, sndLy);
// }
// // stnInfo.setSndType(stnInfo.getSndType().replace("NCUAIR", //
@ -1931,9 +1953,15 @@ public class NsharpResourceHandler {
// based on this KEY string format "KGRI 100616/03(Wed)Vxxx GFSSND"
String stnId, sndType, timeLine, timeLine_sndType, stnId_timeLine_sndType;
List<NcSoundingLayer> sndLyLst;
try {
stnId_timeLine_sndType = tempTimeLineArr[i].toString();
if(stnId_timeLine_sndType.equals("N/A"))
{
continue;
}
sndLyLst = soundMap.get(stnId_timeLine_sndType);
stnId = stnId_timeLine_sndType.substring(0,
stnId_timeLine_sndType.indexOf(" "));
timeLine_sndType = stnId_timeLine_sndType
@ -2022,8 +2050,10 @@ public class NsharpResourceHandler {
// No more needed? timeLine = timeLine.replace(" ", "-"); //fixed
// DR15325 - sorting time line issue in D2D
// add time line to stnTimeTable and set its index
//task#5929
boolean goodData = checkDataIntegrity( sndLyLst);
addElementToTableAndLists(stnId_timeLine_sndType, stnId, timeLine,
sndType, stnInfo, sndLyLst);
sndType, stnInfo, sndLyLst, goodData);
}
if (displayNewData) {
// Set default parcel trace data
@ -2627,10 +2657,7 @@ public class NsharpResourceHandler {
break;
}
if (compareSndIsOn) {
handleUserPickNewTimeLine(currentTimeElementListIndex) ;
return;
}
curTimeLinePage = currentTimeElementListIndex / numTimeLinePerPage
+ 1;
setCurSndProfileProp();
@ -2767,9 +2794,6 @@ public class NsharpResourceHandler {
// we should get out of here
break;
} else if (compareSndIsOn) {
handleUserPickNewTimeLine(targetIndex) ;
return;
/* Chin TBD 12112014
boolean found = false;
if (currentStnElementListIndex >= 0
&& currentSndElementListIndex >= 0
@ -2795,7 +2819,6 @@ public class NsharpResourceHandler {
if (!found) {
currentSndElementListIndex = -1;
} else {
int colorIndex = NsharpConstants.LINE_COMP1;
for (NsharpOperationElement elm : sndElementList) {
if (elm.getActionState() == NsharpConstants.ActState.INACTIVE)
@ -2811,13 +2834,11 @@ public class NsharpResourceHandler {
if (colorIndex > NsharpConstants.LINE_COMP10)
colorIndex = NsharpConstants.LINE_COMP1;
}
}
// no matter we find current snd type for this stn or
// not
// we should get out of here
break;
*/
} else {
break;
}
@ -4043,6 +4064,12 @@ public class NsharpResourceHandler {
// re-populate snd data to nsharp native code lib for later calculating
Collections.sort(soundingLys,
NsharpDataHandling.reversePressureHeightWindComparator());
//#5929
goodData = checkDataIntegrity( soundingLys);
if(getCurSoundingElementStateProperty()!=null){
getCurSoundingElementStateProperty().setGoodData(goodData);
}
if(goodData)
nsharpNative.populateSndgData(soundingLys);
// get storm motion wind data after populate sounding from NsharpLib
// refresh test area if it is shown now
@ -4069,6 +4096,13 @@ public class NsharpResourceHandler {
}
if (dataPaneRsc != null)
dataPaneRsc.setSoundingLys(soundingLys);
if (spcGraphsPaneRsc != null && (goodData) ){//#5929
// Chin: SPC graphs performance concern, as it need to call get
// info functions from bigSharo.so and cause long delay.
// Therefore, do it once only when reset data.
spcGraphsPaneRsc.getSpcGraphsInfo();
}
}
public void addNewLayer(float tp, float dp, float ws, float wd,
@ -4086,6 +4120,12 @@ public class NsharpResourceHandler {
// re-populate snd data to nsharp native code lib for later calculating
Collections.sort(soundingLys,
NsharpDataHandling.reversePressureHeightWindComparator());
//#5929
goodData = checkDataIntegrity( soundingLys);
if(getCurSoundingElementStateProperty()!=null){
getCurSoundingElementStateProperty().setGoodData(goodData);
}
if(goodData)
nsharpNative.populateSndgData(soundingLys);
// get storm motion wind data after populate sounding from NsharpLib
// refresh text area if it is shown now
@ -4112,6 +4152,12 @@ public class NsharpResourceHandler {
}
if (dataPaneRsc != null)
dataPaneRsc.setSoundingLys(soundingLys);
if (spcGraphsPaneRsc != null && (goodData) ){//#5929
// Chin: SPC graphs performance concern, as it need to call get
// info functions from bigSharo.so and cause long delay.
// Therefore, do it once only when reset data.
spcGraphsPaneRsc.getSpcGraphsInfo();
}
}
public void setGraphConfigProperty(NsharpGraphProperty graphConfigProperty) {
@ -4440,4 +4486,9 @@ public class NsharpResourceHandler {
refreshPane();
return true;
}
//#5929
public boolean isGoodData() {
return goodData;
}
}

View file

@ -14,7 +14,9 @@ package gov.noaa.nws.ncep.ui.nsharp.display.rsc;
* May 08, 2013 1847 bsteffen Allow painting with no Wind Data.
* 02/03/2014 1106 Chin Chen Need to be able to use clicking on the Src,Time, or StnId to select display
* 08/04/2014 Chin Chen fixed effective level line drawing, height marker drawing
* 12/11/2014 DR16888 Chin Chen fixed issue that "Comp(Src) button not functioning properly in NSHARP display"
* 01/27/2015 DR#17006,
* Task#5929 Chin Chen NSHARP freezes when loading a sounding from MDCRS products
* in Volume Browser
*
* </pre>
*
@ -1740,6 +1742,8 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
// box
}
target.drawStrings(str, latlonstr);
if(wwTypeColor == null)
wwTypeColor = NsharpConstants.color_gold;
target.drawRect(boxExt, wwTypeColor, 2f, 1f); // box border line colored
// with "Psbl Watch Type"
// color
@ -1768,7 +1772,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
// to check a scenario that sounding data is removed while
// thread is locked
if (soundingLys == null
|| (soundingLys != null && soundingLys.size() <= 0)) {
|| (soundingLys != null && soundingLys.size() < 2)) {
reentryLock.unlock();
return;
}
@ -1779,7 +1783,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
} else if (justBackToMainPane) {
reentryLock.lock();
if (soundingLys == null
|| (soundingLys != null && soundingLys.size() <= 0)) {
|| (soundingLys != null && soundingLys.size() < 2)) {
reentryLock.unlock();
return;
}
@ -1828,6 +1832,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
this.font12.setScaleFont(false);
// nsharpNative.populateSndgData(soundingLys);
if (currentGraphMode == NsharpConstants.GRAPH_SKEWT) {
target.setupClippingPlane(pe);
// plot temp curve, when constructing pressureTempRscShapeList,
// it already considered
@ -1844,7 +1849,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
// color is following comparison/overlay lines' configuration.
// line width and line style are following parcel line
// configuration
if (graphConfigProperty.isParcel() == true) {
if (graphConfigProperty.isParcel() == true && rscHandler.isGoodData()) { //#5929
NsharpLineProperty parcelLp = linePropertyMap
.get(NsharpConstants.lineNameArray[NsharpConstants.LINE_PARCEL]);
for (NsharpShapeAndLineProperty shapeNLp : parcelRtShapeList) {
@ -1861,7 +1866,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
boolean overlayIsOn = rscHandler.isOverlayIsOn();
if (graphConfigProperty != null) {
if (graphConfigProperty.isTemp() == true && !compareStnIsOn
&& !compareTmIsOn && !compareSndIsOn) {
&& !compareTmIsOn) {
if (editGraphOn)
plotPressureTempEditPoints(target, world,
NsharpConstants.color_red, TEMP_TYPE,
@ -1869,15 +1874,15 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
}
// dew point curve
if (graphConfigProperty.isDewp() == true && !compareStnIsOn
&& !compareTmIsOn && !compareSndIsOn) {
&& !compareTmIsOn) {
if (editGraphOn)
plotPressureTempEditPoints(target, world,
NsharpConstants.color_green, DEWPOINT_TYPE,
this.soundingLys);
}
// plot wet bulb trace
if (graphConfigProperty.isWetBulb() == true
&& !compareStnIsOn && !compareTmIsOn && !compareSndIsOn) {
if (graphConfigProperty.isWetBulb() == true && rscHandler.isGoodData() //#5929
&& !compareStnIsOn && !compareTmIsOn) {
NsharpLineProperty lp = linePropertyMap
.get(NsharpConstants.lineNameArray[NsharpConstants.LINE_WETBULB]);
target.drawWireframeShape(wetBulbTraceRscShape,
@ -1885,8 +1890,8 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
lp.getLineStyle(), font10);
}
// plot virtual temperature trace
if (graphConfigProperty.isVTemp() == true
&& !compareStnIsOn && !compareTmIsOn && !compareSndIsOn) {
if (graphConfigProperty.isVTemp() == true && rscHandler.isGoodData() //#5929
&& !compareStnIsOn && !compareTmIsOn) {
NsharpLineProperty lp = linePropertyMap
.get(NsharpConstants.lineNameArray[NsharpConstants.LINE_VIRTUAL_TEMP]);
target.drawWireframeShape(vtempTraceCurveRscShape,
@ -1894,8 +1899,8 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
lp.getLineStyle(), font10);
}
// virtual temperature parcel trace curve
if (graphConfigProperty.isParcelTv() == true
&& !compareStnIsOn && !compareTmIsOn && !compareSndIsOn
if (graphConfigProperty.isParcelTv() == true && rscHandler.isGoodData() //#5929
&& !compareStnIsOn && !compareTmIsOn
&& !overlayIsOn) {
if (soundingLys.size() > 0) {
NsharpLineProperty lp = linePropertyMap
@ -1906,8 +1911,8 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
}
}
if (graphConfigProperty.isDcape() == true
&& dacpeTraceRscShape != null && !compareStnIsOn && !compareSndIsOn
if (graphConfigProperty.isDcape() == true && rscHandler.isGoodData() //#5929
&& dacpeTraceRscShape != null && !compareStnIsOn
&& !compareTmIsOn && !overlayIsOn) {
if (soundingLys.size() > 0) {
NsharpLineProperty lp = linePropertyMap
@ -1918,8 +1923,8 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
}
}
if (graphConfigProperty.isEffLayer() == true
&& !compareStnIsOn && !compareTmIsOn && !compareSndIsOn) {
if (graphConfigProperty.isEffLayer() == true && rscHandler.isGoodData() //#5929
&& !compareStnIsOn && !compareTmIsOn) {
// draw effective layer lines
// drawEffectiveLayerLines(target);
target.drawWireframeShape(effectiveLayerLineShape,
@ -1927,8 +1932,8 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
commonLineStyle, font10);
}
// cloud
if (graphConfigProperty.isCloud() == true
&& !compareStnIsOn && !compareTmIsOn && !compareSndIsOn) {
if (graphConfigProperty.isCloud() == true && rscHandler.isGoodData() //#5929
&& !compareStnIsOn && !compareTmIsOn) {
if (cloudFMShape != null)
target.drawShadedShape(cloudFMShape, 1f);
if (cloudFMLabelShape != null)
@ -1939,7 +1944,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
target.drawShadedShape(cloudCEShape, 1f);
}
if (graphConfigProperty.isOmega() == true
&& !compareStnIsOn && !compareTmIsOn && !compareSndIsOn) {
&& !compareStnIsOn && !compareTmIsOn) {
if (NsharpLoadDialog.getAccess() != null
&& (NsharpLoadDialog.getAccess()
.getActiveLoadSoundingType() == NsharpLoadDialog.MODEL_SND || NsharpLoadDialog
@ -1951,7 +1956,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
}
} else {
// by default, draw everything
if (!compareStnIsOn && !compareTmIsOn && !compareSndIsOn) {
if (!compareStnIsOn && !compareTmIsOn) {
if (editGraphOn)
plotPressureTempEditPoints(target, world,
NsharpConstants.color_red, TEMP_TYPE,
@ -1961,6 +1966,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
plotPressureTempEditPoints(target, world,
NsharpConstants.color_green, DEWPOINT_TYPE,
this.soundingLys);
if(rscHandler.isGoodData()) { //#5929
// plot wetbulb trace
NsharpLineProperty lp = linePropertyMap
.get(NsharpConstants.lineNameArray[NsharpConstants.LINE_WETBULB]);
@ -1994,6 +2000,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
target.drawWireframeShape(effectiveLayerLineShape,
NsharpConstants.color_cyan_md, 2,
commonLineStyle, font10);
}
if (NsharpLoadDialog.getAccess() != null
&& (NsharpLoadDialog.getAccess()
.getActiveLoadSoundingType() == NsharpLoadDialog.MODEL_SND || NsharpLoadDialog
@ -2175,6 +2182,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
// System.out.println("x1 pos"+xPos+ " x2 pos="+ (xPos -
// NsharpResourceHandler.BARB_LENGTH));
}
if( rscHandler.isGoodData() ){ //#5929)
drawHeightMark(target);
// draw EL, LFC, LCL, FZL, -20C, -30C lines
// drawLclLine(target);
@ -2187,17 +2195,21 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
font10);
target.drawWireframeShape(fzlShape, NsharpConstants.color_cyan,
2, LineStyle.SOLID, font10);
}
drawNsharpFileNameAndSampling(target, currentZoomLevel);
// draw cursor data
if (cursorInSkewT == true) {
if (cursorInSkewT == true && rscHandler.isGoodData()) {
if ((curseToggledFontLevel < CURSER_STRING_OFF)
&& (cursorTopWindBarb == false || windBarbMagnify == false))
drawNsharpSkewtCursorData(target);
}
}// end of currentGraphMode= NsharpConstants.GRAPH_SKEWT
else if (currentGraphMode == NsharpConstants.GRAPH_ICING) {
else if (currentGraphMode == NsharpConstants.GRAPH_ICING && rscHandler.isGoodData()) {//#5929
paintIcing(currentZoomLevel, target);
} else if (currentGraphMode == NsharpConstants.GRAPH_TURB) {
} else if (currentGraphMode == NsharpConstants.GRAPH_TURB && rscHandler.isGoodData()) {//#5929
paintTurbulence(currentZoomLevel, target);
}
// drawNsharpFileNameAndSampling(target, currentZoomLevel);
@ -3510,6 +3522,8 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
if (target != null) {
disposeRscWireFrameShapes();
if (soundingLys != null){
if( rscHandler.isGoodData()) {//#5929
// createRscOmegaShape();
// createRscHeightMarkShape();
createRscwetBulbTraceShape();
@ -3530,6 +3544,10 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource {
createCloudsShape();
updatePsblWatchColor();
}
else {//#5929
createRscPressTempCurveShapeAll(target);
}
}
}
}

View file

@ -17,7 +17,9 @@ package gov.noaa.nws.ncep.ui.nsharp.display.rsc;
* bigsharp version 2013Jun12
* 12/03/2014 DR#16884 Chin Chen fixed issue, NSHARP crashes if user loops a product and
* then clicks WINTER/FIRE buttons in Toolbar
*
* 01/27/2015 DR#17006,
* Task#5929 Chin Chen NSHARP freezes when loading a sounding from MDCRS products
* in Volume Browser
* </pre>
*
* @author Chin Chen
@ -1896,7 +1898,7 @@ public class NsharpSpcGraphsPaneResource extends NsharpAbstractPaneResource {
PaintProperties paintProps) throws VizException {
super.paintInternal(target, paintProps);
// defineCharHeight(font10);
if (rscHandler == null || rscHandler.getSoundingLys() == null)
if (rscHandler == null || rscHandler.getSoundingLys() == null || !rscHandler.isGoodData())//#5929
return;
this.font10.setSmoothing(false);
this.font10.setScaleFont(false);

View file

@ -10,6 +10,9 @@ package gov.noaa.nws.ncep.ui.nsharp.display.rsc;
* Date Ticket# Engineer Description
* ------- ------- -------- -----------
* 04/23/2012 229 Chin Chen Initial coding
* 01/27/2015 DR#17006,
* Task#5929 Chin Chen NSHARP freezes when loading a sounding from MDCRS products
* in Volume Browser
*
* </pre>
*
@ -159,10 +162,13 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
float x1 = verticalWindXOrig+ (verticalWindWidth/2);
target.drawLine(x1, verticalWindYOrig, 0, x1, verticalWindYOrig+verticalWindHeight, 0,
NsharpConstants.color_white, 1, LineStyle.DASHED);
if(verticalWindLabelShape!=null) //#5929
target.drawWireframeShape(verticalWindLabelShape, NsharpConstants.color_white,
0.3F, commonLineStyle,font10);
if(verticalWindRShape!=null)
target.drawWireframeShape(verticalWindRShape, NsharpConstants.color_red,
0.3F, commonLineStyle,font10);
if(verticalWindSbShape!=null)
target.drawWireframeShape(verticalWindSbShape, NsharpConstants.color_skyblue,
0.3F, commonLineStyle,font10);
target.clearClippingPlane();
@ -304,7 +310,7 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
windBoxWindRscShapeList.add(shNcolor);
float surfaceLevel = soundingLys.get(0).getGeoHeight(); //#5929
//System.out.println("my wolrd minvY="+ myYViewMin+ " maxVY="+myYViewMax+ " YRange="+myYViewRange);
for (NcSoundingLayer layer : soundingLys) {
float pressure = layer.getPressure();
@ -321,13 +327,14 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
//System.out.println("Wind p="+pressure+" yP="+ windBoxY+ " ratio="+yRatio);
float geoHt = layer.getGeoHeight();
double [][] lines = {{windBoxX, windBoxY},{windBoxX + (spd) * xRatio,windBoxY}};
if(geoHt <nsharpNative.nsharpLib.msl(3000))
//use MSL here, so Converts height from (meters) AGL to MSL. #5929
if(geoHt < (3000+surfaceLevel))
shapeR.addLineSegment(lines);
else if(geoHt < nsharpNative.nsharpLib.msl(6000))
else if(geoHt < (6000+surfaceLevel))
shapeG.addLineSegment(lines);
else if(geoHt < nsharpNative.nsharpLib.msl(9000))
else if(geoHt < (9000+surfaceLevel))
shapeY.addLineSegment(lines);
else if(geoHt < nsharpNative.nsharpLib.msl(12000))
else if(geoHt < (12000+surfaceLevel))
shapeC.addLineSegment(lines);
else
shapeV.addLineSegment(lines);
@ -437,7 +444,6 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
verticalWindLabelShape.compile();
}
/**
* Create all wire frame shapes at one place.
* Should be used only when a new resource is becoming Current active resource to be displayed.
@ -447,7 +453,7 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
if(target== null || rscHandler== null || inSidePane )
return;
//System.out.println("whitoPane="+this.toString()+" createAllWireFrameShapes called");
rscHandler.repopulateSndgData();
//rscHandler.repopulateSndgData();//#5929 TBD why need this?????
disposeAllWireFrameShapes();
if(soundingLys != null){
@ -458,6 +464,7 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
}
createRscOmegaShape();
createRscWindBoxWindShape();
if(rscHandler.isGoodData())//#5929
createRscVerticalWindShape();
}
//create static shape
@ -477,6 +484,7 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
}
createRscOmegaShape();
createRscWindBoxWindShape();
if(rscHandler.isGoodData())//#5929
createRscVerticalWindShape();
}
}