[Paraview] Bug with PV 5.2 with python max / min
Guillaume Jacquenot
guillaume.jacquenot at gmail.com
Thu Nov 17 06:22:51 EST 2016
Dear all,
I have just tested the new paraview 5.2 with a python script.
With versions 4.4.0 and 5.1.2, this script worked fine.
In this script, I have a ProgrammableSource where I compute the maximum
values of two scalars with max function.
The code looks like this in the Script of the ProgrammableSource
maxValue = max(1,2)
This instruction creates an error: instead of using built-in max function,
ParaView5.2 uses a max function defined with vtk and numpy:
ParaView-5.2.0-Qt4-OpenGL2-Windows-64bit\bin\Lib\site-
packages\vtk\numpy_interface\algorithms.py line 315
And apparently, it does not work (whereas in 4.4.0 and 5.1.2 it worked,
maybe these versions did not use this function).
For the time being, I have created a dirty workaround where I have defined
new min / max functions
fmin = lambda x,y:x if x<y else y
fmax = lambda x,y:x if x>y else y
Below are the message error and a python script that reproduces the bug
Traceback (most recent call last):
File "<string>", line 20, in <module>
File "<string>", line 326, in RequestData
File "D:\ParaView-5.2.0-Qt4-OpenGL2-Windows-64bit\bin\lib\
site-packages\vtk\numpy_interface\algorithms.py", line 354, in max
return _global_func(MaxImpl(), array, axis, controller)
File "D:\ParaView-5.2.0-Qt4-OpenGL2-Windows-64bit\bin\lib\
site-packages\vtk\numpy_interface\algorithms.py", line 182, in _global_func
res = impl.op()(array, axis)
File "D:\ParaView-5.2.0-Qt4-OpenGL2-Windows-64bit\bin\lib\
site-packages\vtk\numpy_interface\internal_algorithms.py", line 363, in max
ans = numpy.max(narray, axis)
File "D:\ParaView-5.2.0-Qt4-OpenGL2-Windows-64bit\bin\lib\
site-packages\numpy\core\fromnumeric.py", line 2125, in amax
out=out, keepdims=keepdims)
File "D:\ParaView-5.2.0-Qt4-OpenGL2-Windows-64bit\bin\lib\
site-packages\numpy\core\_methods.py", line 17, in _amax
out=out, keepdims=keepdims)
Test case reproducing the bug:
from paraview.simple import *
paraview.simple._DisableFirstRenderCameraReset()
programmableSource1 = ProgrammableSource()
programmableSource1.Script = \
"""gg=max(5.0,6.0)
#This script generates a helix curve.
#This is intended as the script of a 'Programmable Source'
import math
numPts = 80 # Points along Helix
length = 8.0 # Length of Helix
rounds = 3.0 # Number of times around
#Get a vtk.PolyData object for the output
pdo = self.GetPolyDataOutput()
#This will store the points for the Helix
newPts = vtk.vtkPoints()
for i in range(0, numPts):
#Generate the Points along the Helix
x = i*length/numPts
y = math.sin(i*rounds*2*math.pi/numPts)
z = math.cos(i*rounds*2*math.pi/numPts)
#Insert the Points into the vtkPoints object
#The first parameter indicates the reference.
#value for the point. Here we add them sequentially.
#Note that the first point is at index 0 (not 1).
newPts.InsertPoint(i, x,y,z)
#Add the points to the vtkPolyData object
#Right now the points are not associated with a line -
#it is just a set of unconnected points. We need to
#create a 'cell' object that ties points together
#to make a curve (in this case). This is done below.
#A 'cell' is just an object that tells how points are
#connected to make a 1D, 2D, or 3D object.
pdo.SetPoints(newPts)
#Make a vtkPolyLine which holds the info necessary
#to create a curve composed of line segments. This
#really just hold constructor data that will be passed
#to vtkPolyData to add a new line.
aPolyLine = vtk.vtkPolyLine()
#Indicate the number of points along the line
aPolyLine.GetPointIds().SetNumberOfIds(numPts)
for i in range(0,numPts):
#Add the points to the line. The first value indicates
#the order of the point on the line. The second value
#is a reference to a point in a vtkPoints object. Depends
#on the order that Points were added to vtkPoints object.
#Note that this will not be associated with actual points
#until it is added to a vtkPolyData object which holds a
#vtkPoints object.
aPolyLine.GetPointIds().SetId(i, i)
#Allocate the number of 'cells' that will be added. We are just
#adding one vtkPolyLine 'cell' to the vtkPolyData object.
pdo.Allocate(1, 1)
#Add the poly line 'cell' to the vtkPolyData object.
pdo.InsertNextCell(aPolyLine.GetCellType(), aPolyLine.GetPointIds())
#The Helix is ready to plot! Click 'Apply'.
"""
renderView1 = GetActiveViewOrCreate('RenderView')
programmableSource1Display = Show(programmableSource1, renderView1)
renderView1.ResetCamera()
Render()
Guillaume Jacquenot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/paraview/attachments/20161117/f4470f2a/attachment.html>
More information about the ParaView
mailing list