Exemple #1
0
 def __init__(self, gfx, frame):
     self.renderer = vtk.vtkOpenGLRenderer()
     self.renwin = vtk.vtkXOpenGLRenderWindow()
     self.renwin.AddRenderer(self.renderer)
     self.renwin.SetStereoTypeToAnaglyph()
     self.iren = vtkTkRenderWindowInteractor(frame,
                                             rw=self.renwin,
                                             width=500,
                                             height=500)
     self.istyle = vtk.vtkInteractorStyleSwitch()
     self.iren.SetInteractorStyle(self.istyle)
     self.istyle.SetCurrentStyleToTrackballCamera()
     self.iren.Initialize()
     self.iren.pack(side='bottom', fill='both', expand=0)
     self.iren.Start()
     self.camera = vtk.vtkCamera()
     self.camera.SetFocalPoint(0, 0, 0)
     self.camera.SetPosition(0, 0, 250)
     self.camera.SetViewUp(0, 0, 0)
     self.camera.SetEyeAngle(5.0)
     self.tm = None
     self.renderer.SetActiveCamera(self.camera)
     self.renwin.Render()
     self.currentmod = None
     self.nbstep = None
     self.oldon = None
     self.tloop = None
     self.tloopobs = None
     self.gfx = gfx
    def InitRenderWindow(self,
                         stereo_on=False,
                         axes_on=False,
                         bkgnd=[0.8, 0.8, 0.8],
                         res_x=600,
                         res_y=600):
        """Sets up the visualisation environment"""
        self.renderer = vtk.vtkOpenGLRenderer()
        self.renderWindow = vtk.vtkRenderWindow()
        self.renderWindow.SetStereoCapableWindow(stereo_on)
        self.renderWindow.SetStereoRender(stereo_on)
        self.renderWindow.SetStereoTypeToSplitViewportHorizontal()
        self.renderWindow.AddRenderer(self.renderer)
        self.renderWindow.SetMultiSamples(0)
        self.renderWindow.SetAlphaBitPlanes(1)

        self.renderer.SetBackground(bkgnd)
        self.renderWindow.SetSize(res_x, res_y)
        self.renderer.ResetCamera()
        self.renderer.GetActiveCamera().Zoom(1)

        self.InitRenderPasses()

        axes = vtk.vtkAxesActor()
        axes.SetConeRadius(0.15)
        axes.AxisLabelsOn()
        if axes_on:
            self.renderer.AddActor(axes)

        self.camera = self.renderer.GetActiveCamera()
        self.windowFilter = vtk.vtkWindowToImageFilter()
        self.windowFilter.SetInput(self.renderWindow)
        self.windowFilter.ReadFrontBufferOff()
        self.writer = vtk.vtkJPEGWriter()
        self.writer.SetInputConnection(self.windowFilter.GetOutputPort())
Exemple #3
0
 def setenv(self, root):
     self.renderer = vtk.vtkOpenGLRenderer()
     #self.renderer.SetBackground(1,1,1)
     self.renwin = vtk.vtkXOpenGLRenderWindow()
     self.renwin.AddRenderer(self.renderer)
     #self.renwin.SetStereoTypeToRedBlue()
     #self.renwin.StereoCapableWindowOn()
     #self.renwin.SetStereoTypeToCrystalEyes()
     #self.renwin.StereoRenderOn() #activer la stereoscopie
     self.renwin.SetStereoTypeToAnaglyph()
     #self.renwin.SetAnaglyphColorMask(4,2) #gauche,droite | r=4, v=2 ,b=1
     self.iren = vtkTkRenderWindowInteractor(root,
                                             rw=self.renwin,
                                             width=1000,
                                             height=800)
     self.istyle = vtk.vtkInteractorStyleSwitch()
     self.iren.SetInteractorStyle(self.istyle)
     self.istyle.SetCurrentStyleToTrackballCamera()
     self.iren.Initialize()
     self.iren.pack(side='top', fill='both', expand=1)
     self.addobservers()
     self.setcam()
     self.setaxes()
     #self.make_fog() #charger le fog par defaut ? /!\ modifier la variable has_fog
     self.iren.Start()
     self.display_ascii_logo()
Exemple #4
0
 def __init__(self):
     super().__init__()
     # WIDGET
     self._widget = QWidget(self)
     self._widget.setAttribute(Qt.WA_TranslucentBackground)
     self.setCentralWidget(self._widget)
     self.resize(900, 900)
     self._widget.event = types.MethodType(self._handle_event, self._widget)
     self._widget.setAttribute(Qt.WA_AcceptTouchEvents)  # 与半透明分开设置
     # VTK
     self._vtk_widget = QVTKRenderWindowInteractor(self._widget)
     self._vtk_widget.resize(900, 900)
     self._ren_win = self._vtk_widget.GetRenderWindow()
     self._ren_win.GetInteractor().SetInteractorStyle(
         vtk.vtkInteractorStyleMultiTouchCamera())
     self._renderer = vtk.vtkOpenGLRenderer()
     self._renderer.SetBackground((0, 0, 0))
     self._renderer.AddActor(self._axis_actor())
     self._ren_win.AddRenderer(self._renderer)
     self._vtk_widget.Start()
     # BUTTON WIDGET
     widget = QWidget(self._widget)
     widget.resize(200, 200)
     widget.setStyleSheet('QWidget {background: red}')
     widget.setToolTip('button test')
     widget.show()
     button = QPushButton(widget)
     button.setStyleSheet('QPushButton {background: blue}')
     button.setText('test')
     button.clicked.connect(lambda: print('clicked'))
     button.show()
Exemple #5
0
    def __init__(self):
        super().__init__()
        signal.signal(signal.SIGINT, self.exit)
        # WIDGET
        self._widget = QWidget(self)
        self.setCentralWidget(self._widget)
        self.resize(900, 900)
        self._widget.event = types.MethodType(self._handle_event, self._widget)
        self._widget.setAttribute(Qt.WA_AcceptTouchEvents
                                  | Qt.WA_TranslucentBackground)
        self._widget.setWindowFlags(Qt.NoDropShadowWindowHint)
        # VTK
        self._vtk_widget = QVTKRenderWindowInteractor(self._widget)
        self._vtk_widget.resize(900, 900)
        self._ren_win = self._vtk_widget.GetRenderWindow()
        self._interactor = self._ren_win.GetInteractor()
        self._vtk_widget.SetInteractorStyle(InteractorStyle())
        # # TEST_WIDGET
        self._test_widget = QWidget(self)
        self._test_widget.resize(300, 300)
        self._test_widget.setStyleSheet(
            'QWidget {background: rgb(60, 60, 60)}')
        # TEST_BTN
        self._button = QPushButton(self._test_widget)
        self._button.setText('test')
        self._button.setStyleSheet(
            'QPushButton {background: rgb(255, 255, 255)}')
        self._button.pressed.connect(self._pressed)
        self._button.released.connect(self._released)
        self._button.resize(100, 30)
        self._button.move(100, 200)
        self._test_widget1 = QToolBox(self._test_widget)
        self._test_widget1.resize(100, 100)
        self._test_widget1.show()
        self._button.show()
        self._test_widget.show()

        # RENDER
        self._renderer = vtk.vtkOpenGLRenderer()
        self._renderer.SetBackground((0, 0, 0))
        self._renderer.AddActor(self._axis_actor())
        for actor in self._stl_actor().values():
            self._renderer.AddActor(actor)
        self._camera = self._renderer.GetActiveCamera()
        self._ren_win.AddRenderer(self._renderer)
        self._ren_win.Render()
        # CAMERA
        self._camera = self._renderer.GetActiveCamera()
        self._camera.SetPosition(13, 0, 0)
        self._vtk_widget.Start()
        # TIMER
        self._timer = QTimer()
        self._timer.setInterval(int(1000 / 60))
        self._timer.timeout.connect(self._render_once)
        self._timer.start()
