2016-01-29 1 views
3

Я всегда предпочитал больше pythonic tvtk над необработанным API Python vtk, но с последними версиями, которые я получаю от MacPorts, у меня есть проблема, что основные вещи больше не работают. Следующий фрагмент взят из tvtv documentation:Как исправить «TraitError: черта« ввода »экземпляра ... является« только для чтения ».»

from tvtk.api import tvtk 
cs = tvtk.ConeSource() 
cs.resolution = 36 
m = tvtk.PolyDataMapper() 
m.input = cs.output # <== fails here 
a = tvtk.Actor() 
a.mapper = m 
p = a.property 
p.representation = 'w' 
print p.representation 

С каждой инициализации признаков «вход», я получаю сообщение об ошибке, как

TraitError: The 'input' trait of a PolyDataMapper instance is 'read only'. 

Я нашел много подобных вопросов, сообщения об ошибках и т.д., но все они указывают на изменения, связанные с ВТК 6 (SetInputData и SetInputConnection вместо SetInput), который should be supported in Mayavi 4.4.2, и я имею:

vtk @6.3.0_0+python27 (active) 
py27-traits @4.5.0_0 (active) 
py27-traitsui @5.0.0_0 (active) 
py27-apptools @4.3.0_0 (active) 
py27-envisage @4.4.0_0 (active) 
py27-pyface @5.0.0_0+pyqt4 (active) 
py27-mayavi @4.4.3_0 (active) 

PolyDataMapper имеет следующую входную-черту:

'input': <traits.traits.CTrait at 0x11b23a260>, 
'input_algorithm': <traits.traits.CTrait at 0x119516520>, 
'input_as_data_set': <traits.traits.CTrait at 0x11b230470>, 
'input_connection': <traits.traits.CTrait at 0x119516310>, 
'input_executive': <traits.traits.CTrait at 0x1195165d0>, 
'input_information': <traits.traits.CTrait at 0x119516680>, 

ответ

2

MayaVi поддерживает как VTK 5,10 и VTK 6.x, которые имеют внутренне различный API для настройки к трубопроводу. Пакет tvtk имеет общий API, который поддерживает обе версии для переносимости.

Изменение:

m.input = cs.output # <== fails here 

к:

from tvtk.common import configure_input 
tvtk.configure_input(m, cs) # <== will work 

Ref: https://github.com/enthought/mayavi/blob/master/tvtk/common.py#L79

+0

Косвенно выше, содержит ответ, который я искал, а именно "правильный" новый API. Меня не интересует поддержка VTK 5, но я не видел, как этот код нужно адаптировать. Из ссылки кажется, что для случая отсутствия соединения нет никакой черты, но 'set_input_data (some_data)' - это то, что мне не хватало. –

Смежные вопросы