Scripting Changes Progress
From ParaQ Wiki
Jump to navigationJump to search
Progress
We developed a new Python module called simple. To load it, use
from paraview.simple import *
As discussed in Scripting Changes, this is a procedural interface. Here is a simple example (demo1 in the simple module):
ss = Sphere(Radius=2, ThetaResolution=32) shr = Shrink(Input=ss) cs = Cone() app = AppendDatasets() app.Input = [shr, cs] Show(app) Render()
Here is another example:
# Create the exodus reader and specify a file name reader = ExodusIIReader(FileName=fname) # Get the list of point arrays. avail = reader.PointVariables.Available print avail # Select all arrays reader.PointVariables = avail # Turn on the visibility of the reader Show(reader) # Set representation to wireframe SetDisplayProperties(Representation = "Wireframe") # Black background is not pretty SetViewProperties(Background = [0.4, 0.4, 0.6]) Render() # Change the elevation of the camera. See VTK documentation of vtkCamera # for camera parameters. # NOTE: THIS WILL BE SIMPLER GetActiveCamera().Elevation(45) Render() # Now that the reader executed, let's get some information about it's # output. pdi = reader[0].PointData # This prints a list of all read point data arrays as well as their # value ranges. print 'Number of point arrays:', len(pdi) for i in range(len(pdi)): ai = pdi[i] print "----------------" print "Array:", i, " ", ai.Name, ":" numComps = ai.GetNumberOfComponents() print "Number of components:", numComps for j in range(numComps): print "Range:", ai.Range(j) # White is boring. Let's color the geometry using a variable. # First create a lookup table. This object controls how scalar # values are mapped to colors. See VTK documentation for # details. # Map min (0.00678) to blue, max (0.0288) to red SetDisplayProperties(LookupTable = MakeBlueToRedLT(0.00678, 0.0288)) # Color by point array called Pres SetDisplayProperties(ColorAttributeType = "POINT_DATA") SetDisplayProperties(ColorArrayName = "Pres") Render()
Issues
>> Selecting arrays in the Exodus reader >> Too hard to just say load it all (a simple method?) >> It would be helpful if all variables were in a single property, as is shown >> in the GUI. > > What about name conflicts then (same variable name in point and > element centered data)? My inclination is to just select all of them by default and then provide and "hidden" means to select one or the other. I suspect that actually having the same name for different variable types is pretty rare. That said, I'm probably just whining, and we should put off any work until someone of consequence complains. > I could add a SelectAllVariables() method to > the Exodus reader instead. Would that work? That could work. It would also be helpful to select all blocks sets or maps. Another (probably better) approach would be add a method to ArrayListProperty to select everything in it. That would automatically add the feature for all readers and filters where multiple arrays can be selected, right? >> Selecting variables to color too hard (need to specify magic POINT_DATA >> string). > > What would you recommend instead? What if ColorAttributeType was set to some default like POINT_DATA_THEN_CELL_DATA where it would first look for point data and then cell data of the given name. Again, I suspect it is fairly rare that the two arrays exist (and there is some meaningful difference between them). If the user really wants one or the other, then they can change ColorAttributeType to POINT_DATA or CELL_DATA. >> Setting the lookup table needs work >> Specifying range is awkward (you mention this) >> Specifying lookup table needs work >> >> Why can't it have a default like GUI? >> Perhaps we could move the predefined luts to SM so that Python can access >> them easily. > > Sounds good. I'll talk to Utkarsh. Any recommendations about the range > issue? Should it automatically adjust like the GUI? Yes. I think a good first pass is to make it behave just like the GUI, since we have already gone through several iterations on how it should behave (and continue to do so). By default it should scale itself, but that behavior can be overridden and reset. >> The active source/view in the GUI still needs to by synchronized with the >> active object in the Python interpreter. > Yup. I wouldn't use the active_objects class. That functionality will > move to server manager soon. OK. Should I be calling GetActiveSource() instead? >> How do you turn on the color bar from Python? Not easy to do. You have to create a ScalarBarWidgetRepresentationProxy and a LookupTable. This should go into the list of things to make easier. Do you have any recommendations about what the Python API should look like? Should we have one lookup table per array like in the GUI? >> Is there a way to diagnose what the problem might be? I can't find two >> things in the Python/servermanager-interface that would help me: >> - A facility that lists all the loaded modules (Paraview can do this) >> - Some feedback from LoadPlugin whether and why it failed. Currently >> I can do >> servermanager.LoadPlugin("/path/I/m/pretty/sure/it/doesnt/exist") >> and I will see no difference to a sucessfully loaded module