您的位置:首页 > 编程语言 > C语言/C++

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

2017-10-13 15:39 513 查看
文章标题有点乱,感觉就是一堆乱七八糟的名词堆砌,实际上还有个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的API
PyRun_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_path
PyTuple_SetItem(pArgs, 1, Py_BuildValue("s", "1013_3")); //model_name
PyTuple_SetItem(pArgs, 2, Py_BuildValue("s", "这是今天的第三次测试")); //model_description
PyTuple_SetItem(pArgs, 3, Py_BuildValue("s", "feibai"));//model_tag
PyTuple_SetItem(pArgs, 4, Py_BuildValue("s", "gaming"));//model_categlorie
PyObject* 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下执行





在网页上查看,有了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: