def main(): ren = vtkRenderer() for item in glob.iglob(pattern, recursive=True): reader = vtk.vtkPolyDataReader() reader.SetFileName(item) reader.Update() polydata = reader.GetOutput() mapper = vtkPolyDataMapper() mapper.SetInputData(polydata) actor = vtkActor() actor.SetMapper(mapper) ren.AddActor(actor) renWin = vtkRenderWindow() renWin.AddRenderer(ren) renWin.SetWindowName('DDD') iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) renWin.Render() iren.Start()
def main(): colors = vtkNamedColors() renWin = vtkRenderWindow() renWin.AddRenderer(renderer) iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) earthCenter = [100.0, 0.0, 0.0] earth = CreatePlanet(4.0, earthCenter) marsCenter = [80.0, 0.0, 0.0] mars = CreatePlanet(3.0, marsCenter) sunCenter = [0.0, 0.0, 0.0] sun = CreatePlanet(15.0, sunCenter) earthActor = CreateVisualization(earth) earthActor.GetProperty().SetColor(colors.GetColor3d('Blue')) marsActor = CreateVisualization(mars) marsActor.GetProperty().SetColor(colors.GetColor3d('Red')) sunActor = CreateVisualization(sun) sunActor.GetProperty().SetColor(colors.GetColor3d('Yellow')) renderer.SetBackground(colors.GetColor3d('Black')) renWin.SetSize(640, 480) renWin.SetWindowName('Aarya\'s Solar System') renWin.Render() # Interact with the data. iren.Start()
def main(): colors = vtkNamedColors() renderer = vtkRenderer() renWin = vtkRenderWindow() renWin.AddRenderer(renderer) iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) sphere = vtkSphereSource() sphere.SetPhiResolution(100) sphere.SetThetaResolution(16) sphere.SetCenter(2, 0, 0) sphere.SetRadius(69) sphere.Update() sphereGeom = sphere.GetOutput() cone = vtkConeSource() cone.SetRadius(40) cone.SetHeight(100) cone.SetResolution(50) cone.Update() coneGeom = cone.GetOutput() print('Number of points in sphere = ', sphereGeom.GetNumberOfPoints()) print('Number of triangles in sphere = ', sphereGeom.GetNumberOfCells()) print('Number of points in cone = ', coneGeom.GetNumberOfPoints()) print('Number of triangles in cone = ', coneGeom.GetNumberOfCells()) mapperS = vtkDataSetMapper() mapperS.SetInputData(sphereGeom) actorS = vtkActor() actorS.SetMapper(mapperS) actorS.GetProperty().SetColor(1.0, 0.0, 0.0) actorS.GetProperty().SetOpacity(0.5) renderer.AddActor(actorS) mapperC = vtkDataSetMapper() mapperC.SetInputData(coneGeom) actorC = vtkActor() actorC.SetMapper(mapperC) actorC.GetProperty().SetOpacity(0.5) renderer.AddActor(actorC) renderer.SetBackground(colors.GetColor3d('SlateGray')) renWin.SetSize(640, 480) renWin.SetWindowName('Aarya\'s First VTK Program') renWin.Render() # Interact with the data. iren.Start()
def render_actors(actor_lst, bg_color='White'): renderer = vtkRenderer() renWin = vtkRenderWindow() renWin.AddRenderer(renderer) iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) style = vtkInteractorStyleTrackballCamera() iren.SetInteractorStyle(style) for actor in actor_lst: renderer.AddActor(actor) colors = vtkNamedColors() renderer.SetBackground(colors.GetColor3d(bg_color)) renderer.ResetCamera() # renWin.SetSize(640, 480) # Interact with the data. renWin.Render() iren.Start()
def main(): VTK_DATA_ROOT = vtkGetDataRoot() folder = "/Users/nandana/Downloads/image_ex" #read dicom files from specified directory reader = vtkDICOMImageReader() reader.SetDirectoryName(folder) reader.SetFilePrefix(VTK_DATA_ROOT + "/Data/headsq/quarter") reader.SetDataExtent(0, 63, 0, 63, 1, 93) reader.SetDataSpacing(3.2, 3.2, 1.5) reader.SetDataOrigin(-150.0, 150.0, 3.0) reader.SetDataScalarTypeToUnsignedShort() reader.UpdateWholeExtent() # Calculate the center of the volume reader.Update() (xMin, xMax, yMin, yMax, zMin, zMax) = reader.GetExecutive().GetWholeExtent( reader.GetOutputInformation(0)) (xSpacing, ySpacing, zSpacing) = reader.GetOutput().GetSpacing() (x0, y0, z0) = reader.GetOutput().GetOrigin() center = [ x0 + xSpacing * 0.5 * (xMin + xMax), y0 + ySpacing * 0.5 * (yMin + yMax), z0 + zSpacing * 0.5 * (zMin + zMax) ] yd = ((yMax - yMin) + 1) * ySpacing """ # Matrices for axial, coronal, sagittal, oblique view orientations axial = vtkMatrix4x4() axial.DeepCopy((1, 0, 0, center[0], 0, 1, 0, center[1], 0, 0, 1, center[2], 0, 0, 0, 1)) coronal = vtkMatrix4x4() coronal.DeepCopy((1, 0, 0, center[0], 0, 0, 1, center[1], 0,-1, 0, center[2], 0, 0, 0, 1)) sagittal = vtkMatrix4x4 sagittal.DeepCopy((0, 0,-1, center[0], 1, 0, 0, center[1], 0,-1, 0, center[2], 0, 0, 0, 1)) oblique = vtkMatrix4x4() oblique.DeepCopy((1, 0, 0, center[0], 0, 0.866025, -0.5, center[1], 0, 0.5, 0.866025, center[2], 0, 0, 0, 1)) reslice = vtkImageReslice() outputPort = reader.GetOutputPort() #reslice.SetInputConnection(reader.GetOutputPort()) reslice.SetInputConnection(0, reader.GetOutputPort()) print(reader.GetOutput().GetExtent()) reslice.SetOutputExtent(reader.GetOutput().GetExtent()) reslice.SetOutputDimensionality(2) reslice.SetResliceAxes(coronal) reslice.SetInterpolationModeToLinear() """ # Visualize imageViewer = vtkResliceImageViewer() imageViewer.SetSliceOrientationToXY() #imageViewer.SetSlice(9) imageViewer.SetResliceModeToAxisAligned() imageViewer.SliceScrollOnMouseWheelOff() imageViewer.SetInputData(reader.GetOutput()) #imageViewer.Render() camera = imageViewer.GetRenderer().GetActiveCamera() print(camera.GetOrientationWXYZ()) # slice status message sliceTextProp = vtkTextProperty() sliceTextProp.SetFontFamilyToCourier() sliceTextProp.SetFontSize(20) sliceTextProp.SetVerticalJustificationToBottom() sliceTextProp.SetJustificationToLeft() sliceTextMapper = vtkTextMapper() msg = "Slice {} out of {}".format(imageViewer.GetSlice() + 1, \ imageViewer.GetSliceMax() + 1) sliceTextMapper.SetInput(msg) sliceTextMapper.SetTextProperty(sliceTextProp) sliceTextActor = vtkActor2D() sliceTextActor.SetMapper(sliceTextMapper) sliceTextActor.SetPosition(100, 10) # coordinate display coordTextProp = vtkTextProperty() coordTextProp.SetFontFamilyToCourier() coordTextProp.SetFontSize(20) coordTextProp.SetVerticalJustificationToBottom() coordTextProp.SetJustificationToLeft() coordTextMapper = vtkTextMapper() coordTextMapper.SetInput("Pixel Coordinates: (--, --)") coordTextMapper.SetTextProperty(coordTextProp) coordTextActor = vtkActor2D() coordTextActor.SetMapper(coordTextMapper) coordTextActor.SetPosition(500, 10) worldCoordTextProp = vtkTextProperty() worldCoordTextProp.SetFontFamilyToCourier() worldCoordTextProp.SetFontSize(20) worldCoordTextProp.SetVerticalJustificationToBottom() worldCoordTextProp.SetJustificationToLeft() worldCoordTextMapper = vtkTextMapper() worldCoordTextMapper.SetInput("World Coordinates: (--, --)") worldCoordTextMapper.SetTextProperty(worldCoordTextProp) worldCoordTextActor = vtkActor2D() worldCoordTextActor.SetMapper(worldCoordTextMapper) worldCoordTextActor.SetPosition(500, 30) # usage hint message usageTextProp = vtkTextProperty() usageTextProp.SetFontFamilyToCourier() usageTextProp.SetFontSize(14) usageTextProp.SetVerticalJustificationToTop() usageTextProp.SetJustificationToLeft() usageTextMapper = vtkTextMapper() usageTextMapper.SetInput( "- Slice with mouse wheel\n- Zoom with pressed right\n mouse button while dragging\n- Press i to toggle cursor line on/off" ) usageTextMapper.SetTextProperty(usageTextProp) usageTextActor = vtkActor2D() usageTextActor.SetMapper(usageTextMapper) usageTextActor.GetPositionCoordinate( ).SetCoordinateSystemToNormalizedDisplay() usageTextActor.GetPositionCoordinate().SetValue(0.05, 0.95) actor = imageViewer.GetImageActor() #image = vtkImageActor() #actor.GetMapper().SetInputData(reader.GetOutput()) image = imageViewer.GetInput() roiData = vtkImageData() roiImage = vtkImageActor() roiData.DeepCopy(image) extent = roiData.GetExtent() for i in range(extent[0], extent[1]): for j in range(extent[2], extent[3]): for k in range(extent[4], extent[5]): if image.GetScalarComponentAsDouble(i, j, k, 0) > -100: roiData.SetScalarComponentFromDouble(i, j, k, 0, 1) #roiData.SetScalarComponentFromDouble(0, i, j, k, 1) else: #just in case roiData.SetScalarComponentFromDouble(i, j, k, 0, 0.0) #roiData.SetScalarComponentFromDouble(0, i, j, k, 0.0) """ for i in range(extent[0], extent[1]): for j in range(extent[2], extent[3]): #for k in range(extent[4], extent[5]): #k = 0 roiData.SetScalarComponentFromDouble(i, j, k, 0, 0.0) #roiData.SetScalarComponentFromDouble(0, i, j, k, 0.0) """ print(extent) table = vtkLookupTable() table.SetNumberOfTableValues(2) table.SetRange(0.0, 1.0) table.SetTableValue(0, 0.0, 0.0, 0.0, 0.0) table.SetTableValue(1, 0.0, 1.0, 0.0, 1.0) table.Build() mapToColor = vtkImageMapToColors() mapToColor.SetLookupTable(table) mapToColor.PassAlphaToOutputOn() mapToColor.SetInputData(roiData) #actor.GetMapper().SetInputConnection(mapToColor.GetOutputPort()) roiImage.GetMapper().SetInputConnection(mapToColor.GetOutputPort()) imageViewer.SetInputData(image) interactorStyle = vtkInteractorStyleImage() interactor = vtkRenderWindowInteractor() imageViewer.SetupInteractor(interactor) interactor.SetInteractorStyle(interactorStyle) # add slice status message and usage hint message to the renderer imageViewer.GetRenderer().AddActor2D(coordTextActor) imageViewer.GetRenderer().AddActor2D(sliceTextActor) imageViewer.GetRenderer().AddActor2D(usageTextActor) imageViewer.GetRenderer().AddActor2D(worldCoordTextActor) imageViewer.GetRenderer().AddActor(roiImage) #imageViewer.GetRenderer().AddViewProp(stack) # initialize rendering and interaction #imageViewer.SetSlice(35) imageViewer.GetRenderWindow().SetSize(1000, 1000) imageViewer.GetRenderer().SetBackground(0.2, 0.3, 0.4) imageViewer.GetWindowLevel().SetWindow(1000) imageViewer.GetWindowLevel().SetLevel(-1000) imageViewer.Render() yd = (yMax - yMin + 1) * ySpacing xd = (xMax - xMin + 1) * xSpacing d = camera.GetDistance() camera.SetParallelScale(0.5 * xd) camera.SetFocalPoint(center[0], center[1], 0) camera.SetPosition(center[0], center[1], +d) actions = {} actions["Dolly"] = -1 actions["Cursor"] = 0 def middlePressCallback(obj, event): # if middle + ctrl pressed, zoom in/out # otherwise slice through image (handled by mouseMoveCallback) if (interactor.GetControlKey()): actions["Dolly"] = 0 interactorStyle.OnRightButtonDown() else: actions["Dolly"] = 1 def middleReleaseCallback(obj, event): if (actions["Dolly"] == 0): interactorStyle.OnRightButtonUp() elif (actions["Dolly"] == 1): actions["Dolly"] = 0 def mouseMoveCallback(obj, event): # if the middle button is pressed + mouse is moved, slice through image # otherwise, update world/pixel coords as mouse is moved if (actions["Dolly"] == 1): (lastX, lastY) = interactor.GetLastEventPosition() (curX, curY) = interactor.GetEventPosition() deltaY = curY - lastY if (deltaY > 0): imageViewer.IncrementSlice(1) elif (deltaY < 0): imageViewer.IncrementSlice(-1) msg = "Slice {} out of {}".format(imageViewer.GetSlice() + 1, \ imageViewer.GetSliceMax() + 1) sliceTextMapper.SetInput(msg) imageViewer.Render() else: (mouseX, mouseY) = interactor.GetEventPosition() bounds = actor.GetMapper().GetInput().GetBounds() testCoord = vtkCoordinate() testCoord.SetCoordinateSystemToDisplay() testCoord.SetValue(mouseX, mouseY, 0) (posX, posY, posZ) = testCoord.GetComputedWorldValue(imageViewer.GetRenderer()) inBounds = True if posX < bounds[0] or posX > bounds[1] or posY < bounds[ 2] or posY > bounds[3]: inBounds = False if inBounds: wMousePos = "World Coordinates: (" + "{:.2f}".format( posX) + ", " + "{:.2f}".format( posY) + ", " + "{:.2f}".format(posZ) + ")" pMousePos = "Pixel Coordinates: (" + "{:.2f}".format( mouseX) + ", " + "{:.2f}".format(mouseY) + ")" worldCoordTextMapper.SetInput(wMousePos) coordTextMapper.SetInput(pMousePos) imageViewer.Render() interactorStyle.OnMouseMove() def scrollForwardCallback(obj, event): # slice through image on scroll, update slice text imageViewer.IncrementSlice(1) msg = "Slice {} out of {}".format(imageViewer.GetSlice() + 1, \ imageViewer.GetSliceMax() + 1) sliceTextMapper.SetInput(msg) imageViewer.Render() def scrollBackwardCallback(obj, event): imageViewer.IncrementSlice(-1) msg = "Slice {} out of {}".format(imageViewer.GetSlice() + 1, \ imageViewer.GetSliceMax() + 1) sliceTextMapper.SetInput(msg) imageViewer.Render() def windowModifiedCallback(obj, event): # track render window width so coordinate text aligns itself # to the right side of the screen width = imageViewer.GetRenderWindow().GetSize()[0] coordTextActor.SetPosition(width - 550, 10) worldCoordTextActor.SetPosition(width - 550, 30) imageViewer.Render() def keyPressCallback(obj, event): # toggle cursor on/off when t key is pressed key = interactor.GetKeySym() if (key == "t"): if (actions["Cursor"] == 0): imageViewer.GetRenderWindow().HideCursor() actions["Cursor"] = 1 elif (actions["Cursor"] == 1): imageViewer.GetRenderWindow().ShowCursor() actions["Cursor"] = 0 interactorStyle.AddObserver("MiddleButtonPressEvent", middlePressCallback) interactorStyle.AddObserver("MiddleButtonReleaseEvent", middleReleaseCallback) interactorStyle.AddObserver("MouseMoveEvent", mouseMoveCallback) interactorStyle.AddObserver("MouseWheelForwardEvent", scrollForwardCallback) interactorStyle.AddObserver("MouseWheelBackwardEvent", scrollBackwardCallback) interactorStyle.AddObserver("KeyPressEvent", keyPressCallback) imageViewer.GetRenderWindow().AddObserver("ModifiedEvent", windowModifiedCallback) interactor.Start()
# map them mapper = vtkCompositePolyDataMapper() mapper.SetInputConnection(geom.GetOutputPort()) mapper.SetScalarModeToUsePointFieldData() mapper.SelectColorArray('point_poly') mapper.SetScalarRange(1.0, 6.0) mapper.InterpolateScalarsBeforeMappingOn() mapper.SetScalarVisibility(1) actor = vtkActor() actor.SetMapper(mapper) renderer = vtkRenderer() renWin = vtkRenderWindow() iren = vtkRenderWindowInteractor() renderer.AddActor(actor) renderer.SetBackground(0.0, 0.0, 0.0) renWin.AddRenderer(renderer) renWin.SetSize(300, 300) iren.SetRenderWindow(renWin) # ask for some specific data points info = geom.GetOutputInformation(0) geom.UpdateInformation() time = 0.5 info.Set(prototype.UPDATE_TIME_STEP(), time)
renderer.AddActor(actor) renderer.AddActor2D(coordTextActor) renderer.AddActor2D(usageTextActor) renderer.AddActor2D(worldCoordTextActor) renderer.SetBackground(0.2, 0.3, 0.4) window = vtkRenderWindow() window.AddRenderer(renderer) window.SetSize(1000, 1000) # Set up the interaction interactorStyle = vtkInteractorStyleImage() interactorStyle.SetInteractionModeToImageSlicing() interactor = vtkRenderWindowInteractor() interactor.SetInteractorStyle(interactorStyle) window.SetInteractor(interactor) windowLevel.SetWindow(1000) windowLevel.SetLevel(200) windowLevel.Update() window.Render() # window size should be a "constant" def load(img, roi, alpha, window_size, window_val, level_val, n_center): renderer.RemoveAllViewProps() renderer.AddActor(img) renderer.AddActor(roi)
def main(): colors = vtkNamedColors() operation = "intersection" reader = vtkUnstructuredGridReader() reader.SetFileName(ATRIA_VTK_FILE) geo_filter = vtkGeometryFilter() geo_filter.SetInputConnection(reader.GetOutputPort()) geo_filter.Update() poly1 = geo_filter.GetOutput() tri1 = vtkTriangleFilter() tri1.SetInputData(poly1) clean1 = vtkCleanPolyData() clean1.SetInputConnection(tri1.GetOutputPort()) clean1.Update() input1 = clean1.GetOutput() sphereSource1 = vtkSphereSource() sphereSource1.SetCenter(20.43808060942321, 18.333007878470767, 34.5753857481471) sphereSource1.SetRadius(0.5) # sphereSource1.SetPhiResolution(21) # sphereSource1.SetThetaResolution(21) sphereSource1.Update() input2 = sphereSource1.GetOutput() input1Mapper = vtkPolyDataMapper() input1Mapper.SetInputData(input1) input1Mapper.ScalarVisibilityOff() input1Actor = vtkActor() input1Actor.SetMapper(input1Mapper) input1Actor.GetProperty().SetDiffuseColor(colors.GetColor3d("Tomato")) input1Actor.GetProperty().SetSpecular(0.6) input1Actor.GetProperty().SetSpecularPower(20) # input1Actor.SetPosition(input1.GetBounds()[1] - input1.GetBounds()[0], 0, 0) input2Mapper = vtkPolyDataMapper() input2Mapper.SetInputData(input2) input2Mapper.ScalarVisibilityOff() input2Actor = vtkActor() input2Actor.SetMapper(input2Mapper) input2Actor.GetProperty().SetDiffuseColor(colors.GetColor3d("Mint")) input2Actor.GetProperty().SetSpecular(0.6) input2Actor.GetProperty().SetSpecularPower(20) # input2Actor.SetPosition(-(input1.GetBounds()[1] - input1.GetBounds()[0]), 0, 0) booleanOperation = vtkBooleanOperationPolyDataFilter() if operation.lower() == "union": booleanOperation.SetOperationToUnion() elif operation.lower() == "intersection": booleanOperation.SetOperationToIntersection() elif operation.lower() == "difference": booleanOperation.SetOperationToDifference() else: print("Unknown operation:", operation) return booleanOperation.SetInputData(0, input1) booleanOperation.SetInputData(1, input2) booleanOperationMapper = vtkPolyDataMapper() booleanOperationMapper.SetInputConnection(booleanOperation.GetOutputPort()) booleanOperationMapper.ScalarVisibilityOff() booleanOperationActor = vtkActor() booleanOperationActor.SetMapper(booleanOperationMapper) booleanOperationActor.GetProperty().SetDiffuseColor( colors.GetColor3d("Banana")) booleanOperationActor.GetProperty().SetSpecular(0.6) booleanOperationActor.GetProperty().SetSpecularPower(20) renderer = vtkRenderer() renderer.AddViewProp(input1Actor) renderer.AddViewProp(input2Actor) renderer.AddViewProp(booleanOperationActor) renderer.SetBackground(colors.GetColor3d("Silver")) renderWindow = vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindow.SetSize(640, 480) renderWindow.SetWindowName("BooleanOperationPolyDataFilter") viewUp = [0.0, 0.0, 1.0] position = [0.0, -1.0, 0.0] PositionCamera(renderer, viewUp, position) renderer.GetActiveCamera().Dolly(1.4) renderer.ResetCameraClippingRange() renWinInteractor = vtkRenderWindowInteractor() renWinInteractor.SetRenderWindow(renderWindow) renderWindow.Render() renWinInteractor.Start()
def __init__(self): VTK_DATA_ROOT = vtkGetDataRoot() self.reader = vtkDICOMImageReader() self.folder = "/Users/nandana/Downloads/image_ex" self.reader.SetDirectoryName(self.folder) self.reader.SetFilePrefix(VTK_DATA_ROOT + "/Data/headsq/quarter") self.reader.SetDataExtent(0, 63, 0, 63, 1, 93) self.reader.SetDataSpacing(3.2, 3.2, 1.5) self.reader.SetDataOrigin(0.0, 0.0, 0.0) self.reader.SetDataScalarTypeToUnsignedShort() self.reader.UpdateWholeExtent() self.reader.Update() self.center = self.calculate_center() self.axial = vtkMatrix4x4() self.axial.DeepCopy((1, 0, 0, self.center[0], 0, 1, 0, self.center[1], 0, 0, 1, self.center[2], 0, 0, 0, 1)) self.coronal = vtkMatrix4x4() self.coronal.DeepCopy( (1, 0, 0, self.center[0], 0, 0, 1, self.center[1], 0, -1, 0, self.center[2], 0, 0, 0, 1)) self.sagittal = vtkMatrix4x4() self.sagittal.DeepCopy( (0, 0, -1, self.center[0], 1, 0, 0, self.center[1], 0, -1, 0, self.center[2], 0, 0, 0, 1)) self.oblique = vtkMatrix4x4() self.oblique.DeepCopy( (1, 0, 0, self.center[0], 0, 0.866025, -0.5, self.center[1], 0, 0.5, 0.866025, self.center[2], 0, 0, 0, 1)) self.img_reslice = vtkImageReslice() self.roi_reslice = vtkImageReslice() self.img_reslice.SetInputConnection(0, self.reader.GetOutputPort()) self.img_reslice.SetOutputDimensionality(2) self.img_reslice.SetInterpolationModeToLinear() self.roi_reslice.SetInputConnection(0, self.reader.GetOutputPort()) self.roi_reslice.SetOutputDimensionality(2) self.roi_reslice.SetInterpolationModeToLinear() self.set_orientation(self.axial) self.img_table = vtkLookupTable() self.roi_table = vtkLookupTable() self.window_level = vtkImageMapToWindowLevelColors() self.img_color = vtkImageMapToColors() self.roi_color = vtkImageMapToColors() self.img = self.map_img() self.roi = self.map_roi() self.px_coord_text_prop = vtkTextProperty() self.px_coord_text_mapper = vtkTextMapper() self.px_coord_text_actor = vtkActor2D() self.world_coord_text_prop = vtkTextProperty() self.world_coord_text_mapper = vtkTextMapper() self.world_coord_text_actor = vtkActor2D() self.usage_text_prop = vtkTextProperty() self.usage_text_mapper = vtkTextMapper() self.usage_text_actor = vtkActor2D() self.renderer = vtkRenderer() self.add_text() self.renderer.AddActor(self.img) self.renderer.AddActor(self.roi) self.renderer.SetBackground(0.2, 0.3, 0.4) self.window = vtkRenderWindow() self.window.AddRenderer(self.renderer) self.window.SetSize(1000, 1000) self.interactor_style = vtkInteractorStyleImage() self.interactor_style.SetInteractionModeToImageSlicing() self.interactor = vtkRenderWindowInteractor() self.interactor.SetInteractorStyle(self.interactor_style) self.window.SetInteractor(self.interactor) self.window_level.SetWindow(1000) self.window_level.SetLevel(200) self.window_level.Update() self.window.Render() self.interactor_style.AddObserver("MouseWheelForwardEvent", self.scroll_forward_callback) self.interactor_style.AddObserver("MouseWheelBackwardEvent", self.scroll_backward_callback) self.interactor_style.AddObserver("MouseMoveEvent", self.mouse_move_callback) self.interactor_style.AddObserver("KeyPressEvent", self.key_press_callback) self.interactor_style.AddObserver("LeftButtonPressEvent", self.left_press_callback) self.window.AddObserver("ModifiedEvent", self.window_mod_callback) self.actions = { "Slicing": 0, "Cursor": 0, "CurrentPos": -1, "LastPos": -1, "DoubleClick": 0 }