Exemple #6
0
 def render(self):
     """Render to display"""
     #  define the renderer
     ren = vtk.vtkOpenGLRenderer()
     ren.SetBackground(*self._vtk_args.background_colour)
     # populate the renderer with the meshes
     for segment in self.segments:
         ren = segment.render(ren)
     # render window
     renWin = vtk.vtkRenderWindow()
     renWin.AddRenderer(ren)
     if self._vtk_args.full_screen:
         renWin.FullScreenOn()
     # render window interactor
     iren = vtk.vtkRenderWindowInteractor()
     iren.SetRenderWindow(renWin)
     iren.SetInteractorStyle(vtk.vtkInteractorStyleTrackballCamera())
     # from vtkCubeAxesActor.h
     # define VTK_FLY_OUTER_EDGES     0
     # define VTK_FLY_CLOSEST_TRIAD   1
     # define VTK_FLY_FURTHEST_TRIAD  2
     # define VTK_FLY_STATIC_TRIAD    3
     # define VTK_FLY_STATIC_EDGES    4
     if self._vtk_args.cube_axes is not None:
         cubeAxesActor = vtk.vtkCubeAxesActor()
         cubeAxesActor.SetBounds(ren.ComputeVisiblePropBounds())
         cubeAxesActor.SetCamera(ren.GetActiveCamera())
         cubeAxesActor.SetFlyMode(self._vtk_args.cube_axes)
         cubeAxesActor.SetFlyModeToStaticEdges(
         )  # how the cube axes will appear
         cubeAxesActor.GetTitleTextProperty(0).SetColor(1.0, 1.0, 1.0)
         cubeAxesActor.GetTitleTextProperty(1).SetColor(1.0, 1.0, 1.0)
         cubeAxesActor.GetTitleTextProperty(2).SetColor(1.0, 1.0, 1.0)
         cubeAxesActor.XAxisMinorTickVisibilityOff()
         cubeAxesActor.YAxisMinorTickVisibilityOff()
         cubeAxesActor.ZAxisMinorTickVisibilityOff()
         ren.AddActor(cubeAxesActor)
     #             _actor_count += 1
     #             assert ren.VisibleActorCount() == _actor_count
     # axes: display axes by default
     if not self._vtk_args.no_orientation_axes:
         axesActor = vtk.vtkAxesActor()
         axesWidget = vtk.vtkOrientationMarkerWidget()
         axesWidget.SetOrientationMarker(axesActor)
         axesWidget.SetViewport(0, 0, 0.1, 0.1)
         axesWidget.SetInteractor(iren)
         axesWidget.SetEnabled(1)
         ren.ResetCamera()
     # hello...
     print_date("Initialising...")
     iren.Initialize()
     print_date("Launching VTK viewer...")
     iren.Start()
     print_date("3D view completed.")
Exemple #7
0
    def __init__(self, parent):
        super(QMeshViewer, self).__init__(parent)

        # Make the actual QtWidget a child so that it can be re_parented
        interactor = QVTKRenderWindowInteractor(self)
        self.layout = QtWidgets.QHBoxLayout()
        self.layout.addWidget(interactor)
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(self.layout)

        # set up my VTK Visualization pipeline
        # cut-and-paste from https://lorensen.github.io/VTKExamples/site/Python/GeometricObjects/Sphere/
        colors = vtk.vtkNamedColors()

        # Create a sphere
        sphereSource = vtk.vtkSphereSource()
        sphereSource.SetCenter(0.0, 0.0, 0.0)
        sphereSource.SetRadius(5.0)
        # Make the surface smooth
        sphereSource.SetPhiResolution(100)
        sphereSource.SetThetaResolution(100)

        # Create a mapper
        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(sphereSource.GetOutputPort())

        # Create an actor
        actor = vtk.vtkActor()
        actor.SetMapper(mapper)
        actor.GetProperty().SetColor(colors.GetColor3d("Cornsilk"))
        actor.GetProperty().SetRepresentation(0)
        actor.GetProperty().SetDiffuseColor(colors.GetColor3d("Cornsilk"))
        actor.GetProperty().SetDiffuse(0.8)
        actor.GetProperty().SetSpecular(0.5)
        actor.GetProperty().SetSpecularColor(1., 1., 1.)
        actor.GetProperty().SetSpecularPower(30.)

        renderer = vtk.vtkOpenGLRenderer()
        render_window = interactor.GetRenderWindow()
        render_window.AddRenderer(renderer)

        # TEST
        # interactor.SetRenderWindow(render_window)
        #render_window.SetInteractor(interactor)

        renderer.AddActor(actor)
        renderer.SetBackground(colors.GetColor3d("DarkGreen"))

        self.render_window = render_window
        self.interactor = interactor
        self.renderer = renderer
        self.sphere = sphereSource
        self.actor = actor
Exemple #8
0
 def __init__(self):
     super().__init__()
     # WIDGET
     self._widget = QWidget(self)
     self._widget.setAttribute(Qt.WA_TranslucentBackground | Qt.SubWindow)
     self.setCentralWidget(self._widget)
     self.resize(900, 900)
     self._widget.event = types.MethodType(self._handle_event, self._widget)
     self._widget.setAttribute(Qt.WA_AcceptTouchEvents)  # 与半透明分开设置
     # VTK
     self._vtk_widget = QVTKRenderWindowInteractor(self._widget)
     self._vtk_widget.resize(900, 900)
     self._ren_win = self._vtk_widget.GetRenderWindow()
     # CAMERA
     self._interactor = self._ren_win.GetInteractor()
     self._vtk_widget.SetInteractorStyle(MyEvent())
     # RENDER
     self._renderer = vtk.vtkOpenGLRenderer()
     self._renderer.SetBackground((0, 0, 0))
     self._renderer.AddActor(self._axis_actor())
     self._ren_win.AddRenderer(self._renderer)
     # CAMERA
     self._camera = self._renderer.GetActiveCamera()
     # self._camera_angle = self._camera.GetViewAngle()
     # self._camera_last_angle = 30
     self._camera_pose = [0, 0, 13]
     self._last_camera_pose = [0, 0, 0]
     self.set_camera_pose(pos=[0, 0, 13.0], center=[0, 0, 0], view=[0, 0, 0])
     self._vtk_widget.Start()
     # BUTTON WIDGET
     widget = QWidget(self._widget)
     widget.resize(200, 200)
     widget.setStyleSheet('QWidget {background: red}')
     widget.setToolTip('button test')
     widget.show()
     button = QPushButton(widget)
     button.setStyleSheet('QPushButton {background: blue}')
     button.setText('test')
     button.pressed.connect(self._widget_display)
     button.show()
     # TIMER
     self._event_ena = False
     self._timer = QTimer(self)
     self._timer.setInterval(int(1000/100))
     self._timer.timeout.connect(self._detect_event)
     self._timer.start()
     self._high_timer = QTimer(self)
     self._high_timer.setInterval(int(1000/60))
     self._high_timer.timeout.connect(self._render_once)
