def __init__(self, parent=None): self.reader = vtk.vtkDICOMImageReader() self.dataExtent = [] self.dataDimensions = [] self.dataRange = () # initialize GUI QtGui.QWidget.__init__(self, parent) self.ui = Ui_Form() self.ui.setupUi(self) self.ui.WindowCenterSlider.setRange(0, 1000) self.ui.WindowWidthSlider.setRange(0, 1000) # define viewers [self.viewerXY, self.viewerYZ, self.viewerXZ] = [vtk.vtkImageViewer2() for x in range(3)] # attach interactors to viewers self.viewerXY.SetupInteractor(self.ui.XYPlaneWidget) self.viewerYZ.SetupInteractor(self.ui.YZPlaneWidget) self.viewerXZ.SetupInteractor(self.ui.XZPlaneWidget) # set render windows for viewers self.viewerXY.SetRenderWindow(self.ui.XYPlaneWidget.GetRenderWindow()) self.viewerYZ.SetRenderWindow(self.ui.YZPlaneWidget.GetRenderWindow()) self.viewerXZ.SetRenderWindow(self.ui.XZPlaneWidget.GetRenderWindow()) # set slicing orientation for viewers self.viewerXY.SetSliceOrientationToXZ() self.viewerYZ.SetSliceOrientationToYZ() self.viewerXZ.SetSliceOrientationToXY() # rotate image act = self.viewerYZ.GetImageActor() act.SetOrientation(90, 0, 0) # setup volume rendering self.volRender = vtk.vtkRenderer() self.volRenWin = self.ui.VolumeWidget.GetRenderWindow() self.volRenWin.AddRenderer(self.volRender) self.rayCastFunction = vtk.vtkVolumeRayCastCompositeFunction() self.volumeMapper = vtk.vtkVolumeRayCastMapper() self.volumeMapper.SetVolumeRayCastFunction(self.rayCastFunction) volumeColor = vtk.vtkColorTransferFunction() volumeColor.AddRGBPoint(0, 0.0, 0.0, 0.0) volumeColor.AddRGBPoint(500, 1.0, 0.5, 0.3) volumeColor.AddRGBPoint(1000, 1.0, 0.5, 0.3) volumeColor.AddRGBPoint(1150, 1.0, 1.0, 0.9) self.volumeColor = volumeColor volumeScalarOpacity = vtk.vtkPiecewiseFunction() volumeScalarOpacity.AddPoint(0, 0.00) volumeScalarOpacity.AddPoint(50, 0.15) volumeScalarOpacity.AddPoint(100, 0.15) volumeScalarOpacity.AddPoint(115, 0.85) self.volumeScalarOpacity = volumeScalarOpacity volumeGradientOpacity = vtk.vtkPiecewiseFunction() volumeGradientOpacity.AddPoint(0, 0.0) volumeGradientOpacity.AddPoint(100, 0.5) volumeGradientOpacity.AddPoint(500, 1) self.volumeGradientOpacity = volumeGradientOpacity volumeProperty = vtk.vtkVolumeProperty() volumeProperty.SetColor(volumeColor) volumeProperty.SetScalarOpacity(volumeScalarOpacity) volumeProperty.SetGradientOpacity(volumeGradientOpacity) volumeProperty.SetInterpolationTypeToLinear() volumeProperty.ShadeOn() volumeProperty.SetAmbient(0.4) volumeProperty.SetDiffuse(0.6) volumeProperty.SetSpecular(0.2) self.volumeProperty = volumeProperty volume = vtk.vtkVolume() volume.SetMapper(self.volumeMapper) volume.SetProperty(self.volumeProperty) self.volume = volume self.volRender.AddViewProp(volume)
def __init__(self, parent = None): self.reader = vtk.vtkNrrdReader() self.dataExtent = [] self.dataDimensions = [] self.dataRange = () # initialize GUI QtWidgets.QWidget.__init__(self, parent) self.ui = Ui_Form() self.ui.setupUi(self) self.ui.WindowCenterSlider.setRange(0, 1000) self.ui.WindowWidthSlider.setRange(0, 1000) # define viewers [self.viewerXY, self.viewerYZ, self.viewerXZ] = [vtk.vtkImageViewer2() for x in range(3)] [self.viewerXY2, self.viewerYZ2, self.viewerXZ2] = [vtk.vtkImageViewer2() for x in range(3)] # attach interactors to viewers self.viewerXY.SetupInteractor(self.ui.XYPlaneWidget) self.viewerYZ.SetupInteractor(self.ui.YZPlaneWidget) self.viewerXZ.SetupInteractor(self.ui.XZPlaneWidget) self.colorTable = vtk.vtkLookupTable() self.colorTable.SetNumberOfColors(1) self.colorTable.SetTableValue(0, 0, 1, 0, 1) self.colorTable.Build() self.colorMap = vtk.vtkImageMapToColors() # set render windows for viewers self.viewerXY.SetRenderWindow(self.ui.XYPlaneWidget.GetRenderWindow()) self.viewerYZ.SetRenderWindow(self.ui.YZPlaneWidget.GetRenderWindow()) self.viewerXZ.SetRenderWindow(self.ui.XZPlaneWidget.GetRenderWindow()) # set slicing orientation for viewers self.viewerXY.SetSliceOrientationToXZ() self.viewerYZ.SetSliceOrientationToYZ() self.viewerXZ.SetSliceOrientationToXY() # setup volume rendering self.volRender = vtk.vtkRenderer() self.volRenWin = self.ui.VolumeWidget.GetRenderWindow() self.volRenWin.AddRenderer(self.volRender) #self.rayCastFunction = vtk.vtkVolumeRayCastCompositeFunction() #self.volumeMapper = vtk.vtkFixedPointVolumeRayCastMapper() #self.volumeMapper.SetBlendModeToComposite() #self.volumeMapper.SetVolumeRayCastFunction(self.rayCastFunction) self.volumeMapper = vtk.vtkGPUVolumeRayCastMapper() volumeColor = vtk.vtkColorTransferFunction() volumeColor.AddRGBPoint(0, 0.0, 0.0, 0.0) volumeColor.AddRGBPoint(500, 1.0, 0.5, 0.3) volumeColor.AddRGBPoint(1000, 1.0, 0.5, 0.3) volumeColor.AddRGBPoint(1150, 1.0, 1.0, 0.9) self.volumeColor = volumeColor volumeScalarOpacity = vtk.vtkPiecewiseFunction() volumeScalarOpacity.AddPoint(0, 0.00) volumeScalarOpacity.AddPoint(50, 0.15) volumeScalarOpacity.AddPoint(100, 0.15) volumeScalarOpacity.AddPoint(115, 0.85) self.volumeScalarOpacity = volumeScalarOpacity volumeGradientOpacity = vtk.vtkPiecewiseFunction() volumeGradientOpacity.AddPoint(0, 0.0) volumeGradientOpacity.AddPoint(100, 0.5) volumeGradientOpacity.AddPoint(500, 1) self.volumeGradientOpacity = volumeGradientOpacity volumeProperty = vtk.vtkVolumeProperty() volumeProperty.SetColor(volumeColor) volumeProperty.SetScalarOpacity(volumeScalarOpacity) volumeProperty.SetGradientOpacity(volumeGradientOpacity) volumeProperty.SetInterpolationTypeToLinear() volumeProperty.ShadeOn() volumeProperty.SetAmbient(0.4) volumeProperty.SetDiffuse(0.6) volumeProperty.SetSpecular(0.2) self.volumeProperty = volumeProperty volume = vtk.vtkVolume() volume.SetMapper(self.volumeMapper) volume.SetProperty(self.volumeProperty) self.volume = volume self.volRender.AddViewProp(volume) width_bar = self.ui.WindowWidthSlider center_bar = self.ui.WindowCenterSlider width_bar.valueChanged.connect(self.changeValue) center_bar.valueChanged.connect(self.changeValue)