Trisurf Monte Carlo simulator
Samo Penic
2016-07-13 90882f51387b945bc0f660d8b12200b2f48e80fa
python/trisurf/VTKRendering.py
@@ -4,6 +4,80 @@
   from vtk import *
class MultiRender:
   def __init__(self,args,host):
      target_runs=getRargetRunIdxList(args)
      if target_runs==None:
         target_runs=list(range(1,len(host['runs'])+1))
      nruns=len(target_runs)
      #prepare rendering window
      self.renderer_window = vtkRenderWindow()
      self.renderer_window.AddRenderer(self.renderer)
      self.renderer_window.SetSize(1200,600)
      interactor = vtkRenderWindowInteractor()
      interactor.SetRenderWindow(self.renderer_window)
      interactor.Initialize()
       interactor.AddObserver("TimerEvent", self.RenderUpdate)
      timerIDR = interactor.CreateRepeatingTimer(1000)
      self.filename=[]
      self.renderer=[]
      i=0
      for run in target_runs:
         #for each target run calculate renderer location
         r.vtkRenderer()
         r.SetBackground(0,0,0)
         p=1.0/float(nruns)
         x1=i*p
         x2=(i+1)*p
         r.SetViewport(x1,0.0,x2,1.0)
         self.renderer.Append(r)
         self.renderer_window.AddRenderer(r)
         i=i+1
      #call Renderer object with Run, renderer
      #start endless loop of interactor
      interactor.Start()
   def lastVTU(self,run):
      Dir=trisurf.Directory(maindir=run.maindir,simdir=run.subdir)
      filename=os.path.join("./",Dir.fullpath(),run.getLastVTU())
      return filename
   def lastActorForRun(self,run):
      filename=self.lastVTU(run)
      reader=vtkXMLUnstructuredGridReader()
      reader.SetFileName(self.filename)
      reader.Update() # Needed because of GetScalarRange
      output = reader.GetOutput()
      scalar_range = output.GetScalarRange()
      mapper = vtkDataSetMapper()
      mapper.SetInput(output)
      mapper.SetScalarRange(scalar_range)
      # Create the Actor
      actor = vtkActor()
      actor.SetMapper(mapper)
      return actor
   def RenderUpdate(self, obj, event):
      i=0
      for run in runs:
         if(self.lastVTU(run)!=self.filename[i]):
            #print("updejt")
            self.renderer.RemoveActor(self.actor)
            self.renderer.RemoveActor(self.textactor)
            self.actor=self.lastActor()
            self.textactor=self.textActor()
            self.renderer.AddActor(self.actor)
            self.renderer.AddActor(self.textactor)
            self.renderer_window.Render()
         #self.render.RemoveActor(self.actor)
         i=i+1
      return
class Renderer:
   def __init__(self,args,host):
      self.host=host