def render_simulation_for_multiprocess(path, n_particles, first_step,
                                       last_step, min_Psi, max_Psi,
                                       particles_size, cube_size, camera, view,
                                       info, process_number):

    #start_time = tm.time()

    #if (info>0):
    #    print("path: ", path , "\n", "first step: ", first_step, "  last step: ", last_step)
    #    print(" min_Psi: ", min_Psi, "  max_Psi: ", max_Psi, "  time_step: ", time_step, "ms")

    total_steps = last_step - first_step + 1

    renderer = vtk.vtkOpenGLRenderer()
    renderer.SetBackground(bg_color, bg_color, bg_color)
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.SetSize(2048, 1536)
    #Disables the 3D render window
    renderWindow.SetOffScreenRendering(1)
    renWinInteractor = vtk.vtkRenderWindowInteractor()

    for actual_step in range(0, total_steps):
        actor = actor_man.create_actor(path, n_particles,
                                       actual_step + first_step, min_Psi,
                                       max_Psi, particles_size)
        renderer.AddViewProp(actor)
        '''
        #Add cube to the render
        cubeActor = actor_man.create_cube_actor(cube_size)
        renderer.AddViewProp(cubeActor)
        cubeAxes = actor_man.cube_axes(cube_size)
        renderer.AddViewProp(cubeAxes)
        '''

        renderWindow.AddRenderer(renderer)

        renWinInteractor.SetRenderWindow(renderWindow)
        renWinInteractor.Render()
        renWinInteractor.Initialize()
        if (info > 0):
            print("Pr:", process_number, "  Step:", actual_step + first_step)

        img_save.save_image_camera_setup(renderer, actual_step + first_step,
                                         camera, view)
        #img_save.export_image(renderer, actual_step + first_step)
        renderer.RemoveAllViewProps()
Exemple #10
0
    def initScene(self):
        qDebug('initScene()')
        self.renderer = vtk.vtkOpenGLRenderer()
        self.render_window = self.interactor.GetRenderWindow()
        self.render_window.AddRenderer(self.renderer)

        self.cellPicker = vtk.vtkCellPicker()
        self.cellPicker.SetTolerance(30.0)
        self.interactor.SetPicker(self.cellPicker)

        #* Top background color
        bg_t = np.ones(3) * 245.0 / 255.0

        #* Bottom background color
        bg_b = np.ones(3) * 170.0 / 255.0

        self.renderer.SetBackground(bg_t)
        self.renderer.SetBackground2(bg_b)
        self.renderer.GradientBackgroundOn()
def render_simulation(path, n_particles, first_step, last_step, min_Psi,
                      max_Psi, time_step, particles_size, cube_size, info):
    if (info > 0):
        print("path: ", path, "\n", "first step: ", first_step,
              "  last step: ", last_step)
        print(" min_Psi: ", min_Psi, "  max_Psi: ", max_Psi, "  time_step: ",
              time_step, "ms")

    actor = actor_man.create_actor(path, n_particles, first_step, min_Psi,
                                   max_Psi, particles_size)

    renderer = vtk.vtkOpenGLRenderer()
    renderer.SetBackground(bg_color, bg_color, bg_color)
    renderer.AddViewProp(actor)

    cubeActor = actor_man.create_cube_actor(cube_size)
    renderer.AddViewProp(cubeActor)
    cubeAxes = actor_man.cube_axes(cube_size)
    renderer.AddViewProp(cubeAxes)

    renderWindow = vtk.vtkRenderWindow()
    renderWindow.SetSize(1600, 1200)
    renderWindow.AddRenderer(renderer)

    renWinInteractor = vtk.vtkRenderWindowInteractor()
    renWinInteractor.SetRenderWindow(renderWindow)
    renWinInteractor.Render()

    print("Steps:")
    print(first_step)

    # Initialize must be called prior to creating timer events.
    renWinInteractor.Initialize()

    # Sign up to receive TimerEvent
    timerCallback = vtkTimerCallback(path, n_particles, first_step + 1,
                                     last_step, min_Psi, max_Psi,
                                     particles_size, cube_size, info)
    timerCallback.actor = actor
    renWinInteractor.AddObserver('TimerEvent', timerCallback.execute)
    timerId = renWinInteractor.CreateRepeatingTimer(time_step)

    renWinInteractor.Start()
Exemple #12
0
	def __init__(self,frame):
		self.renderer = vtk.vtkOpenGLRenderer()
		self.renwin = vtk.vtkXOpenGLRenderWindow()
		self.renwin.AddRenderer(self.renderer)
		self.renwin.SetStereoTypeToAnaglyph()
		#self.renwin.SetAnaglyphColorMask(4,2)
		self.iren = vtkTkRenderWindowInteractor(frame,rw=self.renwin, width=300, height=300 )
		self.istyle = vtk.vtkInteractorStyleSwitch()
		self.iren.SetInteractorStyle(self.istyle)
		self.istyle.SetCurrentStyleToTrackballCamera()
		self.iren.Initialize()
		self.iren.pack(side='bottom', fill='none', expand=0)
		self.iren.Start()
		self.camera=vtk.vtkCamera()
		self.camera.SetFocalPoint(0, 0, 0)
		self.camera.SetPosition(0, 0, 250)
		self.camera.SetViewUp(0, 0, 0)
		self.camera.SetEyeAngle(5.0)
		self.renderer.SetActiveCamera(self.camera)
		self.renwin.Render()
Exemple #13
0
	def setenv(self,root):
		self.renderer = vtk.vtkOpenGLRenderer()
		#self.renderer.SetBackground(1,1,1)
		self.renwin = vtk.vtkXOpenGLRenderWindow()
		self.renwin.AddRenderer(self.renderer)
		#self.renwin.SetStereoTypeToRedBlue()
		#self.renwin.StereoCapableWindowOn()
		#self.renwin.SetStereoTypeToCrystalEyes()
		#self.renwin.StereoRenderOn() #activer la stereoscopie
		self.renwin.SetStereoTypeToAnaglyph()
		#self.renwin.SetAnaglyphColorMask(4,2) #gauche,droite | r=4, v=2 ,b=1
		self.iren = vtkTkRenderWindowInteractor(root,rw=self.renwin, width=1000, height=800)
		self.istyle = vtk.vtkInteractorStyleSwitch()
		self.iren.SetInteractorStyle(self.istyle)
		self.istyle.SetCurrentStyleToTrackballCamera()
		self.iren.Initialize()
		self.iren.pack(side='top', fill='both', expand=1)
		self.addobservers()
		self.setcam()
		self.setaxes()
		#self.make_fog() #charger le fog par defaut ? /!\ modifier la variable has_fog
		self.iren.Start()
		self.display_ascii_logo()
Exemple #14
0
    outlineData.SetInputConnection(reader.GetOutputPort())

    mapOutline = vtk.vtkPolyDataMapper()
    mapOutline.SetInputConnection(outlineData.GetOutputPort())

    actor = vtk.vtkActor()
    actor.SetMapper(mapOutline)
    actor.GetProperty().SetColor(colors.GetColor3d("Black"))
    return actor


