def __init__(self, render): self.render = render # the vtk renderer object # # then binds rendering window to a tk widget self.root = tk.Tk() self.root.title("Multiple Renderer") self.vtkw = vtkTkRenderWidget(self.root, width=600, height=600, rw=self.render.ren_win) self.vtkw.BindTkRenderWidget() self.commands = tk.Frame(self.root) self.buttons = tk.Frame(self.root) self.buttons.pack(fill="both", expand=1, side="top") self.commands.pack(fill="both", expand=1, side="bottom") self.quitbutton = tk.Button(self.buttons, text="Exit", activebackground="white", command=self.bye) self.savebutton = tk.Button(self.buttons, text="Save", activebackground="white", command=self.savepng) self.wirebutton = wirebutton(frame=self.buttons, text="Wireframe", ren_win=self.render.ren_win, obj_actor=self.render.obj.objActor) self.opacity = tk.Scale(self.commands, from_=0.0, to=1.0, res=0.01, orient="horizontal", label="Opacity", command=self.set_opacity) self.seuil = tk.Scale(self.commands, from_=0.0, to=255.0, res=1, orient="horizontal", label="Seuil") self.update = tk.Button(self.commands, text="Apply", command=self.set_seuil) self.quitbutton.pack(side="right") self.savebutton.pack(side="left") self.vtkw.pack(side="top", fill="both", expand="yes") self.opacity.pack(side="top", anchor="nw", fill="both") self.seuil.pack(side="top", anchor="nw", fill="both") self.update.pack(side="right", anchor="nw")
def __init__(self, render, root): self.render = render # the vtk renderer object # # then binds rendering window to a tk widget self.top = tk.Toplevel(root) self.top.title("Multiple Renderer") self.vtkw = vtkTkRenderWidget(self.top, width=600, height=600, rw=self.render.ren_win) self.vtkw.BindTkRenderWidget() self.top.protocol('WM_DELETE_WINDOW', self.on_exitbutton_command) self.commands = tk.Frame(self.top) self.buttons = tk.Frame(self.top) self.buttons.pack(fill="both", expand=1, side="top") self.commands.pack(fill="both", expand=1, side="bottom") self.exitbutton = tk.Button(self.buttons, text="Exit", activebackground="white", command=self.on_exitbutton_command) self.savebutton = tk.Button(self.buttons, text="Save", activebackground="white", command=self.savepng) self.wirebutton1 = wirebutton(frame=self.buttons, text="Wireframe1", ren_win=self.render.ren_win, obj_actor=self.render.obj1.objActor) if render.mesh2 != 0: self.wirebutton2 = wirebutton(frame=self.buttons, text="Wireframe2", ren_win=self.render.ren_win, obj_actor=self.render.obj2.objActor) self.opacity = tk.Scale(self.commands, from_=0.0, to=1.0, res=0.01, orient="horizontal", label="Opacity", command=self.set_opacity) self.exitbutton.pack(side="right") self.savebutton.pack(side="left") self.vtkw.pack(side="top", fill="both", expand="yes") self.opacity.pack(side="top", anchor="nw", fill="both")
class TestTkRenderWidget(Testing.vtkTest): # Stick your VTK pipeline here if you want to create the pipeline # only once. If you put it in the constructor or in the function # the pipeline will be created afresh for each and every test. # create a dummy Tkinter root window. root = tkinter.Tk() # create a rendering window and renderer ren = vtk.vtkRenderer() tkrw = vtkTkRenderWidget(root, width=300, height=300) tkrw.pack() tkrw.GetRenderWindow().AddRenderer(ren) # create an actor and give it cone geometry cs = vtk.vtkConeSource() cs.SetResolution(8) map = vtk.vtkPolyDataMapper() map.SetInputConnection(cs.GetOutputPort()) act = vtk.vtkActor() act.SetMapper(map) # assign our actor to the renderer ren.AddActor(act) def testvtkTkRenderWidget(self): "Test if vtkTkRenderWidget works." self.tkrw.Render() self.root.update() img_file = "TestTkRenderWidget.png" Testing.compareImage(self.tkrw.GetRenderWindow(), Testing.getAbsImagePath(img_file)) Testing.interact() self.root.destroy() # Dummy tests to demonstrate how the blackbox tests can be done. def testParse(self): "Test if vtkActor is parseable" self._testParse(self.act) def testGetSet(self): "Testing Get/Set methods" self._testGetSet(self.act, excluded_methods="AllocatedRenderTime") def testBoolean(self): "Testing Boolean methods" self._testBoolean(self.act)
def setup_gui(self): self.tk_root = Tk() self.tk_root.title("Visualisation") self.tk_root.after(100, self.redraw) self.tk_root.bind("<Destroy>", self.destroyed) self.tk_root.grid_rowconfigure(0, weight=1) self.tk_root.grid_columnconfigure(0, weight=1) self.tk_renderWidget = vtkTkRenderWidget(self.tk_root, width=400, height=400) self.tk_renderWidget.grid(row=0, column=0, sticky=N+S+E+W) self.tk_controlFrame = Frame(self.tk_root) self.tk_controlFrame.grid(row=1, column=0, sticky=E+W) self.tk_controlFrame.grid_rowconfigure(0, weight=1) self.tk_controlFrame.grid_columnconfigure(0, weight=1) self.tk_quit = Button(self.tk_controlFrame, text="Quit", command=self.shutdown) self.tk_quit.grid(row=0, column=0, sticky=E+W) self.tk_renderWidget.GetRenderWindow().AddRenderer(self.vtk_renderer)
def SetUp(self): ''' Set up cursor3D ''' def OnClosing(): self.root.quit() def AddSphere(ren): objSource = vtk.vtkSphereSource() objMapper = vtk.vtkPolyDataMapper() objMapper.SetInputConnection(objSource.GetOutputPort()) objActor = vtk.vtkActor() objActor.SetMapper(objMapper) objActor.GetProperty().SetRepresentationToWireframe() ren.AddActor(objActor) def AddOneTextActor(baseTextProp): name = "ia" self.textActors[name] = vtk.vtkTextActor3D() # This adjustment is needed to reduce the difference # between the Tcl and Python versions. self.textActors[name].SetOrigin(0, -0.127878, 0) tprop = self.textActors[name].GetTextProperty() tprop.ShallowCopy(baseTextProp) tprop.SetColor(1,0,0) # Add many text actors. def AddManyTextActors(baseTextProp): lut = vtk.vtkColorTransferFunction() lut.SetColorSpaceToHSV() lut.AddRGBPoint(0.0, 0.0, 1.0, 1.0) lut.AddRGBPoint(1.0, 1.0, 1.0, 1.0) for i in range(0, 10): name = "ia" + str(i) self.textActors[name] = vtk.vtkTextActor3D() self.textActors[name].SetOrientation(0, i*36, 0) #self.textActors[name].SetPosition(math.cos(i * 0.0314), 0, 0) # This adjustment is needed to reduce the diffierence # between the Tcl and Python versions. self.textActors[name].SetOrigin(0, -0.127878, 0) tprop = self.textActors[name].GetTextProperty() tprop.ShallowCopy(baseTextProp) value = i / 10.0 tprop.SetColor(lut.GetColor(value)) del lut # Update all text actors def UpdateTextActors(event): orientation = self.scaleOrientation.get() fontSize = self.scaleFontSize.get() scale = self.scaleScale.get() / 10000.0 text = self.entryText.get("1.0",'end+1c') opacity = self.scaleOpacity.get() for actor in self.textActors.values(): actor.SetScale(scale) actor.SetInput(text) tprop = actor.GetTextProperty() tprop.SetFontSize(fontSize) tprop.SetOrientation(orientation) tprop.SetOpacity(opacity) self.renWin.Render() ren = vtk.vtkRenderer() ren.SetBackground(0.1, 0.2, 0.4) self.renWin = vtk.vtkRenderWindow() self.renWin.AddRenderer(ren) #self.renWin.SetSize(600, 600) self.root = tkinter.Tk() self.root.title("TestTextActor3D.py") # Define what to do when the user explicitly closes a window. self.root.protocol("WM_DELETE_WINDOW", OnClosing) # The Tk render widget. self.tkrw = vtkTkRenderWidget( self.root, width=450, height=450, rw=self.renWin) self.tkrw.BindTkRenderWidget() #self.renWin.GetInteractor().GetInteractorStyle().SetCurrentStyleToTrackballCamera() self.tkrw.pack(side=LEFT, fill=BOTH, expand=YES) # Base text property baseTextProp = vtk.vtkTextProperty() baseTextProp.SetFontSize(48) baseTextProp.ShadowOn() baseTextProp.SetColor(1.0, 0.0, 0.0) baseTextProp.SetFontFamilyToArial() baseScale = 0.0025 baseText = "This is a test" # The text actors self.textActors = dict() scaleLength = 200 controls = tkinter.Frame(self.root, relief=GROOVE, bd=2) controls.pack( padx=2, pady=2, anchor=N+W, side=LEFT, fill=BOTH, expand=NO) # Add control of text. self.entryText = tkinter.Text(controls, height=1, width=25) self.entryText.insert(INSERT,baseText) self.entryText.pack(padx=4, pady=4, side=TOP, fill=X, expand=NO) self.entryText.bind('<Return>',UpdateTextActors) self.entryText.bind('<FocusOut>',UpdateTextActors) # Add control of orientation. self.scaleOrientation = tkinter.Scale(controls, from_=0, to=360, res=1, length= scaleLength, orient=HORIZONTAL, label="Text orientation:", command=UpdateTextActors) self.scaleOrientation.set(baseTextProp.GetOrientation()) self.scaleOrientation.pack(side=TOP, fill=X, expand=NO) # Add control of font size. self.scaleFontSize = tkinter.Scale(controls, from_=5, to=150, res=1, length= scaleLength, orient=HORIZONTAL, label="Font Size:", command=UpdateTextActors) self.scaleFontSize.set(baseTextProp.GetFontSize()) self.scaleFontSize.pack(side=TOP, fill=X, expand=NO) # Add control of scale. self.scaleScale = tkinter.Scale(controls, from_=0, to=100, res=1, length= scaleLength, orient=HORIZONTAL, label="Actor scale:", command=UpdateTextActors) self.scaleScale.set(baseScale * 10000.0) self.scaleScale.pack(side=TOP, fill=X, expand=NO) # Add control of scale. self.scaleOpacity = tkinter.Scale(controls, from_=0, to=1.0, res=0.01, length= scaleLength, orient=HORIZONTAL, label="Text opacity:", command=UpdateTextActors) self.scaleOpacity.set(baseTextProp.GetOpacity()) self.scaleOpacity.pack(side=TOP, fill=X, expand=NO) # Create and add all the text actors. if False: AddSphere(ren) AddOneTextActor(baseTextProp) ren.ResetCamera() else: AddManyTextActors(baseTextProp) ren.ResetCamera() ren.GetActiveCamera().Elevation(30.0) ren.GetActiveCamera().Dolly(0.40) UpdateTextActors(0) for actor in self.textActors.values(): ren.AddActor(actor)
#=============================================================================== master = Tk() master.title( 'Mehrkörpersimulation' ) master.geometry( '900x500' ) welcomeWidget = Label( master, text = 'Willkommen zur Mehrkörpersimulations-Software!', font = ( 'Arial', 20, 'bold' ) ) welcomeWidget.grid(row = 0, columnspan = 3, sticky = W+E+N+S, pady = 20 ) planetsWidget = Label( master, text = 'zu simulierende Planeten:', font = ( 'Arial', 10 ) ) planetsWidget.grid(row = 1, column = 0, sticky = W+S) planetsSpinWidget = Spinbox( master, from_ = 1, to = 100, font = ( 'Arial', 10 ), width = 10 ) planetsSpinWidget.grid( row = 1, column = 1, sticky = E+S ) renderWidget = vtkTkRenderWidget( master, width = 500, height = 400 ) renderWidget.grid( row = 1, rowspan = 7, column = 2, sticky = W+E+N+S, padx = 30, pady = 5 ) renderWindow = renderWidget.GetRenderWindow() renderWindow.AddRenderer( ren ) renderWindow.SetSize( 500, 400 ) simDurationWidget = Label( master, text = 'Simulationsdauer (in Tagen):', font = ( 'Arial', 10 ) ) simDurationWidget.grid( row = 2, column = 0, sticky = W+N ) simDurationSpinWidget = Spinbox( master, from_ = 365, to = 9999, font = ( 'Arial', 10 ), width = 10 ) simDurationSpinWidget.grid( row = 2, column = 1, sticky = E+N ) massWidget = Label( master, text = 'Massebereich der Planeten:', font = ( 'Arial', 10 ) ) massWidget.grid( row = 3, column = 0, sticky = W+S ) massEntryWidget = Entry( master, font = ( 'Arial', 10 ), width = 12 )
def __init__(self, title="Visualisation", width=400, height=400, recording=False, recordPattern=None, paused=False, source=None): ''' Constructor. Params: title: string - Title of the visualisation window width: int - Width of the visualisation window height: int - Height of the visualisation window recording: boolean - Start with recording enabled? recordPattern: string - Pattern for recorded images, e.g., cylinders%05g.png paused: boolean - Start with playback paused? source:- The data source to read. What is required here varies by visualiser. ''' # Visualisation options self.vis_features = [] self.vis_frame = 0 self.vis_frameStep = 1 self.vis_jumping = False self.vis_recording = recording self.vis_recordPattern = recordPattern self.vis_paused = paused self.vis_source = source # VTK structures self.vtk_cells = vtkCellArray() self.vtk_renderer = vtkRenderer() # Tk structures self.tk_root = Tk() self.tk_root.title(title) self.tk_root.grid_rowconfigure(0, weight=1) self.tk_root.grid_columnconfigure(0, weight=3) self.tk_root.bind('<Destroy>', self.destroyed) if not self.vis_paused: self.tk_root.after(100, self.animate) self.tk_renderWidget = vtkTkRenderWidget(self.tk_root, width=width, height=height) self.tk_renderWidget.grid(row=0, column=0, sticky=N+S+E+W) self.tk_renderWidget.GetRenderWindow().AddRenderer(self.vtk_renderer) self.tk_featureFrame = Frame(self.tk_root) self.tk_featureFrame.grid(row=0, column=1, rowspan=2) Label(self.tk_featureFrame, text='Features:').grid(row=0, column=0) self.tk_controlFrame = Frame(self.tk_root) self.tk_controlFrame.grid(row=1, column=0) self.tk_quit = Button(self.tk_controlFrame, text="Quit", command=self.shutdown) self.tk_quit.grid(row=0, column=0, columnspan=2) def pause(): if self.vis_paused: self.tk_pause.config(text='Pause') self.tk_root.after(100, self.animate) else: self.tk_pause.config(text='Resume') self.vis_paused ^= True self.tk_pause = Button(self.tk_controlFrame, text="Pause", command=pause) self.tk_pause.grid(row=0, column=2, columnspan=2) if self.vis_recordPattern is not None: def record(): if self.vis_recording: self.tk_record.config(text='Start Recording') else: self.tk_record.config(text='Stop Recording') self.vis_recording ^= True self.tk_record = Button(self.tk_controlFrame, text="Start Recording", command=record) self.tk_record.grid(row=0, column=4, columnspan=2) if self.vis_recording: self.tk_record.config(text="Stop Recording") def make_seek_button(label, column, frame): def jump(): self.jumpTo(frame) b = Button(self.tk_controlFrame, text=label, command=jump) b.grid(row=1, column=column, sticky=W+E) return b self.tk_seek_start = make_seek_button("|<", 0, 0) self.tk_seek_back10 = make_seek_button("<<", 1, lambda: self.vis_frame - 10) self.tk_seek_back1 = make_seek_button("<", 2, lambda: self.vis_frame - 1) self.tk_seek_forward1 = make_seek_button(">", 3, lambda: self.vis_frame + 1) self.tk_seek_forward10 = make_seek_button(">>", 4, lambda: self.vis_frame + 10) self.tk_seek_end = make_seek_button(">|", 5, self.getMaxFrameNumber) Label(self.tk_controlFrame, text='Frame').grid(row=2, column=0, sticky=W+E) def changeFrame(frame): if not self.vis_jumping: self.vis_jumping = True self.jumpTo(self.tk_frame.get()) self.vis_jumping = False self.tk_frame = Scale(self.tk_controlFrame, command=changeFrame, from_=0, to=0, orient=HORIZONTAL) self.tk_frame.grid(row=2, column=1, columnspan=2, sticky=W+E) Label(self.tk_controlFrame, text='Step').grid(row=2, column=3, sticky=W+E) def changeFrameStep(step): self.vis_frameStep = int(step) self.tk_frameStep = Scale(self.tk_controlFrame, command=changeFrameStep, from_=1, to=1, orient=HORIZONTAL) self.tk_frameStep.grid(row=2, column=4, columnspan=2, sticky=W+E) self.setupGrid()
master.title( 'Mehrkoerpersimulation' ) master.geometry( '800x450' ) entryFrame = Frame(master) entryFrame.pack(side=LEFT) entryTopFrame = Frame(entryFrame) entryTopFrame.pack(side=TOP, padx=20) entryBottomFrame = Frame(entryFrame) entryBottomFrame.pack(side=BOTTOM) simulationFrame = Frame(master) simulationFrame.pack(side=RIGHT, padx=20) renderWidget = vtkTkRenderWidget(simulationFrame, width=500, height=400) renderWindow = renderWidget.GetRenderWindow() renderWindow.AddRenderer(ren) renderWindow.SetSize(500, 400) loopRunning = False exitRequested = False currentTime=0.0 timeStep=0.01 # quit function def quit(): global exitRequested, loopRunning, master, vis if loopRunning: exitRequested = True else:
def SetUp(self): ''' Set up squadViewer ''' def OnClosing(): self.root.quit() def SetPhi(squad, win, phi): squad.SetPhiRoundness(float(phi)) win.Render() def SetTheta(squad, win, theta): squad.SetThetaRoundness(float(theta)) win.Render() def SetThickness(squad, win, thickness): squad.SetThickness(float(thickness)) win.Render() def SetTexture(actor, texture, win): if doTexture.get(): actor.SetTexture(texture) else: actor.SetTexture(None) win.Render() def SetToroid(squad, scale, win): squad.SetToroidal(toroid.get()) if toroid.get(): scale.config(state=NORMAL, fg='black') else: scale.config(state=DISABLED, fg='gray') win.Render() self.root = tkinter.Tk() self.root.title("superquadric viewer") # Define what to do when the user explicitly closes a window. self.root.protocol("WM_DELETE_WINDOW", OnClosing) # Create render window self.tkrw = vtkTkRenderWidget(self.root, width=550, height=450) self.tkrw.BindTkRenderWidget() renWin = self.tkrw.GetRenderWindow() # Create parameter sliders # prs = tkinter.Scale(self.root, from_=0, to=3.5, res=0.1, orient=HORIZONTAL, label="phi roundness") trs = tkinter.Scale(self.root, from_=0, to=3.5, res=0.1, orient=HORIZONTAL, label="theta roundness") thicks = tkinter.Scale(self.root, from_=0.01, to=1.0, res=0.01, orient=HORIZONTAL, label="thickness") # Create check buttons # toroid = tkinter.IntVar() toroid.set(0) doTexture = tkinter.IntVar() doTexture.set(0) rframe = tkinter.Frame(self.root) torbut = tkinter.Checkbutton(rframe, text="Toroid", variable=toroid) texbut = tkinter.Checkbutton(rframe, text="Texture", variable=doTexture) # Put it all together # torbut.pack(padx=10, pady=5, ipadx=20, ipady=5, side=RIGHT, anchor=S) texbut.pack(padx=10, pady=5, ipadx=20, ipady=5, side=RIGHT, anchor=S) self.tkrw.grid(sticky=N+E+W+S, columnspan=2) rframe.grid(sticky=N+E+W+S) thicks.grid(sticky=N+S+E+W, padx=10, ipady=5, row=1, column=1) prs.grid(sticky=N+E+W+S, padx=10, ipady=5, row = 2, column = 0) trs.grid(sticky=N+E+W+S, padx=10, ipady=5, row = 2, column = 1) tkinter.Pack.propagate(rframe,NO) prs.set(1.0) trs.set(0.7) thicks.set(0.3) toroid.set(1) doTexture.set(0) # Create pipeline # squad = vtk.vtkSuperquadricSource() squad.SetPhiResolution(20) squad.SetThetaResolution(25) pnmReader = vtk.vtkPNMReader() pnmReader.SetFileName(VTK_DATA_ROOT + "/Data/earth.ppm") atext = vtk.vtkTexture() atext.SetInputConnection(pnmReader.GetOutputPort()) atext.InterpolateOn() appendSquads = vtk.vtkAppendPolyData() appendSquads.AddInputConnection(squad.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(squad.GetOutputPort()) mapper.ScalarVisibilityOff() actor = vtk.vtkActor() actor.SetMapper(mapper) actor.SetTexture(atext) actor.GetProperty().SetDiffuseColor(0.5, 0.8, 0.8) actor.GetProperty().SetAmbient(0.2) actor.GetProperty().SetAmbientColor(0.2, 0.2, 0.2) squad.SetPhiRoundness(prs.get()) squad.SetThetaRoundness(trs.get()) squad.SetToroidal(toroid.get()) squad.SetThickness(thicks.get()) squad.SetScale(1, 1, 1) SetTexture(actor, atext, renWin) # Create renderer stuff # ren = vtk.vtkRenderer() ren.SetAmbient(1.0, 1.0, 1.0) renWin.AddRenderer(ren) # Add the actors to the renderer, set the background and size # ren.AddActor(actor) ren.SetBackground(0.25, 0.2, 0.2) ren.ResetCamera() ren.GetActiveCamera().Zoom(1.2) ren.GetActiveCamera().Elevation(40) ren.GetActiveCamera().Azimuth(-20) # Associate the functions with the sliders and check buttons. # prs.config(command=partial(SetPhi, squad, self.tkrw)) trs.config(command=partial(SetTheta, squad, self.tkrw)) thicks.config(command=partial(SetThickness,squad, self.tkrw)) torbut.config(command=partial(SetToroid, squad, thicks, self.tkrw)) texbut.config(command=partial(SetTexture, actor, atext, self.tkrw))
if __name__ == "__main__": # prepare a vtk window with an actor for visible feedback. Don't be # be scared, the actual gradient editor code is only 3 lines long, # the rest is setup of the scene. from enthought.tvtk.api import tvtk import vtk from vtk.tk import vtkTkRenderWidget from math import cos root = tk.Tk() root.minsize(520,520) render_frame = tk.Frame(root) render_frame.pack() render_widget = vtkTkRenderWidget.vtkTkRenderWidget(render_frame, width=512, height=512 ) render_widget.pack(side=tk.BOTTOM,expand='true',fill='both') render_window = render_widget.GetRenderWindow() renderer = vtk.vtkRenderer() renderer.SetBackground(0.2,0.2,0.4) render_window.AddRenderer(renderer) image_data = vtk.vtkImageData() N = 72 image_data.SetDimensions(N,N,1) try: method = image_data.SetScalarComponentFromFloat except AttributeError: method = image_data.SetScalarComponentFromDouble for i in range(N): for j in range(N):
def SetUp(self): ''' Set up cursor3D ''' def OnClosing(): self.root.quit() def ViewerDown(tkvw): viewer = tkvw.GetImageViewer() ViewerSetZSlice(tkvw, viewer.GetZSlice() - 1) def ViewerUp(tkvw): viewer = tkvw.GetImageViewer() ViewerSetZSlice(tkvw, viewer.GetZSlice() + 1) def ViewerSetZSlice(tkvw, z): viewer = tkvw.GetImageViewer() viewer.SetZSlice(z) txt = 'slice: ' + str(z) sliceLabel.configure(text=txt) tkvw.Render() def SetCursorFromViewer(event): x = int(event.x) y = int(event.y) # We have to flip y axis because tk uses upper right origin. self.root.update_idletasks() height = int(self.tkvw.configure()['height'][4]) y = height - y z = self.tkvw.GetImageViewer().GetZSlice() SetCursor(x / IMAGE_MAG_X, y / IMAGE_MAG_Y, z / IMAGE_MAG_Z) def SetCursor(x, y, z): CURSOR_X = x CURSOR_Y = y CURSOR_Z = z axes.SetOrigin(CURSOR_X, CURSOR_Y, CURSOR_Z) imageCursor.SetCursorPosition(CURSOR_X * IMAGE_MAG_X, CURSOR_Y * IMAGE_MAG_Y, CURSOR_Z * IMAGE_MAG_Z) self.viewer.Render() self.tkrw.Render() # Pipeline stuff. reader = vtk.vtkSLCReader() reader.SetFileName(VTK_DATA_ROOT + "/Data/neghip.slc") # Cursor stuff magnify = vtk.vtkImageMagnify() magnify.SetInputConnection(reader.GetOutputPort()) magnify.SetMagnificationFactors(IMAGE_MAG_X, IMAGE_MAG_Y, IMAGE_MAG_Z) imageCursor = vtk.vtkImageCursor3D() imageCursor.SetInputConnection(magnify.GetOutputPort()) imageCursor.SetCursorPosition(CURSOR_X * IMAGE_MAG_X, CURSOR_Y * IMAGE_MAG_Y, CURSOR_Z * IMAGE_MAG_Z) imageCursor.SetCursorValue(255) imageCursor.SetCursorRadius(50 * IMAGE_MAG_X) axes = vtk.vtkAxes() axes.SymmetricOn() axes.SetOrigin(CURSOR_X, CURSOR_Y, CURSOR_Z) axes.SetScaleFactor(50.0) axes_mapper = vtk.vtkPolyDataMapper() axes_mapper.SetInputConnection(axes.GetOutputPort()) axesActor = vtk.vtkActor() axesActor.SetMapper(axes_mapper) axesActor.GetProperty().SetAmbient(0.5) # Image viewer stuff. viewer = vtk.vtkImageViewer() viewer.SetInputConnection(imageCursor.GetOutputPort()) viewer.SetZSlice(CURSOR_Z * IMAGE_MAG_Z) viewer.SetColorWindow(256) viewer.SetColorLevel(128) # Create transfer functions for opacity and color. opacity_transfer_function = vtk.vtkPiecewiseFunction() opacity_transfer_function.AddPoint(20, 0.0) opacity_transfer_function.AddPoint(255, 0.2) color_transfer_function = vtk.vtkColorTransferFunction() color_transfer_function.AddRGBPoint(0, 0, 0, 0) color_transfer_function.AddRGBPoint(64, 1, 0, 0) color_transfer_function.AddRGBPoint(128, 0, 0, 1) color_transfer_function.AddRGBPoint(192, 0, 1, 0) color_transfer_function.AddRGBPoint(255, 0, .2, 0) # Create properties, mappers, volume actors, and ray cast function. volume_property = vtk.vtkVolumeProperty() volume_property.SetColor(color_transfer_function) # volume_property.SetColor(color_transfer_function[0], # color_transfer_function[1], # color_transfer_function[2]) volume_property.SetScalarOpacity(opacity_transfer_function) volume_mapper = vtk.vtkFixedPointVolumeRayCastMapper() volume_mapper.SetInputConnection(reader.GetOutputPort()) volume = vtk.vtkVolume() volume.SetMapper(volume_mapper) volume.SetProperty(volume_property) # Create outline. outline = vtk.vtkOutlineFilter() outline.SetInputConnection(reader.GetOutputPort()) outline_mapper = vtk.vtkPolyDataMapper() outline_mapper.SetInputConnection(outline.GetOutputPort()) outlineActor = vtk.vtkActor() outlineActor.SetMapper(outline_mapper) outlineActor.GetProperty().SetColor(1, 1, 1) # Create the renderer. ren = vtk.vtkRenderer() ren.AddActor(axesActor) ren.AddVolume(volume) ren.SetBackground(0.1, 0.2, 0.4) renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren) renWin.SetSize(256, 256) # Create the GUI: two renderer widgets and a quit button. self.root = tkinter.Tk() self.root.title("cursor3D") # Define what to do when the user explicitly closes a window. self.root.protocol("WM_DELETE_WINDOW", OnClosing) # Help label, frame and quit button helpLabel = tkinter.Label( self.root, text= "MiddleMouse (or shift-LeftMouse) in image viewer to place cursor") displayFrame = tkinter.Frame(self.root) quitButton = tkinter.Button(self.root, text="Quit", command=OnClosing) # Pack the GUI. helpLabel.pack() displayFrame.pack(fill=BOTH, expand=TRUE) quitButton.pack(fill=X) # Create the viewer widget. viewerFrame = tkinter.Frame(displayFrame) viewerFrame.pack(padx=3, pady=3, side=LEFT, anchor=N, fill=BOTH, expand=FALSE) self.tkvw = vtkTkImageViewerWidget(viewerFrame, iv=viewer, width=264, height=264) viewerControls = tkinter.Frame(viewerFrame) viewerControls.pack(side=BOTTOM, anchor=S, fill=BOTH, expand=TRUE) self.tkvw.pack(side=TOP, anchor=N, fill=BOTH, expand=FALSE) downButton = tkinter.Button(viewerControls, text="Down", command=[ViewerDown, self.tkvw]) upButton = tkinter.Button(viewerControls, text="Up", command=[ViewerUp, self.tkvw]) sliceLabel = tkinter.Label(viewerControls, text="slice: " + str(CURSOR_Z * IMAGE_MAG_Z)) downButton.pack(side=LEFT, expand=TRUE, fill=BOTH) upButton.pack(side=LEFT, expand=TRUE, fill=BOTH) sliceLabel.pack(side=LEFT, expand=TRUE, fill=BOTH) # Create the render widget renderFrame = tkinter.Frame(displayFrame) renderFrame.pack(padx=3, pady=3, side=LEFT, anchor=N, fill=BOTH, expand=TRUE) self.tkrw = vtkTkRenderWidget(renderFrame, rw=renWin, width=264, height=264) self.tkrw.pack(side=TOP, anchor=N, fill=BOTH, expand=TRUE) # Bindings self.tkvw.BindTkImageViewer() self.tkrw.BindTkRenderWidget() # Lets add an extra binding of the middle button in the image viewer # to set the cursor location. self.tkvw.bind('<Button-2>', SetCursorFromViewer) self.tkvw.bind('<Shift-Button-1>', SetCursorFromViewer) # Associate the functions with the buttons and label. # downButton.config(command=partial(ViewerDown, self.tkvw)) upButton.config(command=partial(ViewerUp, self.tkvw))
def test_vtk(): import vtk import Tkinter try: from vtkTkRenderWidget import vktTkRenderWidget except: from vtk.tk.vtkTkRenderWidget import vtkTkRenderWidget print "vtk is installed in", os.path.dirname(vtk.__file__) print "vtk version", vtk.vtkVersion().GetVTKVersion() # Create a sphere source, mapper, and actor sphere = vtk.vtkSphereSource() sphereMapper = vtk.vtkPolyDataMapper() sphereMapper.SetInputConnection(sphere.GetOutputPort()) sphereMapper.GlobalImmediateModeRenderingOn() sphereActor = vtk.vtkLODActor() sphereActor.SetMapper(sphereMapper) # Create a scaled text actor. # Set the text, font, justification, and properties (bold, italics, # etc.). textActor = vtk.vtkTextActor() textActor.ScaledTextOn() textActor.SetDisplayPosition(90, 50) textActor.SetInput("Hello VTK!") # Set coordinates to match the old vtkScaledTextActor default value textActor.GetPosition2Coordinate().SetCoordinateSystemToNormalizedViewport( ) textActor.GetPosition2Coordinate().SetValue(0.6, 0.1) tprop = textActor.GetTextProperty() tprop.SetFontSize(24) tprop.SetFontFamilyToArial() tprop.SetJustificationToCentered() tprop.BoldOn() tprop.ItalicOn() tprop.ShadowOn() tprop.SetColor(0, 0, 1) # Create the Renderer, RenderWindow, RenderWindowInteractor master = Tkinter.Tk() master.withdraw() root = Tkinter.Toplevel(master) root.title("Hello VTK!") def close(event=None): root.withdraw() root.bind("<KeyPress-q>", close) frame = Tkinter.Frame(root, relief='sunken', bd=2) frame.pack(side='top', fill='both', expand=1) tkw = vtkTkRenderWidget(frame, width=320, height=240) tkw.pack(expand='true', fill='both') ren = vtk.vtkRenderer() renwin = tkw.GetRenderWindow() renwin.AddRenderer(ren) # Add the actors to the renderer; set the background and size; zoom # in; and render. ren.AddActor2D(textActor) ren.AddActor(sphereActor) ren.SetBackground(1, 1, 1) ren.ResetCamera() ren.GetActiveCamera().Zoom(1.5) root.update() renwin.Render() wait()
def SetUp(self): ''' Set up squadViewer ''' def OnClosing(): self.root.quit() def SetPhi(squad, win, phi): squad.SetPhiRoundness(float(phi)) win.Render() def SetTheta(squad, win, theta): squad.SetThetaRoundness(float(theta)) win.Render() def SetThickness(squad, win, thickness): squad.SetThickness(float(thickness)) win.Render() def SetTexture(actor, texture, win): if doTexture.get(): actor.SetTexture(texture) else: actor.SetTexture(None) win.Render() def SetToroid(squad, scale, win): squad.SetToroidal(toroid.get()) if toroid.get(): scale.config(state=NORMAL, fg='black') else: scale.config(state=DISABLED, fg='gray') win.Render() self.root = Tkinter.Tk() self.root.title("superquadric viewer") # Define what to do when the user explicitly closes a window. self.root.protocol("WM_DELETE_WINDOW", OnClosing) # Create render window self.tkrw = vtkTkRenderWidget(self.root, width=550, height=450) self.tkrw.BindTkRenderWidget() self.renWin = self.tkrw.GetRenderWindow() # Create parameter sliders # prs = Tkinter.Scale(self.root, from_=0, to=3.5, res=0.1, orient=HORIZONTAL, label="phi roundness") trs = Tkinter.Scale(self.root, from_=0, to=3.5, res=0.1, orient=HORIZONTAL, label="theta roundness") thicks = Tkinter.Scale(self.root, from_=0.01, to=1.0, res=0.01, orient=HORIZONTAL, label="thickness") # Create check buttons # toroid = Tkinter.IntVar() toroid.set(0) doTexture = Tkinter.IntVar() doTexture.set(0) rframe = Tkinter.Frame(self.root) torbut = Tkinter.Checkbutton(rframe, text="Toroid", variable=toroid) texbut = Tkinter.Checkbutton(rframe, text="Texture", variable=doTexture) # Put it all together # torbut.pack(padx=10, pady=5, ipadx=20, ipady=5, side=RIGHT, anchor=S) texbut.pack(padx=10, pady=5, ipadx=20, ipady=5, side=RIGHT, anchor=S) self.tkrw.grid(sticky=N + E + W + S, columnspan=2) rframe.grid(sticky=N + E + W + S) thicks.grid(sticky=N + S + E + W, padx=10, ipady=5, row=1, column=1) prs.grid(sticky=N + E + W + S, padx=10, ipady=5, row=2, column=0) trs.grid(sticky=N + E + W + S, padx=10, ipady=5, row=2, column=1) Tkinter.Pack.propagate(rframe, NO) prs.set(1.0) trs.set(0.7) thicks.set(0.3) toroid.set(1) doTexture.set(0) # Create pipeline # squad = vtk.vtkSuperquadricSource() squad.SetPhiResolution(20) squad.SetThetaResolution(25) pnmReader = vtk.vtkPNMReader() pnmReader.SetFileName(VTK_DATA_ROOT + "/Data/earth.ppm") atext = vtk.vtkTexture() atext.SetInputConnection(pnmReader.GetOutputPort()) atext.InterpolateOn() appendSquads = vtk.vtkAppendPolyData() appendSquads.AddInputConnection(squad.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(squad.GetOutputPort()) mapper.ScalarVisibilityOff() actor = vtk.vtkActor() actor.SetMapper(mapper) actor.SetTexture(atext) actor.GetProperty().SetDiffuseColor(0.5, 0.8, 0.8) actor.GetProperty().SetAmbient(0.2) actor.GetProperty().SetAmbientColor(0.2, 0.2, 0.2) squad.SetPhiRoundness(prs.get()) squad.SetThetaRoundness(trs.get()) squad.SetToroidal(toroid.get()) squad.SetThickness(thicks.get()) squad.SetScale(1, 1, 1) SetTexture(actor, atext, self.renWin) # Create renderer stuff # ren = vtk.vtkRenderer() ren.SetAmbient(1.0, 1.0, 1.0) self.renWin.AddRenderer(ren) # Add the actors to the renderer, set the background and size # ren.AddActor(actor) ren.SetBackground(0.25, 0.2, 0.2) ren.ResetCamera() ren.GetActiveCamera().Zoom(1.2) ren.GetActiveCamera().Elevation(40) ren.GetActiveCamera().Azimuth(-20) # Associate the functions with the sliders and check buttons. # prs.config(command=partial(SetPhi, squad, self.renWin)) trs.config(command=partial(SetTheta, squad, self.renWin)) thicks.config(command=partial(SetThickness, squad, self.renWin)) torbut.config(command=partial(SetToroid, squad, thicks, self.renWin)) texbut.config(command=partial(SetTexture, actor, atext, self.renWin))
9: "Large intestine", 10: "Liver", 11: "Lung", 12: "Nerve", 13: "Skeleton", 14: "Spleen", 15: "Stomach", 16: "Skin", } # Deze kleuren zijn nog niet allemaal goed. Sommigen zijn dubbel! root = Tkinter.Tk() aRenderer = vtk.vtkRenderer() aRenderer.TexturedBackgroundOn() renderWidget = vtkTkRenderWidget(root, width=800, height=600) renderWidget.pack(expand="true", fill="both") renWin = renderWidget.GetRenderWindow() renWin.AddRenderer(aRenderer) aRenderer.SetBackground(1, 1, 1) renWin.SetSize(600, 480) reader = vtk.vtkImageReader() reader.SetDataExtent(0, 499, 0, 469, 1, 136) reader.SetDataSpacing(1, 1, 1.5) reader.SetDataScalarTypeToUnsignedChar() reader.SetFilePattern("./WholeFrog/frogTissue.%s%03d.raw") reader.Update() readerSkin = vtk.vtkImageReader() readerSkin.SetDataExtent(0, 499, 0, 469, 1, 136)
def test_vtk(): import vtk import Tkinter try: from vtkTkRenderWidget import vktTkRenderWidget except: from vtk.tk.vtkTkRenderWidget import vtkTkRenderWidget print "vtk is installed in", os.path.dirname(vtk.__file__) print "vtk version", vtk.vtkVersion().GetVTKVersion() # Create a sphere source, mapper, and actor sphere = vtk.vtkSphereSource() sphereMapper = vtk.vtkPolyDataMapper() sphereMapper.SetInputConnection(sphere.GetOutputPort()) sphereMapper.GlobalImmediateModeRenderingOn() sphereActor = vtk.vtkLODActor() sphereActor.SetMapper(sphereMapper) # Create a scaled text actor. # Set the text, font, justification, and properties (bold, italics, # etc.). textActor = vtk.vtkTextActor() textActor.ScaledTextOn() textActor.SetDisplayPosition(90, 50) textActor.SetInput("Hello VTK!") # Set coordinates to match the old vtkScaledTextActor default value textActor.GetPosition2Coordinate().SetCoordinateSystemToNormalizedViewport() textActor.GetPosition2Coordinate().SetValue(0.6, 0.1) tprop = textActor.GetTextProperty() tprop.SetFontSize(24) tprop.SetFontFamilyToArial() tprop.SetJustificationToCentered() tprop.BoldOn() tprop.ItalicOn() tprop.ShadowOn() tprop.SetColor(0, 0, 1) # Create the Renderer, RenderWindow, RenderWindowInteractor master = Tkinter.Tk() master.withdraw() root = Tkinter.Toplevel(master) root.title("Hello VTK!") def close(event=None): root.withdraw() root.bind("<KeyPress-q>", close) frame = Tkinter.Frame(root, relief='sunken', bd=2) frame.pack(side='top', fill='both', expand=1) tkw = vtkTkRenderWidget(frame, width=320, height=240) tkw.pack(expand='true', fill='both') ren = vtk.vtkRenderer() renwin = tkw.GetRenderWindow() renwin.AddRenderer(ren) # Add the actors to the renderer; set the background and size; zoom # in; and render. ren.AddActor2D(textActor) ren.AddActor(sphereActor) ren.SetBackground(1, 1, 1) ren.ResetCamera() ren.GetActiveCamera().Zoom(1.5) root.update() renwin.Render() wait()
def __init__(self, master): global _vtk_lib_present if not _vtk_lib_present: raise ValueError("no VTK") # Window creation tk.Frame.__init__(self, master) self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) # Renderer and associated widget self.im_ref = None self._renWidget = vtkTkRenderWidget(self) self._ren = vtk.vtkRenderer() self._renWidget.GetRenderWindow().AddRenderer(self._ren) self._renWidget.grid(row=0, column=0, sticky=tk.E+tk.W+tk.N+tk.S) # Transfer functions and volume display options and properties self.vtk_im = vtkImageImport() self.vtk_im.SetDataScalarType(VTK_UNSIGNED_CHAR) self.im_flipy = vtk.vtkImageFlip() self.im_flipy.SetFilteredAxis(1) self.im_flipy.SetInputConnection(self.vtk_im.GetOutputPort()); self.im_flipz = vtk.vtkImageFlip() self.im_flipz.SetFilteredAxis(2) self.im_flipz.SetInputConnection(self.im_flipy.GetOutputPort()); self.opaTF = vtk.vtkPiecewiseFunction() self.colTF = vtk.vtkColorTransferFunction() self.volProp = vtk.vtkVolumeProperty() self.volProp.SetColor(self.colTF) self.volProp.SetScalarOpacity(self.opaTF) self.volProp.ShadeOn() self.volProp.SetInterpolationTypeToLinear() self.compoFun = vtk.vtkVolumeRayCastCompositeFunction() self.isosfFun = vtk.vtkVolumeRayCastIsosurfaceFunction() self.isosfFun.SetIsoValue(0) self.mipFun = vtk.vtkVolumeRayCastMIPFunction() self.volMap = vtk.vtkVolumeRayCastMapper() self.volMap.SetVolumeRayCastFunction(self.compoFun) self.volMap.SetInputConnection(self.im_flipz.GetOutputPort()) self.volume = vtk.vtkVolume() self.volume.SetMapper(self.volMap) self.volume.SetProperty(self.volProp) self.outlineData = vtk.vtkOutlineFilter() self.outlineData.SetInputConnection(self.im_flipz.GetOutputPort()) self.mapOutline = vtk.vtkPolyDataMapper() self.mapOutline.SetInputConnection(self.outlineData.GetOutputPort()) self.outline = vtk.vtkActor() self.outline.SetMapper(self.mapOutline) self.outline.GetProperty().SetColor(1, 1, 1) self._ren.AddVolume(self.volume) self._ren.AddActor(self.outline) self._ren.SetBackground(116/255.0,214/255.0,220/255.0) # Control widget self.controlbar = ttk.Frame(self) self.controlbar.grid(row=0, column=1, sticky=tk.E+tk.W+tk.N+tk.S) self.drawControlBar() self.controlbar.grid_remove() self.controlbar.state = "hidden" self.master = master # Creates the info status bar. statusbar = ttk.Frame(self) statusbar.columnconfigure(0, weight=1) statusbar.grid(row=1, column=0, columnspan=2, sticky=tk.E+tk.W) self.infos = [] for i in range(3): v = tk.StringVar(self) ttk.Label(statusbar, anchor=tk.W, textvariable=v).grid(row=0, column=i, sticky=tk.E+tk.W) self.infos.append(v) self.infos[2].set("Hit Tab for control <-") # Events bindings master.bind("<KeyPress-Tab>", self.displayControlEvent)
def SetUp(self): """ Set up cursor3D """ def OnClosing(): self.root.quit() def ViewerDown(tkvw): viewer = tkvw.GetImageViewer() ViewerSetZSlice(tkvw, viewer.GetZSlice() - 1) def ViewerUp(tkvw): viewer = tkvw.GetImageViewer() ViewerSetZSlice(tkvw, viewer.GetZSlice() + 1) def ViewerSetZSlice(tkvw, z): viewer = tkvw.GetImageViewer() viewer.SetZSlice(z) txt = "slice: " + str(z) sliceLabel.configure(text=txt) tkvw.Render() def SetCursorFromViewer(event): x = int(event.x) y = int(event.y) # We have to flip y axis because tk uses upper right origin. self.root.update_idletasks() height = int(self.tkvw.configure()["height"][4]) y = height - y z = self.tkvw.GetImageViewer().GetZSlice() SetCursor(x / IMAGE_MAG_X, y / IMAGE_MAG_Y, z / IMAGE_MAG_Z) def SetCursor(x, y, z): CURSOR_X = x CURSOR_Y = y CURSOR_Z = z axes.SetOrigin(CURSOR_X, CURSOR_Y, CURSOR_Z) imageCursor.SetCursorPosition(CURSOR_X * IMAGE_MAG_X, CURSOR_Y * IMAGE_MAG_Y, CURSOR_Z * IMAGE_MAG_Z) self.viewer.Render() self.tkrw.Render() # Pipeline stuff. reader = vtk.vtkSLCReader() reader.SetFileName(VTK_DATA_ROOT + "/Data/neghip.slc") # Cursor stuff magnify = vtk.vtkImageMagnify() magnify.SetInputConnection(reader.GetOutputPort()) magnify.SetMagnificationFactors(IMAGE_MAG_X, IMAGE_MAG_Y, IMAGE_MAG_Z) imageCursor = vtk.vtkImageCursor3D() imageCursor.SetInputConnection(magnify.GetOutputPort()) imageCursor.SetCursorPosition(CURSOR_X * IMAGE_MAG_X, CURSOR_Y * IMAGE_MAG_Y, CURSOR_Z * IMAGE_MAG_Z) imageCursor.SetCursorValue(255) imageCursor.SetCursorRadius(50 * IMAGE_MAG_X) axes = vtk.vtkAxes() axes.SymmetricOn() axes.SetOrigin(CURSOR_X, CURSOR_Y, CURSOR_Z) axes.SetScaleFactor(50.0) axes_mapper = vtk.vtkPolyDataMapper() axes_mapper.SetInputConnection(axes.GetOutputPort()) axesActor = vtk.vtkActor() axesActor.SetMapper(axes_mapper) axesActor.GetProperty().SetAmbient(0.5) # Image viewer stuff. viewer = vtk.vtkImageViewer() viewer.SetInputConnection(imageCursor.GetOutputPort()) viewer.SetZSlice(CURSOR_Z * IMAGE_MAG_Z) viewer.SetColorWindow(256) viewer.SetColorLevel(128) # Create transfer functions for opacity and color. opacity_transfer_function = vtk.vtkPiecewiseFunction() opacity_transfer_function.AddPoint(20, 0.0) opacity_transfer_function.AddPoint(255, 0.2) color_transfer_function = vtk.vtkColorTransferFunction() color_transfer_function.AddRGBPoint(0, 0, 0, 0) color_transfer_function.AddRGBPoint(64, 1, 0, 0) color_transfer_function.AddRGBPoint(128, 0, 0, 1) color_transfer_function.AddRGBPoint(192, 0, 1, 0) color_transfer_function.AddRGBPoint(255, 0, 0.2, 0) # Create properties, mappers, volume actors, and ray cast function. volume_property = vtk.vtkVolumeProperty() volume_property.SetColor(color_transfer_function) # volume_property.SetColor(color_transfer_function[0], # color_transfer_function[1], # color_transfer_function[2]) volume_property.SetScalarOpacity(opacity_transfer_function) volume_mapper = vtk.vtkFixedPointVolumeRayCastMapper() volume_mapper.SetInputConnection(reader.GetOutputPort()) volume = vtk.vtkVolume() volume.SetMapper(volume_mapper) volume.SetProperty(volume_property) # Create outline. outline = vtk.vtkOutlineFilter() outline.SetInputConnection(reader.GetOutputPort()) outline_mapper = vtk.vtkPolyDataMapper() outline_mapper.SetInputConnection(outline.GetOutputPort()) outlineActor = vtk.vtkActor() outlineActor.SetMapper(outline_mapper) outlineActor.GetProperty().SetColor(1, 1, 1) # Create the renderer. ren = vtk.vtkRenderer() ren.AddActor(axesActor) ren.AddVolume(volume) ren.SetBackground(0.1, 0.2, 0.4) renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren) renWin.SetSize(256, 256) # Create the GUI: two renderer widgets and a quit button. self.root = tkinter.Tk() self.root.title("cursor3D") # Define what to do when the user explicitly closes a window. self.root.protocol("WM_DELETE_WINDOW", OnClosing) # Help label, frame and quit button helpLabel = tkinter.Label(self.root, text="MiddleMouse (or shift-LeftMouse) in image viewer to place cursor") displayFrame = tkinter.Frame(self.root) quitButton = tkinter.Button(self.root, text="Quit", command=OnClosing) # Pack the GUI. helpLabel.pack() displayFrame.pack(fill=BOTH, expand=TRUE) quitButton.pack(fill=X) # Create the viewer widget. viewerFrame = tkinter.Frame(displayFrame) viewerFrame.pack(padx=3, pady=3, side=LEFT, anchor=N, fill=BOTH, expand=FALSE) self.tkvw = vtkTkImageViewerWidget(viewerFrame, iv=viewer, width=264, height=264) viewerControls = tkinter.Frame(viewerFrame) viewerControls.pack(side=BOTTOM, anchor=S, fill=BOTH, expand=TRUE) self.tkvw.pack(side=TOP, anchor=N, fill=BOTH, expand=FALSE) downButton = tkinter.Button(viewerControls, text="Down", command=[ViewerDown, self.tkvw]) upButton = tkinter.Button(viewerControls, text="Up", command=[ViewerUp, self.tkvw]) sliceLabel = tkinter.Label(viewerControls, text="slice: " + str(CURSOR_Z * IMAGE_MAG_Z)) downButton.pack(side=LEFT, expand=TRUE, fill=BOTH) upButton.pack(side=LEFT, expand=TRUE, fill=BOTH) sliceLabel.pack(side=LEFT, expand=TRUE, fill=BOTH) # Create the render widget renderFrame = tkinter.Frame(displayFrame) renderFrame.pack(padx=3, pady=3, side=LEFT, anchor=N, fill=BOTH, expand=TRUE) self.tkrw = vtkTkRenderWidget(renderFrame, rw=renWin, width=264, height=264) self.tkrw.pack(side=TOP, anchor=N, fill=BOTH, expand=TRUE) # Bindings self.tkvw.BindTkImageViewer() self.tkrw.BindTkRenderWidget() # Lets add an extra binding of the middle button in the image viewer # to set the cursor location. self.tkvw.bind("<Button-2>", SetCursorFromViewer) self.tkvw.bind("<Shift-Button-1>", SetCursorFromViewer) # Associate the functions with the buttons and label. # downButton.config(command=partial(ViewerDown, self.tkvw)) upButton.config(command=partial(ViewerUp, self.tkvw))
def __init__ (self, master): debug ("In RenderWindow::__init__ ()") Base.Objects.VizObject.__init__ (self) self.frame = Tkinter.Frame (master) self.frame.pack (side='top', fill='both', expand=1) tkw = None self._do_render = 1 stereo = Common.config.stereo if stereo: tkw = vtkTkRenderWidget.vtkTkRenderWidget (self.frame, width=600, height=505, stereo=1) else: tkw = vtkTkRenderWidget.vtkTkRenderWidget (self.frame, width=600, height=505) self.tkwidget = tkw self.tkwidget.pack (expand='true',fill='both') #self.tkwidget.bind ("<KeyPress-q>", self.quit) # disabling surface and wireframe toggling. self.tkwidget.unbind ("<KeyPress-s>") self.tkwidget.unbind ("<KeyPress-w>") self.ren = vtk.vtkRenderer () self.ren.TwoSidedLightingOn () self.renwin = self.tkwidget.GetRenderWindow () self.renwin.AddRenderer (self.ren) if stereo: self.renwin.SetStereoType(stereo[1]) self.renwin.SetStereoRender(stereo[0]) self.camera = self.ren.GetActiveCamera() # this sets up the tkwidget and forces _CurrentRenderer # etc. to be updated self.tkwidget.UpdateRenderer (0.0, 0.0) buttonFrame=Tkinter.Frame (self.frame, relief='sunken', bd=2) buttonFrame.pack (side='bottom') Tkinter.Label (buttonFrame, text="View:").pack (side='left') Tkinter.Button(buttonFrame, text="+X", command=self.x_plus_view).pack(side='left') Tkinter.Button(buttonFrame, text="-X", command=self.x_minus_view).pack(side='left') Tkinter.Button(buttonFrame, text="+Y", command=self.y_plus_view).pack(side='left') Tkinter.Button(buttonFrame, text="-Y", command=self.y_minus_view).pack(side='left') Tkinter.Button(buttonFrame, text="+Z", command=self.z_plus_view).pack(side='left') Tkinter.Button(buttonFrame, text="-Z", command=self.z_minus_view).pack(side='left') #Tkinter.Button(buttonFrame, text="Default View", # command=self.reset_zoom).pack(side='left') Tkinter.Button(buttonFrame, text="Isometric", command=self.isometric_view).pack(side='left') self.set_background (Common.config.bg_color) # Create and bind the picker. self.picker = Picker.Picker(self.frame, self) self.tkwidget.bind ("<KeyPress-p>", self.picker.pick) self.tkwidget.bind ("<KeyPress-P>", self.picker.pick) # Create and bind the Light Manager. self.light_mgr = Lights.LightManager(self.frame, self, self.ren, mode='vtk') self.tkwidget.bind ("<KeyPress-l>", self.light_mgr.config) self.tkwidget.bind ("<KeyPress-L>", self.light_mgr.config) if Common.config.light_cfg: self.light_mgr.load_config(Common.config.light_cfg) self.def_pos = 1 self.root = None self.pipe_objs = self.renwin
if __name__ == "__main__": # prepare a vtk window with an actor for visible feedback. Don't be # be scared, the actual gradient editor code is only 3 lines long, # the rest is setup of the scene. from tvtk.api import tvtk import vtk from vtk.tk import vtkTkRenderWidget from math import cos root = tk.Tk() root.minsize(520, 520) render_frame = tk.Frame(root) render_frame.pack() render_widget = vtkTkRenderWidget.vtkTkRenderWidget(render_frame, width=512, height=512) render_widget.pack(side=tk.BOTTOM, expand='true', fill='both') render_window = render_widget.GetRenderWindow() renderer = vtk.vtkRenderer() renderer.SetBackground(0.2, 0.2, 0.4) render_window.AddRenderer(renderer) image_data = vtk.vtkImageData() N = 72 image_data.SetDimensions(N, N, 1) try: method = image_data.SetScalarComponentFromFloat except AttributeError: method = image_data.SetScalarComponentFromDouble for i in range(N):
def initUI(self) : '''Initialize the UI''' # initialise tkinter self._root = Tkinter.Tk() self._root.title('Protein data visualisation') # tkinter ui # vtk self.renderWidget = vtkTkRenderWidget(self._root, width=1000, height=800) self.renderWidget.pack(expand='true', fill='both', side = Tkinter.RIGHT) wMain = self.renderWidget.GetRenderWindow() wMain.AddRenderer(self.initVtk()) # toggle protein structure settingsManager = Tkinter.Frame(self._root) settingsManager.pack(side = Tkinter.LEFT) self._proteinStructureVisible = Tkinter.IntVar() self._proteinStructureVisible.set(1) self._toggleProteinStructureBox = Tkinter.Checkbutton(settingsManager, text = 'Show protein structure', command = self.toggleProteinStructure, var = self._proteinStructureVisible) self._toggleProteinStructureBox.pack() # toggle current data set dataManager = Tkinter.Frame(settingsManager) dataManager.pack() groupData1 = Tkinter.LabelFrame(dataManager, text = 'Data', padx = 5, pady = 5) groupData1.pack(padx = 10, pady = 10, side = Tkinter.LEFT, anchor = Tkinter.N) self._currentData1 = Tkinter.IntVar() self._currentData1.set(0) for i in range(len(self._proteins)) : Tkinter.Radiobutton(groupData1, text = self._proteins[i].name, command = self.toggleProteinData, var = self._currentData1, value = i).pack(anchor = Tkinter.W) groupData2 = Tkinter.LabelFrame(dataManager, text='Compare with', padx = 5, pady = 5) groupData2.pack(padx = 10, pady = 10, side = Tkinter.RIGHT) self._currentData2 = Tkinter.IntVar() self._currentData2.set(0) for i in range(len(self._proteins)) : Tkinter.Radiobutton(groupData2, text = self._proteins[i].name, command = self.toggleProteinData, var = self._currentData2, value = i).pack(anchor = Tkinter.W) # make sure the correct data set is shown self.toggleProteinData() # color scaling colorManager = Tkinter.LabelFrame(settingsManager, text = 'Color scaling', padx = 5, pady = 5) colorManager.pack() colorManagerLow = Tkinter.LabelFrame(colorManager, text = 'Lower limit', padx = 5, pady = 5) colorManagerLow.pack(side = Tkinter.LEFT) self._colorLow = Tkinter.StringVar() self._colorLow.set("0") self._colorScalerLow = Tkinter.Spinbox(colorManagerLow, from_ = 0, to = self.getScoreRange()[1], textvariable = self._colorLow, width = 8, command = self.updateColorScale, increment = 0.1) self._colorScalerLow.pack() colorManagerHigh = Tkinter.LabelFrame(colorManager, text = 'Upper limit', padx = 5, pady = 5) colorManagerHigh.pack(side = Tkinter.RIGHT) self._colorHigh = Tkinter.StringVar() self._colorHigh.set(str(self.getScoreRange()[1])) self._colorScalerHigh = Tkinter.Spinbox(colorManagerHigh, from_ = 0, to = self.getScoreRange()[1], textvariable = self._colorHigh, width = 8, command = self.updateColorScale, increment = 0.1) self._colorScalerHigh.pack(side = Tkinter.RIGHT) self._root.mainloop()