|
|
Line 1: |
Line 1: |
| == ParaView3's python programmable filter. ==
| | This page moved [http://www.paraview.org/Wiki/Python_Programmable_Filter here]. |
| | |
| The python programmable filter is a general purpose filter that the end user can program within the paraview GUI to manipulate datasets as needed. To use the filter, turn the PARAVIEW_ENABLE_PYTHON_FILTER cmake option on. This causes the make process to wrap paraview's classes into python callable format. The wrapping process is identical to that for the PARAVIEW_EMBED_PYTHON option and the two share the same sets of libraries at run time.
| |
| | |
| The filter is a wrapper around VTK's vtkProgrammableFilter class and adds to it:
| |
| * a string containing the user's script for the filter to execute
| |
| * an instance of the python interpreter with the wrapped paraview libraries imported
| |
| * the ability to easily change the output dataset type.
| |
| | |
| When the user selects "PythonScript" from the Filters menu, an empty programmable filter is created. The default behavior of the empty script is create a dataset if the same type as its input and to copy through the input dataset's structure. The GUI provides a selection menu where the user can choose from the five primary vtk dataset types for the output. The GUI also provides a text entry area where the user can type, edit or paste in a python script.
| |
| | |
| The following figure shows a python script that modifies the geometry of its input dataset.
| |
| [[Image:PyScriptFig1.jpg]] | |
| | |
| #reads a poly data and modifies the geometry
| |
| pdi = self.GetPolyDataInput()
| |
| pdo = self.GetPolyDataOutput()
| |
| newPts = paraview.vtkPoints()
| |
| numPts = pdi.GetNumberOfPoints()
| |
| for i in range(0, numPts):
| |
| coord = pdi.GetPoint(i)
| |
| x,y,z = coord[:3]
| |
| x = x * 2
| |
| y = y * 0.5
| |
| z = 1
| |
| newPts.InsertPoint(i, x,y,z)
| |
| pdo.SetPoints(newPts)
| |
| | |
| | |
| The following figure shows a python script that produces an image data output with one cell per point in its input polygonal dataset.
| |
| [[Image:PyScriptFig2.jpg]]
| |
| | |
| #this example creates an Nx1x1 imagedata output
| |
| #and populates its cells with the point centered
| |
| #scalars of the input dataset
| |
|
| |
| #get a hold of the input
| |
| pdi = self.GetInput()
| |
| numPts = pdi.GetNumberOfPoints()
| |
|
| |
| #create the output dataset with one cell per point
| |
| ido = self.GetOutput()
| |
| ido.SetDimensions(numPts+1,2,2)
| |
| ido.SetOrigin(-1,-1,-1)
| |
| ido.SetSpacing(.1,.1,.1)
| |
| ido.SetWholeExtent(0,numPts,0,1,0,1)
| |
| ido.AllocateScalars()
| |
|
| |
| #choose an input point data array to copy
| |
| ivals = pdi.GetPointData().GetScalars()
| |
| ca = paraview.vtkFloatArray()
| |
| ca.SetName(ivals.GetName())
| |
| ca.SetNumberOfComponents(1)
| |
| ca.SetNumberOfTuples(numPts)
| |
| #add the new array to the output
| |
| ido.GetCellData().AddArray(ca)
| |
|
| |
| #copy the values over element by element
| |
| for i in range(0, numPts):
| |
| ca.SetValue(i, ivals.GetValue(i))
| |