colors = vtk.vtkNamedColors()

colors.SetColor("SkinColor", 255, 125, 64, 0)

renderer = vtk.vtkOpenGLRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)

fileName1 = '/home/jmh/github/data/MRI/MR-Abdomen.mhd'

skinActor = CreateSkinActor(fileName1)
skinActor.GetProperty().SetColor(colors.GetColor3d("SkinColor"))
skinActor.GetProperty().SetOpacity(.9)  # 0.4
renderer.AddActor(skinActor)

outline = CreateOutline(fileName1)
renderer.AddActor(outline)
Exemple #15
0
def main():
    interactor = vtk.vtkRenderWindowInteractor()

    renderWindow = vtk.vtkRenderWindow()
    renderWindow.SetSize(400, 400)
    renderWindow.SetMultiSamples(0)

    renderWindow.SetAlphaBitPlanes(1)
    interactor.SetRenderWindow(renderWindow)

    renderer = vtk.vtkOpenGLRenderer()
    renderWindow.AddRenderer(renderer)
    renderWindow.SetSize(640, 480)

    rectangleSource = vtk.vtkPlaneSource()
    rectangleSource.SetOrigin(-5.0, 0.0, 5.0)
    rectangleSource.SetPoint1(5.0, 0.0, 5.0)
    rectangleSource.SetPoint2(-5.0, 0.0, -5.0)
    rectangleSource.SetResolution(100, 100)

    rectangleMapper = vtk.vtkPolyDataMapper()
    rectangleMapper.SetInputConnection(rectangleSource.GetOutputPort())

    rectangleMapper.SetScalarVisibility(0)

    shadows = vtk.vtkShadowMapPass()

    seq = vtk.vtkSequencePass()

    passes = vtk.vtkRenderPassCollection()
    passes.AddItem(shadows.GetShadowMapBakerPass())
    passes.AddItem(shadows)
    seq.SetPasses(passes)

    cameraP = vtk.vtkCameraPass()
    cameraP.SetDelegatePass(seq)

    # tell the renderer to use our render pass pipeline
    glrenderer = renderer
    glrenderer.SetPass(cameraP)

    colors = vtk.vtkNamedColors()
    boxColor = colors.GetColor3d("Tomato")
    rectangleColor = colors.GetColor3d("Beige")
    coneColor = colors.GetColor3d("Peacock")
    sphereColor = colors.GetColor3d("Banana")

    rectangleActor = vtk.vtkActor()
    rectangleActor.SetMapper(rectangleMapper)
    rectangleActor.VisibilityOn()
    rectangleActor.GetProperty().SetColor(rectangleColor)

    boxSource = vtk.vtkCubeSource()
    boxSource.SetXLength(2.0)

    boxNormals = vtk.vtkPolyDataNormals()
    boxNormals.SetInputConnection(boxSource.GetOutputPort())
    boxNormals.ComputePointNormalsOff()
    boxNormals.ComputeCellNormalsOn()
    boxNormals.Update()
    boxNormals.GetOutput().GetPointData().SetNormals(None)

    boxMapper = vtk.vtkPolyDataMapper()
    boxMapper.SetInputConnection(boxNormals.GetOutputPort())
    boxMapper.ScalarVisibilityOff()

    boxActor = vtk.vtkActor()
    boxActor.SetMapper(boxMapper)
    boxActor.VisibilityOn()
    boxActor.SetPosition(-2.0, 2.0, 0.0)
    boxActor.GetProperty().SetColor(boxColor)

    coneSource = vtk.vtkConeSource()
    coneSource.SetResolution(24)
    coneSource.SetDirection(1.0, 1.0, 1.0)

    coneMapper = vtk.vtkPolyDataMapper()
    coneMapper.SetInputConnection(coneSource.GetOutputPort())
    coneMapper.SetScalarVisibility(0)

    coneActor = vtk.vtkActor()
    coneActor.SetMapper(coneMapper)
    coneActor.VisibilityOn()
    coneActor.SetPosition(0.0, 1.0, 1.0)
    coneActor.GetProperty().SetColor(coneColor)

    sphereSource = vtk.vtkSphereSource()
    sphereSource.SetThetaResolution(32)
    sphereSource.SetPhiResolution(32)

    sphereMapper = vtk.vtkPolyDataMapper()
    sphereMapper.SetInputConnection(sphereSource.GetOutputPort())
    sphereMapper.ScalarVisibilityOff()

    sphereActor = vtk.vtkActor()
    sphereActor.SetMapper(sphereMapper)

    sphereActor.VisibilityOn()
    sphereActor.SetPosition(2.0, 2.0, -1.0)
    sphereActor.GetProperty().SetColor(sphereColor)

    renderer.AddViewProp(rectangleActor)
    renderer.AddViewProp(boxActor)
    renderer.AddViewProp(coneActor)
    renderer.AddViewProp(sphereActor)

    # Spotlights.

    # lighting the box.
    l1 = vtk.vtkLight()
    l1.SetPosition(-4.0, 4.0, -1.0)
    l1.SetFocalPoint(boxActor.GetPosition())
    l1.SetColor(1.0, 1.0, 1.0)
    l1.PositionalOn()
    renderer.AddLight(l1)
    l1.SwitchOn()

    # lighting the sphere
    l2 = vtk.vtkLight()
    l2.SetPosition(4.0, 5.0, 1.0)
    l2.SetFocalPoint(sphereActor.GetPosition())
    l2.SetColor(1.0, 0.0, 1.0)
    l2.PositionalOn()
    renderer.AddLight(l2)
    l2.SwitchOn()

    # For each spotlight, add a light frustum wireframe representation and a cone
    # wireframe representation, colored with the light color.
    angle = l1.GetConeAngle()
    if l1.LightTypeIsSceneLight() and l1.GetPositional(
    ) and angle < 180.0:  # spotlight
        la = vtk.vtkLightActor()
        la.SetLight(l1)
        renderer.AddViewProp(la)
    angle = l2.GetConeAngle()
    if l2.LightTypeIsSceneLight() and l2.GetPositional(
    ) and angle < 180.0:  # spotlight
        la = vtk.vtkLightActor()
        la.SetLight(l2)
        renderer.AddViewProp(la)

    renderer.SetBackground2(colors.GetColor3d("Silver"))
    renderer.SetBackground(colors.GetColor3d("LightGrey"))
    renderer.SetGradientBackground(True)

    renderWindow.Render()
    renderWindow.SetWindowName('ShadowsLightsDemo')

    renderer.ResetCamera()

    camera = renderer.GetActiveCamera()
    camera.Azimuth(40.0)
    camera.Elevation(10.0)

    renderWindow.Render()

    interactor.Start()
