مرحبًا ، لدي شبكة مثلثة بها بيانات تتوافق مع لون الوجه ، والتي يمكنني رسمها باستخدام الحل من # 253 على سبيل المثال
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)
ومع ذلك ، لست متأكدًا من كيفية تحريك التغييرات في اللون بعد ذلك. على سبيل المثال،
@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()
يفعل ما أريد ، لكنه يتباطأ بسرعة مع تقدم الرسوم المتحركة وفي النهاية يصبح غير قابل للاستخدام. تؤدي معظم التغييرات التي أحاولها (مثل إزالة أوامر خط الأنابيب) إلى عدم تحديث الصورة على الإطلاق. هل هناك خيار آخر لتحديث ألوان الوجه؟
لقد قمت بتنظيف الكود كثيرًا عن طريق إنشاء tvtk.PolyData
يدويًا. ومع ذلك ، فإن التغيير الكبير الآخر هو أن الوثائق تقترح أن طريقة PolyData.modified()
هي ما يجب استخدامه لتحديث الرقم. ومع ذلك ، هذا لا يعمل بالنسبة لي - بدلاً من ذلك ، يجب أن أستخدم طريقة VTKDataSource.update()
، حيث يلف VTKDataSource
PolyData
وبالتالي يجب العثور عليه من خلال اجتياز الآباء السطحية
لذلك كان كود العمل النهائي
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()
تضمين التغريدة
اقض يومًا أو يومين في محاولة لإصلاح هذا واتبع نفس المثال. شكرا جزيلا لك!
التعليق الأكثر فائدة
تضمين التغريدة
اقض يومًا أو يومين في محاولة لإصلاح هذا واتبع نفس المثال. شكرا جزيلا لك!