Omniverse kit支持pybind11,让我们可以在C++中编写好dll插件作为接口提供给Omniverse kit进行python调用。
一、创建C++ dll插件,通过pybind11绑定,提供C++接口
我们先通过Visual Studio创建一个空白工程:
空白工程创建好后,我们在工程中添加一个Test类,代码结构如下:
选中cppInterface项目,编辑属性页——将项目配置类型更改为dll,并将生成的文件扩展名更改为.pyd
同时我们添加对应的c++包含目录,这里一个是python库目录,一个是pybind11库目录(如pybind11未安装,可找到omniverse kit对应的pip文件进行安装:"###\AppData\Local\ov\data\Kit\Luban Workshop\2022.2\pip3-envs\default\bin\pip.exe" install pybind11)
添加对应库目录:
我们在Test类中添加导出方法SetFilePath与GetFilePath:
#pragma once #include <string> class Test { public: void SetFilePath(const std::string& filePath); const std::string& GetFilePath() const; private: std::string m_filePath; };
#include "Test.h" void Test::SetFilePath(const std::string& filePath) { m_filePath = filePath; } const std::string& Test::GetFilePath() const { return m_filePath; }
然后我们新建一个TestBinding的cpp文件,添加对应的绑定
#include <pybind11/pybind11.h> #include "Test.h" PYBIND11_MODULE(cppInterface, m) { py::class_<Test>(m, "Test") .def(py::init<>()) .def("SetFilePath", &Test::SetFilePath) .def("GetFilePath", &Test::GetFilePath) .def("__repr__", [](const Test& object) { return "<cppInterface.Test>"; } ); }
编译成功后,至此C++代码部分结束,我们便可以在Omniverse kit中使用python对Test.pyd进行接口调用