Exemple #16
0
def main():
    if not vtk_version_ok(8, 90, 0):
        print('You need VTK version 8.90 or greater to run this program.')
        return
    path, surface = get_program_parameters()
    cube_path = Path(path)
    if not cube_path.is_dir():
        print('This path does not exist:', cube_path)
        return
    surface = surface.lower()
    available_surfaces = {'boy', 'mobius', 'randomhills', 'torus', 'sphere', 'cube'}
    if surface not in available_surfaces:
        surface = 'boy'
    if surface == 'mobius':
        source = GetMobius()
    elif surface == 'randomhills':
        source = GetRandomHills()
    elif surface == 'torus':
        source = GetTorus()
    elif surface == 'sphere':
        source = GetSphere()
    elif surface == 'cube':
        source = GetCube()
    else:
        source = GetBoy()

    # Load the cube map
    # cubemap = ReadCubeMap(cube_path, '/', '.jpg', 0)
    cubemap = ReadCubeMap(cube_path, '/', '.jpg', 1)
    # cubemap = ReadCubeMap(cube_path/'skybox','', '.jpg', 2)

    # Load the skybox
    # Read it again as there is no deep copy for vtkTexture
    # skybox = ReadCubeMap(cube_path, '/', '.jpg', 0)
    skybox = ReadCubeMap(cube_path, '/', '.jpg', 1)
    # skybox = ReadCubeMap(cube_path, '/skybox', '.jpg', 2)
    skybox.InterpolateOn()
    skybox.MipmapOn()
    skybox.RepeatOff()
    skybox.EdgeClampOn()

    colors = vtk.vtkNamedColors()

    # Set the background color.
    colors.SetColor('BkgColor', [26, 51, 102, 255])

    renderer = vtk.vtkOpenGLRenderer()
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.AddRenderer(renderer)
    interactor = vtk.vtkRenderWindowInteractor()
    interactor.SetRenderWindow(renderWindow)

    # Lets use a smooth metallic surface
    metallicCoefficient = 1.0
    roughnessCoefficient = 0.05

    slwP = SliderProperties()
    slwP.initialValue = metallicCoefficient
    slwP.title = 'Metallicity'

    sliderWidgetMetallic = MakeSliderWidget(slwP)
    sliderWidgetMetallic.SetInteractor(interactor)
    sliderWidgetMetallic.SetAnimationModeToAnimate()
    sliderWidgetMetallic.EnabledOn()

    slwP.initialValue = roughnessCoefficient
    slwP.title = 'Roughness'
    slwP.p1 = [0.1, 0.9]
    slwP.p2 = [0.9, 0.9]

    sliderWidgetRoughness = MakeSliderWidget(slwP)
    sliderWidgetRoughness.SetInteractor(interactor)
    sliderWidgetRoughness.SetAnimationModeToAnimate()
    sliderWidgetRoughness.EnabledOn()

    # Build the pipeline
    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputData(source)

    actor = vtk.vtkActor()
    actor.SetMapper(mapper)

    renderer.UseImageBasedLightingOn()
    if vtk_version_ok(9, 0, 0):
        renderer.SetEnvironmentTexture(cubemap)
    else:
        renderer.SetEnvironmentCubeMap(cubemap)
    actor.GetProperty().SetInterpolationToPBR()

    # configure the basic properties
    actor.GetProperty().SetColor(colors.GetColor3d('White'))
    actor.GetProperty().SetMetallic(metallicCoefficient)
    actor.GetProperty().SetRoughness(roughnessCoefficient)

    # Create the slider callbacks to manipulate metallicity and roughness
    sliderWidgetMetallic.AddObserver(vtk.vtkCommand.InteractionEvent, SliderCallbackMetallic(actor.GetProperty()))
    sliderWidgetRoughness.AddObserver(vtk.vtkCommand.InteractionEvent, SliderCallbackRoughness(actor.GetProperty()))

    renderer.SetBackground(colors.GetColor3d("BkgColor"))
    renderer.AddActor(actor)

    skyboxActor = vtk.vtkSkybox()
    skyboxActor.SetTexture(skybox)
    renderer.AddActor(skyboxActor)

    renderer.UseSphericalHarmonicsOff()

    renderWindow.SetSize(640, 480)
    renderWindow.Render()
    renderWindow.SetWindowName("Skybox-PBR")

    axes = vtk.vtkAxesActor()

    widget = vtk.vtkOrientationMarkerWidget()
    rgba = [0.0, 0.0, 0.0, 0.0]
    colors.GetColor("Carrot", rgba)
    widget.SetOutlineColor(rgba[0], rgba[1], rgba[2])
    widget.SetOrientationMarker(axes)
    widget.SetInteractor(interactor)
    widget.SetViewport(0.0, 0.2, 0.2, 0.4)
    widget.SetEnabled(1)
    widget.InteractiveOn()

    interactor.SetRenderWindow(renderWindow)

    renderWindow.Render()
    interactor.Start()
Exemple #17
0
 def __init__(self):
     super().__init__()
     signal.signal(signal.SIGINT, self.exit)
     self._screen_size = QApplication.primaryScreen().size()
     # WIDGET
     self._widget = QWidget(self)
     self.setCentralWidget(self._widget)
     self._widget.resize(self._screen_size)
     self._widget.event = types.MethodType(self._handle_event, self._widget)
     self._widget.setAttribute(Qt.WA_AcceptTouchEvents | Qt.WA_TranslucentBackground)
     self._widget.setWindowFlags(Qt.NoDropShadowWindowHint)
     # VTK
     self._vtk_widget = QVTKRenderWindowInteractor(self._widget)
     self._vtk_widget.resize(self._screen_size)
     self._ren_win = self._vtk_widget.GetRenderWindow()
     self._interactor = self._ren_win.GetInteractor()
     self._vtk_widget.SetInteractorStyle(InteractorStyle())
     self._sw, self._sh = self._screen_size.width(), self._screen_size.height()
     self.resize(int(self._sw * 0.7), int(self._sh * 0.7))
     self.move(int(self._sw * (1 - 0.7) / 2), int(self._sh * (1 - 0.7) / 2))
     # STYLE
     self._widget.setFocus()
     QApplication.setStyle('Fusion')
     # self.setAttribute(Qt.WA_TranslucentBackground)
     # 开启touch事件之后
     # QMainWindow不可开启此方法,会把子类所有插件变透明,且报qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch) 错误
     # TEST_DOCK
     self._dock = QWidget(self)
     self._dock.resize(70, 150)
     self._dock.move(int(self._sw * 0.7 - 80), 100)
     self._dock.setStyleSheet('QWidget {background: rgb(60, 60, 60)}')
     self._dock.show()
     # TEST_BTN
     self._button = QPushButton(self._dock)
     self._button.setText('test')
     self._button.setStyleSheet('QPushButton {background: rgb(255, 255, 255)}')
     self._button.pressed.connect(self._pressed)
     self._button.released.connect(self._released)
     self._button.resize(60, 60)
     self._button.move(5, 5)
     self._button.show()
     # TEST_PANEL
     self._bar = QWidget(self)
     self._bar.resize(340, 450)
     self._bar.move(int(self._sw * 0.7 - 425), 100)
     self._bar.show()
     self._bar.setVisible(False)
     # TEST_TOOL_BOX
     self._tool_box = QToolBox(self._bar)
     self._tool_box.resize(340, 450)
     self._tool_box.show()
     # RENDER
     self._renderer = vtk.vtkOpenGLRenderer()
     self._renderer.SetBackground((0, 0, 0))
     self._renderer.AddActor(self._axis_actor())
     self._renderer.AddActor(self._stl_actor())
     self._camera = self._renderer.GetActiveCamera()
     self._ren_win.AddRenderer(self._renderer)
     self._ren_win.Render()
     # CAMERA
     self._camera = self._renderer.GetActiveCamera()
     self._camera.SetPosition(13, 0, 0)
     self._vtk_widget.Start()
     # TIMER
     self._timer = QTimer()
     self._timer.setInterval(int(1000 / 60))
     self._timer.timeout.connect(self._render_once)
     self._timer.start()
Exemple #18
0
    mixer_contour.SetValue(0, 1)

    stream_actors = make_stream_actors((0, 15, 30), (0, 1, 0))
    stream_actors += make_stream_actors((0, 45, 30), (0, 0, 1))

    mixer_geometry = vtk.vtkPolyDataMapper()
    mixer_geometry.SetInputConnection(mixer_contour.GetOutputPort())
    mixer_geometry.ScalarVisibilityOff()

    mixer_actor = vtk.vtkOpenGLActor()
    mixer_actor.SetMapper(mixer_geometry)
    mixer_actor.GetProperty().SetColor(.5, .5, .5)
    mixer_actor.GetProperty().SetOpacity(1.)

    # Standard vtk environment stuff
    renderer = vtk.vtkOpenGLRenderer()
    render_window = vtk.vtkRenderWindow()
    render_window.AddRenderer(renderer)
    render_interactor = vtk.vtkRenderWindowInteractor()

    renderer.AddActor(mixer_actor)
    for actor in stream_actors:
        renderer.AddActor(actor)
    renderer.SetBackground(0.1, 0.1, 0.1)
    render_window.SetSize(500, 500)

    render_interactor.SetRenderWindow(render_window)

    def exit_check(obj, event):
        if obj.GetEventPending():
            obj.SetAbortRender(1)
Exemple #19
0
def display(volumes, args):
    """Display the volumes provided in the iterable

    This function relies on VTK to do the visualisation.

    :param list volumes: a list of either MAP, STA or TransformedSTA object
    :param args: command-line arguments
    :type args: argparse.Namespace
    """
    # display data
    # create an actor for each datum
    actors = list()
    for volume in volumes:
        # source
        vol = vtk.vtkImageData()
        z_size, y_size, x_size = volume.data.shape
        x_origin, y_origin, z_origin = volume.origin
        # this is a weirdly complex calculation
        # suppose I have a distance of size D (distance)
        # the index of the first position is S (start)
        # the index of the last position is E (end)
        # the relationship between these three values is
        # E - S + 1 = D
        # therefore, E = D + S - 1
        vol.SetExtent(
            x_origin, x_size + x_origin - 1,
            y_origin, y_size + y_origin - 1,
            z_origin, z_size + z_origin - 1,
        )
        vol.SetOrigin(x_origin, y_origin, z_origin)
        sp_x = volume.x_voxel_size
        sp_y = volume.y_voxel_size
        sp_z = volume.z_voxel_size
        vol.SetSpacing(sp_x, sp_y, sp_z)
        vol.AllocateScalars(vtk.VTK_FLOAT, 1)
        # voxel data
        print(f"Inserting voxel data...", end="")
        # numpy to vtk; https://pyscience.wordpress.com/2014/09/06/numpy-to-vtk-converting-your-numpy-arrays-to-vtk-arrays-and-files/
        voxels = vtk.util.numpy_support.numpy_to_vtk(volume.data.ravel(), deep=1, array_type=vtk.VTK_FLOAT)
        print(f"done!")
        vol.GetPointData().SetScalars(voxels)
        # contour
        contours = vtk.vtkContourFilter()
        contours.SetInputData(vol)
        contours.SetValue(0, args.contour_level)
        contours.Update()
        contoursOutput = contours.GetOutput()
        # data
        obj = vtk.vtkPolyData()
        obj.SetPoints(contoursOutput.GetPoints())
        obj.SetPolys(contoursOutput.GetPolys())
        # mapper
        mapper = vtk.vtkOpenGLPolyDataMapper()
        mapper.SetInputData(obj)
        # actor & transform
        actor = vtk.vtkOpenGLActor()
        actor.SetMapper(mapper)
        actor.GetProperty().SetColor(volume.colour)
        actor.GetProperty().SetOpacity(volume.opacity)
        if isinstance(volume, TransformedSTA):
            transform = vtk.vtkTransform()
            matrix = vtk.vtkMatrix4x4()
            for i in range(4):
                for j in range(4):
                    matrix.SetElement(i, j, volume.transform[i, j])
            transform.SetMatrix(matrix)
            print(transform)
            actor.SetUserTransform(transform)
        actors += [actor]
    # renderer
    renderer = vtk.vtkOpenGLRenderer()
    [renderer.AddActor(actor) for actor in actors]
    # cube axes
    cubeAxesActor = vtk.vtkCubeAxesActor()
    cubeAxesActor.SetBounds(renderer.ComputeVisiblePropBounds())
    cubeAxesActor.SetCamera(renderer.GetActiveCamera())
    cubeAxesActor.SetFlyMode(4)
    cubeAxesActor.SetFlyModeToStaticEdges()  # how the cube axes will appear
    cubeAxesActor.GetTitleTextProperty(0).SetColor(1.0, 1.0, 1.0)
    cubeAxesActor.GetTitleTextProperty(1).SetColor(1.0, 1.0, 1.0)
    cubeAxesActor.GetTitleTextProperty(2).SetColor(1.0, 1.0, 1.0)
    cubeAxesActor.XAxisMinorTickVisibilityOff()
    cubeAxesActor.YAxisMinorTickVisibilityOff()
    cubeAxesActor.ZAxisMinorTickVisibilityOff()
    renderer.AddActor(cubeAxesActor)
    # rendererwindow
    render_window = vtk.vtkRenderWindow()
    render_window.AddRenderer(renderer)
    # render window interactor
    render_window_interactor = vtk.vtkRenderWindowInteractor()
    render_window_interactor.SetRenderWindow(render_window)
    render_window_interactor.SetInteractorStyle(vtk.vtkInteractorStyleTrackballCamera())
    axes_actor = vtk.vtkAxesActor()
    axes_widget = vtk.vtkOrientationMarkerWidget()
    axes_widget.SetOrientationMarker(axes_actor)
    axes_widget.SetViewport(0, 0, 0.2, 0.2)
    axes_widget.SetInteractor(render_window_interactor)
    axes_widget.SetEnabled(1)
    renderer.ResetCamera()
    # display
    render_window_interactor.Initialize()
    render_window_interactor.Start()
    return os.EX_OK
    def __init__(self, file_list,spacing_list,feature_type,irad = 1.2, h_th=-200,
                 glyph_type='sphere', glyph_scale_factor=1,use_field_data=True, opacity_list=[],
                 color_list=[], lung=[]):

        assert feature_type == "ridge_line" or feature_type == "valley_line" \
        or feature_type == "ridge_surface" or feature_type == "valley_surface" \
        or feature_type == "vessel" or feature_type == "airway" \
        or feature_type == "fissure", "Invalid feature type"

        if feature_type == "airway":
          feature_type = "valley_line"
        elif feature_type == "vessel":
          feature_type = "ridge_line"
        elif feature_type == "fissure":
          feature_type = "ridge_surface"

        self.mapper_list = list()
        self.actor_list  = list()
        self.glyph_list  = list()
        self.glyph_type  = glyph_type
        self.file_list   = file_list
        self.spacing_list = spacing_list
        self.opacity_list = opacity_list
        self.irad = irad
        self.h_th = h_th
        self.color_list = color_list
        self.lung = lung
        self.use_field_data = use_field_data
        self.feature_type = feature_type
        self.normal_map=dict()
        self.normal_map['ridge_line'] = "hevec0"
        self.normal_map['valley_line'] = "hevec2"
        self.normal_map['ridge_surface'] = "hevec2"
        self.normal_map['valley_surface'] = "hevec0"
        self.strength_map=dict()
        self.strength_map['ridge_line'] = "h1"
        self.strength_map['valley_line'] = "h1"
        self.strength_map['ridge_surface'] = "h2"
        self.strength_map['valley_surface'] = "h0"

        if feature_type == 'ridge_line' or feature_type == 'valley_line':
            self.height = irad
            self.radius = 0.5
        elif feature_type == 'ridge_surface' or feature_type == 'valley_surface':
            self.height = 0.5
            self.radius = irad

        self.min_rad = 0.5
        self.max_rad = 6
        self.glyph_scale_factor = glyph_scale_factor

        self.capture_prefix = ""
        self.capture_count = 1
        self.image_count = 1

        # VTK Objects
        self.ren = vtk.vtkOpenGLRenderer()
        self.renWin = vtk.vtkRenderWindow()
        self.iren = vtk.vtkRenderWindowInteractor()

        # Volume rendering objects
        self.volumeActor = vtk.vtkVolume()
        self.volumeMapper = vtk.vtkVolumeRayCastMapper()
        #self.volumeMapper = vtk.vtkGPUVolumeRayCastMapper()

        # Variables for the interaction
        self.volume_loaded = False
        self.volume_added_to_renderer = False
        self.volume_size = [0,0,0]

        self.particles_loaded = False
        self.particles_added_to_renderer = False
        self.planeWidgetX = vtk.vtkImagePlaneWidget()
        self.planeWidgetY = vtk.vtkImagePlaneWidget()
        self.planeWidgetZ = vtk.vtkImagePlaneWidget()
        self.lastPlaneWidget = self.planeWidgetX
        self.lastPlaneWidgetIndex = 0
        self.planeWidgetLayer = [0,0,0]
        self.boxWidgetVolume = vtk.vtkBoxWidget()
        self.boxWidgetParticles = vtk.vtkBoxWidget()

        self.planesParticles = vtk.vtkPlanes()
        self.planesParticles.SetBounds(-10000,10000,-10000,10000,-10000,10000); # For some reason planes needs initializaiton
        self.planesVolume = vtk.vtkPlanes()
        self.planesVolume.SetBounds(-10000,10000,-10000,10000,-10000,10000); # For some reason planes needs initializaiton
