Commit e7bc240bce789f3196fbe0e2b9e75e2fbdaee04c
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 | ... | ... |