2222from ..interfaces .base import (BaseInterface , traits , TraitedSpec , File ,
2323 BaseInterfaceInputSpec )
2424from 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+
2547iflogger = logging .getLogger ('interface' )
2648
2749
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+
2859class WarpPointsInputSpec (BaseInterfaceInputSpec ):
2960 points = File (exists = True , mandatory = True ,
3061 desc = ('file containing the point set' ))
@@ -41,7 +72,7 @@ class WarpPointsOutputSpec(TraitedSpec):
4172 out_points = File (desc = 'the warped point set' )
4273
4374
44- class WarpPoints (BaseInterface ):
75+ class WarpPoints (TVTKBaseInterface ):
4576
4677 """
4778 Applies a displacement field to a point set given in vtk format.
@@ -61,7 +92,6 @@ class WarpPoints(BaseInterface):
6192 """
6293 input_spec = WarpPointsInputSpec
6394 output_spec = WarpPointsOutputSpec
64- _redirect_x = True
6595
6696 def _gen_fname (self , in_file , suffix = 'generated' , ext = None ):
6797 import os .path as op
@@ -80,26 +110,6 @@ def _gen_fname(self, in_file, suffix='generated', ext=None):
80110 return op .abspath ('%s_%s.%s' % (fname , suffix , ext ))
81111
82112 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-
103113 import nibabel as nb
104114 import numpy as np
105115 from scipy import ndimage
@@ -182,7 +192,7 @@ class ComputeMeshWarpOutputSpec(TraitedSpec):
182192 desc = 'numpy file keeping computed distances and weights' )
183193
184194
185- class ComputeMeshWarp (BaseInterface ):
195+ class ComputeMeshWarp (TVTKBaseInterface ):
186196
187197 """
188198 Calculates a the vertex-wise warping to get surface2 from surface1.
@@ -207,7 +217,6 @@ class ComputeMeshWarp(BaseInterface):
207217
208218 input_spec = ComputeMeshWarpInputSpec
209219 output_spec = ComputeMeshWarpOutputSpec
210- _redirect_x = True
211220
212221 def _triangle_area (self , A , B , C ):
213222 A = np .array (A )
@@ -220,19 +229,6 @@ def _triangle_area(self, A, B, C):
220229 return area
221230
222231 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-
236232 r1 = tvtk .PolyDataReader (file_name = self .inputs .surface1 )
237233 r2 = tvtk .PolyDataReader (file_name = self .inputs .surface2 )
238234 vtk1 = r1 .output
@@ -280,7 +276,12 @@ def _run_interface(self, runtime):
280276 out_mesh .point_data .vectors .name = 'warpings'
281277 writer = tvtk .PolyDataWriter (
282278 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+
284285 writer .write ()
285286
286287 self ._distance = np .average (errvector , weights = weights )
@@ -322,7 +323,7 @@ class MeshWarpMathsOutputSpec(TraitedSpec):
322323 desc = 'vtk with surface warped' )
323324
324325
325- class MeshWarpMaths (BaseInterface ):
326+ class MeshWarpMaths (TVTKBaseInterface ):
326327
327328 """
328329 Performs the most basic mathematical operations on the warping field
@@ -348,22 +349,8 @@ class MeshWarpMaths(BaseInterface):
348349
349350 input_spec = MeshWarpMathsInputSpec
350351 output_spec = MeshWarpMathsOutputSpec
351- _redirect_x = True
352352
353353 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-
367354 r1 = tvtk .PolyDataReader (file_name = self .inputs .in_surf )
368355 vtk1 = r1 .output
369356 r1 .update ()
@@ -412,14 +399,21 @@ def _run_interface(self, runtime):
412399 vtk1 .point_data .vectors = warping
413400 writer = tvtk .PolyDataWriter (
414401 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 )
416406 writer .write ()
417407
418408 vtk1 .point_data .vectors = None
419409 vtk1 .points = points1 + warping
420410 writer = tvtk .PolyDataWriter (
421411 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 )
423417 writer .write ()
424418
425419 return runtime
0 commit comments