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

📄 chapter10volumerenderexercise.pro

📁 idl 可视化分析与应用(随书程序)
💻 PRO
📖 第 1 页 / 共 3 页
字号:

            endif else begin

          widget_control, (*pState).hSlice_x_slider,    SENSITIVE = 0
          widget_control, (*pState).hSlice_y_slider,    SENSITIVE = 0
          widget_control, (*pState).hSlice_z_slider,    SENSITIVE = 0
          widget_control, (*pState).hSlice_on_x_button, SENSITIVE = 0
          widget_control, (*pState).hSlice_on_y_button, SENSITIVE = 0
          widget_control, (*pState).hSlice_on_z_button, SENSITIVE = 0
          widget_control, (*pState).hSlice_save,        SENSITIVE = 0

          widget_control, (*pState).hSlice_on_x_button, SET_BUTTON = 0
          widget_control, (*pState).hSlice_on_y_button, SET_BUTTON = 0
          widget_control, (*pState).hSlice_on_z_button, SET_BUTTON = 0

          (*pState).hSlice_on_x_button_status = 0
          (*pState).hSlice_on_x_button_status = 0
          (*pState).hSlice_on_x_button_status = 0

          widget_control, (*pState).hSlice_x_slider, set_value = 1
          widget_control, (*pState).hSlice_y_slider, set_value = 1
          widget_control, (*pState).hSlice_z_slider, set_value = 1

             tmpdd = intarr((*pState).volumexlength,(*pState).volumeylength,(*pState).volumezlength)
                tmpdd = (*pState).originalvolumedata
                (*pState).rVolume->SetProperty,DATA0 = tmpdd

               (*pState).rVolume->SetProperty, CUTTING_PLANE = 0

               (*pState).rWindow->Draw, (*pState).rView

            endelse

        end

        'hfsliceonxbutton': begin

         (*pState).hSlice_on_x_button_status = event.select

         (*pState).rVolume->SetProperty,DATA0 = (*pState).originalvolumedata

         (*pState).rVolume->SetProperty, CUTTING_PLANE=0

         widget_control, (*pState).hSlice_x_slider, get_value = xvalue
         widget_control, (*pState).hSlice_y_slider, get_value = yvalue
         widget_control, (*pState).hSlice_z_slider, get_value = zvalue


           if (*pState).hSlice_on_x_button_status or $
              (*pState).hSlice_on_y_button_status or $
              (*pState).hSlice_on_z_button_status then begin

          tmpdd = intarr((*pState).volumexlength,(*pState).volumeylength,(*pState).volumezlength)

               (*pState).rVolume->SetProperty, CUTTING_PLANE = 0

             if (*pState).hSlice_on_x_button_status then begin
              for j = 0, (*pState).volumeylength-1 do begin
                 for k = 0, (*pState).volumezlength-1 do begin
                   tmpdd[xvalue-1,j,k] = (*pState).originalvolumedata[xvalue-1,j,k]
                 endfor
              endfor
          endif

             if (*pState).hSlice_on_y_button_status then begin
              for i = 0, (*pState).volumexlength-1 do begin
                 for k = 0, (*pState).volumezlength-1 do begin
                   tmpdd[i,yvalue-1,k] = (*pState).originalvolumedata[i,yvalue-1,k]
                 endfor
              endfor
          endif

             if (*pState).hSlice_on_z_button_status then begin
              for i = 0, (*pState).volumexlength-1 do begin
                 for j = 0, (*pState).volumeylength-1 do begin
                   tmpdd[i,j,zvalue-1] = (*pState).originalvolumedata[i,j,zvalue-1]
                 endfor
              endfor
          endif

                (*pState).rVolume->SetProperty,DATA0 = tmpdd

         endif else begin

             tmpdd = intarr((*pState).volumexlength,(*pState).volumeylength,(*pState).volumezlength)
                tmpdd = (*pState).originalvolumedata
                (*pState).rVolume->SetProperty,DATA0 = tmpdd

               (*pState).rVolume->SetProperty, $
                   CUTTING_PLANE=[xvalue, yvalue, zvalue, -(xvalue*xvalue + yvalue*yvalue + zvalue*zvalue)]
            endelse
            (*pState).rWindow->Draw, (*pState).rView
        end

        'hfsliceonybutton': begin

         (*pState).hSlice_on_y_button_status = event.select

         (*pState).rVolume->SetProperty,DATA0 = (*pState).originalvolumedata

         (*pState).rVolume->SetProperty, CUTTING_PLANE=0

         widget_control, (*pState).hSlice_x_slider, get_value = xvalue
           widget_control, (*pState).hSlice_y_slider, get_value = yvalue
         widget_control, (*pState).hSlice_z_slider, get_value = zvalue


           if (*pState).hSlice_on_x_button_status or $
              (*pState).hSlice_on_y_button_status or $
              (*pState).hSlice_on_z_button_status then begin

          tmpdd = intarr((*pState).volumexlength,(*pState).volumeylength,(*pState).volumezlength)

               (*pState).rVolume->SetProperty, CUTTING_PLANE = 0

             if (*pState).hSlice_on_x_button_status then begin
              for j = 0, (*pState).volumeylength-1 do begin
                 for k = 0, (*pState).volumezlength-1 do begin
                   tmpdd[xvalue-1,j,k] = (*pState).originalvolumedata[xvalue-1,j,k]
                 endfor
              endfor
          endif

             if (*pState).hSlice_on_y_button_status then begin
              for i = 0, (*pState).volumexlength-1 do begin
                 for k = 0, (*pState).volumezlength-1 do begin
                   tmpdd[i,yvalue-1,k] = (*pState).originalvolumedata[i,yvalue-1,k]
                 endfor
              endfor
          endif

             if (*pState).hSlice_on_z_button_status then begin
              for i = 0, (*pState).volumexlength-1 do begin
                 for j = 0, (*pState).volumeylength-1 do begin
                   tmpdd[i,j,zvalue-1] = (*pState).originalvolumedata[i,j,zvalue-1]
                 endfor
              endfor
          endif

                (*pState).rVolume->SetProperty,DATA0 = tmpdd

         endif else begin

             tmpdd = intarr((*pState).volumexlength,(*pState).volumeylength,(*pState).volumezlength)
                tmpdd = (*pState).originalvolumedata
                (*pState).rVolume->SetProperty,DATA0 = tmpdd

               (*pState).rVolume->SetProperty, $
                   CUTTING_PLANE=[xvalue, yvalue, zvalue, -(xvalue*xvalue + yvalue*yvalue + zvalue*zvalue)]
            endelse
            (*pState).rWindow->Draw, (*pState).rView
        end

        'hfsliceonzbutton': begin

         (*pState).hSlice_on_z_button_status = event.select

         (*pState).rVolume->SetProperty,DATA0 = (*pState).originalvolumedata

         (*pState).rVolume->SetProperty, CUTTING_PLANE=0

         widget_control, (*pState).hSlice_x_slider, get_value = xvalue
           widget_control, (*pState).hSlice_y_slider, get_value = yvalue
         widget_control, (*pState).hSlice_z_slider, get_value = zvalue


           if (*pState).hSlice_on_x_button_status or $
              (*pState).hSlice_on_y_button_status or $
              (*pState).hSlice_on_z_button_status then begin

          tmpdd = intarr((*pState).volumexlength,(*pState).volumeylength,(*pState).volumezlength)

               (*pState).rVolume->SetProperty, CUTTING_PLANE = 0

             if (*pState).hSlice_on_x_button_status then begin
              for j = 0, (*pState).volumeylength-1 do begin
                 for k = 0, (*pState).volumezlength-1 do begin
                   tmpdd[xvalue-1,j,k] = (*pState).originalvolumedata[xvalue-1,j,k]
                 endfor
              endfor
          endif

             if (*pState).hSlice_on_y_button_status then begin
              for i = 0, (*pState).volumexlength-1 do begin
                 for k = 0, (*pState).volumezlength-1 do begin
                   tmpdd[i,yvalue-1,k] = (*pState).originalvolumedata[i,yvalue-1,k]
                 endfor
              endfor
          endif

             if (*pState).hSlice_on_z_button_status then begin
              for i = 0, (*pState).volumexlength-1 do begin
                 for j = 0, (*pState).volumeylength-1 do begin
                   tmpdd[i,j,zvalue-1] = (*pState).originalvolumedata[i,j,zvalue-1]
                 endfor
              endfor
          endif

                (*pState).rVolume->SetProperty,DATA0 = tmpdd

         endif else begin

             tmpdd = intarr((*pState).volumexlength,(*pState).volumeylength,(*pState).volumezlength)
                tmpdd = (*pState).originalvolumedata
                (*pState).rVolume->SetProperty,DATA0 = tmpdd

               (*pState).rVolume->SetProperty, $
                   CUTTING_PLANE=[xvalue, yvalue, zvalue, -(xvalue*xvalue + yvalue*yvalue + zvalue*zvalue)]
            endelse
            (*pState).rWindow->Draw, (*pState).rView

        end

        'hfslicesave': begin

         widget_control, (*pState).hSlice_x_slider, get_value = xvalue
         widget_control, (*pState).hSlice_y_slider, get_value = yvalue
         widget_control, (*pState).hSlice_z_slider, get_value = zvalue

         xvalue = float(xvalue)
         yvalue = float(yvalue)
         zvalue = float(zvalue)
         myangleline = float(xvalue*xvalue + yvalue*yvalue + zvalue*zvalue)
         lvalue = myangleline/xvalue
         mvalue = myangleline/yvalue
         nvalue = myangleline/zvalue

         myxrotation = -acos(zvalue / sqrt(yvalue*yvalue+zvalue*zvalue))
         myyrotation = acos(sqrt(yvalue*yvalue+zvalue*zvalue) / sqrt(myangleline))
         myzrotation = !pi/2.0-acos(nvalue*nvalue / $
          (sqrt(mvalue*mvalue+nvalue*nvalue)*sqrt(lvalue*lvalue+nvalue*nvalue)))

         mymax = 3*((*pState).volumexlength>(*pState).volumexlength>(*pState).volumexlength)
         sliceimage = extract_slice((*pState).originalvolumedata, $
          mymax,mymax,xvalue,yvalue,zvalue, $
          myxrotation, myyrotation, myzrotation, out_val=0, /RADIANS)

         window, 0, xsize=mymax, ysize=mymax, $
          TITLE='Slice Show Window',RETAIN=2
         tvscl, sliceimage

         Slice = DIALOG_PICKFILE( FILE='Slice.tif', $
          FILTER='*.tif', /WRITE, TITLE='Saving Window ' )
         if   strlen(strtrim(slice)) ne 0 then begin
          WRITE_TIFF, slice, sliceimage
          result = dialog_message('OK! Slice is already saved !', /information, $
              title='Information Window')

         endif else begin
          result = dialog_message(['Sorry, Slice can not be saved !', '', $
              'File  name  can not be empty !'], $
              title='Warning Window')
         endelse
         WDELETE, 0

        end

    'DRAW': begin
        WIDGET_CONTROL, event.top, GET_UVALUE=pState, /NO_COPY
        Chapter10VolumeRendeBackground, (*pState).TransparencyStatus, (*pState).rView
        if (event.type eq 0) then $
           if (event.press eq 1) AND ((*pState).lmb_scale eq 1) then event.press = 2
;       Rotation updates.
        if (*pState).rModel->Update(event) then begin
              (*pState).rWindow->SetProperty, QUALITY=1
              (*pState).rWindow->Draw, (*pState).rView
        end
;       Mouse button press.
        if (event.type eq 0) then begin
            case event.press of
                2 : begin
;                     Middle mouse-button.  Scale the objects.
                      xy = ([event.x, event.y] - (*pState).center)
                      r= TOTAL(xy^2) ; distance from center of unit circle
                      (*pState).sc[1] = SQRT(r)
                      (*pState).sc[2] = 1.0
                    end
                4 : begin
;                     Right mouse-button
                      j = (*pState).rVolume->pickvoxel( $
                          (*pState).rWindow, (*pState).rView,[event.x, event.y])
                      k = -1
                      if (j[0] NE -1) then begin
                         (*pState).rVolume->GetProperty,DATA0=dd, /NO_COPY
                         k = dd[j[0],j[1],j[2]]
                         (*pState).rVolume->SetProperty,DATA0=dd, /NO_COPY

⌨️ 快捷键说明

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