Commit 9e2fd40e4ed2d9a005d5241fbf039ce77bbbf35f
1 parent
0673940c
Exists in
master
Returning plugins
Showing
1 changed file
with
56 additions
and
4 deletions
Show diff stats
invesalius/control.py
| @@ -58,6 +58,7 @@ class Controller(): | @@ -58,6 +58,7 @@ class Controller(): | ||
| 58 | def __init__(self, frame): | 58 | def __init__(self, frame): |
| 59 | self.surface_manager = srf.SurfaceManager() | 59 | self.surface_manager = srf.SurfaceManager() |
| 60 | self.volume = volume.Volume() | 60 | self.volume = volume.Volume() |
| 61 | + self.plugin_manager = plugins.PluginManager() | ||
| 61 | self.__bind_events() | 62 | self.__bind_events() |
| 62 | self.frame = frame | 63 | self.frame = frame |
| 63 | self.progress_dialog = None | 64 | self.progress_dialog = None |
| @@ -76,9 +77,12 @@ class Controller(): | @@ -76,9 +77,12 @@ class Controller(): | ||
| 76 | 77 | ||
| 77 | Publisher.sendMessage('Load Preferences') | 78 | Publisher.sendMessage('Load Preferences') |
| 78 | 79 | ||
| 80 | + self.plugin_manager.find_plugins() | ||
| 81 | + | ||
| 79 | def __bind_events(self): | 82 | def __bind_events(self): |
| 80 | Publisher.subscribe(self.OnImportMedicalImages, 'Import directory') | 83 | Publisher.subscribe(self.OnImportMedicalImages, 'Import directory') |
| 81 | Publisher.subscribe(self.OnImportGroup, 'Import group') | 84 | Publisher.subscribe(self.OnImportGroup, 'Import group') |
| 85 | + Publisher.subscribe(self.OnImportFolder, 'Import folder') | ||
| 82 | Publisher.subscribe(self.OnShowDialogImportDirectory, | 86 | Publisher.subscribe(self.OnShowDialogImportDirectory, |
| 83 | 'Show import directory dialog') | 87 | 'Show import directory dialog') |
| 84 | Publisher.subscribe(self.OnShowDialogImportOtherFiles, | 88 | Publisher.subscribe(self.OnShowDialogImportOtherFiles, |
| @@ -120,6 +124,8 @@ class Controller(): | @@ -120,6 +124,8 @@ class Controller(): | ||
| 120 | 124 | ||
| 121 | Publisher.subscribe(self.Send_affine, 'Get affine matrix') | 125 | Publisher.subscribe(self.Send_affine, 'Get affine matrix') |
| 122 | 126 | ||
| 127 | + Publisher.subscribe(self.create_project_from_matrix, 'Create project from matrix') | ||
| 128 | + | ||
| 123 | def SetBitmapSpacing(self, spacing): | 129 | def SetBitmapSpacing(self, spacing): |
| 124 | proj = prj.Project() | 130 | proj = prj.Project() |
| 125 | proj.spacing = spacing | 131 | proj.spacing = spacing |
| @@ -503,6 +509,33 @@ class Controller(): | @@ -503,6 +509,33 @@ class Controller(): | ||
| 503 | self.LoadProject() | 509 | self.LoadProject() |
| 504 | Publisher.sendMessage("Enable state project", state=True) | 510 | Publisher.sendMessage("Enable state project", state=True) |
| 505 | 511 | ||
| 512 | + def OnImportFolder(self, folder): | ||
| 513 | + Publisher.sendMessage('Begin busy cursor') | ||
| 514 | + folder = os.path.abspath(folder) | ||
| 515 | + | ||
| 516 | + proj = prj.Project() | ||
| 517 | + proj.load_from_folder(folder) | ||
| 518 | + | ||
| 519 | + self.Slice = sl.Slice() | ||
| 520 | + self.Slice._open_image_matrix(proj.matrix_filename, | ||
| 521 | + tuple(proj.matrix_shape), | ||
| 522 | + proj.matrix_dtype) | ||
| 523 | + | ||
| 524 | + self.Slice.window_level = proj.level | ||
| 525 | + self.Slice.window_width = proj.window | ||
| 526 | + | ||
| 527 | + Publisher.sendMessage('Update threshold limits list', | ||
| 528 | + threshold_range=proj.threshold_range) | ||
| 529 | + | ||
| 530 | + session = ses.Session() | ||
| 531 | + filename = proj.name+".inv3" | ||
| 532 | + filename = filename.replace("/", "") #Fix problem case other/Skull_DICOM | ||
| 533 | + dirpath = session.CreateProject(filename) | ||
| 534 | + self.LoadProject() | ||
| 535 | + Publisher.sendMessage("Enable state project", state=True) | ||
| 536 | + | ||
| 537 | + Publisher.sendMessage('End busy cursor') | ||
| 538 | + | ||
| 506 | #------------------------------------------------------------------------------------- | 539 | #------------------------------------------------------------------------------------- |
| 507 | 540 | ||
| 508 | def LoadProject(self): | 541 | def LoadProject(self): |
| @@ -848,13 +881,11 @@ class Controller(): | @@ -848,13 +881,11 @@ class Controller(): | ||
| 848 | def OnOpenOtherFiles(self, filepath): | 881 | def OnOpenOtherFiles(self, filepath): |
| 849 | filepath = utils.decode(filepath, const.FS_ENCODE) | 882 | filepath = utils.decode(filepath, const.FS_ENCODE) |
| 850 | if not(filepath) == None: | 883 | if not(filepath) == None: |
| 851 | - name = filepath.rpartition('\\')[-1].split('.') | ||
| 852 | - | 884 | + name = os.path.basename(filepath).split(".")[0] |
| 853 | group = oth.ReadOthers(filepath) | 885 | group = oth.ReadOthers(filepath) |
| 854 | - | ||
| 855 | if group: | 886 | if group: |
| 856 | matrix, matrix_filename = self.OpenOtherFiles(group) | 887 | matrix, matrix_filename = self.OpenOtherFiles(group) |
| 857 | - self.CreateOtherProject(str(name[0]), matrix, matrix_filename) | 888 | + self.CreateOtherProject(name, matrix, matrix_filename) |
| 858 | self.LoadProject() | 889 | self.LoadProject() |
| 859 | Publisher.sendMessage("Enable state project", state=True) | 890 | Publisher.sendMessage("Enable state project", state=True) |
| 860 | else: | 891 | else: |
| @@ -1056,3 +1087,24 @@ class Controller(): | @@ -1056,3 +1087,24 @@ class Controller(): | ||
| 1056 | 1087 | ||
| 1057 | def ApplyReorientation(self): | 1088 | def ApplyReorientation(self): |
| 1058 | self.Slice.apply_reorientation() | 1089 | self.Slice.apply_reorientation() |
| 1090 | + | ||
| 1091 | + def start_new_inv_instance(self, image, name, spacing, modality, orientation, window_width, window_level): | ||
| 1092 | + p = prj.Project() | ||
| 1093 | + project_folder = tempfile.mkdtemp() | ||
| 1094 | + p.create_project_file(name, spacing, modality, orientation, window_width, window_level, image, folder=project_folder) | ||
| 1095 | + err_msg = '' | ||
| 1096 | + try: | ||
| 1097 | + sp = subprocess.Popen([sys.executable, sys.argv[0], '--import-folder', project_folder], | ||
| 1098 | + stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=os.getcwd()) | ||
| 1099 | + except Exception as err: | ||
| 1100 | + err_msg = str(err) | ||
| 1101 | + else: | ||
| 1102 | + try: | ||
| 1103 | + if sp.wait(2): | ||
| 1104 | + err_msg = sp.stderr.read().decode('utf8') | ||
| 1105 | + sp.terminate() | ||
| 1106 | + except subprocess.TimeoutExpired: | ||
| 1107 | + pass | ||
| 1108 | + | ||
| 1109 | + if err_msg: | ||
| 1110 | + dialog.MessageBox(None, "It was not possible to launch new instance of InVesalius3 dsfa dfdsfa sdfas fdsaf asdfasf dsaa", err_msg) |