⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chapter10volumeexample.pro

📁 idl 可视化分析与应用(随书程序)
💻 PRO
字号:
; Chapter10VolumeExample.pro
PRO Chapter10VolumeExample_event, sEvent
  if (TAG_NAMES(sEvent, /STRUCTURE_NAME) EQ 'WIDGET_KILL_REQUEST') then begin
    WIDGET_CONTROL, sEvent.top, /DESTROY
    RETALL
    WIDGET_CONTROL, /RESET
    CLOSE, /ALL
    HEAP_GC, /VERBOSE
    RETURN
  endif
  WIDGET_CONTROL, sEvent.id, GET_UVALUE = myvalue
  case myvalue of
      'volbutton1': begin
         Widget_CONTROL, sEvent.top, GET_UVALUE=sState, /NO_COPY
         sState.Myvolume -> SetPROperty, COMPOSITE_FUNCTION=0, LIGHTING_MODEL=0
         for i=0,255 do sState.opac[i] = i
         sState.Myvolume -> SetPROperty, OPACITY_TABLE0=sState.opac
         for i=0,255 do sState.rgb[i,0] = i
         for i=0,255 do sState.rgb[i,1] = i
         for i=0,255 do sState.rgb[i,2] = i
         sState.Myvolume -> SetPROperty, RGB_TABLE0=sState.rgb
         sState.myvol_Window -> Draw, sState.Myview
         Widget_CONTROL, sEvent.top, SET_UVALUE=sState, /NO_COPY
      end
      'volbutton2': begin
         Widget_CONTROL, sEvent.top, GET_UVALUE=sState, /NO_COPY
         sState.Myvolume -> SetPROperty, COMPOSITE_FUNCTION=0, LIGHTING_MODEL=0
         for i=0,255 do sState.rgb[i,0] = i
         for i=0,255 do sState.rgb[i,1] = i
         for i=0,255 do sState.rgb[i,2] = i
         sState.Myvolume -> SetPROperty, RGB_TABLE0=sState.rgb
         sState.opac[0:127] = BINDGEN(128)/8
         sState.opac[255] = 255 ;Voxel value of one cube.
         sState.opac[128] = 255 ;Voxel value of the other cube.
         sState.Myvolume -> SetPROperty, OPACITY_TABLE0=sState.opac
         sState.myvol_window -> Draw, sState.Myview
         Widget_CONTROL, sEvent.top, SET_UVALUE=sState, /NO_COPY
      end
      'volbutton3': begin
         Widget_CONTROL, sEvent.top, GET_UVALUE=sState, /NO_COPY
         sState.Myvolume -> SetPROperty, COMPOSITE_FUNCTION=0, LIGHTING_MODEL=0
         sState.opac[0:127] = BINDGEN(128)/8
         sState.opac[255] = 255 ;Voxel value of one cube.
         sState.opac[128] = 255 ;Voxel value of the other cube.
         sState.Myvolume -> SetPROperty, OPACITY_TABLE0=sState.opac
         sState.rgb[0:127,0] = bindgen(128) ;Grayscale ramp for the prism.
         sState.rgb[0:127,1] = bindgen(128)
         sState.rgb[0:127,2] = bindgen(128)
         sState.rgb[128,*] = [255,0,0] ;One cube is red.
         sState.rgb[255,*] = [0,0,255] ;One cube is blue.
         sState.Myvolume -> SetPROperty, RGB_TABLE0=sState.rgb
         sState.myvol_window -> Draw, sState.Myview
         Widget_CONTROL, sEvent.top, SET_UVALUE=sState, /NO_COPY
      end
      'volbutton4': begin
         Widget_CONTROL, sEvent.top, GET_UVALUE=sState, /NO_COPY
         sState.Myvolume -> SetPROperty, COMPOSITE_FUNCTION=0, LIGHTING_MODEL=0
         sState.opac[0:127] = BINDGEN(128)/8
         sState.opac[255] = 255 ;Voxel value of one cube.
         sState.opac[128] = 255 ;Voxel value of the other cube.
         sState.Myvolume -> SetPROperty, OPACITY_TABLE0=sState.opac
         sState.rgb[0:127,0] = bindgen(128) ;Grayscale ramp for the prism.
         sState.rgb[0:127,1] = bindgen(128)
         sState.rgb[0:127,2] = bindgen(128)
         sState.rgb[128,*] = [255,0,0] ;One cube is red.
         sState.rgb[255,*] = [0,0,255] ;One cube is blue.
         sState.Myvolume -> SetPROperty, RGB_TABLE0=sState.rgb
         sState.Myvolume->SetPROperty, AMBIENT=[150,150,150], $
                                       LIGHTING_MODEL=1, TWO_SIDED=1
         sState.Myview -> Add, sState.Mylmodel
         sState.Mylmodel -> Add, sState.Mylight
         sState.myvol_window -> Draw, sState.Myview
         sState.Myview -> Remove, sState.Mylmodel
         sState.Mylmodel -> Remove, sState.Mylight
         Widget_CONTROL, sEvent.top, SET_UVALUE=sState, /NO_COPY
      end
      'volbutton5': begin
         Widget_CONTROL, sEvent.top, GET_UVALUE=sState, /NO_COPY
         sState.Myvolume -> SetPROperty, COMPOSITE_FUNCTION=1, LIGHTING_MODEL=0
         sState.myvol_window -> Draw, sState.Myview
         Widget_CONTROL, sEvent.top, SET_UVALUE=sState, /NO_COPY
      end
      else:
  endcase