Exemple #21
0
 def __init__(self, window_zoom=0.1):
     super().__init__()
     signal.signal(signal.SIGINT, self.exit)
     # WINDOW
     # self._screen_size = QApplication.primaryScreen().size()
     self.resize(1800, 1200)
     self._center_widget = QWidget(self)
     self._center_widget.setWindowFlags(Qt.NoDropShadowWindowHint)
     self._center_widget.resize(1800, 1200)
     self._vtk_widget = QVTKRenderWindowInteractor(self._center_widget)
     self._vtk_widget.resize(1800, 1200)
     self.setCentralWidget(self._center_widget)
     self._center_widget.setFocus()
     self._ren_win = self._vtk_widget.GetRenderWindow()
     self._interactor = self._ren_win.GetInteractor()
     QApplication.setStyle('Fusion')
     self.setWindowFlags(Qt.NoDropShadowWindowHint)
     self.setAttribute(Qt.WA_TranslucentBackground)
     # LABEL_WIDGET
     self._label_widget = QWidget(self._center_widget)
     self._label_widget.resize(300, 200)
     # POS_LABEL
     self._pos_label = QLabel(self._label_widget)
     self._pos_label.move(20, 50)
     self._pos_label.resize(200, 30)
     self._pos_label.setStyleSheet('QLabel {color: red}')
     self._pos_label.setText('pos: ')
     # TOUCH_POINT_LABEL
     self._touch_points = 0
     self._touch_point_label = QLabel(self._label_widget)
     self._touch_point_label.move(20, 80)
     self._touch_point_label.resize(100, 30)
     self._touch_point_label.setStyleSheet('QLabel {color: red}')
     self._touch_point_label.setText('touch points: ')
     self._label_widget.setAttribute(Qt.WA_TranslucentBackground)
     self._label_widget.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool)
     self._label_widget.show()
     # WIDGET
     self._widget = QWidget(self._center_widget)
     self._widget.resize(1800, 1200)
     self._widget.event = types.MethodType(self._handle_event, self._widget)
     self._widget.setAttribute(Qt.WA_AcceptTouchEvents)  # 与半透明分开设置
     # # POS_LABEL
     # self._pos_label = QLabel(self._widget)
     # self._pos_label.move(1500, 50)
     # self._pos_label.resize(250, 30)
     # self._pos_label.setStyleSheet('QLabel {color: red}')
     # self._pos_label.setText('pos: ')
     # # TOUCH_POINT_LABEL
     # self._touch_points = 0
     # self._touch_point_label = QLabel(self._widget)
     # self._touch_point_label.move(1500, 80)
     # self._touch_point_label.resize(100, 30)
     # self._touch_point_label.setStyleSheet('QLabel {color: red}')
     # self._touch_point_label.setText('touch points: ')
     self._timer = QTimer()
     self._widget.setAttribute(Qt.WA_TranslucentBackground)
     self._widget.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool)
     self._widget.show()
     # TIMER
     self._timer.setInterval(int(1000 / 60))
     self._timer.timeout.connect(self._render_once)
     self._timer.start()
     # RENDER
     self._renderer = vtk.vtkOpenGLRenderer()
     self._renderer.SetBackground((0, 0, 0))
     self._renderer.AddActor(self._axis_actor())
     self._ren_win.AddRenderer(self._renderer)
     # CAMERA
     self._camera = self._renderer.GetActiveCamera()
     self._camera_pose = [0, 0, 13]
     self._last_camera_pose = [0, 0, 0]
     self._camera_view = [0, 0, 0]
     self._last_camera_view = [0, 0, 0]
     self.set_camera_pose(pos=[0, 0, 13.0],
                          center=[0, 0, 0],
                          view=[0, 0, 0])
     self._vtk_widget.Start()
     # MOUSE_POS_THREAD
     self._thread_switch = False
     self._mouse_pos = self._widget.mapFromGlobal(QCursor.pos())
     self._last_mouse_pos = self._widget.mapFromGlobal(QCursor.pos())
     self._thread = None
