Hey folks,
I have created the attached script by using the Trace feature in Paraview
(version 4.2.0-RC1-128-gc89b0ad) and then tweaked it to run on multiple
.pvtu files. I don't doubt that there is a better way to do this but this
is what I came up with.
I run the script using pvbatch. The problem is that it'll run for a while
and then run out of memory. I also get the following errors on every pass
through the script after the first pass.
ERROR: In
/home/kitware/Dashboards/MyTests/NightlyMaster/ParaViewSuperbuild-Release/paraview/src/paraview/ParaViewCore/ServerManager/Rendering/vtkSMViewLayoutProxy.cxx,
line 481
vtkSMViewLayoutProxy (0x385f370): Cell identified by location '0' is
already split. Cannot split the cell again.
ERROR: In
/home/kitware/Dashboards/MyTests/NightlyMaster/ParaViewSuperbuild-Release/paraview/src/paraview/ParaViewCore/ServerManager/Rendering/vtkSMViewLayoutProxy.cxx,
line 551
vtkSMViewLayoutProxy (0x385f370): Cell is not empty.
It seems to me that Paraview is trying to reuse the slice created in the
last pass and perhaps I need to do something to reset the data or free the
data or something like that. I tried a few things like
Delete(fileReader)
del fileReader
Delete(slice1)
del slice1
etc. at the end of each pass but nothing I tried eliminated the errors.
Incidentally, these errors seemed to be irrelevant as the images exported
just fine until the pvbatch crashed after ' throwing an instance of
'std::bad_alloc' hat(): std::bad_alloc'
Does anybody mind taking a look at this and telling me what I'm doing
wrong, or at least pointing me to documentation/examples that might help me
to figure this out. I did read through the seemingly relevant Google search
results dealing with scripting with Paraview with no luck.
I appreciate your time,
--
*Ethan Alan Hereth*
#### import the simple module from the paraview
from paraview.simple import *
from glob import glob
import os.path as path
fileList = glob('./solution_[0-9]*.pvtu')
if len(fileList):
print "Found %d solution data sets..." % len(fileList)
count = 0
for fileName in fileList:
print "\tProcessing %s" % fileName
#### disable automatic camera reset on 'Show'
paraview.simple._DisableFirstRenderCameraReset()
# create a new 'XML Partitioned Unstructured Grid Reader'
fileReader = XMLPartitionedUnstructuredGridReader(FileName=[fileName])
fileReader.CellArrayStatus = ['treeid', 'level', 'mpirank', 'status', 'rho', 'xMomentum', 'yMomentum', 'zMomentum', 'totalEnergy']
# Properties modified on fileReader
fileReader.CellArrayStatus = ['treeid', 'mpirank', 'rho', 'xMomentum', 'yMomentum', 'zMomentum', 'totalEnergy']
# get active view
renderView1 = GetActiveViewOrCreate('RenderView')
renderView1.OrientationAxesVisibility = 0
# uncomment following to set a specific view size
# renderView1.ViewSize = [1376, 845]
# show data in view
fileReaderDisplay = Show(fileReader, renderView1)
# trace defaults for the display properties.
fileReaderDisplay.ColorArrayName = [None, '']
fileReaderDisplay.ScalarOpacityUnitDistance = 0.009934439403087353
# reset view to fit data
renderView1.ResetCamera()
# create a new 'Slice'
slice1 = Slice(Input=fileReader)
slice1.SliceType = 'Plane'
slice1.SliceOffsetValues = [0.0]
# init the 'Plane' selected for 'SliceType'
slice1.SliceType.Origin = [1.5, 0.5, 0.0]
# toggle 3D widget visibility (only when running from the GUI)
Hide3DWidgets(proxy=slice1)
# Properties modified on slice1
slice1.Triangulatetheslice = 0
# Properties modified on slice1.SliceType
slice1.SliceType.Normal = [0.0, 0.0, 1.0]
# show data in view
slice1Display = Show(slice1, renderView1)
# trace defaults for the display properties.
slice1Display.ColorArrayName = [None, '']
# hide data in view
Hide(fileReader, renderView1)
# create a new 'Calculator'
calculator1 = Calculator(Input=slice1)
calculator1.Function = ''
# Properties modified on calculator1
calculator1.AttributeMode = 'Cell Data'
calculator1.ResultArrayName = 'Velocity'
calculator1.Function = 'xMomentum/rho*iHat+yMomentum/rho*jHat+zMomentum/rho*kHat'
# show data in view
calculator1Display = Show(calculator1, renderView1)
# trace defaults for the display properties.
calculator1Display.ColorArrayName = [None, '']
# hide data in view
Hide(slice1, renderView1)
# get layout
viewLayout1 = GetLayout()
# split cell
viewLayout1.SplitHorizontal(0, 0.5)
# set active view
SetActiveView(None)
# Create a new 'Render View'
renderView2 = CreateView('RenderView')
renderView2.ViewSize = [684, 845]
renderView2.Background = [0.32, 0.34, 0.43]
# place view in the layout
viewLayout1.AssignView(2, renderView2)
# set active view
SetActiveView(renderView1)
# set active view
SetActiveView(renderView2)
# reset view to fit data
renderView2.ResetCamera()
# set active view
SetActiveView(renderView1)
# set active source
SetActiveSource(calculator1)
# reset view to fit data
renderView1.ResetCamera()
# set scalar coloring
ColorBy(calculator1Display, ('CELLS', 'Velocity'))
# rescale color and/or opacity maps used to include current data range
calculator1Display.RescaleTransferFunctionToDataRange(True)
# show color bar/color legend
calculator1Display.SetScalarBarVisibility(renderView1, True)
# get color transfer function/color map for 'Velocity'
velocityLUT = GetColorTransferFunction('Velocity')
velocityLUT.RGBPoints = [2.7716872731675397, 0.231373, 0.298039, 0.752941, 2.88584363658377, 0.865003, 0.865003, 0.865003, 3.0, 0.705882, 0.0156863, 0.14902]
velocityLUT.ScalarRangeInitialized = 1.0
# get opacity transfer function/opacity map for 'Velocity'
velocityPWF = GetOpacityTransferFunction('Velocity')
velocityPWF.Points = [2.7716872731675397, 0.0, 0.5, 0.0, 3.0, 1.0, 0.5, 0.0]
velocityPWF.ScalarRangeInitialized = 1
# reset view to fit data
renderView1.ResetCamera()
# create a new 'Cell Data to Point Data'
cellDatatoPointData1 = CellDatatoPointData(Input=calculator1)
# show data in view
cellDatatoPointData1Display = Show(cellDatatoPointData1, renderView1)
# trace defaults for the display properties.
cellDatatoPointData1Display.ColorArrayName = [None, '']
# hide data in view
Hide(calculator1, renderView1)
# set scalar coloring
ColorBy(cellDatatoPointData1Display, ('POINTS', 'Velocity'))
# rescale color and/or opacity maps used to include current data range
cellDatatoPointData1Display.RescaleTransferFunctionToDataRange(True)
# show color bar/color legend
cellDatatoPointData1Display.SetScalarBarVisibility(renderView1, True)
# hide color bar/color legend
cellDatatoPointData1Display.SetScalarBarVisibility(renderView1, False)
# set active view
SetActiveView(renderView2)
# create a new 'Glyph'
glyph1 = Glyph(Input=cellDatatoPointData1,
GlyphType='Arrow')
glyph1.Scalars = ['POINTS', 'xMomentum']
glyph1.Vectors = ['POINTS', 'Velocity']
glyph1.ScaleMode = 'vector_components'
glyph1.ScaleFactor = 0.05
glyph1.GlyphTransform = 'Transform2'
# get color transfer function/color map for 'xMomentum'
xMomentumLUT = GetColorTransferFunction('xMomentum')
xMomentumLUT.RGBPoints = [2.9800820350646973, 0.231373, 0.298039, 0.752941, 2.9900410175323486, 0.865003, 0.865003, 0.865003, 3.0, 0.705882, 0.0156863, 0.14902]
xMomentumLUT.ScalarRangeInitialized = 1.0
# show data in view
glyph1Display = Show(glyph1, renderView2)
# trace defaults for the display properties.
glyph1Display.ColorArrayName = ['POINTS', 'xMomentum']
glyph1Display.LookupTable = xMomentumLUT
# reset view to fit data
renderView2.ResetCamera()
# get opacity transfer function/opacity map for 'xMomentum'
xMomentumPWF = GetOpacityTransferFunction('xMomentum')
xMomentumPWF.Points = [2.9800820350646973, 0.0, 0.5, 0.0, 3.0, 1.0, 0.5, 0.0]
xMomentumPWF.ScalarRangeInitialized = 1
# hide color bar/color legend
glyph1Display.SetScalarBarVisibility(renderView2, False)
# reset view to fit data
renderView2.ResetCamera()
# Properties modified on glyph1
glyph1.ScaleMode = 'vector'
# reset view to fit data
renderView2.ResetCamera()
# Properties modified on glyph1Display
glyph1Display.Opacity = 0.5
# create a new 'Contour'
contour1 = Contour(Input=glyph1)
contour1.ContourBy = ['POINTS', 'xMomentum']
contour1.Isosurfaces = [2.9900410175323486]
contour1.PointMergeMethod = 'Uniform Binning'
# Properties modified on contour1
contour1.ContourBy = ['POINTS', 'rho']
contour1.Isosurfaces = [1.0, 1.0015344897959184, 1.0030689795918366, 1.0046034693877552, 1.0061379591836734, 1.0076724489795919, 1.0092069387755103, 1.0107414285714287, 1.0122759183673469, 1.0138104081632653, 1.0153448979591837, 1.0168793877551021, 1.0184138775510203, 1.0199483673469387, 1.0214828571428571, 1.0230173469387756, 1.024551836734694, 1.0260863265306124, 1.0276208163265306, 1.029155306122449, 1.0306897959183674, 1.0322242857142858, 1.033758775510204, 1.0352932653061224, 1.0368277551020408, 1.0383622448979593, 1.0398967346938774, 1.0414312244897959, 1.0429657142857143, 1.0445002040816327, 1.046034693877551, 1.0475691836734695, 1.049103673469388, 1.0506381632653063, 1.0521726530612245, 1.053707142857143, 1.0552416326530611, 1.0567761224489796, 1.058310612244898, 1.0598451020408164, 1.0613795918367348, 1.0629140816326532, 1.0644485714285716, 1.0659830612244898, 1.0675175510204082, 1.0690520408163267, 1.0705865306122448, 1.0721210204081633, 1.0736555102040817, 1.07519]
# show data in view
contour1Display = Show(contour1, renderView2)
# trace defaults for the display properties.
contour1Display.ColorArrayName = [None, '']
# hide data in view
Hide(glyph1, renderView2)
# reset view to fit data
renderView2.ResetCamera()
# Properties modified on contour1
contour1.Isosurfaces = [1.0, 1.0083544444444443, 1.0167088888888889, 1.0250633333333334, 1.0334177777777778, 1.0417722222222223, 1.0501266666666669, 1.0584811111111112, 1.0668355555555555, 1.07519]
# set active view
SetActiveView(renderView1)
# set active source
SetActiveSource(cellDatatoPointData1)
# reset view to fit data
renderView1.ResetCamera()
# set active view
SetActiveView(renderView2)
# set active source
SetActiveSource(glyph1)
# show data in view
glyph1Display = Show(glyph1, renderView2)
# hide color bar/color legend
glyph1Display.SetScalarBarVisibility(renderView2, False)
# reset view to fit data
renderView2.ResetCamera()
# set active view
SetActiveView(renderView1)
# current camera placement for renderView1
renderView1.CameraPosition = [1.5750000476837158, 0.4999999925494194, 7.81776063600701]
renderView1.CameraFocalPoint = [1.5750000476837158, 0.4999999925494194, 0.0]
renderView1.CameraParallelScale = 2.047162736490416
# save Velocity screenshot
velocityImageName = path.splitext(fileName)[0] + "_velocity_" + str(count) + ".png"
print "\tExporting %s" % velocityImageName
SaveScreenshot(velocityImageName, magnification=3, quality=100, view=renderView1)
# set active view
SetActiveView(renderView2)
# current camera placement for renderView2
renderView2.CameraPosition = [1.5750000476837158, 0.4999999925494194, 7.81776063600701]
renderView2.CameraFocalPoint = [1.5750000476837158, 0.4999999925494194, 0.0]
renderView2.CameraParallelScale = 2.047162736490416
# save Density contour screenshot
densityImageName = path.splitext(fileName)[0] + "_density_" + str(count) + ".png"
print "\tExporting %s" % densityImageName
SaveScreenshot(densityImageName, magnification=3, quality=100, view=renderView2)
count = count + 1
# set active source
SetActiveSource(None)
# set active view
SetActiveView(None)
#### saving camera placements for all active views
# current camera placement for renderView1_1
#### uncomment the following to render all views
# RenderAllViews()
# alternatively, if you want to write images, you can use SaveScreenshot(...).
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the ParaView Wiki at:
http://paraview.org/Wiki/ParaView
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/paraview