目录
ParaView/Python Scripting – KitwarePublic
更多资料:
ParaView and Python – KitwarePublic
paraview.simple — ParaView/Python 5.9.1 documentation (kitware.github.io)
paraview and python
ParaView通过Python提供了丰富的脚本支持。
此支持作为ParaView客户端(ParaView)、启用MPI的批处理应用程序(pvbatch)、ParaView python客户端(pvpython)或任何其他启用python的应用程序的一部分提供。使用Python,用户和开发人员可以访问名为Server Manager的ParaView引擎。
注意:服务器管理器Server Manager是一个库,旨在使构建分布式客户机-服务器应用程序变得容易。
本文简要介绍了ParaView的Python接口。您还可以访问Python recipes以获取一些示例。
Quick Start-a Tutorial
Getting Started
要开始与服务器管理器Server Manager交互,必须加载“simple”模块。
只要PYTHONPATH中有必要的文件,就可以从任何python解释器加载该模块。这些文件是位于paraview二进制目录中的共享库和paraview目录中的python模块:paraview/simple.py、paraview/vtk.py等。
您还可以使用pvpython(用于单机或客户机/服务器执行)、pvbatch(用于非交互、,分布式批处理)或使用ParaView客户机从Tools | python shell调用python shell来执行python脚本。使用这些时不必设置PYTHONPATH。
本教程将使用python集成开发环境IDLE。PYTHONPATH设置为:
/Users/berk/work/paraview3-build/lib:/Users/berk/work/paraview3-build/lib/site-packages
请注意,根据您的生成配置,*.libs文件可能不在“lib”下,而是在其子文件夹之一(如“lib/Release”或“lib/Debug”)下。在这些情况下,请添加*.libs所在的正确文件夹:
/Users/berk/work/paraview3-build/lib/Release:/Users/berk/work/paraview3-build/lib/site-packages
您可能还需要设置path变量以搜索共享库(即Windows上的path和Unix/Linux/Mac上的LD_LIBRARY_PATH)。相应的LD_LIBRARY_PATH路径为:
/Users/berk/work/paraview3-build/lib (/Users/berk/work/paraview3-build/bin for versions before 3.98)
(对于paraview的调试版本,在WindowsXP下,将PATH和PYTHONPATH环境变量都设置为包含${build}/lib/debug和${build}/lib/site包以使其工作。)
名词解释
python解释器
解释器(英语:Interpreter),又译为直译器,是一种电脑程序能够把高级编程语言一行一行直接转译运行。解释器不会一次把整个程序转译出来,只像一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它每转译一行程序叙述就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。
Python的下载网站:Python官网http://www.python.org
红色线打钩的都是python解释器。
PYTHONPATH
PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找。
使用PYTHONPATH环境变量,在这个环境变量中输入相关的路径,不同的路径之间用逗号(英文的!)分开,如果PYTHONPATH 变量还不存在,可以创建它!
路径会自动加入到sys.path中,而且可以在不同的python版本中共享,是一个较为方便的方法。
Python中的PYTHONPATH环境变量 – geeklove – 博客园 (cnblogs.com)
Creating a Pipeline
这个简单的模块包含许多函数来实例化源、过滤器和其他相关对象。您可以从ParaView的联机帮助(从“帮助”菜单或此处)获取此模块可以创建的对象列表:http://paraview.org/OnlineHelpCurrent/)
从创建圆锥体对象开始:
cone = Cone()
您可以使用help()获取一些有关cone对象的文档。
help(cone)
help将提供完整的属性列表。检查resolution属性设置为什么:
print(cone.Resolution)
您可以增加resolution,如下所示:
cone.Resolution = 32
或者,我们可以在创建对象时指定resolution的值:
cone = Cone(Resolution=32)
在构造过程中,可以使用关键字参数为任意数量的属性赋值:也可以更改中心。
print(cone.Center)
cone.Center = [1, 2, 3]
向量属性(如此属性)支持设置和检索单个元素以及切片(元素范围):
cone.Center[0:2] = [2, 4]
接下来,对圆锥体应用收缩过滤器:
shrinkFilter = Shrink(cone)
print(shrinkFilter.Input)
此时,如果您对获取有关收缩过滤器输出的一些信息感兴趣,可以强制它更新(这也将导致cone源代码的执行)。有关ParaView使用的VTK需求驱动管道模型详细信息,请参阅VTK书籍之一。
shrinkFilter.UpdatePipeline()
print(shrinkFilter.GetDataInformation().GetNumberOfCells())
print(shrinkFilter.GetDataInformation().GetNumberOfPoints())
稍后我们将更详细地介绍DataInformation类。
Rendering
现在已经创建了一个小管道,渲染结果。在场景中输出渲染算法需要两个对象:表示和视图。表示法负责获取数据对象并将其呈现在视图中。视图负责管理渲染上下文和表示的集合。默认情况下,“Simple”创建视图。表示对象是使用Show()自动创建的。
Show(shrinkFilter)
Render()
paraview.simple Module
Simple模块是paraview的一个组件,它使用Python在Server Manaer服务器管理器C++库的顶部编写。它的目的是使用Python更容易地创建ParaView数据分析和可视化管道。这个简单的模块可以从运行在多个应用程序中的Python解释器加载。
pvpython:pvpython应用程序与ParaView应用程序套件一起分发,是ParaView服务器的Python客户机。它支持交互式执行和批处理执行。
pvbatch:pvbatch应用程序也是与ParaView应用程序套件一起分发的,是一个Python应用程序,设计用于在分布式服务器上运行批处理脚本。当用MPI编译ParaView时,pvbatch可以作为MPI程序启动。在这种模式下,第一个节点将加载一个指定为命令行参数的Python脚本,并在所有节点上使用特殊的内置连接执行它。此应用程序不支持交互式执行。
paraview:Python脚本可以使用从Tools | Python shell调用的Python shell从paraview客户端运行。pythonshell支持交互模式以及从文件加载脚本。
外部Python解释器:如果配置了正确的环境,任何支持Python的应用程序都可以加载paraview.simple模块。为此,您要么在sys.path中的某个位置安装paraview Python模块(包括正确的共享库),要么将PYTHONPATH设置为指向正确的位置。
Overview
paraview.simple模块包含几个设计为Python友好的Python类,以及从C++服务器管理器库包装的所有类。以下部分介绍了此模块的用法,偶尔也介绍了较低级别的paraview.servermanager模块。
Connecting to a Server
ParaView可以在两种模式下运行:独立模式和客户机/服务器模式,其中服务器通常是可视化集群。在本节中,我们将讨论在客户机/服务器模式下使用ParaView时如何建立到服务器的连接。如果您使用的是ParaView图形界面,则应该使用“文件”菜单中的“连接”来连接到服务器。如果您使用的是Python shell中的ParaView(而不是图形界面中的Python控制台),则需要使用servermanager.Connect()来连接服务器。注意:不能从独立的Python shell连接到ParaView应用程序。只能连接到服务器。此方法接受四个参数,所有参数都有默认值。
def Connect(ds_host=None, ds_port=11111, rs_host=None, rs_port=11111)
连接到服务器(pvserver)时,仅指定前两个参数。这些是服务器名称(或IP地址)和端口号。
连接到数据服务器/渲染服务器对时,必须指定所有四个参数。前两个是数据服务器的主机名(或IP地址)和端口号,后两个是渲染服务器的主机名(或IP地址)和端口号。以下是一些示例:
# Connect to pvserver running on amber1 (first node of our test cluster)
# using the default port 11111
>>> Connect(‘amber1’)
# Connect to pvdataserver running on the amber cluster, pvrenderserver
# running on Berk’s desktop
>>> Connect(‘amber1’, 12000, ‘kamino’, 11111)
Note: Connect() will return None on failure. To be safe, you should check the return value of Connect().
Getting Help
您可以使用Python的内置帮助访问所有Proxy代理类型的文档。
>>> help(paraview.simple.Cone)
Help on function CreateObject in module paraview.simple:
CreateObject(*input, **params)
The Cone source can be used to add a polygonal cone to the 3D scene. The output of the
Cone source is polygonal data.
要获得完整的文档,必须创建一个实例。
>>> c = Cone()
>>> help(c)
此文档是从服务器管理器配置文件自动生成的。它与ParaView“帮助”菜单下的类文档以及以下内容相同:http://paraview.org/OnlineHelpCurrent/. 除了本文档和联机帮助之外,还有一些有用的文档来源:
- The ParaView Guide: http://www.kitware.com/products/paraviewguide.html
- The ParaView Wiki: http://paraview.org/Wiki/ParaView
- The ParaView source documentation: http://www.paraview.org/doc/
如果您有兴趣了解更多关于PARAVIEW基础的可视化工具包,请访问 http://vtk.org.
Proxies and Properties
Proxies
VTK服务器管理器设计使用代理设计模式(有关详细信息,请参阅Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides的设计模式:可重用面向对象软件的元素)。引用维基百科的话:“代理,最普遍的形式,是一个类作为另一个事物的接口。另一个事物可能是任何东西:网络连接、内存中的大对象、文件或其他昂贵或不可能复制的资源”。
对于服务器管理器Server Manager,Proxy对象充当一个或多个VTK对象的代理。大多数情况下,这些vtk 对象都是分布到服务器节点的服务器端对象。
proxy对象允许您与这些vtk对象进行交互,就好像您可以直接访问它们、操纵它们并获取有关它们的信息一样。创建可视化管道时,将创建代理proxy而不是VTK对象。
>>> sphereSource = vtk.vtkSphereSource() # VTK-Python script
>>> sphereSourceP = Sphere() # ParaView script
代理还提供一个接口来修改它维护的对象的属性。例如,instead of:
>>> sphereSource.SetCenter(1.0, 1.0, 0.0)
you can write the following:
>>> sphere.Center = [1.0, 1.0, 0.0]
管道对象代理被创建时,它将被设置为活动对象。也可以将对象设置为活动对象。这相当于在管道浏览器中单击对象。
>>> c = Cone()
<paraview.servermanager.Cone object at 0xaf73090>
>>> GetActiveSource()
<paraview.servermanager.Cone object at 0xaf73090>
>>> Shrink()
<paraview.servermanager.Shrink object at 0xb4f8610>
# Make the cone active
>>> SetActiveSource(c)
在处理通过图形界面或通过加载状态创建的对象时,能够搜索现有的管道对象非常有用。为此,可以使用GetSources()和FindSource()。GetSources()返回(name,id)对象对的字典。由于多个对象可以具有相同的名称,(name,id)对唯一地标识对象。FindSource()返回给定名称的对象。如果有多个同名对象,则返回第一个对象。
要删除管道对象,需要使用delete()函数。仅仅让Python变量超出范围并不足以删除对象。按照下面的例子:
# Delete the cone source
>>> Delete(c)
# To fully remove the cone from memory, get rid of the
# variable too
>>> del c
如果不使用Python变量保存管道对象代理构造函数返回的值,则需要执行以下操作来删除对象:
Cone() # not: c = Cone()
# to delete this object:
# First, delete its entry in the ParaView's pipeline GUI or call Delete(FindSource("Cone1"))
# Then, this is needed:
import gc
gc.collect()
暂无评论内容