来自北太天元插件开发者的问题
问题1: 我们传入参数为一个文件路径时,在原项目文件中可以绘制出图形,但在北太天元中无法绘制(可能跟我们对prhs这个输入参数的理解不太准确有关系)。
void show_mesh(int nlhs, bxArray *plhs[], int nrhs, const bxArray *prhs[]){
if(nrhs!=1)
return;
if(!bxIsString(prhs[0]))
return;
CTMesh mesh;
mesh.read_m((char*)prhs[0]);
回答: 注意这里的 prhs[0] 不能够直接转为 (char *), 例如写一个这样的子函数
/**
* \brief get_string 取得一个字符串
*
* \param p 是一个字符串标量 或者 一行的字符矩阵
*
* \return 字符串
*/
std::string get_string(const bxArray *p) {
if(bxIsString(p)) {
const char * chars = bxGetStringDataPr(p);
int n = bxGetStringLen(p);
std::string s;
s.resize(n);
for(int i = 0; i < n; i++) {
s[i] = chars[i];
}
return s;
}
assert(bxIsChar(p));
int m = bxGetM(p);
int n = bxGetN(p);
assert(m == 1);
std::string s;
const char *chars = bxGetChars(p);
s.resize(n);
for(int i = 0; i < n; i++) {
s[i] = chars[i];
}
return s;
}
然后上面的代码可以修改为
void show_mesh(int nlhs, bxArray *plhs[], int nrhs, const bxArray *prhs[]){
if(nrhs!=1)
return;
if(!bxIsString(prhs[0]))
return;
CTMesh mesh;
std::string str0 = get_string(prhs[0]);
mesh.read_m(str0.c_str()); //不知道这儿会不会报错说const char * 不能转成 char *
// 希望 mesh.read_m 的参数也能支持const char *
问题2: 我们尝试在main.cpp文件中使用类似std::cout的函数来输出一些相关参数来帮助我们更好的理解代码中存在的问题,但是在使用过程中发现北太天元的命令行窗口并不会输出内容。在北太天元中是否有类似的函数能够帮助我们修改main.cpp中存在的问题?
回答: 使用 bxPrintf 函数, 例如
std::string message_str("this is a message");
bxPrintf("输出的字符串: %s", message_str.c_str());