Commit 9e2fd40e4ed2d9a005d5241fbf039ce77bbbf35f

Authored by Thiago Franco de Moraes
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)