Commit 8d6196a1d8ffdd67c545caf11f62d1ac518e49d8
Committed by
GitHub
1 parent
37109ae4
Exists in
master
and in
17 other branches
ENH: Code restructuring, "invesalius.py" now "app.py" (#55)
ENH: Code restructuring, invesalius.py is now app.py
Showing
50 changed files
with
710 additions
and
805 deletions
Show diff stats
@@ -0,0 +1,327 @@ | @@ -0,0 +1,327 @@ | ||
1 | +#!/usr/bin/python | ||
2 | +#-------------------------------------------------------------------------- | ||
3 | +# Software: InVesalius - Software de Reconstrucao 3D de Imagens Medicas | ||
4 | +# Copyright: (C) 2001 Centro de Pesquisas Renato Archer | ||
5 | +# Homepage: http://www.softwarepublico.gov.br | ||
6 | +# Contact: invesalius@cti.gov.br | ||
7 | +# License: GNU - GPL 2 (LICENSE.txt/LICENCA.txt) | ||
8 | +#-------------------------------------------------------------------------- | ||
9 | +# Este programa e software livre; voce pode redistribui-lo e/ou | ||
10 | +# modifica-lo sob os termos da Licenca Publica Geral GNU, conforme | ||
11 | +# publicada pela Free Software Foundation; de acordo com a versao 2 | ||
12 | +# da Licenca. | ||
13 | +# | ||
14 | +# Este programa eh distribuido na expectativa de ser util, mas SEM | ||
15 | +# QUALQUER GARANTIA; sem mesmo a garantia implicita de | ||
16 | +# COMERCIALIZACAO ou de ADEQUACAO A QUALQUER PROPOSITO EM | ||
17 | +# PARTICULAR. Consulte a Licenca Publica Geral GNU para obter mais | ||
18 | +# detalhes. | ||
19 | +#------------------------------------------------------------------------- | ||
20 | + | ||
21 | + | ||
22 | +import multiprocessing | ||
23 | +import optparse as op | ||
24 | +import os | ||
25 | +import sys | ||
26 | +import shutil | ||
27 | + | ||
28 | +if sys.platform == 'win32': | ||
29 | + import _winreg | ||
30 | +else: | ||
31 | + if sys.platform != 'darwin': | ||
32 | + import wxversion | ||
33 | + #wxversion.ensureMinimal('2.8-unicode', optionsRequired=True) | ||
34 | + #wxversion.select('2.8-unicode', optionsRequired=True) | ||
35 | + wxversion.ensureMinimal('3.0') | ||
36 | + | ||
37 | +import wx | ||
38 | +#from wx.lib.pubsub import setupv1 #new wx | ||
39 | +from wx.lib.pubsub import setuparg1# as psv1 | ||
40 | +#from wx.lib.pubsub import Publisher | ||
41 | +#import wx.lib.pubsub as ps | ||
42 | +from wx.lib.pubsub import pub as Publisher | ||
43 | + | ||
44 | +#import wx.lib.agw.advancedsplash as agw | ||
45 | +#if sys.platform == 'linux2': | ||
46 | +# _SplashScreen = agw.AdvancedSplash | ||
47 | +#else: | ||
48 | +# if sys.platform != 'darwin': | ||
49 | +# _SplashScreen = wx.SplashScreen | ||
50 | + | ||
51 | + | ||
52 | +import invesalius.gui.language_dialog as lang_dlg | ||
53 | +import invesalius.i18n as i18n | ||
54 | +import invesalius.session as ses | ||
55 | +import invesalius.utils as utils | ||
56 | + | ||
57 | +# ------------------------------------------------------------------ | ||
58 | + | ||
59 | + | ||
60 | +class InVesalius(wx.App): | ||
61 | + """ | ||
62 | + InVesalius wxPython application class. | ||
63 | + """ | ||
64 | + def OnInit(self): | ||
65 | + """ | ||
66 | + Initialize splash screen and main frame. | ||
67 | + """ | ||
68 | + self.SetAppName("InVesalius 3") | ||
69 | + self.splash = SplashScreen() | ||
70 | + self.splash.Show() | ||
71 | + wx.CallLater(1000,self.Startup2) | ||
72 | + | ||
73 | + return True | ||
74 | + | ||
75 | + def MacOpenFile(self, filename): | ||
76 | + """ | ||
77 | + Open drag & drop files under darwin | ||
78 | + """ | ||
79 | + path = os.path.abspath(filename) | ||
80 | + Publisher.sendMessage('Open project', path) | ||
81 | + | ||
82 | + def Startup2(self): | ||
83 | + self.control = self.splash.control | ||
84 | + self.frame = self.splash.main | ||
85 | + self.SetTopWindow(self.frame) | ||
86 | + self.frame.Show() | ||
87 | + self.frame.Raise() | ||
88 | + | ||
89 | +# ------------------------------------------------------------------ | ||
90 | + | ||
91 | +class SplashScreen(wx.SplashScreen): | ||
92 | + """ | ||
93 | + Splash screen to be shown in InVesalius initialization. | ||
94 | + """ | ||
95 | + def __init__(self): | ||
96 | + # Splash screen image will depend on currently language | ||
97 | + lang = False | ||
98 | + | ||
99 | + # Language information is available in session configuration | ||
100 | + # file. First we need to check if this file exist, if now, it | ||
101 | + # should be created | ||
102 | + create_session = False | ||
103 | + session = ses.Session() | ||
104 | + if not (session.ReadSession()): | ||
105 | + create_session = True | ||
106 | + | ||
107 | + install_lang = 0 | ||
108 | + # Check if there is a language set (if session file exists | ||
109 | + if session.ReadLanguage(): | ||
110 | + lang = session.GetLanguage() | ||
111 | + if (lang != "False"): | ||
112 | + _ = i18n.InstallLanguage(lang) | ||
113 | + install_lang = 1 | ||
114 | + else: | ||
115 | + install_lang = 0 | ||
116 | + else: | ||
117 | + install_lang = 0 | ||
118 | + | ||
119 | + # If no language is set into session file, show dialog so | ||
120 | + # user can select language | ||
121 | + if install_lang == 0: | ||
122 | + dialog = lang_dlg.LanguageDialog() | ||
123 | + | ||
124 | + # FIXME: This works ok in linux2, darwin and win32, | ||
125 | + # except on win64, due to wxWidgets bug | ||
126 | + try: | ||
127 | + ok = (dialog.ShowModal() == wx.ID_OK) | ||
128 | + except wx._core.PyAssertionError: | ||
129 | + ok = True | ||
130 | + finally: | ||
131 | + if ok: | ||
132 | + lang = dialog.GetSelectedLanguage() | ||
133 | + session.SetLanguage(lang) | ||
134 | + _ = i18n.InstallLanguage(lang) | ||
135 | + else: | ||
136 | + homedir = self.homedir = os.path.expanduser('~') | ||
137 | + invdir = os.path.join(homedir, ".invesalius") | ||
138 | + shutil.rmtree(invdir) | ||
139 | + sys.exit() | ||
140 | + | ||
141 | + # Session file should be created... So we set the recent | ||
142 | + # choosen language | ||
143 | + if (create_session): | ||
144 | + session.CreateItens() | ||
145 | + session.SetLanguage(lang) | ||
146 | + session.WriteSessionFile() | ||
147 | + | ||
148 | + session.SaveConfigFileBackup() | ||
149 | + | ||
150 | + | ||
151 | + # Only after language was defined, splash screen will be | ||
152 | + # shown | ||
153 | + if lang: | ||
154 | + # For pt_BR, splash_pt.png should be used | ||
155 | + if (lang.startswith('pt')): | ||
156 | + icon_file = "splash_pt.png" | ||
157 | + else: | ||
158 | + icon_file = "splash_" + lang + ".png" | ||
159 | + | ||
160 | + if hasattr(sys,"frozen") and (sys.frozen == "windows_exe"\ | ||
161 | + or sys.frozen == "console_exe"): | ||
162 | + abs_file_path = os.path.abspath(".." + os.sep) | ||
163 | + path = abs_file_path | ||
164 | + | ||
165 | + path = os.path.join(path, "icons", icon_file) | ||
166 | + else: | ||
167 | + | ||
168 | + path = os.path.join(".","icons", icon_file) | ||
169 | + if not os.path.exists(path): | ||
170 | + path = os.path.join(".", "icons", "splash_en.png") | ||
171 | + | ||
172 | + bmp = wx.Image(path).ConvertToBitmap() | ||
173 | + | ||
174 | + style = wx.SPLASH_TIMEOUT | wx.SPLASH_CENTRE_ON_SCREEN | ||
175 | + wx.SplashScreen.__init__(self, | ||
176 | + bitmap=bmp, | ||
177 | + splashStyle=style, | ||
178 | + milliseconds=1500, | ||
179 | + id=-1, | ||
180 | + parent=None) | ||
181 | + self.Bind(wx.EVT_CLOSE, self.OnClose) | ||
182 | + wx.Yield() | ||
183 | + wx.CallLater(200,self.Startup) | ||
184 | + | ||
185 | + def Startup(self): | ||
186 | + # Importing takes sometime, therefore it will be done | ||
187 | + # while splash is being shown | ||
188 | + from invesalius.gui.frame import Frame | ||
189 | + from invesalius.control import Controller | ||
190 | + from invesalius.project import Project | ||
191 | + | ||
192 | + self.main = Frame(None) | ||
193 | + self.control = Controller(self.main) | ||
194 | + | ||
195 | + self.fc = wx.FutureCall(1, self.ShowMain) | ||
196 | + wx.FutureCall(1, parse_comand_line) | ||
197 | + | ||
198 | + # Check for updates | ||
199 | + from threading import Thread | ||
200 | + p = Thread(target=utils.UpdateCheck, args=()) | ||
201 | + p.start() | ||
202 | + | ||
203 | + def OnClose(self, evt): | ||
204 | + # Make sure the default handler runs too so this window gets | ||
205 | + # destroyed | ||
206 | + evt.Skip() | ||
207 | + self.Hide() | ||
208 | + | ||
209 | + # If the timer is still running then go ahead and show the | ||
210 | + # main frame now | ||
211 | + if self.fc.IsRunning(): | ||
212 | + self.fc.Stop() | ||
213 | + self.ShowMain() | ||
214 | + | ||
215 | + def ShowMain(self): | ||
216 | + # Show main frame | ||
217 | + self.main.Show() | ||
218 | + | ||
219 | + if self.fc.IsRunning(): | ||
220 | + self.Raise() | ||
221 | + | ||
222 | +# ------------------------------------------------------------------ | ||
223 | + | ||
224 | + | ||
225 | +def parse_comand_line(): | ||
226 | + """ | ||
227 | + Handle command line arguments. | ||
228 | + """ | ||
229 | + session = ses.Session() | ||
230 | + | ||
231 | + # Parse command line arguments | ||
232 | + parser = op.OptionParser() | ||
233 | + | ||
234 | + # -d or --debug: print all pubsub messagessent | ||
235 | + parser.add_option("-d", "--debug", | ||
236 | + action="store_true", | ||
237 | + dest="debug") | ||
238 | + | ||
239 | + # -i or --import: import DICOM directory | ||
240 | + # chooses largest series | ||
241 | + parser.add_option("-i", "--import", | ||
242 | + action="store", | ||
243 | + dest="dicom_dir") | ||
244 | + options, args = parser.parse_args() | ||
245 | + | ||
246 | + # If debug argument... | ||
247 | + if options.debug: | ||
248 | + Publisher.subscribe(print_events, Publisher.ALL_TOPICS) | ||
249 | + session.debug = 1 | ||
250 | + | ||
251 | + # If import DICOM argument... | ||
252 | + if options.dicom_dir: | ||
253 | + import_dir = options.dicom_dir | ||
254 | + Publisher.sendMessage('Import directory', import_dir) | ||
255 | + return True | ||
256 | + | ||
257 | + # Check if there is a file path somewhere in what the user wrote | ||
258 | + # In case there is, try opening as it was a inv3 | ||
259 | + else: | ||
260 | + i = len(args) | ||
261 | + while i: | ||
262 | + i -= 1 | ||
263 | + file = args[i] | ||
264 | + if os.path.isfile(file): | ||
265 | + path = os.path.abspath(file) | ||
266 | + Publisher.sendMessage('Open project', path) | ||
267 | + i = 0 | ||
268 | + return True | ||
269 | + return False | ||
270 | + | ||
271 | + | ||
272 | +def print_events(data): | ||
273 | + """ | ||
274 | + Print pubsub messages | ||
275 | + """ | ||
276 | + utils.debug(data.topic) | ||
277 | + | ||
278 | +def main(): | ||
279 | + """ | ||
280 | + Initialize InVesalius GUI | ||
281 | + """ | ||
282 | + application = InVesalius(0) | ||
283 | + application.MainLoop() | ||
284 | + | ||
285 | +if __name__ == '__main__': | ||
286 | + # Needed in win 32 exe | ||
287 | + if hasattr(sys,"frozen") and (sys.frozen == "windows_exe"\ | ||
288 | + or sys.frozen == "console_exe"): | ||
289 | + multiprocessing.freeze_support() | ||
290 | + | ||
291 | + #Click in the .inv3 file support | ||
292 | + root = _winreg.HKEY_CLASSES_ROOT | ||
293 | + key = "InVesalius 3.0\InstallationDir" | ||
294 | + hKey = _winreg.OpenKey (root, key, 0, _winreg.KEY_READ) | ||
295 | + value, type_ = _winreg.QueryValueEx (hKey, "") | ||
296 | + path = os.path.join(value,'dist') | ||
297 | + | ||
298 | + os.chdir(path) | ||
299 | + | ||
300 | + # Create raycasting presets' folder, if it doens't exist | ||
301 | + dirpath = os.path.join(os.path.expanduser('~'), | ||
302 | + ".invesalius", | ||
303 | + "presets") | ||
304 | + if not os.path.isdir(dirpath): | ||
305 | + os.makedirs(dirpath) | ||
306 | + | ||
307 | + # Create logs' folder, if it doesn't exist | ||
308 | + dirpath = os.path.join(os.path.expanduser('~'), | ||
309 | + ".invesalius", | ||
310 | + "logs") | ||
311 | + if not os.path.isdir(dirpath): | ||
312 | + os.makedirs(dirpath) | ||
313 | + | ||
314 | + if hasattr(sys,"frozen") and sys.frozen == "windows_exe": | ||
315 | + # Set system standard error output to file | ||
316 | + path = os.path.join(dirpath, "stderr.log") | ||
317 | + sys.stderr = open(path, "w") | ||
318 | + | ||
319 | + # Add current directory to PYTHONPATH, so other classes can | ||
320 | + # import modules as they were on root invesalius folder | ||
321 | + sys.path.insert(0, '.') | ||
322 | + sys.path.append(".") | ||
323 | + | ||
324 | + | ||
325 | + # Init application | ||
326 | + main() | ||
327 | + |
invesalius/constants.py
@@ -23,8 +23,7 @@ import sys | @@ -23,8 +23,7 @@ import sys | ||
23 | import wx | 23 | import wx |
24 | import itertools | 24 | import itertools |
25 | 25 | ||
26 | -from project import Project | ||
27 | - | 26 | +#from invesalius.project import Project |
28 | INVESALIUS_VERSION = "3.0" | 27 | INVESALIUS_VERSION = "3.0" |
29 | 28 | ||
30 | #--------------- | 29 | #--------------- |
@@ -208,8 +207,10 @@ VOLUME_POSITION = {AXIAL: [AXIAL_VOLUME_CAM_VIEW_UP, AXIAL_VOLUME_CAM_POSITION], | @@ -208,8 +207,10 @@ VOLUME_POSITION = {AXIAL: [AXIAL_VOLUME_CAM_VIEW_UP, AXIAL_VOLUME_CAM_POSITION], | ||
208 | 207 | ||
209 | 208 | ||
210 | # Mask threshold options | 209 | # Mask threshold options |
211 | -proj = Project() | ||
212 | -THRESHOLD_RANGE = proj.threshold_modes[_("Bone")] | 210 | + |
211 | +#proj = Project() | ||
212 | +#THRESHOLD_RANGE = proj.threshold_modes[_("Bone")] | ||
213 | +THRESHOLD_RANGE = [0,3033] | ||
213 | THRESHOLD_PRESETS_INDEX = _("Bone") | 214 | THRESHOLD_PRESETS_INDEX = _("Bone") |
214 | THRESHOLD_HUE_RANGE = (0, 0.6667) | 215 | THRESHOLD_HUE_RANGE = (0, 0.6667) |
215 | THRESHOLD_INVALUE = 5000 | 216 | THRESHOLD_INVALUE = 5000 |
@@ -319,9 +320,25 @@ WINDOW_LEVEL = {_("Abdomen"):(350,50), | @@ -319,9 +320,25 @@ WINDOW_LEVEL = {_("Abdomen"):(350,50), | ||
319 | 320 | ||
320 | REDUCE_IMAGEDATA_QUALITY = 0 | 321 | REDUCE_IMAGEDATA_QUALITY = 0 |
321 | 322 | ||
322 | -ICON_DIR = os.path.abspath(os.path.join('..', 'icons')) | ||
323 | -SAMPLE_DIR = os.path.abspath(os.path.join('..', 'samples')) | ||
324 | -DOC_DIR = os.path.abspath(os.path.join('..', 'docs')) | 323 | +FILE_PATH = os.path.split(__file__)[0] |
324 | + | ||
325 | +if hasattr(sys,"frozen") and (sys.frozen == "windows_exe"\ | ||
326 | + or sys.frozen == "console_exe"): | ||
327 | + abs_path_icon = os.path.abspath(FILE_PATH + os.sep + ".." + os.sep + ".." + os.sep + "..") | ||
328 | + ICON_DIR = os.path.join(abs_path_icon, "icons") | ||
329 | + SAMPLE_DIR = os.path.join(FILE_PATH, 'samples') | ||
330 | + DOC_DIR = os.path.join(FILE_PATH, 'docs') | ||
331 | +else: | ||
332 | + ICON_DIR = os.path.abspath(os.path.join(FILE_PATH, '..', 'icons')) | ||
333 | + SAMPLE_DIR = os.path.abspath(os.path.join(FILE_PATH,'..', 'samples')) | ||
334 | + DOC_DIR = os.path.abspath(os.path.join(FILE_PATH,'..', 'docs')) | ||
335 | + | ||
336 | + | ||
337 | +# MAC App | ||
338 | +if not os.path.exists(ICON_DIR): | ||
339 | + ICON_DIR = os.path.abspath(os.path.join(FILE_PATH, '..', '..', '..', '..', 'icons')) | ||
340 | + SAMPLE_DIR = os.path.abspath(os.path.join(FILE_PATH,'..', '..', '..', '..', 'samples')) | ||
341 | + DOC_DIR = os.path.abspath(os.path.join(FILE_PATH,'..', '..', '..', '..', 'docs')) | ||
325 | 342 | ||
326 | 343 | ||
327 | ID_TO_BMP = {VOL_FRONT: [_("Front"), os.path.join(ICON_DIR, "view_front.png")], | 344 | ID_TO_BMP = {VOL_FRONT: [_("Front"), os.path.join(ICON_DIR, "view_front.png")], |
@@ -336,7 +353,7 @@ ID_TO_BMP = {VOL_FRONT: [_("Front"), os.path.join(ICON_DIR, "view_front.png")], | @@ -336,7 +353,7 @@ ID_TO_BMP = {VOL_FRONT: [_("Front"), os.path.join(ICON_DIR, "view_front.png")], | ||
336 | # if 1, use vtkVolumeRaycastMapper, if 0, use vtkFixedPointVolumeRayCastMapper | 353 | # if 1, use vtkVolumeRaycastMapper, if 0, use vtkFixedPointVolumeRayCastMapper |
337 | TYPE_RAYCASTING_MAPPER = 0 | 354 | TYPE_RAYCASTING_MAPPER = 0 |
338 | 355 | ||
339 | -folder=RAYCASTING_PRESETS_DIRECTORY= os.path.abspath(os.path.join("..", | 356 | +folder=RAYCASTING_PRESETS_DIRECTORY= os.path.abspath(os.path.join(".", |
340 | "presets", | 357 | "presets", |
341 | "raycasting")) | 358 | "raycasting")) |
342 | 359 |
invesalius/control.py
@@ -23,24 +23,24 @@ import wx | @@ -23,24 +23,24 @@ import wx | ||
23 | import numpy | 23 | import numpy |
24 | from wx.lib.pubsub import pub as Publisher | 24 | from wx.lib.pubsub import pub as Publisher |
25 | 25 | ||
26 | -import constants as const | ||
27 | -import data.imagedata_utils as image_utils | ||
28 | -import data.mask as msk | ||
29 | -import data.measures | ||
30 | -import data.slice_ as sl | ||
31 | -import data.surface as srf | ||
32 | -import data.volume as volume | ||
33 | -import gui.dialogs as dialog | ||
34 | -import project as prj | ||
35 | -import reader.analyze_reader as analyze | ||
36 | -import reader.dicom_grouper as dg | ||
37 | -import reader.dicom_reader as dcm | ||
38 | -import reader.bitmap_reader as bmp | ||
39 | -import session as ses | ||
40 | - | ||
41 | - | ||
42 | -import utils | ||
43 | -import gui.dialogs as dialogs | 26 | +import invesalius.constants as const |
27 | +import invesalius.data.imagedata_utils as image_utils | ||
28 | +import invesalius.data.mask as msk | ||
29 | +import invesalius.data.measures as measures | ||
30 | +import invesalius.data.slice_ as sl | ||
31 | +import invesalius.data.surface as srf | ||
32 | +import invesalius.data.volume as volume | ||
33 | +import invesalius.gui.dialogs as dialog | ||
34 | +import invesalius.project as prj | ||
35 | +import invesalius.reader.analyze_reader as analyze | ||
36 | +import invesalius.reader.dicom_grouper as dg | ||
37 | +import invesalius.reader.dicom_reader as dcm | ||
38 | +import invesalius.reader.bitmap_reader as bmp | ||
39 | +import invesalius.session as ses | ||
40 | + | ||
41 | + | ||
42 | +import invesalius.utils as utils | ||
43 | +import invesalius.gui.dialogs as dialogs | ||
44 | import subprocess | 44 | import subprocess |
45 | import sys | 45 | import sys |
46 | 46 | ||
@@ -57,7 +57,7 @@ class Controller(): | @@ -57,7 +57,7 @@ class Controller(): | ||
57 | self.cancel_import = False | 57 | self.cancel_import = False |
58 | #Init session | 58 | #Init session |
59 | session = ses.Session() | 59 | session = ses.Session() |
60 | - self.measure_manager = data.measures.MeasurementManager() | 60 | + self.measure_manager = measures.MeasurementManager() |
61 | 61 | ||
62 | Publisher.sendMessage('Load Preferences') | 62 | Publisher.sendMessage('Load Preferences') |
63 | 63 | ||
@@ -376,8 +376,8 @@ class Controller(): | @@ -376,8 +376,8 @@ class Controller(): | ||
376 | data = evt.data | 376 | data = evt.data |
377 | ok = self.LoadImportBitmapPanel(data) | 377 | ok = self.LoadImportBitmapPanel(data) |
378 | if ok: | 378 | if ok: |
379 | - Publisher.sendMessage('Show import bitmap panel in frame') | ||
380 | - #Publisher.sendMessage("Show import panel in frame") | 379 | + Publisher.sendMessage('Show import bitmap panel in frame') |
380 | + #Publisher.sendMessage("Show import panel in invesalius.gui.frame") as frame | ||
381 | 381 | ||
382 | def LoadImportBitmapPanel(self, data): | 382 | def LoadImportBitmapPanel(self, data): |
383 | #if patient_series and isinstance(patient_series, list): | 383 | #if patient_series and isinstance(patient_series, list): |
@@ -435,6 +435,7 @@ class Controller(): | @@ -435,6 +435,7 @@ class Controller(): | ||
435 | 435 | ||
436 | const.THRESHOLD_OUTVALUE = proj.threshold_range[0] | 436 | const.THRESHOLD_OUTVALUE = proj.threshold_range[0] |
437 | const.THRESHOLD_INVALUE = proj.threshold_range[1] | 437 | const.THRESHOLD_INVALUE = proj.threshold_range[1] |
438 | + const.THRESHOLD_RANGE = proj.threshold_modes[_("Bone")] | ||
438 | 439 | ||
439 | const.WINDOW_LEVEL[_('Default')] = (proj.window, proj.level) | 440 | const.WINDOW_LEVEL[_('Default')] = (proj.window, proj.level) |
440 | const.WINDOW_LEVEL[_('Manual')] = (proj.window, proj.level) | 441 | const.WINDOW_LEVEL[_('Manual')] = (proj.window, proj.level) |
invesalius/data/cursor_actors.py
@@ -21,9 +21,9 @@ import math | @@ -21,9 +21,9 @@ import math | ||
21 | 21 | ||
22 | import numpy | 22 | import numpy |
23 | import vtk | 23 | import vtk |
24 | -import imagedata_utils | ||
25 | -from project import Project | ||
26 | -import constants as const | 24 | +import invesalius.data.imagedata_utils as imagedata_utils |
25 | +from invesalius.project import Project as project | ||
26 | +import invesalius.constants as const | ||
27 | 27 | ||
28 | from vtk.util import numpy_support | 28 | from vtk.util import numpy_support |
29 | 29 | ||
@@ -241,7 +241,6 @@ class CursorCircle(CursorBase): | @@ -241,7 +241,6 @@ class CursorCircle(CursorBase): | ||
241 | """ | 241 | """ |
242 | Function to plot the circle | 242 | Function to plot the circle |
243 | """ | 243 | """ |
244 | - print "Building circle cursor", self.orientation | ||
245 | r = self.radius | 244 | r = self.radius |
246 | sx, sy, sz = self.spacing | 245 | sx, sy, sz = self.spacing |
247 | if self.orientation == 'AXIAL': | 246 | if self.orientation == 'AXIAL': |
@@ -284,12 +283,6 @@ class CursorCircle(CursorBase): | @@ -284,12 +283,6 @@ class CursorCircle(CursorBase): | ||
284 | 283 | ||
285 | self.mapper.SetOrientation(ORIENTATION[self.orientation]) | 284 | self.mapper.SetOrientation(ORIENTATION[self.orientation]) |
286 | 285 | ||
287 | - print '====================================' | ||
288 | - print self.orientation | ||
289 | - print circle_ci.GetSpacing() | ||
290 | - print xi, xf, yi, yf, zi, zf | ||
291 | - print '====================================' | ||
292 | - | ||
293 | def _calculate_area_pixels(self): | 286 | def _calculate_area_pixels(self): |
294 | """ | 287 | """ |
295 | Return the cursor's pixels. | 288 | Return the cursor's pixels. |
invesalius/data/geometry.py
@@ -23,8 +23,8 @@ import math | @@ -23,8 +23,8 @@ import math | ||
23 | import vtk | 23 | import vtk |
24 | from wx.lib.pubsub import pub as Publisher | 24 | from wx.lib.pubsub import pub as Publisher |
25 | 25 | ||
26 | -import utils | ||
27 | -import constants as const | 26 | +import invesalius.utils as utils |
27 | +import invesalius.constants as const | ||
28 | 28 | ||
29 | 29 | ||
30 | class Box(object): | 30 | class Box(object): |
invesalius/data/imagedata_utils.py
@@ -30,12 +30,11 @@ from wx.lib.pubsub import pub as Publisher | @@ -30,12 +30,11 @@ from wx.lib.pubsub import pub as Publisher | ||
30 | from scipy.ndimage import shift | 30 | from scipy.ndimage import shift |
31 | from vtk.util import numpy_support | 31 | from vtk.util import numpy_support |
32 | 32 | ||
33 | -import constants as const | ||
34 | -from data import vtk_utils | ||
35 | -from reader import bitmap_reader | ||
36 | -import utils | ||
37 | -import converters | ||
38 | - | 33 | +import invesalius.constants as const |
34 | +from invesalius.data import vtk_utils as vtk_utils | ||
35 | +import invesalius.reader.bitmap_reader as bitmap_reader | ||
36 | +import invesalius.utils as utils | ||
37 | +import invesalius.data.converters as converters | ||
39 | # TODO: Test cases which are originally in sagittal/coronal orientation | 38 | # TODO: Test cases which are originally in sagittal/coronal orientation |
40 | # and have gantry | 39 | # and have gantry |
41 | 40 |
invesalius/data/mask.py
@@ -26,9 +26,9 @@ import tempfile | @@ -26,9 +26,9 @@ import tempfile | ||
26 | import numpy | 26 | import numpy |
27 | import vtk | 27 | import vtk |
28 | 28 | ||
29 | -import constants as const | ||
30 | -import imagedata_utils as iu | ||
31 | -import session as ses | 29 | +import invesalius.constants as const |
30 | +import invesalius.data.imagedata_utils as iu | ||
31 | +import invesalius.session as ses | ||
32 | 32 | ||
33 | from wx.lib.pubsub import pub as Publisher | 33 | from wx.lib.pubsub import pub as Publisher |
34 | 34 | ||
@@ -110,9 +110,6 @@ class EditionHistory(object): | @@ -110,9 +110,6 @@ class EditionHistory(object): | ||
110 | #self._reload_slice(self.index - 1) | 110 | #self._reload_slice(self.index - 1) |
111 | if h[self.index - 1].orientation == 'VOLUME': | 111 | if h[self.index - 1].orientation == 'VOLUME': |
112 | self.index -= 1 | 112 | self.index -= 1 |
113 | - print "================================" | ||
114 | - print mvolume.shape | ||
115 | - print "================================" | ||
116 | h[self.index].commit_history(mvolume) | 113 | h[self.index].commit_history(mvolume) |
117 | self._reload_slice(self.index) | 114 | self._reload_slice(self.index) |
118 | Publisher.sendMessage("Enable redo", True) | 115 | Publisher.sendMessage("Enable redo", True) |
invesalius/data/measures.py
@@ -10,11 +10,10 @@ from wx.lib.pubsub import pub as Publisher | @@ -10,11 +10,10 @@ from wx.lib.pubsub import pub as Publisher | ||
10 | import numpy as np | 10 | import numpy as np |
11 | import vtk | 11 | import vtk |
12 | 12 | ||
13 | -import constants as const | ||
14 | -import project as prj | ||
15 | -import session as ses | ||
16 | -import utils | ||
17 | - | 13 | +import invesalius.constants as const |
14 | +import invesalius.project as prj | ||
15 | +import invesalius.session as ses | ||
16 | +import invesalius.utils as utils | ||
18 | TYPE = {const.LINEAR: _(u"Linear"), | 17 | TYPE = {const.LINEAR: _(u"Linear"), |
19 | const.ANGULAR: _(u"Angular"), | 18 | const.ANGULAR: _(u"Angular"), |
20 | } | 19 | } |
invesalius/data/polydata_utils.py
@@ -23,7 +23,7 @@ import vtk | @@ -23,7 +23,7 @@ import vtk | ||
23 | import wx | 23 | import wx |
24 | from wx.lib.pubsub import pub as Publisher | 24 | from wx.lib.pubsub import pub as Publisher |
25 | 25 | ||
26 | -import vtk_utils as vu | 26 | +import invesalius.data.vtk_utils as vu |
27 | 27 | ||
28 | # Update progress value in GUI | 28 | # Update progress value in GUI |
29 | UpdateProgress = vu.ShowProgress() | 29 | UpdateProgress = vu.ShowProgress() |
invesalius/data/slice_.py
@@ -23,20 +23,18 @@ import numpy as np | @@ -23,20 +23,18 @@ import numpy as np | ||
23 | import vtk | 23 | import vtk |
24 | from wx.lib.pubsub import pub as Publisher | 24 | from wx.lib.pubsub import pub as Publisher |
25 | 25 | ||
26 | -import constants as const | ||
27 | -import converters | ||
28 | -import imagedata_utils as iu | ||
29 | -import style as st | ||
30 | -import session as ses | ||
31 | -import utils | ||
32 | - | ||
33 | -from mask import Mask | ||
34 | -from project import Project | ||
35 | -from data import mips | ||
36 | - | ||
37 | -from data import transforms | ||
38 | -import transformations | ||
39 | - | 26 | +import invesalius.constants as const |
27 | +import invesalius.data.converters as converters | ||
28 | +import invesalius.data.imagedata_utils as iu | ||
29 | +import invesalius.style as st | ||
30 | +import invesalius.session as ses | ||
31 | +import invesalius.utils as utils | ||
32 | +from invesalius.data.mask import Mask | ||
33 | +from invesalius.project import Project | ||
34 | +from invesalius.data import mips | ||
35 | + | ||
36 | +from invesalius.data import transforms | ||
37 | +import invesalius.data.transformations as transformations | ||
40 | OTHER=0 | 38 | OTHER=0 |
41 | PLIST=1 | 39 | PLIST=1 |
42 | WIDGET=2 | 40 | WIDGET=2 |
@@ -386,7 +384,6 @@ class Slice(object): | @@ -386,7 +384,6 @@ class Slice(object): | ||
386 | def __show_mask(self, pubsub_evt): | 384 | def __show_mask(self, pubsub_evt): |
387 | # "if" is necessary because wx events are calling this before any mask | 385 | # "if" is necessary because wx events are calling this before any mask |
388 | # has been created | 386 | # has been created |
389 | - print "__show_mask" | ||
390 | if self.current_mask: | 387 | if self.current_mask: |
391 | index, value = pubsub_evt.data | 388 | index, value = pubsub_evt.data |
392 | self.ShowMask(index, value) | 389 | self.ShowMask(index, value) |
@@ -889,7 +886,6 @@ class Slice(object): | @@ -889,7 +886,6 @@ class Slice(object): | ||
889 | 886 | ||
890 | def ShowMask(self, index, value): | 887 | def ShowMask(self, index, value): |
891 | "Show a mask given its index and 'show' value (0: hide, other: show)" | 888 | "Show a mask given its index and 'show' value (0: hide, other: show)" |
892 | - print "Showing Mask" | ||
893 | proj = Project() | 889 | proj = Project() |
894 | proj.mask_dict[index].is_shown = value | 890 | proj.mask_dict[index].is_shown = value |
895 | proj.mask_dict[index].on_show() | 891 | proj.mask_dict[index].on_show() |
invesalius/data/slice_data.py
@@ -18,8 +18,8 @@ | @@ -18,8 +18,8 @@ | ||
18 | #-------------------------------------------------------------------------- | 18 | #-------------------------------------------------------------------------- |
19 | import vtk | 19 | import vtk |
20 | 20 | ||
21 | -import constants as const | ||
22 | -import vtk_utils as vu | 21 | +import invesalius.constants as const |
22 | +import invesalius.data.vtk_utils as vu | ||
23 | 23 | ||
24 | BORDER_UP = 1 | 24 | BORDER_UP = 1 |
25 | BORDER_DOWN = 2 | 25 | BORDER_DOWN = 2 |
invesalius/data/styles.py
@@ -30,10 +30,10 @@ import wx | @@ -30,10 +30,10 @@ import wx | ||
30 | 30 | ||
31 | from wx.lib.pubsub import pub as Publisher | 31 | from wx.lib.pubsub import pub as Publisher |
32 | 32 | ||
33 | -import constants as const | ||
34 | -import converters | ||
35 | -import cursor_actors as ca | ||
36 | -import session as ses | 33 | +import invesalius.constants as const |
34 | +import invesalius.data.converters as converters | ||
35 | +import invesalius.data.cursor_actors as ca | ||
36 | +import invesalius.session as ses | ||
37 | 37 | ||
38 | import numpy as np | 38 | import numpy as np |
39 | 39 | ||
@@ -43,16 +43,15 @@ from scipy.ndimage import watershed_ift, generate_binary_structure | @@ -43,16 +43,15 @@ from scipy.ndimage import watershed_ift, generate_binary_structure | ||
43 | from skimage.morphology import watershed | 43 | from skimage.morphology import watershed |
44 | from skimage import filter | 44 | from skimage import filter |
45 | 45 | ||
46 | -from gui import dialogs | ||
47 | -from .measures import MeasureData | 46 | +import invesalius.gui.dialogs as dialogs |
47 | +from invesalius.data.measures import MeasureData | ||
48 | 48 | ||
49 | from . import floodfill | 49 | from . import floodfill |
50 | 50 | ||
51 | -import watershed_process | ||
52 | - | ||
53 | -import utils | ||
54 | -import transformations | ||
55 | -import geometry as geom | 51 | +import invesalius.data.watershed_process as watershed_process |
52 | +import invesalius.utils as utils | ||
53 | +import invesalius.data.transformations as transformations | ||
54 | +import invesalius.data.geometry as geom | ||
56 | 55 | ||
57 | ORIENTATIONS = { | 56 | ORIENTATIONS = { |
58 | "AXIAL": const.AXIAL, | 57 | "AXIAL": const.AXIAL, |
@@ -1895,7 +1894,7 @@ class SelectMaskPartsInteractorStyle(DefaultInteractorStyle): | @@ -1895,7 +1894,7 @@ class SelectMaskPartsInteractorStyle(DefaultInteractorStyle): | ||
1895 | 1894 | ||
1896 | def SetUp(self): | 1895 | def SetUp(self): |
1897 | if not self.config.dlg_visible: | 1896 | if not self.config.dlg_visible: |
1898 | - import data.mask as mask | 1897 | + import invesalius.data.mask as mask |
1899 | default_name = const.MASK_NAME_PATTERN %(mask.Mask.general_index+2) | 1898 | default_name = const.MASK_NAME_PATTERN %(mask.Mask.general_index+2) |
1900 | 1899 | ||
1901 | self.config.mask_name = default_name | 1900 | self.config.mask_name = default_name |
invesalius/data/surface.py
@@ -28,14 +28,14 @@ import vtk | @@ -28,14 +28,14 @@ import vtk | ||
28 | import wx | 28 | import wx |
29 | from wx.lib.pubsub import pub as Publisher | 29 | from wx.lib.pubsub import pub as Publisher |
30 | 30 | ||
31 | -import constants as const | ||
32 | -import imagedata_utils as iu | ||
33 | -import polydata_utils as pu | ||
34 | -import project as prj | ||
35 | -import session as ses | ||
36 | -import surface_process | ||
37 | -import utils as utl | ||
38 | -import vtk_utils as vu | 31 | +import invesalius.constants as const |
32 | +import invesalius.data.imagedata_utils as iu | ||
33 | +import invesalius.data.polydata_utils as pu | ||
34 | +import invesalius.project as prj | ||
35 | +import invesalius.session as ses | ||
36 | +import invesalius.data.surface_process as surface_process | ||
37 | +import invesalius.utils as utl | ||
38 | +import invesalius.data.vtk_utils as vu | ||
39 | 39 | ||
40 | try: | 40 | try: |
41 | import ca_smoothing | 41 | import ca_smoothing |
invesalius/data/surface_process.py
@@ -5,9 +5,9 @@ import time | @@ -5,9 +5,9 @@ import time | ||
5 | import numpy | 5 | import numpy |
6 | import vtk | 6 | import vtk |
7 | 7 | ||
8 | -import i18n | ||
9 | -import converters | ||
10 | -# import imagedata_utils as iu | 8 | +import invesalius.i18n as i18n |
9 | +import invesalius.data.converters as converters | ||
10 | +# import invesalius.data.imagedata_utils as iu | ||
11 | 11 | ||
12 | from scipy import ndimage | 12 | from scipy import ndimage |
13 | 13 |
invesalius/data/viewer_slice.py
@@ -28,8 +28,7 @@ import numpy as np | @@ -28,8 +28,7 @@ import numpy as np | ||
28 | import vtk | 28 | import vtk |
29 | from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor | 29 | from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor |
30 | 30 | ||
31 | -import styles | ||
32 | - | 31 | +import invesalius.data.styles as styles |
33 | import wx | 32 | import wx |
34 | import sys | 33 | import sys |
35 | from wx.lib.pubsub import pub as Publisher | 34 | from wx.lib.pubsub import pub as Publisher |
@@ -39,17 +38,16 @@ try: | @@ -39,17 +38,16 @@ try: | ||
39 | except ImportError: # if it's not there locally, try the wxPython lib. | 38 | except ImportError: # if it's not there locally, try the wxPython lib. |
40 | import wx.lib.agw.floatspin as FS | 39 | import wx.lib.agw.floatspin as FS |
41 | 40 | ||
42 | -import constants as const | ||
43 | -import cursor_actors as ca | ||
44 | -import data.slice_ as sl | ||
45 | -import data.vtk_utils as vtku | ||
46 | -import project | ||
47 | -import slice_data as sd | ||
48 | -import utils | ||
49 | -import session as ses | ||
50 | -from data import converters | ||
51 | - | ||
52 | -from data import measures | 41 | +import invesalius.constants as const |
42 | +import invesalius.data.cursor_actors as ca | ||
43 | +import invesalius.data.slice_ as sl | ||
44 | +import invesalius.data.vtk_utils as vtku | ||
45 | +import invesalius.project as project | ||
46 | +import invesalius.data.slice_data as sd | ||
47 | +import invesalius.utils as utils | ||
48 | +import invesalius.session as ses | ||
49 | +import invesalius.data.converters as converters | ||
50 | +import invesalius.data.measures as measures | ||
53 | 51 | ||
54 | ID_TO_TOOL_ITEM = {} | 52 | ID_TO_TOOL_ITEM = {} |
55 | STR_WL = "WL: %d WW: %d" | 53 | STR_WL = "WL: %d WW: %d" |
@@ -1236,10 +1234,10 @@ class Viewer(wx.Panel): | @@ -1236,10 +1234,10 @@ class Viewer(wx.Panel): | ||
1236 | self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZEWE)) | 1234 | self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZEWE)) |
1237 | 1235 | ||
1238 | def SetSizeNWSECursor(self, pubsub_evt): | 1236 | def SetSizeNWSECursor(self, pubsub_evt): |
1239 | - if sys.platform == 'win32': | ||
1240 | - self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZING)) | ||
1241 | - else: | 1237 | + if sys.platform == 'linux2': |
1242 | self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZENWSE)) | 1238 | self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZENWSE)) |
1239 | + else: | ||
1240 | + self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZING)) | ||
1243 | 1241 | ||
1244 | def OnExportPicture(self, pubsub_evt): | 1242 | def OnExportPicture(self, pubsub_evt): |
1245 | Publisher.sendMessage('Begin busy cursor') | 1243 | Publisher.sendMessage('Begin busy cursor') |
invesalius/data/viewer_volume.py
@@ -28,14 +28,13 @@ import vtk | @@ -28,14 +28,13 @@ import vtk | ||
28 | from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor | 28 | from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor |
29 | from wx.lib.pubsub import pub as Publisher | 29 | from wx.lib.pubsub import pub as Publisher |
30 | 30 | ||
31 | -import constants as const | ||
32 | -import data.bases as bases | ||
33 | -import data.vtk_utils as vtku | ||
34 | -import project as prj | ||
35 | -import style as st | ||
36 | -import utils | ||
37 | - | ||
38 | -from data import measures | 31 | +import invesalius.constants as const |
32 | +import invesalius.data.bases as bases | ||
33 | +import invesalius.data.vtk_utils as vtku | ||
34 | +import invesalius.project as prj | ||
35 | +import invesalius.style as st | ||
36 | +import invesalius.utils as utils | ||
37 | +import invesalius.data.measures as measures | ||
39 | 38 | ||
40 | PROP_MEASURE = 0.8 | 39 | PROP_MEASURE = 0.8 |
41 | 40 |
invesalius/data/volume.py
@@ -25,13 +25,13 @@ import vtk | @@ -25,13 +25,13 @@ import vtk | ||
25 | import wx | 25 | import wx |
26 | from wx.lib.pubsub import pub as Publisher | 26 | from wx.lib.pubsub import pub as Publisher |
27 | 27 | ||
28 | -import constants as const | ||
29 | -import project as prj | ||
30 | -import slice_ | ||
31 | -import converters | ||
32 | -from data import vtk_utils | 28 | +import invesalius.constants as const |
29 | +import invesalius.project as prj | ||
30 | +import invesalius.data.slice_ as slice_ | ||
31 | +import invesalius.data.converters as converters | ||
32 | +import invesalius.data.vtk_utils as vtk_utils | ||
33 | from vtk.util import numpy_support | 33 | from vtk.util import numpy_support |
34 | -import session as ses | 34 | +import invesalius.session as ses |
35 | 35 | ||
36 | 36 | ||
37 | Kernels = { | 37 | Kernels = { |
invesalius/data/vtk_utils.py
@@ -20,9 +20,8 @@ import sys | @@ -20,9 +20,8 @@ import sys | ||
20 | 20 | ||
21 | import vtk | 21 | import vtk |
22 | from wx.lib.pubsub import pub as Publisher | 22 | from wx.lib.pubsub import pub as Publisher |
23 | - | ||
24 | -import constants as const | ||
25 | -from gui.dialogs import ProgressDialog | 23 | +import invesalius.constants as const |
24 | +from invesalius.gui.dialogs import ProgressDialog | ||
26 | 25 | ||
27 | # If you are frightened by the code bellow, or think it must have been result of | 26 | # If you are frightened by the code bellow, or think it must have been result of |
28 | # an identation error, lookup at: | 27 | # an identation error, lookup at: |
invesalius/gui/bitmap_preview_panel.py
@@ -8,11 +8,11 @@ from vtk.util import numpy_support | @@ -8,11 +8,11 @@ from vtk.util import numpy_support | ||
8 | from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor | 8 | from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor |
9 | from wx.lib.pubsub import pub as Publisher | 9 | from wx.lib.pubsub import pub as Publisher |
10 | 10 | ||
11 | -import constants as const | ||
12 | -import data.vtk_utils as vtku | ||
13 | -from data import converters | ||
14 | -from reader import bitmap_reader | ||
15 | -import utils | 11 | +import invesalius.constants as const |
12 | +import invesalius.data.vtk_utils as vtku | ||
13 | +import invesalius.data.converters as converters | ||
14 | +import invesalius.reader.bitmap_reader as bitmap_reader | ||
15 | +import invesalius.utils as utils | ||
16 | 16 | ||
17 | NROWS = 3 | 17 | NROWS = 3 |
18 | NCOLS = 6 | 18 | NCOLS = 6 |
invesalius/gui/data_notebook.py
@@ -20,6 +20,7 @@ | @@ -20,6 +20,7 @@ | ||
20 | #-------------------------------------------------------------------------- | 20 | #-------------------------------------------------------------------------- |
21 | import sys | 21 | import sys |
22 | import platform | 22 | import platform |
23 | +import os | ||
23 | 24 | ||
24 | try: | 25 | try: |
25 | import Image | 26 | import Image |
@@ -32,11 +33,11 @@ import wx.lib.flatnotebook as fnb | @@ -32,11 +33,11 @@ import wx.lib.flatnotebook as fnb | ||
32 | import wx.lib.platebtn as pbtn | 33 | import wx.lib.platebtn as pbtn |
33 | from wx.lib.pubsub import pub as Publisher | 34 | from wx.lib.pubsub import pub as Publisher |
34 | 35 | ||
35 | -import constants as const | ||
36 | -import data.slice_ as slice_ | ||
37 | -import gui.dialogs as dlg | ||
38 | -import gui.widgets.listctrl as listmix | ||
39 | -import utils as ul | 36 | +import invesalius.constants as const |
37 | +import invesalius.data.slice_ as slice_ | ||
38 | +import invesalius.gui.dialogs as dlg | ||
39 | +import invesalius.gui.widgets.listctrl as listmix | ||
40 | +import invesalius.utils as ul | ||
40 | 41 | ||
41 | 42 | ||
42 | BTN_NEW, BTN_REMOVE, BTN_DUPLICATE = [wx.NewId() for i in xrange(3)] | 43 | BTN_NEW, BTN_REMOVE, BTN_DUPLICATE = [wx.NewId() for i in xrange(3)] |
@@ -148,11 +149,11 @@ class MeasureButtonControlPanel(wx.Panel): | @@ -148,11 +149,11 @@ class MeasureButtonControlPanel(wx.Panel): | ||
148 | def __init_gui(self): | 149 | def __init_gui(self): |
149 | 150 | ||
150 | # Bitmaps to be used in plate buttons | 151 | # Bitmaps to be used in plate buttons |
151 | - BMP_NEW = wx.Bitmap("../icons/data_new.png", | 152 | + BMP_NEW = wx.Bitmap(os.path.join(const.ICON_DIR, "data_new.png"), |
152 | wx.BITMAP_TYPE_PNG) | 153 | wx.BITMAP_TYPE_PNG) |
153 | - BMP_REMOVE = wx.Bitmap("../icons/data_remove.png", | 154 | + BMP_REMOVE = wx.Bitmap(os.path.join(const.ICON_DIR, "data_remove.png"), |
154 | wx.BITMAP_TYPE_PNG) | 155 | wx.BITMAP_TYPE_PNG) |
155 | - BMP_DUPLICATE = wx.Bitmap("../icons/data_duplicate.png", | 156 | + BMP_DUPLICATE = wx.Bitmap(os.path.join(const.ICON_DIR, "data_duplicate.png"), |
156 | wx.BITMAP_TYPE_PNG) | 157 | wx.BITMAP_TYPE_PNG) |
157 | 158 | ||
158 | # Plate buttons based on previous bitmaps | 159 | # Plate buttons based on previous bitmaps |
@@ -261,11 +262,11 @@ class ButtonControlPanel(wx.Panel): | @@ -261,11 +262,11 @@ class ButtonControlPanel(wx.Panel): | ||
261 | def __init_gui(self): | 262 | def __init_gui(self): |
262 | 263 | ||
263 | # Bitmaps to be used in plate buttons | 264 | # Bitmaps to be used in plate buttons |
264 | - BMP_NEW = wx.Bitmap("../icons/data_new.png", | 265 | + BMP_NEW = wx.Bitmap(os.path.join(const.ICON_DIR, "data_new.png"), |
265 | wx.BITMAP_TYPE_PNG) | 266 | wx.BITMAP_TYPE_PNG) |
266 | - BMP_REMOVE = wx.Bitmap("../icons/data_remove.png", | 267 | + BMP_REMOVE = wx.Bitmap(os.path.join(const.ICON_DIR, "data_remove.png"), |
267 | wx.BITMAP_TYPE_PNG) | 268 | wx.BITMAP_TYPE_PNG) |
268 | - BMP_DUPLICATE = wx.Bitmap("../icons/data_duplicate.png", | 269 | + BMP_DUPLICATE = wx.Bitmap(os.path.join(const.ICON_DIR, "data_duplicate.png"), |
269 | wx.BITMAP_TYPE_PNG) | 270 | wx.BITMAP_TYPE_PNG) |
270 | 271 | ||
271 | # Plate buttons based on previous bitmaps | 272 | # Plate buttons based on previous bitmaps |
@@ -452,13 +453,13 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | @@ -452,13 +453,13 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | ||
452 | def __init_image_list(self): | 453 | def __init_image_list(self): |
453 | self.imagelist = wx.ImageList(16, 16) | 454 | self.imagelist = wx.ImageList(16, 16) |
454 | 455 | ||
455 | - image = wx.Image("../icons/object_invisible.jpg") | 456 | + image = wx.Image(os.path.join(const.ICON_DIR, "object_invisible.jpg")) |
456 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) | 457 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) |
457 | bitmap.SetWidth(16) | 458 | bitmap.SetWidth(16) |
458 | bitmap.SetHeight(16) | 459 | bitmap.SetHeight(16) |
459 | img_null = self.imagelist.Add(bitmap) | 460 | img_null = self.imagelist.Add(bitmap) |
460 | 461 | ||
461 | - image = wx.Image("../icons/object_visible.jpg") | 462 | + image = wx.Image(os.path.join(const.ICON_DIR, "object_visible.jpg")) |
462 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) | 463 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) |
463 | bitmap.SetWidth(16) | 464 | bitmap.SetWidth(16) |
464 | bitmap.SetHeight(16) | 465 | bitmap.SetHeight(16) |
@@ -466,7 +467,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | @@ -466,7 +467,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | ||
466 | 467 | ||
467 | self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL) | 468 | self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL) |
468 | 469 | ||
469 | - self.image_gray = Image.open("../icons/object_colour.jpg") | 470 | + self.image_gray = Image.open(os.path.join(const.ICON_DIR, "object_colour.jpg")) |
470 | 471 | ||
471 | def OnEditLabel(self, evt): | 472 | def OnEditLabel(self, evt): |
472 | Publisher.sendMessage('Change mask name', | 473 | Publisher.sendMessage('Change mask name', |
@@ -586,11 +587,11 @@ class SurfaceButtonControlPanel(wx.Panel): | @@ -586,11 +587,11 @@ class SurfaceButtonControlPanel(wx.Panel): | ||
586 | def __init_gui(self): | 587 | def __init_gui(self): |
587 | 588 | ||
588 | # Bitmaps to be used in plate buttons | 589 | # Bitmaps to be used in plate buttons |
589 | - BMP_NEW = wx.Bitmap("../icons/data_new.png", | 590 | + BMP_NEW = wx.Bitmap(os.path.join(const.ICON_DIR, "data_new.png"), |
590 | wx.BITMAP_TYPE_PNG) | 591 | wx.BITMAP_TYPE_PNG) |
591 | - BMP_REMOVE = wx.Bitmap("../icons/data_remove.png", | 592 | + BMP_REMOVE = wx.Bitmap(os.path.join(const.ICON_DIR, "data_remove.png"), |
592 | wx.BITMAP_TYPE_PNG) | 593 | wx.BITMAP_TYPE_PNG) |
593 | - BMP_DUPLICATE = wx.Bitmap("../icons/data_duplicate.png", | 594 | + BMP_DUPLICATE = wx.Bitmap(os.path.join(const.ICON_DIR, "data_duplicate.png"), |
594 | wx.BITMAP_TYPE_PNG) | 595 | wx.BITMAP_TYPE_PNG) |
595 | 596 | ||
596 | # Plate buttons based on previous bitmaps | 597 | # Plate buttons based on previous bitmaps |
@@ -781,13 +782,13 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | @@ -781,13 +782,13 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | ||
781 | def __init_image_list(self): | 782 | def __init_image_list(self): |
782 | self.imagelist = wx.ImageList(16, 16) | 783 | self.imagelist = wx.ImageList(16, 16) |
783 | 784 | ||
784 | - image = wx.Image("../icons/object_invisible.jpg") | 785 | + image = wx.Image(os.path.join(const.ICON_DIR, "object_invisible.jpg")) |
785 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) | 786 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) |
786 | bitmap.SetWidth(16) | 787 | bitmap.SetWidth(16) |
787 | bitmap.SetHeight(16) | 788 | bitmap.SetHeight(16) |
788 | img_null = self.imagelist.Add(bitmap) | 789 | img_null = self.imagelist.Add(bitmap) |
789 | 790 | ||
790 | - image = wx.Image("../icons//object_visible.jpg") | 791 | + image = wx.Image(os.path.join(const.ICON_DIR, "object_visible.jpg")) |
791 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) | 792 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) |
792 | bitmap.SetWidth(16) | 793 | bitmap.SetWidth(16) |
793 | bitmap.SetHeight(16) | 794 | bitmap.SetHeight(16) |
@@ -795,7 +796,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | @@ -795,7 +796,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | ||
795 | 796 | ||
796 | self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL) | 797 | self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL) |
797 | 798 | ||
798 | - self.image_gray = Image.open("../icons/object_colour.jpg") | 799 | + self.image_gray = Image.open(os.path.join(const.ICON_DIR, "object_colour.jpg")) |
799 | 800 | ||
800 | def OnEditLabel(self, evt): | 801 | def OnEditLabel(self, evt): |
801 | Publisher.sendMessage('Change surface name', (evt.GetIndex(), evt.GetLabel())) | 802 | Publisher.sendMessage('Change surface name', (evt.GetIndex(), evt.GetLabel())) |
@@ -1045,13 +1046,13 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | @@ -1045,13 +1046,13 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | ||
1045 | def __init_image_list(self): | 1046 | def __init_image_list(self): |
1046 | self.imagelist = wx.ImageList(16, 16) | 1047 | self.imagelist = wx.ImageList(16, 16) |
1047 | 1048 | ||
1048 | - image = wx.Image("../icons/object_invisible.jpg") | 1049 | + image = wx.Image(os.path.join(const.ICON_DIR, "object_invisible.jpg")) |
1049 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) | 1050 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) |
1050 | bitmap.SetWidth(16) | 1051 | bitmap.SetWidth(16) |
1051 | bitmap.SetHeight(16) | 1052 | bitmap.SetHeight(16) |
1052 | img_null = self.imagelist.Add(bitmap) | 1053 | img_null = self.imagelist.Add(bitmap) |
1053 | 1054 | ||
1054 | - image = wx.Image("../icons/object_visible.jpg") | 1055 | + image = wx.Image(os.path.join(const.ICON_DIR, "object_visible.jpg")) |
1055 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) | 1056 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) |
1056 | bitmap.SetWidth(16) | 1057 | bitmap.SetWidth(16) |
1057 | bitmap.SetHeight(16) | 1058 | bitmap.SetHeight(16) |
@@ -1059,7 +1060,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | @@ -1059,7 +1060,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | ||
1059 | 1060 | ||
1060 | self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL) | 1061 | self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL) |
1061 | 1062 | ||
1062 | - self.image_gray = Image.open("../icons/object_colour.jpg") | 1063 | + self.image_gray = Image.open(os.path.join(const.ICON_DIR, "object_colour.jpg")) |
1063 | 1064 | ||
1064 | 1065 | ||
1065 | def OnEditLabel(self, evt): | 1066 | def OnEditLabel(self, evt): |
@@ -1240,19 +1241,19 @@ class AnnotationsListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | @@ -1240,19 +1241,19 @@ class AnnotationsListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): | ||
1240 | def __init_image_list(self): | 1241 | def __init_image_list(self): |
1241 | self.imagelist = wx.ImageList(16, 16) | 1242 | self.imagelist = wx.ImageList(16, 16) |
1242 | 1243 | ||
1243 | - image = wx.Image("../icons/object_visible.jpg") | 1244 | + image = wx.Image(os.path.join(const.ICON_DIR, "object_visible.jpg")) |
1244 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) | 1245 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) |
1245 | bitmap.SetWidth(16) | 1246 | bitmap.SetWidth(16) |
1246 | bitmap.SetHeight(16) | 1247 | bitmap.SetHeight(16) |
1247 | img_check = self.imagelist.Add(bitmap) | 1248 | img_check = self.imagelist.Add(bitmap) |
1248 | 1249 | ||
1249 | - image = wx.Image("../icons/object_invisible.jpg") | 1250 | + image = wx.Image(os.path.join(const.ICON_DIR, "object_invisible.jpg")) |
1250 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) | 1251 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) |
1251 | bitmap.SetWidth(16) | 1252 | bitmap.SetWidth(16) |
1252 | bitmap.SetHeight(16) | 1253 | bitmap.SetHeight(16) |
1253 | img_null = self.imagelist.Add(bitmap) | 1254 | img_null = self.imagelist.Add(bitmap) |
1254 | 1255 | ||
1255 | - image = wx.Image("../icons/object_colour.jpg") | 1256 | + image = wx.Image(os.path.join(const.ICON_DIR, "object_colour.jpg")) |
1256 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) | 1257 | bitmap = wx.BitmapFromImage(image.Scale(16, 16)) |
1257 | bitmap.SetWidth(16) | 1258 | bitmap.SetWidth(16) |
1258 | bitmap.SetHeight(16) | 1259 | bitmap.SetHeight(16) |
invesalius/gui/default_tasks.py
@@ -21,15 +21,15 @@ import wx | @@ -21,15 +21,15 @@ import wx | ||
21 | import wx.lib.foldpanelbar as fpb | 21 | import wx.lib.foldpanelbar as fpb |
22 | from wx.lib.pubsub import pub as Publisher | 22 | from wx.lib.pubsub import pub as Publisher |
23 | 23 | ||
24 | -import constants as const | ||
25 | -import data_notebook as nb | ||
26 | -import session as ses | ||
27 | -import task_exporter as exporter | ||
28 | -import task_slice as slice_ | ||
29 | -import task_importer as importer | ||
30 | -import task_surface as surface | ||
31 | -import task_tools as tools | ||
32 | -import task_navigator as navigator | 24 | +import invesalius.constants as const |
25 | +import invesalius.gui.data_notebook as nb | ||
26 | +import invesalius.session as ses | ||
27 | +import invesalius.gui.task_exporter as exporter | ||
28 | +import invesalius.gui.task_slice as slice_ | ||
29 | +import invesalius.gui.task_importer as importer | ||
30 | +import invesalius.gui.task_surface as surface | ||
31 | +import invesalius.gui.task_tools as tools | ||
32 | +import invesalius.gui.task_navigator as navigator | ||
33 | 33 | ||
34 | FPB_DEFAULT_STYLE = 2621440 | 34 | FPB_DEFAULT_STYLE = 2621440 |
35 | 35 |
invesalius/gui/default_viewers.py
@@ -17,21 +17,24 @@ | @@ -17,21 +17,24 @@ | ||
17 | # detalhes. | 17 | # detalhes. |
18 | #-------------------------------------------------------------------------- | 18 | #-------------------------------------------------------------------------- |
19 | import sys | 19 | import sys |
20 | +import os | ||
20 | 21 | ||
21 | import wx | 22 | import wx |
22 | import wx.lib.agw.fourwaysplitter as fws | 23 | import wx.lib.agw.fourwaysplitter as fws |
23 | from wx.lib.pubsub import pub as Publisher | 24 | from wx.lib.pubsub import pub as Publisher |
24 | 25 | ||
25 | -import data.viewer_slice as slice_viewer | ||
26 | -import data.viewer_volume as volume_viewer | ||
27 | -import project | ||
28 | -import widgets.slice_menu as slice_menu_ | 26 | +import invesalius.data.viewer_slice as slice_viewer |
27 | +import invesalius.data.viewer_volume as volume_viewer | ||
28 | +import invesalius.project as project | ||
29 | +import invesalius.gui.widgets.slice_menu as slice_menu_ | ||
29 | 30 | ||
30 | -from gui.widgets.clut_raycasting import CLUTRaycastingWidget, \ | 31 | + |
32 | +from invesalius.gui.widgets.clut_raycasting import CLUTRaycastingWidget, \ | ||
31 | EVT_CLUT_POINT_RELEASE, EVT_CLUT_CURVE_SELECT, \ | 33 | EVT_CLUT_POINT_RELEASE, EVT_CLUT_CURVE_SELECT, \ |
32 | EVT_CLUT_CURVE_WL_CHANGE | 34 | EVT_CLUT_CURVE_WL_CHANGE |
33 | 35 | ||
34 | -from constants import ID_TO_BMP | 36 | +from invesalius.constants import ID_TO_BMP |
37 | +import invesalius.constants as const | ||
35 | 38 | ||
36 | class Panel(wx.Panel): | 39 | class Panel(wx.Panel): |
37 | def __init__(self, parent): | 40 | def __init__(self, parent): |
@@ -300,8 +303,8 @@ import wx.lib.platebtn as pbtn | @@ -300,8 +303,8 @@ import wx.lib.platebtn as pbtn | ||
300 | import wx.lib.buttons as btn | 303 | import wx.lib.buttons as btn |
301 | import wx.lib.pubsub as ps | 304 | import wx.lib.pubsub as ps |
302 | 305 | ||
303 | -import constants as const | ||
304 | -import widgets.colourselect as csel | 306 | +import invesalius.constants as const |
307 | +import invesalius.gui.widgets.colourselect as csel | ||
305 | 308 | ||
306 | [BUTTON_RAYCASTING, BUTTON_VIEW, BUTTON_SLICE_PLANE, BUTTON_3D_STEREO] = [wx.NewId() for num in xrange(4)] | 309 | [BUTTON_RAYCASTING, BUTTON_VIEW, BUTTON_SLICE_PLANE, BUTTON_3D_STEREO] = [wx.NewId() for num in xrange(4)] |
307 | RAYCASTING_TOOLS = wx.NewId() | 310 | RAYCASTING_TOOLS = wx.NewId() |
@@ -333,14 +336,14 @@ class VolumeToolPanel(wx.Panel): | @@ -333,14 +336,14 @@ class VolumeToolPanel(wx.Panel): | ||
333 | wx.Panel.__init__(self, parent) | 336 | wx.Panel.__init__(self, parent) |
334 | 337 | ||
335 | # VOLUME RAYCASTING BUTTON | 338 | # VOLUME RAYCASTING BUTTON |
336 | - BMP_RAYCASTING = wx.Bitmap("../icons/volume_raycasting.png", | 339 | + BMP_RAYCASTING = wx.Bitmap(os.path.join(const.ICON_DIR, "volume_raycasting.png"), |
337 | wx.BITMAP_TYPE_PNG) | 340 | wx.BITMAP_TYPE_PNG) |
338 | 341 | ||
339 | - BMP_SLICE_PLANE = wx.Bitmap("../icons/slice_plane.png", | 342 | + BMP_SLICE_PLANE = wx.Bitmap(os.path.join(const.ICON_DIR, "slice_plane.png"), |
340 | wx.BITMAP_TYPE_PNG) | 343 | wx.BITMAP_TYPE_PNG) |
341 | 344 | ||
342 | 345 | ||
343 | - BMP_3D_STEREO = wx.Bitmap("../icons/3D_glasses.png", | 346 | + BMP_3D_STEREO = wx.Bitmap(os.path.join(const.ICON_DIR, "3D_glasses.png"), |
344 | wx.BITMAP_TYPE_PNG) | 347 | wx.BITMAP_TYPE_PNG) |
345 | 348 | ||
346 | 349 |
invesalius/gui/dialogs.py
@@ -29,13 +29,12 @@ from wx.lib.agw import floatspin | @@ -29,13 +29,12 @@ from wx.lib.agw import floatspin | ||
29 | from wx.lib.wordwrap import wordwrap | 29 | from wx.lib.wordwrap import wordwrap |
30 | from wx.lib.pubsub import pub as Publisher | 30 | from wx.lib.pubsub import pub as Publisher |
31 | 31 | ||
32 | -import constants as const | ||
33 | -import gui.widgets.gradient as grad | ||
34 | -import project as proj | ||
35 | -import session as ses | ||
36 | -import utils | ||
37 | - | ||
38 | -from gui.widgets.clut_imagedata import CLUTImageDataWidget, EVT_CLUT_NODE_CHANGED | 32 | +import invesalius.constants as const |
33 | +import invesalius.gui.widgets.gradient as grad | ||
34 | +import invesalius.session as ses | ||
35 | +import invesalius.utils as utils | ||
36 | +from invesalius.gui.widgets import clut_imagedata | ||
37 | +from invesalius.gui.widgets.clut_imagedata import CLUTImageDataWidget, EVT_CLUT_NODE_CHANGED | ||
39 | 38 | ||
40 | import numpy as np | 39 | import numpy as np |
41 | 40 | ||
@@ -603,9 +602,9 @@ class NewMask(wx.Dialog): | @@ -603,9 +602,9 @@ class NewMask(wx.Dialog): | ||
603 | pos=wx.DefaultPosition, | 602 | pos=wx.DefaultPosition, |
604 | style=wx.DEFAULT_DIALOG_STYLE, | 603 | style=wx.DEFAULT_DIALOG_STYLE, |
605 | useMetal=False): | 604 | useMetal=False): |
606 | - import constants as const | ||
607 | - import data.mask as mask | ||
608 | - import project as prj | 605 | + import invesalius.constants as const |
606 | + import invesalius.data.mask as mask | ||
607 | + import invesalius.project as prj | ||
609 | 608 | ||
610 | # Instead of calling wx.Dialog.__init__ we precreate the dialog | 609 | # Instead of calling wx.Dialog.__init__ we precreate the dialog |
611 | # so we can set an extra style that must be set before | 610 | # so we can set an extra style that must be set before |
@@ -711,14 +710,14 @@ class NewMask(wx.Dialog): | @@ -711,14 +710,14 @@ class NewMask(wx.Dialog): | ||
711 | 710 | ||
712 | 711 | ||
713 | def OnComboThresh(self, evt): | 712 | def OnComboThresh(self, evt): |
714 | - import project as prj | 713 | + import invesalius.project as prj |
715 | proj = prj.Project() | 714 | proj = prj.Project() |
716 | (thresh_min, thresh_max) = proj.threshold_modes[evt.GetString()] | 715 | (thresh_min, thresh_max) = proj.threshold_modes[evt.GetString()] |
717 | self.gradient.SetMinimun(thresh_min) | 716 | self.gradient.SetMinimun(thresh_min) |
718 | self.gradient.SetMaximun(thresh_max) | 717 | self.gradient.SetMaximun(thresh_max) |
719 | 718 | ||
720 | def OnSlideChanged(self, evt): | 719 | def OnSlideChanged(self, evt): |
721 | - import project as prj | 720 | + import invesalius.project as prj |
722 | thresh_min = self.gradient.GetMinValue() | 721 | thresh_min = self.gradient.GetMinValue() |
723 | thresh_max = self.gradient.GetMaxValue() | 722 | thresh_max = self.gradient.GetMaxValue() |
724 | thresh = (thresh_min, thresh_max) | 723 | thresh = (thresh_min, thresh_max) |
@@ -878,9 +877,9 @@ class NewSurfaceDialog(wx.Dialog): | @@ -878,9 +877,9 @@ class NewSurfaceDialog(wx.Dialog): | ||
878 | def __init__(self, parent=None, ID=-1, title="InVesalius 3", size=wx.DefaultSize, | 877 | def __init__(self, parent=None, ID=-1, title="InVesalius 3", size=wx.DefaultSize, |
879 | pos=wx.DefaultPosition, style=wx.DEFAULT_DIALOG_STYLE, | 878 | pos=wx.DefaultPosition, style=wx.DEFAULT_DIALOG_STYLE, |
880 | useMetal=False): | 879 | useMetal=False): |
881 | - import constants as const | ||
882 | - import data.surface as surface | ||
883 | - import project as prj | 880 | + import invesalius.constants as const |
881 | + import invesalius.data.surface as surface | ||
882 | + import invesalius.project as prj | ||
884 | 883 | ||
885 | # Instead of calling wx.Dialog.__init__ we precreate the dialog | 884 | # Instead of calling wx.Dialog.__init__ we precreate the dialog |
886 | # so we can set an extra style that must be set before | 885 | # so we can set an extra style that must be set before |
@@ -1002,7 +1001,9 @@ class NewSurfaceDialog(wx.Dialog): | @@ -1002,7 +1001,9 @@ class NewSurfaceDialog(wx.Dialog): | ||
1002 | 1001 | ||
1003 | 1002 | ||
1004 | def ExportPicture(type_=""): | 1003 | def ExportPicture(type_=""): |
1005 | - import constants as const | 1004 | + import invesalius.constants as const |
1005 | + import invesalius.project as proj | ||
1006 | + | ||
1006 | INDEX_TO_EXTENSION = {0: "bmp", 1: "jpg", 2: "png", 3: "ps", 4:"povray", 5:"tiff"} | 1007 | INDEX_TO_EXTENSION = {0: "bmp", 1: "jpg", 2: "png", 3: "ps", 4:"povray", 5:"tiff"} |
1007 | WILDCARD_SAVE_PICTURE = _("BMP image")+" (*.bmp)|*.bmp|"+\ | 1008 | WILDCARD_SAVE_PICTURE = _("BMP image")+" (*.bmp)|*.bmp|"+\ |
1008 | _("JPG image")+" (*.jpg)|*.jpg|"+\ | 1009 | _("JPG image")+" (*.jpg)|*.jpg|"+\ |
@@ -1143,6 +1144,7 @@ class SurfaceCreationDialog(wx.Dialog): | @@ -1143,6 +1144,7 @@ class SurfaceCreationDialog(wx.Dialog): | ||
1143 | sizer.Fit(self) | 1144 | sizer.Fit(self) |
1144 | 1145 | ||
1145 | def OnSetMask(self, evt): | 1146 | def OnSetMask(self, evt): |
1147 | + import invesalius.project as proj | ||
1146 | mask = proj.Project().mask_dict[evt.mask_index] | 1148 | mask = proj.Project().mask_dict[evt.mask_index] |
1147 | self.ca.mask_edited = mask.was_edited | 1149 | self.ca.mask_edited = mask.was_edited |
1148 | self.ca.ReloadMethodsOptions() | 1150 | self.ca.ReloadMethodsOptions() |
@@ -1153,9 +1155,9 @@ class SurfaceCreationDialog(wx.Dialog): | @@ -1153,9 +1155,9 @@ class SurfaceCreationDialog(wx.Dialog): | ||
1153 | 1155 | ||
1154 | class SurfaceCreationOptionsPanel(wx.Panel): | 1156 | class SurfaceCreationOptionsPanel(wx.Panel): |
1155 | def __init__(self, parent, ID=-1): | 1157 | def __init__(self, parent, ID=-1): |
1156 | - import constants as const | ||
1157 | - import data.surface as surface | ||
1158 | - import project as prj | 1158 | + import invesalius.constants as const |
1159 | + import invesalius.data.surface as surface | ||
1160 | + import invesalius.project as prj | ||
1159 | 1161 | ||
1160 | wx.Panel.__init__(self, parent, ID) | 1162 | wx.Panel.__init__(self, parent, ID) |
1161 | 1163 | ||
@@ -1565,7 +1567,7 @@ class MaskBooleanDialog(wx.Dialog): | @@ -1565,7 +1567,7 @@ class MaskBooleanDialog(wx.Dialog): | ||
1565 | else: | 1567 | else: |
1566 | self.mask2.SetSelection(0) | 1568 | self.mask2.SetSelection(0) |
1567 | 1569 | ||
1568 | - icon_folder = '../icons/' | 1570 | + icon_folder = const.ICON_DIR |
1569 | op_choices = ((_(u"Union"), const.BOOLEAN_UNION, 'bool_union.png'), | 1571 | op_choices = ((_(u"Union"), const.BOOLEAN_UNION, 'bool_union.png'), |
1570 | (_(u"Difference"), const.BOOLEAN_DIFF, 'bool_difference.png'), | 1572 | (_(u"Difference"), const.BOOLEAN_DIFF, 'bool_difference.png'), |
1571 | (_(u"Intersection"), const.BOOLEAN_AND, 'bool_intersection.png'), | 1573 | (_(u"Intersection"), const.BOOLEAN_AND, 'bool_intersection.png'), |
@@ -1711,7 +1713,7 @@ class ImportBitmapParameters(wx.Dialog): | @@ -1711,7 +1713,7 @@ class ImportBitmapParameters(wx.Dialog): | ||
1711 | 1713 | ||
1712 | def _init_gui(self): | 1714 | def _init_gui(self): |
1713 | 1715 | ||
1714 | - import project as prj | 1716 | + import invesalius.project as prj |
1715 | 1717 | ||
1716 | p = wx.Panel(self, -1, style = wx.TAB_TRAVERSAL | 1718 | p = wx.Panel(self, -1, style = wx.TAB_TRAVERSAL |
1717 | | wx.CLIP_CHILDREN | 1719 | | wx.CLIP_CHILDREN |
@@ -1915,7 +1917,7 @@ class PanelFFillThreshold(wx.Panel): | @@ -1915,7 +1917,7 @@ class PanelFFillThreshold(wx.Panel): | ||
1915 | self._init_gui() | 1917 | self._init_gui() |
1916 | 1918 | ||
1917 | def _init_gui(self): | 1919 | def _init_gui(self): |
1918 | - import project as prj | 1920 | + import invesalius.project as prj |
1919 | 1921 | ||
1920 | project = prj.Project() | 1922 | project = prj.Project() |
1921 | bound_min, bound_max = project.threshold_range | 1923 | bound_min, bound_max = project.threshold_range |
@@ -2204,7 +2206,7 @@ class FFillSegmentationOptionsDialog(wx.Dialog): | @@ -2204,7 +2206,7 @@ class FFillSegmentationOptionsDialog(wx.Dialog): | ||
2204 | """ | 2206 | """ |
2205 | Create the widgets. | 2207 | Create the widgets. |
2206 | """ | 2208 | """ |
2207 | - import project as prj | 2209 | + import invesalius.project as prj |
2208 | 2210 | ||
2209 | # Target | 2211 | # Target |
2210 | if sys.platform == "win32": | 2212 | if sys.platform == "win32": |
invesalius/gui/dicom_preview_panel.py
@@ -31,10 +31,10 @@ from vtk.util import numpy_support | @@ -31,10 +31,10 @@ from vtk.util import numpy_support | ||
31 | from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor | 31 | from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor |
32 | from wx.lib.pubsub import pub as Publisher | 32 | from wx.lib.pubsub import pub as Publisher |
33 | 33 | ||
34 | -import constants as const | ||
35 | -from reader import dicom_reader | ||
36 | -import data.vtk_utils as vtku | ||
37 | -import utils | 34 | +import invesalius.constants as const |
35 | +import invesalius.reader.dicom_reader as dicom_reader | ||
36 | +import invesalius.data.vtk_utils as vtku | ||
37 | +import invesalius.utils as utils | ||
38 | import vtkgdcm | 38 | import vtkgdcm |
39 | 39 | ||
40 | 40 |
invesalius/gui/frame.py
@@ -31,18 +31,17 @@ import wx.lib.popupctl as pc | @@ -31,18 +31,17 @@ import wx.lib.popupctl as pc | ||
31 | 31 | ||
32 | from wx.lib.agw.aui.auibar import AuiToolBar, AUI_TB_PLAIN_BACKGROUND | 32 | from wx.lib.agw.aui.auibar import AuiToolBar, AUI_TB_PLAIN_BACKGROUND |
33 | 33 | ||
34 | -import constants as const | ||
35 | -import default_tasks as tasks | ||
36 | -import default_viewers as viewers | ||
37 | -import gui.dialogs as dlg | ||
38 | -import import_panel as imp | ||
39 | -import import_bitmap_panel as imp_bmp | ||
40 | -import import_network_panel as imp_net | ||
41 | -import project as prj | ||
42 | -import session as ses | ||
43 | -import utils | ||
44 | -import preferences | ||
45 | - | 34 | +import invesalius.constants as const |
35 | +import invesalius.gui.default_tasks as tasks | ||
36 | +import invesalius.gui.default_viewers as viewers | ||
37 | +import invesalius.gui.dialogs as dlg | ||
38 | +import invesalius.gui.import_panel as imp | ||
39 | +import invesalius.gui.import_bitmap_panel as imp_bmp | ||
40 | +import invesalius.gui.import_network_panel as imp_net | ||
41 | +import invesalius.project as prj | ||
42 | +import invesalius.session as ses | ||
43 | +import invesalius.utils as utils | ||
44 | +import invesalius.gui.preferences as preferences | ||
46 | # Layout tools' IDs - this is used only locally, therefore doesn't | 45 | # Layout tools' IDs - this is used only locally, therefore doesn't |
47 | # need to be defined in constants.py | 46 | # need to be defined in constants.py |
48 | VIEW_TOOLS = [ID_LAYOUT, ID_TEXT] =\ | 47 | VIEW_TOOLS = [ID_LAYOUT, ID_TEXT] =\ |
@@ -174,8 +173,7 @@ class Frame(wx.Frame): | @@ -174,8 +173,7 @@ class Frame(wx.Frame): | ||
174 | Hide().Layer(1).MaximizeButton(True). | 173 | Hide().Layer(1).MaximizeButton(True). |
175 | Name("Data").Position(1)) | 174 | Name("Data").Position(1)) |
176 | 175 | ||
177 | - # This is the DICOM import panel. When the two panels above | ||
178 | - # are shown, this should be hiden | 176 | + # This is the DICOM import panel. When the two panels above as dicom # are shown, this should be hiden |
179 | caption = _("Preview medical data to be reconstructed") | 177 | caption = _("Preview medical data to be reconstructed") |
180 | aui_manager.AddPane(imp.Panel(self), wx.aui.AuiPaneInfo(). | 178 | aui_manager.AddPane(imp.Panel(self), wx.aui.AuiPaneInfo(). |
181 | Name("Import").CloseButton(False).Centre().Hide(). | 179 | Name("Import").CloseButton(False).Centre().Hide(). |
@@ -353,8 +351,7 @@ class Frame(wx.Frame): | @@ -353,8 +351,7 @@ class Frame(wx.Frame): | ||
353 | 351 | ||
354 | def _ShowImportPanel(self, evt_pubsub): | 352 | def _ShowImportPanel(self, evt_pubsub): |
355 | """ | 353 | """ |
356 | - Show only DICOM import panel. | ||
357 | - """ | 354 | + Show only DICOM import panel. as dicom """ |
358 | Publisher.sendMessage("Set layout button data only") | 355 | Publisher.sendMessage("Set layout button data only") |
359 | aui_manager = self.aui_manager | 356 | aui_manager = self.aui_manager |
360 | aui_manager.GetPane("Import").Show(1) | 357 | aui_manager.GetPane("Import").Show(1) |
@@ -535,8 +532,7 @@ class Frame(wx.Frame): | @@ -535,8 +532,7 @@ class Frame(wx.Frame): | ||
535 | 532 | ||
536 | def ShowImportDicomPanel(self): | 533 | def ShowImportDicomPanel(self): |
537 | """ | 534 | """ |
538 | - Show import DICOM panel. | ||
539 | - """ | 535 | + Show import DICOM panel. as dicom """ |
540 | Publisher.sendMessage('Show import directory dialog') | 536 | Publisher.sendMessage('Show import directory dialog') |
541 | 537 | ||
542 | def ShowRetrieveDicomPanel(self): | 538 | def ShowRetrieveDicomPanel(self): |
@@ -1041,8 +1037,7 @@ class TaskBarIcon(wx.TaskBarIcon): | @@ -1041,8 +1037,7 @@ class TaskBarIcon(wx.TaskBarIcon): | ||
1041 | 1037 | ||
1042 | class ProjectToolBar(AuiToolBar): | 1038 | class ProjectToolBar(AuiToolBar): |
1043 | """ | 1039 | """ |
1044 | - Toolbar related to general project operations, including: import, | ||
1045 | - open, save and saveas, among others. | 1040 | + Toolbar related to general invesalius.project operations, including: import, as project open, save and saveas, among others. |
1046 | """ | 1041 | """ |
1047 | def __init__(self, parent): | 1042 | def __init__(self, parent): |
1048 | style = AUI_TB_PLAIN_BACKGROUND | 1043 | style = AUI_TB_PLAIN_BACKGROUND |
invesalius/gui/import_bitmap_panel.py
@@ -21,12 +21,11 @@ import wx.gizmos as gizmos | @@ -21,12 +21,11 @@ import wx.gizmos as gizmos | ||
21 | from wx.lib.pubsub import pub as Publisher | 21 | from wx.lib.pubsub import pub as Publisher |
22 | import wx.lib.splitter as spl | 22 | import wx.lib.splitter as spl |
23 | 23 | ||
24 | -import constants as const | ||
25 | -import gui.dialogs as dlg | ||
26 | -import bitmap_preview_panel as bpp | ||
27 | -import reader.bitmap_reader as bpr | ||
28 | -from dialogs import ImportBitmapParameters | ||
29 | - | 24 | +import invesalius.constants as const |
25 | +import invesalius.gui.dialogs as dlg | ||
26 | +import invesalius.gui.bitmap_preview_panel as bpp | ||
27 | +import invesalius.reader.bitmap_reader as bpr | ||
28 | +from invesalius.gui.dialogs import ImportBitmapParameters as dialogs | ||
30 | myEVT_SELECT_SERIE = wx.NewEventType() | 29 | myEVT_SELECT_SERIE = wx.NewEventType() |
31 | EVT_SELECT_SERIE = wx.PyEventBinder(myEVT_SELECT_SERIE, 1) | 30 | EVT_SELECT_SERIE = wx.PyEventBinder(myEVT_SELECT_SERIE, 1) |
32 | 31 |
invesalius/gui/import_network_panel.py
@@ -22,11 +22,11 @@ import wx.gizmos as gizmos | @@ -22,11 +22,11 @@ import wx.gizmos as gizmos | ||
22 | from wx.lib.pubsub import pub as Publisher | 22 | from wx.lib.pubsub import pub as Publisher |
23 | import wx.lib.splitter as spl | 23 | import wx.lib.splitter as spl |
24 | 24 | ||
25 | -import constants as const | ||
26 | -import gui.dialogs as dlg | ||
27 | -#import dicom_preview_panel as dpp | ||
28 | -import reader.dicom_grouper as dcm | ||
29 | -import net.dicom as dcm_net | 25 | +import invesalius.constants as const |
26 | +import invesalius.gui.dialogs as dlg | ||
27 | +#import invesalius.gui.dicom_preview_panel as dpp | ||
28 | +import invesalius.reader.dicom_grouper as dcm | ||
29 | +import invesalius.net.dicom as dcm_net | ||
30 | 30 | ||
31 | from wx.lib.mixins.listctrl import CheckListCtrlMixin | 31 | from wx.lib.mixins.listctrl import CheckListCtrlMixin |
32 | #from dicionario import musicdata | 32 | #from dicionario import musicdata |
invesalius/gui/import_panel.py
@@ -21,10 +21,10 @@ import wx.gizmos as gizmos | @@ -21,10 +21,10 @@ import wx.gizmos as gizmos | ||
21 | from wx.lib.pubsub import pub as Publisher | 21 | from wx.lib.pubsub import pub as Publisher |
22 | import wx.lib.splitter as spl | 22 | import wx.lib.splitter as spl |
23 | 23 | ||
24 | -import constants as const | ||
25 | -import gui.dialogs as dlg | ||
26 | -import dicom_preview_panel as dpp | ||
27 | -import reader.dicom_grouper as dcm | 24 | +import invesalius.constants as const |
25 | +import invesalius.gui.dialogs as dlg | ||
26 | +import invesalius.gui.dicom_preview_panel as dpp | ||
27 | +import invesalius.reader.dicom_grouper as dcm | ||
28 | 28 | ||
29 | myEVT_SELECT_SERIE = wx.NewEventType() | 29 | myEVT_SELECT_SERIE = wx.NewEventType() |
30 | EVT_SELECT_SERIE = wx.PyEventBinder(myEVT_SELECT_SERIE, 1) | 30 | EVT_SELECT_SERIE = wx.PyEventBinder(myEVT_SELECT_SERIE, 1) |
invesalius/gui/language_dialog.py
@@ -18,12 +18,25 @@ | @@ -18,12 +18,25 @@ | ||
18 | #-------------------------------------------------------------------------- | 18 | #-------------------------------------------------------------------------- |
19 | 19 | ||
20 | import os | 20 | import os |
21 | +import sys | ||
21 | import wx | 22 | import wx |
22 | import wx.combo | 23 | import wx.combo |
23 | 24 | ||
24 | -import i18n | 25 | +import invesalius.i18n as i18n |
25 | 26 | ||
26 | -ICON_DIR = os.path.abspath(os.path.join('..', 'icons')) | 27 | +file_path = os.path.split(__file__)[0] |
28 | + | ||
29 | +if hasattr(sys,"frozen") and (sys.frozen == "windows_exe"\ | ||
30 | + or sys.frozen == "console_exe"): | ||
31 | + abs_file_path = os.path.abspath(file_path + os.sep + ".." +\ | ||
32 | + os.sep + ".." + os.sep + ".." + os.sep + "..") | ||
33 | + ICON_DIR = os.path.abspath(os.path.join(abs_file_path, 'icons')) | ||
34 | +else: | ||
35 | + ICON_DIR = os.path.abspath(os.path.join(file_path, '..', '..','icons')) | ||
36 | + | ||
37 | +# MAC App | ||
38 | +if not os.path.exists(ICON_DIR): | ||
39 | + ICON_DIR = os.path.abspath(os.path.join(file_path, '..', '..', '..', '..', '..', 'icons')) | ||
27 | 40 | ||
28 | class ComboBoxLanguage: | 41 | class ComboBoxLanguage: |
29 | 42 |
invesalius/gui/preferences.py
1 | import wx | 1 | import wx |
2 | -import constants as const | 2 | +import invesalius.constants as const |
3 | from wx.lib.pubsub import pub as Publisher | 3 | from wx.lib.pubsub import pub as Publisher |
4 | -import session as ses | ||
5 | -from language_dialog import ComboBoxLanguage | ||
6 | - | 4 | +import invesalius.session as ses |
5 | +from invesalius.gui.language_dialog import ComboBoxLanguage | ||
7 | ID = wx.NewId() | 6 | ID = wx.NewId() |
8 | 7 | ||
9 | try: | 8 | try: |
invesalius/gui/task_exporter.py
@@ -25,9 +25,9 @@ import wx.lib.hyperlink as hl | @@ -25,9 +25,9 @@ import wx.lib.hyperlink as hl | ||
25 | import wx.lib.platebtn as pbtn | 25 | import wx.lib.platebtn as pbtn |
26 | from wx.lib.pubsub import pub as Publisher | 26 | from wx.lib.pubsub import pub as Publisher |
27 | 27 | ||
28 | -import constants as const | ||
29 | -import gui.dialogs as dlg | ||
30 | -import project as proj | 28 | +import invesalius.constants as const |
29 | +import invesalius.gui.dialogs as dlg | ||
30 | +import invesalius.project as proj | ||
31 | 31 | ||
32 | BTN_MASK = wx.NewId() | 32 | BTN_MASK = wx.NewId() |
33 | BTN_PICTURE = wx.NewId() | 33 | BTN_PICTURE = wx.NewId() |
@@ -164,22 +164,22 @@ class InnerTaskPanel(wx.Panel): | @@ -164,22 +164,22 @@ class InnerTaskPanel(wx.Panel): | ||
164 | # Image(s) for buttons | 164 | # Image(s) for buttons |
165 | if sys.platform == 'darwin': | 165 | if sys.platform == 'darwin': |
166 | BMP_EXPORT_SURFACE = wx.Bitmap(\ | 166 | BMP_EXPORT_SURFACE = wx.Bitmap(\ |
167 | - "../icons/surface_export_original.png", | 167 | + os.path.join(const.ICON_DIR, "surface_export_original.png"), |
168 | wx.BITMAP_TYPE_PNG).ConvertToImage()\ | 168 | wx.BITMAP_TYPE_PNG).ConvertToImage()\ |
169 | .Rescale(25, 25).ConvertToBitmap() | 169 | .Rescale(25, 25).ConvertToBitmap() |
170 | BMP_TAKE_PICTURE = wx.Bitmap(\ | 170 | BMP_TAKE_PICTURE = wx.Bitmap(\ |
171 | - "../icons/tool_photo_original.png", | 171 | + os.path.join(const.ICON_DIR, "tool_photo_original.png"), |
172 | wx.BITMAP_TYPE_PNG).ConvertToImage()\ | 172 | wx.BITMAP_TYPE_PNG).ConvertToImage()\ |
173 | .Rescale(25, 25).ConvertToBitmap() | 173 | .Rescale(25, 25).ConvertToBitmap() |
174 | 174 | ||
175 | #BMP_EXPORT_MASK = wx.Bitmap("../icons/mask.png", | 175 | #BMP_EXPORT_MASK = wx.Bitmap("../icons/mask.png", |
176 | # wx.BITMAP_TYPE_PNG) | 176 | # wx.BITMAP_TYPE_PNG) |
177 | else: | 177 | else: |
178 | - BMP_EXPORT_SURFACE = wx.Bitmap("../icons/surface_export.png", | 178 | + BMP_EXPORT_SURFACE = wx.Bitmap(os.path.join(const.ICON_DIR, "surface_export.png"), |
179 | wx.BITMAP_TYPE_PNG).ConvertToImage()\ | 179 | wx.BITMAP_TYPE_PNG).ConvertToImage()\ |
180 | .Rescale(25, 25).ConvertToBitmap() | 180 | .Rescale(25, 25).ConvertToBitmap() |
181 | 181 | ||
182 | - BMP_TAKE_PICTURE = wx.Bitmap("../icons/tool_photo.png", | 182 | + BMP_TAKE_PICTURE = wx.Bitmap(os.path.join(const.ICON_DIR, "tool_photo.png"), |
183 | wx.BITMAP_TYPE_PNG).ConvertToImage()\ | 183 | wx.BITMAP_TYPE_PNG).ConvertToImage()\ |
184 | .Rescale(25, 25).ConvertToBitmap() | 184 | .Rescale(25, 25).ConvertToBitmap() |
185 | 185 |
invesalius/gui/task_importer.py
@@ -24,8 +24,8 @@ import wx.lib.hyperlink as hl | @@ -24,8 +24,8 @@ import wx.lib.hyperlink as hl | ||
24 | import wx.lib.platebtn as pbtn | 24 | import wx.lib.platebtn as pbtn |
25 | from wx.lib.pubsub import pub as Publisher | 25 | from wx.lib.pubsub import pub as Publisher |
26 | 26 | ||
27 | -import constants as const | ||
28 | -import gui.dialogs as dlg | 27 | +import invesalius.constants as const |
28 | +import invesalius.gui.dialogs as dlg | ||
29 | 29 | ||
30 | BTN_IMPORT_LOCAL = wx.NewId() | 30 | BTN_IMPORT_LOCAL = wx.NewId() |
31 | BTN_IMPORT_PACS = wx.NewId() | 31 | BTN_IMPORT_PACS = wx.NewId() |
@@ -96,9 +96,9 @@ class InnerTaskPanel(wx.Panel): | @@ -96,9 +96,9 @@ class InnerTaskPanel(wx.Panel): | ||
96 | link_open_proj.Bind(hl.EVT_HYPERLINK_LEFT, self.OnLinkOpenProject) | 96 | link_open_proj.Bind(hl.EVT_HYPERLINK_LEFT, self.OnLinkOpenProject) |
97 | 97 | ||
98 | # Image(s) for buttons | 98 | # Image(s) for buttons |
99 | - BMP_IMPORT = wx.Bitmap("../icons/file_import.png", wx.BITMAP_TYPE_PNG) | ||
100 | - BMP_NET = wx.Bitmap("../icons/file_from_internet.png", wx.BITMAP_TYPE_PNG) | ||
101 | - BMP_OPEN_PROJECT = wx.Bitmap("../icons/file_open.png", wx.BITMAP_TYPE_PNG) | 99 | + BMP_IMPORT = wx.Bitmap(os.path.join(const.ICON_DIR, "file_import.png"), wx.BITMAP_TYPE_PNG) |
100 | + BMP_NET = wx.Bitmap(os.path.join(const.ICON_DIR, "file_from_internet.png"), wx.BITMAP_TYPE_PNG) | ||
101 | + BMP_OPEN_PROJECT = wx.Bitmap(os.path.join(const.ICON_DIR, "file_open.png"), wx.BITMAP_TYPE_PNG) | ||
102 | 102 | ||
103 | bmp_list = [BMP_IMPORT, BMP_NET, BMP_OPEN_PROJECT] | 103 | bmp_list = [BMP_IMPORT, BMP_NET, BMP_OPEN_PROJECT] |
104 | #for bmp in bmp_list: | 104 | #for bmp in bmp_list: |
@@ -159,7 +159,7 @@ class InnerTaskPanel(wx.Panel): | @@ -159,7 +159,7 @@ class InnerTaskPanel(wx.Panel): | ||
159 | # self.LoadProject(filename, path) | 159 | # self.LoadProject(filename, path) |
160 | 160 | ||
161 | def TestLoadProjects2(self): | 161 | def TestLoadProjects2(self): |
162 | - import session as ses | 162 | + import invesalius.session as ses |
163 | session = ses.Session() | 163 | session = ses.Session() |
164 | projects = session.recent_projects | 164 | projects = session.recent_projects |
165 | for tuple in projects: | 165 | for tuple in projects: |
@@ -175,7 +175,7 @@ class InnerTaskPanel(wx.Panel): | @@ -175,7 +175,7 @@ class InnerTaskPanel(wx.Panel): | ||
175 | 175 | ||
176 | def LoadProject(self, proj_name="Unnamed", proj_dir=""): | 176 | def LoadProject(self, proj_name="Unnamed", proj_dir=""): |
177 | """ | 177 | """ |
178 | - Load into user interface name of project into import task panel. | 178 | + Load into user interface name of invesalius.project into import task panel. |
179 | Can be called 3 times in sequence. | 179 | Can be called 3 times in sequence. |
180 | Call UnloadProjects to empty it. | 180 | Call UnloadProjects to empty it. |
181 | """ | 181 | """ |
invesalius/gui/task_navigator.py
@@ -27,10 +27,9 @@ import wx.lib.masked.numctrl | @@ -27,10 +27,9 @@ import wx.lib.masked.numctrl | ||
27 | import wx.lib.platebtn as pbtn | 27 | import wx.lib.platebtn as pbtn |
28 | from wx.lib.pubsub import pub as Publisher | 28 | from wx.lib.pubsub import pub as Publisher |
29 | 29 | ||
30 | -import data.bases as db | ||
31 | -import data.co_registration as dcr | ||
32 | -import project | ||
33 | - | 30 | +import invesalius.data.bases as db |
31 | +import invesalius.data.co_registration as dcr | ||
32 | +import invesalius.project as project | ||
34 | IR1 = wx.NewId() | 33 | IR1 = wx.NewId() |
35 | IR2 = wx.NewId() | 34 | IR2 = wx.NewId() |
36 | IR3 = wx.NewId() | 35 | IR3 = wx.NewId() |
invesalius/gui/task_slice.py
@@ -18,22 +18,23 @@ | @@ -18,22 +18,23 @@ | ||
18 | # detalhes. | 18 | # detalhes. |
19 | #-------------------------------------------------------------------------- | 19 | #-------------------------------------------------------------------------- |
20 | import sys | 20 | import sys |
21 | +import os | ||
21 | 22 | ||
22 | import wx | 23 | import wx |
23 | import wx.lib.hyperlink as hl | 24 | import wx.lib.hyperlink as hl |
24 | import wx.lib.platebtn as pbtn | 25 | import wx.lib.platebtn as pbtn |
25 | from wx.lib.pubsub import pub as Publisher | 26 | from wx.lib.pubsub import pub as Publisher |
26 | 27 | ||
27 | -import data.mask as mask | ||
28 | -import data.slice_ as slice_ | ||
29 | -import constants as const | ||
30 | -import gui.dialogs as dlg | ||
31 | -import gui.widgets.gradient as grad | ||
32 | -import gui.widgets.foldpanelbar as fpb | ||
33 | -import widgets.colourselect as csel | 28 | +import invesalius.data.mask as mask |
29 | +import invesalius.data.slice_ as slice_ | ||
30 | +import invesalius.constants as const | ||
31 | +import invesalius.gui.dialogs as dlg | ||
32 | +import invesalius.gui.widgets.gradient as grad | ||
33 | +import invesalius.gui.widgets.foldpanelbar as fpb | ||
34 | +import invesalius.gui.widgets.colourselect as csel | ||
34 | 35 | ||
35 | -from project import Project | ||
36 | -import session as ses | 36 | +from invesalius.project import Project |
37 | +import invesalius.session as ses | ||
37 | 38 | ||
38 | BTN_NEW = wx.NewId() | 39 | BTN_NEW = wx.NewId() |
39 | 40 | ||
@@ -70,7 +71,7 @@ class InnerTaskPanel(wx.Panel): | @@ -70,7 +71,7 @@ class InnerTaskPanel(wx.Panel): | ||
70 | self.SetAutoLayout(1) | 71 | self.SetAutoLayout(1) |
71 | 72 | ||
72 | # Image(s) for buttons | 73 | # Image(s) for buttons |
73 | - BMP_ADD = wx.Bitmap("../icons/object_add.png", wx.BITMAP_TYPE_PNG) | 74 | + BMP_ADD = wx.Bitmap(os.path.join(const.ICON_DIR, "object_add.png"), wx.BITMAP_TYPE_PNG) |
74 | #BMP_ADD.SetWidth(25) | 75 | #BMP_ADD.SetWidth(25) |
75 | #BMP_ADD.SetHeight(25) | 76 | #BMP_ADD.SetHeight(25) |
76 | 77 | ||
@@ -524,7 +525,7 @@ class MaskProperties(wx.Panel): | @@ -524,7 +525,7 @@ class MaskProperties(wx.Panel): | ||
524 | self.bind_evt_gradient = False | 525 | self.bind_evt_gradient = False |
525 | self.gradient.SetMinValue(thresh_min) | 526 | self.gradient.SetMinValue(thresh_min) |
526 | self.gradient.SetMaxValue(thresh_max) | 527 | self.gradient.SetMaxValue(thresh_max) |
527 | - print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", thresh_min, thresh_max | 528 | + |
528 | self.bind_evt_gradient = True | 529 | self.bind_evt_gradient = True |
529 | thresh = (thresh_min, thresh_max) | 530 | thresh = (thresh_min, thresh_max) |
530 | if thresh in Project().threshold_modes.values(): | 531 | if thresh in Project().threshold_modes.values(): |
@@ -651,11 +652,11 @@ class EditionTools(wx.Panel): | @@ -651,11 +652,11 @@ class EditionTools(wx.Panel): | ||
651 | ## LINE 2 | 652 | ## LINE 2 |
652 | menu = wx.Menu() | 653 | menu = wx.Menu() |
653 | 654 | ||
654 | - CIRCLE_BMP = wx.Bitmap("../icons/brush_circle.jpg", wx.BITMAP_TYPE_JPEG) | 655 | + CIRCLE_BMP = wx.Bitmap(os.path.join(const.ICON_DIR, "brush_circle.jpg"), wx.BITMAP_TYPE_JPEG) |
655 | item = wx.MenuItem(menu, MENU_BRUSH_CIRCLE, _("Circle")) | 656 | item = wx.MenuItem(menu, MENU_BRUSH_CIRCLE, _("Circle")) |
656 | item.SetBitmap(CIRCLE_BMP) | 657 | item.SetBitmap(CIRCLE_BMP) |
657 | 658 | ||
658 | - SQUARE_BMP = wx.Bitmap("../icons/brush_square.jpg", wx.BITMAP_TYPE_JPEG) | 659 | + SQUARE_BMP = wx.Bitmap(os.path.join(const.ICON_DIR, "brush_square.jpg"), wx.BITMAP_TYPE_JPEG) |
659 | item2 = wx.MenuItem(menu, MENU_BRUSH_SQUARE, _("Square")) | 660 | item2 = wx.MenuItem(menu, MENU_BRUSH_SQUARE, _("Square")) |
660 | item2.SetBitmap(SQUARE_BMP) | 661 | item2.SetBitmap(SQUARE_BMP) |
661 | 662 | ||
@@ -771,8 +772,8 @@ class EditionTools(wx.Panel): | @@ -771,8 +772,8 @@ class EditionTools(wx.Panel): | ||
771 | (thresh_min, thresh_max)) | 772 | (thresh_min, thresh_max)) |
772 | 773 | ||
773 | def OnMenu(self, evt): | 774 | def OnMenu(self, evt): |
774 | - SQUARE_BMP = wx.Bitmap("../icons/brush_square.jpg", wx.BITMAP_TYPE_JPEG) | ||
775 | - CIRCLE_BMP = wx.Bitmap("../icons/brush_circle.jpg", wx.BITMAP_TYPE_JPEG) | 775 | + SQUARE_BMP = wx.Bitmap(os.path.join(const.ICON_DIR, "brush_square.jpg"), wx.BITMAP_TYPE_JPEG) |
776 | + CIRCLE_BMP = wx.Bitmap(os.path.join(const.ICON_DIR, "brush_circle.jpg"), wx.BITMAP_TYPE_JPEG) | ||
776 | 777 | ||
777 | brush = {MENU_BRUSH_CIRCLE: const.BRUSH_CIRCLE, | 778 | brush = {MENU_BRUSH_CIRCLE: const.BRUSH_CIRCLE, |
778 | MENU_BRUSH_SQUARE: const.BRUSH_SQUARE} | 779 | MENU_BRUSH_SQUARE: const.BRUSH_SQUARE} |
@@ -815,11 +816,11 @@ class WatershedTool(EditionTools): | @@ -815,11 +816,11 @@ class WatershedTool(EditionTools): | ||
815 | ## LINE 2 | 816 | ## LINE 2 |
816 | menu = wx.Menu() | 817 | menu = wx.Menu() |
817 | 818 | ||
818 | - CIRCLE_BMP = wx.Bitmap("../icons/brush_circle.jpg", wx.BITMAP_TYPE_JPEG) | 819 | + CIRCLE_BMP = wx.Bitmap(os.path.join(const.ICON_DIR, "brush_circle.jpg"), wx.BITMAP_TYPE_JPEG) |
819 | item = wx.MenuItem(menu, MENU_BRUSH_CIRCLE, _("Circle")) | 820 | item = wx.MenuItem(menu, MENU_BRUSH_CIRCLE, _("Circle")) |
820 | item.SetBitmap(CIRCLE_BMP) | 821 | item.SetBitmap(CIRCLE_BMP) |
821 | 822 | ||
822 | - SQUARE_BMP = wx.Bitmap("../icons/brush_square.jpg", wx.BITMAP_TYPE_JPEG) | 823 | + SQUARE_BMP = wx.Bitmap(os.path.join(const.ICON_DIR, "brush_square.jpg"), wx.BITMAP_TYPE_JPEG) |
823 | item2 = wx.MenuItem(menu, MENU_BRUSH_SQUARE, _("Square")) | 824 | item2 = wx.MenuItem(menu, MENU_BRUSH_SQUARE, _("Square")) |
824 | item2.SetBitmap(SQUARE_BMP) | 825 | item2.SetBitmap(SQUARE_BMP) |
825 | 826 | ||
@@ -874,7 +875,7 @@ class WatershedTool(EditionTools): | @@ -874,7 +875,7 @@ class WatershedTool(EditionTools): | ||
874 | self.ww_wl_cbox = ww_wl_cbox | 875 | self.ww_wl_cbox = ww_wl_cbox |
875 | 876 | ||
876 | # Line 6 | 877 | # Line 6 |
877 | - bmp = wx.Bitmap("../icons/configuration.png", wx.BITMAP_TYPE_PNG) | 878 | + bmp = wx.Bitmap(os.path.join(const.ICON_DIR, "configuration.png"), wx.BITMAP_TYPE_PNG) |
878 | self.btn_wconfig = wx.BitmapButton(self, -1, bitmap=bmp, | 879 | self.btn_wconfig = wx.BitmapButton(self, -1, bitmap=bmp, |
879 | size=(bmp.GetWidth()+10, bmp.GetHeight()+10)) | 880 | size=(bmp.GetWidth()+10, bmp.GetHeight()+10)) |
880 | self.btn_exp_watershed = wx.Button(self, -1, _('Expand watershed to 3D')) | 881 | self.btn_exp_watershed = wx.Button(self, -1, _('Expand watershed to 3D')) |
@@ -942,8 +943,8 @@ class WatershedTool(EditionTools): | @@ -942,8 +943,8 @@ class WatershedTool(EditionTools): | ||
942 | self.gradient_thresh.SetMaxValue(thresh_max) | 943 | self.gradient_thresh.SetMaxValue(thresh_max) |
943 | 944 | ||
944 | def OnMenu(self, evt): | 945 | def OnMenu(self, evt): |
945 | - SQUARE_BMP = wx.Bitmap("../icons/brush_square.jpg", wx.BITMAP_TYPE_JPEG) | ||
946 | - CIRCLE_BMP = wx.Bitmap("../icons/brush_circle.jpg", wx.BITMAP_TYPE_JPEG) | 946 | + SQUARE_BMP = wx.Bitmap(os.path.join(const.ICON_DIR, "brush_square.jpg"), wx.BITMAP_TYPE_JPEG) |
947 | + CIRCLE_BMP = wx.Bitmap(os.path.join(const.ICON_DIR, "brush_circle.jpg"), wx.BITMAP_TYPE_JPEG) | ||
947 | 948 | ||
948 | brush = {MENU_BRUSH_CIRCLE: const.BRUSH_CIRCLE, | 949 | brush = {MENU_BRUSH_CIRCLE: const.BRUSH_CIRCLE, |
949 | MENU_BRUSH_SQUARE: const.BRUSH_SQUARE} | 950 | MENU_BRUSH_SQUARE: const.BRUSH_SQUARE} |
@@ -978,7 +979,7 @@ class WatershedTool(EditionTools): | @@ -978,7 +979,7 @@ class WatershedTool(EditionTools): | ||
978 | Publisher.sendMessage('Set use ww wl', value) | 979 | Publisher.sendMessage('Set use ww wl', value) |
979 | 980 | ||
980 | def OnConfig(self, evt): | 981 | def OnConfig(self, evt): |
981 | - from data.styles import WatershedConfig | 982 | + from invesalius.data.styles import WatershedConfig as styles |
982 | config = WatershedConfig() | 983 | config = WatershedConfig() |
983 | dlg.WatershedOptionsDialog(config).Show() | 984 | dlg.WatershedOptionsDialog(config).Show() |
984 | 985 |
invesalius/gui/task_surface.py
@@ -17,19 +17,20 @@ | @@ -17,19 +17,20 @@ | ||
17 | # detalhes. | 17 | # detalhes. |
18 | #-------------------------------------------------------------------------- | 18 | #-------------------------------------------------------------------------- |
19 | import sys | 19 | import sys |
20 | +import os | ||
20 | 21 | ||
21 | import wx | 22 | import wx |
22 | import wx.lib.hyperlink as hl | 23 | import wx.lib.hyperlink as hl |
23 | from wx.lib.pubsub import pub as Publisher | 24 | from wx.lib.pubsub import pub as Publisher |
24 | 25 | ||
25 | -import constants as const | ||
26 | -import data.slice_ as slice_ | ||
27 | -import gui.dialogs as dlg | ||
28 | -import gui.widgets.foldpanelbar as fpb | ||
29 | -import gui.widgets.colourselect as csel | ||
30 | -import gui.widgets.platebtn as pbtn | ||
31 | -import project as prj | ||
32 | -import utils as utl | 26 | +import invesalius.constants as const |
27 | +import invesalius.data.slice_ as slice_ | ||
28 | +import invesalius.gui.dialogs as dlg | ||
29 | +import invesalius.gui.widgets.foldpanelbar as fpb | ||
30 | +import invesalius.gui.widgets.colourselect as csel | ||
31 | +import invesalius.gui.widgets.platebtn as pbtn | ||
32 | +import invesalius.project as prj | ||
33 | +import invesalius.utils as utl | ||
33 | 34 | ||
34 | #INTERPOLATION_MODE_LIST = ["Cubic", "Linear", "NearestNeighbor"] | 35 | #INTERPOLATION_MODE_LIST = ["Cubic", "Linear", "NearestNeighbor"] |
35 | MIN_TRANSPARENCY = 0 | 36 | MIN_TRANSPARENCY = 0 |
@@ -73,7 +74,7 @@ class InnerTaskPanel(wx.Panel): | @@ -73,7 +74,7 @@ class InnerTaskPanel(wx.Panel): | ||
73 | self.SetAutoLayout(1) | 74 | self.SetAutoLayout(1) |
74 | 75 | ||
75 | 76 | ||
76 | - BMP_ADD = wx.Bitmap("../icons/object_add.png", wx.BITMAP_TYPE_PNG) | 77 | + BMP_ADD = wx.Bitmap(os.path.join(const.ICON_DIR, "object_add.png"), wx.BITMAP_TYPE_PNG) |
77 | #BMP_ADD.SetWidth(25) | 78 | #BMP_ADD.SetWidth(25) |
78 | #BMP_ADD.SetHeight(25) | 79 | #BMP_ADD.SetHeight(25) |
79 | 80 | ||
@@ -134,7 +135,7 @@ class InnerTaskPanel(wx.Panel): | @@ -134,7 +135,7 @@ class InnerTaskPanel(wx.Panel): | ||
134 | evt.Skip() | 135 | evt.Skip() |
135 | 136 | ||
136 | def OnLinkNewSurface(self, evt=None): | 137 | def OnLinkNewSurface(self, evt=None): |
137 | - #import gui.dialogs as dlg | 138 | + #import invesalius.gui.dialogs as dlg |
138 | sl = slice_.Slice() | 139 | sl = slice_.Slice() |
139 | dialog = dlg.SurfaceCreationDialog(None, -1, | 140 | dialog = dlg.SurfaceCreationDialog(None, -1, |
140 | _('New surface'), | 141 | _('New surface'), |
@@ -299,17 +300,17 @@ class SurfaceTools(wx.Panel): | @@ -299,17 +300,17 @@ class SurfaceTools(wx.Panel): | ||
299 | link_seeds.Bind(hl.EVT_HYPERLINK_LEFT, self.OnLinkSeed) | 300 | link_seeds.Bind(hl.EVT_HYPERLINK_LEFT, self.OnLinkSeed) |
300 | 301 | ||
301 | # Image(s) for buttons | 302 | # Image(s) for buttons |
302 | - img_largest = wx.Image("../icons/connectivity_largest.png", | 303 | + img_largest = wx.Image(os.path.join(const.ICON_DIR, "connectivity_largest.png"), |
303 | wx.BITMAP_TYPE_PNG) | 304 | wx.BITMAP_TYPE_PNG) |
304 | img_largest.Rescale(25, 25) | 305 | img_largest.Rescale(25, 25) |
305 | bmp_largest = img_largest.ConvertToBitmap() | 306 | bmp_largest = img_largest.ConvertToBitmap() |
306 | 307 | ||
307 | - img_split_all = wx.Image("../icons/connectivity_split_all.png", | 308 | + img_split_all = wx.Image(os.path.join(const.ICON_DIR, "connectivity_split_all.png"), |
308 | wx.BITMAP_TYPE_PNG) | 309 | wx.BITMAP_TYPE_PNG) |
309 | img_split_all.Rescale(25, 25) | 310 | img_split_all.Rescale(25, 25) |
310 | bmp_split_all = img_split_all.ConvertToBitmap() | 311 | bmp_split_all = img_split_all.ConvertToBitmap() |
311 | 312 | ||
312 | - img_seeds = wx.Image("../icons/connectivity_manual.png", | 313 | + img_seeds = wx.Image(os.path.join(const.ICON_DIR, "connectivity_manual.png"), |
313 | wx.BITMAP_TYPE_PNG) | 314 | wx.BITMAP_TYPE_PNG) |
314 | img_seeds.Rescale(25, 25) | 315 | img_seeds.Rescale(25, 25) |
315 | bmp_seeds = img_seeds.ConvertToBitmap() | 316 | bmp_seeds = img_seeds.ConvertToBitmap() |
@@ -556,7 +557,7 @@ class SurfaceProperties(wx.Panel): | @@ -556,7 +557,7 @@ class SurfaceProperties(wx.Panel): | ||
556 | 557 | ||
557 | class QualityAdjustment(wx.Panel): | 558 | class QualityAdjustment(wx.Panel): |
558 | def __init__(self, parent): | 559 | def __init__(self, parent): |
559 | - import constants as const | 560 | + import invesalius.constants as const |
560 | wx.Panel.__init__(self, parent) | 561 | wx.Panel.__init__(self, parent) |
561 | default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR) | 562 | default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR) |
562 | self.SetBackgroundColour(default_colour) | 563 | self.SetBackgroundColour(default_colour) |
invesalius/gui/task_tools.py
@@ -18,12 +18,14 @@ | @@ -18,12 +18,14 @@ | ||
18 | #-------------------------------------------------------------------------- | 18 | #-------------------------------------------------------------------------- |
19 | 19 | ||
20 | import wx | 20 | import wx |
21 | +import os | ||
21 | import wx.lib.embeddedimage as emb | 22 | import wx.lib.embeddedimage as emb |
22 | import wx.lib.hyperlink as hl | 23 | import wx.lib.hyperlink as hl |
23 | import wx.lib.platebtn as pbtn | 24 | import wx.lib.platebtn as pbtn |
24 | from wx.lib.pubsub import pub as Publisher | 25 | from wx.lib.pubsub import pub as Publisher |
25 | 26 | ||
26 | -import constants | 27 | +import invesalius.constants as constants |
28 | +import invesalius.constants as const | ||
27 | 29 | ||
28 | ID_BTN_MEASURE_LINEAR = wx.NewId() | 30 | ID_BTN_MEASURE_LINEAR = wx.NewId() |
29 | ID_BTN_MEASURE_ANGULAR = wx.NewId() | 31 | ID_BTN_MEASURE_ANGULAR = wx.NewId() |
@@ -71,9 +73,9 @@ class InnerTaskPanel(wx.Panel): | @@ -71,9 +73,9 @@ class InnerTaskPanel(wx.Panel): | ||
71 | txt_annotation.Bind(hl.EVT_HYPERLINK_LEFT, self.OnTextAnnotation) | 73 | txt_annotation.Bind(hl.EVT_HYPERLINK_LEFT, self.OnTextAnnotation) |
72 | 74 | ||
73 | # Image(s) for buttons | 75 | # Image(s) for buttons |
74 | - BMP_ANNOTATE = wx.Bitmap("../icons/annotation.png", wx.BITMAP_TYPE_PNG) | ||
75 | - BMP_ANGLE = wx.Bitmap("../icons/measure_angle.jpg", wx.BITMAP_TYPE_JPEG) | ||
76 | - BMP_DISTANCE = wx.Bitmap("../icons/measure_line.png", wx.BITMAP_TYPE_PNG) | 76 | + BMP_ANNOTATE = wx.Bitmap(os.path.join(const.ICON_DIR, "annotation.png"), wx.BITMAP_TYPE_PNG) |
77 | + BMP_ANGLE = wx.Bitmap(os.path.join(const.ICON_DIR, "measure_angle.jpg"), wx.BITMAP_TYPE_JPEG) | ||
78 | + BMP_DISTANCE = wx.Bitmap(os.path.join(const.ICON_DIR, "measure_line.png"), wx.BITMAP_TYPE_PNG) | ||
77 | BMP_ANNOTATE.SetWidth(25) | 79 | BMP_ANNOTATE.SetWidth(25) |
78 | BMP_ANNOTATE.SetHeight(25) | 80 | BMP_ANNOTATE.SetHeight(25) |
79 | BMP_ANGLE.SetWidth(25) | 81 | BMP_ANGLE.SetWidth(25) |
invesalius/gui/widgets/clut_raycasting.py
@@ -26,8 +26,8 @@ import numpy | @@ -26,8 +26,8 @@ import numpy | ||
26 | import wx | 26 | import wx |
27 | from wx.lib.pubsub import pub as Publisher | 27 | from wx.lib.pubsub import pub as Publisher |
28 | 28 | ||
29 | -import gui.dialogs as dialog | ||
30 | -import constants as const | 29 | +import invesalius.gui.dialogs as dialog |
30 | +import invesalius.constants as const | ||
31 | 31 | ||
32 | FONT_COLOUR = (1, 1, 1) | 32 | FONT_COLOUR = (1, 1, 1) |
33 | LINE_COLOUR = (128, 128, 128) | 33 | LINE_COLOUR = (128, 128, 128) |
invesalius/gui/widgets/slice_menu.py
@@ -29,12 +29,10 @@ except(ImportError): | @@ -29,12 +29,10 @@ except(ImportError): | ||
29 | import wx | 29 | import wx |
30 | from wx.lib.pubsub import pub as Publisher | 30 | from wx.lib.pubsub import pub as Publisher |
31 | 31 | ||
32 | -import constants as const | ||
33 | -import data.slice_ as sl | ||
34 | -import presets | ||
35 | - | ||
36 | -from gui.dialogs import ClutImagedataDialog | ||
37 | - | 32 | +import invesalius.constants as const |
33 | +import invesalius.data.slice_ as sl | ||
34 | +import invesalius.presets as presets | ||
35 | +from invesalius.gui.dialogs import ClutImagedataDialog as dialogs | ||
38 | PROJECTIONS_ID = OrderedDict(((_('Normal'), const.PROJECTION_NORMAL), | 36 | PROJECTIONS_ID = OrderedDict(((_('Normal'), const.PROJECTION_NORMAL), |
39 | (_('MaxIP'), const.PROJECTION_MaxIP), | 37 | (_('MaxIP'), const.PROJECTION_MaxIP), |
40 | (_('MinIP'), const.PROJECTION_MinIP), | 38 | (_('MinIP'), const.PROJECTION_MinIP), |
invesalius/i18n.py
@@ -26,7 +26,7 @@ import gettext | @@ -26,7 +26,7 @@ import gettext | ||
26 | import os | 26 | import os |
27 | import sys | 27 | import sys |
28 | 28 | ||
29 | -import utils as utl | 29 | +import invesalius.utils as utl |
30 | 30 | ||
31 | def GetLocales(): | 31 | def GetLocales(): |
32 | """Return a dictionary which defines supported languages""" | 32 | """Return a dictionary which defines supported languages""" |
@@ -58,8 +58,23 @@ def GetLocaleOS(): | @@ -58,8 +58,23 @@ def GetLocaleOS(): | ||
58 | 58 | ||
59 | return locale.getdefaultlocale()[0] | 59 | return locale.getdefaultlocale()[0] |
60 | 60 | ||
61 | -def InstallLanguage(language): | ||
62 | - language_dir = os.path.abspath(os.path.join('..','locale')) | 61 | +def InstallLanguage(language): |
62 | + file_path = os.path.split(__file__)[0] | ||
63 | + | ||
64 | + if hasattr(sys,"frozen") and (sys.frozen == "windows_exe"\ | ||
65 | + or sys.frozen == "console_exe"): | ||
66 | + | ||
67 | + abs_file_path = os.path.abspath(file_path + os.sep + ".." + os.sep + ".." + os.sep + "..") | ||
68 | + language_dir = os.path.join(abs_file_path, 'locale') | ||
69 | + else: | ||
70 | + abs_file_path = os.path.abspath(file_path + os.sep + "..") | ||
71 | + language_dir = os.path.join(abs_file_path, 'locale') | ||
72 | + | ||
73 | + # MAC App | ||
74 | + if not os.path.exists(language_dir): | ||
75 | + abs_file_path = os.path.abspath(os.path.join(file_path, '..', '..', '..', '..')) | ||
76 | + language_dir = os.path.join(abs_file_path, 'locale') | ||
77 | + | ||
63 | lang = gettext.translation('invesalius', language_dir,\ | 78 | lang = gettext.translation('invesalius', language_dir,\ |
64 | languages=[language], codeset='utf8') | 79 | languages=[language], codeset='utf8') |
65 | # Using unicode | 80 | # Using unicode |
invesalius/invesalius.py
@@ -1,320 +0,0 @@ | @@ -1,320 +0,0 @@ | ||
1 | -#!/usr/bin/python | ||
2 | -#-------------------------------------------------------------------------- | ||
3 | -# Software: InVesalius - Software de Reconstrucao 3D de Imagens Medicas | ||
4 | -# Copyright: (C) 2001 Centro de Pesquisas Renato Archer | ||
5 | -# Homepage: http://www.softwarepublico.gov.br | ||
6 | -# Contact: invesalius@cti.gov.br | ||
7 | -# License: GNU - GPL 2 (LICENSE.txt/LICENCA.txt) | ||
8 | -#-------------------------------------------------------------------------- | ||
9 | -# Este programa e software livre; voce pode redistribui-lo e/ou | ||
10 | -# modifica-lo sob os termos da Licenca Publica Geral GNU, conforme | ||
11 | -# publicada pela Free Software Foundation; de acordo com a versao 2 | ||
12 | -# da Licenca. | ||
13 | -# | ||
14 | -# Este programa eh distribuido na expectativa de ser util, mas SEM | ||
15 | -# QUALQUER GARANTIA; sem mesmo a garantia implicita de | ||
16 | -# COMERCIALIZACAO ou de ADEQUACAO A QUALQUER PROPOSITO EM | ||
17 | -# PARTICULAR. Consulte a Licenca Publica Geral GNU para obter mais | ||
18 | -# detalhes. | ||
19 | -#------------------------------------------------------------------------- | ||
20 | - | ||
21 | - | ||
22 | -import multiprocessing | ||
23 | -import optparse as op | ||
24 | -import os | ||
25 | -import sys | ||
26 | -import shutil | ||
27 | - | ||
28 | -if sys.platform == 'win32': | ||
29 | - import _winreg | ||
30 | -else: | ||
31 | - if sys.platform != 'darwin': | ||
32 | - import wxversion | ||
33 | - #wxversion.ensureMinimal('2.8-unicode', optionsRequired=True) | ||
34 | - #wxversion.select('2.8-unicode', optionsRequired=True) | ||
35 | - wxversion.ensureMinimal('3.0') | ||
36 | - | ||
37 | -import wx | ||
38 | -#from wx.lib.pubsub import setupv1 #new wx | ||
39 | -from wx.lib.pubsub import setuparg1# as psv1 | ||
40 | -#from wx.lib.pubsub import Publisher | ||
41 | -#import wx.lib.pubsub as ps | ||
42 | -from wx.lib.pubsub import pub as Publisher | ||
43 | - | ||
44 | -#import wx.lib.agw.advancedsplash as agw | ||
45 | -#if sys.platform == 'linux2': | ||
46 | -# _SplashScreen = agw.AdvancedSplash | ||
47 | -#else: | ||
48 | -# if sys.platform != 'darwin': | ||
49 | -# _SplashScreen = wx.SplashScreen | ||
50 | - | ||
51 | - | ||
52 | -import gui.language_dialog as lang_dlg | ||
53 | -import i18n | ||
54 | -import session as ses | ||
55 | -import utils | ||
56 | - | ||
57 | -# ------------------------------------------------------------------ | ||
58 | - | ||
59 | - | ||
60 | -class InVesalius(wx.App): | ||
61 | - """ | ||
62 | - InVesalius wxPython application class. | ||
63 | - """ | ||
64 | - def OnInit(self): | ||
65 | - """ | ||
66 | - Initialize splash screen and main frame. | ||
67 | - """ | ||
68 | - self.SetAppName("InVesalius 3") | ||
69 | - self.splash = SplashScreen() | ||
70 | - self.splash.Show() | ||
71 | - wx.CallLater(1000,self.Startup2) | ||
72 | - | ||
73 | - return True | ||
74 | - | ||
75 | - def MacOpenFile(self, filename): | ||
76 | - """ | ||
77 | - Open drag & drop files under darwin | ||
78 | - """ | ||
79 | - path = os.path.abspath(filename) | ||
80 | - Publisher.sendMessage('Open project', path) | ||
81 | - | ||
82 | - def Startup2(self): | ||
83 | - self.control = self.splash.control | ||
84 | - self.frame = self.splash.main | ||
85 | - self.SetTopWindow(self.frame) | ||
86 | - self.frame.Show() | ||
87 | - self.frame.Raise() | ||
88 | - | ||
89 | -# ------------------------------------------------------------------ | ||
90 | - | ||
91 | -class SplashScreen(wx.SplashScreen): | ||
92 | - """ | ||
93 | - Splash screen to be shown in InVesalius initialization. | ||
94 | - """ | ||
95 | - def __init__(self): | ||
96 | - # Splash screen image will depend on currently language | ||
97 | - lang = False | ||
98 | - | ||
99 | - # Language information is available in session configuration | ||
100 | - # file. First we need to check if this file exist, if now, it | ||
101 | - # should be created | ||
102 | - create_session = False | ||
103 | - session = ses.Session() | ||
104 | - if not (session.ReadSession()): | ||
105 | - create_session = True | ||
106 | - | ||
107 | - install_lang = 0 | ||
108 | - # Check if there is a language set (if session file exists | ||
109 | - if session.ReadLanguage(): | ||
110 | - lang = session.GetLanguage() | ||
111 | - if (lang != "False"): | ||
112 | - _ = i18n.InstallLanguage(lang) | ||
113 | - install_lang = 1 | ||
114 | - else: | ||
115 | - install_lang = 0 | ||
116 | - else: | ||
117 | - install_lang = 0 | ||
118 | - | ||
119 | - # If no language is set into session file, show dialog so | ||
120 | - # user can select language | ||
121 | - if install_lang == 0: | ||
122 | - dialog = lang_dlg.LanguageDialog() | ||
123 | - | ||
124 | - # FIXME: This works ok in linux2, darwin and win32, | ||
125 | - # except on win64, due to wxWidgets bug | ||
126 | - try: | ||
127 | - ok = (dialog.ShowModal() == wx.ID_OK) | ||
128 | - except wx._core.PyAssertionError: | ||
129 | - ok = True | ||
130 | - finally: | ||
131 | - if ok: | ||
132 | - lang = dialog.GetSelectedLanguage() | ||
133 | - session.SetLanguage(lang) | ||
134 | - _ = i18n.InstallLanguage(lang) | ||
135 | - else: | ||
136 | - homedir = self.homedir = os.path.expanduser('~') | ||
137 | - invdir = os.path.join(homedir, ".invesalius") | ||
138 | - shutil.rmtree(invdir) | ||
139 | - sys.exit() | ||
140 | - | ||
141 | - # Session file should be created... So we set the recent | ||
142 | - # choosen language | ||
143 | - if (create_session): | ||
144 | - session.CreateItens() | ||
145 | - session.SetLanguage(lang) | ||
146 | - session.WriteSessionFile() | ||
147 | - | ||
148 | - session.SaveConfigFileBackup() | ||
149 | - | ||
150 | - | ||
151 | - # Only after language was defined, splash screen will be | ||
152 | - # shown | ||
153 | - if lang: | ||
154 | - # For pt_BR, splash_pt.png should be used | ||
155 | - if (lang.startswith('pt')): | ||
156 | - icon_file = "splash_pt.png" | ||
157 | - else: | ||
158 | - icon_file = "splash_" + lang + ".png" | ||
159 | - | ||
160 | - path = os.path.join("..","icons", icon_file) | ||
161 | - | ||
162 | - if not os.path.exists(path): | ||
163 | - path = os.path.join("..", "icons", "splash_en.png") | ||
164 | - | ||
165 | - bmp = wx.Image(path).ConvertToBitmap() | ||
166 | - | ||
167 | - style = wx.SPLASH_TIMEOUT | wx.SPLASH_CENTRE_ON_SCREEN | ||
168 | - wx.SplashScreen.__init__(self, | ||
169 | - bitmap=bmp, | ||
170 | - splashStyle=style, | ||
171 | - milliseconds=1500, | ||
172 | - id=-1, | ||
173 | - parent=None) | ||
174 | - self.Bind(wx.EVT_CLOSE, self.OnClose) | ||
175 | - wx.Yield() | ||
176 | - wx.CallLater(200,self.Startup) | ||
177 | - | ||
178 | - def Startup(self): | ||
179 | - # Importing takes sometime, therefore it will be done | ||
180 | - # while splash is being shown | ||
181 | - from gui.frame import Frame | ||
182 | - from control import Controller | ||
183 | - from project import Project | ||
184 | - | ||
185 | - self.main = Frame(None) | ||
186 | - self.control = Controller(self.main) | ||
187 | - | ||
188 | - self.fc = wx.FutureCall(1, self.ShowMain) | ||
189 | - wx.FutureCall(1, parse_comand_line) | ||
190 | - | ||
191 | - # Check for updates | ||
192 | - from threading import Thread | ||
193 | - p = Thread(target=utils.UpdateCheck, args=()) | ||
194 | - p.start() | ||
195 | - | ||
196 | - def OnClose(self, evt): | ||
197 | - # Make sure the default handler runs too so this window gets | ||
198 | - # destroyed | ||
199 | - evt.Skip() | ||
200 | - self.Hide() | ||
201 | - | ||
202 | - # If the timer is still running then go ahead and show the | ||
203 | - # main frame now | ||
204 | - if self.fc.IsRunning(): | ||
205 | - self.fc.Stop() | ||
206 | - self.ShowMain() | ||
207 | - | ||
208 | - def ShowMain(self): | ||
209 | - # Show main frame | ||
210 | - self.main.Show() | ||
211 | - | ||
212 | - if self.fc.IsRunning(): | ||
213 | - self.Raise() | ||
214 | - | ||
215 | -# ------------------------------------------------------------------ | ||
216 | - | ||
217 | - | ||
218 | -def parse_comand_line(): | ||
219 | - """ | ||
220 | - Handle command line arguments. | ||
221 | - """ | ||
222 | - session = ses.Session() | ||
223 | - | ||
224 | - # Parse command line arguments | ||
225 | - parser = op.OptionParser() | ||
226 | - | ||
227 | - # -d or --debug: print all pubsub messagessent | ||
228 | - parser.add_option("-d", "--debug", | ||
229 | - action="store_true", | ||
230 | - dest="debug") | ||
231 | - | ||
232 | - # -i or --import: import DICOM directory | ||
233 | - # chooses largest series | ||
234 | - parser.add_option("-i", "--import", | ||
235 | - action="store", | ||
236 | - dest="dicom_dir") | ||
237 | - options, args = parser.parse_args() | ||
238 | - | ||
239 | - # If debug argument... | ||
240 | - if options.debug: | ||
241 | - Publisher.subscribe(print_events, Publisher.ALL_TOPICS) | ||
242 | - session.debug = 1 | ||
243 | - | ||
244 | - # If import DICOM argument... | ||
245 | - if options.dicom_dir: | ||
246 | - import_dir = options.dicom_dir | ||
247 | - Publisher.sendMessage('Import directory', import_dir) | ||
248 | - return True | ||
249 | - | ||
250 | - # Check if there is a file path somewhere in what the user wrote | ||
251 | - # In case there is, try opening as it was a inv3 | ||
252 | - else: | ||
253 | - i = len(args) | ||
254 | - while i: | ||
255 | - i -= 1 | ||
256 | - file = args[i] | ||
257 | - if os.path.isfile(file): | ||
258 | - path = os.path.abspath(file) | ||
259 | - Publisher.sendMessage('Open project', path) | ||
260 | - i = 0 | ||
261 | - return True | ||
262 | - return False | ||
263 | - | ||
264 | - | ||
265 | -def print_events(data): | ||
266 | - """ | ||
267 | - Print pubsub messages | ||
268 | - """ | ||
269 | - utils.debug(data.topic) | ||
270 | - | ||
271 | -def main(): | ||
272 | - """ | ||
273 | - Initialize InVesalius GUI | ||
274 | - """ | ||
275 | - application = InVesalius(0) | ||
276 | - application.MainLoop() | ||
277 | - | ||
278 | -if __name__ == '__main__': | ||
279 | - # Needed in win 32 exe | ||
280 | - if hasattr(sys,"frozen") and (sys.frozen == "windows_exe"\ | ||
281 | - or sys.frozen == "console_exe"): | ||
282 | - multiprocessing.freeze_support() | ||
283 | - | ||
284 | - #Click in the .inv3 file support | ||
285 | - root = _winreg.HKEY_CLASSES_ROOT | ||
286 | - key = "InVesalius 3.0\InstallationDir" | ||
287 | - hKey = _winreg.OpenKey (root, key, 0, _winreg.KEY_READ) | ||
288 | - value, type_ = _winreg.QueryValueEx (hKey, "") | ||
289 | - path = os.path.join(value,'dist') | ||
290 | - | ||
291 | - os.chdir(path) | ||
292 | - | ||
293 | - # Create raycasting presets' folder, if it doens't exist | ||
294 | - dirpath = os.path.join(os.path.expanduser('~'), | ||
295 | - ".invesalius", | ||
296 | - "presets") | ||
297 | - if not os.path.isdir(dirpath): | ||
298 | - os.makedirs(dirpath) | ||
299 | - | ||
300 | - # Create logs' folder, if it doesn't exist | ||
301 | - dirpath = os.path.join(os.path.expanduser('~'), | ||
302 | - ".invesalius", | ||
303 | - "logs") | ||
304 | - if not os.path.isdir(dirpath): | ||
305 | - os.makedirs(dirpath) | ||
306 | - | ||
307 | - if hasattr(sys,"frozen") and sys.frozen == "windows_exe": | ||
308 | - # Set system standard error output to file | ||
309 | - path = os.path.join(dirpath, "stderr.log") | ||
310 | - sys.stderr = open(path, "w") | ||
311 | - | ||
312 | - # Add current directory to PYTHONPATH, so other classes can | ||
313 | - # import modules as they were on root invesalius folder | ||
314 | - sys.path.insert(0, '..') | ||
315 | - sys.path.append(".") | ||
316 | - | ||
317 | - | ||
318 | - # Init application | ||
319 | - main() | ||
320 | - |
invesalius/net/dicom.py
1 | import gdcm | 1 | import gdcm |
2 | -import utils | ||
3 | - | 2 | +import invesalius.utils as utils |
4 | 3 | ||
5 | class DicomNet: | 4 | class DicomNet: |
6 | 5 | ||
@@ -110,7 +109,6 @@ class DicomNet: | @@ -110,7 +109,6 @@ class DicomNet: | ||
110 | acquisition_date = utils.format_date(self.GetValueFromDICOM(rt, (0x0008,0x0022))) | 109 | acquisition_date = utils.format_date(self.GetValueFromDICOM(rt, (0x0008,0x0022))) |
111 | 110 | ||
112 | teste = self.GetValueFromDICOM(rt, (0x0020,0x000d)) | 111 | teste = self.GetValueFromDICOM(rt, (0x0020,0x000d)) |
113 | - print ">>>>>>>>>>>>>>>>>>>>", teste | ||
114 | 112 | ||
115 | patients[patient_id][serie_id] = {'name':name, 'age':age, 'gender':gender,\ | 113 | patients[patient_id][serie_id] = {'name':name, 'age':age, 'gender':gender,\ |
116 | 'study_description':study_description,\ | 114 | 'study_description':study_description,\ |
@@ -146,11 +144,6 @@ class DicomNet: | @@ -146,11 +144,6 @@ class DicomNet: | ||
146 | patient_id = str(values[0]) | 144 | patient_id = str(values[0]) |
147 | serie_id = str(values[1]) | 145 | serie_id = str(values[1]) |
148 | 146 | ||
149 | - print "(0x0010, 0x0020)",patient_id | ||
150 | - | ||
151 | - print "(0x0020, 0x000e)",serie_id | ||
152 | - print "\n\n" | ||
153 | - | ||
154 | de_patient.SetByteValue(patient_id, gdcm.VL(len(patient_id))) | 147 | de_patient.SetByteValue(patient_id, gdcm.VL(len(patient_id))) |
155 | de_serie.SetByteValue(serie_id, gdcm.VL(len(serie_id))) | 148 | de_serie.SetByteValue(serie_id, gdcm.VL(len(serie_id))) |
156 | 149 |
invesalius/presets.py
@@ -20,12 +20,11 @@ import glob | @@ -20,12 +20,11 @@ import glob | ||
20 | import os | 20 | import os |
21 | import plistlib | 21 | import plistlib |
22 | 22 | ||
23 | -import constants as const | 23 | +import invesalius.constants as const |
24 | 24 | ||
25 | from wx.lib.pubsub import pub as Publisher | 25 | from wx.lib.pubsub import pub as Publisher |
26 | 26 | ||
27 | -from utils import TwoWaysDictionary | ||
28 | - | 27 | +from invesalius.utils import TwoWaysDictionary |
29 | class Presets(): | 28 | class Presets(): |
30 | 29 | ||
31 | def __init__(self): | 30 | def __init__(self): |
invesalius/project.py
@@ -29,13 +29,11 @@ import wx | @@ -29,13 +29,11 @@ import wx | ||
29 | from wx.lib.pubsub import pub as Publisher | 29 | from wx.lib.pubsub import pub as Publisher |
30 | import vtk | 30 | import vtk |
31 | 31 | ||
32 | -import constants as const | ||
33 | -import data.mask as msk | ||
34 | -import data.polydata_utils as pu | ||
35 | -import data.surface as srf | ||
36 | -from presets import Presets | ||
37 | -from utils import Singleton, debug | ||
38 | -import version | 32 | +import invesalius.constants as const |
33 | +import invesalius.data.polydata_utils as pu | ||
34 | +from invesalius.presets import Presets | ||
35 | +from invesalius.utils import Singleton, debug | ||
36 | +import invesalius.version as version | ||
39 | 37 | ||
40 | class Project(object): | 38 | class Project(object): |
41 | # Only one project will be initialized per time. Therefore, we use | 39 | # Only one project will be initialized per time. Therefore, we use |
@@ -264,12 +262,13 @@ class Project(object): | @@ -264,12 +262,13 @@ class Project(object): | ||
264 | 262 | ||
265 | for f in filelist: | 263 | for f in filelist: |
266 | if filelist[f].endswith('.plist'): | 264 | if filelist[f].endswith('.plist'): |
267 | - print f | ||
268 | os.remove(f) | 265 | os.remove(f) |
269 | 266 | ||
270 | def OpenPlistProject(self, filename): | 267 | def OpenPlistProject(self, filename): |
271 | - import data.measures as ms | ||
272 | - | 268 | + import invesalius.data.measures as ms |
269 | + import invesalius.data.mask as msk | ||
270 | + import invesalius.data.surface as srf | ||
271 | + | ||
273 | if not const.VTK_WARNING: | 272 | if not const.VTK_WARNING: |
274 | log_path = os.path.join(const.LOG_FOLDER, 'vtkoutput.txt') | 273 | log_path = os.path.join(const.LOG_FOLDER, 'vtkoutput.txt') |
275 | fow = vtk.vtkFileOutputWindow() | 274 | fow = vtk.vtkFileOutputWindow() |
@@ -358,7 +357,6 @@ def Extract(filename, folder): | @@ -358,7 +357,6 @@ def Extract(filename, folder): | ||
358 | del fsrc | 357 | del fsrc |
359 | del fdst | 358 | del fdst |
360 | tar.close() | 359 | tar.close() |
361 | - print filelist | ||
362 | return filelist | 360 | return filelist |
363 | 361 | ||
364 | 362 |
invesalius/reader/bitmap_reader.py
@@ -23,7 +23,7 @@ import tempfile | @@ -23,7 +23,7 @@ import tempfile | ||
23 | import sys | 23 | import sys |
24 | import vtk | 24 | import vtk |
25 | import re | 25 | import re |
26 | -import constants as const | 26 | +import invesalius.constants as const |
27 | import wx | 27 | import wx |
28 | 28 | ||
29 | from wx.lib.pubsub import pub as Publisher | 29 | from wx.lib.pubsub import pub as Publisher |
@@ -34,9 +34,8 @@ from scipy import misc | @@ -34,9 +34,8 @@ from scipy import misc | ||
34 | import numpy | 34 | import numpy |
35 | import imghdr | 35 | import imghdr |
36 | 36 | ||
37 | -import utils | ||
38 | -from data import converters | ||
39 | - | 37 | +import invesalius.utils as utils |
38 | +import invesalius.data.converters as converters | ||
40 | #flag to control vtk error in read files | 39 | #flag to control vtk error in read files |
41 | no_error = True | 40 | no_error = True |
42 | vtk_error = False | 41 | vtk_error = False |
invesalius/reader/dicom.py
@@ -21,8 +21,8 @@ import time | @@ -21,8 +21,8 @@ import time | ||
21 | #import gdcm | 21 | #import gdcm |
22 | #import vtkgdcm | 22 | #import vtkgdcm |
23 | import sys | 23 | import sys |
24 | -import utils | ||
25 | -import constants as const | 24 | +import invesalius.utils as utils |
25 | +import invesalius.constants as const | ||
26 | # In DICOM file format, if multiple values are present for the | 26 | # In DICOM file format, if multiple values are present for the |
27 | # "Window Center" (Level) and "Window Width", both attributes | 27 | # "Window Center" (Level) and "Window Width", both attributes |
28 | # shall have the same number of values and shall be considered as | 28 | # shall have the same number of values and shall be considered as |
invesalius/reader/dicom_grouper.py
invesalius/reader/dicom_reader.py
@@ -29,14 +29,12 @@ import vtkgdcm | @@ -29,14 +29,12 @@ import vtkgdcm | ||
29 | import gdcm | 29 | import gdcm |
30 | from wx.lib.pubsub import pub as Publisher | 30 | from wx.lib.pubsub import pub as Publisher |
31 | 31 | ||
32 | -import constants as const | ||
33 | -import dicom | ||
34 | -import dicom_grouper | ||
35 | -import session | ||
36 | - | 32 | +import invesalius.constants as const |
33 | +import invesalius.reader.dicom as dicom | ||
34 | +import invesalius.reader.dicom_grouper as dicom_grouper | ||
35 | +import invesalius.session as session | ||
37 | import glob | 36 | import glob |
38 | -import utils | ||
39 | - | 37 | +import invesalius.utils as utils |
40 | 38 | ||
41 | import plistlib | 39 | import plistlib |
42 | 40 | ||
@@ -71,7 +69,7 @@ def SortFiles(filelist, dicom): | @@ -71,7 +69,7 @@ def SortFiles(filelist, dicom): | ||
71 | # Sort slices | 69 | # Sort slices |
72 | # FIXME: Coronal Crash. necessary verify | 70 | # FIXME: Coronal Crash. necessary verify |
73 | if (dicom.image.orientation_label <> "CORONAL"): | 71 | if (dicom.image.orientation_label <> "CORONAL"): |
74 | - #Organize reversed image | 72 | + ##Organize reversed image |
75 | sorter = gdcm.IPPSorter() | 73 | sorter = gdcm.IPPSorter() |
76 | sorter.SetComputeZSpacing(True) | 74 | sorter.SetComputeZSpacing(True) |
77 | sorter.SetZSpacingTolerance(1e-10) | 75 | sorter.SetZSpacingTolerance(1e-10) |
invesalius/session.py
@@ -27,7 +27,7 @@ import time | @@ -27,7 +27,7 @@ import time | ||
27 | #import wx.lib.pubsub as ps | 27 | #import wx.lib.pubsub as ps |
28 | from wx.lib.pubsub import pub as Publisher | 28 | from wx.lib.pubsub import pub as Publisher |
29 | 29 | ||
30 | -from utils import Singleton, debug | 30 | +from invesalius.utils import Singleton, debug |
31 | from random import randint | 31 | from random import randint |
32 | 32 | ||
33 | class Session(object): | 33 | class Session(object): |
@@ -42,7 +42,7 @@ class Session(object): | @@ -42,7 +42,7 @@ class Session(object): | ||
42 | self.project_status = 3 | 42 | self.project_status = 3 |
43 | 43 | ||
44 | def CreateItens(self): | 44 | def CreateItens(self): |
45 | - import constants as const | 45 | + import invesalius.constants as const |
46 | self.project_path = () | 46 | self.project_path = () |
47 | self.debug = False | 47 | self.debug = False |
48 | self.project_status = const.PROJ_CLOSE | 48 | self.project_status = const.PROJ_CLOSE |
@@ -75,7 +75,7 @@ class Session(object): | @@ -75,7 +75,7 @@ class Session(object): | ||
75 | self.WriteSessionFile() | 75 | self.WriteSessionFile() |
76 | 76 | ||
77 | def IsOpen(self): | 77 | def IsOpen(self): |
78 | - import constants as const | 78 | + import invesalius.constants as const |
79 | return self.project_status != const.PROJ_CLOSE | 79 | return self.project_status != const.PROJ_CLOSE |
80 | 80 | ||
81 | def SaveConfigFileBackup(self): | 81 | def SaveConfigFileBackup(self): |
@@ -98,7 +98,7 @@ class Session(object): | @@ -98,7 +98,7 @@ class Session(object): | ||
98 | return False | 98 | return False |
99 | 99 | ||
100 | def CloseProject(self): | 100 | def CloseProject(self): |
101 | - import constants as const | 101 | + import invesalius.constants as const |
102 | debug("Session.CloseProject") | 102 | debug("Session.CloseProject") |
103 | self.project_path = () | 103 | self.project_path = () |
104 | self.project_status = const.PROJ_CLOSE | 104 | self.project_status = const.PROJ_CLOSE |
@@ -107,7 +107,7 @@ class Session(object): | @@ -107,7 +107,7 @@ class Session(object): | ||
107 | self.WriteSessionFile() | 107 | self.WriteSessionFile() |
108 | 108 | ||
109 | def SaveProject(self, path=()): | 109 | def SaveProject(self, path=()): |
110 | - import constants as const | 110 | + import invesalius.constants as const |
111 | debug("Session.SaveProject") | 111 | debug("Session.SaveProject") |
112 | self.project_status = const.PROJ_OPEN | 112 | self.project_status = const.PROJ_OPEN |
113 | if path: | 113 | if path: |
@@ -118,12 +118,12 @@ class Session(object): | @@ -118,12 +118,12 @@ class Session(object): | ||
118 | self.WriteSessionFile() | 118 | self.WriteSessionFile() |
119 | 119 | ||
120 | def ChangeProject(self): | 120 | def ChangeProject(self): |
121 | - import constants as const | 121 | + import invesalius.constants as const |
122 | debug("Session.ChangeProject") | 122 | debug("Session.ChangeProject") |
123 | self.project_status = const.PROJ_CHANGE | 123 | self.project_status = const.PROJ_CHANGE |
124 | 124 | ||
125 | def CreateProject(self, filename): | 125 | def CreateProject(self, filename): |
126 | - import constants as const | 126 | + import invesalius.constants as const |
127 | debug("Session.CreateProject") | 127 | debug("Session.CreateProject") |
128 | Publisher.sendMessage('Begin busy cursor') | 128 | Publisher.sendMessage('Begin busy cursor') |
129 | # Set session info | 129 | # Set session info |
@@ -134,7 +134,7 @@ class Session(object): | @@ -134,7 +134,7 @@ class Session(object): | ||
134 | return self.tempdir | 134 | return self.tempdir |
135 | 135 | ||
136 | def OpenProject(self, filepath): | 136 | def OpenProject(self, filepath): |
137 | - import constants as const | 137 | + import invesalius.constants as const |
138 | debug("Session.OpenProject") | 138 | debug("Session.OpenProject") |
139 | # Add item to recent projects list | 139 | # Add item to recent projects list |
140 | item = (path, file) = os.path.split(filepath) | 140 | item = (path, file) = os.path.split(filepath) |
@@ -183,7 +183,7 @@ class Session(object): | @@ -183,7 +183,7 @@ class Session(object): | ||
183 | configfile.close() | 183 | configfile.close() |
184 | 184 | ||
185 | def __add_to_list(self, item): | 185 | def __add_to_list(self, item): |
186 | - import constants as const | 186 | + import invesalius.constants as const |
187 | # Last projects list | 187 | # Last projects list |
188 | l = self.recent_projects | 188 | l = self.recent_projects |
189 | 189 |
invesalius/style.py
@@ -1,112 +0,0 @@ | @@ -1,112 +0,0 @@ | ||
1 | -#-------------------------------------------------------------------------- | ||
2 | -# Software: InVesalius - Software de Reconstrucao 3D de Imagens Medicas | ||
3 | -# Copyright: (C) 2001 Centro de Pesquisas Renato Archer | ||
4 | -# Homepage: http://www.softwarepublico.gov.br | ||
5 | -# Contact: invesalius@cti.gov.br | ||
6 | -# License: GNU - GPL 2 (LICENSE.txt/LICENCA.txt) | ||
7 | -#-------------------------------------------------------------------------- | ||
8 | -# Este programa e software livre; voce pode redistribui-lo e/ou | ||
9 | -# modifica-lo sob os termos da Licenca Publica Geral GNU, conforme | ||
10 | -# publicada pela Free Software Foundation; de acordo com a versao 2 | ||
11 | -# da Licenca. | ||
12 | -# | ||
13 | -# Este programa eh distribuido na expectativa de ser util, mas SEM | ||
14 | -# QUALQUER GARANTIA; sem mesmo a garantia implicita de | ||
15 | -# COMERCIALIZACAO ou de ADEQUACAO A QUALQUER PROPOSITO EM | ||
16 | -# PARTICULAR. Consulte a Licenca Publica Geral GNU para obter mais | ||
17 | -# detalhes. | ||
18 | -#-------------------------------------------------------------------------- | ||
19 | - | ||
20 | -from wx.lib.pubsub import pub as Publisher | ||
21 | - | ||
22 | - | ||
23 | -# mode.py | ||
24 | -# to be instanced inside Controller (control.py) | ||
25 | - | ||
26 | - | ||
27 | - | ||
28 | -# IMPORTANT: When adding a new state, remember o insert it into LEVEL | ||
29 | -# dictionary | ||
30 | - | ||
31 | - | ||
32 | -# RULE: | ||
33 | -# default is the only level 0 | ||
34 | -# states controlled somehow by taskmenu are level 1 | ||
35 | -# states controlled by toolbar are level 2 | ||
36 | -#LEVEL = {SLICE_STATE_DEFAULT: 0, | ||
37 | -# SLICE_STATE_EDITOR: 1, | ||
38 | -# SLICE_STATE_WL: 2, | ||
39 | -# SLICE_STATE_SPIN: 2, | ||
40 | -# SLICE_STATE_ZOOM: 2, | ||
41 | -# SLICE_STATE_ZOOM_SL: 2} | ||
42 | -#---------------------- | ||
43 | -# TODO: Add to viewer_slice.py: | ||
44 | - | ||
45 | -#ps.Publisher().subscribe(self.OnSetMode, 'Set slice mode') | ||
46 | - | ||
47 | -#def OnSetMode(self, pubsub_evt): | ||
48 | -# mode = pubsub_evt.data | ||
49 | - # according to mode, set cursor, interaction, etc | ||
50 | -#---------------------- | ||
51 | -# TODO: Add GUI classes (frame, tasks related to slice, toolbar): | ||
52 | - | ||
53 | -# always bind to this class (regarding slice mode) and not to | ||
54 | -# viewer_slice directly | ||
55 | - | ||
56 | -# example - pseudo code | ||
57 | -#def OnToggleButtonSpin(self, evt) | ||
58 | -# if evt.toggle: # doesn't exist, just to illustrate | ||
59 | -# ps.Publisher().sendMessage('Enable mode', const.SLICE_STATE_ZOOM) | ||
60 | -# else: | ||
61 | -# ps.Publisher().subscribe('Disable mode', const.SLICE_STATE_ZOOM) | ||
62 | - | ||
63 | - | ||
64 | -#---------------------- | ||
65 | - | ||
66 | - | ||
67 | -import constants as const | ||
68 | - | ||
69 | -class StyleStateManager(object): | ||
70 | -# don't need to be singleton, only needs to be instantiated inside | ||
71 | -# (Controller) self.slice_mode = SliceMode() | ||
72 | - | ||
73 | - def __init__(self): | ||
74 | - self.stack = {} | ||
75 | - | ||
76 | - # push default value to stack | ||
77 | - self.stack[const.STYLE_LEVEL[const.STATE_DEFAULT]] = \ | ||
78 | - const.STATE_DEFAULT | ||
79 | - | ||
80 | - def AddState(self, state): | ||
81 | - | ||
82 | - level = const.STYLE_LEVEL[state] | ||
83 | - max_level = max(self.stack.keys()) | ||
84 | - | ||
85 | - # Insert new state into stack | ||
86 | - self.stack[level] = state | ||
87 | - | ||
88 | - | ||
89 | - new_max_level = max(self.stack.keys()) | ||
90 | - return self.stack[new_max_level] | ||
91 | - | ||
92 | - def RemoveState(self, state): | ||
93 | - level = const.STYLE_LEVEL[state] | ||
94 | - if level in self.stack.keys(): | ||
95 | - max_level = max(self.stack.keys()) | ||
96 | - | ||
97 | - # Remove item from stack | ||
98 | - self.stack.pop(level) | ||
99 | - | ||
100 | - # New max level | ||
101 | - new_max_level = max(self.stack.keys()) | ||
102 | - | ||
103 | - # Only will affect InVesalius behaviour if the highest | ||
104 | - # level in stack has been removed | ||
105 | - if level == max_level: | ||
106 | - new_state = self.stack[new_max_level] | ||
107 | - | ||
108 | - return self.stack[new_max_level] | ||
109 | - | ||
110 | - max_level = max(self.stack.keys()) | ||
111 | - return self.stack[max_level] | ||
112 | - |
invesalius/utils.py
@@ -71,10 +71,9 @@ def debug(error_str): | @@ -71,10 +71,9 @@ def debug(error_str): | ||
71 | Redirects output to file, or to the terminal | 71 | Redirects output to file, or to the terminal |
72 | This should be used in the place of "print" | 72 | This should be used in the place of "print" |
73 | """ | 73 | """ |
74 | - from session import Session | 74 | + from invesalius.session import Session |
75 | session = Session() | 75 | session = Session() |
76 | #if session.debug: | 76 | #if session.debug: |
77 | - print >> sys.stderr, error_str | ||
78 | 77 | ||
79 | def next_copy_name(original_name, names_list): | 78 | def next_copy_name(original_name, names_list): |
80 | """ | 79 | """ |
@@ -372,8 +371,9 @@ def UpdateCheck(): | @@ -372,8 +371,9 @@ def UpdateCheck(): | ||
372 | import urllib | 371 | import urllib |
373 | import urllib2 | 372 | import urllib2 |
374 | import wx | 373 | import wx |
374 | + import invesalius.session as ses | ||
375 | def _show_update_info(): | 375 | def _show_update_info(): |
376 | - from gui import dialogs | 376 | + from invesalius.gui import dialogs |
377 | msg=_("A new version of InVesalius is available. Do you want to open the download website now?") | 377 | msg=_("A new version of InVesalius is available. Do you want to open the download website now?") |
378 | title=_("Invesalius Update") | 378 | title=_("Invesalius Update") |
379 | msgdlg = dialogs.UpdateMessageDialog(url) | 379 | msgdlg = dialogs.UpdateMessageDialog(url) |
@@ -385,8 +385,7 @@ def UpdateCheck(): | @@ -385,8 +385,7 @@ def UpdateCheck(): | ||
385 | print "Checking updates..." | 385 | print "Checking updates..." |
386 | 386 | ||
387 | # Check if there is a language set | 387 | # Check if there is a language set |
388 | - #import i18n | ||
389 | - import session as ses | 388 | + #import invesalius.i18n as i18n import invesalius.session as ses |
390 | session = ses.Session() | 389 | session = ses.Session() |
391 | install_lang = 0 | 390 | install_lang = 0 |
392 | if session.ReadLanguage(): | 391 | if session.ReadLanguage(): |
@@ -400,7 +399,7 @@ def UpdateCheck(): | @@ -400,7 +399,7 @@ def UpdateCheck(): | ||
400 | random_id = session.GetRandomId() | 399 | random_id = session.GetRandomId() |
401 | 400 | ||
402 | # Fetch update data from server | 401 | # Fetch update data from server |
403 | - import constants as const | 402 | + import invesalius.constants as const |
404 | url = "http://www.cti.gov.br/dt3d/invesalius/update/checkupdate.php" | 403 | url = "http://www.cti.gov.br/dt3d/invesalius/update/checkupdate.php" |
405 | headers = { 'User-Agent' : 'Mozilla/5.0 (compatible; MSIE 5.5; Windows NT)' } | 404 | headers = { 'User-Agent' : 'Mozilla/5.0 (compatible; MSIE 5.5; Windows NT)' } |
406 | data = {'update_protocol_version' : '1', | 405 | data = {'update_protocol_version' : '1', |