end
PRO Chapter10VolumeExampleCleanup, wTopBase
    WIDGET_CONTROL, wTopBase, GET_UVALUE=sState, /NO_COPY
    for i=0,n_tags(sState)-1 do begin
        case size((sState).(i), /TNAME) of
            'POINTER': ptr_free, (sState).(i)
            'OBJREF':  obj_destroy, (sState).(i)
            else:
        endcase
    end
end
PRO Chapter10VolumeExample
  data = BYTARR(64,64,64)
  FOR i=0,63 DO data[*,i,0:i] = i*2
  data[5:15, 5:15, 5:55] = 128
  data[45:55, 45:55, 5:15] = 255
  Myvolume = OBJ_NEW('IDLgrVolume', data)
  cc = [-0.5, 1.0/64.0]
  Myvolume -> SetPROperty, XCOORD_CONV=cc, YCOORD_CONV=cc, ZCOORD_CONV=cc
  Myvolume -> SetPROperty, ZERO_OPACITY_SKIP=1
  Myvolume -> SetPROperty, ZBUFFER=1
  Myview = OBJ_NEW('IDLgrView',VIEWPLANE_RECT=[-1,-1,2,2], $
                               ZCLIP=[2.0,-2.0], COLOR=[255,255,255])
  Mymodel = OBJ_NEW('IDLgrModel')
  Myview -> Add, Mymodel
  Mymodel -> Add, Myvolume
  Mylmodel = OBJ_NEW('IDLgrModel')
  Mylight = OBJ_NEW('IDLgrLight', TYPE=2, LOCATION=[0,0,1], COLOR=[255,255,255])
  Mymodel -> rotate, [1,1,1], 45
  rVol_Base = Widget_Base(TITLE='Volume Example', /ROW, /TLB_KILL_REQUEST_EVENTS)
  rLeft_Base = Widget_Base(rVol_Base, XOFFSET=6 ,YOFFSET=6)
  rVol_DRAW = WIDGET_DRAW(rLeft_Base, XSIZE=600, YSIZE=500, UVALUE='DRAW',RENDERER=1,$
                          RETAIN=1, /EXPOSE_EVENTS, /BUTTON_EVENTS, GRAPHICS_LEVEL=2)
  rRight_Base = Widget_Base(rVol_Base,/COLUMN, XOFFSET=6 ,YOFFSET=6)
  rVol_BUTTON1 = Widget_Button(rRight_Base, uvalue='volbutton1',VALUE=' Render1 ')
  rVol_BUTTON2 = Widget_Button(rRight_Base, uvalue='volbutton2',VALUE=' Render2 ')
  rVol_BUTTON3 = Widget_Button(rRight_Base, uvalue='volbutton3',VALUE=' Render3 ')
  rVol_BUTTON4 = Widget_Button(rRight_Base, uvalue='volbutton4',VALUE=' Render4 ')
  rVol_BUTTON5 = Widget_Button(rRight_Base, uvalue='volbutton5',VALUE=' Render5 ')
  Widget_Control, /REALIZE, rVol_Base
  Widget_CONTROL, rVol_DRAW, GET_VALUE = myvol_Window
  sState ={rVol_DRAW: rVol_DRAW, myvol_Window: myvol_Window, Myview: Myview, $
           Mymodel: Mymodel, Myvolume: Myvolume, Mylmodel: Mylmodel, $
           Mylight: Mylight, rgb: bytarr(256,3), opac: BYTARR(256)   }
  myvol_Window -> Draw, Myview
  Widget_CONTROL, rVol_Base, SET_UVALUE=sState, /NO_COPY
  XManager, 'Chapter10VolumeExample', $
             CLEANUP='Chapter10VolumeExampleCleanup', rVol_Base, /NO_BLOCK
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -