From a9c679d4e4b49e44542bac81ef4ef65c94418eff Mon Sep 17 00:00:00 2001
From: Samo Penic <samo.penic@gmail.com>
Date: Fri, 08 Jul 2016 20:10:25 +0000
Subject: [PATCH] VTK rendering is done in realtime (updating attempt every second)

---
 python/trisurf/tsmgr.py        |   57 +---------------------------
 python/trisurf/VTKRendering.py |   62 +++++++++++++++++++++++++++++++
 2 files changed, 64 insertions(+), 55 deletions(-)

diff --git a/python/trisurf/VTKRendering.py b/python/trisurf/VTKRendering.py
new file mode 100644
index 0000000..c393051
--- /dev/null
+++ b/python/trisurf/VTKRendering.py
@@ -0,0 +1,62 @@
+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.renderer.AddActor(self.actor)
+		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 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.actor=self.lastActor()
+			self.renderer.AddActor(self.actor)
+			self.renderer_window.Render()
+		#self.render.RemoveActor(self.actor)
+		
+		return
diff --git a/python/trisurf/tsmgr.py b/python/trisurf/tsmgr.py
index 2ed84ac..d973360 100644
--- a/python/trisurf/tsmgr.py
+++ b/python/trisurf/tsmgr.py
@@ -15,6 +15,7 @@
 else:
 	from urlparse import urlparse
 	from vtk import *
+	from . import VTKRendering
 #import io
 
 
@@ -203,65 +204,11 @@
 
 def preview_vtu(args,host):
 	#only for localhost at the moment
-	Dir=trisurf.Directory(maindir=host['runs'][0].maindir,simdir=host['runs'][0].subdir)
-	filename=os.path.join("./",Dir.fullpath(),host['runs'][0].getLastVTU())
-	print(filename)
 	if sys.version_info>=(3,0):
 		print("Preview works only with python 2.7")
 		exit(1)
 	if host['name'] == socket.gethostname():
-		target_runs=getTargetRunIdxList(args)
-		#if target_runs==None:
-		#	target_runs=list(range(1,len(host['runs'])+1))
-		#for i in target_runs:
-		#	host['runs'][i-1].start()
-		reader=vtkXMLUnstructuredGridReader()
-		reader.SetFileName(filename)
-		reader.Update() # Needed because of GetScalarRange
-		output = reader.GetOutput()
-		scalar_range = output.GetScalarRange()
-
-		# Create the mapper that corresponds the objects of the vtk file
-		# into graphics elements
-		mapper = vtkDataSetMapper()
-		mapper.SetInput(output)
-		mapper.SetScalarRange(scalar_range)
-
-		# Create the Actor
-		actor = vtkActor()
-		actor.SetMapper(mapper)
-
-		# Create the Renderer
-		renderer = vtkRenderer()
-		renderer.AddActor(actor)
-		renderer.SetBackground(0, 0, 0) # Set background to white
-
-		# Create the RendererWindow
-		renderer_window = vtkRenderWindow()
-		renderer_window.AddRenderer(renderer)
-		
-# Set up a check for aborting rendering.
-		# Create the RendererWindowInteractor and display the vtk_file
-		interactor = vtkRenderWindowInteractor()
-		interactor.SetRenderWindow(renderer_window)
-		interactor.Initialize()
-# 		interactor.AddObserver("TimerEvent", RenderUpdate)
-#		timerIDR = interactor.CreateRepeatingTimer(1000)
-		interactor.Start()
-
-def RenderUpdate(obj, event):
-	# obj will be the object generating the event.  In this case it
-	# is renWin
-	window=obj.GetRenderWindow() #.GetRenderer()
-	renderer=window.GetRenderers()
-	try:
-		actor=renderer.GetActors()
-	except:
-		pass
-	actor=renderer.GetActors()
-	print(actor)
-	
-
+		VTKRendering.Renderer(args,host)
 
 def getListOfHostConfigurationByHostname(hosts,host):
 	rhost=[]

--
Gitblit v1.9.3