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
Dockerfile
... ... @@ -18,10 +18,14 @@ RUN apt-get install -y \
18 18 python-wxgtk3.0 \
19 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 27 WORKDIR /usr/local/app
22 28  
23 29 COPY . .
24 30  
25 31 RUN python setup.py build_ext --inplace
26   -
27   -RUN Xvfb :10 -ac -screen 0 1024x768x24 &
... ...
app.py
... ... @@ -24,6 +24,7 @@ import optparse as op
24 24 import os
25 25 import sys
26 26 import shutil
  27 +import traceback
27 28  
28 29 if sys.platform == 'win32':
29 30 import _winreg
... ... @@ -247,10 +248,11 @@ def parse_comand_line():
247 248 dest="dicom_dir")
248 249  
249 250 parser.add_option("-s", "--save",
250   - action="store",
251   - dest="save",
252 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 256 options, args = parser.parse_args()
255 257  
256 258 # If debug argument...
... ... @@ -265,25 +267,62 @@ def parse_comand_line():
265 267  
266 268 if options.save:
267 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 274 return True
271 275  
272 276 # Check if there is a file path somewhere in what the user wrote
273 277 # In case there is, try opening as it was a inv3
274 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 286 return True
284 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 326 def print_events(data):
288 327 """
289 328 Print pubsub messages
... ...