更新MayaVI中的TVTK数据集点(无冲洗管道)

时间:2014-02-18 12:37:23

标签: python visualization vtk mayavi

我想使用MayaVI来显示大型模拟数据,保存为VTKUnstructuredGrid(或TVTK非结构化网格)。加载网格后,我想使用numpy数组快速更新网格点,而不更改模型中的任何其他内容。

到目前为止,我更新了点,然后调用modified() - 方法,该方法刷新整个管道,从而大大减慢了可视化速度。我现在的问题是:有没有机会在不重新加载整个管道的情况下更新VTKDataset中的点数?

我正在使用Traits进行可视化;简化了我的代码:

import numpy as np

from enthought.traits.api import HasTraits, Range, Instance, on_trait_change
from enthought.traits.ui.api import View, Item, HGroup, HSplit, VSplit
from enthought.tvtk.pyface.scene_editor import SceneEditor
from enthought.mayavi.tools.mlab_scene_model import MlabSceneModel
from enthought.mayavi.core.ui.mayavi_scene import MayaviScene
from enthought.mayavi import mlab
from enthought.tvtk.api import tvtk
from enthought.mayavi.modules.surface import Surface
from enthought.tvtk.pyface.scene_editor import SceneEditor
class Visu(HasTraits):

  timestep = Range(50,100,50)
  pts = tvtk.Points()
  ugrid = tvtk.UnstructuredGrid()
  scene = Instance(MlabSceneModel, ())
  view = View(Item('scene', editor=SceneEditor(scene_class=MayaviScene), height=250, width=300, show_label=True),HGroup('_', 'timestep'), resizable=True )

  @on_trait_change('scene.activated')
  def ini(self):
    filename = 'original3dplot'
    reader = tvtk.LSDynaReader(file_name = filename)
    reader.update()
    self.ugrid = reader.get_output()
    self.surface = self.scene.mlab.pipeline.surface(self.ugrid)

  @on_trait_change('timestep')
  def update_visu(self):
    update_coord = np.loadtxt('newcoordinates'+str(self.timestep))
    self.pts.from_array(update_coord)
    self.ugrid.points = self.pts
    self.ugrid.modified()

visualization = Visu()
visualization.configure_traits()

0 个答案:

没有答案