Trisurf Monte Carlo simulator
Samo Penic
2016-07-08 8a1af86e7ccdd00e864b604e1f4dd9cfc031fbd7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import os,sys
from . import trisurf
if sys.version_info<(3,0):
    from vtk import *
 
 
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)
        
# Set up a check for aborting rendering.
        # Create the RendererWindowInteractor and display the vtk_file
        interactor = vtkRenderWindowInteractor()
        interactor.SetRenderWindow(self.renderer_window)
        interactor.Initialize()
         interactor.AddObserver("TimerEvent", self.RenderUpdate)
        timerIDR = interactor.CreateRepeatingTimer(1000)
        interactor.Start()
 
        return
 
    def lastVTU(self):
        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(18)
        textactor.SetDisplayPosition(20,30)
        return textactor
 
    def lastActor(self):
        self.filename=self.lastVTU()
        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):
        if(self.lastVTU()!=self.filename):
            #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)
        
        return