def test_get_camera_params(): s = Scene() s.render(interactive=False) cam = s.plotter.camera params = get_camera_params(scene=s) params2 = get_camera_params(camera=cam) check_camera_param(params) check_camera_param(params2)
def _update_camera(self): if self.camera_orientation is not None: camera = self.camera_orientation self.camera_orientation = None else: camera = get_camera_params(scene=self.scene) self.scene.render(camera=camera) self._update() logger.debug(f"GUI: resetting camera to: {self.camera_orientation}")
def _print_camera(self): pms = get_camera_params(scene=self) focal = pms.pop("focalPoint", None) dst = pms.pop("distance", None) names = [ f"[green bold] '{k}'[/green bold]: [{amber}]{v}," for k, v in pms.items() ] print( f"[{deep_purple_light}]Camera parameters:", f"[{orange}] {{", *names, f"[{orange}] }}", f"[{deep_purple_light}]Additional, (optional) parameters:", f"[green bold] 'focalPoint'[/green bold]: [{amber}]{focal},", f"[green bold] 'distance'[/green bold]: [{amber}]{dst},", sep="\n", )
def get_frame_params(self, frame_number): """ Get current parameters (e.g. camera position) based on frame numbe and defined key frames. If frame number is a keyframe or is after a keyframe then the params are those of that/the last keyframe. Else the params of two consecutive keyframes are interpolate using either a linear or sigmoid function. """ if frame_number in self.keyframes_numbers: # Check if current frame is a key frame params = self.keyframes[frame_number] elif frame_number > self.last_keyframe: # check if current frame is past the last keyframe params = self.keyframes[self.last_keyframe] params["callback"] = None else: # interpolate between two key frames prev = [n for n in self.keyframes_numbers if n < frame_number][-1] nxt = [n for n in self.keyframes_numbers if n > frame_number][0] kf1, kf2 = self.keyframes[prev], self.keyframes[nxt] self.segment_fact = (nxt - frame_number) / (nxt - prev) if kf2["interpol"] == "sigma": self.segment_fact = sigma(self.segment_fact) params = dict( camera=self._interpolate_cameras(kf1["camera"], kf2["camera"]), zoom=self._interpolate_values(kf1["zoom"], kf2["zoom"]), callback=None, ) # get current camera (to avoid using scene's default) if params["camera"] is None: params["camera"] = get_camera_params(self.scene) return params
def _update(self): """ Updates the scene's Plotter to add/remove meshes """ if self.camera_orientation is not None: # set_camera(self.scene, self.camera_orientation) camera = self.camera_orientation self.camera_orientation = None else: camera = get_camera_params(scene=self.scene) self.scene.render(camera=camera) # Get actors to render self._update_actors() to_render = [act for act in self.actors.values() if act.is_visible] # Set actors look meshes = [act.mesh.c(act.color).alpha(act.alpha) for act in to_render] # Add axes if self.axes is not None: meshes.append(self.axes) # update actors rendered self.scene.plotter.show( *meshes, interactorStyle=0, bg=brainrender.settings.BACKGROUND_COLOR, ) # Fake a button press to force canvas update self.scene.plotter.interactor.MiddleButtonPressEvent() self.scene.plotter.interactor.MiddleButtonReleaseEvent() # Update list widget update_actors_list(self.actors_list, self.actors) return meshes
def test_set_camera_params(): s = Scene() params = get_camera_params(scene=s) set_camera_params(s.plotter.camera, params)