19
19
from mayavi .core .ui .mayavi_scene import MayaviScene
20
20
from traits .api import (HasTraits , Range , Int , Float ,
21
21
Bool , Enum , on_trait_change , Instance )
22
+ from tvtk .api import tvtk
22
23
23
24
from . import utils , io
24
25
from .utils import (Surface , verbose , create_color_lut , _get_subjects_dir ,
@@ -189,7 +190,8 @@ def _force_render(figures, backend):
189
190
_gui .process_events ()
190
191
191
192
192
- def _make_viewer (figure , n_row , n_col , title , scene_size , offscreen ):
193
+ def _make_viewer (figure , n_row , n_col , title , scene_size , offscreen ,
194
+ interaction = 'trackball' ):
193
195
"""Triage viewer creation
194
196
195
197
If n_row == n_col == 1, then we can use a Mayavi figure, which
@@ -219,6 +221,11 @@ def _make_viewer(figure, n_row, n_col, title, scene_size, offscreen):
219
221
else :
220
222
window = _MlabGenerator (n_row , n_col , w , h , title )
221
223
figures , _v = window ._get_figs_view ()
224
+ if interaction == 'terrain' : # "trackball" is default
225
+ for figure in figures :
226
+ for f in figure :
227
+ f .scene .interactor .interactor_style = \
228
+ tvtk .InteractorStyleTerrain ()
222
229
else :
223
230
if isinstance (figure , int ): # use figure with specified id
224
231
figure = [mlab .figure (figure , size = scene_size )]
@@ -351,6 +358,9 @@ class Brain(object):
351
358
If True, rendering will be done offscreen (not shown). Useful
352
359
mostly for generating images or screenshots, but can be buggy.
353
360
Use at your own risk.
361
+ interaction : str
362
+ Can be "trackball" (default) or "terrain", i.e. a turntable-style
363
+ camera.
354
364
355
365
Attributes
356
366
----------
@@ -362,7 +372,8 @@ def __init__(self, subject_id, hemi, surf, title=None,
362
372
cortex = "classic" , alpha = 1.0 , size = 800 , background = "black" ,
363
373
foreground = "white" , figure = None , subjects_dir = None ,
364
374
views = ['lat' ], offset = True , show_toolbar = False ,
365
- offscreen = False , config_opts = None , curv = None ):
375
+ offscreen = False , interaction = 'trackball' ,
376
+ config_opts = None , curv = None ):
366
377
367
378
# Keep backwards compatability
368
379
if config_opts is not None :
@@ -392,6 +403,10 @@ def __init__(self, subject_id, hemi, surf, title=None,
392
403
if not curv :
393
404
cortex = None
394
405
406
+ if not isinstance (interaction , string_types ) or \
407
+ interaction not in ('trackball' , 'terrain' ):
408
+ raise ValueError ('interaction must be "trackball" or "terrain", '
409
+ 'got "%s"' % (interaction ,))
395
410
col_dict = dict (lh = 1 , rh = 1 , both = 1 , split = 2 )
396
411
n_col = col_dict [hemi ]
397
412
if hemi not in col_dict .keys ():
@@ -433,7 +448,8 @@ def __init__(self, subject_id, hemi, surf, title=None,
433
448
# deal with making figures
434
449
self ._set_window_properties (size , background , foreground )
435
450
figures , _v = _make_viewer (figure , n_row , n_col , title ,
436
- self ._scene_size , offscreen )
451
+ self ._scene_size , offscreen ,
452
+ interaction )
437
453
self ._figures = figures
438
454
self ._v = _v
439
455
self ._window_backend = 'Mayavi' if self ._v is None else 'TraitsUI'
0 commit comments