Mayavi: Menganimasikan warna wajah triangular_mesh

Dibuat pada 26 Jan 2017  ·  2Komentar  ·  Sumber: enthought/mayavi

Hai, Saya memiliki jaring segitiga dengan data yang sesuai dengan warna wajah, yang dapat saya plot menggunakan solusi dari #253 misalnya

mesh = mlab.triangular_mesh(self.vertices[:,0], self.vertices[:,1], self.vertices[:,2], self.triangles,representation='wireframe',opacity=0)
mesh.mlab_source.dataset.cell_data.scalars = color
mesh.mlab_source.dataset.cell_data.scalars.name = 'Cell data' 
mesh.mlab_source.update() 
mesh2 = mlab.pipeline.set_active_attribute(mesh,cell_scalars='Cell data') 
surf = mlab.pipeline.surface(mesh2)  

Namun, saya tidak yakin bagaimana cara menganimasikan perubahan warna. Misalnya,

@mlab.animate(delay=100)
def anim():
    f = mlab.gcf()
    for i in range(0,data.shape[0]):
        mesh.mlab_source.dataset.cell_data.scalars = data[i,:]
        mesh.mlab_source.dataset.cell_data.scalars.name = 'Cell data' 
        mesh.mlab_source.update()
        mesh2 = mlab.pipeline.set_active_attribute(mesh,cell_scalars='Cell data') 
        mlab.pipeline.surface(mesh2) 
        yield
anim()
mlab.show()

melakukan apa yang saya inginkan, tetapi melambat dengan cepat saat animasi berlangsung dan akhirnya tidak dapat digunakan. Sebagian besar perubahan yang saya coba (misalnya menghapus perintah pipeline) menghasilkan gambar yang tidak diperbarui sama sekali. Apakah ada opsi lain untuk memperbarui warna wajah?

Komentar yang paling membantu

@RomeshA

Luangkan satu atau dua hari untuk mencoba memperbaikinya dan mengikuti contoh yang sama. Terima kasih banyak untuk Anda!

Semua 2 komentar

Saya sering membersihkan kode dengan membuat tvtk.PolyData secara manual. Namun, perubahan besar lainnya adalah bahwa dokumentasi menyarankan bahwa metode PolyData.modified() adalah yang harus digunakan untuk memperbarui gambar. Namun, ini tidak bekerja untuk saya - sebagai gantinya, saya harus menggunakan metode VTKDataSource.update() , di mana VTKDataSource membungkus PolyData dan dengan demikian perlu ditemukan dengan melintasi orang tua permukaan

Jadi kode kerja terakhir adalah

from mayavi import mlab 
from tvtk.api import tvtk

polydata = tvtk.PolyData(points=self.vertices, polys=self.triangles)
polydata.cell_data.scalars = np.ravel(data[:,0].copy())
polydata.cell_data.scalars.name = 'celldata'
mesh = mlab.pipeline.surface(polydata)

@mlab.animate(delay=10)
def anim():
    for i in range(0,data.shape[0]):
        polydata.cell_data.scalars = np.ravel(data[:,i].copy())
        polydata.cell_data.scalars.name = "celldata" 
        # polydata.modified()  # does not work
        mesh.parent.parent.update() # works
        yield

anim()
mlab.show()

@RomeshA

Luangkan satu atau dua hari untuk mencoba memperbaikinya dan mengikuti contoh yang sama. Terima kasih banyak untuk Anda!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat