Changeset 821

Show
Ignore:
Timestamp:
09/12/07 15:16:15 (12 months ago)
Author:
mankoff
Message:

Initial support for vectors. UI elements and functionality show up if variables exist named U,V, and W

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • misc/clouds/xyztn.pro

    r815 r821  
    7676  xyztnSampleOrthoPlane,vdata,2,z,sState.oSlices[2], $ 
    7777                        sState.oImages[2],ctab,sState.iAlpha 
    78    
    7978  ;; Restore the data 
    8079  sState.oVols[sState.iImgVol]->SetProperty,DATA0=vdata,/NO_COPY 
     80 
     81 
     82  ;; Vectors? 
     83  IF sState.vec_show THEN BEGIN 
     84     sState.oVols[0]->GetProperty,DATA0=bMag,RGB_TABLE0=pal,/NO_COPY 
     85 
     86     ;; x,y,z 
     87     u = (*sState.pdata).u & v = (*sState.pdata).v & w = (*sState.pdata).w 
     88     xyztnMkVectors,u,v,w,fVerts,iConn, $ 
     89                    SCALE=scale, RANDOM=sState.bRandom, NVECTORS=nvectors,$ 
     90                    STEPSIZE=stepsize,BMAG=bMag,Vc=vc,X=x 
     91     sState.oVectors[0]->SetProperty,DATA=fVerts,POLYLINES=iConn 
     92     xyztnMkVectors,u,v,w,fVerts,iConn, $ 
     93                    SCALE=scale, RANDOM=sState.bRandom, NVECTORS=nvectors,$ 
     94                    STEPSIZE=stepsize,BMAG=bMag,Vc=vc,Y=y 
     95     sState.oVectors[1]->SetProperty,DATA=fVerts,POLYLINES=iConn 
     96     xyztnMkVectors,u,v,w,fVerts,iConn, $ 
     97                    SCALE=scale, RANDOM=sState.bRandom, NVECTORS=nvectors,$ 
     98                    STEPSIZE=stepsize,BMAG=bMag,Vc=vc,Z=z 
     99     sState.oVectors[2]->SetProperty,DATA=fVerts,POLYLINES=iConn 
     100     ;;; x,y,z, end 
     101      
     102     sState.oVols[0]->SetProperty,DATA0=bMag,/NO_COPY 
     103  ENDIF 
     104 
     105 
    81106END 
    82107 
     
    244269 
    245270 
     271 
     272 
     273 
     274PRO xyztnMkVectors, u, v, w, fVerts, iConn, X=x, Y=y, Z=z, SCALE=scale,$ 
     275                    RANDOM=random, NVECTORS=nvectors, STEPSIZE=stepsize,$ 
     276                    bMAG=bMag, VC=vc 
     277   
     278  ;; Ensure volumes match in number of elements. 
     279  nSamples = N_ELEMENTS(u) 
     280  IF (nSamples NE N_ELEMENTS(v) OR nSamples NE N_ELEMENTS(w)) THEN BEGIN 
     281     MESSAGE,'Number of elements in u, v, and w must match.' 
     282     RETURN 
     283  ENDIF 
     284  sz = SIZE(u) 
     285 
     286  ;; Handle keywords, set defaults. 
     287  IF (N_ELEMENTS(scale) EQ 0) THEN scale = 1.0 
     288  IF (N_ELEMENTS(random) EQ 0) THEN random=0 
     289  IF (N_ELEMENTS(nvectors) EQ 0) THEN nvectors = 100 
     290  IF (N_ELEMENTS(stepsize) eq 0) then stepsize = 1 
     291  IF (N_ELEMENTS(bMag) EQ 0) THEN bMag = BYTSCL(SQRT(u^2+v^2+w^2)) 
     292 
     293  ;; Get plane information. 
     294  doPlane = 0 
     295  IF (N_ELEMENTS(x) GT 0) THEN BEGIN 
     296     IF (random EQ 0) THEN BEGIN 
     297        nRow = sz[2] / stepsize 
     298        nCol = sz[3] / stepsize 
     299     ENDIF 
     300     doPlane = 1 
     301  ENDIF 
     302  IF (N_ELEMENTS(y) GT 0) THEN BEGIN 
     303     IF (doPlane) THEN MESSAGE,'X, Y, and Z keywords are mutually exclusive' 
     304     IF (random EQ 0) THEN BEGIN 
     305        nRow = sz[3] / stepsize 
     306        nCol = sz[1] / stepsize 
     307     ENDIF 
     308     doPlane = 2 
     309  ENDIF 
     310  IF (N_ELEMENTS(z) GT 0) THEN BEGIN 
     311     IF (doPlane) THEN MESSAGE,'X, Y, and Z keywords are mutually exclusive' 
     312     IF (random EQ 0) THEN BEGIN 
     313        nRow = sz[2] / stepsize 
     314        nCol = sz[1] / stepsize 
     315     ENDIF 
     316     doPlane = 3 
     317  ENDIF 
     318  IF (doPlane EQ 0) THEN MESSAGE, 'Must specify a plane.' 
     319   
     320  ;; Grab max, min values in vector volumes. 
     321  maxU = MAX(u, MIN=minU) 
     322  maxV = MAX(v, MIN=minV) 
     323  maxW = MAX(w, MIN=minW) 
     324   
     325  ;; Compute the magnitude. 
     326  mag = SQRT((maxU-minU)^2 + (maxV-minV)^2 + (maxW-minW)^2) 
     327  fNorm = scale / mag 
     328   
     329  nV = nRow*nCol 
     330   
     331  fVerts = FLTARR(3, 2*nV) 
     332  iConn = LONARR(3*nV) 
     333  vc = BYTARR(2*nV) 
     334   
     335  CASE doPlane OF 
     336     1: BEGIN                   ; X=x 
     337        x0 = REPLICATE(x,nV) 
     338        y0 = REFORM((REPLICATE(1,nCol) # (LINDGEN(nRow)*stepsize)),nV) 
     339        z0 = REFORM(((LINDGEN(nCol)*stepsize) # REPLICATE(1,nRow)),nV) 
     340     END 
     341     2: BEGIN                   ; Y=y 
     342        y0 = REPLICATE(y,nRow*nCol) 
     343        z0 = REFORM((REPLICATE(1,nCol) # (LINDGEN(nRow)*stepsize)),nV) 
     344        x0 = REFORM(((LINDGEN(nCol)*stepsize) # REPLICATE(1,nRow)),nV) 
     345     END 
     346     3: BEGIN                   ; Z=z 
     347        z0 = REPLICATE(z,nRow*nCol) 
     348        y0 = REFORM((REPLICATE(1,nCol) # (LINDGEN(nRow)*stepsize)),nV) 
     349        x0 = REFORM(((LINDGEN(nCol)*stepsize) # REPLICATE(1,nRow)),nV) 
     350     END 
     351  ENDCASE 
     352   
     353  inds = LINDGEN(nV) 
     354  v0 = transpose([[x0],[y0],[z0]]) 
     355  v1 = transpose([[x0+u[x0,y0,z0]*fNorm], $ 
     356                  [y0+v[x0,y0,z0]*fNorm], $ 
     357                  [z0+w[x0,y0,z0]*fNorm]]) 
     358  fVerts[*,inds*2] = v0[*,inds] 
     359  fVerts[*,inds*2+1] = v1[*,inds] 
     360  iConn[inds*3] = 2 
     361  iConn[inds*3+1] = inds*2 
     362  iConn[inds*3+2] = inds*2+1 
     363   
     364  vc[inds*2] = bMag[x0,y0,z0] 
     365  vc[inds*2+1] = bMag[x0,y0,z0] 
     366END 
     367 
     368 
     369 
     370 
    246371;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
    247372;; Cleanup 
     
    339464     END 
    340465 
     466     ;; Image variable changed 
     467     'VEC_SHOW': BEGIN 
     468        sState.oVectors[0]->SetProperty, HID=sState.vec_show 
     469        sState.oVectors[1]->SetProperty, HID=sState.vec_show 
     470        sState.oVectors[2]->SetProperty, HID=sState.vec_show 
     471        sState.vec_show = 1-sState.vec_show 
     472        bUpdate = 4 
     473        bRedraw = 1 
     474     END 
     475 
    341476     ;; Show/Hide Contour Planes 
    342477     'CONT_SHOW': BEGIN 
     
    413548         WIDGET_CONTROL, sState.wXtext, SET_VALUE= $ 
    414549                         STRtrim(string(slider_value, FORMAT='(F10.3)'), 2) 
    415         IF (sState.bShow) THEN BEGIN 
    416550           bUpdate = 1 
    417551           bRedraw = 1 
    418         ENDIF 
    419552     END 
    420553     ;; Y plane location 
     
    426559         WIDGET_CONTROL, sState.wYtext, SET_VALUE= $ 
    427560                         STRtrim(string(slider_value, FORMAT='(F10.3)'), 2) 
    428         IF (sState.bShow) THEN BEGIN 
    429561           bUpdate = 2 
    430562           bRedraw = 1 
    431         ENDIF 
    432563     END 
    433564     ;; Z plane location 
     
    440571         WIDGET_CONTROL, sState.wZtext, SET_VALUE= $ 
    441572                         STRtrim(string(slider_value, FORMAT='(F10.3)'), 2) 
    442         IF (sState.bShow) THEN BEGIN 
    443573           bUpdate = 3 
    444574           bRedraw = 1 
    445         ENDIF 
    446575    END 
    447576 
     
    578707     END 
    579708 
     709     ELSE: MESSAGE, "UI Event with no handler", /CONT 
     710 
    580711  ENDCASE 
    581712   
     
    584715     ;; start by hiding everything 
    585716     hid = (1-sState.bShow) 
    586      sState.oXPolyline->SetProperty,HIDE=hid+sState.bImage 
    587      sState.oYPolyline->SetProperty,HIDE=hid+sState.bImage 
    588      sState.oZPolyline->SetProperty,HIDE=hid+sState.bImage 
    589717     sState.oSlices[0]->SetProperty,HIDE=hid+(1-sState.bImage) 
    590718     sState.oSlices[1]->SetProperty,HIDE=hid+(1-sState.bImage) 
     
    690818     XIASTREC(data,'W')THEN BEGIN 
    691819     wVecBase = WIDGET_BASE(wFrameBase,/NONEXCLUSIVE) 
    692      wIVolSel = WIDGET_BUTTON(wVecBase,VALUE="U/V/W Vectors",UVAL='IMG_VOLSEL') 
     820     wIVolSel = WIDGET_BUTTON(wVecBase,VALUE="U/V/W Vectors",UVAL='VEC_SHOW') 
    693821  ENDIF 
    694822   
     
    10691197            oImages: [oXImage,oYImage,oZImage], $ 
    10701198            oContours: [oXContour, oYContour, oZContour], $ 
     1199            oVectors: [oXPolyline, oYPolyline, oZPolyline ], $ 
     1200            vec_show: 0B,          $ 
    10711201            iIsoVol: 0,            $ 
    10721202            fIsoLevel: 128,        $ 
     
    10741204            bIsoShow: 0,           $ 
    10751205            bVolShow: 0,           $ 
    1076             oXPolyline: oXPolyline,$ 
    1077             oYPolyline: oYPolyline,$ 
    1078             oZPolyline: oZPolyline,$ 
    10791206            ColorTable: colorTable,$ ; Color table to restore at exit 
    10801207            debug: keyword_set(debug), $