Commit 34cd93f5f83ca90c743f82d66165f1dcedc69c36

Authored by Santiago Castro
1 parent 9647607e

Add command to import and export in STL to all available presets

Showing 2 changed files with 56 additions and 13 deletions   Show diff stats
@@ -18,10 +18,14 @@ RUN apt-get install -y \ @@ -18,10 +18,14 @@ RUN apt-get install -y \
18 python-wxgtk3.0 \ 18 python-wxgtk3.0 \
19 xvfb # For a virtual X server. 19 xvfb # For a virtual X server.
20 20
  21 +RUN apt-get install -y locales
  22 +RUN locale-gen en_US.UTF-8
  23 +ENV LANG en_US.UTF-8
  24 +ENV LANGUAGE en_US:en
  25 +ENV LC_ALL en_US.UTF-8
  26 +
21 WORKDIR /usr/local/app 27 WORKDIR /usr/local/app
22 28
23 COPY . . 29 COPY . .
24 30
25 RUN python setup.py build_ext --inplace 31 RUN python setup.py build_ext --inplace
26 -  
27 -RUN Xvfb :10 -ac -screen 0 1024x768x24 &  
@@ -24,6 +24,7 @@ import optparse as op @@ -24,6 +24,7 @@ import optparse as op
24 import os 24 import os
25 import sys 25 import sys
26 import shutil 26 import shutil
  27 +import traceback
27 28
28 if sys.platform == 'win32': 29 if sys.platform == 'win32':
29 import _winreg 30 import _winreg
@@ -247,10 +248,11 @@ def parse_comand_line(): @@ -247,10 +248,11 @@ def parse_comand_line():
247 dest="dicom_dir") 248 dest="dicom_dir")
248 249
249 parser.add_option("-s", "--save", 250 parser.add_option("-s", "--save",
250 - action="store",  
251 - dest="save",  
252 help="To save the project after an import.") 251 help="To save the project after an import.")
253 252
  253 + parser.add_option("-a", "--export-to-all",
  254 + help="To open a project and export it to STL for all mask presets.")
  255 +
254 options, args = parser.parse_args() 256 options, args = parser.parse_args()
255 257
256 # If debug argument... 258 # If debug argument...
@@ -265,25 +267,62 @@ def parse_comand_line(): @@ -265,25 +267,62 @@ def parse_comand_line():
265 267
266 if options.save: 268 if options.save:
267 Publisher.sendMessage('Save project', os.path.abspath(options.save)) 269 Publisher.sendMessage('Save project', os.path.abspath(options.save))
268 - return True 270 + exit(0)
  271 +
  272 + check_for_exporting(options)
269 273
270 return True 274 return True
271 275
272 # Check if there is a file path somewhere in what the user wrote 276 # Check if there is a file path somewhere in what the user wrote
273 # In case there is, try opening as it was a inv3 277 # In case there is, try opening as it was a inv3
274 else: 278 else:
275 - i = len(args)  
276 - while i:  
277 - i -= 1  
278 - file = args[i]  
279 - if os.path.isfile(file):  
280 - path = os.path.abspath(file)  
281 - Publisher.sendMessage('Open project', path)  
282 - i = 0 279 + for arg in reversed(args):
  280 + if os.path.isfile(arg):
  281 + path_ = os.path.abspath(arg)
  282 + Publisher.sendMessage('Open project', path_)
  283 +
  284 + check_for_exporting(options)
  285 +
283 return True 286 return True
284 return False 287 return False
285 288
286 289
  290 +def check_for_exporting(options):
  291 + if options.export_to_all:
  292 + try:
  293 + method = {
  294 + 'algorithm': 'Default',
  295 + 'options': {},
  296 + }
  297 +
  298 + import invesalius.constants as const
  299 + from invesalius.project import Project
  300 +
  301 + for threshold_name, threshold_range in Project().presets.thresh_ct.iteritems():
  302 + if isinstance(threshold_range[0], int):
  303 + Publisher.sendMessage('Set threshold values', threshold_range)
  304 +
  305 + srf_options = {
  306 + 'index': 0,
  307 + 'name': '',
  308 + 'quality': _('Optimal *'),
  309 + 'fill': False,
  310 + 'keep_largest': False,
  311 + 'overwrite': False,
  312 + }
  313 + Publisher.sendMessage('Create surface from index',
  314 + {'method': method, 'options': srf_options})
  315 +
  316 + filename = u'{}-{}.stl'.format(options.export_to_all, threshold_name)
  317 + Publisher.sendMessage('Export surface to file', (filename, const.FILETYPE_STL))
  318 +
  319 + Publisher.sendMessage('Remove surfaces', [0])
  320 + except:
  321 + traceback.print_exc()
  322 + finally:
  323 + exit(0)
  324 +
  325 +
287 def print_events(data): 326 def print_events(data):
288 """ 327 """
289 Print pubsub messages 328 Print pubsub messages