1、mwArray转换成mwString
mwArray result;
mwString ss = result.ToString();
2、mwString转换成string
mwString ss;
const char* ass = ss.operator const char* ();
qDebug() << ass;
3、mwArray结构体数据读取
示例一:
mwArray surface_data;
mwString peak = surface_data(2).ToString();
示例二:
mwArray surface_data;
mwString peak = surface_data(2)(1).ToString();
4、矩阵维数、行数、列数、元素个数
# 矩阵维数,1代表一维数组,2代表二维数组
mwSize dims = surface_data(1)(1).NumberOfDimensions();
各维的具体大小:
mwArray ::GetDimensions()返回一个数组,表示数组各维数的大小,对于向量或二维数组,返回值都是两个元素,第1个元素表示行数,第2个元素表示列数。
mwArray arrayDim = surface_data(1)(1).GetDimensions();
行数及列数:
//行数
int rowCnt = arrayDim.Get(dims, 1);
//列数
int colCnt = arrayDim.Get(dims, 2);
元素个数:
mwArray::NumberOfElements() 返回数组的元素个数,等于行数乘以列数。
5、mwArray数组赋值
mwArray:: SetData(mxUint64* buffer, mwSizelen) 用于给数组赋值
其中,buffer必须是一维数组,即便mwArray变量是一个二维数组,len是一维数组的元素个数,等于行数乘以列数。
int a[9] = { 1,2,3,4,5,6,7,8,9 };
mwArray A(3, 3, mxINT32_CLASS);
A.SetData(a, 9); //第二个参数为要设置的数的个数,大小可设为rows*cols
mwString c = A.ToString();
qDebug() << c;
打印结果为:
6、mwArray类型判断
mwArray A(4, 4, mxINT32_CLASS);
mxClassID cid= A.ClassID();
qDebug() << cid;
7、mwArray数组元素读取
可以使用mwArray::Get()函数读取数组的元素。
# 数据A为:
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
int dim=2; // 二维数组
# double value=matrixA.Get(dim,j,i); //按照dim维数数组读出,第j行, 第i列
double value=matrixA.Get(2,3,4); //结果:15
8、 含字段名mwArray结构体定义
const char* fields[] = { "x","y","z" };
# 1,1代表行数、列数;3代表字段个数;fields代表字段名
mwArray B(1, 1, 3, fields);
示例:
//给mwArray A赋值
double a[9] = { 1,4,7,2,5,8,3,6,9};
mwArray A(3, 3, mxDOUBLE_CLASS);
A.SetData(a, 9); //第二个参数为要设置的数的个数,大小可设为rows*cols
//构造含字段名的结构体cloud
const char* fields_cloud[] = { "ptx","pty","ptz" };
mwArray cloud(1, 1, 3, fields_cloud);
//依次给各个字段名赋值
cloud(1) = A;
cloud(2) = A;
cloud(3) = A;
mwString scloud = cloud.ToString();
qDebug() << scloud;
//构造含字段名的结构体material
const char* fields_material[] = { "peak","bottom"};
mwArray material(1, 1, 2, fields_material);
//依次给各字段名赋值,mwArray为数组类型,即使传入一个值,也需整合成一行一列的数组
mwArray peak_data(1, 1, mxDOUBLE_CLASS, mxREAL);
double peak[1] = {23.9};
peak_data.SetData(peak, 1);
material(1) = peak_data;
mwArray bottom_data(1, 1, mxDOUBLE_CLASS, mxREAL);
double bottom[1] = { 13.5 };
bottom_data.SetData(bottom, 1);
material(2) = bottom_data;
mwString smaterial = material.ToString();
qDebug() << smaterial;
//构建含字段名结构体fields_result
const char* fields_result[] = { "cloud","material" };
mwArray result(1, 1, 2, fields_result);
result(1) = cloud;
result(2) = material;
mwString result_data = result.ToString();
qDebug() << result_data;
运行结果:
ptx: [3x3 double]
pty: [3x3 double]
ptz: [3x3 double]
peak: 23.9000
bottom: 13.5000
cloud: [1x1 struct]
material: [1x1 struct]