Commit e7bc240bce789f3196fbe0e2b9e75e2fbdaee04c

Authored by Santiago Castro
1 parent e2c39d00
Exists in command-line

Add option --export

Showing 2 changed files with 46 additions and 32 deletions   Show diff stats
Dockerfile
... ... @@ -3,6 +3,7 @@ FROM ubuntu:16.04
3 3 RUN apt-get update
4 4 RUN apt-get install -y \
5 5 cython \
  6 + locales \
6 7 python-concurrent.futures \
7 8 python-gdcm \
8 9 python-matplotlib \
... ... @@ -15,10 +16,8 @@ RUN apt-get install -y \
15 16 python-skimage \
16 17 python-vtk6 \
17 18 python-vtkgdcm \
18   - python-wxgtk3.0 \
19   - xvfb # For a virtual X server.
  19 + python-wxgtk3.0
20 20  
21   -RUN apt-get install -y locales
22 21 RUN locale-gen en_US.UTF-8
23 22 ENV LANG en_US.UTF-8
24 23 ENV LANGUAGE en_US:en
... ...
app.py
... ... @@ -271,10 +271,16 @@ def parse_comand_line():
271 271 dest="dicom_dir")
272 272  
273 273 parser.add_option("-s", "--save",
274   - help="To save the project after an import.")
  274 + help="Save the project after an import.")
  275 +
  276 + parser.add_option("-t", "--threshold",
  277 + help="Define the threshold for the export (e.g. 100-780).")
  278 +
  279 + parser.add_option("-e", "--export",
  280 + help="Export to STL.")
275 281  
276 282 parser.add_option("-a", "--export-to-all",
277   - help="To open a project and export it to STL for all mask presets.")
  283 + help="Export to STL for all mask presets.")
278 284  
279 285 options, args = parser.parse_args()
280 286 return options, args
... ... @@ -295,7 +301,7 @@ def use_cmd_optargs(options, args):
295 301 Publisher.sendMessage('Save project', os.path.abspath(options.save))
296 302 exit(0)
297 303  
298   - check_for_exporting(options)
  304 + check_for_export(options)
299 305  
300 306 return True
301 307  
... ... @@ -307,48 +313,57 @@ def use_cmd_optargs(options, args):
307 313 path_ = os.path.abspath(arg)
308 314 Publisher.sendMessage('Open project', path_)
309 315  
310   - check_for_exporting(options)
  316 + check_for_export(options)
311 317  
312 318 return True
313 319 return False
314 320  
315 321  
316   -def check_for_exporting(options):
317   - if options.export_to_all:
  322 +def check_for_export(options):
  323 + if options.export:
  324 + if not options.threshold:
  325 + print("Need option --threshold when using --export.")
  326 + exit(1)
  327 + threshold_range = tuple([int(n) for n in options.threshold.split('-')])
  328 + export(options.export, threshold_range)
  329 + elif options.export_to_all:
  330 + # noinspection PyBroadException
318 331 try:
319   - method = {
320   - 'algorithm': 'Default',
321   - 'options': {},
322   - }
323   -
324   - import invesalius.constants as const
325 332 from invesalius.project import Project
326 333  
327 334 for threshold_name, threshold_range in Project().presets.thresh_ct.iteritems():
328 335 if isinstance(threshold_range[0], int):
329   - Publisher.sendMessage('Set threshold values', threshold_range)
330   -
331   - srf_options = {
332   - 'index': 0,
333   - 'name': '',
334   - 'quality': _('Optimal *'),
335   - 'fill': False,
336   - 'keep_largest': False,
337   - 'overwrite': False,
338   - }
339   - Publisher.sendMessage('Create surface from index',
340   - {'method': method, 'options': srf_options})
341   -
342   - filename = u'{}-{}.stl'.format(options.export_to_all, threshold_name)
343   - Publisher.sendMessage('Export surface to file', (filename, const.FILETYPE_STL))
344   -
345   - Publisher.sendMessage('Remove surfaces', [0])
  336 + path_ = u'{}-{}.stl'.format(options.export_to_all, threshold_name)
  337 + export(path_, threshold_range)
346 338 except:
347 339 traceback.print_exc()
348 340 finally:
349 341 exit(0)
350 342  
351 343  
  344 +def export(path_, threshold_range):
  345 + import invesalius.constants as const
  346 +
  347 + Publisher.sendMessage('Set threshold values', threshold_range)
  348 +
  349 + surface_options = {
  350 + 'method': {
  351 + 'algorithm': 'Default',
  352 + 'options': {},
  353 + }, 'options': {
  354 + 'index': 0,
  355 + 'name': '',
  356 + 'quality': _('Optimal *'),
  357 + 'fill': False,
  358 + 'keep_largest': False,
  359 + 'overwrite': False,
  360 + }
  361 + }
  362 + Publisher.sendMessage('Create surface from index', surface_options)
  363 + Publisher.sendMessage('Export surface to file', (path_, const.FILETYPE_STL))
  364 + Publisher.sendMessage('Remove surfaces', [0])
  365 +
  366 +
352 367 def print_events(data):
353 368 """
354 369 Print pubsub messages
... ...