def run(output_basename='log', num_spheres=8, num_spheres_in_scene=None, resolution=725, view_size=(1920, 1080), num_frames=10, save_logs=True, color=False, OSPRay=False): if num_spheres_in_scene is None: num_spheres_in_scene = num_spheres import vtk controller = vtk.vtkMultiProcessController.GetGlobalController() view = get_render_view(view_size) if OSPRay: view.EnableOSPRay = 1 import math edge = math.ceil(math.pow(num_spheres_in_scene, (1.0 / 3.0))) box = Box() box.XLength = edge box.YLength = edge box.ZLength = edge box.Center = [edge * 0.5, edge * 0.5, edge * 0.5] boxDisplay = Show() boxDisplay.SetRepresentationType('Outline') gen = ProgrammableSource(Script=''' import math import vtk try: num_spheres except: num_spheres = 8 try: num_spheres_in_scene except: num_spheres_in_scene = num_spheres try: res except: res = 725 edge = math.ceil(math.pow(num_spheres_in_scene, (1.0 / 3.0))) controller = vtk.vtkMultiProcessController.GetGlobalController() np = controller.GetNumberOfProcesses() p = controller.GetLocalProcessId() ns=lambda p:num_spheres/np + (1 if p >= np-num_spheres%np else 0) start=int(sum([ns(P) for P in range(0,p)])) end=start+ns(p) ss = vtk.vtkSphereSource() ss.SetPhiResolution(res) ss.SetThetaResolution(res) ap = vtk.vtkAppendPolyData() print 'source',p,': generating',end - start,'spheres from',start,'to',end for x in range(start,end): i = x%edge j = math.floor((x / edge))%edge k = math.floor((x / (edge * edge))) ss.SetCenter(i + 0.5,j + 0.5,k + 0.5) ss.Update() pd = vtk.vtkPolyData() pd.ShallowCopy(ss.GetOutput()) # pd.GetPointData().RemoveArray('Normals') ap.AddInputData(pd) ap.Update() self.GetOutput().ShallowCopy(ap.GetOutput()) ''') paramprop = gen.GetProperty('Parameters') paramprop.SetElement(0, 'num_spheres_in_scene') paramprop.SetElement(1, str(num_spheres_in_scene)) paramprop.SetElement(2, 'num_spheres') paramprop.SetElement(3, str(num_spheres)) paramprop.SetElement(4, 'res') paramprop.SetElement(5, str(resolution)) gen.UpdateProperty('Parameters') genDisplay = Show() genDisplay.SetRepresentationType('Surface') if color: pidScale = ProcessIdScalars() pidScaleDisplay = Show() deltaAz = 45.0 / num_frames deltaEl = 45.0 / num_frames Render() # Use a dummy camera to workaround MPI bugs when directly interacting with # the view's camera c = vtk.vtkCamera() c.SetPosition(view.CameraPosition) c.SetFocalPoint(view.CameraFocalPoint) c.SetViewUp(view.CameraViewUp) c.SetViewAngle(view.CameraViewAngle) c.Azimuth(22.5) c.Elevation(22.5) view.CameraPosition = c.GetPosition() view.CameraFocalPoint = c.GetFocalPoint() view.CameraViewUp = c.GetViewUp() view.CameraViewAngle = c.GetViewAngle() fdigits = int(math.ceil(math.log(num_frames, 10))) frame_fname_fmt = output_basename + '.scene.f%(f)0' + str(fdigits) + 'd.tiff' SaveScreenshot(frame_fname_fmt % {'f': 0}) vtk.vtkTimerLog.MarkStartEvent('GetViewItemStats') num_polys = sum([r.GetRepresentedDataInformation().GetNumberOfCells() for r in view.Representations]) num_points = sum([r.GetRepresentedDataInformation().GetNumberOfPoints() for r in view.Representations]) vtk.vtkTimerLog.MarkEndEvent('GetViewItemStats') memtime_stamp() fpsT0 = dt.datetime.now() for frame in range(1, num_frames): c.Azimuth(deltaAz) c.Elevation(deltaEl) view.CameraPosition = c.GetPosition() view.CameraFocalPoint = c.GetFocalPoint() view.CameraViewUp = c.GetViewUp() view.CameraViewAngle = c.GetViewAngle() Render() flush_render_buffer() memtime_stamp() fpsT1 = dt.datetime.now() if controller.GetLocalProcessId() == 0: if save_logs: # Save the arguments this was executed with with open(output_basename + '.args.txt', 'w') as argfile: argfile.write(str({ 'output_basename': output_basename, 'num_spheres': num_spheres, 'num_spheres_in_scene': num_spheres_in_scene, 'resolution': resolution, 'view_size': view_size, 'num_frames': num_frames, 'save_logs': save_logs, 'color': color})) # Save the memory statistics collected with open(output_basename + '.mem.txt', 'w') as ofile: ofile.write('\n'.join([str(x) for x in records])) # Process frame timing statistics logparser.summarize_results(num_frames, (fpsT1-fpsT0).total_seconds(), num_polys, 'Polys', save_logs, output_basename) print 'Points / Frame: %(np)d' % {'np': num_points}
def run(output_basename='log', dimension=100, view_size=(1920, 1080), num_frames=10, save_logs=True, OSPRay=False): import vtk controller = vtk.vtkMultiProcessController.GetGlobalController() view = get_render_view(view_size) if OSPRay: view.EnableOSPRay = 1 print('Generating wavelet') wavelet = Wavelet() d2 = dimension / 2 wavelet.WholeExtent = [-d2, d2, -d2, d2, -d2, d2] wavelet.Maximum = 100.0 waveletDisplay = Show() waveletDisplay.SetRepresentationType('Volume') print('Repositioning initial camera') c = GetActiveCamera() c.Azimuth(22.5) c.Elevation(22.5) print('Rendering first frame') Render() print('Saving frame 0 screenshot') import math fdigits = int(math.ceil(math.log(num_frames, 10))) frame_fname_fmt = output_basename + '.scene.f%(f)0' + str( fdigits) + 'd.tiff' SaveScreenshot(frame_fname_fmt % {'f': 0}) print('Gathering geometry counts') vtk.vtkTimerLog.MarkStartEvent('GetViewItemStats') num_voxels = 0 for r in view.Representations: num_voxels += r.GetRepresentedDataInformation().GetNumberOfCells() vtk.vtkTimerLog.MarkEndEvent('GetViewItemStats') print('Beginning benchmark loop') deltaAz = 45.0 / num_frames deltaEl = 45.0 / num_frames memtime_stamp() fpsT0 = dt.datetime.now() for frame in range(1, num_frames): c.Azimuth(deltaAz) c.Elevation(deltaEl) Render() flush_render_buffer() memtime_stamp() fpsT1 = dt.datetime.now() if controller.GetLocalProcessId() == 0: if save_logs: # Save the arguments this was executed with with open(output_basename + '.args.txt', 'w') as argfile: argfile.write( str({ 'output_basename': output_basename, 'dimension': dimension, 'view_size': view_size, 'num_frames': num_frames, 'save_logs': save_logs })) # Save the memory statistics collected with open(output_basename + '.mem.txt', 'w') as ofile: ofile.write('\n'.join([str(x) for x in records])) # Process frame timing statistics logparser.summarize_results(num_frames, (fpsT1 - fpsT0).total_seconds(), num_voxels, 'Voxels', save_logs, output_basename)
def run(output_basename='log', dimension=100, view_size=(1920, 1080), num_frames=10, save_logs=True, color=False, OSPRay=False): import vtk controller = vtk.vtkMultiProcessController.GetGlobalController() view = get_render_view(view_size) if OSPRay: view.EnableOSPRay = 1 print('Generating wavelet') wavelet = Wavelet() d2 = dimension/2 wavelet.WholeExtent = [-d2, d2, -d2, d2, -d2, d2] wavelet.Maximum = 100.0 waveletDisplay = Show() waveletDisplay.SetRepresentationType('Outline') print('Calculating 10 isocontours') contour = Contour(Input=wavelet) contour.ContourBy = ['POINTS', 'RTData'] contour.PointMergeMethod = 'Uniform Binning' contour.ComputeScalars = 1 contour.Isosurfaces = list(map(float, range(10, 110, 10))) contourDisplay = Show() contourDisplay.SetRepresentationType('Surface') if color: ColorBy(contourDisplay, ('POINTS', 'RTData')) contourDisplay.RescaleTransferFunctionToDataRange(True, False) print('Repositioning initial camera') c = GetActiveCamera() c.Azimuth(22.5) c.Elevation(22.5) print('Rendering first frame') Render() print('Saving frame 0 screenshot') import math fdigits = int(math.ceil(math.log(num_frames, 10))) frame_fname_fmt = output_basename + '.scene.f%(f)0' + str(fdigits) + 'd.tiff' SaveScreenshot(frame_fname_fmt % {'f': 0}) print('Gathering geometry counts') vtk.vtkTimerLog.MarkStartEvent('GetViewItemStats') num_polys = 0 num_points = 0 for r in view.Representations: num_polys += r.GetRepresentedDataInformation().GetNumberOfCells() num_points += r.GetRepresentedDataInformation().GetNumberOfPoints() vtk.vtkTimerLog.MarkEndEvent('GetViewItemStats') print('Beginning benchmark loop') deltaAz = 45.0 / num_frames deltaEl = 45.0 / num_frames memtime_stamp() fpsT0 = dt.datetime.now() for frame in range(1, num_frames): c.Azimuth(deltaAz) c.Elevation(deltaEl) Render() flush_render_buffer() memtime_stamp() fpsT1 = dt.datetime.now() if controller.GetLocalProcessId() == 0: if save_logs: # Save the arguments this was executed with with open(output_basename + '.args.txt', 'w') as argfile: argfile.write(str({ 'output_basename': output_basename, 'dimension': dimension, 'view_size': view_size, 'num_frames': num_frames, 'save_logs': save_logs})) # Save the memory statistics collected with open(output_basename + '.mem.txt', 'w') as ofile: ofile.write('\n'.join([str(x) for x in records])) # Process frame timing statistics logparser.summarize_results(num_frames, (fpsT1-fpsT0).total_seconds(), num_polys, 'Polys', save_logs, output_basename) print('Points / Frame:', num_points)
def run(output_basename='log', num_spheres=8, num_spheres_in_scene=None, resolution=725, view_size=(1920, 1080), num_frames=10, save_logs=True, color=False): if num_spheres_in_scene is None: num_spheres_in_scene = num_spheres import vtk controller = vtk.vtkMultiProcessController.GetGlobalController() view = get_render_view(view_size) import math edge = math.ceil(math.pow(num_spheres_in_scene, (1.0 / 3.0))) box = Box() box.XLength = edge box.YLength = edge box.ZLength = edge box.Center = [edge * 0.5, edge * 0.5, edge * 0.5] boxDisplay = Show() boxDisplay.SetRepresentationType('Outline') gen = ProgrammableSource(Script=''' import math import vtk try: num_spheres except: num_spheres = 8 try: num_spheres_in_scene except: num_spheres_in_scene = num_spheres try: res except: res = 725 edge = math.ceil(math.pow(num_spheres_in_scene, (1.0 / 3.0))) controller = vtk.vtkMultiProcessController.GetGlobalController() np = controller.GetNumberOfProcesses() p = controller.GetLocalProcessId() start = (num_spheres / np) * p end = (num_spheres / np) * (p + 1) if (p == np - 1): end = num_spheres ss = vtk.vtkSphereSource() ss.SetPhiResolution(res) ss.SetThetaResolution(res) ap = vtk.vtkAppendPolyData() print 'source',p,': generating',end - start,'spheres from',start,'to',end for x in range(start,end): i = x%edge j = math.floor((x / edge))%edge k = math.floor((x / (edge * edge))) ss.SetCenter(i + 0.5,j + 0.5,k + 0.5) ss.Update() pd = vtk.vtkPolyData() pd.ShallowCopy(ss.GetOutput()) # pd.GetPointData().RemoveArray('Normals') ap.AddInputData(pd) ap.Update() self.GetOutput().ShallowCopy(ap.GetOutput()) ''') paramprop = gen.GetProperty('Parameters') paramprop.SetElement(0, 'num_spheres_in_scene') paramprop.SetElement(1, str(num_spheres_in_scene)) paramprop.SetElement(2, 'num_spheres') paramprop.SetElement(3, str(num_spheres)) paramprop.SetElement(4, 'res') paramprop.SetElement(5, str(resolution)) gen.UpdateProperty('Parameters') genDisplay = Show() genDisplay.SetRepresentationType('Surface') if color: pidScale = ProcessIdScalars() pidScaleDisplay = Show() deltaAz = 45.0 / num_frames deltaEl = 45.0 / num_frames Render() # Use a dummy camera to workaround MPI bugs when directly interacting with # the view's camera c = vtk.vtkCamera() c.SetPosition(view.CameraPosition) c.SetFocalPoint(view.CameraFocalPoint) c.SetViewUp(view.CameraViewUp) c.SetViewAngle(view.CameraViewAngle) c.Azimuth(22.5) c.Elevation(22.5) view.CameraPosition = c.GetPosition() view.CameraFocalPoint = c.GetFocalPoint() view.CameraViewUp = c.GetViewUp() view.CameraViewAngle = c.GetViewAngle() fdigits = int(math.ceil(math.log(num_frames, 10))) frame_fname_fmt = output_basename + '.scene.f%(f)0' + str( fdigits) + 'd.tiff' SaveScreenshot(frame_fname_fmt % {'f': 0}) vtk.vtkTimerLog.MarkStartEvent('GetViewItemStats') num_polys = sum([ r.GetRepresentedDataInformation().GetNumberOfCells() for r in view.Representations ]) num_points = sum([ r.GetRepresentedDataInformation().GetNumberOfPoints() for r in view.Representations ]) vtk.vtkTimerLog.MarkEndEvent('GetViewItemStats') memtime_stamp() fpsT0 = dt.datetime.now() for frame in range(1, num_frames): c.Azimuth(deltaAz) c.Elevation(deltaEl) view.CameraPosition = c.GetPosition() view.CameraFocalPoint = c.GetFocalPoint() view.CameraViewUp = c.GetViewUp() view.CameraViewAngle = c.GetViewAngle() Render() flush_render_buffer() memtime_stamp() fpsT1 = dt.datetime.now() if controller.GetLocalProcessId() == 0: if save_logs: # Save the arguments this was executed with with open(output_basename + '.args.txt', 'w') as argfile: argfile.write( str({ 'output_basename': output_basename, 'num_spheres': num_spheres, 'num_spheres_in_scene': num_spheres_in_scene, 'resolution': resolution, 'view_size': view_size, 'num_frames': num_frames, 'save_logs': save_logs, 'color': color })) # Save the memory statistics collected with open(output_basename + '.mem.txt', 'w') as ofile: ofile.write('\n'.join([str(x) for x in records])) # Process frame timing statistics logparser.summarize_results(num_frames, (fpsT1 - fpsT0).total_seconds(), num_polys, 'Polys', save_logs, output_basename) print 'Points / Frame: %(np)d' % {'np': num_points}
def run(output_basename='log', num_spheres=8, num_spheres_in_scene=None, resolution=725, view_size=(1920, 1080), num_frames=10, save_logs=True, color=False, OSPRay=False): if num_spheres_in_scene is None: num_spheres_in_scene = num_spheres import vtk controller = vtk.vtkMultiProcessController.GetGlobalController() view = get_render_view(view_size) if OSPRay: view.EnableOSPRay = 1 print('Generating bounding box') import math edge = math.ceil(math.pow(num_spheres_in_scene, (1.0 / 3.0))) box = Box() box.XLength = edge box.YLength = edge box.ZLength = edge box.Center = [edge * 0.5, edge * 0.5, edge * 0.5] boxDisplay = Show() boxDisplay.SetRepresentationType('Outline') print('Generating all spheres') gen = ProgrammableSource(Script=''' import math import vtk try: num_spheres except: num_spheres = 8 try: num_spheres_in_scene except: num_spheres_in_scene = num_spheres try: res except: res = 725 edge = math.ceil(math.pow(num_spheres_in_scene, (1.0 / 3.0))) controller = vtk.vtkMultiProcessController.GetGlobalController() np = controller.GetNumberOfProcesses() p = controller.GetLocalProcessId() ns=lambda rank:num_spheres/np + (1 if rank >= np-num_spheres%np else 0) # Not sure why but the builtin sum() gives wierd results here so we'll just # so it manually start=0 for r in range(0,p): start += int(ns(r)) end=start+ns(p) ss = vtk.vtkSphereSource() ss.SetPhiResolution(res) ss.SetThetaResolution(res) ap = vtk.vtkAppendPolyData() print(' source %d: generating %d spheres from %d to %d' % (p, end-start, start, end)) for x in range(start,end): i = x%edge j = math.floor((x / edge))%edge k = math.floor((x / (edge * edge))) ss.SetCenter(i + 0.5,j + 0.5,k + 0.5) ss.Update() pd = vtk.vtkPolyData() pd.ShallowCopy(ss.GetOutput()) # pd.GetPointData().RemoveArray('Normals') ap.AddInputData(pd) ap.Update() self.GetOutput().ShallowCopy(ap.GetOutput()) ''') paramprop = gen.GetProperty('Parameters') paramprop.SetElement(0, 'num_spheres_in_scene') paramprop.SetElement(1, str(num_spheres_in_scene)) paramprop.SetElement(2, 'num_spheres') paramprop.SetElement(3, str(num_spheres)) paramprop.SetElement(4, 'res') paramprop.SetElement(5, str(resolution)) gen.UpdateProperty('Parameters') genDisplay = Show() genDisplay.SetRepresentationType('Surface') if color: print('Assigning colors') pidScale = ProcessIdScalars() pidScaleDisplay = Show() print('Repositioning initial camera') c = GetActiveCamera() c.Azimuth(22.5) c.Elevation(22.5) print('Rendering first frame') Render() print('Saving frame 0 screenshot') fdigits = int(math.ceil(math.log(num_frames, 10))) frame_fname_fmt = output_basename + '.scene.f%(f)0' + str(fdigits) + 'd.tiff' SaveScreenshot(frame_fname_fmt % {'f': 0}) print('Gathering geometry counts') vtk.vtkTimerLog.MarkStartEvent('GetViewItemStats') num_polys = 0 num_points = 0 for r in view.Representations: num_polys += r.GetRepresentedDataInformation().GetNumberOfCells() num_points += r.GetRepresentedDataInformation().GetNumberOfPoints() vtk.vtkTimerLog.MarkEndEvent('GetViewItemStats') print('Beginning benchmark loop') deltaAz = 45.0 / num_frames deltaEl = 45.0 / num_frames memtime_stamp() fpsT0 = dt.datetime.now() for frame in range(1, num_frames): c.Azimuth(deltaAz) c.Elevation(deltaEl) Render() flush_render_buffer() memtime_stamp() fpsT1 = dt.datetime.now() if controller.GetLocalProcessId() == 0: if save_logs: # Save the arguments this was executed with with open(output_basename + '.args.txt', 'w') as argfile: argfile.write(str({ 'output_basename': output_basename, 'num_spheres': num_spheres, 'num_spheres_in_scene': num_spheres_in_scene, 'resolution': resolution, 'view_size': view_size, 'num_frames': num_frames, 'save_logs': save_logs, 'color': color})) # Save the memory statistics collected with open(output_basename + '.mem.txt', 'w') as ofile: ofile.write('\n'.join([str(x) for x in records])) # Process frame timing statistics logparser.summarize_results(num_frames, (fpsT1-fpsT0).total_seconds(), num_polys, 'Polys', save_logs, output_basename) print('Points / Frame:', num_points)