当前位置 博文首页 > haimianjie2012的专栏:paraview:python脚本

    haimianjie2012的专栏:paraview:python脚本

    作者:[db:作者] 时间:2021-09-01 10:31

    目录

    paraview and python

    Quick Start-a Tutorial

    Getting Started

    名词解释

    python解释器

    PYTHONPATH

    paraview.simple Module

    Overview

    Connecting to a Server

    Getting Help

    Proxies and Properties

    Proxies


    ParaView/Python Scripting - KitwarePublic

    更多资料:

    ParaView and Python - KitwarePublic

    paraview.simple — ParaView/Python 5.9.1 documentation (kitware.github.io)

    Question: how to place the camera to make sure snapshot the whole dataset in python script (NOT in GUI) - ParaView Support - ParaView

    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()

    cs
    下一篇:没有了