Trisurf Monte Carlo simulator
Samo Penic
2017-01-04 61ad95ca712a374f6e58127fda738b67c57d743d
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
@@ -14,11 +88,16 @@
      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()
@@ -40,7 +119,7 @@
      textactor.SetInput(self.filename)
      tp=textactor.GetTextProperty()
      tp.SetColor(1,1,1)
      tp.SetFontSize(18)
      tp.SetFontSize(11)
      textactor.SetDisplayPosition(20,30)
      return textactor