Trisurf Monte Carlo simulator
Samo Penic
2017-01-04 97264e53840b3544fef002d30cb80d6e9942139b
python/trisurf/VTKRendering.py
@@ -4,19 +4,100 @@
   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
      self.args=args
      self.renderer = vtkRenderer()
      self.actor=self.lastActor()
      self.textactor=self.textActor()
      self.renderer.AddActor(self.actor)
      self.renderer.AddActor(self.textactor)
      self.renderer.SetBackground(0, 0, 0) # Set background to white
      # Create the RendererWindow
      self.renderer_window = vtkRenderWindow()
      self.renderer_window.AddRenderer(self.renderer)
      self.renderer_window.SetSize(1200,600)
      self.renderer.SetViewport(0.0,0.0,0.5,1.0)
      rend=vtk.vtkRenderer()
      rend.AddActor(self.actor)
      rend.SetViewport(0.5,0.0,1.0,1.0)
      self.renderer_window.AddRenderer(rend)
# Set up a check for aborting rendering.
      # Create the RendererWindowInteractor and display the vtk_file
      interactor = vtkRenderWindowInteractor()
@@ -32,6 +113,15 @@
      Dir=trisurf.Directory(maindir=self.host['runs'][0].maindir,simdir=self.host['runs'][0].subdir)
      filename=os.path.join("./",Dir.fullpath(),self.host['runs'][0].getLastVTU())
      return filename
   def textActor(self):
      textactor=vtkTextActor()
      textactor.SetInput(self.filename)
      tp=textactor.GetTextProperty()
      tp.SetColor(1,1,1)
      tp.SetFontSize(11)
      textactor.SetDisplayPosition(20,30)
      return textactor
   def lastActor(self):
      self.filename=self.lastVTU()
@@ -52,10 +142,13 @@
   def RenderUpdate(self, obj, event):
      if(self.lastVTU()!=self.filename):
         print("updejt")
         #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)