def main():
    if not vtk_version_ok(8, 90, 0):
        print('You need VTK version 8.90 or greater to run this program.')
        return
    path, material_fn, albedo_fn, normal_fn, emissive_fn, surface = get_program_parameters(
    )
    cube_path = Path(path)
    if not cube_path.is_dir():
        print('This path does not exist:', cube_path)
        return

    # Load the cube map
    # cubemap = ReadCubeMap(cube_path, '/', '.jpg', 0)
    cubemap = ReadCubeMap(cube_path, '/', '.jpg', 1)
    # cubemap = ReadCubeMap(cube_path, '/skybox', '.jpg', 2)

    # Load the skybox
    # Read it again as there is no deep copy for vtkTexture
    # skybox = ReadCubeMap(cube_path, '/', '.jpg', 0)
    skybox = ReadCubeMap(cube_path, '/', '.jpg', 1)
    # skybox = ReadCubeMap(cube_path, '/skybox', '.jpg', 2)
    skybox.InterpolateOn()
    skybox.RepeatOff()
    skybox.EdgeClampOn()

    # Get the textures
    material = GetTexture(material_fn)
    albedo = GetTexture(albedo_fn)
    albedo.UseSRGBColorSpaceOn()
    normal = GetTexture(normal_fn)
    emissive = GetTexture(emissive_fn)
    emissive.UseSRGBColorSpaceOn()

    # Get the surface
    surface = surface.lower()
    available_surfaces = {
        'boy', 'mobius', 'randomhills', 'torus', 'sphere', 'cube'
    }
    if surface not in available_surfaces:
        surface = 'boy'
    if surface == 'mobius':
        source = GetMobius()
    elif surface == 'randomhills':
        source = GetRandomHills()
    elif surface == 'torus':
        source = GetTorus()
    elif surface == 'sphere':
        source = GetSphere()
    elif surface == 'cube':
        source = GetCube()
    else:
        source = GetBoy()

    colors = vtk.vtkNamedColors()

    # Set the background color.
    colors.SetColor('BkgColor', [26, 51, 102, 255])
    colors.SetColor('VTKBlue', [6, 79, 141, 255])
    # Let's make a complementary colour to VTKBlue
    colors.SetColor('VTKBlueComp', [249, 176, 114, 255])

    renderer = vtk.vtkOpenGLRenderer()
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.AddRenderer(renderer)
    interactor = vtk.vtkRenderWindowInteractor()
    interactor.SetRenderWindow(renderWindow)

    # Lets use a rough metallic surface
    metallicCoefficient = 1.0
    roughnessCoefficient = 0.8
    # Other parameters
    occlusionStrength = 10.0
    normalScale = 10.0
    emissiveCol = colors.GetColor3d('VTKBlueComp')
    emissiveFactor = emissiveCol
    # emissiveFactor = [1.0, 1.0, 1.0]

    slwP = SliderProperties()
    slwP.initialValue = metallicCoefficient
    slwP.title = 'Metallicity'

    sliderWidgetMetallic = MakeSliderWidget(slwP)
    sliderWidgetMetallic.SetInteractor(interactor)
    sliderWidgetMetallic.SetAnimationModeToAnimate()
    sliderWidgetMetallic.EnabledOn()

    slwP.initialValue = roughnessCoefficient
    slwP.title = 'Roughness'
    slwP.p1 = [0.2, 0.9]
    slwP.p2 = [0.8, 0.9]

    sliderWidgetRoughness = MakeSliderWidget(slwP)
    sliderWidgetRoughness.SetInteractor(interactor)
    sliderWidgetRoughness.SetAnimationModeToAnimate()
    sliderWidgetRoughness.EnabledOn()

    slwP.initialValue = occlusionStrength
    slwP.title = 'Occlusion'
    slwP.p1 = [0.1, 0.1]
    slwP.p2 = [0.1, 0.9]

    sliderWidgetOcclusionStrength = MakeSliderWidget(slwP)
    sliderWidgetOcclusionStrength.SetInteractor(interactor)
    sliderWidgetOcclusionStrength.SetAnimationModeToAnimate()
    sliderWidgetOcclusionStrength.EnabledOn()

    slwP.initialValue = normalScale
    slwP.title = 'Normal'
    slwP.p1 = [0.85, 0.1]
    slwP.p2 = [0.85, 0.9]

    sliderWidgetNormal = MakeSliderWidget(slwP)
    sliderWidgetNormal.SetInteractor(interactor)
    sliderWidgetNormal.SetAnimationModeToAnimate()
    sliderWidgetNormal.EnabledOn()

    # Build the pipeline
    mapper = vtk.vtkPolyDataMapper()
    mapper.SetInputData(source)

    actor = vtk.vtkActor()
    actor.SetMapper(mapper)

    actor.GetProperty().SetInterpolationToPBR()

    # configure the basic properties
    actor.GetProperty().SetColor(colors.GetColor3d('White'))
    actor.GetProperty().SetMetallic(metallicCoefficient)
    actor.GetProperty().SetRoughness(roughnessCoefficient)

    # configure textures (needs tcoords on the mesh)
    actor.GetProperty().SetBaseColorTexture(albedo)
    actor.GetProperty().SetORMTexture(material)
    actor.GetProperty().SetOcclusionStrength(occlusionStrength)

    actor.GetProperty().SetEmissiveTexture(emissive)
    actor.GetProperty().SetEmissiveFactor(emissiveFactor)

    # needs tcoords, normals and tangents on the mesh
    actor.GetProperty().SetNormalTexture(normal)
    actor.GetProperty().SetNormalScale(normalScale)

    renderer.UseImageBasedLightingOn()
    if vtk_version_ok(9, 0, 0):
        renderer.SetEnvironmentTexture(cubemap)
    else:
        renderer.SetEnvironmentCubeMap(cubemap)
    renderer.SetBackground(colors.GetColor3d('BkgColor'))
    renderer.AddActor(actor)

    # Comment out if you don't want a skybox
    skyboxActor = vtk.vtkSkybox()
    skyboxActor.SetTexture(skybox)
    renderer.AddActor(skyboxActor)

    renderer.UseSphericalHarmonicsOff()

    # Create the slider callbacks to manipulate metallicity, roughness
    # occlusion strength and normal scaling
    sliderWidgetMetallic.AddObserver(
        vtk.vtkCommand.InteractionEvent,
        SliderCallbackMetallic(actor.GetProperty()))
    sliderWidgetRoughness.AddObserver(
        vtk.vtkCommand.InteractionEvent,
        SliderCallbackRoughness(actor.GetProperty()))
    sliderWidgetOcclusionStrength.AddObserver(
        vtk.vtkCommand.InteractionEvent,
        SliderCallbackOcclusionStrength(actor.GetProperty()))
    sliderWidgetNormal.AddObserver(
        vtk.vtkCommand.InteractionEvent,
        SliderCallbackNormalScale(actor.GetProperty()))

    renderWindow.SetSize(640, 480)
    renderWindow.Render()
    renderWindow.SetWindowName('PhysicallyBasedRendering')

    axes = vtk.vtkAxesActor()

    widget = vtk.vtkOrientationMarkerWidget()
    rgba = [0.0, 0.0, 0.0, 0.0]
    colors.GetColor('Carrot', rgba)
    widget.SetOutlineColor(rgba[0], rgba[1], rgba[2])
    widget.SetOrientationMarker(axes)
    widget.SetInteractor(interactor)
    widget.SetViewport(0.0, 0.0, 0.2, 0.2)
    widget.SetEnabled(1)
    widget.InteractiveOn()

    interactor.SetRenderWindow(renderWindow)

    renderWindow.Render()
    interactor.Start()