Ejemplo n.º 1
0
    def CreateSphereMarkers(self, pubsub_evt):
        ball_id = pubsub_evt.data[0]
        ballsize = pubsub_evt.data[1]
        ballcolour = pubsub_evt.data[2]
        coord = pubsub_evt.data[3]
        x, y, z = bases.flip_x(coord)
        
        ball_ref = vtk.vtkSphereSource()
        ball_ref.SetRadius(ballsize)
        ball_ref.SetCenter(x, y, z)

        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInput(ball_ref.GetOutput())

        prop = vtk.vtkProperty()
        prop.SetColor(ballcolour)
        
        #adding a new actor for the present ball
        self.staticballs.append(vtk.vtkActor())
        
        self.staticballs[ball_id].SetMapper(mapper)
        self.staticballs[ball_id].SetProperty(prop)
        
        self.ren.AddActor(self.staticballs[ball_id]) 
        ball_id = ball_id + 1
        self.UpdateRender()
Ejemplo n.º 2
0
 def SetBallReferencePositionBasedOnBound(self, pubsub_evt):
     if self._to_show_ball:
         self.ActivateBallReference(None)
         coord = pubsub_evt.data
         x, y, z = bases.flip_x(coord)
         self.ball_reference.SetCenter(x, y, z)
     else:
         self.DeactivateBallReference(None)
Ejemplo n.º 3
0
    def SetBallReferencePosition(self, coord, angles):
        coord = coord
        angles = angles
        #Coronal Images dont require this transformation - 1 tested
        #and for this case, at navigation, the z axis is inverted
        
        #E se ao inves de fazer o flipx, da pra soh multiplicar o y por -1
        
        x, y, z = bases.flip_x(coord)
        
        #center = self.coilActor.GetCenter()
        
        ##azimutal - psi - rotz
        ##elevation - teta - rotx
        ##roll - phi - roty
        
##        print "center: ", center
        #print "orig: ", orig
        #print "bounds: ", bounds
##        print "coord: ", coord       
        
        transf = vtk.vtkTransform()
        
        if angles and self.init_plh_angles:
            #plh angles variation
            delta_angles = (angles[0] - self.init_plh_angles[0],
                           angles[1] - self.init_plh_angles[1],
                           angles[2] - self.init_plh_angles[2])
            
            transf.Translate(x, y, z) #center
            ##transf.Translate(0, 0, 0) #origin
            
            transf.RotateWXYZ(delta_angles[0], self.vectors[2])
            transf.RotateWXYZ(delta_angles[1], self.vectors[0])
            transf.RotateWXYZ(delta_angles[2], self.vectors[1])
            #transf.Scale(1, 1, 1)
            #transf.Translate(-center[0], -center[1], -center[2]) #- origin
            #transf.Translate(-orig[0], -orig[1], -orig[2])
        else:
            #transf.Translate(-center[0], -center[1], -center[2])
            transf.Translate(x, y, z) #center
            #transf.RotateWXYZ(90, 3.0, 1.0, 0.5)
        try:    
            self.coilActor.SetUserMatrix(transf.GetMatrix())
        except:
            None
        self.ball_reference.SetCenter(x, y, z)
        self.axisAssembly.SetPosition(x, y, z)
Ejemplo n.º 4
0
    def SetVolumeCamera(self, pubsub_evt):
        
        coord = pubsub_evt.data
         
        if len(coord) == 6:
            coord_camera = coord[0:3]
            angles = coord[3:6]
        else:
            coord_camera = coord[0:3]
            angles = None

        self.SetBallReferencePosition(coord_camera, angles)
        
        #Coronal Images dont require this transformation - 1 tested
        #and for this case, at navigation, the z axis is inverted
        coord_camera = np.array(bases.flip_x(coord_camera))

        cam = self.ren.GetActiveCamera()
         
        if self.initial_foco is None:
            self.initial_foco = np.array(cam.GetFocalPoint())

        cam_initialposition = np.array(cam.GetPosition())
        cam_initialfoco = np.array(cam.GetFocalPoint())
         
        cam_sub = cam_initialposition - cam_initialfoco
        cam_sub_norm = np.linalg.norm(cam_sub)
        #vet1 = cam_sub/cam_sub_norm
         
        cam_sub_novo = coord_camera - self.initial_foco
        cam_sub_novo_norm = np.linalg.norm(cam_sub_novo)
        vet2 = cam_sub_novo/cam_sub_novo_norm
        vet2 = vet2*cam_sub_norm + coord_camera

        cam.SetFocalPoint(coord_camera)
        cam.SetPosition(vet2)
        
        self.UpdateRender()
Ejemplo n.º 5
0
 def SetVolumeCamera(self, pubsub_evt):
     
     coord_camera = pubsub_evt.data
     coord_camera = numpy.array(bases.flip_x(coord_camera))
     
     cam = self.ren.GetActiveCamera()
     
     if self.initial_foco is None:
         self.initial_foco = numpy.array(cam.GetFocalPoint())
     
     cam_initialposition = numpy.array(cam.GetPosition())
     cam_initialfoco = numpy.array(cam.GetFocalPoint())
     
     cam_sub = cam_initialposition - cam_initialfoco
     cam_sub_norm = numpy.linalg.norm(cam_sub)
     vet1 = cam_sub/cam_sub_norm
     
     cam_sub_novo = coord_camera - self.initial_foco
     cam_sub_novo_norm = numpy.linalg.norm(cam_sub_novo)
     vet2 = cam_sub_novo/cam_sub_novo_norm
     vet2 = vet2*cam_sub_norm + coord_camera
     
     cam.SetFocalPoint(coord_camera)
     cam.SetPosition(vet2)