def compute_current_screenshot_data(self): """ Computes/populates Screenshot Description data based ont he current GUI configuration for the current window :return: {screenshotData} """ scr_data = ScreenshotData() self.store_gui_vis_config(scr_data=scr_data) projection_name = str(self.proj_combo_box.currentText()) projection_position = int(self.proj_spin_box.value()) field_name, field_type = self.get_current_field_name_and_type() scr_data.plotData = (field_name, field_type) metadata = self.get_metadata(field_name=scr_data.plotData[0], field_type=scr_data.plotData[1]) if projection_name == '3D': scr_data.spaceDimension = '3D' else: scr_data.spaceDimension = '2D' scr_data.projection = projection_name scr_data.projectionPosition = projection_position scr_data.metadata = metadata return scr_data
def add_2d_screenshot(self, _plotName, _plotType, _projection, _projectionPosition, _camera, metadata=None): if len(self.screenshotDataDict) > self.maxNumberOfScreenshots: print("MAX NUMBER OF SCREENSHOTS HAS BEEN REACHED") scrData = ScreenshotData() scrData.spaceDimension = "2D" scrData.plotData = (_plotName, _plotType) x_size = Configuration.getSetting("Screenshot_X") y_size = Configuration.getSetting("Screenshot_Y") scrData.projection = _projection scrData.projectionPosition = int(_projectionPosition) # import pdb; pdb.set_trace() (scrName, scrCoreName) = self.produce_screenshot_name(scrData) print(" add2DScreenshot(): THIS IS NEW SCRSHOT NAME", scrName) # e.g. Cell_Field_CellField_2D_XY_150 if not scrName in self.screenshotDataDict: scrData.screenshotName = scrName scrData.screenshotCoreName = scrCoreName scrData.screenshotGraphicsWidget = self.screenshotGraphicsWidget # = GraphicsFrameWidget (rf. __init__) scrData.win_width = x_size scrData.win_height = y_size if metadata is not None: scrData.metadata = metadata tvw = self.tabViewWidget() if tvw: tvw.update_active_window_vis_flags(self.screenshotGraphicsWidget) self.store_gui_vis_config(scrData=scrData) scrData.extractCameraInfo(_camera) # so "camera" icon (save images) remembers camera view # on linux there is a problem with X-server/Qt/QVTK implementation and calling resize right after additional QVTK # is created causes segfault so possible "solution" is to do resize right before taking screenshot. # It causes flicker but does not cause segfault. # User should NOT close or minimize this "empty" window (on Linux anyway). if sys.platform == 'Linux' or sys.platform == 'linux' or sys.platform == 'linux2': # pass self.screenshotDataDict[scrData.screenshotName] = scrData else: self.screenshotDataDict[scrData.screenshotName] = scrData else: print("Screenshot ", scrName, " already exists") # serializing all screenshots self.serialize_screenshot_data()
def read_screenshot_description_file_json_379(self, scr_data_container): """ parses screenshot description JSON file and stores instances ScreenshotData in appropriate container :param scr_data_container: {dict} ScreenShotData json dict :return: None """ for scr_name, scr_data_elem in list(scr_data_container.items()): scr_data = ScreenshotData() scr_data.screenshotName = scr_name scr_data.plotData = tuple([ str(x) for x in (scr_data_elem['Plot']['PlotName'], scr_data_elem['Plot']['PlotType']) ]) scr_data.spaceDimension = str(scr_data_elem['Dimension']) try: scr_data.projection = str( scr_data_elem['Projection']['ProjectionPlane']) scr_data.projectionPosition = scr_data_elem['Projection'][ 'ProjectionPosition'] except KeyError: pass scr_data.win_width = scr_data_elem['Size']['Width'] scr_data.win_height = scr_data_elem['Size']['Height'] scr_data.cell_borders_on = scr_data_elem['CellBorders'] scr_data.cells_on = scr_data_elem['Cells'] scr_data.cluster_borders_on = scr_data_elem['ClusterBorders'] scr_data.cell_glyphs_on = scr_data_elem['CellGlyphs'] scr_data.fpp_links_on = scr_data_elem['FPPLinks'] scr_data.bounding_box_on = scr_data_elem['BoundingBox'] scr_data.lattice_axes_on = scr_data_elem['LatticeAxes'] scr_data.lattice_axes_labels_on = scr_data_elem[ 'LatticeAxesLabels'] scr_data.invisible_types = scr_data_elem['TypesInvisible'] cam_settings = [] clipping_range_element = scr_data_elem['CameraClippingRange'] cam_settings.append(float(clipping_range_element['Min'])) cam_settings.append(float(clipping_range_element['Max'])) focal_point_element = scr_data_elem['CameraFocalPoint'] cam_settings.append(float(focal_point_element['x'])) cam_settings.append(float(focal_point_element['y'])) cam_settings.append(float(focal_point_element['z'])) position_element = scr_data_elem['CameraPosition'] cam_settings.append(float(position_element['x'])) cam_settings.append(float(position_element['y'])) cam_settings.append(float(position_element['z'])) view_up_element = scr_data_elem['CameraViewUp'] cam_settings.append(float(view_up_element['x'])) cam_settings.append(float(view_up_element['y'])) cam_settings.append(float(view_up_element['z'])) scr_data.extractCameraInfoFromList(cam_settings) # getting rid of unicode in the keys metadata_dict = {} for k, v in list(scr_data_elem['metadata'].items()): metadata_dict[str(k)] = v scr_data.metadata = metadata_dict # checking for extra metadata entries added # you may reset this list after bumping up the version of json file # todo fix - we will be permissive as far as DisplayMinMaxInfo # extra_metadata_keys = ['DisplayMinMaxInfo'] extra_metadata_keys = [] for key in extra_metadata_keys: if key not in list(metadata_dict.keys()): raise KeyError( 'Missing key in the metadata: {}'.format(key)) # scr_data.screenshotGraphicsWidget = self.screenshotGraphicsWidget self.screenshotDataDict[scr_data.screenshotName] = scr_data