Python wrapper for running instances of trisurf-ng
Samo Penic
2019-08-14 8f46a7926d3517bf5405fc5a8c723e6cc318ad58
trisurf/VTKRendering.py
@@ -4,7 +4,7 @@
   from vtk import *
except:
   print("Vtk rendering works if you manually install vtk7 for python3")
   exit(1)
#   exit(1)
class MultiRender:
   def __init__(self,args,host):
@@ -80,20 +80,22 @@
class Renderer:
   def __init__(self,args,host,run):
   def __init__(self,args,host,run, timestep=-1, scalar_field='vertices_idx'):
      self.host=host
      self.args=args
      self.run=run
      self.timestep=timestep
      self.scalar_field=scalar_field
      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
      self.renderer.SetBackground(81/255, 87/255, 110/255) # Set background to nicely grey
      # Create the RendererWindow
      self.renderer_window = vtkRenderWindow()
      self.renderer_window.AddRenderer(self.renderer)
      self.renderer_window.SetSize(1200,600)
      self.renderer_window.SetSize(800,800)
   
#      self.renderer.SetViewport(0.0,0.0,0.5,1.0)
#      rend=vtk.vtkRenderer()
@@ -128,16 +130,39 @@
      return textactor
   def lastActor(self):
      self.filename=self.lastVTU()
      if(self.timestep<0):
         self.filename=self.lastVTU()
      else:
         self.filename=os.path.join("./",self.run.Dir.fullpath(),'timestep_{:06d}.vtu'.format(self.timestep))
      reader=vtkXMLUnstructuredGridReader()
      reader.SetFileName(self.filename)
      reader.Update() # Needed because of GetScalarRange
      output = reader.GetOutput()
      output.GetPointData().SetActiveScalars(self.scalar_field)
      scalar_range = output.GetScalarRange()
      mapper = vtkDataSetMapper()
      mapper.SetInputData(output)
      mapper.SetScalarRange(scalar_range)
      #color lookuptables
      #lut = vtk.vtkLookupTable()
      #lut.SetHueRange(0.5, 0.6)
      #lut.SetSaturationRange(0, 1)
      #lut.SetValueRange(0, 1)
      #mapper.SetLookupTable(lut)
      #advanced lookuptables...
      lut = vtk.vtkLookupTable()
      lutNum = 256
      lut.SetNumberOfTableValues(lutNum)
      ctf = vtk.vtkColorTransferFunction()
      ctf.SetColorSpaceToDiverging()
      ctf.AddRGBPoint(0.0, 0.230, 0.299, 0.754)
      ctf.AddRGBPoint(1.0, 0.706, 0.016, 0.150)
      for ii,ss in enumerate([float(xx)/float(lutNum) for xx in range(lutNum)]):
         cc = ctf.GetColor(ss)
         lut.SetTableValue(ii,cc[0],cc[1],cc[2],1.0)
      mapper.SetLookupTable(lut)
      # Create the Actor
      actor = vtkActor()
      actor.SetMapper(mapper)
@@ -157,3 +182,16 @@
      #self.render.RemoveActor(self.actor)
      
      return
class RenderVTUFile(Renderer):
   def __init__(self,args,filename=None,scalar_field='vertices_idx'):
      self.filename=filename
      Renderer.__init__(self,args,host=None, run=None, timestep=-1, scalar_field=scalar_field)
   def lastVTU(self):
      if(self.filename):
         return self.filename
      else:
         raise Exception('No file specified')