这是我的课:
#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
链接