Changeset 801 for misc

Show
Ignore:
Timestamp:
08/01/07 11:45:16 (13 months ago)
Author:
mankoff
Message:

Internal code cleanup, since we have all three planes locked (on/off, image only, etc.), a lot of the code to have 1 plane as image and another off and a third as vector could be simplified. Add option to turn image planes on/off

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • misc/clouds/xyztn.pro

    r800 r801  
    44;  
    55;  Copyright (c) 2007, Ken & Jose. Do what you want with the code. 
     6; 
     7;  This originated as d_vectrack.pro (IDL Thunderstorm Demo) 
    68; 
    79;+ 
     
    1214; 
    1315;  PURPOSE: 
    14 ;       Visualization of thunderstorm data. 
     16;       Visualization of 3D or 4D data 
    1517; 
    1618;  MAJOR TOPICS: Visualization 
    1719; 
    1820;  CATEGORY: 
    19 ;       IDL Demo System 
    20 ; 
    21 ;  INTERNAL FUNCTIONS and PROCEDURES: 
    22 ;       pro xyztnEvent      -  Event handler 
    23 ;       pro xyztnCleanup    -  Cleanup 
    24 ;       pro xyztn           -  Main procedure 
    25 ; 
    26 ;  EXTERNAL FUNCTIONS, PROCEDURES, and FILES: 
    27 ;       pro trackball__define   -  Create the trackball object 
    28 ;       pro demo_gettips        - Read the tip file and create widgets 
    29 ;       vectrack.tip 
    30 ;       storm.opa 
    31 ;       storm.pal 
    32 ; 
    33 ;  REFERENCE: IDL Reference Guide, IDL User's Guide 
    34 ; 
    35 ;  NAMED STRUCTURES: 
    36 ;       none. 
    37 ; 
    38 ;  COMMON BLOCS: 
    39 ;       none. 
    4021; 
    4122;  MODIFICATION HISTORY: 
    4223;       1/97,   ACY   - adapted from vec_track, written by D.D. 
    4324;       7/99,   KB    - used PARTICLE_TRACE and STREAMLINE. 
     25;       7/07,   KM,JC - Genericized for A. Fridlind and A. Ackerman. 
     26; 
    4427;- 
    4528;---------------------------------------------------------------------------- 
     
    6043 
    6144 
    62 ;---------------------------------------------------------------------------- 
    63 ; Routine to update the current planes 
    64  
     45 
     46;; draw the image planes 
    6547PRO xyztnPlanesUpdate,sState,bUpdate 
    6648 
    67   IF (sState.bShow[0] AND ((bUpdate EQ 1) OR (bUpdate EQ 4))) THEN BEGIN 
     49  IF (sState.bShow) THEN BEGIN 
    6850     WIDGET_CONTROL, sState.wXSlider, GET_VALUE=x 
    69      IF (sState.bImage[0]) THEN BEGIN 
    70         sState.oVols[sState.iImgVol]->GetProperty,DATA0=vdata,$ 
    71            /NO_COPY,RGB_TABLE0=ctab 
    72         xyztnSampleOrthoPlane,vdata,0,x,sState.oSlices[0], $ 
    73                                    sState.oImages[0],ctab,sState.iAlpha 
    74         sState.oVols[sState.iImgVol]->SetProperty,DATA0=vdata,/NO_COPY 
    75      END ELSE BEGIN 
    76         sState.oVols[2]->GetProperty,DATA0=bMag,RGB_TABLE0=pal,/NO_COPY 
    77         xyztnMkVectors,sState.u,sState.v,sState.w,fVerts,iConn,X=x, $ 
    78                             SCALE=scale, RANDOM=sState.bRandom, $ 
    79                             NVECTORS=nvectors,STEPSIZE=stepsize,BMAG=bMag,Vc=vc 
    80         sState.oXPolyline->SetProperty,DATA=fVerts,POLYLINES=iConn, $ 
    81                                        VERT_COLORS=transpose(pal[vc,*]) 
    82         sState.oVols[2]->SetProperty,DATA0=bMag,/NO_COPY 
    83      END 
    84   ENDIF 
    85   IF (sState.bShow[1] AND ((bUpdate EQ 2) OR (bUpdate EQ 4))) THEN BEGIN 
     51     sState.oVols[sState.iImgVol]->GetProperty,DATA0=vdata,$ 
     52       /NO_COPY,RGB_TABLE0=ctab 
     53     xyztnSampleOrthoPlane,vdata,0,x,sState.oSlices[0], $ 
     54       sState.oImages[0],ctab,sState.iAlpha 
     55     sState.oVols[sState.iImgVol]->SetProperty,DATA0=vdata,/NO_COPY 
     56 
    8657     WIDGET_CONTROL, sState.wYSlider, GET_VALUE=y 
    87      IF (sState.bImage[1]) THEN BEGIN 
    88         sState.oVols[sState.iImgVol]->GetProperty,DATA0=vdata,$ 
    89            /NO_COPY,RGB_TABLE0=ctab 
    90         xyztnSampleOrthoPlane,vdata,1,y,sState.oSlices[1], $ 
    91                                    sState.oImages[1],ctab,sState.iAlpha 
    92         sState.oVols[sState.iImgVol]->SetProperty,DATA0=vdata,/NO_COPY 
    93      END ELSE BEGIN 
    94         sState.oVols[2]->GetProperty,DATA0=bMag,RGB_TABLE0=pal,/NO_COPY 
    95         xyztnMkVectors,sState.u,sState.v,sState.w,fVerts,iConn,Y=y, $ 
    96                             SCALE=scale, RANDOM=sState.bRandom, $ 
    97                             NVECTORS=nvectors,STEPSIZE=stepsize,BMAG=bMag,Vc=vc 
    98         sState.oYPolyline->SetProperty,DATA=fVerts,POLYLINES=iConn, $ 
    99                                        VERT_COLORS=transpose(pal[vc,*]) 
    100         sState.oVols[2]->SetProperty,DATA0=bMag,/NO_COPY 
    101      END 
    102   ENDIF 
    103   IF (sState.bShow[2] AND ((bUpdate EQ 3) OR (bUpdate EQ 4))) THEN BEGIN 
     58     sState.oVols[sState.iImgVol]->GetProperty,DATA0=vdata,$ 
     59       /NO_COPY,RGB_TABLE0=ctab 
     60     xyztnSampleOrthoPlane,vdata,1,y,sState.oSlices[1], $ 
     61       sState.oImages[1],ctab,sState.iAlpha 
     62     sState.oVols[sState.iImgVol]->SetProperty,DATA0=vdata,/NO_COPY 
     63 
    10464     WIDGET_CONTROL, sState.wZSlider, GET_VALUE=z 
    105      IF (sState.bImage[2]) THEN BEGIN 
    106         sState.oVols[sState.iImgVol]->GetProperty,DATA0=vdata,$ 
    107            /NO_COPY,RGB_TABLE0=ctab 
    108         xyztnSampleOrthoPlane,vdata,2,z,sState.oSlices[2], $ 
    109                                    sState.oImages[2],ctab,sState.iAlpha 
    110         sState.oVols[sState.iImgVol]->SetProperty,DATA0=vdata,/NO_COPY 
    111      END ELSE BEGIN 
    112         sState.oVols[2]->GetProperty,DATA0=bMag,RGB_TABLE0=pal,/NO_COPY 
    113         xyztnMkVectors,sState.u,sState.v,sState.w,fVerts,iConn,Z=z, $ 
    114                             SCALE=scale, RANDOM=sState.bRandom, $ 
    115                             NVECTORS=nvectors,STEPSIZE=stepsize,BMAG=bMag,Vc=vc 
    116         sState.oZPolyline->SetProperty,DATA=fVerts,POLYLINES=iConn, $ 
    117                                        VERT_COLORS=transpose(pal[vc,*]) 
    118         sState.oVols[2]->SetProperty,DATA0=bMag,/NO_COPY 
    119      END 
    120   ENDIF 
     65     sState.oVols[sState.iImgVol]->GetProperty,DATA0=vdata,$ 
     66       /NO_COPY,RGB_TABLE0=ctab 
     67     xyztnSampleOrthoPlane,vdata,2,z,sState.oSlices[2], $ 
     68       sState.oImages[2],ctab,sState.iAlpha 
     69     sState.oVols[sState.iImgVol]->SetProperty,DATA0=vdata,/NO_COPY 
     70 ENDIF 
    12171END 
    12272 
     
    294244  ;;  Restore the color table. 
    295245  TVLCT, sState.colorTable 
     246  if sState.groupBase ne 0 then $ 
    296247  if WIDGET_INFO(sState.groupBase, /VALID_ID) then $ 
    297248     WIDGET_CONTROL, sState.groupBase, /MAP 
     
    358309     END 
    359310      
     311     'IMG_SHOW': BEGIN 
     312         sState.bShow = 1-sState.bShow 
     313         bUpdate = 4 
     314         bRedraw = 1 
     315         IF NOT (sState.bShow) THEN sState.oIsopolygon->SetProperty,HIDE=1 
     316     END 
     317      
    360318     'IMG_VOLSEL': BEGIN 
    361319        sState.iImgVol = sEvent.index 
     
    364322        bRedraw = 1 
    365323     END 
    366       
     324 
     325     ;; Contour UI 
     326     'CONT_SHOW': BEGIN 
     327         sState.bContShow = 1-sState.bContShow 
     328         bUpdate = 4 
     329         bRedraw = 1 
     330         IF NOT (sState.bContShow) THEN sState.oIsopolygon->SetProperty,HIDE=1 
     331     END 
     332     'CONT_VOLSEL': BEGIN 
     333        sState.iContVol = sEvent.index 
     334        xyztnColorBarUpdate,sState 
     335        bUpdate = 4 
     336        bRedraw = 1 
     337     END 
     338 
     339 
    367340     'ALPHA_LEVEL': BEGIN 
    368341        WIDGET_CONTROL, sState.wAlpha[0], GET_VALUE=v1 
     
    417390         WIDGET_CONTROL, sState.wXSlider, GET_VALUE=Val 
    418391         slider_value = kdm_range(Val, minmax, slider_value) 
    419          WIDGET_CONTROL, sState.wXtext, SET_VALUE=STRtrim(string(slider_value, FORMAT='(F10.3)'), 2) 
    420         IF (sState.bShow[0]) THEN BEGIN 
     392         WIDGET_CONTROL, sState.wXtext, SET_VALUE= $ 
     393                         STRtrim(string(slider_value, FORMAT='(F10.3)'), 2) 
     394        IF (sState.bShow) THEN BEGIN 
    421395           bUpdate = 1 
    422396           bRedraw = 1 
     
    428402         WIDGET_CONTROL, sState.wYSlider, GET_VALUE=Val 
    429403         slider_value = kdm_range(Val, minmax, slider_value) 
    430          WIDGET_CONTROL, sState.wYtext, SET_VALUE=STRtrim(string(slider_value, FORMAT='(F10.3)'), 2) 
    431         IF (sState.bShow[1]) THEN BEGIN 
     404         WIDGET_CONTROL, sState.wYtext, SET_VALUE= $ 
     405                         STRtrim(string(slider_value, FORMAT='(F10.3)'), 2) 
     406        IF (sState.bShow) THEN BEGIN 
    432407           bUpdate = 2 
    433408           bRedraw = 1 
     
    439414         WIDGET_CONTROL, sState.wZSlider, GET_VALUE=Val 
    440415         slider_value = kdm_range(Val, minmax, slider_value) 
    441          WIDGET_CONTROL, sState.wZtext, SET_VALUE=STRtrim(string(slider_value, FORMAT='(F10.3)'), 2) 
    442         IF (sState.bShow[2]) THEN BEGIN 
     416         WIDGET_CONTROL, sState.wZtext, SET_VALUE= $ 
     417                         STRtrim(string(slider_value, FORMAT='(F10.3)'), 2) 
     418        IF (sState.bShow) THEN BEGIN 
    443419           bUpdate = 3 
    444420           bRedraw = 1 
     
    502478     ;; start by hiding everything 
    503479     hid = (1-sState.bShow) 
    504      sState.oXPolyline->SetProperty,HIDE=hid[0]+sState.bImage[0] 
    505      sState.oYPolyline->SetProperty,HIDE=hid[1]+sState.bImage[1] 
    506      sState.oZPolyline->SetProperty,HIDE=hid[2]+sState.bImage[2] 
    507      sState.oSlices[0]->SetProperty,HIDE=hid[0]+(1-sState.bImage[0]) 
    508      sState.oSlices[1]->SetProperty,HIDE=hid[1]+(1-sState.bImage[1]) 
    509      sState.oSlices[2]->SetProperty,HIDE=hid[2]+(1-sState.bImage[2]) 
     480     sState.oXPolyline->SetProperty,HIDE=hid+sState.bImage 
     481     sState.oYPolyline->SetProperty,HIDE=hid+sState.bImage 
     482     sState.oZPolyline->SetProperty,HIDE=hid+sState.bImage 
     483     sState.oSlices[0]->SetProperty,HIDE=hid+(1-sState.bImage) 
     484     sState.oSlices[1]->SetProperty,HIDE=hid+(1-sState.bImage) 
     485     sState.oSlices[2]->SetProperty,HIDE=hid+(1-sState.bImage) 
    510486     sState.oIsopolygon->SetProperty,HIDE=(1-sState.bIsoShow) 
    511487      
     
    572548  ;;  Set up dimensions of the drawing (viewing) area. 
    573549  if ScreenSize[0] GE 1800 then ScreenSize[0] = 1800 
    574   xdim = screenSize[0]*0.7 
     550  xdim = screenSize[0]*0.6 
    575551  ydim = xdim*0.8 
    576552   
     
    623599  wLabel = WIDGET_LABEL(wFrameBase,VALUE='Planes') 
    624600 
    625   wIVolSel = WIDGET_DROPLIST(wFrameBase,VALUE=dnames, $ 
     601  ;; Image controls 
     602  wRow = WIDGET_BASE(wFrameBase,/ROW) 
     603  wIVolSel = WIDGET_DROPLIST(wRow,VALUE=dnames, $ 
    626604                             FRAME=frame,TITLE='Image',UVAL='IMG_VOLSEL') 
    627  
    628    
     605  wRowB = WIDGET_BASE(wRow,/ROW,/NONEXCLUSIVE) 
     606  wImgShow = WIDGET_BUTTON(wRowB,VALUE='Show',UVAL='IMG_SHOW') 
     607  WIDGET_CONTROL,wImgShow,/SET_BUTTON 
     608 
     609  ;; Contour 
     610;   wRow = WIDGET_BASE(wFrameBase,/ROW) 
     611;   wIVolSel = WIDGET_DROPLIST(wRow,VALUE=dnames, $ 
     612;                              FRAME=frame,TITLE='Contour',UVAL='IMG_VOLSEL') 
     613;   wRowB = WIDGET_BASE(wRow,/ROW,/NONEXCLUSIVE) 
     614;   wContShow = WIDGET_BUTTON(wRowB,VALUE='Show',UVAL='CONT_SHOW') 
     615 
     616  ;; Possible vector 
     617;   IF XIASTREC(data,'U') AND XIASTREC(data,'V') AND XIASTREC(data,'W')THEN BEGIN 
     618;      wVecBase = WIDGET_BASE(wFrameBase,/NONEXCLUSIVE) 
     619;      wIVolSel = WIDGET_BUTTON(wVecBase,VALUE="U/V/W Vectors",UVAL='IMG_VOLSEL') 
     620;   ENDIF 
     621   
     622  ;; Planes for image/contour/vectors 
    629623  wRow = WIDGET_BASE(wFrameBase,/ROW) 
    630624  wText = WIDGET_LABEL(wRow, VALUE='X:' ) 
     
    655649 
    656650 
    657    
    658   ;wTrans = WIDGET_BASE(wFrameBase,/ROW,/FRAME) 
     651  ;; Transparency min/max (alpha channel) for Images 
    659652  wSpace = WIDGET_LABEL(wFrameBase,VALUE='Image Transparency') 
    660   ;Calculate the transparency value = mode+1 
     653  ;; Calculate the transparency value = mode+1 
    661654  transparencyMin = KDM_RANGE(mode(d0), [min(d0),max(d0)], [0,255] )+1 
    662655  wRow = WIDGET_BASE(wFrameBase,/ROW) 
     
    671664 
    672665 
    673  
    674  
    675666  wFrameBase = WIDGET_BASE(wRowBase, /COLUMN, /FRAME) 
    676667  frame = !version.os_family ne 'unix' ; Workaround problem 7763. 
    677668 
    678  
    679  
    680  
    681  
    682   IF KEYWORD_SET(showvolume) THEN BEGIN 
    683      wRow0 = WIDGET_BASE(wFrameBase,/ROW) 
    684      wVVolSel = WIDGET_DROPLIST(wRow0,VALUE=dnames, $ 
    685                                 FRAME=frame, TITLE='Volume', $ 
    686                                 UVAL='VREND_VOLSEL') 
    687      wRow1 = WIDGET_BASE(wRow0,/ROW,/NONEXCLUSIVE) 
    688      wVRender = WIDGET_BUTTON(wRow1, VALUE='On?', $ 
    689                               UVALUE='VREND', UNAME='XYZTN:volrendr') 
    690   ENDIF 
    691  
     669  ;; Volume 
     670  wRow0 = WIDGET_BASE(wFrameBase,/ROW) 
     671  wVVolSel = WIDGET_DROPLIST(wRow0,VALUE=dnames, $ 
     672                             FRAME=frame, TITLE='Volume', $ 
     673                             UVAL='VREND_VOLSEL') 
     674  wRow1 = WIDGET_BASE(wRow0,/ROW,/NONEXCLUSIVE) 
     675  wVRender = WIDGET_BUTTON(wRow1, VALUE='Show', $ 
     676                           UVALUE='VREND', UNAME='XYZTN:volrendr') 
     677 
     678  ;; Isosurface 
    692679  wRow0 = WIDGET_BASE(wFrameBase,/ROW) 
    693680  wSVolSel = WIDGET_DROPLIST(wRow0,VALUE=dnames, $ 
    694681                             FRAME=frame, TITLE='Iso',UVAL='ISO_VOLSEL') 
    695682  wRow1 = WIDGET_BASE(wRow0,/ROW,/NONEXCLUSIVE) 
    696   wIsotoggle = WIDGET_BUTTON(wRow1,VALUE='On?',UVALUE='ISO_SHOW') 
     683  wIsotoggle = WIDGET_BUTTON(wRow1,VALUE='Show',UVALUE='ISO_SHOW') 
    697684   
    698685  wRow2 = WIDGET_BASE(wFrameBase,/ROW) 
     
    704691  wGuiBase3 = WIDGET_BASE(wFrameBase,/COLUMN,/NONEXCLUSIVE) 
    705692   
    706    
     693 
     694  ;; Time 
    707695  IF (nSteps GT 0) THEN BEGIN 
    708696     ;wLabel = WIDGET_LABEL(wGuiBase, VALUE='Time') 
     
    735723  ;; Compute viewplane rect based on aspect ratio. 
    736724  aspect = FLOAT(xdim) / FLOAT(ydim) 
    737   myview = [-0.5, -0.5, 1, 1] * 1.8 ;1.5 
     725  myview = [-0.5, -0.5, 1, 1] * 1.7 
    738726  IF (aspect > 1) THEN BEGIN 
    739727     myview[0] = myview[0] - ((aspect-1.0)*myview[2])/2.0 
     
    746734  ;; Drop the view down a bit to make room for the colorbar 
    747735  ;; myview[1] = myview[1] - 0.1 
    748   myview[1] = myview[1] - 0.10 
     736  myview[1] = myview[1] - 0.15 
    749737   
    750738  ;; Create view. 
     
    784772  _range = XIASTREC(meta,'xrange')?meta.xrange:[0, xMax] 
    785773  TickValues = kdm_range(TickValues, [0, xMax], _range) 
    786   oTickValues = OBJ_NEW('IDLgrText', STRINGS=STRtrim(string(TickValues, FORMAT='(F10.2)'), 2)) 
     774  oTickValues = OBJ_NEW('IDLgrText', STRINGS= $ 
     775                        STRtrim(string(TickValues,FORMAT='(F10.2)'), 2)) 
    787776  oAxis = OBJ_NEW('IDLgrAxis', 0, COLOR=[255,255,255], $ 
    788777                  RANGE=[0,xMax], /EXACT, $ 
     
    800789  _range = XIASTREC(meta,'yrange')?meta.yrange:[0, yMax] 
    801790  TickValues = kdm_range(TickValues, [0, yMax], _range) 
    802   oTickValues = OBJ_NEW('IDLgrText', STRINGS=STRtrim(string(TickValues, FORMAT='(F10.2)'), 2)) 
     791  oTickValues = OBJ_NEW('IDLgrText', STRINGS= $ 
     792                        STRtrim(string(TickValues, FORMAT='(F10.2)'), 2)) 
    803793  oAxis = OBJ_NEW('IDLgrAxis', 1, COLOR=[255,255,255], $ 
    804794                  RANGE=[0,yMax], /EXACT, $ 
     
    816806  _range = XIASTREC(meta,'zrange')?meta.zrange:[0, zMax] 
    817807  TickValues = kdm_range(TickValues, [0, zMax], _range) 
    818   oTickValues = OBJ_NEW('IDLgrText', STRINGS=STRtrim(string(TickValues, FORMAT='(F10.2)'), 2)) 
     808  oTickValues = OBJ_NEW('IDLgrText', STRINGS= $ 
     809                        STRtrim(string(TickValues, FORMAT='(F10.2)'), 2)) 
    819810  oAxis = OBJ_NEW('IDLgrAxis', 2, COLOR=[255,255,255], $ 
    820811                  RANGE=[0,zMax-1],$ 
     
    864855  oGroup->Add, oYPolygon 
    865856  oGroup->Add, oZPolygon 
     857 
     858  ;; Contours (on image planes) 
     859  oXContour = OBJ_NEW('IDLgrContour') 
     860  oYContour = OBJ_NEW('IDLgrContour') 
     861  oZContour = OBJ_NEW('IDLgrContour') 
     862;  oGroup->Add, oContour 
     863 
    866864   
    867865  ;; Iso Surface objects 
     
    973971            minmaxarr: minmaxarr,  $  
    974972            vdata:vdata,           $ 
    975             bShow: [0b,0b,0b],     $ 
    976             bImage: [0b,0b,0b],    $ 
     973;            bContShow: [0b,0b,0b], $ 
     974            bShow: 0b,             $ 
     975            bImage: 0b,            $ 
    977976            bRandom: 0b,           $ 
    978977            oHolder: oHolder,      $ 
     
    997996            oCBAxis: oCBAxis,      $ 
    998997            iAlpha: [transparencyMin,255],       $ ; KDM 
     998            iContVol: 0,            $ 
    999999            iImgVol: 0,            $ 
    10001000            iVrendVol: 0,          $ 
     
    10031003            oIsopolygon: oIsopolygon, $ 
    10041004            oImages: [oXImage,oYImage,oZImage], $ 
     1005            oContours: [oXContour, oYContour, oZContour], $ 
    10051006            iIsoVol: 0,            $ 
    10061007            fIsoLevel: 128,        $ 
     
    10221023 
    10231024  ;; Initialize with an interesting view 
    1024   sState.bShow[*]=1 
    1025   sState.bImage[*]=1 
     1025  sState.bShow=1 
     1026  sState.bImage=1 
    10261027  sState.bIsoShow=0 
    10271028  sState.bVolShow = 0