📄 chapter10volumerenderexercise.pro
字号:
; Chapter10VolumeRenderExercise.pro
;----------------------------------------------------------------------------
PRO Chapter10VolumeRendeBackground, MyStatus, MyView
IF MyStatus THEN BEGIN
MyView->Setproperty, color = [255, 255, 255]
ENDIF ELSE BEGIN
MyView->Setproperty, color = [0, 0, 0]
ENDELSE
END
;----------------------------------------------------------------------------
pro Chapter10VolumeRenderExercise_Event, event
if (TAG_NAMES(event, /STRUCTURE_NAME) eq 'WIDGET_KILL_REQUEST') then begin
WIDGET_CONTROL, event.top, /DESTROY
RETURN
endif
WIDGET_CONTROL, event.id, GET_UVALUE=uval
WIDGET_CONTROL, event.top, GET_UVALUE=pState
case uval of
'LMBMODE' : begin ; Left Mouse-Button Mode.
WIDGET_CONTROL, event.top, GET_UVALUE=pState, /NO_COPY
case event.index of
0: begin
(*pState).lmb_scale = 0
(*pState).rModel->SetProperty, CONSTRAIN=0
end
1: begin
(*pState).lmb_scale = 0
(*pState).rModel->SetProperty, AXIS=0, /CONSTRAIN
end
2: begin
(*pState).lmb_scale = 0
(*pState).rModel->SetProperty, AXIS=1, /CONSTRAIN
end
3: begin
(*pState).lmb_scale = 0
(*pState).rModel->SetProperty, AXIS=2, /CONSTRAIN
end
4: begin
(*pState).lmb_scale = 0
(*pState).rModel->SetProperty, AXIS=0, CONSTRAIN=2
end
5: begin
(*pState).lmb_scale = 0
(*pState).rModel->SetProperty, AXIS=1, CONSTRAIN=2
end
6: begin
(*pState).lmb_scale = 0
(*pState).rModel->SetProperty, AXIS=2, CONSTRAIN=2
end
7: begin
(*pState).lmb_scale = 1
end
else:
endcase
Chapter10VolumeRendeBackground, (*pState).TransparencyStatus, (*pState).rView
(*pState).rWindow->Draw, (*pState).rView
WIDGET_CONTROL, event.top, SET_UVALUE=pState, /NO_COPY
end
'CUTTING_PLANE' : begin
WIDGET_CONTROL, event.top, GET_UVALUE=pState, /NO_COPY
Chapter10VolumeRendeBackground, (*pState).TransparencyStatus, (*pState).rView
(*pState).rVolume->GetProperty, YRANGE=yrange
(*pState).rVolume->SetProperty, $
CUTTING_PLANE=[0,1,0, -(event.value / 100.) * yrange[1]]
(*pState).rWindow->Draw, (*pState).rView
WIDGET_CONTROL, event.top, SET_UVALUE=pState, /NO_COPY
end
'LIGHTING': begin
WIDGET_CONTROL, event.top, GET_UVALUE=pState, /NO_COPY
Chapter10VolumeRendeBackground, (*pState).TransparencyStatus, (*pState).rView
(*pState).rVolume->SetProperty, LIGHTING_MODEL=event.select
(*pState).rWindow->Draw, (*pState).rView
WIDGET_CONTROL, event.top, SET_UVALUE=pState, /NO_COPY
end
'TransparencySlider': begin
WIDGET_CONTROL, event.top, GET_UVALUE=pState, /NO_COPY
Chapter10VolumeRendeBackground, (*pState).TransparencyStatus, (*pState).rView
widget_control, (*pState).TransparencySlider, get_value = myslider
opac = BYTARR(256)
opac[0:255] = BINDGEN(256)/myslider
(*pState).rVolume -> SetProperty, OPACITY_TABLE0=opac
(*pState).rWindow->Draw, (*pState).rView
WIDGET_CONTROL, event.top, SET_UVALUE=pState, /NO_COPY
end
'Transparency0n': begin
WIDGET_CONTROL, event.top, GET_UVALUE=pState, /NO_COPY
(*pState).TransparencyStatus = event.select
Chapter10VolumeRendeBackground, (*pState).TransparencyStatus, (*pState).rView
if (*pState).TransparencyStatus then begin
widget_control, (*pState).TransparencySlider, SENSITIVE = 1
widget_control, (*pState).TransparencySlider, set_value = 16
opac = BYTARR(256)
opac[0:255] = BINDGEN(256)/16
(*pState).rVolume -> SetProperty, OPACITY_TABLE0 = opac
endif else begin
widget_control, (*pState).TransparencySlider, SENSITIVE = 0
widget_control, (*pState).TransparencySlider, set_value = 0
opac = BYTARR(256)
for i=0,255 do opac[i] = i
(*pState).rVolume -> SetProperty, OPACITY_TABLE0 = opac
endelse
(*pState).rWindow->Draw, (*pState).rView
WIDGET_CONTROL, event.top, SET_UVALUE=pState, /NO_COPY
end ; of Transparency
;
; Slice operation.
;
'hfslicexslider': begin
(*pState).rVolume->SetProperty, DATA0 = (*pState).originalvolumedata
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
'hfsliceyslider': begin
(*pState).rVolume->SetProperty, DATA0 = (*pState).originalvolumedata
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
'hfslicezslider': begin
(*pState).rVolume->SetProperty, DATA0 = (*pState).originalvolumedata
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
'hfsliceon': begin
(*pState).hSlice_on_status = event.select
if (*pState).hSlice_on_status then begin
widget_control, (*pState).hSlice_x_slider, SENSITIVE = 1
widget_control, (*pState).hSlice_y_slider, SENSITIVE = 1
widget_control, (*pState).hSlice_z_slider, SENSITIVE = 1
widget_control, (*pState).hSlice_on_x_button, SENSITIVE = 1
widget_control, (*pState).hSlice_on_y_button, SENSITIVE = 1
widget_control, (*pState).hSlice_on_z_button, SENSITIVE = 1
widget_control, (*pState).hSlice_save, SENSITIVE = 1
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
(*pState).rVolume->SetProperty, $
CUTTING_PLANE=[xvalue, yvalue, zvalue, -(xvalue*xvalue + yvalue*yvalue + zvalue*zvalue)]
(*pState).rWindow->Draw, (*pState).rView
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -