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()
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)
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)
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()
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)