插件简介
c++ 开发手册
ParaView: ParaView C++ API Documentation
插件可以通过多种方式来扩展ParaView:
(1)添加新的读写器以及滤波器;
(2)添加新的自定义用户界面(GUI),比如工具栏。
(3)新的显示数据的显示器
插件分类
插件是以共享库(*.so,linux及maxos系统)或者动态链接库(*.dll,windows系统)的形式存在。对于一个能够被ParaView加载的插件,它必须使用相对应版本的ParaView进行开发。
插件可以分为两大类:
(1)服务端插件:这些插件用来扩展ParaView的算法能力。比如新的滤波算法,新的读取器。ParaView在服务端进行数据处理,所以这些插件在服务端加载。
(2)客户端插件:客户端插件用来扩展ParaView用户交互界面,比如新滤波器的属性面板工具栏以及显示界面。这些插件在客户端加载。
一般情况下,一个插件既包括服务端插件,也包括客户端插件。如一个新的滤波器插件,即需要在服务端进行数据处理,也需要在客户端进行属性设置。该插件则需要服务端和客户端都进行对应的加载。
一边情况下,开发者不需要区分一个插件是否为服务端插件或者客户端插件。只要同时在服务端及客户端进行一个插件的加载,ParaView会自动进行相关模块的处理。
插件加载方式
插件加载的方式有四种。
(1)使用GUI中的插件管理(Plugin Manager)
插件管理有加载客户端插件以及加载服务端插件(仅当连接到服务端时显示)。通过选在插件(*.dll或者*.so)文件进行加载。如果加载成功,已加载列表中会显示该插件的名称。插件管理也会列出自动加载插件的所有地址。
插件系统会记录已经加载的所有插件,这也意味着,如果没有卸载插件,未来重新打开ParaView时会自动加载之前加载过的插件。
也可以通过设置"Auto Load"选择框来进行插件自动添加。客户端插件会在系统启动时自动添加,服务端插件会在连接上服务端时自动添加。
(2)使用环境变量自动加载插件
为了让ParaView能够在启动时自动加载一系列插件,可以定义PV_PLGUIN_PATH环境变量。PV_PLUGIN_PATH是一个目录列表(Unix中使用:分隔,Windows中使用;分隔)。ParaView启动时会自动在这些目录中进行插件加载。
更加灵活的控制可以使用PV_PLUGIN_CONFIG_FILE环境变量。PV_PLUGIN_CONFIG_FILE同样是一个目录列表。这些目录下存放着一些列XML插件配置分拣。ParaView会在启动时自动加载该配置文件中的插件。XML插件配置文件格式如下:
<?xml version="1.0"?>
<Plugins>
<Plugin name="MyPlugin" filename="/absolute/path/to/libMyPlugin.so"/>
<Plugin name="MyPluginRel" filename="relative/path/to/libMyPlugin.so"/>
</Plugins>
不管状态如何,以这种方式列出的插件将总是被加载 “插件管理器”中的“自动加载”复选框。
(3)使用插件文件(*.plugins)
请确保插件是可用的,并且能够被自动加载。
在插件文件(*.plugins)中的插件会被自动列在Plugin Manager中,并且可以在Plugin Manager中选择自动加载。ParaView在编译构建时创建了默认的插件文件,里面列出了一系列默认插件。插件文件格式如下:
<?xml version="1.0"?>
<Plugins>
<Plugin name="Moments" auto_load="0"/>
<Plugin name="PrismPlugin" auto_load="0"/>
<Plugin name="PointSprite_Plugin" auto_load="0"/>
<Plugin name="pvblot" auto_load="0"/>
<Plugin name="H5PartReader" auto_load="1"/>
</Plugins>
调试插件
如果插件加载失败,定义PV_PLUGIN_DEBUG环境变量会让ParaView打印每一步的信息,并且会输出插件加载失败的原因。
***************************************************
Attempting to load /home/utkarsh/Kitware/ParaView3/ParaView3Bin/bin/libSurfaceLIC.so
Loaded shared library successfully. Now trying to validate that it's a ParaView plugin.
Updating Shared Library Paths: /home/utkarsh/Kitware/ParaView3/ParaView3Bin/bin
Plugin instance located successfully. Now loading components from the plugin instance based on the interfaces it implements.
----------------------------------------------------------------
Plugin Information:
Name : SurfaceLIC
Version : 1.0
ReqOnServer : 1
ReqOnClient : 1
ReqPlugins :
ServerManager Plugin : Yes
Python Plugin : No
CMake文件-添加ParaView包
为了创建插件,需要通过源码编译ParaView。从官网(www.paraview.org)下载的二进制包不包含一些必要的头文件或者一些必要的库。
编写插件的cmake工程需要加载ParaView,如下:
# ParaView requires CMake 3.8 in order to be used.
cmake_minimum_required(VERSION 3.8)
project(myplugin C CXX)
find_package(ParaView REQUIRED)
需要定义ParaView_DIR变量来告诉CMake,ParaView安装的地址。
需要注意的是,C 和 CXX 标志是必须的,因为ParaView需要寻找其他开发包,这些开发包可能是纯C语言编写的(如MPI),并且需要可用的C语言编译器。
加载现有的vtk滤波器
如果一个需要加载的滤波器是vtk开发的,但还没有尝试过加载到ParaView中,这个vtk滤波器可以很容易加载到ParaView中。步骤如下:
(1)编写XML文件,添加该插件
(2)将这个插件编译成共享库或者动态链接库
第一步是简单的,第二步是创建一个ParaView插件的基本步骤。
添加一个新滤波器
为ParaView添加一个新的滤波器是很常见的。该滤波器需要使用基于vtk的算法流程标准进行编写。添加一个vtk类到ParaView中需要满足以下条件:
(1)编写服务器管理配置XML文件,这个文件中描述了该滤波器的代理接口(Proxy interface)。该接口可以在客户端进行创建并修改类服务端的插件实例。该XML文件的编写方式请参考ParaView指南。
(2)为GUI编写一个配置XML文件。该文件可以让ParaView GUI识别该新类。对于滤波器,这一步是可选的,因为ParaView可以通过插件系统自动识别添加滤波器,并显示在 Alphabetical 子菜单中。用户可以使用GUI配置XML将新过滤器添加到滤波器菜单中的特定类别,或者添加新类别。对于读写器,该步骤是必须的,因为ParaView需要知道新的读写器支持的扩展有哪些。
插件资源
通过 _paraview_build_plugin_directory 变量,插件可以在运行时获取和它相关的资源。该变量只在编译成共享库或动态链接库时有效。对于静态插件,该路径为nullptr。如果一个拥有资源的插件需要支持某些资源,建议使用*.qrc文件将资源嵌入插件中。
对于安装的资源,_paraview_build_plugin_directory变量包含编译和安装目录下的插件的位置。编译目录下的资源可能位于"${CMAKE_BINARY_DIR}/${_paraview_build_plugin_directory}"中,并且安装到了安装目录"${_paraview_build_plugin_directory}"下。插件属于 ${_paraview_build_PLUGINS_COMPONENT}组件中,所以资源一般会使用与组件相关的名字。