Example #1
0
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}
Example #2
0
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)
Example #3
0
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)
Example #4
0
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}
Example #5
0
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)