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', |