C++调用Python脚本上传三维模型至Sketchfab网站

来源:互联网 发布:死亡游戏4集解析知乎 编辑:程序博客网 时间:2024/06/06 19:38

文章标题有点乱,感觉就是一堆乱七八糟的名词堆砌,实际上还有个MFC没有加上去。

所以本文的三个中心就是:

1.C++调用Python、

2.使用网站API、

3.程序在MFC下执行

一、C++调用Python

1.环境:

项目属性中配置Python的头文件夹和库文件夹

#include <Python.h>

#pragma commet(lib,"python27.lib")

2.调用方式

方法其实有好几种,此处我只列举了两种。

第一种是最粗暴的办法,直接逐行调用Python脚本,谈不上C++和Python进行交互。

第二种是调用Python脚本中的模块,C++为模块传递参数。

        Py_Initialize();//调用Py_Initialize()进行初始化///方法一:逐行执行字符串char szFile[] = "test.py";FILE* fp = fopen(szFile, "r");if (fp && PyRun_SimpleString("execfile('test1.py')") != 0){fclose(fp);printf("PyRun_SimpleFile(%s)failed!", szFile);return -1;}Py_Finalize();///方法二:调用Python的APIPyRun_SimpleString("import sys");PyRun_SimpleString("print '---import sys---'");PyRun_SimpleString("sys.path.append('./')");PyObject *pArgs = PyTuple_New(5);PyTuple_SetItem(pArgs, 0, Py_BuildValue("s", "./data/test.ply")); //file_pathPyTuple_SetItem(pArgs, 1, Py_BuildValue("s", "1013_3")); //model_namePyTuple_SetItem(pArgs, 2, Py_BuildValue("s", "这是今天的第三次测试")); //model_descriptionPyTuple_SetItem(pArgs, 3, Py_BuildValue("s", "feibai"));//model_tagPyTuple_SetItem(pArgs, 4, Py_BuildValue("s", "gaming"));//model_categloriePyObject* pModule = 0;PyObject*pFunc = 0;pModule = PyImport_ImportModule("test1");//调用的Python文件名pFunc = PyObject_GetAttrString(pModule,"upload");//调用的函数名PyEval_CallObject(pFunc, pArgs);//调用函数,NULL表示参数为空Py_Finalize();//调用Py_Finalize,和Py_Initialize相对应的.

3.一些坑

Python脚本不要命名成test.py,因为Python内部有test模块,会发生调用冲突。

4.MFC下如何调用

上面的代码是控制台下的方式,放到MFC里面实际上没有什么本质变化,只是传递参数的时候,CString转成char*就可以了。方法是使用WideCharToMultiByte函数:

        CString fileinfo = filePath;int len = WideCharToMultiByte(CP_ACP, 0, fileinfo, -1, NULL, 0, NULL, NULL);char *filepathTmp = new char[len + 1];

5.控件和变量的绑定

双击控件以添加事件:

        model_tag.GetString();UpdateData();

此时model_tag这个变量的值就是在图形界面输入的值了。

二、使用网站API

我要上传三维模型到网站Sketchfab.com,这网站需要翻墙。

听说这个网站是三维设计师的天堂,就像对于程序员的github。

注册一个账号,给一个API TOKEN,这个TOKEN是唯一的,可以调用网站给的API(Python写的)来上传模型到自己的账号。上传到公共区免费,私人空间需要缴50刀。

好了,不打广告了。

适当修改Python脚本,参数放在upload函数里面。

具体怎么调用第一步已经说了。

三、MFC下执行



在网页上查看,有了。


原创粉丝点击