def OpenPlistProject(self, filename): import invesalius.data.measures as ms import invesalius.data.mask as msk import invesalius.data.surface as srf if not const.VTK_WARNING: log_path = os.path.join(const.USER_LOG_DIR, 'vtkoutput.txt') fow = vtk.vtkFileOutputWindow() fow.SetFileName(log_path.encode(const.FS_ENCODE)) ow = vtk.vtkOutputWindow() ow.SetInstance(fow) filelist = Extract(filename, tempfile.mkdtemp()) dirpath = os.path.abspath(os.path.split(filelist[0])[0]) # Opening the main file from invesalius 3 project main_plist = os.path.join(dirpath, 'main.plist') project = plistlib.readPlist(main_plist) # case info self.name = project["name"] self.modality = project["modality"] self.original_orientation = project["orientation"] self.window = project["window_width"] self.level = project["window_level"] self.threshold_range = project["scalar_range"] self.spacing = project["spacing"] # Opening the matrix containing the slices filepath = os.path.join(dirpath, project["matrix"]["filename"]) self.matrix_filename = filepath self.matrix_shape = project["matrix"]['shape'] self.matrix_dtype = project["matrix"]['dtype'] # Opening the masks self.mask_dict = {} for index in project["masks"]: filename = project["masks"][index] filepath = os.path.join(dirpath, filename) m = msk.Mask() m.OpenPList(filepath) self.mask_dict[m.index] = m # Opening the surfaces self.surface_dict = {} for index in project["surfaces"]: filename = project["surfaces"][index] filepath = os.path.join(dirpath, filename) s = srf.Surface(int(index)) s.OpenPList(filepath) self.surface_dict[s.index] = s # Opening the measurements self.measurement_dict = {} measurements = plistlib.readPlist( os.path.join(dirpath, project["measurements"])) for index in measurements: measure = ms.Measurement() measure.Load(measurements[index]) self.measurement_dict[int(index)] = measure
def load_from_folder(self, dirpath): """ Loads invesalius3 project files from dipath. """ import invesalius.data.measures as ms import invesalius.data.mask as msk import invesalius.data.surface as srf # Opening the main file from invesalius 3 project main_plist = os.path.join(dirpath, 'main.plist') project = plistlib.readPlist(main_plist) format_version = project["format_version"] if format_version > const.INVESALIUS_ACTUAL_FORMAT_VERSION: from invesalius.gui.dialogs import ImportOldFormatInvFile ImportOldFormatInvFile() # case info self.name = project["name"] self.modality = project["modality"] self.original_orientation = project["orientation"] self.window = project["window_width"] self.level = project["window_level"] self.threshold_range = project["scalar_range"] self.spacing = project["spacing"] if project.get("affine", ""): self.affine = project["affine"] # self.affine = project.get("affine") Publisher.sendMessage('Update affine matrix', affine=np.asarray(self.affine).reshape(4, 4), status=True) self.compress = project.get("compress", True) # Opening the matrix containing the slices filepath = os.path.join(dirpath, project["matrix"]["filename"]) self.matrix_filename = filepath self.matrix_shape = project["matrix"]['shape'] self.matrix_dtype = project["matrix"]['dtype'] # Opening the masks self.mask_dict = {} for index in project.get("masks", []): filename = project["masks"][index] filepath = os.path.join(dirpath, filename) m = msk.Mask() m.spacing = self.spacing m.OpenPList(filepath) self.mask_dict[m.index] = m # Opening the surfaces self.surface_dict = {} for index in project.get("surfaces", []): filename = project["surfaces"][index] filepath = os.path.join(dirpath, filename) s = srf.Surface(int(index)) s.OpenPList(filepath) self.surface_dict[s.index] = s # Opening the measurements self.measurement_dict = {} measures_file = os.path.join( dirpath, project.get("measurements", "measurements.plist")) if os.path.exists(measures_file): measurements = plistlib.readPlist(measures_file) for index in measurements: if measurements[index]["type"] in (const.DENSITY_ELLIPSE, const.DENSITY_POLYGON): measure = ms.DensityMeasurement() else: measure = ms.Measurement() measure.Load(measurements[index]) self.measurement_dict[int(index)] = measure
def OpenPlistProject(self, filename): import invesalius.data.measures as ms import invesalius.data.mask as msk import invesalius.data.surface as srf if not const.VTK_WARNING: log_path = os.path.join(const.USER_LOG_DIR, 'vtkoutput.txt') fow = vtk.vtkFileOutputWindow() fow.SetFileName(log_path.encode(const.FS_ENCODE)) ow = vtk.vtkOutputWindow() ow.SetInstance(fow) filelist = Extract(filename, tempfile.mkdtemp()) dirpath = os.path.abspath(os.path.split(filelist[0])[0]) # Opening the main file from invesalius 3 project main_plist = os.path.join(dirpath ,'main.plist') project = plistlib.readPlist(main_plist) format_version = project["format_version"] if format_version > const.INVESALIUS_ACTUAL_FORMAT_VERSION: from invesalius.gui.dialogs import ImportOldFormatInvFile ImportOldFormatInvFile() # case info self.name = project["name"] self.modality = project["modality"] self.original_orientation = project["orientation"] self.window = project["window_width"] self.level = project["window_level"] self.threshold_range = project["scalar_range"] self.spacing = project["spacing"] if project.get("affine"): self.affine = project["affine"] Publisher.sendMessage('Update affine matrix', affine=self.affine, status=True) self.compress = project.get("compress", True) # Opening the matrix containing the slices filepath = os.path.join(dirpath, project["matrix"]["filename"]) self.matrix_filename = filepath self.matrix_shape = project["matrix"]['shape'] self.matrix_dtype = project["matrix"]['dtype'] # Opening the masks self.mask_dict = {} for index in project["masks"]: filename = project["masks"][index] filepath = os.path.join(dirpath, filename) m = msk.Mask() m.OpenPList(filepath) self.mask_dict[m.index] = m # Opening the surfaces self.surface_dict = {} for index in project["surfaces"]: filename = project["surfaces"][index] filepath = os.path.join(dirpath, filename) s = srf.Surface(int(index)) s.OpenPList(filepath) self.surface_dict[s.index] = s # Opening the measurements self.measurement_dict = {} measurements = plistlib.readPlist(os.path.join(dirpath, project["measurements"])) for index in measurements: if measurements[index]["type"] in (const.DENSITY_ELLIPSE, const.DENSITY_POLYGON): measure = ms.DensityMeasurement() else: measure = ms.Measurement() measure.Load(measurements[index]) self.measurement_dict[int(index)] = measure