2014-09-12 1 views
1

Я пытаюсь извлечь данные вершин из экземпляра tvtk.PolyData. Например:Как извлечь данные вершин из экземпляра PolyData tvtk?

from numpy import array 
from tvtk.api import tvtk 
from mayavi.sources.vtk_data_source import VTKDataSource 
from mayavi.modules.surface import Surface 
from mayavi import mlab 

pointArr=array([[0,0,0],[1,0,0],[1,1,0],[0,1,0],[0,1,1],[1,1,1]],dtype="float64") 
faceArr=array([[0,1,2,3],[2,3,4,5]]) 
faces = tvtk.PolyData() 
faces.points=pointArr 
print faces.points 
faces.polys=faceArr 
faces.point_data.scalars = pointArr[:,2] 
faces.point_data.scalars.name = 'Height' 
src = VTKDataSource(data = faces) 
mlab.pipeline.surface(src, opacity=1.) 
mlab.show() 

Печатается

vtkPoints (0x9811398) 
    Debug: Off 
    Modified Time: 838816 
    Reference Count: 2 
    Registered Events: 
    Registered Observers: 
     vtkObserver (0x98112b8) 
     Event: 33 
     EventName: ModifiedEvent 
     Command: 0x9811688 
     Priority: 0 
     Tag: 1 
    Data: 0x9811480 
    Data Array Name: Points 
    Number Of Points: 6 
    Bounds: 
    Xmin,Xmax: (0, 1) 
    Ymin,Ymax: (0, 1) 
    Zmin,Zmax: (0, 1) 

Что здесь происходит? Я ожидал увидеть массив NumPy:

[[ 0. 0. 0.] 
[ 1. 0. 0.] 
[ 1. 1. 0.] 
[ 0. 1. 0.] 
[ 0. 1. 1.] 
[ 1. 1. 1.]] 

ответ

2

Весь смысл tvtk должен обрабатывать преобразования между объектами питона (включая Numpy массивы) и ВТК объектов, проведение классов. Если вы исследуете faces.points, вы увидите, что это на самом деле экземпляр класса tvtk называются точками, но вы можете легко получить обратно Numpy представление с использованием

np.array(faces.points) 

различные точки зрения, не должны копировать память, так что все это довольно эффективный.

EDIT: естественно tvtk также предоставляет API на основе событий и графические элементы редактирования

+0

У вас возникли какие-либо проблемы с визуализацией? – mdurant

+0

Спасибо, это решило мою проблему! Я не знал, что объект может иметь разные представления в Python. Как Python знает, как преобразовать объект Points в массив NumPy? –

+0

numpy ищет интерфейс для просмотра буфера или памяти или может обрабатывать любой тип данных, который является итерируемым. – mdurant

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

  • Нет связанных вопросов^_^