插件开发的例子都在源码中的Examples/Plugins
文件夹中。
添加一个数据源插件
ParaView中本身带有多个数据源插件,并且被构建成ParaView的一部分。要将这样的插件添加到ParaView构建中,将它添加到ParaView/Plugins目录是目前唯一支持的机制。
一般情况下,用户应该在ParaView源码外单独构建自己的插件。但是当使用静态库构建ParaView时,将需要构建的插件添加到ParaView源码中能够保证该插件能够使用静态构建方式执行,除此之外没有其他能够使用静态库编译的插件开发方式。
在插件的代码目录中,ParaView会搜索一个名字为paraview.plugin的文件,该文件中提供了ParaView关于该插件的相关信息。这个文件包含如下内容:
# Comments are allowed
NAME
PluginName
DESCRIPTION
A description of the plugin. This text is attached to the CMake option to build this plugin.
REQUIRES_MODULES
# List of VTK modules required by the code contained in the plugin.
# This allows ParaView to build the full set of requested modules
# if the plugin is being built.
VTK::CommonCore
如果通过打开CMake选项PARAVIEW_PLUGIN_ENABLE_PluginName开启插件(自动启动或者手动启动),那么CMake会在paraview.plugin同级目录中寻找CMakeLists.txt。该文件中包含paraview_add_plugin命令,以及构建该插件需要的其他库。
静态链接程序中的插件
可以在编译时将插件导入到基于ParaView的应用程序中。当静态构建基于ParaView的应用程序时,这是从插件引入组件的唯一选择。当静态构建时(即,将BUILD_SHARED_LIBS设置为false),ParaView将通过插入必要的PV_PLUGIN_IMPORT_INIT和PV_PLUGIN_IMPORT宏来自动链接和加载通过CMake启用的插件。
下面的代码展示了PV_PLUGIN宏,该宏用于静态加载插件。
# define PARAVIEW_BUILDING_PLUGIN
# include "vtkPVPlugin.h"
// Adds required forward declarations
PV_PLUGIN_IMPORT_INIT(MyFilterPlugin)
PV_PLUGIN_IMPORT_INIT(MyReaderPlugin)
class MyMainWindow : public QMainWindow
{
// ...
};
MyMainWindow::MyMainWindow(...)
{
// ... after initialization ...
// Calls relevant callbacks to load the plugins and update the GUI/Server-Manager
PV_PLUGIN_IMPORT(MyFilterPlugin)
PV_PLUGIN_IMPORT(MyReaderPlugin)
}
更详细的代码请参考ParaView源码中的Examples文件夹