22
22
from ..interfaces .base import (BaseInterface , traits , TraitedSpec , File ,
23
23
BaseInterfaceInputSpec )
24
24
from warnings import warn
25
+
26
+
27
+ have_tvtk = False
28
+
29
+ try :
30
+ from tvtk .api import tvtk
31
+ have_tvtk = True
32
+ except ImportError :
33
+ raise ImportError ('Interface requires tvtk' )
34
+
35
+ try :
36
+ from enthought .etsconfig .api import ETSConfig
37
+ ETSConfig .toolkit = 'null'
38
+ except ImportError :
39
+ iflogger .warn (('ETS toolkit could not be imported' ))
40
+ except ValueError :
41
+ iflogger .warn (('ETS toolkit could not be set to null' ))
42
+
43
+ if have_tvtk :
44
+ tvtk .tvtk_classes .vtk_version import vtk_build_version
45
+ vtk_major = int (vtk_build_version [0 ])
46
+
25
47
iflogger = logging .getLogger ('interface' )
26
48
27
49
50
+ class TVTKBaseInterface (BaseInterface ):
51
+ _redirect_x = True
52
+
53
+ def __init__ (self , ** inputs ):
54
+ if not have_tvtk :
55
+ raise RuntimeError ('Interface requires tvtk' )
56
+ super (TVTKBaseInterface , self ).__init__ (** inputs )
57
+
58
+
28
59
class WarpPointsInputSpec (BaseInterfaceInputSpec ):
29
60
points = File (exists = True , mandatory = True ,
30
61
desc = ('file containing the point set' ))
@@ -41,7 +72,7 @@ class WarpPointsOutputSpec(TraitedSpec):
41
72
out_points = File (desc = 'the warped point set' )
42
73
43
74
44
- class WarpPoints (BaseInterface ):
75
+ class WarpPoints (TVTKBaseInterface ):
45
76
46
77
"""
47
78
Applies a displacement field to a point set given in vtk format.
@@ -61,7 +92,6 @@ class WarpPoints(BaseInterface):
61
92
"""
62
93
input_spec = WarpPointsInputSpec
63
94
output_spec = WarpPointsOutputSpec
64
- _redirect_x = True
65
95
66
96
def _gen_fname (self , in_file , suffix = 'generated' , ext = None ):
67
97
import os .path as op
@@ -80,26 +110,6 @@ def _gen_fname(self, in_file, suffix='generated', ext=None):
80
110
return op .abspath ('%s_%s.%s' % (fname , suffix , ext ))
81
111
82
112
def _run_interface (self , runtime ):
83
- vtk_major = 6
84
- try :
85
- import vtk
86
- vtk_major = vtk .VTK_MAJOR_VERSION
87
- except ImportError :
88
- iflogger .warn (('python-vtk could not be imported' ))
89
-
90
- try :
91
- from tvtk .api import tvtk
92
- except ImportError :
93
- raise ImportError ('Interface requires tvtk' )
94
-
95
- try :
96
- from enthought .etsconfig .api import ETSConfig
97
- ETSConfig .toolkit = 'null'
98
- except ImportError :
99
- iflogger .warn (('ETS toolkit could not be imported' ))
100
- except ValueError :
101
- iflogger .warn (('ETS toolkit could not be set to null' ))
102
-
103
113
import nibabel as nb
104
114
import numpy as np
105
115
from scipy import ndimage
@@ -182,7 +192,7 @@ class ComputeMeshWarpOutputSpec(TraitedSpec):
182
192
desc = 'numpy file keeping computed distances and weights' )
183
193
184
194
185
- class ComputeMeshWarp (BaseInterface ):
195
+ class ComputeMeshWarp (TVTKBaseInterface ):
186
196
187
197
"""
188
198
Calculates a the vertex-wise warping to get surface2 from surface1.
@@ -207,7 +217,6 @@ class ComputeMeshWarp(BaseInterface):
207
217
208
218
input_spec = ComputeMeshWarpInputSpec
209
219
output_spec = ComputeMeshWarpOutputSpec
210
- _redirect_x = True
211
220
212
221
def _triangle_area (self , A , B , C ):
213
222
A = np .array (A )
@@ -220,19 +229,6 @@ def _triangle_area(self, A, B, C):
220
229
return area
221
230
222
231
def _run_interface (self , runtime ):
223
- try :
224
- from tvtk .api import tvtk
225
- except ImportError :
226
- raise ImportError ('Interface ComputeMeshWarp requires tvtk' )
227
-
228
- try :
229
- from enthought .etsconfig .api import ETSConfig
230
- ETSConfig .toolkit = 'null'
231
- except ImportError :
232
- iflogger .warn (('ETS toolkit could not be imported' ))
233
- except ValueError :
234
- iflogger .warn (('ETS toolkit is already set' ))
235
-
236
232
r1 = tvtk .PolyDataReader (file_name = self .inputs .surface1 )
237
233
r2 = tvtk .PolyDataReader (file_name = self .inputs .surface2 )
238
234
vtk1 = r1 .output
@@ -280,7 +276,12 @@ def _run_interface(self, runtime):
280
276
out_mesh .point_data .vectors .name = 'warpings'
281
277
writer = tvtk .PolyDataWriter (
282
278
file_name = op .abspath (self .inputs .out_warp ))
283
- writer .set_input_data (out_mesh )
279
+
280
+ if vtk_major <= 5 :
281
+ writer .input = mesh
282
+ else :
283
+ writer .set_input_data_object (mesh )
284
+
284
285
writer .write ()
285
286
286
287
self ._distance = np .average (errvector , weights = weights )
@@ -322,7 +323,7 @@ class MeshWarpMathsOutputSpec(TraitedSpec):
322
323
desc = 'vtk with surface warped' )
323
324
324
325
325
- class MeshWarpMaths (BaseInterface ):
326
+ class MeshWarpMaths (TVTKBaseInterface ):
326
327
327
328
"""
328
329
Performs the most basic mathematical operations on the warping field
@@ -348,22 +349,8 @@ class MeshWarpMaths(BaseInterface):
348
349
349
350
input_spec = MeshWarpMathsInputSpec
350
351
output_spec = MeshWarpMathsOutputSpec
351
- _redirect_x = True
352
352
353
353
def _run_interface (self , runtime ):
354
- try :
355
- from tvtk .api import tvtk
356
- except ImportError :
357
- raise ImportError ('Interface ComputeMeshWarp requires tvtk' )
358
-
359
- try :
360
- from enthought .etsconfig .api import ETSConfig
361
- ETSConfig .toolkit = 'null'
362
- except ImportError :
363
- iflogger .warn (('ETS toolkit could not be imported' ))
364
- except ValueError :
365
- iflogger .warn (('ETS toolkit is already set' ))
366
-
367
354
r1 = tvtk .PolyDataReader (file_name = self .inputs .in_surf )
368
355
vtk1 = r1 .output
369
356
r1 .update ()
@@ -412,14 +399,21 @@ def _run_interface(self, runtime):
412
399
vtk1 .point_data .vectors = warping
413
400
writer = tvtk .PolyDataWriter (
414
401
file_name = op .abspath (self .inputs .out_warp ))
415
- writer .set_input_data (vtk1 )
402
+ if vtk_major <= 5 :
403
+ writer .input = vtk1
404
+ else :
405
+ writer .set_input_data_object (vtk1 )
416
406
writer .write ()
417
407
418
408
vtk1 .point_data .vectors = None
419
409
vtk1 .points = points1 + warping
420
410
writer = tvtk .PolyDataWriter (
421
411
file_name = op .abspath (self .inputs .out_file ))
422
- writer .set_input_data (vtk1 )
412
+
413
+ if vtk_major <= 5 :
414
+ writer .input = vtk1
415
+ else :
416
+ writer .set_input_data_object (vtk1 )
423
417
writer .write ()
424
418
425
419
return runtime
0 commit comments