这是我的课:

#include <vtkPolyData>

class VTKUtilities

Mesh3D MeshfromVTKPolyData(vtkPolyData* pdmesh)
{
   Mesh3D mesh;
   //...
   //my conversion code to do the actual conversion
   //...
   return mesh;
}

我尝试通过SWIG将其包装到python
但是我尝试像这样在python中调用我的函数:
import VTKUtilities
import vtk

pd = vtk.vtkPolyData()
VTKUtilities.MeshfromVTKPolyData(pd)

我收到如下错误:
NotImplementedError: Wrong number of arguments... for VTKUtilities_MeshfromVTKPolyData
...
Possible prototypes are VTKUtilities::MeshfromVTKPolyData(vtkPolyData *);

我一直在阅读有关类型映射的内容,但我认为我不必为此烦恼,因为SWIG应该为我处理这个问题?
有人可以告诉我流程广告中缺少的内容吗?

最佳答案

通过这种方式,我成功包装了参数为vtkPolyData的函数:

首先,您必须在wigt .i文件中包含vtkPythonUtil:

%{

#include <vtkPythonUtil.h>

}%

然后,您必须在soji .i文件中映射vtkPolydata:
 %typemap(out) vtkPolyData* {

    PyImport_ImportModule("vtk");

    $result = vtkPythonUtil::GetObjectFromPointer ( (vtkPolyData*)$1 );
 }

%typemap(in) vtkPolyData* {

    $1 = (vtkPolyData*) vtkPythonUtil::GetPointerFromObject ( $input, "vtkPolyData" );

    if ( $1 == NULL ) { SWIG_fail; }
}

我在ITK中找到了itkVTKGlue。

最后,您需要将模块与库vtkPythonCore链接

10-05 23:43