from vtk import * import sys import os import time myProcId = 0 numProcs = 1 compManager = vtkCompositeManager() if compManager.GetController(): myProcId = compManager.GetController().GetLocalProcessId() numProcs = compManager.GetController().GetNumberOfProcesses() try: v = vtkMesaRenderer() if myProcId > 0: _graphics_fact=vtkGraphicsFactory() _graphics_fact.SetUseMesaClasses(1) del _graphics_fact del v except Exception, (bar): print "No mesa", bar #print "I am process: %d / %d" % (myProcId, numProcs) # create a rendering window and renderer ren = vtkRenderer() renWin = vtkRenderWindow() renWin.AddRenderer(ren) renWin.SetSize(300,300) if myProcId: renWin.OffScreenRenderingOn() # create an actor and give it cone geometry cone = vtkConeSource() cone.SetResolution(8) coneMapper = vtkPolyDataMapper() coneMapper.SetInputConnection(cone.GetOutputPort()) coneActor = vtkActor() coneActor.SetMapper(coneMapper) # assign our actor to the renderer ren.AddActor(coneActor) renWin.SetWindowName("I am node %d" % myProcId) if numProcs > 1: compManager.SetRenderWindow(renWin) compManager.InitializePieces() #print "Pid of process %d is %d" % (myProcId, os.getpid()) def ExitMaster(a, b): #print "ExitMaster; I am %d / %d" % ( myProcId, numProcs ) if numProcs > 1 and myProcId == 0: #print "Trigger exit RMI on all satellite nodes" for a in range(1, numProcs): #print "Trigger exit in satellite node %d" % a compManager.GetController().TriggerRMI(a, 239954) if myProcId == 0: iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) iren.AddObserver("ExitEvent", ExitMaster) iren.Start() #renWin.Render() #renWin.Render() #renWin.Render() else: compManager.InitializeRMIs() compManager.GetController().ProcessRMIs() compManager.GetController().Finalize() #print "**********************************" #print "Done on the slave node" #print "**********************************" sys.exit() ExitMaster(0, 0) #time.sleep(5)